This repository has been archived by the owner on Jul 16, 2022. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 3
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Signed-off-by: Hiroshi Miura <miurahr@linux.com>
- Loading branch information
Showing
4 changed files
with
169 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
84 changes: 84 additions & 0 deletions
84
src/main/java/io/github/eb4j/ebview/dictionary/oxford/HTMLFormatter.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,84 @@ | ||
package io.github.eb4j.ebview.dictionary.oxford; | ||
|
||
import io.github.eb4j.ebview.data.DictionaryEntry; | ||
import tokyo.northside.oxfordapi.dtd.Entry; | ||
import tokyo.northside.oxfordapi.dtd.Example; | ||
import tokyo.northside.oxfordapi.dtd.LexicalEntry; | ||
import tokyo.northside.oxfordapi.dtd.Pronunciation; | ||
import tokyo.northside.oxfordapi.dtd.Sense; | ||
import tokyo.northside.oxfordapi.dtd.Translation; | ||
|
||
import java.util.List; | ||
|
||
public final class HTMLFormatter { | ||
|
||
private HTMLFormatter() { | ||
} | ||
|
||
public static DictionaryEntry formatTranslations(final LexicalEntry lexicalEntry) { | ||
String title = lexicalEntry.getText(); | ||
StringBuilder sb = new StringBuilder("<ol>"); | ||
for (Entry entry : lexicalEntry.getEntries()) { | ||
for (Sense sense : entry.getSenses()) { | ||
if (sense.getTranslations() == null) { | ||
continue; | ||
} | ||
for (Translation translation : sense.getTranslations()) { | ||
sb.append("<li>").append(translation.getText()).append("</li>"); | ||
} | ||
} | ||
} | ||
sb.append("</ol>"); | ||
return new DictionaryEntry(title, sb.toString(), "oxford"); | ||
} | ||
|
||
public static DictionaryEntry formatDefinitions(final LexicalEntry lexicalEntry) { | ||
String title = lexicalEntry.getText(); | ||
String category = lexicalEntry.getLexicalCategory().getText(); | ||
StringBuilder sb = new StringBuilder("[").append(category).append("] "); | ||
for (Entry entry : lexicalEntry.getEntries()) { | ||
List<Pronunciation> pronunciations = entry.getPronunciations(); | ||
if (pronunciations != null) { | ||
sb.append("<span>"); | ||
for (Pronunciation pron: pronunciations) { | ||
if (pron.getAudioFile() != null) { | ||
sb.append("<a href=\"").append(pron.getAudioFile()).append("\">"); | ||
} | ||
sb.append("[").append(pron.getPhoneticSpelling()).append("]"); | ||
if (pron.getAudioFile() != null) { | ||
sb.append("</a>"); | ||
} | ||
} | ||
sb.append("</span> "); | ||
} | ||
List<String> etymologies = entry.getEtymologies(); | ||
if (etymologies != null) { | ||
sb.append("<span>"); | ||
for (String etymology : etymologies) { | ||
sb.append(etymology); | ||
} | ||
sb.append("</span>"); | ||
} | ||
sb.append("<ol>"); | ||
for (Sense sense : entry.getSenses()) { | ||
if (sense.getDefinitions() == null) { | ||
continue; | ||
} | ||
for (String text : sense.getDefinitions()) { | ||
sb.append("<li>").append(text).append("</li>"); | ||
} | ||
|
||
List<Example> examples = sense.getExamples(); | ||
if (examples != null) { | ||
sb.append("<ul>"); | ||
for (Example ex : examples) { | ||
sb.append("<li>").append(ex.getText()).append("</li>"); | ||
} | ||
sb.append("</ul>"); | ||
} | ||
} | ||
sb.append("</ol>"); | ||
} | ||
return new DictionaryEntry(title, sb.toString(), "oxford"); | ||
} | ||
} |
79 changes: 79 additions & 0 deletions
79
src/main/java/io/github/eb4j/ebview/dictionary/oxford/OxfordDriver.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,79 @@ | ||
package io.github.eb4j.ebview.dictionary.oxford; | ||
|
||
import io.github.eb4j.ebview.data.DictionaryEntry; | ||
import io.github.eb4j.ebview.data.IDictionary; | ||
import tokyo.northside.oxfordapi.OxfordClient; | ||
import tokyo.northside.oxfordapi.OxfordClientException; | ||
import tokyo.northside.oxfordapi.dtd.LexicalEntry; | ||
import tokyo.northside.oxfordapi.dtd.Result; | ||
|
||
import java.util.ArrayList; | ||
import java.util.Collections; | ||
import java.util.HashMap; | ||
import java.util.List; | ||
import java.util.Map; | ||
|
||
public class OxfordDriver implements IDictionary { | ||
|
||
private final OxfordClient client; | ||
private final String source; | ||
private static final String APPID = ""; // FIXME | ||
private static final String APPKEY = ""; // FIXME: add GUI to set and store encrypted | ||
private final Map<String, List<DictionaryEntry>> cache = new HashMap<>(); | ||
|
||
public OxfordDriver() { | ||
source = "en-gb"; | ||
client = new OxfordClient(APPID, APPKEY); | ||
} | ||
|
||
@Override | ||
public String getDictionaryName() { | ||
return "Oxford Dictionaries"; | ||
} | ||
|
||
/** | ||
* Read article's text. | ||
* | ||
* @param word The word to look up in the dictionary | ||
* @return List of entries. May be empty, but cannot be null. | ||
*/ | ||
@Override | ||
public List<DictionaryEntry> readArticles(final String word) { | ||
return queryArticle(word, true); | ||
} | ||
|
||
/** | ||
* Read article's text. Matching is predictive, so e.g. supplying "term" | ||
* will return articles for "term", "terminology", "termite", etc. | ||
* | ||
* @param word The word to look up in the dictionary | ||
* @return List of entries. May be empty, but cannot be null. | ||
*/ | ||
@Override | ||
public List<DictionaryEntry> readArticlesPredictive(final String word) { | ||
return queryArticle(word, false); | ||
} | ||
|
||
private List<DictionaryEntry> queryArticle(final String word, final boolean strict) { | ||
if (!cache.containsKey(word)) { | ||
List<DictionaryEntry> dictionaryEntries = new ArrayList<>(); | ||
try { | ||
for (Result result: client.queryEntry(word, source, strict)) { | ||
for (LexicalEntry lexicalEntry : result.getLexicalEntries()) { | ||
dictionaryEntries.add(HTMLFormatter.formatDefinitions(lexicalEntry)); | ||
} | ||
} | ||
} catch (OxfordClientException oce) { | ||
// when got connection/query error, return without any content. | ||
return Collections.emptyList(); | ||
} | ||
cache.put(word, dictionaryEntries); | ||
} | ||
return cache.get(word); | ||
} | ||
|
||
|
||
@Override | ||
public void close() { | ||
} | ||
} |