+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();
+}
+
+