]> gitweb.fperrin.net Git - Dictionary.git/blob - jars/icu4j-4_4_2-src/tools/misc/src/com/ibm/icu/dev/tool/layout/Lookup.java
go
[Dictionary.git] / jars / icu4j-4_4_2-src / tools / misc / src / com / ibm / icu / dev / tool / layout / Lookup.java
1 /*\r
2  *******************************************************************************\r
3  * Copyright (C) 1998-2004, International Business Machines Corporation and    *\r
4  * others. All Rights Reserved.                                                *\r
5  *******************************************************************************\r
6  *\r
7  * Created on Dec 3, 2003\r
8  *\r
9  *******************************************************************************\r
10  */\r
11 package com.ibm.icu.dev.tool.layout;\r
12 \r
13 \r
14 public /*abstract*/ class Lookup\r
15 {\r
16     private int lookupType;\r
17     private int lookupFlags;\r
18     private LookupSubtable[] subtables;\r
19     private int subtableCount;\r
20     \r
21     // Lookup flags\r
22     public final static int LF_ReservedBit          = 0x0001;\r
23     public final static int LF_IgnoreBaseGlyphs     = 0x0002;\r
24     public final static int LF_IgnoreLigatures      = 0x0004;\r
25     public final static int LF_IgnoreMarks          = 0x0008;\r
26     public final static int LF_ReservedMask         = 0x00F0;\r
27     public final static int LF_MarkAttachTypeMask   = 0xFF00;\r
28     public final static int LF_MarkAttachTypeShift  = 8;\r
29     \r
30     // GSUB lookup types\r
31     public final static int GSST_Single          = 1;\r
32     public final static int GSST_Multiple        = 2;\r
33     public final static int GSST_Alternate       = 3;\r
34     public final static int GSST_Ligature        = 4;\r
35     public final static int GSST_Context         = 5;\r
36     public final static int GSST_ChainingContext = 6;\r
37 \r
38     // GPOS lookup types\r
39     public final static int GPST_Single          = 1;\r
40     public final static int GPST_Pair            = 2;\r
41     public final static int GPST_Cursive         = 3;\r
42     public final static int GPST_MarkToBase      = 4;\r
43     public final static int GPST_MarkToLigature  = 5;\r
44     public final static int GPST_MarkToMark      = 6;\r
45     public final static int GPST_Context         = 7;\r
46     public final static int GPST_ChainingContext = 8;\r
47     \r
48     public Lookup(int theLookupType, int theLookupFlags)\r
49     {\r
50         lookupType = theLookupType;\r
51         lookupFlags = theLookupFlags;\r
52         \r
53         subtables = new LookupSubtable[10];\r
54         subtableCount = 0;\r
55     }\r
56     \r
57     public void addSubtable(LookupSubtable subtable)\r
58     {\r
59         if (subtableCount >= subtables.length) {\r
60             LookupSubtable[] newSubtables = new LookupSubtable[subtables.length + 5];\r
61             \r
62             System.arraycopy(subtables, 0, newSubtables, 0, subtables.length);\r
63             subtables = newSubtables;\r
64         }\r
65         \r
66         subtables[subtableCount] = subtable;\r
67         subtableCount += 1;\r
68     }\r
69     \r
70     public void writeLookup(OpenTypeTableWriter writer)\r
71     {\r
72         int lookupBase = writer.getOutputIndex();\r
73         \r
74         writer.writeData(lookupType);\r
75         writer.writeData(lookupFlags);\r
76         writer.writeData(subtableCount);\r
77         \r
78         int subtableOffset = writer.getOutputIndex();\r
79         \r
80         for (int i = 0; i < subtableCount; i += 1) {\r
81             writer.writeData(0);\r
82         }\r
83         \r
84         for (int i = 0; i < subtableCount; i += 1) {\r
85             writer.fixOffset(subtableOffset++, lookupBase);\r
86             subtables[i].writeLookupSubtable(writer);\r
87         }\r
88     }\r
89 }