hb_subset/subset/
flags.rs1use crate::{sys, SubsetInput};
2use std::ops::{Deref, DerefMut};
3
4#[derive(Debug, Clone, Copy, PartialEq, Eq)]
28pub struct Flags(pub sys::hb_subset_flags_t);
29
30impl Flags {
31 fn add_flag(&mut self, flag: sys::hb_subset_flags_t) -> &mut Self {
32 self.0 |= flag;
33 self
34 }
35
36 fn remove_flag(&mut self, flag: sys::hb_subset_flags_t) -> &mut Self {
37 self.0 .0 &= !flag.0;
38 self
39 }
40
41 pub fn remove_hinting(&mut self) -> &mut Self {
43 self.add_flag(sys::hb_subset_flags_t::NO_HINTING)
44 }
45
46 pub fn retain_hinting(&mut self) -> &mut Self {
48 self.remove_flag(sys::hb_subset_flags_t::NO_HINTING)
49 }
50
51 pub fn retain_glyph_indices(&mut self) -> &mut Self {
55 self.add_flag(sys::hb_subset_flags_t::RETAIN_GIDS)
56 }
57
58 pub fn remap_glyph_indices(&mut self) -> &mut Self {
60 self.remove_flag(sys::hb_subset_flags_t::RETAIN_GIDS)
61 }
62
63 pub fn remove_subroutines(&mut self) -> &mut Self {
67 self.add_flag(sys::hb_subset_flags_t::DESUBROUTINIZE)
68 }
69
70 pub fn retain_subroutines(&mut self) -> &mut Self {
72 self.remove_flag(sys::hb_subset_flags_t::DESUBROUTINIZE)
73 }
74
75 pub fn retain_legacy_names(&mut self) -> &mut Self {
77 self.add_flag(sys::hb_subset_flags_t::NAME_LEGACY)
78 }
79
80 pub fn remove_legacy_names(&mut self) -> &mut Self {
82 self.remove_flag(sys::hb_subset_flags_t::NAME_LEGACY)
83 }
84
85 pub fn set_overlap_simple_flag(&mut self) -> &mut Self {
89 self.add_flag(sys::hb_subset_flags_t::SET_OVERLAPS_FLAG)
90 }
91
92 pub fn remove_overlap_simple_flag(&mut self) -> &mut Self {
94 self.remove_flag(sys::hb_subset_flags_t::SET_OVERLAPS_FLAG)
95 }
96
97 pub fn retain_unrecognized_tables(&mut self) -> &mut Self {
101 self.add_flag(sys::hb_subset_flags_t::PASSTHROUGH_UNRECOGNIZED)
102 }
103
104 pub fn remove_unrecognized_tables(&mut self) -> &mut Self {
106 self.remove_flag(sys::hb_subset_flags_t::PASSTHROUGH_UNRECOGNIZED)
107 }
108
109 pub fn retain_notdef_outline(&mut self) -> &mut Self {
111 self.add_flag(sys::hb_subset_flags_t::NOTDEF_OUTLINE)
112 }
113
114 pub fn remove_notdef_outline(&mut self) -> &mut Self {
116 self.remove_flag(sys::hb_subset_flags_t::NOTDEF_OUTLINE)
117 }
118
119 pub fn retain_glyph_names(&mut self) -> &mut Self {
121 self.add_flag(sys::hb_subset_flags_t::GLYPH_NAMES)
122 }
123
124 pub fn remove_glyph_names(&mut self) -> &mut Self {
126 self.remove_flag(sys::hb_subset_flags_t::GLYPH_NAMES)
127 }
128
129 pub fn recompute_unicode_ranges(&mut self) -> &mut Self {
131 self.remove_flag(sys::hb_subset_flags_t::NO_PRUNE_UNICODE_RANGES)
132 }
133
134 pub fn retain_unicode_ranges(&mut self) -> &mut Self {
136 self.add_flag(sys::hb_subset_flags_t::NO_PRUNE_UNICODE_RANGES)
137 }
138
139 pub fn retain_layout_closure(&mut self) -> &mut Self {
144 self.remove_flag(sys::hb_subset_flags_t::NO_LAYOUT_CLOSURE)
145 }
146
147 pub fn no_layout_closure(&mut self) -> &mut Self {
149 self.add_flag(sys::hb_subset_flags_t::NO_LAYOUT_CLOSURE)
150 }
151}
152
153impl Default for Flags {
154 fn default() -> Self {
155 Self(sys::hb_subset_flags_t::DEFAULT)
156 }
157}
158
159pub struct FlagRef<'s>(pub(crate) &'s mut SubsetInput, pub(crate) Flags);
163
164impl<'s> Deref for FlagRef<'s> {
165 type Target = Flags;
166
167 fn deref(&self) -> &Self::Target {
168 &self.1
169 }
170}
171
172impl<'s> DerefMut for FlagRef<'s> {
173 fn deref_mut(&mut self) -> &mut Self::Target {
174 &mut self.1
175 }
176}
177
178impl<'s> Drop for FlagRef<'s> {
179 fn drop(&mut self) {
180 unsafe { sys::hb_subset_input_set_flags(self.0.as_raw(), self.1 .0 .0) }
181 }
182}