From 2e45185cd5d43c15ba0ef7519c390850eaa7760c Mon Sep 17 00:00:00 2001 From: Jean-Marc Lasgouttes Date: Sun, 19 Apr 2009 22:13:43 +0000 Subject: [PATCH] improve tex2lyx Usage display (on error...); describe option -e on man page; remove non-implemented -p and -r options git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@29346 a592a061-630c-0410-9148-cb99ea01b6c8 --- src/tex2lyx/tex2lyx.1in | 56 ++++++++++++++--------------- src/tex2lyx/tex2lyx.cpp | 79 +++++++++++++++++++++-------------------- 2 files changed, 67 insertions(+), 68 deletions(-) diff --git a/src/tex2lyx/tex2lyx.1in b/src/tex2lyx/tex2lyx.1in index 87683247f0..338726bc06 100644 --- a/src/tex2lyx/tex2lyx.1in +++ b/src/tex2lyx/tex2lyx.1in @@ -20,14 +20,12 @@ call it from the command line only if you need to use more complicated options. .PP \fBtex2lyx\fR [ \fB\-userdir\fR \fIuserdir\fR ] [ \fB\-systemdir\fR \fIsystemdir\fR ] -[\fB\-n\fR] [\ \fB\-r\fR\ \fIrenv1\fR[,\fIrenv2\fR...]] [\ \fB\-s\fR\ \fIsfile1\fR[,\fIsfile2\fR...]] -\fIinputfile\fR [ \fB\-c\fR \fItextclass\fR ] -.PP -\fBtex2lyx\fR [ \fB\-userdir\fR \fIuserdir\fR ] [ \fB\-systemdir\fR \fIsystemdir\fR ] -[\ \fB\-r\fR\ \fIrenv1\fR[,\fIrenv2\fR...]] [\ \fB\-s\fR\ \fIsfile1\fR[,\fIsfile2\fR...]] -\fIinputfiles\fR \fB\-p\fR \fB\-c\fR \fItextclass\fR -.PP -\fBtex2lyx\fR \fB\-help\fR +[ \fB\-n\fR ] [ \fB\-c\fR \fItextclass\fR ] [\ \fB\-s\fR\ \fIsfile1\fR[,\fIsfile2\fR...]] +\fIinputfile\fR +." .PP +." \fBtex2lyx\fR [ \fB\-userdir\fR \fIuserdir\fR ] [ \fB\-systemdir\fR \fIsystemdir\fR ] +." [\ \fB\-r\fR\ \fIrenv1\fR[,\fIrenv2\fR...]] [\ \fB\-s\fR\ \fIsfile1\fR[,\fIsfile2\fR...]] +." \fIinputfiles\fR \fB\-p\fR \fB\-c\fR \fItextclass\fR .SH "OPTIONS" .TP .BI \-c @@ -41,31 +39,28 @@ creates a file of textclass \*(L"foo\*(R" and reads the LyX layout file for that Force. \fBtex2lyx\fR will not run if the .lyx file it would generate already exists. Use the \fB\-f\fR option (carefully) to clobber any existing files. .TP -.BI \-help -Help. Print out usage information and quit. -.TP .BI \-n Noweb. Translate a noweb (aka literate programming) file. This should be (almost?) equivalent to running \*(L"noweb2lyx foo.tex foo.lyx\*(R". This option requires the \fB\-c\fR option. -.TP -.BI \-p -Partial file. The input files are LaTeX fragments, with no preamble matter or -\f(CW\ebegin{document}\fR commands. This option requires the \fB\-c\fR option, since there -are no \f(CW\edocumentclass\fR commands in the files \fBtex2lyx\fR is translating. When -using this option, you can translate more than one file, as long as all files -are the same class. The LyX file created by \fBtex2lyx\fR can be included in an -existing LyX file using the \*(L"Include LyX File\*(R" command from -LyX's Insert menu. (\fBNOTE\fR: this feature of the older \fBreLyX\fR script has -not yet been implemented in \fBtex2lyx\fR). -.TP -.BI \-r -Regular environments (see the section on \fISyntax Files\fR). If you give more than one -environment, separate them with commas (not spaces). You'll probably need to -quote the environment list, especially if it has asterisk environments (foo*) -in it. If you use this command often, considering creating a personal syntax -file. (\fBNOTE\fR: this feature of the older \fBreLyX\fR script has -not yet been implemented in \fBtex2lyx\fR). +." .TP +." .BI \-p +." Partial file. The input files are LaTeX fragments, with no preamble matter or +." \f(CW\ebegin{document}\fR commands. This option requires the \fB\-c\fR option, since there +." are no \f(CW\edocumentclass\fR commands in the files \fBtex2lyx\fR is translating. When +." using this option, you can translate more than one file, as long as all files +." are the same class. The LyX file created by \fBtex2lyx\fR can be included in an +." existing LyX file using the \*(L"Include LyX File\*(R" command from +." LyX's Insert menu. (\fBNOTE\fR: this feature of the older \fBreLyX\fR script has +." not yet been implemented in \fBtex2lyx\fR). +." .TP +." .BI \-r +." Regular environments (see the section on \fISyntax Files\fR). If you give more than one +." environment, separate them with commas (not spaces). You'll probably need to +." quote the environment list, especially if it has asterisk environments (foo*) +." in it. If you use this command often, considering creating a personal syntax +." file. (\fBNOTE\fR: this feature of the older \fBreLyX\fR script has +." not yet been implemented in \fBtex2lyx\fR). .TP .BI \-s Syntax files. Input (one or more quoted, comma-separated) syntax files to read @@ -78,6 +73,9 @@ chosen. Cf. the section \f(CWFILES\fR for details. .BI \-userdir Specify a user directory. Normally, you shouldn't need this. Your LyX user directory is chosen. Cf. the section \f(CWFILES\fR for details. +.TP +.BI \-help +Help. Print out usage information and quit. .SH "DESCRIPTION" .SS "Introduction" \fBtex2lyx\fR will create a LyX file \fIdir/foo.lyx\fR from the LaTeX file diff --git a/src/tex2lyx/tex2lyx.cpp b/src/tex2lyx/tex2lyx.cpp index 1ce60e566c..be07d4c7cc 100644 --- a/src/tex2lyx/tex2lyx.cpp +++ b/src/tex2lyx/tex2lyx.cpp @@ -239,7 +239,7 @@ string documentclass; string default_encoding; string syntaxfile; bool overwrite_files = false; - +int error_code = 0; /// return the number of arguments consumed typedef int (*cmd_helper)(string const &, string const &); @@ -247,26 +247,33 @@ typedef int (*cmd_helper)(string const &, string const &); int parse_help(string const &, string const &) { - cerr << "Usage: tex2lyx [ command line switches ] []\n" - "Command line switches (case sensitive):\n" - "\t-help summarize tex2lyx usage\n" - "\t-f Force creation of .lyx files even if they exist already\n" - "\t-userdir dir try to set user directory to dir\n" - "\t-sysdir dir try to set system directory to dir\n" - "\t-c textclass declare the textclass\n" - "\t-e encoding set the default encoding (latex name)\n" + cerr << "Usage: tex2lyx [options] infile.tex [outfile.lyx]\n" + "Options:\n" + "\t-c textclass Declare the textclass.\n" + "\t-e encoding Set the default encoding (latex name).\n" + "\t-f Force overwrite of .lyx files.\n" + "\t-help Print this message and quit.\n" "\t-n translate a noweb (aka literate programming) file.\n" - "\t-s syntaxfile read additional syntax file" << endl; - exit(0); + "\t-s syntaxfile read additional syntax file.\n" + "\t-sysdir dir Set system directory to DIR.\n" + "\t-userdir DIR Set user directory to DIR." + << endl; + exit(error_code); +} + + +void error_message(string const & message) +{ + cerr << "tex2lyx: " << message << "\n\n"; + error_code = 1; + parse_help(string(), string()); } int parse_class(string const & arg, string const &) { - if (arg.empty()) { - cerr << "Missing textclass string after -c switch" << endl; - exit(1); - } + if (arg.empty()) + error_message("Missing textclass string after -c switch"); documentclass = arg; return 1; } @@ -274,10 +281,8 @@ int parse_class(string const & arg, string const &) int parse_encoding(string const & arg, string const &) { - if (arg.empty()) { - cerr << "Missing encoding string after -e switch" << endl; - exit(1); - } + if (arg.empty()) + error_message("Missing encoding string after -e switch"); default_encoding = arg; return 1; } @@ -285,10 +290,8 @@ int parse_encoding(string const & arg, string const &) int parse_syntaxfile(string const & arg, string const &) { - if (arg.empty()) { - cerr << "Missing syntaxfile string after -s switch" << endl; - exit(1); - } + if (arg.empty()) + error_message("Missing syntaxfile string after -s switch"); syntaxfile = internal_path(arg); return 1; } @@ -302,10 +305,8 @@ string cl_user_support; int parse_sysdir(string const & arg, string const &) { - if (arg.empty()) { - cerr << "Missing directory for -sysdir switch" << endl; - exit(1); - } + if (arg.empty()) + error_message("Missing directory for -sysdir switch"); cl_system_support = internal_path(arg); return 1; } @@ -313,10 +314,8 @@ int parse_sysdir(string const & arg, string const &) int parse_userdir(string const & arg, string const &) { - if (arg.empty()) { - cerr << "Missing directory for -userdir switch" << endl; - exit(1); - } + if (arg.empty()) + error_message("Missing directory for -userdir switch"); cl_user_support = internal_path(arg); return 1; } @@ -355,8 +354,12 @@ void easyParse(int & argc, char * argv[]) = cmdmap.find(argv[i]); // don't complain if not found - may be parsed later - if (it == cmdmap.end()) - continue; + if (it == cmdmap.end()) { + if (argv[i][0] == '-') + error_message(string("Unknown option `") + argv[i] + "'."); + else + 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] : ""))); @@ -498,12 +501,8 @@ int main(int argc, char * argv[]) easyParse(argc, argv); - if (argc <= 1) { - cerr << "Usage: tex2lyx [ command line switches ] []\n" - "See tex2lyx -help." << endl; - return 2; - } - + if (argc <= 1) + error_message("Not enough arguments."); os::init(argc, argv); try { @@ -554,6 +553,8 @@ int main(int argc, char * argv[]) exit(1); } encodings.read(enc_path, symbols_path); + if (!default_encoding.empty() && !encodings.fromLaTeXName(default_encoding)) + error_message("Unknown LaTeX encoding `" + default_encoding + "'"); // The real work now. masterFilePath = onlyPath(infilename); -- 2.39.2