os/textandloc/fontservices/textshaperplugin/IcuSource/layout/ContextualSubstSubtables.h
author sl
Tue, 10 Jun 2014 14:32:02 +0200
changeset 1 260cb5ec6c19
permissions -rw-r--r--
Update contrib.
sl@0
     1
/*
sl@0
     2
 *
sl@0
     3
 * (C) Copyright IBM Corp. 1998-2004 - All Rights Reserved
sl@0
     4
 *
sl@0
     5
 */
sl@0
     6
sl@0
     7
#ifndef __CONTEXTUALSUBSTITUTIONSUBTABLES_H
sl@0
     8
#define __CONTEXTUALSUBSTITUTIONSUBTABLES_H
sl@0
     9
sl@0
    10
/**
sl@0
    11
 * \file
sl@0
    12
 * \internal
sl@0
    13
 */
sl@0
    14
sl@0
    15
#include "LETypes.h"
sl@0
    16
#include "LEFontInstance.h"
sl@0
    17
#include "OpenTypeTables.h"
sl@0
    18
#include "GlyphSubstitutionTables.h"
sl@0
    19
#include "GlyphIterator.h"
sl@0
    20
#include "LookupProcessor.h"
sl@0
    21
sl@0
    22
U_NAMESPACE_BEGIN
sl@0
    23
sl@0
    24
struct SubstitutionLookupRecord
sl@0
    25
{
sl@0
    26
    le_uint16  sequenceIndex;
sl@0
    27
    le_uint16  lookupListIndex;
sl@0
    28
};
sl@0
    29
sl@0
    30
struct ContextualSubstitutionBase : GlyphSubstitutionSubtable
sl@0
    31
{
sl@0
    32
    static le_bool matchGlyphIDs(
sl@0
    33
        const TTGlyphID *glyphArray, le_uint16 glyphCount, GlyphIterator *glyphIterator,
sl@0
    34
        le_bool backtrack = FALSE);
sl@0
    35
sl@0
    36
    static le_bool matchGlyphClasses(
sl@0
    37
        const le_uint16 *classArray, le_uint16 glyphCount, GlyphIterator *glyphIterator,
sl@0
    38
        const ClassDefinitionTable *classDefinitionTable, le_bool backtrack = FALSE);
sl@0
    39
sl@0
    40
    static le_bool matchGlyphCoverages(
sl@0
    41
        const Offset *coverageTableOffsetArray, le_uint16 glyphCount,
sl@0
    42
        GlyphIterator *glyphIterator, const char *offsetBase, le_bool backtrack = FALSE);
sl@0
    43
sl@0
    44
    static void applySubstitutionLookups(
sl@0
    45
        const LookupProcessor *lookupProcessor, 
sl@0
    46
        const SubstitutionLookupRecord *substLookupRecordArray,
sl@0
    47
        le_uint16 substCount,
sl@0
    48
        GlyphIterator *glyphIterator,
sl@0
    49
        const LEFontInstance *fontInstance,
sl@0
    50
        le_int32 position,
sl@0
    51
        LEErrorCode& success);
sl@0
    52
};
sl@0
    53
sl@0
    54
struct ContextualSubstitutionSubtable : ContextualSubstitutionBase
sl@0
    55
{
sl@0
    56
    le_uint32  process(const LookupProcessor *lookupProcessor, GlyphIterator *glyphIterator,
sl@0
    57
        const LEFontInstance *fontInstance, LEErrorCode& success) const;
sl@0
    58
};
sl@0
    59
sl@0
    60
struct ContextualSubstitutionFormat1Subtable : ContextualSubstitutionSubtable
sl@0
    61
{
sl@0
    62
    le_uint16  subRuleSetCount;
sl@0
    63
    Offset  subRuleSetTableOffsetArray[ANY_NUMBER];
sl@0
    64
sl@0
    65
    le_uint32  process(const LookupProcessor *lookupProcessor, GlyphIterator *glyphIterator,
sl@0
    66
        const LEFontInstance *fontInstance, LEErrorCode& success) const;
sl@0
    67
};
sl@0
    68
sl@0
    69
struct SubRuleSetTable
sl@0
    70
{
sl@0
    71
    le_uint16  subRuleCount;
sl@0
    72
    Offset  subRuleTableOffsetArray[ANY_NUMBER];
sl@0
    73
sl@0
    74
};
sl@0
    75
