~ubuntu-branches/ubuntu/karmic/pango1.0/karmic-security

« back to all changes in this revision

Viewing changes to pango/opentype/harfbuzz-gpos-private.h

  • Committer: Bazaar Package Importer
  • Author(s): Sebastien Bacher
  • Date: 2009-08-10 21:23:54 UTC
  • mfrom: (1.5.2 upstream)
  • Revision ID: james.westby@ubuntu.com-20090810212354-2mq9f0t90khvon6k
Tags: 1.25.1-0ubuntu1
New upstream version

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
/*
2
 
 * Copyright (C) 1998-2004  David Turner and Werner Lemberg
3
 
 * Copyright (C) 2006  Behdad Esfahbod
4
 
 *
5
 
 *  This is part of HarfBuzz, an OpenType Layout engine library.
6
 
 *
7
 
 * Permission is hereby granted, without written agreement and without
8
 
 * license or royalty fees, to use, copy, modify, and distribute this
9
 
 * software and its documentation for any purpose, provided that the
10
 
 * above copyright notice and the following two paragraphs appear in
11
 
 * all copies of this software.
12
 
 *
13
 
 * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
14
 
 * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
15
 
 * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
16
 
 * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
17
 
 * DAMAGE.
18
 
 *
19
 
 * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
20
 
 * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
21
 
 * FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
22
 
 * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
23
 
 * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
24
 
 */
25
 
 
26
 
#ifndef HARFBUZZ_GPOS_PRIVATE_H
27
 
#define HARFBUZZ_GPOS_PRIVATE_H
28
 
 
29
 
#include "harfbuzz-impl.h"
30
 
#include "harfbuzz-stream-private.h"
31
 
#include "harfbuzz-gpos.h"
32
 
 
33
 
HB_BEGIN_HEADER
34
 
 
35
 
 
36
 
/* shared tables */
37
 
 
38
 
struct  HB_ValueRecord_
39
 
{
40
 
  HB_Short    XPlacement;             /* horizontal adjustment for
41
 
                                         placement                      */
42
 
  HB_Short    YPlacement;             /* vertical adjustment for
43
 
                                         placement                      */
44
 
  HB_Short    XAdvance;               /* horizontal adjustment for
45
 
                                         advance                        */
46
 
  HB_Short    YAdvance;               /* vertical adjustment for
47
 
                                         advance                        */
48
 
  HB_Device  XPlacementDevice;       /* device table for horizontal
49
 
                                         placement                      */
50
 
  HB_Device  YPlacementDevice;       /* device table for vertical
51
 
                                         placement                      */
52
 
  HB_Device  XAdvanceDevice;         /* device table for horizontal
53
 
                                         advance                        */
54
 
  HB_Device  YAdvanceDevice;         /* device table for vertical
55
 
                                         advance                        */
56
 
  HB_UShort   XIdPlacement;           /* horizontal placement metric ID */
57
 
  HB_UShort   YIdPlacement;           /* vertical placement metric ID   */
58
 
  HB_UShort   XIdAdvance;             /* horizontal advance metric ID   */
59
 
  HB_UShort   YIdAdvance;             /* vertical advance metric ID     */
60
 
};
61
 
 
62
 
typedef struct HB_ValueRecord_  HB_ValueRecord;
63
 
 
64
 
 
65
 
/* Mask values to scan the value format of the ValueRecord structure.
66
 
 We always expand compressed ValueRecords of the font.              */
67
 
 
68
 
#define HB_GPOS_FORMAT_HAVE_X_PLACEMENT         0x0001
69
 
#define HB_GPOS_FORMAT_HAVE_Y_PLACEMENT         0x0002
70
 
#define HB_GPOS_FORMAT_HAVE_X_ADVANCE           0x0004
71
 
#define HB_GPOS_FORMAT_HAVE_Y_ADVANCE           0x0008
72
 
#define HB_GPOS_FORMAT_HAVE_X_PLACEMENT_DEVICE  0x0010
73
 
