#include "support/filetools.h"
#include "support/lassert.h"
#include "support/lstrings.h"
+#include "support/Messages.h"
#include "support/os.h"
#include "support/Package.h"
namespace lyx {
+namespace frontend {
+namespace Alert {
+ void warning(docstring const & title, docstring const & message,
+ bool const &)
+ {
+ LYXERR0(title);
+ LYXERR0(message);
+ }
+}
+}
+
+
+// Dummy translation support
+Messages messages_;
+Messages const & getMessages(std::string const &)
+{
+ return messages_;
+}
+
+
+Messages const & getGuiMessages()
+{
+ return messages_;
+}
+
+
+// Keep the linker happy on Windows
+void lyx_exit(int)
+{}
+
+
string const trim(string const & a, char const * p)
{
// LASSERT(p, /**/);
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 &);
int parse_help(string const &, string const &)
{
- cerr << "Usage: tex2lyx [ command line switches ] <infile.tex> [<outfile.lyx>]\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;
}
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;
}
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;
}
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;
}
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;
}
= 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] : "")));
+ 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];
return false;
}
string const oldParentFilePath = parentFilePath;
- parentFilePath = onlyPath(infilename.absFilename());
+ parentFilePath = onlyPath(infilename.absFileName());
tex2lyx(is, os, encoding);
parentFilePath = oldParentFilePath;
return true;
lyxerr.setStream(cerr);
- easyParse(argc, argv);
+ os::init(argc, argv);
- if (argc <= 1) {
- cerr << "Usage: tex2lyx [ command line switches ] <infile.tex> [<outfile.lyx>]\n"
- "See tex2lyx -help." << endl;
- return 2;
- }
+ easyParse(argc, argv);
- os::init(argc, argv);
+ if (argc <= 1)
+ error_message("Not enough arguments.");
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) {
// 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])));
- infilename = makeAbsPath(infilename).absFilename();
+ 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();
+ outfilename = makeAbsPath(outfilename).absFileName();
} else
outfilename = changeExtension(infilename, ".lyx");
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);