[Scummvm-git-logs] scummvm master -> 4c153039715b4a2e5be7c10009c0392754e3c30f

dreammaster dreammaster at scummvm.org
Fri Jun 23 02:52:48 CEST 2017


This automated email contains information about 1 new commit which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .

Summary:
4c15303971 TITANIC: Implement German parser preprocessing


Commit: 4c153039715b4a2e5be7c10009c0392754e3c30f
    https://github.com/scummvm/scummvm/commit/4c153039715b4a2e5be7c10009c0392754e3c30f
Author: Paul Gilbert (dreammaster at scummvm.org)
Date: 2017-06-22T20:52:39-04:00

Commit Message:
TITANIC: Implement German parser preprocessing

Changed paths:
    engines/titanic/true_talk/tt_parser.cpp
    engines/titanic/true_talk/tt_parser.h


diff --git a/engines/titanic/true_talk/tt_parser.cpp b/engines/titanic/true_talk/tt_parser.cpp
index 5ace6ec..2893c50 100644
--- a/engines/titanic/true_talk/tt_parser.cpp
+++ b/engines/titanic/true_talk/tt_parser.cpp
@@ -62,6 +62,8 @@ void TTparser::loadArrays() {
 	loadArray(_replacements1, "TEXT/REPLACEMENTS1");
 	loadArray(_replacements2, "TEXT/REPLACEMENTS2");
 	loadArray(_replacements3, "TEXT/REPLACEMENTS3");
+	if (g_vm->isGerman())
+		loadArray(_replacements4, "TEXT/REPLACEMENTS4");
 	loadArray(_phrases, "TEXT/PHRASES");
 	loadArray(_pronouns, "TEXT/PRONOUNS");
 
@@ -81,6 +83,9 @@ int TTparser::preprocess(TTsentence *sentence) {
 	if (normalize(sentence))
 		return 0;
 
+	if (g_vm->isGerman())
+		preprocessGerman(sentence->_normalizedLine);
+
 	// Scan for and replace common slang and contractions with verbose versions
 	searchAndReplace(sentence->_normalizedLine, _replacements1);
 	searchAndReplace(sentence->_normalizedLine, _replacements2);
@@ -1718,4 +1723,36 @@ int TTparser::processModifiers(int modifier, TTword *word) {
 	return 0;
 }
 
+void TTparser::preprocessGerman(TTstring &line) {
+	static const char *const SUFFIXES[12] = {
+		" ", "est ", "em ", "en ", "er ", "es ",
+		"et ", "st ", "s ", "e ", "n ", "t "
+	};
+
+	for (uint idx = 0; idx < _replacements4.size(); idx += 3) {
+		if (!line.hasSuffix(_replacements4[idx + 2]))
+			continue;
+		const char *lineP = line.c_str();
+		const char *p = strstr(lineP, _replacements4[idx].c_str());
+		if (!p || p == lineP || *(p - 1) != ' ')
+			continue;
+
+		const char *wordEndP = p + _replacements4[idx].size();
+		
+		for (int sIdx = 0; sIdx < 12; ++sIdx) {
+			const char *suffixP = SUFFIXES[sIdx];
+			if (!strncmp(wordEndP, suffixP, strlen(suffixP))) {
+				// Form a new line with the replacement word
+				const char *nextWordP = wordEndP + strlen(suffixP);
+				line = Common::String::format("%s %s %s",
+					Common::String(lineP, p).c_str(),
+					_replacements4[idx + 1].c_str(),
+					nextWordP
+					);
+				return;
+			}
+		}
+	}
+}
+
 } // End of namespace Titanic
diff --git a/engines/titanic/true_talk/tt_parser.h b/engines/titanic/true_talk/tt_parser.h
index 458a719..d39cf50 100644
--- a/engines/titanic/true_talk/tt_parser.h
+++ b/engines/titanic/true_talk/tt_parser.h
@@ -69,6 +69,7 @@ private:
 	StringArray _replacements1;
 	StringArray _replacements2;
 	StringArray _replacements3;
+	StringArray _replacements4;
 	StringArray _phrases;
 	NumberArray _numbers;
 	TTparserNode *_nodesP;
@@ -169,6 +170,12 @@ private:
 	 */
 	void removeNode(TTparserNode *node);
 
+	/**
+	 * Handles any preprocessing for the German version
+	 * @param line		Line to check and update
+	 */
+	void preprocessGerman(TTstring &line);
+
 	int processModifiers(int modifier, TTword *word);
 
 	int checkForAction();





More information about the Scummvm-git-logs mailing list