#define HB_GPOS_FORMAT_HAVE_Y_PLACEMENT_DEVICE  0x0020
74
 
#define HB_GPOS_FORMAT_HAVE_X_ADVANCE_DEVICE    0x0040
75
 
#define HB_GPOS_FORMAT_HAVE_Y_ADVANCE_DEVICE    0x0080
76
 
#define HB_GPOS_FORMAT_HAVE_X_ID_PLACEMENT      0x0100
77
 
#define HB_GPOS_FORMAT_HAVE_Y_ID_PLACEMENT      0x0200
78
 
#define HB_GPOS_FORMAT_HAVE_X_ID_ADVANCE        0x0400
79
 
#define HB_GPOS_FORMAT_HAVE_Y_ID_ADVANCE        0x0800
80
 
 
81
 
 
82
 
struct  HB_AnchorFormat1_
83
 
{
84
 
  HB_Short   XCoordinate;             /* horizontal value */
85
 
  HB_Short   YCoordinate;             /* vertical value   */
86
 
};
87
 
 
88
 
typedef struct HB_AnchorFormat1_  HB_AnchorFormat1;
89
 
 
90
 
 
91
 
struct  HB_AnchorFormat2_
92
 
{
93
 
  HB_Short   XCoordinate;             /* horizontal value             */
94
 
  HB_Short   YCoordinate;             /* vertical value               */
95
 
  HB_UShort  AnchorPoint;             /* index to glyph contour point */
96
 
};
97
 
 
98
 
typedef struct HB_AnchorFormat2_  HB_AnchorFormat2;
99
 
 
100
 
 
101
 
struct  HB_AnchorFormat3_
102
 
{
103
 
  HB_Short    XCoordinate;            /* horizontal value              */
104
 
  HB_Short    YCoordinate;            /* vertical value                */
105
 
  HB_Device  XDeviceTable;           /* device table for X coordinate */
106
 
  HB_Device  YDeviceTable;           /* device table for Y coordinate */
107
 
};
108
 
 
109
 
typedef struct HB_AnchorFormat3_  HB_AnchorFormat3;
110
 
 
111
 
 
112
 
struct  HB_AnchorFormat4_
113
 
{
114
 
  HB_UShort  XIdAnchor;               /* horizontal metric ID */
115
 
  HB_UShort  YIdAnchor;               /* vertical metric ID   */
116
 
};
117
 
 
118
 
typedef struct HB_AnchorFormat4_  HB_AnchorFormat4;
119
 
 
120
 
 
121
 
struct  HB_Anchor_
122
 
{
123
 
  HB_UShort  PosFormat;               /* 1, 2, 3, or 4 -- 0 indicates
124
 
                                         that there is no Anchor table */
125
 
 
126
 
  union
127
 
  {
128
 
    HB_AnchorFormat1  af1;
129
 
    HB_AnchorFormat2  af2;
130
 
    HB_AnchorFormat3  af3;
131
 
    HB_AnchorFormat4  af4;
132
 
  } af;
133
 
};
134
 
 
135
 
typedef struct HB_Anchor_  HB_Anchor;
136
 
 
137
 
 
138
 
struct  HB_MarkRecord_
139
 
{
140
 
  HB_UShort   Class;                  /* mark class   */
141
 
  HB_Anchor  MarkAnchor;             /* anchor table */
142
 
};
143
 
 
144
 
typedef struct HB_MarkRecord_  HB_MarkRecord;
145
 
 
146
 
 
147
 
struct  HB_MarkArray_
148
 
{
149
 
  HB_UShort        MarkCount;         /* number of MarkRecord tables */
150
 
  HB_MarkRecord*  MarkRecord;        /* array of MarkRecord tables  */
151
 
};
152
 
 
153
 
typedef struct HB_MarkArray_  HB_MarkArray;
154
 
 
155
 
 
156
 
/* LookupType 1 */
157
 
 
158
 
struct  HB_SinglePosFormat1_
159
 
{
160
 
  HB_ValueRecord  Value;             /* ValueRecord for all covered
161
 
                                         glyphs                      */
162
 
};
163
 
 
164
 
