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