[1f4adec] | 1 | /* |
---|
| 2 | Copyright (c) 2008, 2009, 2010, 2011 jerome DOT laurens AT u-bourgogne DOT fr |
---|
| 3 | |
---|
| 4 | This file is part of the SyncTeX package. |
---|
| 5 | |
---|
| 6 | Latest Revision: Tue Jun 14 08:23:30 UTC 2011 |
---|
| 7 | |
---|
| 8 | Version: 1.18 |
---|
| 9 | |
---|
| 10 | See synctex_parser_readme.txt for more details |
---|
| 11 | |
---|
| 12 | License: |
---|
| 13 | -------- |
---|
| 14 | Permission is hereby granted, free of charge, to any person |
---|
| 15 | obtaining a copy of this software and associated documentation |
---|
| 16 | files (the "Software"), to deal in the Software without |
---|
| 17 | restriction, including without limitation the rights to use, |
---|
| 18 | copy, modify, merge, publish, distribute, sublicense, and/or sell |
---|
| 19 | copies of the Software, and to permit persons to whom the |
---|
| 20 | Software is furnished to do so, subject to the following |
---|
| 21 | conditions: |
---|
| 22 | |
---|
| 23 | The above copyright notice and this permission notice shall be |
---|
| 24 | included in all copies or substantial portions of the Software. |
---|
| 25 | |
---|
| 26 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, |
---|
| 27 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES |
---|
| 28 | OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND |
---|
| 29 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT |
---|
| 30 | HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, |
---|
| 31 | WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING |
---|
| 32 | FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR |
---|
| 33 | OTHER DEALINGS IN THE SOFTWARE |
---|
| 34 | |
---|
| 35 | Except as contained in this notice, the name of the copyright holder |
---|
| 36 | shall not be used in advertising or otherwise to promote the sale, |
---|
| 37 | use or other dealings in this Software without prior written |
---|
| 38 | authorization from the copyright holder. |
---|
| 39 | |
---|
| 40 | */ |
---|
| 41 | |
---|
| 42 | /* The utilities declared here are subject to conditional implementation. |
---|
| 43 | * All the operating system special stuff goes here. |
---|
| 44 | * The problem mainly comes from file name management: path separator, encoding... |
---|
| 45 | */ |
---|
| 46 | |
---|
| 47 | # define synctex_bool_t int |
---|
| 48 | # define synctex_YES -1 |
---|
| 49 | # define synctex_ADD_QUOTES -1 |
---|
| 50 | # define synctex_COMPRESS -1 |
---|
| 51 | # define synctex_NO 0 |
---|
| 52 | # define synctex_DONT_ADD_QUOTES 0 |
---|
| 53 | # define synctex_DONT_COMPRESS 0 |
---|
| 54 | |
---|
| 55 | #ifndef __SYNCTEX_PARSER_UTILS__ |
---|
| 56 | # define __SYNCTEX_PARSER_UTILS__ |
---|
| 57 | |
---|
| 58 | #include <stdlib.h> |
---|
| 59 | |
---|
| 60 | #ifdef __cplusplus |
---|
| 61 | extern "C" { |
---|
| 62 | #endif |
---|
| 63 | |
---|
| 64 | # if defined(_WIN32) || defined(__OS2__) |
---|
| 65 | # define SYNCTEX_CASE_SENSITIVE_PATH 0 |
---|
| 66 | # define SYNCTEX_IS_PATH_SEPARATOR(c) ('/' == c || '\\' == c) |
---|
| 67 | # else |
---|
| 68 | # define SYNCTEX_CASE_SENSITIVE_PATH 1 |
---|
| 69 | # define SYNCTEX_IS_PATH_SEPARATOR(c) ('/' == c) |
---|
| 70 | # endif |
---|
| 71 | |
---|
| 72 | # if defined(_WIN32) || defined(__OS2__) |
---|
| 73 | # define SYNCTEX_IS_DOT(c) ('.' == c) |
---|
| 74 | # else |
---|
| 75 | # define SYNCTEX_IS_DOT(c) ('.' == c) |
---|
| 76 | # endif |
---|
| 77 | |
---|
| 78 | # if SYNCTEX_CASE_SENSITIVE_PATH |
---|
| 79 | # define SYNCTEX_ARE_PATH_CHARACTERS_EQUAL(left,right) (left != right) |
---|
| 80 | # else |
---|
| 81 | # define SYNCTEX_ARE_PATH_CHARACTERS_EQUAL(left,right) (toupper(left) != toupper(right)) |
---|
| 82 | # endif |
---|
| 83 | |
---|
| 84 | /* This custom malloc functions initializes to 0 the newly allocated memory. |
---|
| 85 | * There is no bzero function on windows. */ |
---|
| 86 | void *_synctex_malloc(size_t size); |
---|
| 87 | |
---|
| 88 | /* This is used to log some informational message to the standard error stream. |
---|
| 89 | * On Windows, the stderr stream is not exposed and another method is used. |
---|
| 90 | * The return value is the number of characters printed. */ |
---|
| 91 | int _synctex_error(const char * reason,...); |
---|
| 92 | |
---|
| 93 | /* strip the last extension of the given string, this string is modified! |
---|
| 94 | * This function depends on the OS because the path separator may differ. |
---|
| 95 | * This should be discussed more precisely. */ |
---|
| 96 | void _synctex_strip_last_path_extension(char * string); |
---|
| 97 | |
---|
| 98 | /* Compare two file names, windows is sometimes case insensitive... |
---|
| 99 | * The given strings may differ stricto sensu, but represent the same file name. |
---|
| 100 | * It might not be the real way of doing things. |
---|
| 101 | * The return value is an undefined non 0 value when the two file names are equivalent. |
---|
| 102 | * It is 0 otherwise. */ |
---|
| 103 | synctex_bool_t _synctex_is_equivalent_file_name(const char *lhs, const char *rhs); |
---|
| 104 | |
---|
| 105 | /* Description forthcoming.*/ |
---|
| 106 | synctex_bool_t _synctex_path_is_absolute(const char * name); |
---|
| 107 | |
---|
| 108 | /* Description forthcoming...*/ |
---|
| 109 | const char * _synctex_last_path_component(const char * name); |
---|
| 110 | |
---|
| 111 | /* Description forthcoming...*/ |
---|
| 112 | const char * _synctex_base_name(const char *path); |
---|
| 113 | |
---|
| 114 | /* If the core of the last path component of src is not already enclosed with double quotes ('"') |
---|
| 115 | * and contains a space character (' '), then a new buffer is created, the src is copied and quotes are added. |
---|
| 116 | * In all other cases, no destination buffer is created and the src is not copied. |
---|
| 117 | * 0 on success, which means no error, something non 0 means error, mainly due to memory allocation failure, or bad parameter. |
---|
| 118 | * This is used to fix a bug in the first version of pdftex with synctex (1.40.9) for which names with spaces |
---|
| 119 | * were not managed in a standard way. |
---|
| 120 | * On success, the caller owns the buffer pointed to by dest_ref (is any) and |
---|
| 121 | * is responsible of freeing the memory when done. |
---|
| 122 | * The size argument is the size of the src buffer. On return the dest_ref points to a buffer sized size+2.*/ |
---|
| 123 | int _synctex_copy_with_quoting_last_path_component(const char * src, char ** dest_ref, size_t size); |
---|
| 124 | |
---|
| 125 | /* These are the possible extensions of the synctex file */ |
---|
| 126 | extern const char * synctex_suffix; |
---|
| 127 | extern const char * synctex_suffix_gz; |
---|
| 128 | |
---|
| 129 | typedef unsigned int synctex_io_mode_t; |
---|
| 130 | |
---|
| 131 | typedef enum { |
---|
| 132 | synctex_io_append_mask = 1, |
---|
| 133 | synctex_io_gz_mask = synctex_io_append_mask<<1 |
---|
| 134 | } synctex_io_mode_masks_t; |
---|
| 135 | |
---|
| 136 | typedef enum { |
---|
| 137 | synctex_compress_mode_none = 0, |
---|
| 138 | synctex_compress_mode_gz = 1 |
---|
| 139 | } synctex_compress_mode_t; |
---|
| 140 | |
---|
| 141 | int _synctex_get_name(const char * output, const char * build_directory, char ** synctex_name_ref, synctex_io_mode_t * io_mode_ref); |
---|
| 142 | |
---|
| 143 | /* returns the correct mode required by fopen and gzopen from the given io_mode */ |
---|
| 144 | const char * _synctex_get_io_mode_name(synctex_io_mode_t io_mode); |
---|
| 145 | |
---|
| 146 | synctex_bool_t synctex_ignore_leading_dot_slash_in_path(const char ** name); |
---|
| 147 | |
---|
| 148 | #ifdef __cplusplus |
---|
| 149 | } |
---|
| 150 | #endif |
---|
| 151 | |
---|
| 152 | #endif |
---|