typedef struct HB_SinglePosFormat1_  HB_SinglePosFormat1;
165
 
 
166
 
 
167
 
struct  HB_SinglePosFormat2_
168
 
{
169
 
  HB_UShort         ValueCount;       /* number of ValueRecord tables */
170
 
  HB_ValueRecord*  Value;            /* array of ValueRecord tables  */
171
 
};
172
 
 
173
 
typedef struct HB_SinglePosFormat2_  HB_SinglePosFormat2;
174
 
 
175
 
 
176
 
struct  HB_SinglePos_
177
 
{
178
 
  HB_UShort     PosFormat;            /* 1 or 2         */
179
 
  HB_Coverage  Coverage;             /* Coverage table */
180
 
 
181
 
  HB_UShort     ValueFormat;          /* format of ValueRecord table */
182
 
 
183
 
  union
184
 
  {
185
 
    HB_SinglePosFormat1  spf1;
186
 
    HB_SinglePosFormat2  spf2;
187
 
  } spf;
188
 
};
189
 
 
190
 
typedef struct HB_SinglePos_  HB_SinglePos;
191
 
 
192
 
 
193
 
/* LookupType 2 */
194
 
 
195
 
struct  HB_PairValueRecord_
196
 
{
197
 
  HB_UShort        SecondGlyph;       /* glyph ID for second glyph  */
198
 
  HB_ValueRecord  Value1;            /* pos. data for first glyph  */
199
 
  HB_ValueRecord  Value2;            /* pos. data for second glyph */
200
 
};
201
 
 
202
 
typedef struct HB_PairValueRecord_  HB_PairValueRecord;
203
 
 
204
 
 
205
 
struct  HB_PairSet_
206
 
{
207
 
  HB_UShort             PairValueCount;
208
 
                                      /* number of PairValueRecord tables */
209
 
  HB_PairValueRecord*  PairValueRecord;
210
 
                                      /* array of PairValueRecord tables  */
211
 
};
212
 
 
213
 
typedef struct HB_PairSet_  HB_PairSet;
214
 
 
215
 
 
216
 
struct  HB_PairPosFormat1_
217
 
{
218
 
  HB_UShort     PairSetCount;         /* number of PairSet tables    */
219
 
  HB_PairSet*  PairSet;              /* array of PairSet tables     */
220
 
};
221
 
 
222
 
typedef struct HB_PairPosFormat1_  HB_PairPosFormat1;
223
 
 
224
 
 
225
 
struct  HB_Class2Record_
226
 
{
227
 
  HB_ValueRecord  Value1;            /* pos. data for first glyph  */
228
 
  HB_ValueRecord  Value2;            /* pos. data for second glyph */
229
 
};
230
 
 
231
 
typedef struct HB_Class2Record_  HB_Class2Record;
232
 
 
233
 
 
234
 
struct  HB_Class1Record_
235
 
{
236
 
  HB_Class2Record*  Class2Record;    /* array of Class2Record tables */
237
 
};
238
 
 
239
 
typedef struct HB_Class1Record_  HB_Class1Record;
240
 
 
241
 
 
242
 
struct  HB_PairPosFormat2_
243
 
{
244
 
  HB_ClassDefinition  ClassDef1;     /* class def. for first glyph     */
245
 
  HB_ClassDefinition  ClassDef2;     /* class def. for second glyph    */
246
 
  HB_UShort            Class1Count;   /* number of classes in ClassDef1
247
 
                                         table                          */
248
 
  HB_UShort            Class2Count;   /* number of classes in ClassDef2
249
 
                                         table                          */
250
 
  HB_Class1Record*    Class1Record;  /* array of Class1Record tables   */
251
 
};
252
 
 
253
 
typedef struct HB_PairPosFormat2_  HB_PairPosFormat2;
254
 
 
255
 
 
256
 
struct  HB_PairPos_
257
 