sl@0
    76
// NOTE: Multiple variable size arrays!!
sl@0
    77
struct SubRuleTable
sl@0
    78
{
sl@0
    79
    le_uint16  glyphCount;
sl@0
    80
    le_uint16  substCount;
sl@0
    81
    TTGlyphID inputGlyphArray[ANY_NUMBER];
sl@0
    82
  //SubstitutionLookupRecord substLookupRecordArray[ANY_NUMBER];
sl@0
    83
};
sl@0
    84
sl@0
    85
struct ContextualSubstitutionFormat2Subtable : ContextualSubstitutionSubtable
sl@0
    86
{
sl@0
    87
    Offset  classDefTableOffset;
sl@0
    88
    le_uint16  subClassSetCount;
sl@0
    89
    Offset  subClassSetTableOffsetArray[ANY_NUMBER];
sl@0
    90
sl@0
    91
    le_uint32  process(const LookupProcessor *lookupProcessor, GlyphIterator *glyphIterator,
sl@0
    92
        const LEFontInstance *fontInstance, LEErrorCode& success) const;
sl@0
    93
};
sl@0
    94
sl@0
    95
struct SubClassSetTable
sl@0
    96
{
sl@0
    97
    le_uint16  subClassRuleCount;
sl@0
    98
    Offset  subClassRuleTableOffsetArray[ANY_NUMBER];
sl@0
    99
};
sl@0
   100
sl@0
   101
// NOTE: Multiple variable size arrays!!
sl@0
   102
struct SubClassRuleTable
sl@0
   103
{
sl@0
   104
    le_uint16  glyphCount;
sl@0
   105
    le_uint16  substCount;
sl@0
   106
    le_uint16  classArray[ANY_NUMBER];
sl@0
   107
  //SubstitutionLookupRecord substLookupRecordArray[ANY_NUMBER];
sl@0
   108
};
sl@0
   109
sl@0
   110
// NOTE: This isn't a subclass of GlyphSubstitutionSubtable 'cause
sl@0
   111
// it has an array of coverage tables instead of a single coverage table...
sl@0
   112
//
sl@0
   113
// NOTE: Multiple variable size arrays!!
sl@0
   114
struct ContextualSubstitutionFormat3Subtable
sl@0
   115
{
sl@0
   116
    le_uint16  substFormat;
sl@0
   117
    le_uint16  glyphCount;
sl@0
   118
    le_uint16  substCount;
sl@0
   119
    Offset  coverageTableOffsetArray[ANY_NUMBER];
sl@0
   120
  //SubstitutionLookupRecord substLookupRecord[ANY_NUMBER];
sl@0
   121
sl@0
   122
    le_uint32  process(const LookupProcessor *lookupProcessor, GlyphIterator *glyphIterator,
sl@0
   123
        const LEFontInstance *fontInstance, LEErrorCode& success) const;
sl@0
   124
};
sl@0
   125
sl@0
   126
struct ChainingContextualSubstitutionSubtable : ContextualSubstitutionBase
sl@0
   127
{
sl@0
   128
    le_uint32  process(const LookupProcessor *lookupProcessor, GlyphIterator *glyphIterator,
sl@0
   129
        const LEFontInstance *fontInstance, LEErrorCode& success) const;
sl@0
   130
};
sl@0
   131
sl@0
   132
struct ChainingContextualSubstitutionFormat1Subtable : ChainingContextualSubstitutionSubtable
sl@0
   133
{
sl@0
   134
    le_uint16  chainSubRuleSetCount;
sl@0
   135
    Offset  chainSubRuleSetTableOffsetArray[ANY_NUMBER];
sl@0
   136
sl@0
   137
    le_uint32  process (const LookupProcessor *lookupProcessor, GlyphIterator *glyphIterator,
sl@0
   138
        const LEFontInstance *fontInstance, LEErrorCode& success) const;
sl@0
   139
};
sl@0
   140
sl@0
   141
struct ChainSubRuleSetTable
sl@0
   142
{
sl@0
   143
    le_uint16  chainSubRuleCount;
sl@0
   144
    Offset  chainSubRuleTableOffsetArray[ANY_NUMBER];
sl@0
   145
sl@0
   146
};
sl@0
   147
