]> gitweb.fperrin.net Git - DictionaryPC.git/blob - src/com/hughes/android/dictionary/parser/enwiktionary/FunctionCallbacksDefault.java
f9ad939d841240d252f45e7dfdfe899b5442e93f
[DictionaryPC.git] / src / com / hughes / android / dictionary / parser / enwiktionary / FunctionCallbacksDefault.java
1 package com.hughes.android.dictionary.parser.enwiktionary;
2
3 import java.util.Arrays;
4 import java.util.LinkedHashMap;
5 import java.util.LinkedHashSet;
6 import java.util.List;
7 import java.util.Map;
8 import java.util.Set;
9 import java.util.logging.Logger;
10
11 import com.hughes.android.dictionary.engine.EntryTypeName;
12 import com.hughes.android.dictionary.parser.WikiTokenizer;
13 import com.hughes.util.ListUtil;
14
15 public final class FunctionCallbacksDefault {
16   
17   static final Logger LOG = Logger.getLogger(EnWiktionaryXmlParser.class.getName());
18   
19   static final Map<String,FunctionCallback> DEFAULT = new LinkedHashMap<String, FunctionCallback>();
20   static {
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);
27     
28     DEFAULT.put("qualifier", new QualifierCallback());
29
30     callback = new EncodingCallback();
31     Set<String> encodings = new LinkedHashSet<String>(Arrays.asList(
32         "zh-ts", "zh-tsp",
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);
39     }
40     
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);
47
48     DEFAULT.put("l", new l());
49     DEFAULT.put("italbrac", new italbrac());
50     DEFAULT.put("gloss", new gloss());
51
52     callback = new AppendArg0();
53     DEFAULT.put("term", callback);
54
55     callback = new Ignore();
56     DEFAULT.put("trreq", callback);
57     DEFAULT.put("t-image", callback);
58
59     DEFAULT.put("not used", new not_used());
60   }
61
62   // ------------------------------------------------------------------
63
64   static final class TranslationCallback implements FunctionCallback {
65     @Override
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) {
69
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);
74         return false;
75       }
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.
80       
81       appendAndIndexWikiCallback.dispatch(word, EntryTypeName.WIKTIONARY_TITLE_MULTI);
82       
83       if (gender != null) {
84         appendAndIndexWikiCallback.builder.append(String.format(" {%s}", gender));
85       }
86       if (transliteration != null) {
87         appendAndIndexWikiCallback.builder.append(" (tr. ");
88         appendAndIndexWikiCallback.dispatch(transliteration, EntryTypeName.WIKTIONARY_TRANSLITERATION);
89         appendAndIndexWikiCallback.builder.append(")");
90       }
91       return true;
92     }
93     
94   }
95
96   // ------------------------------------------------------------------
97   
98   static final class QualifierCallback implements FunctionCallback {
99     @Override
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: ");
106         return false;
107       }
108       String qualifier = args.get(0);
109       appendAndIndexWikiCallback.builder.append("(");
110       appendAndIndexWikiCallback.dispatch(qualifier, null);
111       appendAndIndexWikiCallback.builder.append(")");
112       return true;
113     }
114   }
115
116   // ------------------------------------------------------------------
117   
118   static final class EncodingCallback implements FunctionCallback {
119     @Override
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());
126       }
127       final String wikiText = args.get(0);
128       appendAndIndexWikiCallback.dispatch(wikiText, appendAndIndexWikiCallback.entryTypeName);
129       return true;
130     }
131   }
132
133   // ------------------------------------------------------------------
134   
135   static final class Gender implements FunctionCallback {
136     @Override
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()) {
142         return false;
143       }
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));
148       }
149       appendAndIndexWikiCallback.builder.append("}");
150       return true;
151     }
152   }
153
154   // ------------------------------------------------------------------
155   
156   static final class l implements FunctionCallback {
157     @Override
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.
164       // lang is arg 0.
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
169       return true;
170     }
171   }
172
173   // ------------------------------------------------------------------
174   
175   static final class AppendArg0 implements FunctionCallback {
176     @Override
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()) {
182         return false;
183       }
184       appendAndIndexWikiCallback.dispatch(args.get(0), EntryTypeName.WIKTIONARY_TRANSLATION_OTHER_TEXT);
185       // TODO: transliteration
186       return true;
187     }
188   }
189
190   // ------------------------------------------------------------------
191   
192   static final class italbrac implements FunctionCallback {
193     @Override
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()) {
199         return false;
200       }
201       appendAndIndexWikiCallback.builder.append("[");
202       appendAndIndexWikiCallback.dispatch(args.get(0), EntryTypeName.WIKTIONARY_TRANSLATION_OTHER_TEXT);
203       appendAndIndexWikiCallback.builder.append("]");
204       return true;
205     }
206   }
207
208   // ------------------------------------------------------------------
209   
210   static final class gloss implements FunctionCallback {
211     @Override
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()) {
217         return false;
218       }
219       appendAndIndexWikiCallback.builder.append("[");
220       appendAndIndexWikiCallback.dispatch(args.get(0), EntryTypeName.WIKTIONARY_TRANSLATION_OTHER_TEXT);
221       appendAndIndexWikiCallback.builder.append("]");
222       return true;
223     }
224   }
225   
226   // ------------------------------------------------------------------
227   
228   static final class Ignore implements FunctionCallback {
229     @Override
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) {
234       return true;
235     }
236   }
237
238   // ------------------------------------------------------------------
239   
240   static final class not_used implements FunctionCallback {
241     @Override
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)");
247       return true;
248     }
249   }
250
251   
252
253 }