{
258
 
  HB_UShort     PosFormat;            /* 1 or 2         */
259
 
  HB_Coverage  Coverage;             /* Coverage table */
260
 
  HB_UShort     ValueFormat1;         /* format of ValueRecord table
261
 
                                         for first glyph             */
262
 
  HB_UShort     ValueFormat2;         /* format of ValueRecord table
263
 
                                         for second glyph            */
264
 
 
265
 
  union
266
 
  {
267
 
    HB_PairPosFormat1  ppf1;
268
 
    HB_PairPosFormat2  ppf2;
269
 
  } ppf;
270
 
};
271
 
 
272
 
typedef struct HB_PairPos_  HB_PairPos;
273
 
 
274
 
 
275
 
/* LookupType 3 */
276
 
 
277
 
struct  HB_EntryExitRecord_
278
 
{
279
 
  HB_Anchor  EntryAnchor;            /* entry Anchor table */
280
 
  HB_Anchor  ExitAnchor;             /* exit Anchor table  */
281
 
};
282
 
 
283
 
 
284
 
typedef struct HB_EntryExitRecord_  HB_EntryExitRecord;
285
 
 
286
 
struct  HB_CursivePos_
287
 
{
288
 
  HB_UShort             PosFormat;    /* always 1                         */
289
 
  HB_Coverage          Coverage;     /* Coverage table                   */
290
 
  HB_UShort             EntryExitCount;
291
 
                                      /* number of EntryExitRecord tables */
292
 
  HB_EntryExitRecord*  EntryExitRecord;
293
 
                                      /* array of EntryExitRecord tables  */
294
 
};
295
 
 
296
 
typedef struct HB_CursivePos_  HB_CursivePos;
297
 
 
298
 
 
299
 
/* LookupType 4 */
300
 
 
301
 
struct  HB_BaseRecord_
302
 
{
303
 
  HB_Anchor*  BaseAnchor;            /* array of base glyph anchor
304
 
                                         tables                     */
305
 
};
306
 
 
307
 
typedef struct HB_BaseRecord_  HB_BaseRecord;
308
 
 
309
 
 
310
 
struct  HB_BaseArray_
311
 
{
312
 
  HB_UShort        BaseCount;         /* number of BaseRecord tables */
313
 
  HB_BaseRecord*  BaseRecord;        /* array of BaseRecord tables  */
314
 
};
315
 
 
316
 
typedef struct HB_BaseArray_  HB_BaseArray;
317
 
 
318
 
 
319
 
struct  HB_MarkBasePos_
320
 
{
321
 
  HB_UShort      PosFormat;           /* always 1                  */
322
 
  HB_Coverage   MarkCoverage;        /* mark glyph coverage table */
323
 
  HB_Coverage   BaseCoverage;        /* base glyph coverage table */
324
 
  HB_UShort      ClassCount;          /* number of mark classes    */
325
 
  HB_MarkArray  MarkArray;           /* mark array table          */
326
 
  HB_BaseArray  BaseArray;           /* base array table          */
327
 
};
328
 
 
329
 
typedef struct HB_MarkBasePos_  HB_MarkBasePos;
330
 
 
331
 
 
332
 
/* LookupType 5 */
333
 
 
334
 
struct  HB_ComponentRecord_
335
 
{
336
 
  HB_Anchor*  LigatureAnchor;        /* array of ligature glyph anchor
337
 
                                         tables                         */
338
 
};
339
 
 
340
 
typedef struct HB_ComponentRecord_  HB_ComponentRecord;
341
 
 
342
 
 
343
 
struct  HB_LigatureAttach_
344
 
{
345
 
  HB_UShort             ComponentCount;
346
 
                                      /* number of ComponentRecord tables */
347
 
  HB_ComponentRecord*  ComponentRecord;
348
 
                                      /* array of ComponentRecord tables  */
349
 
};
350
 
 
351
 
typedef struct HB_LigatureAttach_  HB_LigatureAttach;
352
 
 
353
 
 
354
 
struct  HB_LigatureArray_
355
 
{
356
 
  HB_UShort            LigatureCount; /* number of LigatureAttach tables */
357
 
  HB_LigatureAttach*  LigatureAttach;
358
 
                                      /* array of LigatureAttach tables  */
359
 
};
360
 
 
361
 
