class EnFunctionCallbacks {
static final Map<String,FunctionCallback<EnParser>> DEFAULT = new LinkedHashMap<String, FunctionCallback<EnParser>>();
+
+ static final Map<String,FunctionCallback<AbstractWiktionaryParser>> DEFAULT_GENERIC = new LinkedHashMap<String, FunctionCallback<AbstractWiktionaryParser>>();
+ static {
+ FunctionCallback<AbstractWiktionaryParser> callback = new TranslationCallback<AbstractWiktionaryParser>();
+ DEFAULT_GENERIC.put("t", callback);
+ }
+ static <T extends AbstractWiktionaryParser> void addGenericCallbacks(Map<String, FunctionCallback<T>> callbacks) {
+ FunctionCallback<T> callback = new Gender<T>();
+ callbacks.put("m", callback);
+ callbacks.put("f", callback);
+ callbacks.put("n", callback);
+ callbacks.put("p", callback);
+ callbacks.put("g", callback);
+
+ callback = new EncodingCallback<T>();
+ Set<String> encodings = new LinkedHashSet<String>(Arrays.asList(
+ "zh-ts", "zh-tsp",
+ "sd-Arab", "ku-Arab", "Arab", "unicode", "Laoo", "ur-Arab", "Thai",
+ "fa-Arab", "Khmr", "Cyrl", "IPAchar", "ug-Arab", "ko-inline",
+ "Jpan", "Kore", "Hebr", "rfscript", "Beng", "Mong", "Knda", "Cyrs",
+ "yue-tsj", "Mlym", "Tfng", "Grek", "yue-yue-j"));
+ for (final String encoding : encodings) {
+ callbacks.put(encoding, callback);
+ }
+
+ callback = new Ignore<T>();
+ callbacks.put("trreq", callback);
+ callbacks.put("t-image", callback);
+ callbacks.put("defn", callback);
+ callbacks.put("rfdef", callback);
+ callbacks.put("rfdate", callback);
+ callbacks.put("rfex", callback);
+ callbacks.put("rfquote", callback);
+ callbacks.put("attention", callback);
+ callbacks.put("zh-attention", callback);
+
+ callback = new AppendName<T>();
+ callbacks.put("...", callback);
+
+ callbacks.put("qualifier", new QualifierCallback<T>());
+ callbacks.put("italbrac", new italbrac<T>());
+ callbacks.put("gloss", new gloss<T>());
+ callbacks.put("not used", new not_used<T>());
+ callbacks.put("wikipedia", new wikipedia<T>());
+ }
+
static {
- FunctionCallback<EnParser> callback = new TranslationCallback();
+ addGenericCallbacks(DEFAULT);
+
+ FunctionCallback<EnParser> callback = new TranslationCallback<EnParser>();
DEFAULT.put("t", callback);
DEFAULT.put("t+", callback);
DEFAULT.put("t-", callback);
DEFAULT.put("tø", callback);
DEFAULT.put("apdx-t", callback);
- callback = new EncodingCallback();
- Set<String> encodings = new LinkedHashSet<String>(Arrays.asList(
- "zh-ts", "zh-tsp",
- "sd-Arab", "ku-Arab", "Arab", "unicode", "Laoo", "ur-Arab", "Thai",
- "fa-Arab", "Khmr", "Cyrl", "IPAchar", "ug-Arab", "ko-inline",
- "Jpan", "Kore", "Hebr", "rfscript", "Beng", "Mong", "Knda", "Cyrs",
- "yue-tsj", "Mlym", "Tfng", "Grek", "yue-yue-j"));
- for (final String encoding : encodings) {
- DEFAULT.put(encoding, callback);
- }
-
callback = new l_term();
DEFAULT.put("l", callback);
DEFAULT.put("term", callback);
- callback = new Gender();
- DEFAULT.put("m", callback);
- DEFAULT.put("f", callback);
- DEFAULT.put("n", callback);
- DEFAULT.put("p", callback);
- DEFAULT.put("g", callback);
-
- callback = new AppendArg0();
-
- callback = new Ignore();
- DEFAULT.put("trreq", callback);
- DEFAULT.put("t-image", callback);
- DEFAULT.put("defn", callback);
- DEFAULT.put("rfdef", callback);
- DEFAULT.put("rfdate", callback);
- DEFAULT.put("rfex", callback);
- DEFAULT.put("rfquote", callback);
- DEFAULT.put("attention", callback);
- DEFAULT.put("zh-attention", callback);
-
+ //callback = new AppendArg0();
callback = new FormOf();
DEFAULT.put("form of", callback);
callback = new InflOrHead();
DEFAULT.put("infl", callback);
DEFAULT.put("head", callback);
-
- 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());
}
static final NameAndArgs<EnParser> NAME_AND_ARGS = new NameAndArgs<EnParser>();
// ------------------------------------------------------------------
- static final class TranslationCallback implements FunctionCallback<EnParser> {
+ static final class TranslationCallback<T extends AbstractWiktionaryParser> implements FunctionCallback<T> {
@Override
public boolean onWikiFunction(final WikiTokenizer wikiTokenizer, final String name, final List<String> args,
- final Map<String, String> namedArgs, final EnParser parser,
- final AppendAndIndexWikiCallback<EnParser> appendAndIndexWikiCallback) {
+ final Map<String, String> namedArgs, final T parser,
+ final AppendAndIndexWikiCallback<T> appendAndIndexWikiCallback) {
final String transliteration = namedArgs.remove("tr");
final String alt = namedArgs.remove("alt");
namedArgs.keySet().removeAll(EnParser.USELESS_WIKI_ARGS);
if (args.size() < 2) {
- EnParser.LOG.warning("{{t...}} with wrong args: title=" + parser.title);
+ if (!name.equals("ttbc")) {
+ EnParser.LOG.warning("{{t...}} with wrong args: title=" + parser.title + ", " + wikiTokenizer.token());
+ }
return false;
}
final String langCode = ListUtil.get(args, 0);
// ------------------------------------------------------------------
- static final class QualifierCallback implements FunctionCallback<EnParser> {
+ static final class QualifierCallback<T extends AbstractWiktionaryParser> implements FunctionCallback<T> {
@Override
public boolean onWikiFunction(final WikiTokenizer wikiTokenizer, final String name, final List<String> args,
final Map<String, String> namedArgs,
- final EnParser parser,
- final AppendAndIndexWikiCallback<EnParser> appendAndIndexWikiCallback) {
+ final T parser,
+ final AppendAndIndexWikiCallback<T> appendAndIndexWikiCallback) {
if (args.size() != 1 || !namedArgs.isEmpty()) {
EnParser.LOG.warning("weird qualifier: ");
return false;
// ------------------------------------------------------------------
- static final class EncodingCallback implements FunctionCallback<EnParser> {
+ static final class EncodingCallback<T extends AbstractWiktionaryParser> implements FunctionCallback<T> {
@Override
public boolean onWikiFunction(final WikiTokenizer wikiTokenizer, final String name, final List<String> args,
final Map<String, String> namedArgs,
- final EnParser parser,
- final AppendAndIndexWikiCallback<EnParser> appendAndIndexWikiCallback) {
+ final T parser,
+ final AppendAndIndexWikiCallback<T> appendAndIndexWikiCallback) {
if (!namedArgs.isEmpty()) {
EnParser.LOG.warning("weird encoding: " + wikiTokenizer.token());
}
// ------------------------------------------------------------------
- static final class Gender implements FunctionCallback<EnParser> {
+ static final class Gender<T extends AbstractWiktionaryParser> implements FunctionCallback<T> {
@Override
public boolean onWikiFunction(final WikiTokenizer wikiTokenizer, final String name, final List<String> args,
final Map<String, String> namedArgs,
- final EnParser parser,
- final AppendAndIndexWikiCallback<EnParser> appendAndIndexWikiCallback) {
+ final T parser,
+ final AppendAndIndexWikiCallback<T> appendAndIndexWikiCallback) {
if (!namedArgs.isEmpty()) {
return false;
}
// ------------------------------------------------------------------
- static final class AppendArg0 implements FunctionCallback<EnParser> {
+ static final class AppendArg0<T extends AbstractWiktionaryParser> implements FunctionCallback<EnParser> {
@Override
public boolean onWikiFunction(final WikiTokenizer wikiTokenizer, final String name, final List<String> args,
final Map<String, String> namedArgs,
// ------------------------------------------------------------------
- static final class italbrac implements FunctionCallback<EnParser> {
+ static final class italbrac<T extends AbstractWiktionaryParser> implements FunctionCallback<T> {
@Override
public boolean onWikiFunction(final WikiTokenizer wikiTokenizer, final String name, final List<String> args,
final Map<String, String> namedArgs,
- final EnParser parser,
- final AppendAndIndexWikiCallback<EnParser> appendAndIndexWikiCallback) {
+ final T parser,
+ final AppendAndIndexWikiCallback<T> appendAndIndexWikiCallback) {
if (args.size() != 1 || !namedArgs.isEmpty()) {
return false;
}
// ------------------------------------------------------------------
- static final class gloss implements FunctionCallback<EnParser> {
+ static final class gloss<T extends AbstractWiktionaryParser> implements FunctionCallback<T> {
@Override
public boolean onWikiFunction(final WikiTokenizer wikiTokenizer, final String name, final List<String> args,
final Map<String, String> namedArgs,
- final EnParser parser,
- final AppendAndIndexWikiCallback<EnParser> appendAndIndexWikiCallback) {
+ final T parser,
+ final AppendAndIndexWikiCallback<T> appendAndIndexWikiCallback) {
if (args.size() != 1 || !namedArgs.isEmpty()) {
return false;
}
// ------------------------------------------------------------------
- static final class Ignore implements FunctionCallback<EnParser> {
+ static final class Ignore<T extends AbstractWiktionaryParser> implements FunctionCallback<T> {
@Override
public boolean onWikiFunction(final WikiTokenizer wikiTokenizer, final String name, final List<String> args,
final Map<String, String> namedArgs,
- final EnParser parser,
- final AppendAndIndexWikiCallback<EnParser> appendAndIndexWikiCallback) {
+ final T parser,
+ final AppendAndIndexWikiCallback<T> appendAndIndexWikiCallback) {
return true;
}
}
// ------------------------------------------------------------------
- static final class not_used implements FunctionCallback<EnParser> {
+ static final class not_used<T extends AbstractWiktionaryParser> implements FunctionCallback<T> {
@Override
public boolean onWikiFunction(final WikiTokenizer wikiTokenizer, final String name, final List<String> args,
final Map<String, String> namedArgs,
- final EnParser parser,
- final AppendAndIndexWikiCallback<EnParser> appendAndIndexWikiCallback) {
+ final T parser,
+ final AppendAndIndexWikiCallback<T> appendAndIndexWikiCallback) {
appendAndIndexWikiCallback.builder.append("(not used)");
return true;
}
// ------------------------------------------------------------------
- static final class AppendName implements FunctionCallback<EnParser> {
+ static final class AppendName<T extends AbstractWiktionaryParser> implements FunctionCallback<T> {
@Override
public boolean onWikiFunction(final WikiTokenizer wikiTokenizer, final String name, final List<String> args,
final Map<String, String> namedArgs,
- final EnParser parser,
- final AppendAndIndexWikiCallback<EnParser> appendAndIndexWikiCallback) {
+ final T parser,
+ final AppendAndIndexWikiCallback<T> appendAndIndexWikiCallback) {
if (!args.isEmpty() || !namedArgs.isEmpty()) {
return false;
}
// --------------------------------------------------------------------
// --------------------------------------------------------------------
- static final class wikipedia implements FunctionCallback<EnParser> {
+ static final class wikipedia<T extends AbstractWiktionaryParser> implements FunctionCallback<T> {
@Override
public boolean onWikiFunction(final WikiTokenizer wikiTokenizer, final String name, final List<String> args,
final Map<String, String> namedArgs,
- final EnParser parser,
- final AppendAndIndexWikiCallback<EnParser> appendAndIndexWikiCallback) {
+ final T parser,
+ final AppendAndIndexWikiCallback<T> appendAndIndexWikiCallback) {
namedArgs.remove("lang");
if (args.size() > 1 || !namedArgs.isEmpty()) {
// Unindexed!
final EnParser parser,
final AppendAndIndexWikiCallback<EnParser> appendAndIndexWikiCallback) {
// See: http://en.wiktionary.org/wiki/Template:infl
+ // TODO: Actually these functions should start a new WordPOS:
+ // See: http://en.wiktionary.org/wiki/quattro
final String langCode = ListUtil.get(args, 0);
String head = namedArgs.remove("head");
if (head == null) {
if (head == null) {
head = parser.title;
}
- parser.titleAppended = true;
namedArgs.keySet().removeAll(EnParser.USELESS_WIKI_ARGS);
final String g2 = namedArgs.remove("g2");
final String g3 = namedArgs.remove("g3");
- appendAndIndexWikiCallback.dispatch(head, EntryTypeName.WIKTIONARY_TITLE_MULTI);
+ // We might have already taken care of this in a generic way...
+ if (!parser.titleAppended) {
+ appendAndIndexWikiCallback.dispatch(head, EntryTypeName.WIKTIONARY_TITLE_MULTI);
+ parser.titleAppended = true;
+ }
if (g != null) {
appendAndIndexWikiCallback.builder.append(" {").append(g);