blob: cfca302f4b785696bdb158199240e28235dd06d5 [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 /*abstract*/ class Lookup
{
private int lookupType;
private int lookupFlags;
private LookupSubtable[] subtables;
private int subtableCount;
// Lookup flags
public final static int LF_ReservedBit = 0x0001;
public final static int LF_IgnoreBaseGlyphs = 0x0002;
public final static int LF_IgnoreLigatures = 0x0004;
public final static int LF_IgnoreMarks = 0x0008;
public final static int LF_ReservedMask = 0x00F0;
public final static int LF_MarkAttachTypeMask = 0xFF00;
public final static int LF_MarkAttachTypeShift = 8;
// GSUB lookup types
public final static int GSST_Single = 1;
public final static int GSST_Multiple = 2;
public final static int GSST_Alternate = 3;
public final static int GSST_Ligature = 4;
public final static int GSST_Context = 5;
public final static int GSST_ChainingContext = 6;
// GPOS lookup types
public final static int GPST_Single = 1;
public final static int GPST_Pair = 2;
public final static int GPST_Cursive = 3;
public final static int GPST_MarkToBase = 4;
public final static int GPST_MarkToLigature = 5;
public final static int GPST_MarkToMark = 6;
public final static int GPST_Context = 7;
public final static int GPST_ChainingContext = 8;
public Lookup(int theLookupType, int theLookupFlags)
{
lookupType = theLookupType;
lookupFlags = theLookupFlags;
subtables = new LookupSubtable[10];
subtableCount = 0;
}
public void addSubtable(LookupSubtable subtable)
{
if (subtableCount >= subtables.length) {
LookupSubtable[] newSubtables = new LookupSubtable[subtables.length + 5];
System.arraycopy(subtables, 0, newSubtables, 0, subtables.length);
subtables = newSubtables;
}
subtables[subtableCount] = subtable;
subtableCount += 1;
}
public void writeLookup(OpenTypeTableWriter writer)
{
int lookupBase = writer.getOutputIndex();
writer.writeData(lookupType);
writer.writeData(lookupFlags);
writer.writeData(subtableCount);
int subtableOffset = writer.getOutputIndex();
for (int i = 0; i < subtableCount; i += 1) {
writer.writeData(0);
}
for (int i = 0; i < subtableCount; i += 1) {
writer.fixOffset(subtableOffset++, lookupBase);
subtables[i].writeLookupSubtable(writer);
}
}
}