sl@0
   148
// NOTE: Multiple variable size arrays!!
sl@0
   149
struct ChainSubRuleTable
sl@0
   150
{
sl@0
   151
    le_uint16  backtrackGlyphCount;
sl@0
   152
    TTGlyphID backtrackGlyphArray[ANY_NUMBER];
sl@0
   153
  //le_uint16  inputGlyphCount;
sl@0
   154
  //TTGlyphID inputGlyphArray[ANY_NUMBER];
sl@0
   155
  //le_uint16  lookaheadGlyphCount;
sl@0
   156
  //TTGlyphID lookaheadGlyphArray[ANY_NUMBER];
sl@0
   157
  //le_uint16  substCount;
sl@0
   158
  //SubstitutionLookupRecord substLookupRecordArray[ANY_NUMBER];
sl@0
   159
};
sl@0
   160
sl@0
   161
struct ChainingContextualSubstitutionFormat2Subtable : ChainingContextualSubstitutionSubtable
sl@0
   162
{
sl@0
   163
    Offset  backtrackClassDefTableOffset;
sl@0
   164
    Offset  inputClassDefTableOffset;
sl@0
   165
    Offset  lookaheadClassDefTableOffset;
sl@0
   166
    le_uint16  chainSubClassSetCount;
sl@0
   167
    Offset  chainSubClassSetTableOffsetArray[ANY_NUMBER];
sl@0
   168
sl@0
   169
    le_uint32  process(const LookupProcessor *lookupProcessor, GlyphIterator *glyphIterator,
sl@0
   170
        const LEFontInstance *fontInstance, LEErrorCode& success) const;
sl@0
   171
};
sl@0
   172
sl@0
   173
struct ChainSubClassSetTable
sl@0
   174
{
sl@0
   175
    le_uint16  chainSubClassRuleCount;
sl@0
   176
    Offset  chainSubClassRuleTableOffsetArray[ANY_NUMBER];
sl@0
   177
};
sl@0
   178
sl@0
   179
// NOTE: Multiple variable size arrays!!
sl@0
   180
struct ChainSubClassRuleTable
sl@0
   181
{
sl@0
   182
    le_uint16  backtrackGlyphCount;
sl@0
   183
    le_uint16  backtrackClassArray[ANY_NUMBER];
sl@0
   184
  //le_uint16  inputGlyphCount;
sl@0
   185
  //le_uint16  inputClassArray[ANY_NUMBER];
sl@0
   186
  //le_uint16  lookaheadGlyphCount;
sl@0
   187
  //le_uint16  lookaheadClassArray[ANY_NUMBER];
sl@0
   188
  //le_uint16  substCount;
sl@0
   189
  //SubstitutionLookupRecord substLookupRecordArray[ANY_NUMBER];
sl@0
   190
};
sl@0
   191
sl@0
   192
// NOTE: This isn't a subclass of GlyphSubstitutionSubtable 'cause
sl@0
   193
// it has arrays of coverage tables instead of a single coverage table...
sl@0
   194
//
sl@0
   195
// NOTE: Multiple variable size arrays!!
sl@0
   196
struct ChainingContextualSubstitutionFormat3Subtable
sl@0
   197
{
sl@0
   198
    le_uint16  substFormat;
sl@0
   199
    le_uint16  backtrackGlyphCount;
sl@0
   200
    Offset  backtrackCoverageTableOffsetArray[ANY_NUMBER];
sl@0
   201
  //le_uint16  inputGlyphCount;
sl@0
   202
  //Offset  inputCoverageTableOffsetArray[ANY_NUMBER];
sl@0
   203
  //le_uint16  lookaheadGlyphCount;
sl@0
   204
  //le_uint16  lookaheadCoverageTableOffsetArray[ANY_NUMBER];
sl@0
   205
  //le_uint16  substCount;
sl@0
   206
  //SubstitutionLookupRecord substLookupRecord[ANY_NUMBER];
sl@0
   207
sl@0
   208
    le_uint32  process(const LookupProcessor *lookupProcessor, GlyphIterator *glyphIterator,
sl@0
   209
        const LEFontInstance *fontInstance, LEErrorCode& success) const;
sl@0
   210
};
sl@0
   211
sl@0
   212
U_NAMESPACE_END
sl@0
   213
#endif