+ if (ch == -1) error();
+ else
+ {
+ parser.push(TToken(TToken::PARAMETER, ch));
+ state = ACCEPT;
+ }
+ break;
+ default:
+ assert(0);
+ break;
+ }
+
+ switch (state)
+ {
+ case ESCAPE: parser.setCursorHint("\\"); break;
+ case MACRO: parser.setCursorHint("\\" + buffer); break;
+ case PARAMETER: parser.setCursorHint("#"); break;
+ default: parser.setCursorHint(""); break;
+ }
+}
+
+void
+TPushLexer::drop(bool alt)
+{
+ std::string restore = "";
+
+ switch (state)
+ {
+ case ACCEPT:
+ case IGNORE_SPACE:
+ restore = parser.drop(alt);
+ if (restore.length() > 0 && restore[0] == '\\')
+ {
+ buffer = std::string(restore, 1, restore.length() - 1);
+ state = (buffer.length() > 0) ? MACRO : ESCAPE;
+ }
+ break;
+ case ESCAPE: