]> gitweb.fperrin.net Git - DictionaryPC.git/blobdiff - src/com/hughes/android/dictionary/parser/enwiktionary/FunctionCallbacksDefault.java
zipSize, overrideStoplist-> special isMainEntry, tagalog, trying to
[DictionaryPC.git] / src / com / hughes / android / dictionary / parser / enwiktionary / FunctionCallbacksDefault.java
index 7452645c27ce36424c3c818cd690f3d8571a69f3..b9fc2a28f932dc605742ea853f6aa436c513f148 100644 (file)
@@ -20,6 +20,7 @@ import java.util.LinkedHashSet;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
+import java.util.concurrent.atomic.AtomicInteger;
 import java.util.logging.Logger;
 
 import com.hughes.android.dictionary.engine.EntryTypeName;
@@ -41,8 +42,6 @@ public final class FunctionCallbacksDefault {
     DEFAULT.put("tø", callback);
     DEFAULT.put("apdx-t", callback);
     
-    DEFAULT.put("qualifier", new QualifierCallback());
-
     callback = new EncodingCallback();
     Set<String> encodings = new LinkedHashSet<String>(Arrays.asList(
         "zh-ts", "zh-tsp",
@@ -65,9 +64,6 @@ public final class FunctionCallbacksDefault {
     DEFAULT.put("p", callback);
     DEFAULT.put("g", callback);
     
-    DEFAULT.put("italbrac", new italbrac());
-    DEFAULT.put("gloss", new gloss());
-
     callback = new AppendArg0();
 
     callback = new Ignore();
@@ -81,9 +77,22 @@ public final class FunctionCallbacksDefault {
     DEFAULT.put("attention", callback);
     DEFAULT.put("zh-attention", callback);
 
-    DEFAULT.put("not used", new not_used());
-    DEFAULT.put("form of", new FormOf());
-    DEFAULT.put("wikipedia", new wikipedia());
+
+    callback = new FormOf();
+    DEFAULT.put("form of", callback);
+    DEFAULT.put("conjugation of", callback);
+    DEFAULT.put("participle of", callback);
+    DEFAULT.put("present participle of", callback);
+    DEFAULT.put("past participle of", callback);
+    DEFAULT.put("feminine past participle of", callback);
+    DEFAULT.put("gerund of", callback);
+    DEFAULT.put("feminine of", callback);
+    DEFAULT.put("plural of", callback);
+    DEFAULT.put("feminine plural of", callback);
+    DEFAULT.put("inflected form of", callback);
+    DEFAULT.put("alternative form of", callback);
+    DEFAULT.put("dated form of", callback);
+    DEFAULT.put("apocopic form of", callback);
     
     callback = new InflOrHead();
     DEFAULT.put("infl", callback);
@@ -92,6 +101,11 @@ public final class FunctionCallbacksDefault {
     callback = new AppendName();
     DEFAULT.put("...", callback);
     
+    DEFAULT.put("qualifier", new QualifierCallback());
+    DEFAULT.put("italbrac", new italbrac());
+    DEFAULT.put("gloss", new gloss());
+    DEFAULT.put("not used", new not_used());
+    DEFAULT.put("wikipedia", new wikipedia());
   }
 
   
@@ -120,7 +134,15 @@ public final class FunctionCallbacksDefault {
       appendAndIndexWikiCallback.builder.append("|");
       appendAndIndexWikiCallback.dispatch(entry.getKey(), null, null);
       appendAndIndexWikiCallback.builder.append("=");
-      appendAndIndexWikiCallback.dispatch(entry.getValue(), null, null);
+      EntryTypeName entryTypeName = null;
+      IndexBuilder indexBuilder = null;
+      // This doesn't work: we'd need to add to word-forms.
+//      System.out.println(entry.getKey());
+//      if (entry.getKey().equals("tr")) {
+//        entryTypeName = EntryTypeName.WIKTIONARY_TRANSLITERATION;
+//        indexBuilder = appendAndIndexWikiCallback.parser.foreignIndexBuilder;
+//      }
+      appendAndIndexWikiCallback.dispatch(entry.getValue(), indexBuilder, entryTypeName);
     }
   }
 
@@ -139,6 +161,10 @@ public final class FunctionCallbacksDefault {
         return false;
       }
       final String langCode = ListUtil.get(args, 0);
+      if (!appendAndIndexWikiCallback.langCodeToTCount.containsKey(langCode)) {
+        appendAndIndexWikiCallback.langCodeToTCount.put(langCode, new AtomicInteger());
+      }
+      appendAndIndexWikiCallback.langCodeToTCount.get(langCode).incrementAndGet();
       final String word = ListUtil.get(args, 1);
       final String gender = ListUtil.get(args, 2);
       // TODO: deal with second (and third...) gender, and alt.
@@ -186,15 +212,25 @@ public final class FunctionCallbacksDefault {
         final Map<String, String> namedArgs,
         final EnWiktionaryXmlParser parser,
         final AppendAndIndexWikiCallback appendAndIndexWikiCallback) {
-      if (args.size() != 1 || !namedArgs.isEmpty()) {
+      if (!namedArgs.isEmpty()) {
         LOG.warning("weird encoding: " + wikiTokenizer.token());
       }
       if (args.size() == 0) {
         // Things like "{{Jpan}}" exist.
         return true;
       }
-      final String wikiText = args.get(0);
-      appendAndIndexWikiCallback.dispatch(wikiText, appendAndIndexWikiCallback.entryTypeName);
+      
+      for (int i = 0; i < args.size(); ++i) {
+        if (i > 0) {
+          appendAndIndexWikiCallback.builder.append(", ");
+        }
+        final String arg = args.get(i);
+//        if (arg.equals(parser.title)) {
+//          parser.titleAppended = true;
+//        }
+        appendAndIndexWikiCallback.dispatch(arg, appendAndIndexWikiCallback.entryTypeName);
+      }
+      
       return true;
     }
   }
@@ -256,7 +292,11 @@ public final class FunctionCallbacksDefault {
         displayText = ListUtil.get(args, 1, null);
       }
       
-      appendAndIndexWikiCallback.dispatch(displayText, indexBuilder, entryTypeName);
+      if (displayText != null) {
+        appendAndIndexWikiCallback.dispatch(displayText, indexBuilder, entryTypeName);
+      } else {
+        LOG.warning("no display text: " + wikiTokenizer.token());
+      }
       
       final String tr = namedArgs.remove("tr");
       if (tr != null) {
@@ -388,6 +428,7 @@ public final class FunctionCallbacksDefault {
         final Map<String, String> namedArgs,
         final EnWiktionaryXmlParser parser,
         final AppendAndIndexWikiCallback appendAndIndexWikiCallback) {
+      parser.entryIsFormOfSomething = true;
       String formName = name;
       if (name.equals("form of")) {
         formName = ListUtil.remove(args, 0, null);