summaryrefslogtreecommitdiffstats
path: root/src/org/madore/android/unicodeMap/UnicodeDatabase.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/org/madore/android/unicodeMap/UnicodeDatabase.java')
-rw-r--r--src/org/madore/android/unicodeMap/UnicodeDatabase.java31
1 files changed, 29 insertions, 2 deletions
diff --git a/src/org/madore/android/unicodeMap/UnicodeDatabase.java b/src/org/madore/android/unicodeMap/UnicodeDatabase.java
index 4114e6e..df91010 100644
--- a/src/org/madore/android/unicodeMap/UnicodeDatabase.java
+++ b/src/org/madore/android/unicodeMap/UnicodeDatabase.java
@@ -1,6 +1,8 @@
package org.madore.android.unicodeMap;
import java.util.Iterator;
+import java.util.List;
+import java.util.ArrayList;
import java.util.NoSuchElementException;
import java.io.InputStream;
import java.io.InputStreamReader;
@@ -143,13 +145,27 @@ public class UnicodeDatabase {
protected final static String[] queryColumns = { "id", "name", "category" };
+ public static UnicodeCharacter getSingleSpecial(int codePoint) {
+ if ( UnicodeCharacter.SpecialRange.isCjkUnifiedIdeograph(codePoint) )
+ return new UnicodeCharacter(codePoint,
+ UnicodeCharacter.SpecialRange.cjkUnifiedIdeographName(codePoint),
+ UnicodeCharacter.Category.OTHER_LETTER);
+ if ( UnicodeCharacter.SpecialRange.isHangulSyllable(codePoint) )
+ return new UnicodeCharacter(codePoint,
+ UnicodeCharacter.SpecialRange.hangulSyllableName(codePoint),
+ UnicodeCharacter.Category.OTHER_LETTER);
+ return null;
+ }
+
public UnicodeCharacter getSingle(int codePoint) {
+ UnicodeCharacter ch = getSingleSpecial(codePoint);
+ if ( ch != null )
+ return ch;
final Cursor c
= db.query(UNICODE_TABLE_NAME, queryColumns,
"id=?",
new String[] { Integer.toString(codePoint) },
null, null, null, null);
- UnicodeCharacter ch;
if ( c.getCount() > 0 ) {
c.moveToFirst();
ch = new UnicodeCharacter(c.getInt(0),
@@ -162,6 +178,9 @@ public class UnicodeDatabase {
}
public int countRange(int from, int to) {
+ int extra = 0;
+ for ( UnicodeCharacter.SpecialRange rng : UnicodeCharacter.SpecialRange.values() )
+ extra += rng.interCount(from, to);
final Cursor c
= db.rawQuery("SELECT count(*) FROM "+UNICODE_TABLE_NAME
+" WHERE id >= ? AND id < ?",
@@ -172,7 +191,7 @@ public class UnicodeDatabase {
c.moveToFirst();
int cnt = c.getInt(0);
c.close();
- return cnt;
+ return cnt + extra;
}
private static class CursorIterable
@@ -212,6 +231,14 @@ public class UnicodeDatabase {
}
public Iterable<UnicodeCharacter> getRange(int from, int to) {
+ for ( UnicodeCharacter.SpecialRange rng : UnicodeCharacter.SpecialRange.values() ) {
+ if ( rng.inside(from, to) ) {
+ List<UnicodeCharacter> list = new ArrayList<UnicodeCharacter>(to-from);
+ for ( int i=from ; i<to ; i++ )
+ list.add(getSingleSpecial(i));
+ return list;
+ }
+ }
final Cursor c
= db.query(UNICODE_TABLE_NAME, queryColumns,
"id >= ? AND id < ?",