]> gitweb.fperrin.net Git - Dictionary.git/blob - jars/icu4j-52_1/tools/misc/src/com/ibm/icu/dev/tool/layout/ArabicCharacterData.java
Added flags.
[Dictionary.git] / jars / icu4j-52_1 / tools / misc / src / com / ibm / icu / dev / tool / layout / ArabicCharacterData.java
1 /*
2  *******************************************************************************
3  * Copyright (C) 1998-2004, International Business Machines Corporation and    *
4  * others. All Rights Reserved.                                                *
5  *******************************************************************************
6  *
7  * Created on Dec 3, 2003
8  *
9  *******************************************************************************
10  */
11 package com.ibm.icu.dev.tool.layout;
12
13 import com.ibm.icu.lang.UCharacter;
14 import com.ibm.icu.lang.UProperty;
15 import com.ibm.icu.text.Normalizer;
16 import com.ibm.icu.text.UnicodeSet;
17
18 public class ArabicCharacterData
19 {
20     public class Record
21     {
22         public int getCodePoint()
23         {
24             return codePoint;
25         }
26         
27         public int getGeneralCategory()
28         {
29             return generalCategory;
30         }
31         
32         public int getDecompositionType()
33         {
34             return decompositionType;
35         }
36         
37         public String getDecomposition()
38         {
39             return decomposition;
40         }
41         
42         private Record(int character)
43         {
44             codePoint         = character;
45             generalCategory   = UCharacter.getType(character);
46             decompositionType = UCharacter.getIntPropertyValue(character, UProperty.DECOMPOSITION_TYPE);
47             
48             switch (decompositionType) {
49             case UCharacter.DecompositionType.FINAL:
50             case UCharacter.DecompositionType.INITIAL:
51             case UCharacter.DecompositionType.ISOLATED:
52             case UCharacter.DecompositionType.MEDIAL:
53                 decomposition = Normalizer.compose(UCharacter.toString(character), true);
54                 break;
55                 
56             case UCharacter.DecompositionType.CANONICAL:
57                 decomposition = Normalizer.decompose(UCharacter.toString(character), true);
58                 break;
59                 
60             default:
61                 decomposition = null;
62             }
63         }
64         
65         private int codePoint;
66         private int generalCategory;
67         private int decompositionType;
68         private String decomposition;
69     }
70     
71     private ArabicCharacterData(int charCount)
72     {
73         records = new Record[charCount];
74     }
75     
76     private void add(int character)
77     {
78         records[recordIndex++] = new Record(character);
79     }
80     
81     public Record getRecord(int index)
82     {
83         if (index < 0 || index >= records.length) {
84             return null;
85         }
86         
87         return records[index];
88     }
89     
90     public int countRecords()
91     {
92         return records.length;
93     }
94  
95     // TODO: do we need to change this to use UnicodeSetIterator?
96     // That will mean not knowing the number of characters until
97     // after the iteration is done, so we'd have to use a vector
98     // to hold the Records at first and copy it to an array
99     // when we're done...   
100     public static ArabicCharacterData factory(UnicodeSet characterSet)
101     {
102         int charCount = characterSet.size();
103         ArabicCharacterData data = new ArabicCharacterData(charCount);
104         
105         for (int i = 0; i < charCount; i += 1) {
106             data.add(characterSet.charAt(i));
107         }
108         
109         return data;
110     }
111     
112     private Record[] records;
113     private int recordIndex = 0;
114 }