diff --git a/org.wiktionary/wiktionary_dump_to_xml_1/wiktionary_article_to_xml_1/ParserGerman.java b/org.wiktionary/wiktionary_dump_to_xml_1/wiktionary_article_to_xml_1/ParserGerman.java
index 0e139a5..6598e1a 100644
--- a/org.wiktionary/wiktionary_dump_to_xml_1/wiktionary_article_to_xml_1/ParserGerman.java
+++ b/org.wiktionary/wiktionary_dump_to_xml_1/wiktionary_article_to_xml_1/ParserGerman.java
@@ -123,13 +123,11 @@ public StringBuilder word()
sbDefinitions.append(sbDefinition.toString());
}
}
- /*
else if (token.equals("=="))
{
this.tokenCursor -= 1;
break;
}
- */
}
if (sbDefinitions.length() > 0)
@@ -193,12 +191,6 @@ public StringBuilder definition()
return null;
}
}
- /*
- else if (token.equals("Übersetzungen"))
- {
- ++this.tokenCursor;
- }
- */
if (match(" ") != true ||
match("===") != true)
@@ -206,6 +198,34 @@ else if (token.equals("Übersetzungen"))
return null;
}
+ StringBuilder sbTranslations = new StringBuilder();
+
+ while (this.tokenCursor < this.tokens.size())
+ {
+ token = nextToken();
+
+ if (token.equals("===="))
+ {
+ StringBuilder sbTranslation = translations();
+
+ if (sbTranslation != null)
+ {
+ sbTranslations.append(sbTranslation.toString());
+ }
+ }
+ else if (token.equals("==") == true ||
+ token.equals("===") == true)
+ {
+ this.tokenCursor -= 1;
+ break;
+ }
+ }
+
+ if (sbTranslations.length() > 0)
+ {
+ sbResult.append(sbTranslations.toString());
+ }
+
sbResult.append("");
return sbResult;
@@ -336,6 +356,191 @@ else if (token.equals("n"))
return null;
}
+ public StringBuilder translations()
+ {
+ StringBuilder sbResult = new StringBuilder();
+
+ sbResult.append("");
+
+ if (match(" ") != true ||
+ match("{{") != true ||
+ match("Übersetzungen") != true ||
+ match("}}") != true ||
+ match(" ") != true ||
+ match("====") != true ||
+ match("\n") != true ||
+ match("{{") != true ||
+ match("Ü") != true ||
+ match("-") != true ||
+ match("Tabelle") != true ||
+ match("|") != true ||
+ match("Ü") != true ||
+ match("-") != true ||
+ match("links") != true ||
+ match("=") != true ||
+ match("\n") != true)
+ {
+ return null;
+ }
+
+ StringBuilder sbTranslations = new StringBuilder();
+
+ while (this.tokenCursor < this.tokens.size())
+ {
+ String token = nextToken();
+
+ if (token.equals("*"))
+ {
+ StringBuilder sbTranslation = translation();
+
+ if (sbTranslation != null)
+ {
+ sbTranslations.append(sbTranslation.toString());
+ }
+ }
+ else if (token.equals("==") == true ||
+ token.equals("===") == true ||
+ token.equals("====") == true)
+ {
+ this.tokenCursor -= 1;
+ break;
+ }
+ }
+
+ if (sbTranslations.length() > 0)
+ {
+ sbResult.append(sbTranslations.toString());
+ }
+
+ sbResult.append("");
+
+ return sbResult;
+ }
+
+ public StringBuilder translation()
+ {
+ StringBuilder sbResult = new StringBuilder();
+
+ sbResult.append("");
+
+ if (match("{{") != true)
+ {
+ return null;
+ }
+
+ String language = nextToken();
+
+ if (language.equals("ar") == true)
+ {
+ sbResult.append("" + language + "");
+ }
+ else
+ {
+ this.infoMessages.add(constructInfoMessage("messageParsingError", true, null, null, "ar", language));
+ return null;
+ }
+
+ while (this.tokenCursor < this.tokens.size())
+ {
+ String token = nextToken();
+
+ if (token.equals("*") == true)
+ {
+ this.infoMessages.add(constructInfoMessage("messageParsingOfSequenceAborted", true, null, null, "translation", token));
+ return null;
+ }
+
+ if (token.equals("}}") != true)
+ {
+ // Ignore/consume.
+ }
+ else
+ {
+ break;
+ }
+ }
+
+ if (match(":") != true)
+ {
+ return null;
+ }
+
+ while (this.tokenCursor < this.tokens.size())
+ {
+ String token = nextToken();
+
+ if (token.equals("*") == true)
+ {
+ this.infoMessages.add(constructInfoMessage("messageParsingOfSequenceAborted", true, null, null, "translation", token));
+ return null;
+ }
+
+ if (token.equals("[") != true)
+ {
+ // Ignore/consume.
+ }
+ else
+ {
+ break;
+ }
+ }
+
+ nextToken();
+
+ if (match("]") != true ||
+ match(" ") != true ||
+ match("{{") != true ||
+ match("Üxx") != true ||
+ match("4") != true ||
+ match("|") != true ||
+ match("ar") != true ||
+ match("|") != true)
+ {
+ return null;
+ }
+
+ StringBuilder sbDisplay = new StringBuilder();
+
+ while (this.tokenCursor < this.tokens.size())
+ {
+ String token = nextToken();
+
+ if (token.equals("|") == true)
+ {
+ break;
+ }
+
+ sbDisplay.append(token);
+ }
+
+ sbResult.append("" + sbDisplay.toString() + "");
+
+ if (match("v") != true ||
+ match("=") != true)
+ {
+ return null;
+ }
+
+ StringBuilder sbVocalization = new StringBuilder();
+
+ while (this.tokenCursor < this.tokens.size())
+ {
+ String token = nextToken();
+
+ if (token.equals("|") == true)
+ {
+ break;
+ }
+
+ sbVocalization.append(token);
+ }
+
+ sbResult.append("" + sbVocalization.toString() + "");
+ sbResult.append("");
+
+ return sbResult;
+ }
+
public boolean match(String required)
{
String token = nextToken();
diff --git a/org.wiktionary/wiktionary_dump_to_xml_1/wiktionary_article_to_xml_1/l10n/l10nWiktionaryArticleToXml1Console_de.properties b/org.wiktionary/wiktionary_dump_to_xml_1/wiktionary_article_to_xml_1/l10n/l10nWiktionaryArticleToXml1Console_de.properties
new file mode 100644
index 0000000..d594391
--- /dev/null
+++ b/org.wiktionary/wiktionary_dump_to_xml_1/wiktionary_article_to_xml_1/l10n/l10nWiktionaryArticleToXml1Console_de.properties
@@ -0,0 +1,45 @@
+# Copyright (C) 2015-2017 Stephan Kreutzer
+#
+# This file is part of wiktionary_article_to_xml_1, a submodule of the
+# wiktionary_dump_to_xml_1 package.
+#
+# wiktionary_article_to_xml_1 is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License version 3 or any later version,
+# as published by the Free Software Foundation.
+#
+# wiktionary_article_to_xml_1 is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Affero General Public License 3 for more details.
+#
+# You should have received a copy of the GNU Affero General Public License 3
+# along with wiktionary_article_to_xml_1. If not, see .
+
+messageArgumentsMissingUsage = Verwendung:
+messageParameterList = job-datei ergebnis-info-datei
+messageResultInfoFileCantGetCanonicalPath = Kann keinen kanonischen Pfad für die Ergebnisinformationsdatei "{0}" ermitteln.
+messageResultInfoPathIsntAFile = Ergebnisinformationspfad "{0}" existiert bereits, referenziert aber keine Datei.
+messageResultInfoFileIsntWritable = Ergebnisinformationsdatei "{0}" ist nicht schreibbar.
+messageJobFileCantGetCanonicalPath = Kann keinen kanonischen Pfad für die Jobdatei "{0}" ermitteln.
+messageJobFileDoesntExist = Jobdatei "{0}" existiert nicht.
+messageJobPathIsntAFile = Jobpfad "{0}" ist keine Datei.
+messageJobFileIsntReadable = Jobdatei "{0}" ist nicht lesbar.
+messageCallDetails = Aufgerufen mit Jobdatei "{0}" und Ergebnisinformationsdatei "{1}".
+messageJobFileEntryIsMissingAnAttribute = Element "{1} in Jobdatei "{0}" fehlt das "{2}"-Attribut.
+messageJobFileElementConfiguredMoreThanOnce = Element "{1}" mehr als einmal konfiguriert in Jobdatei "{0}".
+messageInputFileCantGetCanonicalPath = Kann keinen kanonischen Pfad für die Eingabedatei "{0}" wie in Jobdatei "{1}" hinterlegt ermitteln.
+messageInputFileDoesntExist = Die Eingabe-Datei "{1}" laut Job-Datei "{0}" existiert nicht.
+messageInputPathIsntAFile = Der Eingabe-Pfad "{1}" laut Job-Datei "{0}" referenziert keine Datei.
+messageInputFileIsntReadable = Die Eingabe-Datei "{1}" laut Job-Datei "{0}" ist nicht lesbar.
+messageOutputFileCantGetCanonicalPath = Kann keinen kanonischen Pfad für die Ausgabedatei "{0}" wie in Jobdatei "{1}" hinterlegt ermitteln.
+messageOutputPathIsntAFile = Ausgabepfad "{0}" wie in Jobdatei "{1}" hinterlegt existiert, ist aber keine Datei.
+messageOutputFileIsntWritable = Ausgabedatei "{0}" wie in Jobdatei "{1}" hinterlegt existiert, ist aber nicht überschreibbar.
+messageJobFileErrorWhileReading = Während die Jobdatei "{0}" ausgelesen wurde, ist ein Fehler aufgetreten.
+messageJobFileInputFileIsntConfigured = Keine Eingabedatei mittels Element "{1}" in Jobdatei "{0}" konfiguriert.
+messageJobFileOutputFileIsntConfigured = Keine Ausgabedatei mittels Element "{1}" in Jobdatei "{0}" konfiguriert.
+messageTokenizerCharacterIsRepeating = Tokenizer: Zeichen ''{0}'' wiederholt sich.
+messageTokenizerInvalidCharacter = Tokenizer: Ungültiges Zeichen ''{0}'' ({1}).
+messageTokenizerUnknownCharacter = Tokenizer: Unbekanntes Zeichen ''{0}'' ({1}).
+messageTokenizerErrorWhileTokenizing = Tokenizer: Es ist ein Fehler während des Tokenisierens aufgetreten.
+messageParserErrorWhileParsing = Parser: Es ist ein Fehler während des Parsens aufgetreten.
+messageParserFailed = Die Eingabedatei "{0}" konnte nicht erfolgreich geparst werden.
diff --git a/org.wiktionary/wiktionary_dump_to_xml_1/wiktionary_article_to_xml_1/l10n/l10nWiktionaryArticleToXml1ParserGerman.properties b/org.wiktionary/wiktionary_dump_to_xml_1/wiktionary_article_to_xml_1/l10n/l10nWiktionaryArticleToXml1ParserGerman.properties
index f4687ad..e33b777 100644
--- a/org.wiktionary/wiktionary_dump_to_xml_1/wiktionary_article_to_xml_1/l10n/l10nWiktionaryArticleToXml1ParserGerman.properties
+++ b/org.wiktionary/wiktionary_dump_to_xml_1/wiktionary_article_to_xml_1/l10n/l10nWiktionaryArticleToXml1ParserGerman.properties
@@ -18,3 +18,4 @@
messageParserNoMoreTokens = Parser: Run out of tokens while more tokens were expected.
messageParsingError = Parsing error: "{0}" expected, found "{1}".
+messageParsingOfSequenceAborted = Parsing of sequence "{0}" aborted by termination "{1}".
diff --git a/org.wiktionary/wiktionary_dump_to_xml_1/wiktionary_article_to_xml_1/l10n/l10nWiktionaryArticleToXml1ParserGerman_de.properties b/org.wiktionary/wiktionary_dump_to_xml_1/wiktionary_article_to_xml_1/l10n/l10nWiktionaryArticleToXml1ParserGerman_de.properties
new file mode 100644
index 0000000..bf4fc96
--- /dev/null
+++ b/org.wiktionary/wiktionary_dump_to_xml_1/wiktionary_article_to_xml_1/l10n/l10nWiktionaryArticleToXml1ParserGerman_de.properties
@@ -0,0 +1,21 @@
+# Copyright (C) 2017 Stephan Kreutzer
+#
+# This file is part of wiktionary_article_to_xml_1, a submodule of the
+# wiktionary_dump_to_xml_1 package.
+#
+# wiktionary_article_to_xml_1 is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License version 3 or any later version,
+# as published by the Free Software Foundation.
+#
+# wiktionary_article_to_xml_1 is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Affero General Public License 3 for more details.
+#
+# You should have received a copy of the GNU Affero General Public License 3
+# along with wiktionary_article_to_xml_1. If not, see .
+
+
+messageParserNoMoreTokens = Parser: Keine weiteren Tokens vorgefunden, obwohl weitere erwartet werden.
+messageParsingError = Parsing-Fehler: "{0}" erwartet, "{1}" vorgefunden.
+messageParsingOfSequenceAborted = Parsing der Sequenz "{0}" abgebrochen durch Termination "{1}".