On Fri, Mar 12, 2010 at 02:18:40AM +0100, for...@lyx.org wrote:
> Author: forenr
> Date: Fri Mar 12 02:18:39 2010
> New Revision: 33723
> URL: http://www.lyx.org/trac/changeset/33723
> 
> Log:
> Fix command line parsing and allow unicode arguments for tex2lyx on Windows.

Jürgen, this is also needed in branch.

> Modified:
>    lyx-devel/trunk/src/LyX.cpp
>    lyx-devel/trunk/src/support/os.h
>    lyx-devel/trunk/src/support/os_cygwin.cpp
>    lyx-devel/trunk/src/support/os_unix.cpp
>    lyx-devel/trunk/src/support/os_win32.cpp
>    lyx-devel/trunk/src/tex2lyx/tex2lyx.cpp
> 
> Modified: lyx-devel/trunk/src/LyX.cpp
> ==============================================================================
> --- lyx-devel/trunk/src/LyX.cpp       Fri Mar 12 01:27:12 2010        (r33722)
> +++ lyx-devel/trunk/src/LyX.cpp       Fri Mar 12 02:18:39 2010        (r33723)
> @@ -1133,6 +1133,7 @@
>               // Now, remove used arguments by shifting
>               // the following ones remove places down.
>               if (remove > 0) {
> +                     os::remove_internal_args(i, remove);
>                       argc -= remove;
>                       for (int j = i; j < argc; ++j)
>                               argv[j] = argv[j + remove];
> 
> Modified: lyx-devel/trunk/src/support/os.h
> ==============================================================================
> --- lyx-devel/trunk/src/support/os.h  Fri Mar 12 01:27:12 2010        (r33722)
> +++ lyx-devel/trunk/src/support/os.h  Fri Mar 12 02:18:39 2010        (r33723)
> @@ -49,6 +49,9 @@
>  /// Returns the i-th program argument in utf8 encoding.
>  std::string utf8_argv(int i);
>  
> +/// Removes from the internal copy \p num program arguments starting from \p 
> i.
> +void remove_internal_args(int i, int num);
> +
>  /// Returns the name of the NULL device (/dev/null, null).
>  std::string const & nulldev();
>  
> 
> Modified: lyx-devel/trunk/src/support/os_cygwin.cpp
> ==============================================================================
> --- lyx-devel/trunk/src/support/os_cygwin.cpp Fri Mar 12 01:27:12 2010        
> (r33722)
> +++ lyx-devel/trunk/src/support/os_cygwin.cpp Fri Mar 12 02:18:39 2010        
> (r33723)
> @@ -228,6 +228,10 @@
>  }
>  
>  
> +void remove_internal_args(int, int)
> +{}
> +
> +
>  string current_root()
>  {
>       return string("/");
> 
> Modified: lyx-devel/trunk/src/support/os_unix.cpp
> ==============================================================================
> --- lyx-devel/trunk/src/support/os_unix.cpp   Fri Mar 12 01:27:12 2010        
> (r33722)
> +++ lyx-devel/trunk/src/support/os_unix.cpp   Fri Mar 12 02:18:39 2010        
> (r33723)
> @@ -52,6 +52,10 @@
>  }
>  
>  
> +void remove_internal_args(int, int)
> +{}
> +
> +
>  string current_root()
>  {
>       return "/";
> 
> Modified: lyx-devel/trunk/src/support/os_win32.cpp
> ==============================================================================
> --- lyx-devel/trunk/src/support/os_win32.cpp  Fri Mar 12 01:27:12 2010        
> (r33722)
> +++ lyx-devel/trunk/src/support/os_win32.cpp  Fri Mar 12 02:18:39 2010        
> (r33723)
> @@ -209,6 +209,14 @@
>  }
>  
>  
> +void remove_internal_args(int i, int num)
> +{
> +     argc_ -= num;
> +     for (int j = i; j < argc_; ++j)
> +             argv_[j] = argv_[j + num];
> +}
> +
> +
>  string current_root()
>  {
>       // _getdrive returns the current drive (1=A, 2=B, and so on).
> 
> Modified: lyx-devel/trunk/src/tex2lyx/tex2lyx.cpp
> ==============================================================================
> --- lyx-devel/trunk/src/tex2lyx/tex2lyx.cpp   Fri Mar 12 01:27:12 2010        
> (r33722)
> +++ lyx-devel/trunk/src/tex2lyx/tex2lyx.cpp   Fri Mar 12 02:18:39 2010        
> (r33723)
> @@ -381,13 +381,14 @@
>                               continue;
>               }
>  
> -             string arg(to_utf8(from_local8bit((i + 1 < argc) ? argv[i + 1] 
> : "")));
> -             string arg2(to_utf8(from_local8bit((i + 2 < argc) ? argv[i + 2] 
> : "")));
> +             string arg = (i + 1 < argc) ? os::utf8_argv(i + 1) : string();
> +             string arg2 = (i + 2 < argc) ? os::utf8_argv(i + 2) : string();
>  
>               int const remove = 1 + it->second(arg, arg2);
>  
>               // Now, remove used arguments by shifting
>               // the following ones remove places down.
> +             os::remove_internal_args(i, remove);
>               argc -= remove;
>               for (int j = i; j < argc; ++j)
>                       argv[j] = argv[j + remove];
> @@ -519,14 +520,15 @@
>  
>       lyxerr.setStream(cerr);
>  
> +     os::init(argc, argv);
> +
>       easyParse(argc, argv);
>  
>       if (argc <= 1) 
>               error_message("Not enough arguments.");
> -     os::init(argc, argv);
>  
>       try {
> -             init_package(internal_path(to_utf8(from_local8bit(argv[0]))),
> +             init_package(internal_path(os::utf8_argv(0)),
>                            cl_system_support, cl_user_support,
>                            top_build_dir_is_two_levels_up);
>       } catch (ExceptionMessage const & message) {
> @@ -538,12 +540,12 @@
>  
>       // Now every known option is parsed. Look for input and output
>       // file name (the latter is optional).
> -     string infilename = internal_path(to_utf8(from_local8bit(argv[1])));
> +     string infilename = internal_path(os::utf8_argv(1));
>       infilename = makeAbsPath(infilename).absFilename();
>  
>       string outfilename;
>       if (argc > 2) {
> -             outfilename = internal_path(to_utf8(from_local8bit(argv[2])));
> +             outfilename = internal_path(os::utf8_argv(2));
>               if (outfilename != "-")
>                       outfilename = makeAbsPath(outfilename).absFilename();
>       } else

-- 
Enrico

Reply via email to