1 // © 2016 and later: Unicode, Inc. and others. 2 // License & terms of use: http://www.unicode.org/copyright.html#License 3 /* 4 ******************************************************************************* 5 * Copyright (C) 1998-2004, International Business Machines Corporation and * 6 * others. All Rights Reserved. * 7 ******************************************************************************* 8 * 9 * Created on Dec 3, 2003 10 * 11 ******************************************************************************* 12 */ 13 package com.ibm.icu.dev.tool.layout; 14 15 16 public class FeatureList 17 { 18 19 private Feature[] features; 20 private int featureCount; 21 FeatureList()22 public FeatureList() 23 { 24 features = new Feature[10]; 25 featureCount = 0; 26 } 27 addFeature(Feature feature)28 public void addFeature(Feature feature) 29 { 30 if (featureCount >= features.length) { 31 Feature[] newFeatures = new Feature[features.length + 5]; 32 33 System.arraycopy(features, 0, newFeatures, 0, features.length); 34 features = newFeatures; 35 } 36 37 features[featureCount++] = feature; 38 } 39 finalizeFeatureList()40 public void finalizeFeatureList() 41 { 42 TaggedRecord.sort(features, featureCount); 43 44 for (int i = 0; i < featureCount; i += 1) { 45 features[i].setFeatureIndex(i); 46 } 47 } 48 writeFeaturetList(OpenTypeTableWriter writer)49 public void writeFeaturetList(OpenTypeTableWriter writer) 50 { 51 System.out.print("writing feature list..."); 52 53 int featureListBase = writer.getOutputIndex(); 54 55 writer.writeData(featureCount); 56 57 int featureRecordOffset = writer.getOutputIndex(); 58 59 for (int i = 0; i < featureCount; i += 1) { 60 String tag = features[i].getTag(); 61 62 System.out.print(" '" + tag + "'"); 63 writer.writeTag(tag); 64 writer.writeData(0); 65 } 66 67 for (int i = 0; i < featureCount; i += 1) { 68 // fix the offset in the featureRecordArray. 69 // The "+2" skips over the tag and the "+3" 70 // skips to the next featureRecord entry 71 writer.fixOffset(featureRecordOffset + 2, featureListBase); 72 featureRecordOffset += 3; 73 74 features[i].writeFeature(writer); 75 } 76 77 System.out.println(); 78 } 79 }