X-Git-Url: http://gitweb.fperrin.net/?a=blobdiff_plain;f=src%2Fcom%2Fhughes%2Fandroid%2Fdictionary%2Fparser%2Fenwiktionary%2FAppendAndIndexWikiCallback.java;h=8e15fcea52d6b6785f716351be9bd27497a76352;hb=90ec4974a7834567b5721528e87a2ce857cce53b;hp=546d0af41223f419d57bb49acd9233257e0cf931;hpb=794c2989d4ff4c456c9aa1066150c6d51a5aae84;p=DictionaryPC.git diff --git a/src/com/hughes/android/dictionary/parser/enwiktionary/AppendAndIndexWikiCallback.java b/src/com/hughes/android/dictionary/parser/enwiktionary/AppendAndIndexWikiCallback.java index 546d0af..8e15fce 100644 --- a/src/com/hughes/android/dictionary/parser/enwiktionary/AppendAndIndexWikiCallback.java +++ b/src/com/hughes/android/dictionary/parser/enwiktionary/AppendAndIndexWikiCallback.java @@ -1,6 +1,5 @@ package com.hughes.android.dictionary.parser.enwiktionary; -import java.util.ArrayList; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; @@ -9,6 +8,7 @@ import com.hughes.android.dictionary.engine.EntryTypeName; import com.hughes.android.dictionary.engine.IndexBuilder; import com.hughes.android.dictionary.engine.IndexedEntry; import com.hughes.android.dictionary.parser.WikiTokenizer; +import com.hughes.util.EnumUtil; final class AppendAndIndexWikiCallback implements WikiTokenizer.Callback { @@ -35,7 +35,8 @@ final class AppendAndIndexWikiCallback implements WikiTokenizer.Callback { final IndexBuilder oldIndexBuilder = this.indexBuilder; final EntryTypeName oldEntryTypeName = this.entryTypeName; this.indexBuilder = indexBuilder; - this.entryTypeName = entryTypeName; + this.entryTypeName = EnumUtil.min(entryTypeName, this.entryTypeName); + if (entryTypeName == null) this.entryTypeName = null; WikiTokenizer.dispatch(wikiText, false, this); this.indexBuilder = oldIndexBuilder; this.entryTypeName = oldEntryTypeName; @@ -57,15 +58,34 @@ final class AppendAndIndexWikiCallback implements WikiTokenizer.Callback { @Override public void onWikiLink(WikiTokenizer wikiTokenizer) { - final String wikiText = wikiTokenizer.wikiLinkText(); - - final String linkDest = wikiTokenizer.wikiLinkDest(); - if (linkDest != null) { - System.out.println("linkDest: " + linkDest); - // TODO: Check for English before appending. - // TODO: Could also index under link dest, too. + final String text = wikiTokenizer.wikiLinkText(); + final String link = wikiTokenizer.wikiLinkDest(); + if (link != null) { + if (link.contains("#English")) { + dispatch(text, parser.enIndexBuilder, EntryTypeName.WIKTIONARY_ENGLISH_DEF_WIKI_LINK); + } else if (link.contains("#") && parser.langPattern.matcher(link).find()) { + dispatch(text, parser.foreignIndexBuilder, EntryTypeName.WIKTIONARY_ENGLISH_DEF_OTHER_LANG); + } else if (link.equals("plural")) { + builder.append(text); + } else { + //LOG.warning("Special link: " + englishTokenizer.token()); + dispatch(text, EntryTypeName.WIKTIONARY_ENGLISH_DEF_WIKI_LINK); + } + } else { + // link == null + final EntryTypeName entryTypeName; + switch (parser.state) { + case TRANSLATION_LINE: + entryTypeName = EntryTypeName.WIKTIONARY_TRANSLATION_WIKI_TEXT; + break; + case ENGLISH_DEF_OF_FOREIGN: + entryTypeName = EntryTypeName.WIKTIONARY_ENGLISH_DEF_WIKI_LINK; + break; + default: + throw new IllegalStateException("Invalid enum value: " + parser.state); + } + dispatch(text, entryTypeName); } - dispatch(wikiText, EntryTypeName.WIKTIONARY_TRANSLATION_WIKI_TEXT); } @Override @@ -75,24 +95,30 @@ final class AppendAndIndexWikiCallback implements WikiTokenizer.Callback { final List args, final Map namedArgs) { - final FunctionCallback functionCallback = functionCallbacks.get(name); + FunctionCallback functionCallback = functionCallbacks.get(name); + if (functionCallback == null) { + if ( + name.equals("form of") || + name.contains("conjugation of") || + name.contains("participle of") || + name.contains("gerund of") || + name.contains("feminine of") || + name.contains("plural of")) { + functionCallback = functionCallbacks.get("form of"); + } + } if (functionCallback == null || !functionCallback.onWikiFunction(wikiTokenizer, name, args, namedArgs, parser, this)) { // Default function handling: + namedArgs.keySet().removeAll(EnWiktionaryXmlParser.USELESS_WIKI_ARGS); + final boolean single = args.isEmpty() && namedArgs.isEmpty(); + builder.append(single ? "{" : "{{"); + final IndexBuilder oldIndexBuilder = indexBuilder; indexBuilder = null; - builder.append("{{").append(name); - for (int i = 0; i < args.size(); ++i) { - builder.append("|"); - WikiTokenizer.dispatch(args.get(i), false, this); - } - for (final Map.Entry entry : namedArgs.entrySet()) { - builder.append("|"); - WikiTokenizer.dispatch(entry.getKey(), false, this); - builder.append("="); - WikiTokenizer.dispatch(entry.getValue(), false, this); - } - builder.append("}}"); + FunctionCallbacksDefault.NAME_AND_ARGS.onWikiFunction(wikiTokenizer, name, args, namedArgs, parser, this); indexBuilder = oldIndexBuilder; + + builder.append(single ? "}" : "}}"); } }