• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 }