Home | History | Annotate | Download | only in layout
      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 
     22     public FeatureList()
     23     {
     24         features = new Feature[10];
     25         featureCount = 0;
     26     }
     27 
     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 
     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 
     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 }