typedef struct HB_LigatureArray_  HB_LigatureArray;
362
 
 
363
 
 
364
 
struct  HB_MarkLigPos_
365
 
{
366
 
  HB_UShort          PosFormat;       /* always 1                      */
367
 
  HB_Coverage       MarkCoverage;    /* mark glyph coverage table     */
368
 
  HB_Coverage       LigatureCoverage;
369
 
                                      /* ligature glyph coverage table */
370
 
  HB_UShort          ClassCount;      /* number of mark classes        */
371
 
  HB_MarkArray      MarkArray;       /* mark array table              */
372
 
  HB_LigatureArray  LigatureArray;   /* ligature array table          */
373
 
};
374
 
 
375
 
typedef struct HB_MarkLigPos_  HB_MarkLigPos;
376
 
 
377
 
 
378
 
/* LookupType 6 */
379
 
 
380
 
struct  HB_Mark2Record_
381
 
{
382
 
  HB_Anchor*  Mark2Anchor;           /* array of mark glyph anchor
383
 
                                         tables                     */
384
 
};
385
 
 
386
 
typedef struct HB_Mark2Record_  HB_Mark2Record;
387
 
 
388
 
 
389
 
struct  HB_Mark2Array_
390
 
{
391
 
  HB_UShort         Mark2Count;       /* number of Mark2Record tables */
392
 
  HB_Mark2Record*  Mark2Record;      /* array of Mark2Record tables  */
393
 
};
394
 
 
395
 
typedef struct HB_Mark2Array_  HB_Mark2Array;
396
 
 
397
 
 
398
 
struct  HB_MarkMarkPos_
399
 
{
400
 
  HB_UShort       PosFormat;          /* always 1                         */
401
 
  HB_Coverage    Mark1Coverage;      /* first mark glyph coverage table  */
402
 
  HB_Coverage    Mark2Coverage;      /* second mark glyph coverave table */
403
 
  HB_UShort       ClassCount;         /* number of combining mark classes */
404
 
  HB_MarkArray   Mark1Array;         /* MarkArray table for first mark   */
405
 
  HB_Mark2Array  Mark2Array;         /* MarkArray table for second mark  */
406
 
};
407
 
 
408
 
typedef struct HB_MarkMarkPos_  HB_MarkMarkPos;
409
 
 
410
 
 
411
 
/* needed by both lookup type 7 and 8 */
412
 
 
413
 
struct  HB_PosLookupRecord_
414
 
{
415
 
  HB_UShort  SequenceIndex;           /* index into current
416
 
                                         glyph sequence               */
417
 
  HB_UShort  LookupListIndex;         /* Lookup to apply to that pos. */
418
 
};
419
 
 
420
 
typedef struct HB_PosLookupRecord_  HB_PosLookupRecord;
421
 
 
422
 
 
423
 
/* LookupType 7 */
424
 
 
425
 
struct  HB_PosRule_
426
 
{
427
 
  HB_UShort             GlyphCount;   /* total number of input glyphs     */
428
 
  HB_UShort             PosCount;     /* number of PosLookupRecord tables */
429
 
  HB_UShort*            Input;        /* array of input glyph IDs         */
430
 
  HB_PosLookupRecord*  PosLookupRecord;
431
 
                                      /* array of PosLookupRecord tables  */
432
 
};
433
 
 
434
 
typedef struct HB_PosRule_  HB_PosRule;
435
 
 
436
 
 
437
 
struct  HB_PosRuleSet_
438
 
{
439
 
  HB_UShort     PosRuleCount;         /* number of PosRule tables */
440
 
  HB_PosRule*  PosRule;              /* array of PosRule tables  */
441
 
};
442
 
 
443
 
typedef struct HB_PosRuleSet_  HB_PosRuleSet;
444
 
 
445
 
 
446
 
struct  HB_ContextPosFormat1_
447
 
