/* WTranslation.java - corresponds to a Translations level of Wiktionary word. * * Copyright (c) 2008 Andrew Krizhanovsky <andrew.krizhanovsky at gmail.com> * Distributed under GNU General Public License. */ package wikokit.base.wikt.word; //import wikt.util.WikiWord; import wikokit.base.wikt.util.WikiText; import wikokit.base.wikipedia.language.LanguageType; import wikokit.base.wikt.util.POSText; import wikokit.base.wikt.multi.ru.WTranslationRu; import wikokit.base.wikt.multi.en.WTranslationEn; /** Translations of Wiktionary word. * * Quote from http://en.wiktionary.org/wiki/Wiktionary:Entry_layout_explained: * The translation section is separated into a number of divisions that are * keyed to the various meanings of the English word. Each division is * separated into a distinct collapsible navigation box by use of the * translation section templates. * The boxes are each headed by a summary of the translated meaning. */ public class WTranslation { /** Section (box) title, i.e. additional comment, * e.g. "fruit" or "apple tree" for "apple". * A summary of the translated meaning. */ private String meaning_summary; /** Translations */ private WTranslationEntry[] entry; private final static WTranslation[] NULL_WTRANSLATION_ARRAY = new WTranslation[0]; //private final static WTranslation NULL_WTRANSLATION = new WTranslation(); public WTranslation(String _meaning_summary, WTranslationEntry[] _entry) { meaning_summary = _meaning_summary; entry = _entry; } /** Gets a summary of the translated meaning, i.e. a header of the box. */ public String getHeader() { return meaning_summary; } /** Gets translation entries into all languages. */ public WTranslationEntry[] getTranslations() { return entry; } /** Gets number of translation entries. */ public int getTranslationsNumber() { return entry.length; } /** Gets translation entries into the languages 'lang'. */ public WikiText[] getTranslationIntoLanguage(LanguageType lang) { //public WikiWord[] getTranslationIntoLanguage(LanguageType lang) { for(WTranslationEntry e : entry) { if(lang == e.getLanguage()) { return e.getWikiPhrases(); // return e.getWikiWords(); } } return null; } /** Frees memory recursively. */ public void free () { if(null != entry) { for(int i=0; i<entry.length; i++) { entry[i].free(); entry[i] = null; } entry = null; } } /** Parses text (related to the Translation), creates and fills array of * translations (WTranslation) for each meaning of a word. * * @param wikt_lang language of Wiktionary * @param page_title word which are described in this article 'text' * @param lang_section language of this section of an article * @param pt POSText defines POS stored in pt.text * @return */ public static WTranslation[] parse ( LanguageType wikt_lang, String page_title, LanguageType lang_section, POSText pt) { // === Level III. Translation === WTranslation[] wt = NULL_WTRANSLATION_ARRAY; LanguageType l = wikt_lang; if(l == LanguageType.ru) { // get context labels, definitions, and quotations /* if(0==wm.length) { return NULL_WTRANSLATION_ARRAY; }*/ wt = WTranslationRu.parse(wikt_lang, lang_section, page_title, pt); } else if(l == LanguageType.en) { wt = WTranslationEn.parse(wikt_lang, lang_section, page_title, pt); //} //else if(code.equalsIgnoreCase( "simple" )) { // return WordSimple; // todo // ... } else { throw new NullPointerException("Null LanguageType"); } return wt; } /** Parses one translation box, i.e. extracts languages and a list of * translations (wikified words) for each language, * creates and fills WTranslation. * * @param wikt_lang language of Wiktionary * @param page_title word which are described in this article 'text' * @param line definition line * @return WTranslation or null if the translation text block was not found. */ public static WTranslation parseOneTranslationBox(LanguageType wikt_lang, String page_title, String line) { WTranslation wt = null; LanguageType l = wikt_lang; if(l == LanguageType.ru) { wt = WTranslationRu.parseOneTranslationBox(wikt_lang, page_title, line); } else if(l == LanguageType.en) { wt = WTranslationEn.parseOneTranslationBox(wikt_lang, page_title, line); //} //else if(code.equalsIgnoreCase( "simple" )) { // return WordSimple; // todo // ... } else { throw new NullPointerException("Null LanguageType"); } return wt; } }