Imported Upstream version 2.6.7
[platform/upstream/harfbuzz.git] / src / hb-aat-fdsc-table.hh
1 /*
2  * Copyright © 2018  Ebrahim Byagowi
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
25 #ifndef HB_AAT_FDSC_TABLE_HH
26 #define HB_AAT_FDSC_TABLE_HH
27
28 #include "hb-aat-layout-common.hh"
29 #include "hb-open-type.hh"
30
31 /*
32  * fdsc -- Font descriptors
33  * https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6fdsc.html
34  */
35 #define HB_AAT_TAG_fdsc HB_TAG('f','d','s','c')
36
37
38 namespace AAT {
39
40
41 struct FontDescriptor
42 {
43   bool has_data () const { return tag; }
44
45   int cmp (hb_tag_t a) const { return tag.cmp (a); }
46
47   float get_value () const { return u.value.to_float (); }
48
49   enum non_alphabetic_value_t {
50     Alphabetic          = 0,
51     Dingbats            = 1,
52     PiCharacters        = 2,
53     Fleurons            = 3,
54     DecorativeBorders   = 4,
55     InternationalSymbols= 5,
56     MathSymbols         = 6
57   };
58
59   bool sanitize (hb_sanitize_context_t *c) const
60   {
61     TRACE_SANITIZE (this);
62     return_trace (c->check_struct (this));
63   }
64
65   protected:
66   Tag           tag;            /* The 4-byte table tag name. */
67   union {
68   HBFixed       value;          /* The value for the descriptor tag. */
69   HBUINT32      nalfType;       /* If the tag is `nalf`, see non_alphabetic_value_t */
70   } u;
71   public:
72   DEFINE_SIZE_STATIC (8);
73 };
74
75 struct fdsc
76 {
77   static constexpr hb_tag_t tableTag = HB_AAT_TAG_fdsc;
78
79   enum {
80     Weight       = HB_TAG ('w','g','h','t'),
81                                 /* Percent weight relative to regular weight.
82                                  * (defaul value: 1.0) */
83     Width        = HB_TAG ('w','d','t','h'),
84                                 /* Percent width relative to regular width.
85                                  * (default value: 1.0) */
86     Slant        = HB_TAG ('s','l','n','t'),
87                                 /* Angle of slant in degrees, where positive
88                                  * is clockwise from straight up.
89                                  * (default value: 0.0) */
90     OpticalSize  = HB_TAG ('o','p','s','z'),
91                                 /* Point size the font was designed for.
92                                  * (default value: 12.0) */
93     NonAlphabetic= HB_TAG ('n','a','l','f')
94                                 /* These values are treated as integers,
95                                  * not fixed32s. 0 means alphabetic, and greater
96                                  * integers mean the font is non-alphabetic (e.g. symbols).
97                                  * (default value: 0) */
98   };
99
100   const FontDescriptor &get_descriptor (hb_tag_t style) const
101   { return descriptors.lsearch (style); }
102
103   bool sanitize (hb_sanitize_context_t *c) const
104   {
105     TRACE_SANITIZE (this);
106     return_trace (c->check_struct (this) &&
107                   descriptors.sanitize (c));
108   }
109
110   protected:
111   HBFixed       version;        /* Version number of the font descriptors
112                                  * table (0x00010000 for the current version). */
113   LArrayOf<FontDescriptor>
114                 descriptors;    /* List of tagged-coordinate pairs style descriptors
115                                  * that will be included to characterize this font.
116                                  * Each descriptor consists of a <tag, value> pair.
117                                  * These pairs are located in the gxFontDescriptor
118                                  * array that follows. */
119   public:
120   DEFINE_SIZE_ARRAY (8, descriptors);
121 };
122
123 } /* namespace AAT */
124
125
126 #endif /* HB_AAT_FDSC_TABLE_HH */