X-Git-Url: http://gitweb.fperrin.net/?a=blobdiff_plain;f=src%2Fcom%2Fhughes%2Fandroid%2Fdictionary%2Fengine%2FHtmlEntry.java;h=f279a3d8f8fa14071dd89bd2ba29d86c8ba15a23;hb=e79165503392ed6a7cb7a8eadc15eaae0cda9443;hp=f69a325d83a61686359285c659f3b636a4dd143d;hpb=432606ca5a9378291ac82b49798a461e5c9f1872;p=Dictionary.git diff --git a/src/com/hughes/android/dictionary/engine/HtmlEntry.java b/src/com/hughes/android/dictionary/engine/HtmlEntry.java index f69a325..f279a3d 100644 --- a/src/com/hughes/android/dictionary/engine/HtmlEntry.java +++ b/src/com/hughes/android/dictionary/engine/HtmlEntry.java @@ -3,16 +3,17 @@ package com.hughes.android.dictionary.engine; import com.hughes.util.StringUtil; import com.hughes.util.raf.RAFListSerializer; +import com.hughes.util.raf.RAFListSerializerSkippable; import com.ibm.icu.text.Transliterator; import java.io.DataInput; import java.io.DataOutput; import java.io.IOException; import java.io.PrintStream; -import java.io.RandomAccessFile; import java.io.UnsupportedEncodingException; import java.lang.ref.SoftReference; import java.nio.channels.FileChannel; +import java.nio.charset.StandardCharsets; import java.util.List; import java.util.regex.Pattern; @@ -20,7 +21,8 @@ public class HtmlEntry extends AbstractEntry implements Comparable { // Title is not HTML escaped. public final String title; - public final LazyHtmlLoader lazyHtmlLoader; + private final LazyHtmlLoader lazyHtmlLoader; + @SuppressWarnings("WeakerAccess") public String html; public HtmlEntry(final EntrySource entrySource, String title) { @@ -37,18 +39,18 @@ public class HtmlEntry extends AbstractEntry implements Comparable { html = null; } - public void writeBase(DataOutput raf) throws IOException { + private void writeBase(DataOutput raf) throws IOException { super.write(raf); raf.writeUTF(title); } - public void writeData(DataOutput raf) throws IOException { - final byte[] bytes = getHtml().getBytes("UTF-8"); + private void writeData(DataOutput raf) throws IOException { + final byte[] bytes = getHtml().getBytes(StandardCharsets.UTF_8); StringUtil.writeVarInt(raf, bytes.length); raf.write(bytes); } - public static byte[] readData(DataInput raf) throws IOException { + private static byte[] readData(DataInput raf) throws IOException { int len = StringUtil.readVarInt(raf); final byte[] bytes = new byte[Math.min(len, 20 * 1024 * 1024)]; raf.readFully(bytes); @@ -71,7 +73,7 @@ public class HtmlEntry extends AbstractEntry implements Comparable { return new Row(this.index, rowIndex, dictionaryIndex); } - static final class Serializer implements RAFListSerializer { + static final class Serializer implements RAFListSerializerSkippable { final Dictionary dictionary; final FileChannel ch; @@ -86,6 +88,20 @@ public class HtmlEntry extends AbstractEntry implements Comparable { return new HtmlEntry(dictionary, ch, raf, index); } + @Override + public void skip(DataInput raf, final int index) throws IOException { + if (dictionary.dictFileVersion >= 7) + { + StringUtil.readVarInt(raf); + } + else + { + raf.skipBytes(2); + } + int l = raf.readUnsignedShort(); + raf.skipBytes(l); + } + @Override public void write(DataOutput raf, HtmlEntry t) throws IOException { t.writeBase(raf); @@ -94,7 +110,7 @@ public class HtmlEntry extends AbstractEntry implements Comparable { static final class DataSerializer implements RAFListSerializer { @Override - public HtmlEntry read(DataInput raf, final int index) throws IOException { + public HtmlEntry read(DataInput raf, final int index) { assert false; return null; } @@ -112,17 +128,17 @@ public class HtmlEntry extends AbstractEntry implements Comparable { } @Override - public void write(DataOutput raf, byte[] t) throws IOException { + public void write(DataOutput raf, byte[] t) { assert false; } } - public String getRawText(final boolean compact) { + private String getRawText(final boolean compact) { return title + ":\n" + getHtml(); } @Override - public int compareTo(HtmlEntry another) { + public int compareTo(/*@NonNull*/ HtmlEntry another) { if (title.compareTo(another.title) != 0) { return title.compareTo(another.title); } @@ -138,8 +154,6 @@ public class HtmlEntry extends AbstractEntry implements Comparable { public static class Row extends RowBase { - boolean isExpanded = false; - Row(final DataInput raf, final int thisRowIndex, final Index index, int extra) throws IOException { super(raf, thisRowIndex, index, extra); @@ -200,6 +214,7 @@ public class HtmlEntry extends AbstractEntry implements Comparable { return result.toString(); } + @SuppressWarnings("WeakerAccess") public static String formatQuickdicUrl(final String indexShortName, final String text) { assert !indexShortName.contains(":"); assert text.length() > 0; @@ -212,6 +227,7 @@ public class HtmlEntry extends AbstractEntry implements Comparable { // -------------------------------------------------------------------- + @SuppressWarnings("WeakerAccess") public static final class LazyHtmlLoader { final DataInput raf; final FileChannel ch; @@ -222,7 +238,7 @@ public class HtmlEntry extends AbstractEntry implements Comparable { final int index; // Not sure this volatile is right, but oh well. - volatile SoftReference htmlRef = new SoftReference(null); + volatile SoftReference htmlRef = new SoftReference<>(null); private LazyHtmlLoader(FileChannel ch, final DataInput inp, List data, int index) throws IOException { this.data = data; @@ -243,18 +259,14 @@ public class HtmlEntry extends AbstractEntry implements Comparable { raf.skipBytes(numZipBytes); } - public String getHtml() { + String getHtml() { String html = htmlRef.get(); if (html != null) { return html; } if (data != null) { - try { - html = new String(data.get(index), "UTF-8"); - } catch (UnsupportedEncodingException e) { - throw new RuntimeException("Dictionary HTML data corrupted", e); - } - htmlRef = new SoftReference(html); + html = new String(data.get(index), StandardCharsets.UTF_8); + htmlRef = new SoftReference<>(html); return html; } System.out.println("Loading Html: numBytes=" + numBytes + ", numZipBytes=" @@ -270,11 +282,11 @@ public class HtmlEntry extends AbstractEntry implements Comparable { } try { final byte[] bytes = StringUtil.unzipFully(zipBytes, numBytes); - html = new String(bytes, "UTF-8"); + html = new String(bytes, StandardCharsets.UTF_8); } catch (IOException e) { throw new RuntimeException("Dictionary HTML data corrupted", e); } - htmlRef = new SoftReference(html); + htmlRef = new SoftReference<>(html); return html; } }