summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAkira Kakuto <kakuto@fuk.kindai.ac.jp>2015-03-22 01:30:27 +0000
committerAkira Kakuto <kakuto@fuk.kindai.ac.jp>2015-03-22 01:30:27 +0000
commitd0285733baffb1e92054ef74556c9e79a25be0fe (patch)
treecf3ddd12f5e51590e7abb8c21654f7b4ce92e4f9
parent8e7bc120761bfc8920f8868f8e451118ea5f47a8 (diff)
Support multi-byte characters in SyncTeX applications (from N. Abe) (win32 only).
git-svn-id: svn://tug.org/texlive/trunk@36584 c570f23f-e606-0410-a88d-b1316a301751
-rw-r--r--Build/source/texk/web2c/synctexdir/ChangeLog8
-rw-r--r--Build/source/texk/web2c/synctexdir/synctex_parser_utils.c17
2 files changed, 22 insertions, 3 deletions
diff --git a/Build/source/texk/web2c/synctexdir/ChangeLog b/Build/source/texk/web2c/synctexdir/ChangeLog
index bd74e66505f..1e195f355e5 100644
--- a/Build/source/texk/web2c/synctexdir/ChangeLog
+++ b/Build/source/texk/web2c/synctexdir/ChangeLog
@@ -1,3 +1,11 @@
+2015-03-22 Akira Kakuto <kakuto@fuk.kindai.ac.jp>
+
+ * synctex_parser_utils.c: Use WIN32API PathFindFileName() and
+ PathFindExtension() for last_component and last_extension, respectively,
+ in _synctex_strip_last_path_extension(), in order to support multi-byte
+ characters in SyncTeX applications (win32 only).
+ From Noriyuki Abe (2015-03-22).
+
2015-03-19 Akira Kakuto <kakuto@fuk.kindai.ac.jp>
* synctex.c: Avoid minor memory leaks (win32 only).
diff --git a/Build/source/texk/web2c/synctexdir/synctex_parser_utils.c b/Build/source/texk/web2c/synctexdir/synctex_parser_utils.c
index f8a9f6f9d61..961aa319432 100644
--- a/Build/source/texk/web2c/synctexdir/synctex_parser_utils.c
+++ b/Build/source/texk/web2c/synctexdir/synctex_parser_utils.c
@@ -67,6 +67,7 @@ authorization from the copyright holder.
#ifdef SYNCTEX_WINDOWS
#include <windows.h>
+#include <shlwapi.h> /* Use shlwapi.lib */
#endif
void *_synctex_malloc(size_t size) {
@@ -116,6 +117,15 @@ void _synctex_strip_last_path_extension(char * string) {
char * last_component = NULL;
char * last_extension = NULL;
char * next = NULL;
+# if defined(SYNCTEX_WINDOWS)
+ last_component = PathFindFileName(string);
+ last_extension = PathFindExtension(string);
+ if(last_extension == NULL)return;
+ if(last_component == NULL)last_component = string;
+ if(last_extension>last_component){/* filter out paths like "my/dir/.hidden" */
+ last_extension[0] = '\0';
+ }
+# else
/* first we find the last path component */
if(NULL == (last_component = strstr(string,"/"))){
last_component = string;
@@ -125,12 +135,12 @@ void _synctex_strip_last_path_extension(char * string) {
last_component = next+1;
}
}
-# if defined(SYNCTEX_WINDOWS) || defined(SYNCTEX_OS2)
- /* On Windows, the '\' is also a path separator. */
+# if defined(SYNCTEX_OS2)
+ /* On OS2, the '\' is also a path separator. */
while((next = strstr(last_component,"\\"))){
last_component = next+1;
}
-# endif
+# endif /* SYNCTEX_OS2 */
/* then we find the last path extension */
if((last_extension = strstr(last_component,"."))){
++last_extension;
@@ -142,6 +152,7 @@ void _synctex_strip_last_path_extension(char * string) {
last_extension[0] = '\0';
}
}
+# endif /* SYNCTEX_WINDOWS */
}
}