src/java.desktop/share/native/libfontmanager/harfbuzz/hb-ot-hmtx-table.hh
changeset 47216 71c04702a3d5
parent 40435 553eb1a50733
child 48274 51772bf1fb0c
equal deleted inserted replaced
47215:4ebc2e2fb97c 47216:71c04702a3d5
       
     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_HMTX_TABLE_HH
       
    28 #define HB_OT_HMTX_TABLE_HH
       
    29 
       
    30 #include "hb-open-type-private.hh"
       
    31 
       
    32 
       
    33 namespace OT {
       
    34 
       
    35 
       
    36 /*
       
    37  * hmtx -- The Horizontal Metrics Table
       
    38  * vmtx -- The Vertical Metrics Table
       
    39  */
       
    40 
       
    41 #define HB_OT_TAG_hmtx HB_TAG('h','m','t','x')
       
    42 #define HB_OT_TAG_vmtx HB_TAG('v','m','t','x')
       
    43 
       
    44 
       
    45 struct LongMetric
       
    46 {
       
    47   UFWORD        advance; /* Advance width/height. */
       
    48   FWORD         lsb; /* Leading (left/top) side bearing. */
       
    49   public:
       
    50   DEFINE_SIZE_STATIC (4);
       
    51 };
       
    52 
       
    53 struct _mtx
       
    54 {
       
    55   static const hb_tag_t tableTag = HB_TAG('_','m','t','x');
       
    56 
       
    57   static const hb_tag_t hmtxTag = HB_OT_TAG_hmtx;
       
    58   static const hb_tag_t vmtxTag = HB_OT_TAG_vmtx;
       
    59 
       
    60   inline bool sanitize (hb_sanitize_context_t *c) const
       
    61   {
       
    62     TRACE_SANITIZE (this);
       
    63     /* We don't check for anything specific here.  The users of the
       
    64      * struct do all the hard work... */
       
    65     return_trace (true);
       
    66   }
       
    67 
       
    68   public:
       
    69   LongMetric    longMetric[VAR];        /* Paired advance width and leading
       
    70                                          * bearing values for each glyph. The
       
    71                                          * value numOfHMetrics comes from
       
    72                                          * the 'hhea' table. If the font is
       
    73                                          * monospaced, only one entry need
       
    74                                          * be in the array, but that entry is
       
    75                                          * required. The last entry applies to
       
    76                                          * all subsequent glyphs. */
       
    77   FWORD         leadingBearingX[VAR];   /* Here the advance is assumed
       
    78                                          * to be the same as the advance
       
    79                                          * for the last entry above. The
       
    80                                          * number of entries in this array is
       
    81                                          * derived from numGlyphs (from 'maxp'
       
    82                                          * table) minus numberOfLongMetrics.
       
    83                                          * This generally is used with a run
       
    84                                          * of monospaced glyphs (e.g., Kanji
       
    85                                          * fonts or Courier fonts). Only one
       
    86                                          * run is allowed and it must be at
       
    87                                          * the end. This allows a monospaced
       
    88                                          * font to vary the side bearing
       
    89                                          * values for each glyph. */
       
    90   public:
       
    91   DEFINE_SIZE_ARRAY2 (0, longMetric, leadingBearingX);
       
    92 };
       
    93 
       
    94 struct hmtx : _mtx {
       
    95   static const hb_tag_t tableTag        = HB_OT_TAG_hmtx;
       
    96 };
       
    97 struct vmtx : _mtx {
       
    98   static const hb_tag_t tableTag        = HB_OT_TAG_vmtx;
       
    99 };
       
   100 
       
   101 } /* namespace OT */
       
   102 
       
   103 
       
   104 #endif /* HB_OT_HMTX_TABLE_HH */