OSDN Git Service

from subversion repository
[jindolf/Jindolf.git] / src / main / java / jp / sourceforge / jindolf / CodeX0208.java
1 /*\r
2  * JIS X0208:1990 文字集合に関する諸々\r
3  *\r
4  * Copyright(c) 2008 olyutorskii\r
5  * $Id: CodeX0208.java 1002 2010-03-15 12:14:20Z olyutorskii $\r
6  */\r
7 \r
8 package jp.sourceforge.jindolf;\r
9 \r
10 import java.io.IOException;\r
11 import java.util.Arrays;\r
12 import java.util.SortedSet;\r
13 import java.util.TreeSet;\r
14 \r
15 /**\r
16  * JIS X0208:1990 文字集合に関する諸々。\r
17  * TODO G国がUTF-8化した今、このクラスは不要?\r
18  */\r
19 public final class CodeX0208{\r
20 \r
21     private static final String RESOURCE_INVALIDCHAR =\r
22             "resources/invalidX0208.txt";\r
23     private static final char[] INVALID_CHAR_ARRAY = createInvalidCharArray();\r
24 \r
25     /**\r
26      * ソートされた、禁止文字配列を生成する。\r
27      * @return 禁止文字配列。\r
28      */\r
29     private static char[] createInvalidCharArray(){\r
30         CharSequence source;\r
31         try{\r
32             source = Jindolf.loadResourceText(RESOURCE_INVALIDCHAR);\r
33         }catch(IOException e){\r
34             assert false;\r
35             return null;\r
36         }\r
37 \r
38         SortedSet<Character> charSet = new TreeSet<Character>();\r
39         int sourceLength = source.length();\r
40         for(int pos = 0; pos < sourceLength; pos++){\r
41             char ch = source.charAt(pos);\r
42             if(Character.isWhitespace(ch)) continue;\r
43             charSet.add(ch);\r
44         }\r
45 \r
46         char[] result = new char[charSet.size()];\r
47         int pos = 0;\r
48         for(char ch : charSet){\r
49             result[pos++] = ch;\r
50         }\r
51 \r
52         Arrays.sort(result);\r
53 \r
54         return result;\r
55     }\r
56 \r
57     /**\r
58      * 禁止文字か否か判定する。\r
59      * @param ch 判定対象文字\r
60      * @return 禁止ならfalse\r
61      */\r
62     public static boolean isValid(char ch){\r
63         int index = Arrays.binarySearch(INVALID_CHAR_ARRAY, ch);\r
64         if(index < 0) return true;\r
65         return false;\r
66     }\r
67 \r
68     /**\r
69      * ダミーコンストラクタ。\r
70      */\r
71     private CodeX0208(){\r
72         assert false;\r
73         throw new AssertionError();\r
74     }\r
75 \r
76     // TODO アラビア語やハングルやも弾きたい。\r
77     // TODO JISエンコーダと区点チェックに作り直すか?\r
78 }\r