]> git.lyx.org Git - lyx.git/blobdiff - src/tex2lyx/texparser.h
some tabular fixes for the problems reported by Helge
[lyx.git] / src / tex2lyx / texparser.h
index 985ee289c1ee9e62dbfb135d6ff3a26f2a93b395..b8107f75db6d815bcac7b0e712565c3663c4c3fc 100644 (file)
@@ -1,13 +1,25 @@
+// -*- C++ -*-
+/**
+ * \file texparser.h
+ * This file is part of LyX, the document processor.
+ * Licence details can be found in the file COPYING.
+ *
+ * \author André Pönitz
+ *
+ * Full author contact details are available in file CREDITS.
+ */
 
 #ifndef PARSER_H
 #define PARSER_H
 
-#include "LString.h"
 #include <vector>
+#include <string>
+#include <utility>
 
-enum mode_type {UNDECIDED_MODE, TEXT_MODE, MATH_MODE, MATHTEXT_MODE};
 
-mode_type asMode(mode_type oldmode, string const & str);
+enum mode_type {UNDECIDED_MODE, TEXT_MODE, MATH_MODE, MATHTEXT_MODE, TABLE_MODE};
+
+mode_type asMode(mode_type oldmode, std::string const & str);
 
 
 // These are TeX's catcodes
@@ -46,7 +58,9 @@ enum {
        FLAG_EQUATION   = 1 << 9,  //  next \] leaves the loop
        FLAG_SIMPLE2    = 1 << 10, //  next \) leaves the loop
        FLAG_OPTION     = 1 << 11, //  read [...] style option
-       FLAG_BRACED     = 1 << 12  //  read {...} style argument
+       FLAG_BRACED     = 1 << 12, //  read {...} style argument
+       FLAG_CELL       = 1 << 13, //  read table cell
+       FLAG_TABBING    = 1 << 14  //  We are inside a tabbing environment
 };
 
 
@@ -62,40 +76,49 @@ public:
        ///
        Token(char c, CatCode cat) : cs_(), char_(c), cat_(cat) {}
        ///
-       Token(string const & cs) : cs_(cs), char_(0), cat_(catIgnore) {}
+       Token(std::string const & cs, CatCode cat) : cs_(cs), char_(0), cat_(cat) {}
 
        ///
-       string const & cs() const { return cs_; }
-       ///
+       std::string const & cs() const { return cs_; }
+       /// Returns the catcode of the token
        CatCode cat() const { return cat_; }
        ///
        char character() const { return char_; }
-       ///
-       string asString() const { return cs_.size() ? cs_ : string(1, char_); }
-       ///
-       string asInput() const;
+       /// Returns the token as string
+       std::string asString() const;
+       /// Returns the token verbatim
+       std::string asInput() const;
 
 private:
        ///
-       string cs_;
+       std::string cs_;
        ///
        char char_;
        ///
        CatCode cat_;
 };
 
-ostream & operator<<(ostream & os, Token const & t);
+std::ostream & operator<<(std::ostream & os, Token const & t);
 
 
-//
-// Actual parser class
-//
+/*!
+ * Actual parser class
+ *
+ * The parser parses every character of the inputstream into a token
+ * and classifies the token.
+ * The following transformations are done:
+ * - Consecutive spaces are combined into one single token with CatCode catSpace
+ * - Consecutive newlines are combined into one single token with CatCode catNewline
+ * - Comments and %\n combinations are parsed into one token with CatCode catComment
+ */
 
 class Parser {
 
 public:
        ///
-       Parser(istream & is);
+       Parser(std::istream & is);
+       ///
+       Parser(std::string const & s);
 
        ///
        int lineno() const { return lineno_; }
@@ -105,41 +128,81 @@ public:
        void dump() const;
 
        ///
-       string getArg(char left, char right);
-       ///
+       typedef std::pair<bool, std::string> Arg;
+       /*!
+        * Get an argument enclosed by \p left and \p right.
+        * \returns wether an argument was found in \p Arg.first and the
+        * argument in \p Arg.second. \see getArg().
+        */
+       Arg getFullArg(char left, char right);
+       /*!
+        * Get an argument enclosed by \p left and \p right.
+        * \returns the argument (without \p left and \p right) or the empty
+        * string if the next non-space token is not \p left. Use
+        * getFullArg() if you need to know wether there was an empty
+        * argument or no argument at all.
+        */
+       std::string getArg(char left, char right);
+       /*!
+        * \returns getFullArg('[', ']') including the brackets or the
+        * empty string if no argument was found.
+        */
+       std::string getFullOpt();
+       /// \returns getArg('[', ']') including the brackets
+       std::string getOpt();
+       /*!
+        * \returns the contents of the environment \p name.
+        * <tt>\begin{name}</tt> must be parsed already, <tt>\end{name}</tt>
+        * is parsed but not returned.
+        */
+       std::string const verbatimEnvironment(std::string const & name);
+       /// Returns the character of the current token and increments the token position.
        char getChar();
        ///
-       void error(string const & msg);
-       ///
-       void tokenize(istream & is);
+       void error(std::string const & msg);
+       /// Parses \p is into tokens
+       void tokenize(std::istream & is);
        ///
        void push_back(Token const & t);
        ///
        void pop_back();
+       /// The previous token.
+       Token const & prev_token() const;
+       /// The current token.
+       Token const & curr_token() const;
+       /// The next token.
+       Token const & next_token() const;
+       /// Make the next token current and return that.
+       Token const & get_token();
+       /// \return whether the current token starts a new paragraph
+       bool isParagraph() const;
+       /// skips spaces (and comments if \p skip_comments is true)
+       void skip_spaces(bool skip_comments = false);
+       /// puts back spaces (and comments if \p skip_comments is true)
+       void unskip_spaces(bool skip_comments = false);
+       ///
+       void lex(std::string const & s);
        ///
-       Token const & prevToken() const;
-       ///
-       Token const & nextToken() const;
+       bool good() const;
        ///
-       Token const & getToken();
-       /// skips spaces if any
-       void skipSpaces();
+       std::string verbatim_item();
        ///
-       void lex(string const & s);
+       std::string verbatimOption();
+       /// resets the parser to initial state
+       void reset();
        ///
-       bool good() const;
+       void setCatCode(char c, CatCode cat);
        ///
-       string verbatimItem();
-       ///
-       string verbatimOption();
+       CatCode getCatCode(char c) const;
 
-//private:
+private:
        ///
        int lineno_;
        ///
-       vector<Token> tokens_;
+       std::vector<Token> tokens_;
        ///
        unsigned pos_;
 };
 
+
 #endif