1 package com.hughes.android.dictionary.parser.enwiktionary;
3 import java.util.Arrays;
4 import java.util.LinkedHashMap;
5 import java.util.LinkedHashSet;
9 import java.util.logging.Logger;
11 import com.hughes.android.dictionary.engine.EntryTypeName;
12 import com.hughes.android.dictionary.parser.WikiTokenizer;
13 import com.hughes.util.ListUtil;
15 public final class FunctionCallbacksDefault {
17 static final Logger LOG = Logger.getLogger(EnWiktionaryXmlParser.class.getName());
19 static final Map<String,FunctionCallback> DEFAULT = new LinkedHashMap<String, FunctionCallback>();
21 FunctionCallback callback = new TranslationCallback();
22 DEFAULT.put("t", callback);
23 DEFAULT.put("t+", callback);
24 DEFAULT.put("t-", callback);
25 DEFAULT.put("tø", callback);
26 DEFAULT.put("apdx-t", callback);
28 DEFAULT.put("qualifier", new QualifierCallback());
30 callback = new EncodingCallback();
31 Set<String> encodings = new LinkedHashSet<String>(Arrays.asList(
33 "sd-Arab", "ku-Arab", "Arab", "unicode", "Laoo", "ur-Arab", "Thai",
34 "fa-Arab", "Khmr", "Cyrl", "IPAchar", "ug-Arab", "ko-inline",
35 "Jpan", "Kore", "Hebr", "rfscript", "Beng", "Mong", "Knda", "Cyrs",
36 "yue-tsj", "Mlym", "Tfng", "Grek", "yue-yue-j"));
37 for (final String encoding : encodings) {
38 DEFAULT.put(encoding, callback);
41 callback = new Gender();
42 DEFAULT.put("m", callback);
43 DEFAULT.put("f", callback);
44 DEFAULT.put("n", callback);
45 DEFAULT.put("p", callback);
46 DEFAULT.put("g", callback);
48 DEFAULT.put("l", new l());
49 DEFAULT.put("italbrac", new italbrac());
50 DEFAULT.put("gloss", new gloss());
52 callback = new AppendArg0();
53 DEFAULT.put("term", callback);
55 callback = new Ignore();
56 DEFAULT.put("trreq", callback);
57 DEFAULT.put("t-image", callback);
59 DEFAULT.put("not used", new not_used());
62 // ------------------------------------------------------------------
64 static final class TranslationCallback implements FunctionCallback {
66 public boolean onWikiFunction(final WikiTokenizer wikiTokenizer, final String name, final List<String> args,
67 final Map<String, String> namedArgs, final EnWiktionaryXmlParser parser,
68 final AppendAndIndexWikiCallback appendAndIndexWikiCallback) {
70 final String transliteration = namedArgs.remove("tr");
71 namedArgs.keySet().removeAll(EnWiktionaryXmlParser.USELESS_WIKI_ARGS);
72 if (args.size() < 2) {
73 LOG.warning("{{t...}} with wrong args: title=" + parser.title);
76 final String langCode = ListUtil.get(args, 0);
77 final String word = ListUtil.get(args, 1);
78 final String gender = ListUtil.get(args, 2);
79 // TODO: deal with second (and third...) gender, and alt.
81 appendAndIndexWikiCallback.dispatch(word, EntryTypeName.WIKTIONARY_TITLE_MULTI);
84 appendAndIndexWikiCallback.builder.append(String.format(" {%s}", gender));
86 if (transliteration != null) {
87 appendAndIndexWikiCallback.builder.append(" (tr. ");
88 appendAndIndexWikiCallback.dispatch(transliteration, EntryTypeName.WIKTIONARY_TRANSLITERATION);
89 appendAndIndexWikiCallback.builder.append(")");
96 // ------------------------------------------------------------------
98 static final class QualifierCallback implements FunctionCallback {
100 public boolean onWikiFunction(final WikiTokenizer wikiTokenizer, final String name, final List<String> args,
101 final Map<String, String> namedArgs,
102 final EnWiktionaryXmlParser parser,
103 final AppendAndIndexWikiCallback appendAndIndexWikiCallback) {
104 if (args.size() != 1 || !namedArgs.isEmpty()) {
105 LOG.warning("weird qualifier: ");
108 String qualifier = args.get(0);
109 appendAndIndexWikiCallback.builder.append("(");
110 appendAndIndexWikiCallback.dispatch(qualifier, null);
111 appendAndIndexWikiCallback.builder.append(")");
116 // ------------------------------------------------------------------
118 static final class EncodingCallback implements FunctionCallback {
120 public boolean onWikiFunction(final WikiTokenizer wikiTokenizer, final String name, final List<String> args,
121 final Map<String, String> namedArgs,
122 final EnWiktionaryXmlParser parser,
123 final AppendAndIndexWikiCallback appendAndIndexWikiCallback) {
124 if (args.size() != 1 || !namedArgs.isEmpty()) {
125 LOG.warning("weird encoding: " + wikiTokenizer.token());
127 final String wikiText = args.get(0);
128 appendAndIndexWikiCallback.dispatch(wikiText, appendAndIndexWikiCallback.entryTypeName);
133 // ------------------------------------------------------------------
135 static final class Gender implements FunctionCallback {
137 public boolean onWikiFunction(final WikiTokenizer wikiTokenizer, final String name, final List<String> args,
138 final Map<String, String> namedArgs,
139 final EnWiktionaryXmlParser parser,
140 final AppendAndIndexWikiCallback appendAndIndexWikiCallback) {
141 if (!namedArgs.isEmpty()) {
144 appendAndIndexWikiCallback.builder.append("{");
145 appendAndIndexWikiCallback.builder.append(name);
146 for (int i = 0; i < args.size(); ++i) {
147 appendAndIndexWikiCallback.builder.append("|").append(args.get(i));
149 appendAndIndexWikiCallback.builder.append("}");
154 // ------------------------------------------------------------------
156 static final class l implements FunctionCallback {
158 public boolean onWikiFunction(final WikiTokenizer wikiTokenizer, final String name, final List<String> args,
159 final Map<String, String> namedArgs,
160 final EnWiktionaryXmlParser parser,
161 final AppendAndIndexWikiCallback appendAndIndexWikiCallback) {
162 // TODO: rewrite this!
163 // encodes text in various langs.
165 // TODO: set that we're inside L
166 // EntryTypeName.WIKTIONARY_TRANSLATION_OTHER_TEXT
167 WikiTokenizer.dispatch(args.get(1), false, appendAndIndexWikiCallback);
168 // TODO: transliteration
173 // ------------------------------------------------------------------
175 static final class AppendArg0 implements FunctionCallback {
177 public boolean onWikiFunction(final WikiTokenizer wikiTokenizer, final String name, final List<String> args,
178 final Map<String, String> namedArgs,
179 final EnWiktionaryXmlParser parser,
180 final AppendAndIndexWikiCallback appendAndIndexWikiCallback) {
181 if (args.size() != 1 || !namedArgs.isEmpty()) {
184 appendAndIndexWikiCallback.dispatch(args.get(0), EntryTypeName.WIKTIONARY_TRANSLATION_OTHER_TEXT);
185 // TODO: transliteration
190 // ------------------------------------------------------------------
192 static final class italbrac implements FunctionCallback {
194 public boolean onWikiFunction(final WikiTokenizer wikiTokenizer, final String name, final List<String> args,
195 final Map<String, String> namedArgs,
196 final EnWiktionaryXmlParser parser,
197 final AppendAndIndexWikiCallback appendAndIndexWikiCallback) {
198 if (args.size() != 1 || !namedArgs.isEmpty()) {
201 appendAndIndexWikiCallback.builder.append("[");
202 appendAndIndexWikiCallback.dispatch(args.get(0), EntryTypeName.WIKTIONARY_TRANSLATION_OTHER_TEXT);
203 appendAndIndexWikiCallback.builder.append("]");
208 // ------------------------------------------------------------------
210 static final class gloss implements FunctionCallback {
212 public boolean onWikiFunction(final WikiTokenizer wikiTokenizer, final String name, final List<String> args,
213 final Map<String, String> namedArgs,
214 final EnWiktionaryXmlParser parser,
215 final AppendAndIndexWikiCallback appendAndIndexWikiCallback) {
216 if (args.size() != 1 || !namedArgs.isEmpty()) {
219 appendAndIndexWikiCallback.builder.append("[");
220 appendAndIndexWikiCallback.dispatch(args.get(0), EntryTypeName.WIKTIONARY_TRANSLATION_OTHER_TEXT);
221 appendAndIndexWikiCallback.builder.append("]");
226 // ------------------------------------------------------------------
228 static final class Ignore implements FunctionCallback {
230 public boolean onWikiFunction(final WikiTokenizer wikiTokenizer, final String name, final List<String> args,
231 final Map<String, String> namedArgs,
232 final EnWiktionaryXmlParser parser,
233 final AppendAndIndexWikiCallback appendAndIndexWikiCallback) {
238 // ------------------------------------------------------------------
240 static final class not_used implements FunctionCallback {
242 public boolean onWikiFunction(final WikiTokenizer wikiTokenizer, final String name, final List<String> args,
243 final Map<String, String> namedArgs,
244 final EnWiktionaryXmlParser parser,
245 final AppendAndIndexWikiCallback appendAndIndexWikiCallback) {
246 appendAndIndexWikiCallback.builder.append("(not used)");