1ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/*
2ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru *
3ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved
4ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru *
5ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru */
6ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
7ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#ifndef __MORPHTABLES_H
8ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#define __MORPHTABLES_H
9ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
10ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/**
11ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * \file
12ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * \internal
13ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru */
14ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
15ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include "LETypes.h"
16ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include "LayoutTables.h"
17ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
18ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruU_NAMESPACE_BEGIN
19ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
20ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruclass LEGlyphStorage;
21ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
22ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querutypedef le_uint32 FeatureFlags;
23ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
24ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querutypedef le_int16 FeatureType;
25ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querutypedef le_int16 FeatureSetting;
26ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
27ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querustruct FeatureTableEntry
28ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{
29ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    FeatureType     featureType;
30ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    FeatureSetting  featureSetting;
31ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    FeatureFlags    enableFlags;
32ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    FeatureFlags    disableFlags;
33ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru};
34ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
35ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querustruct ChainHeader
36ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{
37ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    FeatureFlags        defaultFlags;
38ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    le_uint32           chainLength;
39ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    le_int16           nFeatureEntries;
40ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    le_int16           nSubtables;
41ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    FeatureTableEntry   featureTable[ANY_NUMBER];
42ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru};
43ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
44ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querustruct MorphTableHeader
45ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{
46ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    le_int32    version;
47ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    le_uint32   nChains;
48ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    ChainHeader chains[ANY_NUMBER];
49ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
50ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    void process(LEGlyphStorage &glyphStorage) const;
51ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru};
52ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
53ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querutypedef le_int16 SubtableCoverage;
54ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
55ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruenum SubtableCoverageFlags
56ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{
57ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    scfVertical = 0x8000,
58ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    scfReverse  = 0x4000,
59ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    scfIgnoreVt = 0x2000,
60ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    scfReserved = 0x1FF8,
61ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    scfTypeMask = 0x0007
62ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru};
63ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
64ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruenum MorphSubtableType
65ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{
66ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    mstIndicRearrangement               = 0,
67ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    mstContextualGlyphSubstitution      = 1,
68ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    mstLigatureSubstitution             = 2,
69ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    mstReservedUnused                   = 3,
70ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    mstNonContextualGlyphSubstitution   = 4,
71ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    mstContextualGlyphInsertion         = 5
72ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru};
73ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
74ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Querustruct MorphSubtableHeader
75ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru{
76ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    le_int16           length;
77ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    SubtableCoverage    coverage;
78ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    FeatureFlags        subtableFeatures;
79ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
80ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    void process(LEGlyphStorage &glyphStorage) const;
81ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru};
82ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
83ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste QueruU_NAMESPACE_END
84ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#endif
85ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
86