diff options
author | Paul Gilbert | 2016-05-16 19:29:46 -0400 |
---|---|---|
committer | Paul Gilbert | 2016-07-15 19:12:02 -0400 |
commit | e16239e21fb1893e700f1a11bbc251d9915c03a7 (patch) | |
tree | fe672421a424931e1e3decabb4b90566e39ba634 /engines/titanic/true_talk | |
parent | e1ba9672330802c458aebd7049e8ae3f4b23f9ca (diff) | |
download | scummvm-rg350-e16239e21fb1893e700f1a11bbc251d9915c03a7.tar.gz scummvm-rg350-e16239e21fb1893e700f1a11bbc251d9915c03a7.tar.bz2 scummvm-rg350-e16239e21fb1893e700f1a11bbc251d9915c03a7.zip |
TITANIC: Implemented parser replaceNumbers sub-methods
Diffstat (limited to 'engines/titanic/true_talk')
-rw-r--r-- | engines/titanic/true_talk/tt_parser.cpp | 34 | ||||
-rw-r--r-- | engines/titanic/true_talk/tt_parser.h | 10 |
2 files changed, 44 insertions, 0 deletions
diff --git a/engines/titanic/true_talk/tt_parser.cpp b/engines/titanic/true_talk/tt_parser.cpp index 4fdaf58671..9aa6c2ef7a 100644 --- a/engines/titanic/true_talk/tt_parser.cpp +++ b/engines/titanic/true_talk/tt_parser.cpp @@ -321,4 +321,38 @@ int TTparser::searchAndReplace(TTstring &line, int startIndex, const StringArray return startIndex; } +bool TTparser::replaceNumbers(TTstring &line, int *startIndex) { + int lineSize = line.size(); + int index = *startIndex; + if (index < 0 || index >= lineSize) + return true; + + NumberArray &numbers = g_vm->_numbers; + NumberEntry *numEntry = nullptr; + + for (uint idx = 0; idx < numbers.size(); ++idx) { + NumberEntry &ne = numbers[idx]; + if (!strncmp(line.c_str() + index, ne._text.c_str(), ne._text.size())) { + if ((ne._flags & NF_10) || (index + ne._text.size()) >= lineSize || + line[index + ne._text.size()] == ' ') { + *startIndex += ne._text.size(); + numEntry = ≠ + break; + } + } + } + + if (!numEntry || !(numEntry->_flags & NF_10)) { + // Skip to end of current word + while (*startIndex < lineSize && !Common::isSpace(line[*startIndex])) + ++*startIndex; + } + + // Skip over following spaces until start of following word is reached + while (*startIndex < lineSize && Common::isSpace(line[*startIndex])) + ++*startIndex; + + return *startIndex < lineSize; +} + } // End of namespace Titanic diff --git a/engines/titanic/true_talk/tt_parser.h b/engines/titanic/true_talk/tt_parser.h index 1eed38d515..22a2850516 100644 --- a/engines/titanic/true_talk/tt_parser.h +++ b/engines/titanic/true_talk/tt_parser.h @@ -67,6 +67,16 @@ private: * @returns Index of the start of the following word */ static int searchAndReplace(TTstring &line, int startIndex, const StringArray &strings); + + /** + * Checks the string starting at a given index for a number representation + * such as roman numericals, spelled out numbers, etc. and replaces it with + * a plain decimal representation. + * @param line Line to check + * @param startIndex Starting index in the start to check + * @returns True if end of line hasn't been reached yet + */ + static bool replaceNumbers(TTstring &line, int *startIndex); public: CScriptHandler *_owner; int _field4; |