/work/workdir/UnpackedTarball/harfbuzz/src/hb-subset-input.hh
Line | Count | Source (jump to first uncovered line) |
1 | | /* |
2 | | * Copyright © 2018 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): Garret Rieger, Roderick Sheeter |
25 | | */ |
26 | | |
27 | | #ifndef HB_SUBSET_INPUT_HH |
28 | | #define HB_SUBSET_INPUT_HH |
29 | | |
30 | | |
31 | | #include "hb.hh" |
32 | | |
33 | | #include "hb-subset.h" |
34 | | #include "hb-map.hh" |
35 | | #include "hb-set.hh" |
36 | | #include "hb-cplusplus.hh" |
37 | | #include "hb-font.hh" |
38 | | #include "hb-subset-instancer-solver.hh" |
39 | | |
40 | | struct hb_ot_name_record_ids_t |
41 | | { |
42 | | hb_ot_name_record_ids_t () = default; |
43 | | hb_ot_name_record_ids_t (unsigned platform_id_, |
44 | | unsigned encoding_id_, |
45 | | unsigned language_id_, |
46 | | unsigned name_id_) |
47 | | :platform_id (platform_id_), |
48 | | encoding_id (encoding_id_), |
49 | | language_id (language_id_), |
50 | 0 | name_id (name_id_) {} |
51 | | |
52 | | bool operator != (const hb_ot_name_record_ids_t o) const |
53 | 0 | { return !(*this == o); } |
54 | | |
55 | | inline bool operator == (const hb_ot_name_record_ids_t& o) const |
56 | 0 | { |
57 | 0 | return platform_id == o.platform_id && |
58 | 0 | encoding_id == o.encoding_id && |
59 | 0 | language_id == o.language_id && |
60 | 0 | name_id == o.name_id; |
61 | 0 | } |
62 | | |
63 | | inline uint32_t hash () const |
64 | 0 | { |
65 | 0 | uint32_t current = 0; |
66 | 0 | current = current * 31 + hb_hash (platform_id); |
67 | 0 | current = current * 31 + hb_hash (encoding_id); |
68 | 0 | current = current * 31 + hb_hash (language_id); |
69 | 0 | current = current * 31 + hb_hash (name_id); |
70 | 0 | return current; |
71 | 0 | } |
72 | | |
73 | | unsigned platform_id; |
74 | | unsigned encoding_id; |
75 | | unsigned language_id; |
76 | | unsigned name_id; |
77 | | }; |
78 | | |
79 | | typedef struct hb_ot_name_record_ids_t hb_ot_name_record_ids_t; |
80 | | |
81 | | |
82 | | HB_MARK_AS_FLAG_T (hb_subset_flags_t); |
83 | | |
84 | | struct hb_subset_input_t |
85 | | { |
86 | | HB_INTERNAL hb_subset_input_t (); |
87 | | |
88 | | ~hb_subset_input_t () |
89 | 0 | { |
90 | 0 | sets.~sets_t (); |
91 | 0 |
|
92 | 0 | #ifdef HB_EXPERIMENTAL_API |
93 | 0 | for (auto _ : name_table_overrides.values ()) |
94 | 0 | _.fini (); |
95 | 0 | #endif |
96 | 0 | } |
97 | | |
98 | | hb_object_header_t header; |
99 | | |
100 | | struct sets_t { |
101 | | hb::shared_ptr<hb_set_t> glyphs; |
102 | | hb::shared_ptr<hb_set_t> unicodes; |
103 | | hb::shared_ptr<hb_set_t> no_subset_tables; |
104 | | hb::shared_ptr<hb_set_t> drop_tables; |
105 | | hb::shared_ptr<hb_set_t> name_ids; |
106 | | hb::shared_ptr<hb_set_t> name_languages; |
107 | | hb::shared_ptr<hb_set_t> layout_features; |
108 | | hb::shared_ptr<hb_set_t> layout_scripts; |
109 | | }; |
110 | | |
111 | | union { |
112 | | sets_t sets; |
113 | | hb::shared_ptr<hb_set_t> set_ptrs[sizeof (sets_t) / sizeof (hb_set_t*)]; |
114 | | }; |
115 | | |
116 | | unsigned flags; |
117 | | bool attach_accelerator_data = false; |
118 | | |
119 | | // If set loca format will always be the long version. |
120 | | bool force_long_loca = false; |
121 | | |
122 | | hb_hashmap_t<hb_tag_t, Triple> axes_location; |
123 | | hb_map_t glyph_map; |
124 | | #ifdef HB_EXPERIMENTAL_API |
125 | | hb_hashmap_t<hb_ot_name_record_ids_t, hb_bytes_t> name_table_overrides; |
126 | | #endif |
127 | | |
128 | | inline unsigned num_sets () const |
129 | 0 | { |
130 | 0 | return sizeof (set_ptrs) / sizeof (hb_set_t*); |
131 | 0 | } |
132 | | |
133 | | inline hb_array_t<hb::shared_ptr<hb_set_t>> sets_iter () |
134 | 0 | { |
135 | 0 | return hb_array (set_ptrs); |
136 | 0 | } |
137 | | |
138 | | bool in_error () const |
139 | 0 | { |
140 | 0 | for (unsigned i = 0; i < num_sets (); i++) |
141 | 0 | { |
142 | 0 | if (unlikely (set_ptrs[i]->in_error ())) |
143 | 0 | return true; |
144 | 0 | } |
145 | 0 |
|
146 | 0 | return axes_location.in_error () |
147 | 0 | #ifdef HB_EXPERIMENTAL_API |
148 | 0 | || name_table_overrides.in_error () |
149 | 0 | #endif |
150 | 0 | ; |
151 | 0 | } |
152 | | }; |
153 | | |
154 | | |
155 | | #endif /* HB_SUBSET_INPUT_HH */ |