summaryrefslogtreecommitdiff
path: root/Build/source/texk/web2c/synctexdir/synctex_parser_utils.c
diff options
context:
space:
mode:
Diffstat (limited to 'Build/source/texk/web2c/synctexdir/synctex_parser_utils.c')
-rw-r--r--Build/source/texk/web2c/synctexdir/synctex_parser_utils.c213
1 files changed, 108 insertions, 105 deletions
diff --git a/Build/source/texk/web2c/synctexdir/synctex_parser_utils.c b/Build/source/texk/web2c/synctexdir/synctex_parser_utils.c
index 0aef5777dbb..bed67e03902 100644
--- a/Build/source/texk/web2c/synctexdir/synctex_parser_utils.c
+++ b/Build/source/texk/web2c/synctexdir/synctex_parser_utils.c
@@ -1,11 +1,12 @@
/*
-Copyright (c) 2008, 2009 jerome DOT laurens AT u-bourgogne DOT fr
+Copyright (c) 2008, 2009, 2010 , 2011 jerome DOT laurens AT u-bourgogne DOT fr
This file is part of the SyncTeX package.
-Latest Revision: Wed Nov 4 11:52:35 UTC 2009
+Latest Revision: Fri Mar 11 07:39:12 UTC 2011
+
+Version: 1.13
-Version: 1.9
See synctex_parser_readme.txt for more details
License:
@@ -185,24 +186,24 @@ synctex_bool_t _synctex_path_is_absolute(const char * name) {
}
/* We do not take care of UTF-8 */
-const char * _synctex_last_path_component(const char * name) {
+char * _synctex_last_path_component(const char * name) {
const char * c = name+strlen(name);
if(c>name) {
if(!SYNCTEX_IS_PATH_SEPARATOR(*c)) {
do {
--c;
if(SYNCTEX_IS_PATH_SEPARATOR(*c)) {
- return c+1;
+ return (char *)c+1;
}
} while(c>name);
}
- return c;/* the last path component is the void string*/
+ return (char *)c;/* the last path component is the void string*/
}
- return c;
+ return (char *)c;
}
int _synctex_copy_with_quoting_last_path_component(const char * src, char ** dest_ref, size_t size) {
- const char * lpc;
+ char * lpc;
if(src && dest_ref) {
# define dest (*dest_ref)
dest = NULL; /* Default behavior: no change and sucess. */
@@ -297,118 +298,112 @@ char * _synctex_merge_strings(const char * first,...) {
int _synctex_get_name(const char * output, const char * build_directory, char ** synctex_name_ref, synctex_compress_mode_t * compress_mode_ref)
{
if(output && synctex_name_ref && compress_mode_ref) {
-# define synctex_name (*synctex_name_ref)
-# define compress_mode (*compress_mode_ref)
/* If output is already absolute, we just have to manage the quotes and the compress mode */
- const char * basename = NULL; /* base name of output*/
size_t size = 0;
- /* Initialize the return values. */
- synctex_name = NULL;
- compress_mode = synctex_compress_mode_none;
- basename = _synctex_last_path_component(output); /* do not free, output is the owner. */
+ char * synctex_name = NULL;
+ synctex_io_mode_type compress_mode = *compress_mode_ref;
+ const char * base_name = _synctex_last_path_component(output); /* do not free, output is the owner. base name of output*/
/* Do we have a real base name ? */
- if((size = strlen(basename))>0) {
+ if(strlen(base_name)>0) {
/* Yes, we do. */
- const char * temp = NULL;
- char * corename = NULL; /* base name of output without path extension. */
- char * dirname = NULL; /* dir name of output */
- char * quoted_corename = NULL;
- char * none = NULL;
- char * gz = NULL;
- char * quoted = NULL;
- char * quoted_gz = NULL;
- char * build = NULL;
- char * build_gz = NULL;
- char * build_quoted = NULL;
- char * build_quoted_gz = NULL;
+ char * temp = NULL;
+ char * core_name = NULL; /* base name of output without path extension. */
+ char * dir_name = NULL; /* dir name of output */
+ char * quoted_core_name = NULL;
+ char * basic_name = NULL;
+ char * gz_name = NULL;
+ char * quoted_name = NULL;
+ char * quoted_gz_name = NULL;
+ char * build_name = NULL;
+ char * build_gz_name = NULL;
+ char * build_quoted_name = NULL;
+ char * build_quoted_gz_name = NULL;
struct stat buf;
- time_t time = 0;
- /* Create corename: let temp point to the dot before the path extension of basename;
+ time_t the_time = 0;
+ /* Create core_name: let temp point to the dot before the path extension of base_name;
* We start form the \0 terminating character and scan the string upward until we find a dot.
- * The first dot is not accepted. */
- temp = strrchr(basename,'.');
- size = temp - basename;
- if(size>0) {
- /* dot properly found, now create corename */
- if(NULL == (corename = (char *)malloc(size+1))) {
+ * The leading dot is not accepted. */
+ if((temp = strrchr(base_name,'.')) && (size = temp - base_name)>0) {
+ /* There is a dot and it is not at the leading position */
+ if(NULL == (core_name = (char *)malloc(size+1))) {
_synctex_error("! _synctex_get_name: Memory problem 1");
return -1;
}
- if(corename != strncpy(corename,basename,size)) {
+ if(core_name != strncpy(core_name,base_name,size)) {
_synctex_error("! _synctex_get_name: Copy problem 1");
- free(corename);
- dirname = NULL;
+ free(core_name);
+ dir_name = NULL;
return -2;
}
- corename[size] = '\0';
+ core_name[size] = '\0';
} else {
/* There is no path extension,
- * Just make a copy of basename */
- corename = _synctex_merge_strings(basename);
+ * Just make a copy of base_name */
+ core_name = _synctex_merge_strings(base_name);
}
- /* corename is properly set up, owned by "self". */
- /* creating dirname. */
- size = strlen(output)-strlen(basename);
+ /* core_name is properly set up, owned by "self". */
+ /* creating dir_name. */
+ size = strlen(output)-strlen(base_name);
if(size>0) {
/* output contains more than one path component */
- if(NULL == (dirname = (char *)malloc(size+1))) {
+ if(NULL == (dir_name = (char *)malloc(size+1))) {
_synctex_error("! _synctex_get_name: Memory problem");
- free(corename);
- dirname = NULL;
+ free(core_name);
+ dir_name = NULL;
return -1;
}
- if(dirname != strncpy(dirname,output,size)) {
+ if(dir_name != strncpy(dir_name,output,size)) {
_synctex_error("! _synctex_get_name: Copy problem");
- free(dirname);
- dirname = NULL;
- free(corename);
- dirname = NULL;
+ free(dir_name);
+ dir_name = NULL;
+ free(core_name);
+ dir_name = NULL;
return -2;
}
- dirname[size] = '\0';
+ dir_name[size] = '\0';
}
- /* dirname is properly set up. It ends with a path separator, if non void. */
- /* creating quoted_corename. */
- if(strchr(corename,' ')) {
- quoted_corename = _synctex_merge_strings("\"",corename,"\"");
+ /* dir_name is properly set up. It ends with a path separator, if non void. */
+ /* creating quoted_core_name. */
+ if(strchr(core_name,' ')) {
+ quoted_core_name = _synctex_merge_strings("\"",core_name,"\"");
}
- /* quoted_corename is properly set up. */
- if(dirname &&strlen(dirname)>0) {
- none = _synctex_merge_strings(dirname,corename,synctex_suffix,NULL);
- if(quoted_corename && strlen(quoted_corename)>0) {
- quoted = _synctex_merge_strings(dirname,quoted_corename,synctex_suffix,NULL);
+ /* quoted_core_name is properly set up. */
+ if(dir_name &&strlen(dir_name)>0) {
+ basic_name = _synctex_merge_strings(dir_name,core_name,synctex_suffix,NULL);
+ if(quoted_core_name && strlen(quoted_core_name)>0) {
+ quoted_name = _synctex_merge_strings(dir_name,quoted_core_name,synctex_suffix,NULL);
}
} else {
- none = _synctex_merge_strings(corename,synctex_suffix,NULL);
- if(quoted_corename && strlen(quoted_corename)>0) {
- quoted = _synctex_merge_strings(quoted_corename,synctex_suffix,NULL);
+ basic_name = _synctex_merge_strings(core_name,synctex_suffix,NULL);
+ if(quoted_core_name && strlen(quoted_core_name)>0) {
+ quoted_name = _synctex_merge_strings(quoted_core_name,synctex_suffix,NULL);
}
}
if(!_synctex_path_is_absolute(output) && build_directory && (size = strlen(build_directory))) {
- temp = build_directory + size - 1;
+ temp = (char *)build_directory + size - 1;
if(_synctex_path_is_absolute(temp)) {
- build = _synctex_merge_strings(build_directory,none,NULL);
- if(quoted_corename && strlen(quoted_corename)>0) {
- build_quoted = _synctex_merge_strings(build_directory,quoted,NULL);
+ build_name = _synctex_merge_strings(build_directory,basic_name,NULL);
+ if(quoted_core_name && strlen(quoted_core_name)>0) {
+ build_quoted_name = _synctex_merge_strings(build_directory,quoted_name,NULL);
}
} else {
- build = _synctex_merge_strings(build_directory,"/",none,NULL);
- if(quoted_corename && strlen(quoted_corename)>0) {
- build_quoted = _synctex_merge_strings(build_directory,"/",quoted,NULL);
+ build_name = _synctex_merge_strings(build_directory,"/",basic_name,NULL);
+ if(quoted_core_name && strlen(quoted_core_name)>0) {
+ build_quoted_name = _synctex_merge_strings(build_directory,"/",quoted_name,NULL);
}
}
}
- if(none) {
- gz = _synctex_merge_strings(none,synctex_suffix_gz,NULL);
+ if(basic_name) {
+ gz_name = _synctex_merge_strings(basic_name,synctex_suffix_gz,NULL);
}
- if(quoted) {
- quoted_gz = _synctex_merge_strings(quoted,synctex_suffix_gz,NULL);
+ if(quoted_name) {
+ quoted_gz_name = _synctex_merge_strings(quoted_name,synctex_suffix_gz,NULL);
}
- if(build) {
- build_gz = _synctex_merge_strings(build,synctex_suffix_gz,NULL);
+ if(build_name) {
+ build_gz_name = _synctex_merge_strings(build_name,synctex_suffix_gz,NULL);
}
- if(build_quoted) {
- build_quoted_gz = _synctex_merge_strings(build_quoted,synctex_suffix_gz,NULL);
+ if(build_quoted_name) {
+ build_quoted_gz_name = _synctex_merge_strings(build_quoted_name,synctex_suffix_gz,NULL);
}
/* All the others names are properly set up... */
/* retain the most recently modified file */
@@ -417,22 +412,24 @@ int _synctex_get_name(const char * output, const char * build_directory, char **
if (stat(FILENAME, &buf)) { \
free(FILENAME);\
FILENAME = NULL;\
- } else { \
- if(buf.st_mtime>time) { \
- time=buf.st_mtime; \
- synctex_name = FILENAME; \
- compress_mode = COMPRESS_MODE; \
- } \
+ } else if (buf.st_mtime>the_time) { \
+ the_time=buf.st_mtime; \
+ synctex_name = FILENAME; \
+ if (COMPRESS_MODE) { \
+ compress_mode |= synctex_io_gz_mask; \
+ } else { \
+ compress_mode &= ~synctex_io_gz_mask; \
+ } \
} \
}
- TEST(none,synctex_compress_mode_none);
- TEST(gz,synctex_compress_mode_gz);
- TEST(quoted,synctex_compress_mode_none);
- TEST(quoted_gz,synctex_compress_mode_gz);
- TEST(build,synctex_compress_mode_none);
- TEST(build_gz,synctex_compress_mode_gz);
- TEST(build_quoted,synctex_compress_mode_none);
- TEST(build_quoted_gz,synctex_compress_mode_gz);
+ TEST(basic_name,synctex_DONT_COMPRESS);
+ TEST(gz_name,synctex_COMPRESS);
+ TEST(quoted_name,synctex_DONT_COMPRESS);
+ TEST(quoted_gz_name,synctex_COMPRESS);
+ TEST(build_name,synctex_DONT_COMPRESS);
+ TEST(build_gz_name,synctex_COMPRESS);
+ TEST(build_quoted_name,synctex_DONT_COMPRESS);
+ TEST(build_quoted_gz_name,synctex_COMPRESS);
# undef TEST
/* Free all the intermediate filenames, except the one that will be used as returned value. */
# define CLEAN_AND_REMOVE(FILENAME) \
@@ -442,21 +439,27 @@ int _synctex_get_name(const char * output, const char * build_directory, char **
free(FILENAME);\
FILENAME = NULL;\
}
- CLEAN_AND_REMOVE(none);
- CLEAN_AND_REMOVE(gz);
- CLEAN_AND_REMOVE(quoted);
- CLEAN_AND_REMOVE(quoted_gz);
- CLEAN_AND_REMOVE(build);
- CLEAN_AND_REMOVE(build_gz);
- CLEAN_AND_REMOVE(build_quoted);
- CLEAN_AND_REMOVE(build_quoted_gz);
+ CLEAN_AND_REMOVE(basic_name);
+ CLEAN_AND_REMOVE(gz_name);
+ CLEAN_AND_REMOVE(quoted_name);
+ CLEAN_AND_REMOVE(quoted_gz_name);
+ CLEAN_AND_REMOVE(build_name);
+ CLEAN_AND_REMOVE(build_gz_name);
+ CLEAN_AND_REMOVE(build_quoted_name);
+ CLEAN_AND_REMOVE(build_quoted_gz_name);
# undef CLEAN_AND_REMOVE
+ /* set up the returned values */
+ * synctex_name_ref = synctex_name;
+ * compress_mode_ref = compress_mode;
return 0;
}
return -1;/* bad argument */
-# undef synctex_name
-# undef compress_mode
}
return -2;
}
+const char * _synctex_get_io_mode_name(synctex_io_mode_type io_mode) {
+ static const char * synctex_io_modes[4] = {"r","rb","a","ab"};
+ unsigned index = (io_mode & synctex_io_gz_mask) + 2 * (io_mode & synctex_io_append_mask);
+ return synctex_io_modes[index];
+}