]> git.lyx.org Git - lyx.git/blobdiff - src/tex2lyx/Parser.cpp
tex2lyx roundtrip: Ignore the lyx-version which created
[lyx.git] / src / tex2lyx / Parser.cpp
index d87ff29546518c39322fe750ce84af98a0f7599f..1f9ae6c3c553d9ebac9ca097a3713a715d582cf8 100644 (file)
@@ -118,14 +118,9 @@ void debugToken(std::ostream & os, Token const & t, unsigned int flags)
 // Wrapper
 //
 
-bool iparserdocstream::setEncoding(std::string const & e)
+void iparserdocstream::setEncoding(std::string const & e)
 {
        is_ << lyx::setEncoding(e);
-       if (s_.empty())
-               return true;
-       cerr << "Setting encoding " << e << " too late. The encoding of `"
-            << to_utf8(s_) << "ยด is wrong." << std::endl;
-       return false;
 }
 
 
@@ -266,7 +261,8 @@ bool Parser::setEncoding(std::string const & e)
 {
        //cerr << "setting encoding to " << e << std::endl;
        encoding_iconv_ = e;
-       return is_.setEncoding(e);
+       is_.setEncoding(e);
+       return true;
 }
 
 
@@ -631,11 +627,12 @@ string const Parser::plainCommand(char left, char right, string const & name)
 }
 
 
-string const Parser::verbatimStuff(string const & end_string)
+Parser::Arg Parser::verbatimStuff(string const & end_string, bool const allow_linebreak)
 {
        if (!good())
-               return string();
+               return Arg(false, string());
 
+       pushPosition();
        ostringstream oss;
        size_t match_index = 0;
        setCatcodes(VERBATIM_CATCODES);
@@ -646,22 +643,38 @@ string const Parser::verbatimStuff(string const & end_string)
                        match_index += t.asInput().length();
                        if (match_index >= end_string.length())
                                break;
-               } else if (match_index) {
-                       oss << end_string.substr(0, match_index) << t.asInput();
-                       match_index = 0;
-               } else
-                       oss << t.asInput();
+               } else {
+                       if (!allow_linebreak && t.asInput() == "\n") {
+                               cerr << "unexpected end of input" << endl;
+                               popPosition();
+                               setCatcodes(NORMAL_CATCODES);
+                               return Arg(false, string());
+                       }
+                       if (match_index) {
+                               oss << end_string.substr(0, match_index) 
+                                   << t.asInput();
+                               match_index = 0;
+                       } else
+                               oss << t.asInput();
+               }
        }
-       setCatcodes(NORMAL_CATCODES);
-       if (!good())
+
+       if (!good()) {
                cerr << "unexpected end of input" << endl;
-       return oss.str();
+               popPosition();
+               setCatcodes(NORMAL_CATCODES);
+               return Arg(false, string());
+       }
+       setCatcodes(NORMAL_CATCODES);
+       dropPosition();
+       return Arg(true, oss.str());
 }
 
 
 string const Parser::verbatimEnvironment(string const & name)
 {
-       string s = verbatimStuff("\\end{" + name + "}");
+       //FIXME: do something if endstring is not found
+       string s = verbatimStuff("\\end{" + name + "}").second;
        // ignore one newline at beginning or end of string
        if (prefixIs(s, "\n"))
                s.erase(0,1);