blob: 30aa625347f4f33ae95d5f2e0130f10f8ae36c7e [file] [log] [blame]
Behdad Esfahbod24bcdbc2011-08-24 19:13:15 +02001/*
Behdad Esfahbod0ab8c862012-05-11 01:25:34 +02002 * Copyright © 2011,2012 Google, Inc.
Behdad Esfahbod24bcdbc2011-08-24 19:13:15 +02003 *
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_HMTX_TABLE_HH
28#define HB_OT_HMTX_TABLE_HH
29
30#include "hb-open-type-private.hh"
31
32
Behdad Esfahbod7c8e8442012-08-28 17:57:49 -040033namespace OT {
34
Behdad Esfahbod24bcdbc2011-08-24 19:13:15 +020035
36/*
37 * hmtx -- The Horizontal Metrics Table
Behdad Esfahbodd41b8092014-09-25 13:04:08 +030038 * vmtx -- The Vertical Metrics Table
Behdad Esfahbod24bcdbc2011-08-24 19:13:15 +020039 */
40
41#define HB_OT_TAG_hmtx HB_TAG('h','m','t','x')
Behdad Esfahbodd41b8092014-09-25 13:04:08 +030042#define HB_OT_TAG_vmtx HB_TAG('v','m','t','x')
Behdad Esfahbod24bcdbc2011-08-24 19:13:15 +020043
44
Behdad Esfahbodd41b8092014-09-25 13:04:08 +030045struct LongMetric
Behdad Esfahbod24bcdbc2011-08-24 19:13:15 +020046{
Behdad Esfahbod082b79f2016-03-01 16:41:26 +090047 UFWORD advance; /* Advance width/height. */
48 FWORD lsb; /* Leading (left/top) side bearing. */
Behdad Esfahbod24bcdbc2011-08-24 19:13:15 +020049 public:
50 DEFINE_SIZE_STATIC (4);
51};
52
Behdad Esfahboda11d9a02017-01-22 20:09:47 -080053struct hmtxvmtx
Behdad Esfahbod24bcdbc2011-08-24 19:13:15 +020054{
Behdad Esfahbodd41b8092014-09-25 13:04:08 +030055 static const hb_tag_t hmtxTag = HB_OT_TAG_hmtx;
56 static const hb_tag_t vmtxTag = HB_OT_TAG_vmtx;
Behdad Esfahbod24bcdbc2011-08-24 19:13:15 +020057
Behdad Esfahbodde2118e2015-02-17 17:27:44 +030058 inline bool sanitize (hb_sanitize_context_t *c) const
59 {
Behdad Esfahbodbe218c62012-11-23 15:32:14 -050060 TRACE_SANITIZE (this);
Behdad Esfahbod24bcdbc2011-08-24 19:13:15 +020061 /* We don't check for anything specific here. The users of the
62 * struct do all the hard work... */
Behdad Esfahbodb4715902015-09-29 14:57:02 +010063 return_trace (true);
Behdad Esfahbod24bcdbc2011-08-24 19:13:15 +020064 }
65
Behdad Esfahbod90364842014-03-24 14:26:36 -070066 public:
Behdad Esfahbodbe1cca22014-09-25 16:53:24 +030067 LongMetric longMetric[VAR]; /* Paired advance width and leading
Behdad Esfahbod24bcdbc2011-08-24 19:13:15 +020068 * bearing values for each glyph. The
69 * value numOfHMetrics comes from
70 * the 'hhea' table. If the font is
71 * monospaced, only one entry need
72 * be in the array, but that entry is
73 * required. The last entry applies to
74 * all subsequent glyphs. */
Behdad Esfahbod082b79f2016-03-01 16:41:26 +090075 FWORD leadingBearingX[VAR]; /* Here the advance is assumed
Behdad Esfahbodd41b8092014-09-25 13:04:08 +030076 * to be the same as the advance
Behdad Esfahbod24bcdbc2011-08-24 19:13:15 +020077 * for the last entry above. The
78 * number of entries in this array is
79 * derived from numGlyphs (from 'maxp'
Behdad Esfahbodd41b8092014-09-25 13:04:08 +030080 * table) minus numberOfLongMetrics.
81 * This generally is used with a run
82 * of monospaced glyphs (e.g., Kanji
Behdad Esfahbod24bcdbc2011-08-24 19:13:15 +020083 * fonts or Courier fonts). Only one
84 * run is allowed and it must be at
85 * the end. This allows a monospaced
Behdad Esfahbodd41b8092014-09-25 13:04:08 +030086 * font to vary the side bearing
Behdad Esfahbod24bcdbc2011-08-24 19:13:15 +020087 * values for each glyph. */
88 public:
Behdad Esfahbodbe1cca22014-09-25 16:53:24 +030089 DEFINE_SIZE_ARRAY2 (0, longMetric, leadingBearingX);
Behdad Esfahbod24bcdbc2011-08-24 19:13:15 +020090};
91
Behdad Esfahboda11d9a02017-01-22 20:09:47 -080092struct hmtx : hmtxvmtx {
Behdad Esfahbodd41b8092014-09-25 13:04:08 +030093 static const hb_tag_t tableTag = HB_OT_TAG_hmtx;
94};
Behdad Esfahboda11d9a02017-01-22 20:09:47 -080095struct vmtx : hmtxvmtx {
Behdad Esfahbodd41b8092014-09-25 13:04:08 +030096 static const hb_tag_t tableTag = HB_OT_TAG_vmtx;
97};
Behdad Esfahbod7c8e8442012-08-28 17:57:49 -040098
Behdad Esfahbod7d52e662012-11-16 18:49:54 -080099} /* namespace OT */
Behdad Esfahbod7c8e8442012-08-28 17:57:49 -0400100
101
Behdad Esfahbod24bcdbc2011-08-24 19:13:15 +0200102#endif /* HB_OT_HMTX_TABLE_HH */