{
448
 
  HB_Coverage     Coverage;          /* Coverage table              */
449
 
  HB_UShort        PosRuleSetCount;   /* number of PosRuleSet tables */
450
 
  HB_PosRuleSet*  PosRuleSet;        /* array of PosRuleSet tables  */
451
 
};
452
 
 
453
 
typedef struct HB_ContextPosFormat1_  HB_ContextPosFormat1;
454
 
 
455
 
 
456
 
struct  HB_PosClassRule_
457
 
{
458
 
  HB_UShort             GlyphCount;   /* total number of context classes  */
459
 
  HB_UShort             PosCount;     /* number of PosLookupRecord tables */
460
 
  HB_UShort*            Class;        /* array of classes                 */
461
 
  HB_PosLookupRecord*  PosLookupRecord;
462
 
                                      /* array of PosLookupRecord tables  */
463
 
};
464
 
 
465
 
typedef struct HB_PosClassRule_  HB_PosClassRule;
466
 
 
467
 
 
468
 
struct  HB_PosClassSet_
469
 
{
470
 
  HB_UShort          PosClassRuleCount;
471
 
                                      /* number of PosClassRule tables */
472
 
  HB_PosClassRule*  PosClassRule;    /* array of PosClassRule tables  */
473
 
};
474
 
 
475
 
typedef struct HB_PosClassSet_  HB_PosClassSet;
476
 
 
477
 
 
478
 
/* The `MaxContextLength' field is not defined in the TTO specification
479
 
   but simplifies the implementation of this format.  It holds the
480
 
   maximal context length used in the context rules.                    */
481
 
 
482
 
struct  HB_ContextPosFormat2_
483
 
{
484
 
  HB_UShort            MaxContextLength;
485
 
                                      /* maximal context length       */
486
 
  HB_Coverage         Coverage;      /* Coverage table               */
487
 
  HB_ClassDefinition  ClassDef;      /* ClassDef table               */
488
 
  HB_UShort            PosClassSetCount;
489
 
                                      /* number of PosClassSet tables */
490
 
  HB_PosClassSet*     PosClassSet;   /* array of PosClassSet tables  */
491
 
};
492
 
 
493
 
typedef struct HB_ContextPosFormat2_  HB_ContextPosFormat2;
494
 
 
495
 
 
496
 
struct  HB_ContextPosFormat3_
497
 
{
498
 
  HB_UShort             GlyphCount;   /* number of input glyphs           */
499
 
  HB_UShort             PosCount;     /* number of PosLookupRecord tables */
500
 
  HB_Coverage*         Coverage;     /* array of Coverage tables         */
501
 
  HB_PosLookupRecord*  PosLookupRecord;
502
 
                                      /* array of PosLookupRecord tables  */
503
 
};
504
 
 
505
 
typedef struct HB_ContextPosFormat3_  HB_ContextPosFormat3;
506
 
 
507
 
 
508
 
struct  HB_ContextPos_
509
 
{
510
 
  HB_UShort  PosFormat;               /* 1, 2, or 3     */
511
 
 
512
 
  union
513
 
  {
514
 
    HB_ContextPosFormat1  cpf1;
515
 
    HB_ContextPosFormat2  cpf2;
516
 
    HB_ContextPosFormat3  cpf3;
517
 
  } cpf;
518
 
};
519
 
 
520
 
typedef struct HB_ContextPos_  HB_ContextPos;
521
 
 
522
 
 
523
 
/* LookupType 8 */
524
 
 
525
 
struct  HB_ChainPosRule_
526
 
{
527
 
  HB_UShort             BacktrackGlyphCount;
528
 
                                      /* total number of backtrack glyphs */
529
 
  HB_UShort*            Backtrack;    /* array of backtrack glyph IDs     */
530
 
  HB_UShort             InputGlyphCount;
531
 
                                      /* total number of input glyphs     */
532
 
  HB_UShort*            Input;        /* array of input glyph IDs         */
533
 
  HB_UShort             LookaheadGlyphCount;
534
 
                                      /* total number of lookahead glyphs */
535
 
  HB_UShort*            Lookahead;    /* array of lookahead glyph IDs     */
536
 
  HB_UShort             PosCount;     /* number of PosLookupRecords       */
537
 
  HB_PosLookupRecord*  PosLookupRecord;
538
 
                                      /* array of PosLookupRecords       */
539
 
};
540
 
 
541
 
