From d0285733baffb1e92054ef74556c9e79a25be0fe Mon Sep 17 00:00:00 2001 From: Akira Kakuto Date: Sun, 22 Mar 2015 01:30:27 +0000 Subject: 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 --- Build/source/texk/web2c/synctexdir/ChangeLog | 8 ++++++++ .../source/texk/web2c/synctexdir/synctex_parser_utils.c | 17 ++++++++++++++--- 2 files changed, 22 insertions(+), 3 deletions(-) (limited to 'Build') 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 + + * 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 * 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 +#include /* 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 */ } } -- cgit v1.2.3