Home | History | Annotate | Download | only in src
      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   FWORD		xMin;			/* Minimum x for coordinate data. */
     94   FWORD		yMin;			/* Minimum y for coordinate data. */
     95   FWORD		xMax;			/* Maximum x for coordinate data. */
     96   FWORD		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 */
    105