1 /*
   2  * Copyright © 2015  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_GLYF_TABLE_HH
  28 #define HB_OT_GLYF_TABLE_HH
  29 
  30 #include "hb-open-type-private.hh"
  31 
  32 
  33 namespace OT {
  34 
  35 
  36 /*
  37  * loca -- Index to Location
  38  */
  39 
  40 #define HB_OT_TAG_loca HB_TAG('l','o','c','a')
  41 
  42 
  43 struct loca
  44 {
  45   static const hb_tag_t tableTag = HB_OT_TAG_loca;
  46 
  47   inline bool sanitize (hb_sanitize_context_t *c) const
  48   {
  49     TRACE_SANITIZE (this);
  50     return_trace (true);
  51   }
  52 
  53   public:
  54   union {
  55     USHORT      shortsZ[VAR];           /* Location offset divided by 2. */
  56     ULONG       longsZ[VAR];            /* Location offset. */
  57   } u;
  58   DEFINE_SIZE_ARRAY (0, u.longsZ);
  59 };
  60 
  61 
  62 /*
  63  * glyf -- TrueType Glyph Data
  64  */
  65 
  66 #define HB_OT_TAG_glyf HB_TAG('g','l','y','f')
  67 
  68 
  69 struct glyf
  70 {
  71   static const hb_tag_t tableTag = HB_OT_TAG_glyf;
  72 
  73   inline bool sanitize (hb_sanitize_context_t *c) const
  74   {
  75     TRACE_SANITIZE (this);
  76     /* We don't check for anything specific here.  The users of the
  77      * struct do all the hard work... */
  78     return_trace (true);
  79   }
  80 
  81   public:
  82   BYTE          dataX[VAR];             /* Glyphs data. */
  83 
  84   DEFINE_SIZE_ARRAY (0, dataX);
  85 };
  86 
  87 struct glyfGlyphHeader
  88 {
  89   SHORT         numberOfContours;       /* If the number of contours is
  90                                          * greater than or equal to zero,
  91                                          * this is a simple glyph; if negative,
  92                                          * this is a composite glyph. */
  93   SHORT         xMin;                   /* Minimum x for coordinate data. */
  94   SHORT         yMin;                   /* Minimum y for coordinate data. */
  95   SHORT         xMax;                   /* Maximum x for coordinate data. */
  96   SHORT         yMax;                   /* Maximum y for coordinate data. */
  97 
  98   DEFINE_SIZE_STATIC (10);
  99 };
 100 
 101 } /* namespace OT */
 102 
 103 
 104 #endif /* HB_OT_GLYF_TABLE_HH */