diff options
author | Vicent Marti | 2008-06-14 16:14:50 +0000 |
---|---|---|
committer | Vicent Marti | 2008-06-14 16:14:50 +0000 |
commit | 8e2601d1954a758f535181ca418a2309dc58f8e4 (patch) | |
tree | cd5174049c6825b362b0b7b74defe453ff8447f4 /gui | |
parent | d0b27cf9c66b9281899acf826cb205e19dcb7260 (diff) | |
download | scummvm-rg350-8e2601d1954a758f535181ca418a2309dc58f8e4.tar.gz scummvm-rg350-8e2601d1954a758f535181ca418a2309dc58f8e4.tar.bz2 scummvm-rg350-8e2601d1954a758f535181ca418a2309dc58f8e4.zip |
Parser fixes.
svn-id: r32703
Diffstat (limited to 'gui')
-rw-r--r-- | gui/ThemeParser.cpp | 49 | ||||
-rw-r--r-- | gui/ThemeParser.h | 2 |
2 files changed, 31 insertions, 20 deletions
diff --git a/gui/ThemeParser.cpp b/gui/ThemeParser.cpp index 260e3911a1..bac7565773 100644 --- a/gui/ThemeParser.cpp +++ b/gui/ThemeParser.cpp @@ -44,10 +44,10 @@ namespace GUI { void ThemeParser::debug_testEval() { static const char *debug_config_text = - "<drawdata id = \"background_default\" cache = true>" + "</* lol this is just a moronic test */drawdata id = \"background_default\" cache = true>" "<draw func = \"roundedsq\" /*/fill = \"gradient\" gradient_start = \"255, 255, 128\" gradient_end = \"128, 128, 128\" size = \"auto\"/>" "<draw func = \"roundedsq\" fill = \"none\" color = /*\"0, 0, 0\"*/\"0, 1, 2\" size = \"auto\"/>" - "</drawdata>/* lol this is just a simple test*/"; + "</ drawdata>/* lol this is just a simple test*/"; _text = strdup(debug_config_text); parse(); @@ -136,18 +136,22 @@ bool ThemeParser::parse() { switch (_state) { case kParserNeedKey: - if (_text[_pos++] != '<') parserError("Expecting key start."); - else _state = kParserNeedKeyName; - break; + if (_text[_pos++] != '<' || _text[_pos] == 0) { + parserError("Expecting key start."); + break; + } - case kParserNeedKeyName: - if (_text[_pos] == '/') { + if (_text[_pos] == '/' && _text[_pos + 1] != '*') { _pos++; active_closure = true; } - + + _state = kParserNeedKeyName; + break; + + case kParserNeedKeyName: if (!parseToken()) { - parserError("Unexpected end of file while parsing token."); + parserError("Invalid key name."); break; } @@ -170,8 +174,9 @@ bool ThemeParser::parse() { if (_text[_pos++] != '>') parserError("Invalid syntax in key closure."); - - _state = kParserNeedKey; + else + _state = kParserNeedKey; + break; } @@ -184,21 +189,27 @@ bool ThemeParser::parse() { break; } - if (!parseToken()) parserError("Error when parsing key value."); - else _state = kParserNeedPropertyOperator; + if (!parseToken()) + parserError("Error when parsing key value."); + else + _state = kParserNeedPropertyOperator; + break; case kParserNeedPropertyOperator: - if (_text[_pos++] != '=') parserError("Unexpected character after key name."); - else _state = kParserNeedPropertyValue; + if (_text[_pos++] != '=') + parserError("Unexpected character after key name."); + else + _state = kParserNeedPropertyValue; + break; case kParserNeedPropertyValue: - if (!parseKeyValue(_token)) parserError("Unable to parse key value."); - else _state = kParserNeedPropertyName; - break; + if (!parseKeyValue(_token)) + parserError("Unable to parse key value."); + else + _state = kParserNeedPropertyName; - default: break; } } diff --git a/gui/ThemeParser.h b/gui/ThemeParser.h index df99893d58..0ddc111af5 100644 --- a/gui/ThemeParser.h +++ b/gui/ThemeParser.h @@ -102,7 +102,7 @@ protected: while (isValidNameChar(_text[_pos])) _token += _text[_pos++]; - return (_text[_pos] != 0); + return isspace(_text[_pos]) != 0 || _text[_pos] == '>'; } int _pos; |