]> gitweb.fperrin.net Git - DictionaryPC.git/blob - src/com/hughes/android/dictionary/parser/enwiktionary/FunctionCallback.java
e9c9fb42c4018849171f0111deca0d7e0cb7458f
[DictionaryPC.git] / src / com / hughes / android / dictionary / parser / enwiktionary / FunctionCallback.java
1 package com.hughes.android.dictionary.parser.enwiktionary;
2
3 import java.util.List;
4 import java.util.Map;
5 import java.util.logging.Logger;
6
7 import com.hughes.android.dictionary.parser.WikiTokenizer;
8 import com.hughes.util.ListUtil;
9
10 public interface FunctionCallback {
11   
12   static final Logger LOG = Logger.getLogger(EnWiktionaryXmlParser.class.getName());
13   
14   boolean onWikiFunction(
15       final String name,
16       final List<String> args, 
17       final Map<String,String> namedArgs,
18       final EnWiktionaryXmlParser parser,
19       final AppendAndIndexWikiCallback appendAndIndexWikiCallback,
20       final String title);
21
22   static final class TranslationCallback implements FunctionCallback {
23     @Override
24     public boolean onWikiFunction(final String name, final List<String> args,
25         final Map<String, String> namedArgs, final EnWiktionaryXmlParser parser,
26         final AppendAndIndexWikiCallback appendAndIndexWikiCallback,
27         final String title) {
28
29       final String transliteration = namedArgs.remove("tr");
30       
31       if (args.size() < 2 || args.size() > 3 || namedArgs.isEmpty()) {
32         LOG.warning("{{t}} with too few args: " + ", title=" + title);
33         return false;
34       }
35       final String langCode = ListUtil.get(args, 0);
36       final String word = ListUtil.get(args, 1);
37       final String gender = ListUtil.get(args, 2);
38       
39 // TODO      appendAndIndexWikiCallback we're inside translation....
40       //EntryTypeName.WIKTIONARY_TITLE_SINGLE, EntryTypeName.WIKTIONARY_TITLE_MULTI
41       new WikiTokenizer(word, false).dispatch(appendAndIndexWikiCallback);
42       
43       if (gender != null) {
44         appendAndIndexWikiCallback.builder.append(String.format(" {%s}", gender));
45       }
46       if (transliteration != null) {
47      // TODO      appendAndIndexWikiCallback we're inside translation....
48         // EntryTypeName.WIKTIONARY_TRANSLITERATION
49         appendAndIndexWikiCallback.builder.append("(tr. ");
50         new WikiTokenizer(transliteration).dispatch(appendAndIndexWikiCallback);
51         appendAndIndexWikiCallback.builder.append(")");
52       }
53       return true;
54     }
55     
56   }
57
58   // ------------------------------------------------------------------
59   
60   static final class QualifierCallback implements FunctionCallback {
61     @Override
62     public boolean onWikiFunction(final String name, final List<String> args,
63         final Map<String, String> namedArgs,
64         final EnWiktionaryXmlParser parser,
65         final AppendAndIndexWikiCallback appendAndIndexWikiCallback,
66         final String title) {
67       if (args.size() != 1 || !namedArgs.isEmpty()) {
68         LOG.warning("weird qualifier: ");
69         return false;
70       }
71       String qualifier = args.get(0);
72       // Unindexed!
73       appendAndIndexWikiCallback.builder.append("(");
74       new WikiTokenizer(qualifier, false).dispatch(appendAndIndexWikiCallback);
75       appendAndIndexWikiCallback.builder.append(")");
76       return true;
77     }
78   }
79
80 }