1 package com.hughes.android.dictionary.engine;
3 import java.io.IOException;
4 import java.io.PrintStream;
5 import java.io.RandomAccessFile;
7 import java.util.regex.Pattern;
9 import com.hughes.android.dictionary.engine.PairEntry.Pair;
10 import com.hughes.util.raf.RAFSerializable;
11 import com.hughes.util.raf.RAFSerializer;
12 import com.ibm.icu.text.Transliterator;
14 public class HtmlEntry extends AbstractEntry implements RAFSerializable<HtmlEntry>, Comparable<HtmlEntry> {
19 public HtmlEntry(Dictionary dictionary, RandomAccessFile raf) throws IOException {
20 super(dictionary, raf);
21 title = raf.readUTF();
25 public void write(RandomAccessFile raf) throws IOException {
32 public int addToDictionary(Dictionary dictionary) {
33 dictionary.htmlEntries.add(this);
34 return dictionary.htmlEntries.size() - 1;
37 static final class Serializer implements RAFSerializer<HtmlEntry> {
39 final Dictionary dictionary;
41 Serializer(Dictionary dictionary) {
42 this.dictionary = dictionary;
46 public HtmlEntry read(RandomAccessFile raf) throws IOException {
47 return new HtmlEntry(dictionary, raf);
51 public void write(RandomAccessFile raf, HtmlEntry t) throws IOException {
56 public String getRawText(final boolean compact) {
57 return title + ": " + html;
62 public int compareTo(HtmlEntry another) {
63 if (title.compareTo(another.title) != 0) {
64 return title.compareTo(another.title);
66 return html.compareTo(another.html);
70 public String toString() {
71 return getRawText(false);
74 // --------------------------------------------------------------------
77 public static class Row extends RowBase {
79 Row(final RandomAccessFile raf, final int thisRowIndex,
80 final Index index) throws IOException {
81 super(raf, thisRowIndex, index);
84 Row(final int referenceIndex, final int thisRowIndex,
86 super(referenceIndex, thisRowIndex, index);
90 public String toString() {
91 return getRawText(false);
94 public HtmlEntry getEntry() {
95 return index.dict.htmlEntries.get(referenceIndex);
99 public void print(PrintStream out) {
100 final HtmlEntry entry = getEntry();
105 public String getRawText(boolean compact) {
106 final HtmlEntry entry = getEntry();
107 return entry.getRawText(compact);
111 public RowMatchType matches(final List<String> searchTokens, final Pattern orderedMatchPattern, final Transliterator normalizer, final boolean swapPairEntries) {
112 final String text = normalizer.transform(getRawText(false));
113 if (orderedMatchPattern.matcher(text).find()) {
114 return RowMatchType.ORDERED_MATCH;
116 for (int i = searchTokens.size() - 1; i >= 0; --i) {
117 final String searchToken = searchTokens.get(i);
118 if (!text.contains(searchToken)) {
119 return RowMatchType.NO_MATCH;
122 return RowMatchType.BAG_OF_WORDS_MATCH;