diff options
author | Norbert Lange | 2009-07-17 21:23:54 +0000 |
---|---|---|
committer | Norbert Lange | 2009-07-17 21:23:54 +0000 |
commit | bb64bf008d03e01760a468d0df8cacb164725d41 (patch) | |
tree | d73710df5b07f3fa1ca30e719c1c1f58ebe0b107 /common/xmlparser.cpp | |
parent | 81ac29ebca30c352646a5b21de512087cb96a672 (diff) | |
parent | 53756ef1d022a959b24c041e18f55eef34e60dd3 (diff) | |
download | scummvm-rg350-bb64bf008d03e01760a468d0df8cacb164725d41.tar.gz scummvm-rg350-bb64bf008d03e01760a468d0df8cacb164725d41.tar.bz2 scummvm-rg350-bb64bf008d03e01760a468d0df8cacb164725d41.zip |
merge with trunk
svn-id: r42574
Diffstat (limited to 'common/xmlparser.cpp')
-rw-r--r-- | common/xmlparser.cpp | 186 |
1 files changed, 93 insertions, 93 deletions
diff --git a/common/xmlparser.cpp b/common/xmlparser.cpp index 1385af795b..534007b03d 100644 --- a/common/xmlparser.cpp +++ b/common/xmlparser.cpp @@ -276,126 +276,126 @@ bool XMLParser::parse() { continue; switch (_state) { - case kParserNeedHeader: - case kParserNeedKey: - if (_char != '<') { - parserError("Parser expecting key start."); - break; - } + case kParserNeedHeader: + case kParserNeedKey: + if (_char != '<') { + parserError("Parser expecting key start."); + break; + } + + if ((_char = _stream->readByte()) == 0) { + parserError("Unexpected end of file."); + break; + } - if ((_char = _stream->readByte()) == 0) { - parserError("Unexpected end of file."); + if (_state == kParserNeedHeader) { + if (_char != '?') { + parserError("Expecting XML header."); break; } - if (_state == kParserNeedHeader) { - if (_char != '?') { - parserError("Expecting XML header."); - break; - } + _char = _stream->readByte(); + activeHeader = true; + } else if (_char == '/') { + _char = _stream->readByte(); + activeClosure = true; + } else if (_char == '?') { + parserError("Unexpected header. There may only be one XML header per file."); + break; + } - _char = _stream->readByte(); - activeHeader = true; - } else if (_char == '/') { - _char = _stream->readByte(); - activeClosure = true; - } else if (_char == '?') { - parserError("Unexpected header. There may only be one XML header per file."); - break; - } + _state = kParserNeedKeyName; + break; - _state = kParserNeedKeyName; + case kParserNeedKeyName: + if (!parseToken()) { + parserError("Invalid key name."); break; + } - case kParserNeedKeyName: - if (!parseToken()) { - parserError("Invalid key name."); + if (activeClosure) { + if (_activeKey.empty() || _token != _activeKey.top()->name) { + parserError("Unexpected closure."); break; } - - if (activeClosure) { - if (_activeKey.empty() || _token != _activeKey.top()->name) { - parserError("Unexpected closure."); - break; - } - } else { - ParserNode *node = allocNode(); //new ParserNode; - node->name = _token; - node->ignore = false; - node->header = activeHeader; - node->depth = _activeKey.size(); - node->layout = 0; - _activeKey.push(node); + } else { + ParserNode *node = allocNode(); //new ParserNode; + node->name = _token; + node->ignore = false; + node->header = activeHeader; + node->depth = _activeKey.size(); + node->layout = 0; + _activeKey.push(node); + } + + _state = kParserNeedPropertyName; + break; + + case kParserNeedPropertyName: + if (activeClosure) { + if (!closeKey()) { + parserError("Missing data when closing key '%s'.", _activeKey.top()->name.c_str()); + break; } - _state = kParserNeedPropertyName; - break; - - case kParserNeedPropertyName: - if (activeClosure) { - if (!closeKey()) { - parserError("Missing data when closing key '%s'.", _activeKey.top()->name.c_str()); - break; - } + activeClosure = false; - activeClosure = false; + if (_char != '>') + parserError("Invalid syntax in key closure."); + else + _state = kParserNeedKey; - if (_char != '>') - parserError("Invalid syntax in key closure."); - else - _state = kParserNeedKey; + _char = _stream->readByte(); + break; + } - _char = _stream->readByte(); - break; - } + selfClosure = false; - selfClosure = false; + if (_char == '/' || (_char == '?' && activeHeader)) { + selfClosure = true; + _char = _stream->readByte(); + } - if (_char == '/' || (_char == '?' && activeHeader)) { - selfClosure = true; + if (_char == '>') { + if (activeHeader && !selfClosure) { + parserError("XML Header must be self-closed."); + } else if (parseActiveKey(selfClosure)) { _char = _stream->readByte(); + _state = kParserNeedKey; } - if (_char == '>') { - if (activeHeader && !selfClosure) { - parserError("XML Header must be self-closed."); - } else if (parseActiveKey(selfClosure)) { - _char = _stream->readByte(); - _state = kParserNeedKey; - } + activeHeader = false; + break; + } - activeHeader = false; - break; - } + if (selfClosure) + parserError("Expecting key closure after '/' symbol."); + else if (!parseToken()) + parserError("Error when parsing key value."); + else + _state = kParserNeedPropertyOperator; - if (selfClosure) - parserError("Expecting key closure after '/' symbol."); - else if (!parseToken()) - parserError("Error when parsing key value."); - else - _state = kParserNeedPropertyOperator; + break; - break; + case kParserNeedPropertyOperator: + if (_char != '=') + parserError("Syntax error after key name."); + else + _state = kParserNeedPropertyValue; - case kParserNeedPropertyOperator: - if (_char != '=') - parserError("Syntax error after key name."); - else - _state = kParserNeedPropertyValue; - - _char = _stream->readByte(); - break; + _char = _stream->readByte(); + break; - case kParserNeedPropertyValue: - if (!parseKeyValue(_token)) - parserError("Invalid key value."); - else - _state = kParserNeedPropertyName; + case kParserNeedPropertyValue: + if (!parseKeyValue(_token)) + parserError("Invalid key value."); + else + _state = kParserNeedPropertyName; - break; + break; - default: - break; + default: + break; } } |