X-Git-Url: http://matita.cs.unibo.it/gitweb/?a=blobdiff_plain;f=helm%2FDEVEL%2Fmathml_editor%2Fsrc%2FTPushLexer.cc;h=73ff25c613005785daf9d2284cf7094c9ce8b99b;hb=caab26f85122e0040555139c48a9111a0b2b9fff;hp=466ee2bd8b48c51644a4c901d16f7a178d59c15f;hpb=bf29ef82dc843dcb1929b413b36801ac26441fbd;p=helm.git diff --git a/helm/DEVEL/mathml_editor/src/TPushLexer.cc b/helm/DEVEL/mathml_editor/src/TPushLexer.cc index 466ee2bd8..73ff25c61 100644 --- a/helm/DEVEL/mathml_editor/src/TPushLexer.cc +++ b/helm/DEVEL/mathml_editor/src/TPushLexer.cc @@ -3,7 +3,7 @@ #include "TPushLexer.hh" #include "APushParser.hh" -TPushLexer::TPushLexer(APushParser& p) : APushLexer(p) +TPushLexer::TPushLexer(ALogger& l, APushParser& p) : APushLexer(l, p) { state = ACCEPT; } @@ -55,7 +55,6 @@ TPushLexer::push(char ch) case ACCEPT: if (ch == '\\') state = ESCAPE; else if (ch == '#') state = PARAMETER; - else if (ch == '\b') parser.push(TToken(TToken::GDELETE)); else if (ch == -1) ; else transaction(ch, ACCEPT); break; @@ -65,10 +64,6 @@ TPushLexer::push(char ch) buffer.push_back(ch); state = MACRO; } - else if (ch == '\b') - { - state = ACCEPT; - } else if (ch == -1) error(); else { @@ -89,11 +84,6 @@ TPushLexer::push(char ch) buffer.erase(); state = PARAMETER; } - else if (ch == '\b') - { - buffer.erase(buffer.length() - 1, 1); - if (buffer.length() == 0) state = ESCAPE; - } else if (isalpha(ch)) buffer.push_back(ch); else if (ch == -1) @@ -114,7 +104,6 @@ TPushLexer::push(char ch) if (ch == '\\') state = ESCAPE; else if (ch == '#') state = PARAMETER; else if (isspace(ch)) ; - else if (ch == '\b') parser.push(TToken(TToken::GDELETE)); else if (ch == -1) state = ACCEPT; else transaction(ch, ACCEPT); break; @@ -133,10 +122,49 @@ TPushLexer::push(char ch) switch (state) { - case ESCAPE: parser.setCursor("\\"); break; - case MACRO: parser.setCursor("\\" + buffer); break; - case PARAMETER: parser.setCursor("#"); break; - default: parser.setCursor("?"); break; + 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: + state = ACCEPT; + break; + case MACRO: + if (alt) buffer.erase(); + else buffer.erase(buffer.length() - 1, 1); + if (buffer.length() == 0) state = ESCAPE; + break; + case PARAMETER: + 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; } }