aboutsummaryrefslogtreecommitdiff
path: root/gui
diff options
context:
space:
mode:
authorVicent Marti2008-06-14 16:14:50 +0000
committerVicent Marti2008-06-14 16:14:50 +0000
commit8e2601d1954a758f535181ca418a2309dc58f8e4 (patch)
treecd5174049c6825b362b0b7b74defe453ff8447f4 /gui
parentd0b27cf9c66b9281899acf826cb205e19dcb7260 (diff)
downloadscummvm-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.cpp49
-rw-r--r--gui/ThemeParser.h2
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;