X-Git-Url: http://gitweb.fperrin.net/?a=blobdiff_plain;f=src%2Fcom%2Fhughes%2Fandroid%2Fdictionary%2Fparser%2Fenwiktionary%2FFunctionCallbacksDefault.java;h=a50e34c6ee3d2a4265eb9b96bc25f20130448baf;hb=253466ba45a33fcc3ba3a399cfa2f243392db0b0;hp=b9fc2a28f932dc605742ea853f6aa436c513f148;hpb=6e6661c2989066377a6a6693dafc0d65bfea4b82;p=DictionaryPC.git diff --git a/src/com/hughes/android/dictionary/parser/enwiktionary/FunctionCallbacksDefault.java b/src/com/hughes/android/dictionary/parser/enwiktionary/FunctionCallbacksDefault.java index b9fc2a2..a50e34c 100644 --- a/src/com/hughes/android/dictionary/parser/enwiktionary/FunctionCallbacksDefault.java +++ b/src/com/hughes/android/dictionary/parser/enwiktionary/FunctionCallbacksDefault.java @@ -15,6 +15,7 @@ package com.hughes.android.dictionary.parser.enwiktionary; import java.util.Arrays; +import java.util.Collections; import java.util.LinkedHashMap; import java.util.LinkedHashSet; import java.util.List; @@ -115,7 +116,9 @@ public final class FunctionCallbacksDefault { final Map namedArgs, final EnWiktionaryXmlParser parser, final AppendAndIndexWikiCallback appendAndIndexWikiCallback) { - appendAndIndexWikiCallback.builder.append(name); + if (name != null) { + appendAndIndexWikiCallback.builder.append(name); + } for (int i = 0; i < args.size(); ++i) { if (args.get(i).length() > 0) { appendAndIndexWikiCallback.builder.append("|"); @@ -128,7 +131,7 @@ public final class FunctionCallbacksDefault { } static NameAndArgs NAME_AND_ARGS = new NameAndArgs(); - private static void appendNamedArgs(final Map namedArgs, + static void appendNamedArgs(final Map namedArgs, final AppendAndIndexWikiCallback appendAndIndexWikiCallback) { for (final Map.Entry entry : namedArgs.entrySet()) { appendAndIndexWikiCallback.builder.append("|"); @@ -155,6 +158,7 @@ public final class FunctionCallbacksDefault { final AppendAndIndexWikiCallback appendAndIndexWikiCallback) { final String transliteration = namedArgs.remove("tr"); + final String alt = namedArgs.remove("alt"); namedArgs.keySet().removeAll(EnWiktionaryXmlParser.USELESS_WIKI_ARGS); if (args.size() < 2) { LOG.warning("{{t...}} with wrong args: title=" + parser.title); @@ -166,19 +170,41 @@ public final class FunctionCallbacksDefault { } appendAndIndexWikiCallback.langCodeToTCount.get(langCode).incrementAndGet(); final String word = ListUtil.get(args, 1); - final String gender = ListUtil.get(args, 2); - // TODO: deal with second (and third...) gender, and alt. - - appendAndIndexWikiCallback.dispatch(word, EntryTypeName.WIKTIONARY_TITLE_MULTI); - - if (gender != null) { - appendAndIndexWikiCallback.builder.append(String.format(" {%s}", gender)); + appendAndIndexWikiCallback.dispatch(alt != null ? alt : word, EntryTypeName.WIKTIONARY_TITLE_MULTI); + + // Genders... + if (args.size() > 2) { + appendAndIndexWikiCallback.builder.append(" {"); + for (int i = 2; i < args.size(); ++i) { + if (i > 2) { + appendAndIndexWikiCallback.builder.append("|"); + } + appendAndIndexWikiCallback.builder.append(args.get(i)); + } + appendAndIndexWikiCallback.builder.append("}"); } + if (transliteration != null) { appendAndIndexWikiCallback.builder.append(" ("); appendAndIndexWikiCallback.dispatch(transliteration, EntryTypeName.WIKTIONARY_TRANSLITERATION); appendAndIndexWikiCallback.builder.append(")"); } + + if (alt != null) { + // If alt wasn't null, we appended alt instead of the actual word + // we're filing under.. + appendAndIndexWikiCallback.builder.append(" ("); + appendAndIndexWikiCallback.dispatch(word, EntryTypeName.WIKTIONARY_TITLE_MULTI); + appendAndIndexWikiCallback.builder.append(")"); + } + + // Catch-all for anything else... + if (!namedArgs.isEmpty()) { + appendAndIndexWikiCallback.builder.append(" {"); + FunctionCallbacksDefault.appendNamedArgs(namedArgs, appendAndIndexWikiCallback); + appendAndIndexWikiCallback.builder.append("}"); + } + return true; }