]> git.lyx.org Git - lyx.git/blobdiff - src/tex2lyx/Parser.cpp
tex2lyx/preamble.cpp: support Vietnamese (since format 291)
[lyx.git] / src / tex2lyx / Parser.cpp
index fdfcc38bc51b9b0980f0a789b68467e0dbd14560..d387c6fcba89cfc2520a401ef1346794070fc08e 100644 (file)
@@ -110,12 +110,6 @@ ostream & operator<<(ostream & os, Token const & t)
 }
 
 
-string Token::asString() const
-{
-       return cs_;
-}
-
-
 string Token::asInput() const
 {
        if (cat_ == catComment)
@@ -154,7 +148,11 @@ Parser::~Parser()
 void Parser::setEncoding(std::string const & e)
 {
        Encoding const * enc = encodings.fromLaTeXName(e);
-       //cerr << "setting encoding to " << enc->iconvName()<<std::endl;
+       if (!enc) {
+               cerr << "Unknown encoding " << e << ". Ignoring." << std::endl;
+               return;
+       }
+       //cerr << "setting encoding to " << enc->iconvName() << std::endl;
        is_ << lyx::setEncoding(enc->iconvName());
        encoding_latex_ = e;
 }
@@ -217,20 +215,24 @@ bool Parser::isParagraph()
 }
 
 
-void Parser::skip_spaces(bool skip_comments)
+bool Parser::skip_spaces(bool skip_comments)
 {
        // We just silently return if we have no more tokens.
        // skip_spaces() should be callable at any time,
        // the caller must check p::good() anyway.
+       bool skipped = false;
        while (good()) {
                get_token();
                if (isParagraph()) {
                        putback();
                        break;
                }
-               if ( curr_token().cat() == catSpace ||
-                    curr_token().cat() == catNewline ||
-                   (curr_token().cat() == catComment && curr_token().cs().empty()))
+               if (curr_token().cat() == catSpace ||
+                   curr_token().cat() == catNewline) {
+                       skipped = true;
+                       continue;
+               }
+               if ((curr_token().cat() == catComment && curr_token().cs().empty()))
                        continue;
                if (skip_comments && curr_token().cat() == catComment)
                        cerr << "  Ignoring comment: " << curr_token().asInput();
@@ -239,6 +241,7 @@ void Parser::skip_spaces(bool skip_comments)
                        break;
                }
        }
+       return skipped;
 }
 
 
@@ -327,10 +330,15 @@ string Parser::getFullOpt()
 }
 
 
-string Parser::getOpt()
+string Parser::getOpt(bool keepws)
 {
        string const res = getArg('[', ']');
-       return res.empty() ? string() : '[' + res + ']';
+       if (res.empty()) {
+               if (keepws)
+                       unskip_spaces(true);
+               return string();
+       }
+       return '[' + res + ']';
 }
 
 
@@ -488,7 +496,7 @@ string Parser::verbatimOption()
                                putback();
                                res += '{' + verbatim_item() + '}';
                        } else
-                               res += t.asString();
+                               res += t.cs();
                }
        }
        return res;