rustybuzz/hb/ot/layout/GSUB/
subst_lookup.rs

1use crate::hb::ot_layout::LayoutLookup;
2use crate::hb::ot_layout_common::SubstLookup;
3use crate::hb::ot_layout_gsubgpos::OT::hb_ot_apply_context_t;
4use crate::hb::ot_layout_gsubgpos::{Apply, WouldApply, WouldApplyContext};
5use crate::hb::set_digest::{hb_set_digest_ext, hb_set_digest_t};
6
7impl LayoutLookup for SubstLookup<'_> {
8    fn props(&self) -> u32 {
9        self.props
10    }
11
12    fn is_reverse(&self) -> bool {
13        self.reverse
14    }
15
16    fn digest(&self) -> &hb_set_digest_t {
17        &self.set_digest
18    }
19}
20
21impl WouldApply for SubstLookup<'_> {
22    fn would_apply(&self, ctx: &WouldApplyContext) -> bool {
23        self.digest().may_have_glyph(ctx.glyphs[0])
24            && self
25                .subtables
26                .iter()
27                .any(|subtable| subtable.would_apply(ctx))
28    }
29}
30
31impl Apply for SubstLookup<'_> {
32    fn apply(&self, ctx: &mut hb_ot_apply_context_t) -> Option<()> {
33        if self.digest().may_have_glyph(ctx.buffer.cur(0).as_glyph()) {
34            for subtable in &self.subtables {
35                if subtable.apply(ctx).is_some() {
36                    return Some(());
37                }
38            }
39        }
40
41        None
42    }
43}