typedef struct HB_ChainPosRule_  HB_ChainPosRule;
542
 
 
543
 
 
544
 
struct  HB_ChainPosRuleSet_
545
 
{
546
 
  HB_UShort          ChainPosRuleCount;
547
 
                                      /* number of ChainPosRule tables */
548
 
  HB_ChainPosRule*  ChainPosRule;    /* array of ChainPosRule tables  */
549
 
};
550
 
 
551
 
typedef struct HB_ChainPosRuleSet_  HB_ChainPosRuleSet;
552
 
 
553
 
 
554
 
struct  HB_ChainContextPosFormat1_
555
 
{
556
 
  HB_Coverage          Coverage;     /* Coverage table                   */
557
 
  HB_UShort             ChainPosRuleSetCount;
558
 
                                      /* number of ChainPosRuleSet tables */
559
 
  HB_ChainPosRuleSet*  ChainPosRuleSet;
560
 
                                      /* array of ChainPosRuleSet tables  */
561
 
};
562
 
 
563
 
typedef struct HB_ChainContextPosFormat1_  HB_ChainContextPosFormat1;
564
 
 
565
 
 
566
 
struct  HB_ChainPosClassRule_
567
 
{
568
 
  HB_UShort             BacktrackGlyphCount;
569
 
                                      /* total number of backtrack
570
 
                                         classes                         */
571
 
  HB_UShort*            Backtrack;    /* array of backtrack classes      */
572
 
  HB_UShort             InputGlyphCount;
573
 
                                      /* total number of context classes */
574
 
  HB_UShort*            Input;        /* array of context classes        */
575
 
  HB_UShort             LookaheadGlyphCount;
576
 
                                      /* total number of lookahead
577
 
                                         classes                         */
578
 
  HB_UShort*            Lookahead;    /* array of lookahead classes      */
579
 
  HB_UShort             PosCount;     /* number of PosLookupRecords      */
580
 
  HB_PosLookupRecord*  PosLookupRecord;
581
 
                                      /* array of substitution lookups   */
582
 
};
583
 
 
584
 
typedef struct HB_ChainPosClassRule_  HB_ChainPosClassRule;
585
 
 
586
 
 
587
 
struct  HB_ChainPosClassSet_
588
 
{
589
 
  HB_UShort               ChainPosClassRuleCount;
590
 
                                      /* number of ChainPosClassRule
591
 
                                         tables                      */
592
 
  HB_ChainPosClassRule*  ChainPosClassRule;
593
 
                                      /* array of ChainPosClassRule
594
 
                                         tables                      */
595
 
};
596
 
 
597
 
typedef struct HB_ChainPosClassSet_  HB_ChainPosClassSet;
598
 
 
599
 
 
600
 
/* The `MaxXXXLength' fields are not defined in the TTO specification
601
 
   but simplifies the implementation of this format.  It holds the
602
 
   maximal context length used in the specific context rules.         */
603
 
 
604
 
struct  HB_ChainContextPosFormat2_
605
 
{
606
 
  HB_Coverage           Coverage;    /* Coverage table             */
607
 
 
608
 
  HB_UShort              MaxBacktrackLength;
609
 
                                      /* maximal backtrack length   */
610
 
  HB_ClassDefinition    BacktrackClassDef;
611
 
                                      /* BacktrackClassDef table    */
612
 
  HB_UShort              MaxInputLength;
613
 
                                      /* maximal input length       */
614
 
  HB_ClassDefinition    InputClassDef;
615
 
                                      /* InputClassDef table        */
616
 
  HB_UShort              MaxLookaheadLength;
617
 
                                      /* maximal lookahead length   */
618
 
  HB_ClassDefinition    LookaheadClassDef;
619
 
                                      /* LookaheadClassDef table    */
620
 
 
621
 
  HB_UShort              ChainPosClassSetCount;
622
 
                                      /* number of ChainPosClassSet
623
 
                                         tables                     */
624
 
  HB_ChainPosClassSet*  ChainPosClassSet;
625
 
                                      /* array of ChainPosClassSet
626
 
                                         tables                     */
627
 
};
628
 
 
629
 
