blob: e5d0eb2b6982c2b7cfb536b382d16bab3764d0cb [file] [log] [blame]
// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html
/*
*******************************************************************************
* Copyright (C) 1998-2004, International Business Machines Corporation and *
* others. All Rights Reserved. *
*******************************************************************************
*
* Created on Dec 3, 2003
*
*******************************************************************************
*/
package com.ibm.icu.dev.tool.layout;
import com.ibm.icu.lang.UCharacter;
import com.ibm.icu.lang.UProperty;
import com.ibm.icu.text.Normalizer;
import com.ibm.icu.text.UnicodeSet;
public class ArabicCharacterData
{
public class Record
{
public int getCodePoint()
{
return codePoint;
}
public int getGeneralCategory()
{
return generalCategory;
}
public int getDecompositionType()
{
return decompositionType;
}
public String getDecomposition()
{
return decomposition;
}
private Record(int character)
{
codePoint = character;
generalCategory = UCharacter.getType(character);
decompositionType = UCharacter.getIntPropertyValue(character, UProperty.DECOMPOSITION_TYPE);
switch (decompositionType) {
case UCharacter.DecompositionType.FINAL:
case UCharacter.DecompositionType.INITIAL:
case UCharacter.DecompositionType.ISOLATED:
case UCharacter.DecompositionType.MEDIAL:
decomposition = Normalizer.compose(UCharacter.toString(character), true);
break;
case UCharacter.DecompositionType.CANONICAL:
decomposition = Normalizer.decompose(UCharacter.toString(character), true);
break;
default:
decomposition = null;
}
}
private int codePoint;
private int generalCategory;
private int decompositionType;
private String decomposition;
}
private ArabicCharacterData(int charCount)
{
records = new Record[charCount];
}
private void add(int character)
{
records[recordIndex++] = new Record(character);
}
public Record getRecord(int index)
{
if (index < 0 || index >= records.length) {
return null;
}
return records[index];
}
public int countRecords()
{
return records.length;
}
// TODO: do we need to change this to use UnicodeSetIterator?
// That will mean not knowing the number of characters until
// after the iteration is done, so we'd have to use a vector
// to hold the Records at first and copy it to an array
// when we're done...
public static ArabicCharacterData factory(UnicodeSet characterSet)
{
int charCount = characterSet.size();
ArabicCharacterData data = new ArabicCharacterData(charCount);
for (int i = 0; i < charCount; i += 1) {
data.add(characterSet.charAt(i));
}
return data;
}
private Record[] records;
private int recordIndex = 0;
}