#include "support/lyxlib.h"
#include "support/os.h"
#include "support/package.h"
+#include "support/unicode.h"
#include <boost/function.hpp>
#include <boost/filesystem/operations.hpp>
using std::vector;
using std::map;
-using lyx::support::changeExtension;
-using lyx::support::isStrUnsignedInt;
-using lyx::support::ltrim;
-using lyx::support::makeAbsPath;
-using lyx::support::onlyPath;
-using lyx::support::rtrim;
-using lyx::support::isFileReadable;
+using support::changeExtension;
+using support::FileName;
+using support::isStrUnsignedInt;
+using support::ltrim;
+using support::makeAbsPath;
+using support::onlyPath;
+using support::rtrim;
+using support::isFileReadable;
namespace fs = boost::filesystem;
+IconvProcessor & utf8ToUcs4()
+{
+ static IconvProcessor iconv(ucs4_codeset, "UTF-8");
+ return iconv;
+}
+
+
// Hacks to allow the thing to link in the lyxlayout stuff
LyXErr lyxerr(std::cerr.rdbuf());
* has almost all of them listed. For the same reason the reLyX-specific
* reLyXre environment is ignored.
*/
-void read_syntaxfile(string const & file_name)
+void read_syntaxfile(FileName const & file_name)
{
- ifstream is(file_name.c_str());
+ ifstream is(file_name.toFilesystemEncoding().c_str());
if (!is.good()) {
cerr << "Could not open syntax file \"" << file_name
<< "\" for reading." << endl;
if (it == cmdmap.end())
continue;
- string arg((i + 1 < argc) ? argv[i + 1] : "");
- string arg2((i + 2 < argc) ? argv[i + 2] : "");
+ string arg(to_utf8(from_local8bit((i + 1 < argc) ? argv[i + 1] : "")));
+ string arg2(to_utf8(from_local8bit((i + 2 < argc) ? argv[i + 2] : "")));
int const remove = 1 + it->second(arg, arg2);
/// convert TeX from \p infilename to LyX and write it to \p os
-bool tex2lyx(string const &infilename, std::ostream &os)
+bool tex2lyx(FileName const & infilename, std::ostream &os)
{
- BOOST_ASSERT(lyx::support::absolutePath(infilename));
- ifstream is(infilename.c_str());
+ ifstream is(infilename.toFilesystemEncoding().c_str());
if (!is.good()) {
cerr << "Could not open input file \"" << infilename
<< "\" for reading." << endl;
return false;
}
string const oldParentFilePath = parentFilePath;
- parentFilePath = onlyPath(infilename);
+ parentFilePath = onlyPath(infilename.absFilename());
tex2lyx(is, os);
parentFilePath = oldParentFilePath;
return true;
} // anonymous namespace
-bool tex2lyx(string const &infilename, string const &outfilename)
+bool tex2lyx(string const &infilename, FileName const &outfilename)
{
if (isFileReadable(outfilename)) {
if (overwrite_files) {
} else {
cerr << "Creating file " << outfilename << endl;
}
- ofstream os(outfilename.c_str());
+ ofstream os(outfilename.toFilesystemEncoding().c_str());
if (!os.good()) {
cerr << "Could not open output file \"" << outfilename
<< "\" for writing." << endl;
cerr << "Input file: " << infilename << "\n";
cerr << "Output file: " << outfilename << "\n";
#endif
- return tex2lyx(infilename, os);
+ return tex2lyx(FileName(infilename), os);
}
} // namespace lyx
}
lyx::support::os::init(argc, argv);
- lyx::support::init_package(argv[0], cl_system_support, cl_user_support,
- lyx::support::top_build_dir_is_two_levels_up);
+ support::init_package(to_utf8(from_local8bit(argv[0])),
+ cl_system_support, cl_user_support,
+ support::top_build_dir_is_two_levels_up);
// Now every known option is parsed. Look for input and output
// file name (the latter is optional).
- string const infilename = makeAbsPath(argv[1]);
+ string const infilename = makeAbsPath(to_utf8(from_local8bit(argv[1]))).absFilename();
string outfilename;
if (argc > 2) {
- outfilename = argv[2];
+ outfilename = to_utf8(from_local8bit(argv[2]));
if (outfilename != "-")
- outfilename = makeAbsPath(argv[2]);
+ outfilename = makeAbsPath(to_utf8(from_local8bit(argv[2]))).absFilename();
} else
outfilename = changeExtension(infilename, ".lyx");
- string const system_syntaxfile = lyx::support::libFileSearch("", "syntax.default");
+ FileName const system_syntaxfile = lyx::support::libFileSearch("", "syntax.default");
if (system_syntaxfile.empty()) {
cerr << "Error: Could not find syntax file \"syntax.default\"." << endl;
exit(1);
}
read_syntaxfile(system_syntaxfile);
if (!syntaxfile.empty())
- read_syntaxfile(syntaxfile);
+ read_syntaxfile(makeAbsPath(syntaxfile));
masterFilePath = onlyPath(infilename);
parentFilePath = masterFilePath;
if (outfilename == "-") {
- if (tex2lyx(infilename, cout))
+ if (tex2lyx(FileName(infilename), cout))
return EXIT_SUCCESS;
else
return EXIT_FAILURE;
} else {
- if (tex2lyx(infilename, outfilename))
+ if (tex2lyx(infilename, FileName(outfilename)))
return EXIT_SUCCESS;
else
return EXIT_FAILURE;