]> git.lyx.org Git - lyx.git/blobdiff - src/tex2lyx/Parser.cpp
- tex2lyx/text.cpp:
[lyx.git] / src / tex2lyx / Parser.cpp
index 5fafef9944c6f7ebde6ba693bfdf8bd50f16483b..20f5058901e163d9ab7f54eece6a73b0b31e1cd3 100644 (file)
@@ -220,6 +220,20 @@ Token const Parser::next_token()
 }
 
 
+// We return a copy here because the tokens_ vector may get reallocated
+Token const Parser::next_next_token()
+{
+       static const Token dummy;
+       // If good() has not been called after the last get_token() we need
+       // to tokenize two more tokens.
+       if (pos_ + 1 >= tokens_.size()) {
+               tokenize_one();
+               tokenize_one();
+       }
+       return pos_ + 1 < tokens_.size() ? tokens_[pos_ + 1] : dummy;
+}
+
+
 // We return a copy here because the tokens_ vector may get reallocated
 Token const Parser::get_token()
 {
@@ -238,8 +252,7 @@ bool Parser::isParagraph()
        if (curr_token().cat() == catNewline &&
            (curr_token().cs().size() > 1 ||
             (next_token().cat() == catSpace &&
-             pos_ < tokens_.size() - 1 &&
-             tokens_[pos_ + 1].cat() == catNewline)))
+             next_next_token().cat() == catNewline)))
                return true;
        if (curr_token().cat() == catEscape && curr_token().cs() == "par")
                return true;
@@ -468,6 +481,49 @@ string const Parser::verbatimEnvironment(string const & name)
 }
 
 
+string const Parser::plainEnvironment(string const & name)
+{
+       if (!good())
+               return string();
+
+       ostringstream os;
+       for (Token t = get_token(); good(); t = get_token()) {
+               if (t.asInput() == "\\end") {
+                       string const end = getArg('{', '}');
+                       if (end == name)
+                               return os.str();
+                       else
+                               os << "\\end{" << end << '}';
+               } else
+                       os << t.asInput();
+       }
+       cerr << "unexpected end of input" << endl;
+       return os.str();
+}
+
+
+string const Parser::plainCommand(char left, char right, string const & name)
+{
+       if (!good())
+               return string();
+       // check if first token is really the start character
+       Token tok = get_token();
+       if (tok.character() != left) {
+               cerr << "first character does not match start character of command \\" << name << endl;
+               return string();
+       }
+       ostringstream os;
+       for (Token t = get_token(); good(); t = get_token()) {
+               if (t.character() == right) {
+                       return os.str();
+               } else
+                       os << t.asInput();
+       }
+       cerr << "unexpected end of input" << endl;
+       return os.str();
+}
+
+
 void Parser::tokenize_one()
 {
        catInit();