blob: e7e61d5ce03f56562a519fea748a8db8891d5e9b [file] [log] [blame]
/*
*******************************************************************************
* 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;
public class FeatureList
{
private Feature[] features;
private int featureCount;
public FeatureList()
{
features = new Feature[10];
featureCount = 0;
}
public void addFeature(Feature feature)
{
if (featureCount >= features.length) {
Feature[] newFeatures = new Feature[features.length + 5];
System.arraycopy(features, 0, newFeatures, 0, features.length);
features = newFeatures;
}
features[featureCount++] = feature;
}
public void finalizeFeatureList()
{
TaggedRecord.sort(features, featureCount);
for (int i = 0; i < featureCount; i += 1) {
features[i].setFeatureIndex(i);
}
}
public void writeFeaturetList(OpenTypeTableWriter writer)
{
System.out.print("writing feature list...");
int featureListBase = writer.getOutputIndex();
writer.writeData(featureCount);
int featureRecordOffset = writer.getOutputIndex();
for (int i = 0; i < featureCount; i += 1) {
String tag = features[i].getTag();
System.out.print(" '" + tag + "'");
writer.writeTag(tag);
writer.writeData(0);
}
for (int i = 0; i < featureCount; i += 1) {
// fix the offset in the featureRecordArray.
// The "+2" skips over the tag and the "+3"
// skips to the next featureRecord entry
writer.fixOffset(featureRecordOffset + 2, featureListBase);
featureRecordOffset += 3;
features[i].writeFeature(writer);
}
System.out.println();
}
}