1 package com.hughes.android.dictionary.parser.enwiktionary;
6 import com.hughes.android.dictionary.engine.EntryTypeName;
7 import com.hughes.android.dictionary.engine.IndexBuilder;
8 import com.hughes.android.dictionary.engine.IndexedEntry;
9 import com.hughes.android.dictionary.parser.WikiTokenizer;
11 final class AppendAndIndexWikiCallback implements WikiTokenizer.Callback {
13 final EnWiktionaryXmlParser parser;
14 final StringBuilder builder;
15 final IndexedEntry indexedEntry;
16 IndexBuilder defaultIndexBuilder;
17 final Map<String,FunctionCallback> functionCallbacks;
19 // TODO: the classes of text are wrong....
21 public AppendAndIndexWikiCallback(
22 final EnWiktionaryXmlParser parser,
24 final StringBuilder builder,
25 final IndexedEntry indexedEntry,
26 final IndexBuilder defaultIndexBuilder,
27 final Map<String, FunctionCallback> functionCallbacks) {
29 this.indexedEntry = indexedEntry;
30 this.defaultIndexBuilder = defaultIndexBuilder;
31 this.builder = builder;
32 this.functionCallbacks = functionCallbacks;
36 public void onPlainText(WikiTokenizer wikiTokenizer) {
37 // The only non-recursive callback. Just appends to the builder, and indexes.
38 final String plainText = wikiTokenizer.token();
39 builder.append(plainText);
40 defaultIndexBuilder.addEntryWithString(indexedEntry, plainText, EntryTypeName.WIKTIONARY_TRANSLATION_OTHER_TEXT);
44 public void onWikiLink(WikiTokenizer wikiTokenizer) {
45 final String wikiText = wikiTokenizer.wikiLinkText();
47 final String linkDest = wikiTokenizer.wikiLinkDest();
48 if (linkDest != null) {
49 System.out.println("linkDest: " + linkDest);
50 // TODO: Check for English before appending.
51 // TODO: Could also index under link dest, too.
53 // TODO: save, set, restore text type...
54 new WikiTokenizer(wikiText, false).dispatch(this);
58 public void onFunction(
60 final List<String> args,
61 final Map<String, String> namedArgs) {
63 final FunctionCallback functionCallback = functionCallbacks.get(name);
64 if (functionCallback == null || !functionCallback.onWikiFunction(name, args, namedArgs, parser, title)) {
65 // Default function handling:
66 builder.append("{{").append(name);
67 for (int i = 0; i < args.size(); ++i) {
69 new WikiTokenizer(args.get(i), false).dispatch(this);
71 for (final Map.Entry<String, String> entry : namedArgs.entrySet()) {
73 new WikiTokenizer(entry.getKey(), false).dispatch(this);
75 new WikiTokenizer(entry.getValue(), false).dispatch(this);
82 public void onMarkup(WikiTokenizer wikiTokenizer) {
87 public void onComment(WikiTokenizer wikiTokenizer) {
92 public void onNewline(WikiTokenizer wikiTokenizer) {
97 public void onHeading(WikiTokenizer wikiTokenizer) {
102 public void onListItem(WikiTokenizer wikiTokenizer) {