}
+#ifdef FILEDEBUG
+void debugToken(std::ostream & os, Token const & t, unsigned int flags)
+{
+ char sep = ' ';
+ os << "t: " << t << " flags: " << flags;
+ if (flags & FLAG_BRACE_LAST) { os << sep << "BRACE_LAST"; sep = '|'; }
+ if (flags & FLAG_RIGHT ) { os << sep << "RIGHT" ; sep = '|'; }
+ if (flags & FLAG_END ) { os << sep << "END" ; sep = '|'; }
+ if (flags & FLAG_BRACK_LAST) { os << sep << "BRACK_LAST"; sep = '|'; }
+ if (flags & FLAG_TEXTMODE ) { os << sep << "TEXTMODE" ; sep = '|'; }
+ if (flags & FLAG_ITEM ) { os << sep << "ITEM" ; sep = '|'; }
+ if (flags & FLAG_LEAVE ) { os << sep << "LEAVE" ; sep = '|'; }
+ if (flags & FLAG_SIMPLE ) { os << sep << "SIMPLE" ; sep = '|'; }
+ if (flags & FLAG_EQUATION ) { os << sep << "EQUATION" ; sep = '|'; }
+ if (flags & FLAG_SIMPLE2 ) { os << sep << "SIMPLE2" ; sep = '|'; }
+ if (flags & FLAG_OPTION ) { os << sep << "OPTION" ; sep = '|'; }
+ if (flags & FLAG_BRACED ) { os << sep << "BRACED" ; sep = '|'; }
+ if (flags & FLAG_CELL ) { os << sep << "CELL" ; sep = '|'; }
+ if (flags & FLAG_TABBING ) { os << sep << "TABBING" ; sep = '|'; }
+ os << "\n";
+}
+#endif
+
+
//
// Parser
//
}
if ((curr_token().cat() == catComment && curr_token().cs().empty()))
continue;
- if (skip_comments && curr_token().cat() == catComment)
- cerr << " Ignoring comment: " << curr_token().asInput();
- else {
+ if (skip_comments && curr_token().cat() == catComment) {
+ // If positions_ is not empty we are doing some kind
+ // of look ahead
+ if (!positions_.empty())
+ cerr << " Ignoring comment: "
+ << curr_token().asInput();
+ } else {
putback();
break;
}
putback();
else if (skip_comments && curr_token().cat() == catComment) {
// TODO: Get rid of this
- cerr << "Unignoring comment: " << curr_token().asInput();
+ // If positions_ is not empty we are doing some kind
+ // of look ahead
+ if (!positions_.empty())
+ cerr << "Unignoring comment: "
+ << curr_token().asInput();
putback();
}
else
}
+void Parser::pushPosition()
+{
+ positions_.push_back(pos_);
+}
+
+
+void Parser::popPosition()
+{
+ pos_ = positions_.back();
+ positions_.pop_back();
+}
+
+
bool Parser::good()
{
if (pos_ < tokens_.size())
}
-string Parser::getFullOpt()
+string Parser::getFullOpt(bool keepws)
{
Arg arg = getFullArg('[', ']');
if (arg.first)
return '[' + arg.second + ']';
+ if (keepws)
+ unskip_spaces(true);
return string();
}
}
-string Parser::getOptContent()
-// the same as getOpt but without the brackets
-{
- string const res = getArg('[', ']');
- return res.empty() ? string() : res;
-}
-
-
string Parser::getFullParentheseArg()
{
Arg arg = getFullArg('(', ')');