2b89c4e0208bae0f35403cec87f7c125c377ec72
[platform/upstream/harfbuzz.git] / src / hb-ot-hhea-table.hh
1 /*
2  * Copyright © 2011,2012  Google, Inc.
3  *
4  *  This is part of HarfBuzz, a text shaping library.
5  *
6  * Permission is hereby granted, without written agreement and without
7  * license or royalty fees, to use, copy, modify, and distribute this
8  * software and its documentation for any purpose, provided that the
9  * above copyright notice and the following two paragraphs appear in
10  * all copies of this software.
11  *
12  * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
13  * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
14  * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
15  * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
16  * DAMAGE.
17  *
18  * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
19  * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
20  * FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
21  * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
22  * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
23  *
24  * Google Author(s): Behdad Esfahbod
25  */
26
27 #ifndef HB_OT_HHEA_TABLE_HH
28 #define HB_OT_HHEA_TABLE_HH
29
30 #include "hb-open-type-private.hh"
31
32
33 namespace OT {
34
35
36 /*
37  * hhea -- The Horizontal Header Table
38  */
39
40 #define HB_OT_TAG_hhea HB_TAG('h','h','e','a')
41
42
43 struct hhea
44 {
45   static const hb_tag_t Tag     = HB_OT_TAG_hhea;
46
47   inline bool sanitize (hb_sanitize_context_t *c) {
48     TRACE_SANITIZE (this);
49     return TRACE_RETURN (c->check_struct (this) && likely (version.major == 1));
50   }
51
52   protected:
53   FixedVersion  version;                /* 0x00010000 for version 1.0. */
54   FWORD         ascender;               /* Typographic ascent. <a
55                                          * href="http://developer.apple.com/fonts/TTRefMan/RM06/Chap6hhea.html">
56                                          * (Distance from baseline of highest
57                                          * ascender)</a> */
58   FWORD         descender;              /* Typographic descent. <a
59                                          * href="http://developer.apple.com/fonts/TTRefMan/RM06/Chap6hhea.html">
60                                          * (Distance from baseline of lowest
61                                          * descender)</a> */
62   FWORD         lineGap;                /* Typographic line gap. Negative
63                                          * LineGap values are treated as zero
64                                          * in Windows 3.1, System 6, and
65                                          * System 7. */
66   UFWORD        advanceWidthMax;        /* Maximum advance width value in
67                                          * 'hmtx' table. */
68   FWORD         minLeftSideBearing;     /* Minimum left sidebearing value in
69                                          * 'hmtx' table. */
70   FWORD         minRightSideBearing;    /* Minimum right sidebearing value;
71                                          * calculated as Min(aw - lsb -
72                                          * (xMax - xMin)). */
73   FWORD         xMaxExtent;             /* Max(lsb + (xMax - xMin)). */
74   SHORT         caretSlopeRise;         /* Used to calculate the slope of the
75                                          * cursor (rise/run); 1 for vertical. */
76   SHORT         caretSlopeRun;          /* 0 for vertical. */
77   SHORT         caretOffset;            /* The amount by which a slanted
78                                          * highlight on a glyph needs
79                                          * to be shifted to produce the
80                                          * best appearance. Set to 0 for
81                                          * non--slanted fonts */
82   SHORT         reserved1;              /* set to 0 */
83   SHORT         reserved2;              /* set to 0 */
84   SHORT         reserved3;              /* set to 0 */
85   SHORT         reserved4;              /* set to 0 */
86   SHORT         metricDataFormat;       /* 0 for current format. */
87   USHORT        numberOfHMetrics;       /* Number of hMetric entries in 'hmtx'
88                                          * table */
89   public:
90   DEFINE_SIZE_STATIC (36);
91 };
92
93
94 } /* namespace OT */
95
96
97 #endif /* HB_OT_HHEA_TABLE_HH */