]> git.lyx.org Git - lyx.git/blobdiff - src/tex2lyx/tex2lyx.cpp
Now tex2lyx is able to set the encoding from what it reads in the preamble.
[lyx.git] / src / tex2lyx / tex2lyx.cpp
index 4122788b1c81b9669e91fed413d722642d8cb595..6a44f9bf9790eef4dcf61bb44b3d3e31bb0fe5b4 100644 (file)
 #include "tex2lyx.h"
 
 #include "Context.h"
-#include "TextClass.h"
+#include "Encoding.h"
 #include "Layout.h"
+#include "TextClass.h"
 
-#include "support/lassert.h"
 #include "support/convert.h"
 #include "support/debug.h"
 #include "support/ExceptionMessage.h"
 #include "support/filetools.h"
+#include "support/lassert.h"
 #include "support/lstrings.h"
 #include "support/os.h"
 #include "support/Package.h"
 
 #include <cstdlib>
-#include <fstream>
 #include <iostream>
 #include <string>
 #include <sstream>
@@ -202,7 +202,7 @@ void read_environment(Parser & p, string const & begin,
  */
 void read_syntaxfile(FileName const & file_name)
 {
-       ifstream is(file_name.toFilesystemEncoding().c_str());
+       ifdocstream is(file_name.toFilesystemEncoding().c_str());
        if (!is.good()) {
                cerr << "Could not open syntax file \"" << file_name
                     << "\" for reading." << endl;
@@ -389,7 +389,7 @@ namespace {
  *  You must ensure that \p parentFilePath is properly set before calling
  *  this function!
  */
-void tex2lyx(istream & is, ostream & os)
+void tex2lyx(idocstream & is, ostream & os)
 {
        Parser p(is);
        //p.dump();
@@ -411,7 +411,7 @@ void tex2lyx(istream & is, ostream & os)
        os << ss.str();
 #ifdef TEST_PARSER
        p.reset();
-       ofstream parsertest("parsertest.tex");
+       ofdocstream parsertest("parsertest.tex");
        while (p.good())
                parsertest << p.get_token().asInput();
        // <origfile> and parsertest.tex should now have identical content
@@ -422,7 +422,10 @@ void tex2lyx(istream & is, ostream & os)
 /// convert TeX from \p infilename to LyX and write it to \p os
 bool tex2lyx(FileName const & infilename, ostream & os)
 {
-       ifstream is(infilename.toFilesystemEncoding().c_str());
+       ifdocstream is;
+       // forbid buffering on this stream
+       is.rdbuf()->pubsetbuf(0,0);
+       is.open(infilename.toFilesystemEncoding().c_str());
        if (!is.good()) {
                cerr << "Could not open input file \"" << infilename
                     << "\" for reading." << endl;
@@ -472,7 +475,7 @@ int main(int argc, char * argv[])
 {
        using namespace lyx;
 
-       setlocale(LC_CTYPE, "");
+       //setlocale(LC_CTYPE, "");
 
        lyxerr.setStream(cerr);
 
@@ -488,11 +491,11 @@ int main(int argc, char * argv[])
 
        try {
                init_package(internal_path(to_utf8(from_local8bit(argv[0]))),
-               cl_system_support, cl_user_support,
-               top_build_dir_is_two_levels_up);
+                            cl_system_support, cl_user_support,
+                            top_build_dir_is_two_levels_up);
        } catch (ExceptionMessage const & message) {
                cerr << to_utf8(message.title_) << ":\n"
-                       << to_utf8(message.details_) << endl;
+                    << to_utf8(message.details_) << endl;
                if (message.type_ == ErrorException)
                        exit(1);
        }
@@ -510,6 +513,7 @@ int main(int argc, char * argv[])
        } else
                outfilename = changeExtension(infilename, ".lyx");
 
+       // Read the syntax tables
        FileName const system_syntaxfile = libFileSearch("", "syntax.default");
        if (system_syntaxfile.empty()) {
                cerr << "Error: Could not find syntax file \"syntax.default\"." << endl;
@@ -519,9 +523,24 @@ int main(int argc, char * argv[])
        if (!syntaxfile.empty())
                read_syntaxfile(makeAbsPath(syntaxfile));
 
+       // Read the encodings table.
+       FileName const symbols_path = libFileSearch(string(), "unicodesymbols");
+       if (symbols_path.empty()) {
+               cerr << "Error: Could not find file \"unicodesymbols\"." 
+                    << endl;
+               exit(1);
+       }
+       FileName const enc_path = libFileSearch(string(), "encodings");
+       if (enc_path.empty()) {
+               cerr << "Error: Could not find file \"encodings\"." 
+                    << endl;
+               exit(1);
+       }
+       encodings.read(enc_path, symbols_path);
+
+       // The real work now.
        masterFilePath = onlyPath(infilename);
        parentFilePath = masterFilePath;
-
        if (outfilename == "-") {
                if (tex2lyx(FileName(infilename), cout))
                        return EXIT_SUCCESS;