typedef struct HB_ChainContextPosFormat2_  HB_ChainContextPosFormat2;
630
 
 
631
 
 
632
 
struct  HB_ChainContextPosFormat3_
633
 
{
634
 
  HB_UShort             BacktrackGlyphCount;
635
 
                                      /* number of backtrack glyphs    */
636
 
  HB_Coverage*         BacktrackCoverage;
637
 
                                      /* array of backtrack Coverage
638
 
                                         tables                        */
639
 
  HB_UShort             InputGlyphCount;
640
 
                                      /* number of input glyphs        */
641
 
  HB_Coverage*         InputCoverage;
642
 
                                      /* array of input coverage
643
 
                                         tables                        */
644
 
  HB_UShort             LookaheadGlyphCount;
645
 
                                      /* number of lookahead glyphs    */
646
 
  HB_Coverage*         LookaheadCoverage;
647
 
                                      /* array of lookahead coverage
648
 
                                         tables                        */
649
 
  HB_UShort             PosCount;     /* number of PosLookupRecords    */
650
 
  HB_PosLookupRecord*  PosLookupRecord;
651
 
                                      /* array of substitution lookups */
652
 
};
653
 
 
654
 
typedef struct HB_ChainContextPosFormat3_  HB_ChainContextPosFormat3;
655
 
 
656
 
 
657
 
struct  HB_ChainContextPos_
658
 
{
659
 
  HB_UShort  PosFormat;             /* 1, 2, or 3 */
660
 
 
661
 
  union
662
 
  {
663
 
    HB_ChainContextPosFormat1  ccpf1;
664
 
    HB_ChainContextPosFormat2  ccpf2;
665
 
    HB_ChainContextPosFormat3  ccpf3;
666
 
  } ccpf;
667
 
};
668
 
 
669
 
typedef struct HB_ChainContextPos_  HB_ChainContextPos;
670
 
 
671
 
 
672
 
#if 0
673
 
/* LookupType 10 */
674
 
struct HB_ExtensionPos_
675
 
{
676
 
  HB_UShort      PosFormat;           /* always 1 */
677
 
  HB_UShort      LookuptType;         /* lookup-type of referenced subtable */
678
 
  HB_GPOS_SubTable *subtable;         /* referenced subtable */
679
 
};
680
 
 
681
 
typedef struct HB_ExtensionPos_  HB_ExtensionPos;
682
 
#endif
683
 
 
684
 
 
685
 
union  HB_GPOS_SubTable_
686
 
{
687
 
  HB_SinglePos        single;
688
 
  HB_PairPos          pair;
689
 
  HB_CursivePos       cursive;
690
 
  HB_MarkBasePos      markbase;
691
 
  HB_MarkLigPos       marklig;
692
 
  HB_MarkMarkPos      markmark;
693
 
  HB_ContextPos       context;
694
 
  HB_ChainContextPos  chain;
695
 
};
696
 
 
697
 
typedef union HB_GPOS_SubTable_  HB_GPOS_SubTable;
698
 
 
699
 
 
700
 
 
701
 
HB_INTERNAL HB_Error
702
 
_HB_GPOS_Load_SubTable( HB_GPOS_SubTable* st,
703
 
                        HB_Stream         stream,
704
 
                        HB_UShort         lookup_type );
705
 
 
706
 
HB_INTERNAL void
707
 
_HB_GPOS_Free_SubTable( HB_GPOS_SubTable* st,
708
 
                        HB_UShort         lookup_type );
709
 
 
710
 
HB_END_HEADER
711
 
 
712
 
#endif /* HARFBUZZ_GPOS_PRIVATE_H */