]> gitweb.fperrin.net Git - DictionaryPC.git/blob - src/com/hughes/android/dictionary/parser/enwiktionary/AppendAndIndexWikiCallback.java
2a5e7c6a92cbce5ce32ab43017d5b5c2ac94e856
[DictionaryPC.git] / src / com / hughes / android / dictionary / parser / enwiktionary / AppendAndIndexWikiCallback.java
1 package com.hughes.android.dictionary.parser.enwiktionary;
2
3 import java.util.List;
4 import java.util.Map;
5
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;
10
11 final class AppendAndIndexWikiCallback implements WikiTokenizer.Callback {
12
13   final EnWiktionaryXmlParser parser;
14   final StringBuilder builder;
15   final IndexedEntry indexedEntry;
16   IndexBuilder defaultIndexBuilder;
17   final Map<String,FunctionCallback> functionCallbacks;
18   
19   // TODO: the classes of text are wrong....
20   
21   public AppendAndIndexWikiCallback(
22       final EnWiktionaryXmlParser parser,
23       final String title,
24       final StringBuilder builder, 
25       final IndexedEntry indexedEntry,
26       final IndexBuilder defaultIndexBuilder,
27       final Map<String, FunctionCallback> functionCallbacks) {
28     this.parser = parser;
29     this.indexedEntry = indexedEntry;
30     this.defaultIndexBuilder = defaultIndexBuilder;
31     this.builder = builder;
32     this.functionCallbacks = functionCallbacks;
33   }
34
35   @Override
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);
41   }
42
43   @Override
44   public void onWikiLink(WikiTokenizer wikiTokenizer) {
45     final String wikiText = wikiTokenizer.wikiLinkText();
46
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.
52     }
53     // TODO: save, set, restore text type...
54     new WikiTokenizer(wikiText, false).dispatch(this);
55   }
56
57   @Override
58   public void onFunction(
59       final String name,
60       final List<String> args, 
61       final Map<String, String> namedArgs) {
62     
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) {
68         builder.append("|");
69         new WikiTokenizer(args.get(i), false).dispatch(this);
70       }
71       for (final Map.Entry<String, String> entry : namedArgs.entrySet()) {
72         builder.append("|");
73         new WikiTokenizer(entry.getKey(), false).dispatch(this);
74         builder.append("=");
75         new WikiTokenizer(entry.getValue(), false).dispatch(this);
76       }
77       builder.append("}}");
78     }
79   }
80
81   @Override
82   public void onMarkup(WikiTokenizer wikiTokenizer) {
83     // Do nothing.
84   }
85
86   @Override
87   public void onComment(WikiTokenizer wikiTokenizer) {
88     // Do nothing.
89   }
90
91   @Override
92   public void onNewline(WikiTokenizer wikiTokenizer) {
93     assert false;
94   }
95
96   @Override
97   public void onHeading(WikiTokenizer wikiTokenizer) {
98     assert false;
99   }
100
101   @Override
102   public void onListItem(WikiTokenizer wikiTokenizer) {
103     assert false;
104   }
105 }