comparison mupdf-source/thirdparty/harfbuzz/src/OT/Layout/GSUB/SubstLookupSubTable.hh @ 2:b50eed0cc0ef upstream

ADD: MuPDF v1.26.7: the MuPDF source as downloaded by a default build of PyMuPDF 1.26.4. The directory name has changed: no version number in the expanded directory now.
author Franz Glasner <fzglas.hg@dom66.de>
date Mon, 15 Sep 2025 11:43:07 +0200
parents
children
comparison
equal deleted inserted replaced
1:1d09e1dec1d9 2:b50eed0cc0ef
1 #ifndef OT_LAYOUT_GSUB_SUBSTLOOKUPSUBTABLE_HH
2 #define OT_LAYOUT_GSUB_SUBSTLOOKUPSUBTABLE_HH
3
4 #include "Common.hh"
5 #include "SingleSubst.hh"
6 #include "MultipleSubst.hh"
7 #include "AlternateSubst.hh"
8 #include "LigatureSubst.hh"
9 #include "ContextSubst.hh"
10 #include "ChainContextSubst.hh"
11 #include "ExtensionSubst.hh"
12 #include "ReverseChainSingleSubst.hh"
13
14 namespace OT {
15 namespace Layout {
16 namespace GSUB_impl {
17
18 struct SubstLookupSubTable
19 {
20 friend struct ::OT::Lookup;
21 friend struct SubstLookup;
22
23 protected:
24 union {
25 SingleSubst single;
26 MultipleSubst multiple;
27 AlternateSubst alternate;
28 LigatureSubst ligature;
29 ContextSubst context;
30 ChainContextSubst chainContext;
31 ExtensionSubst extension;
32 ReverseChainSingleSubst reverseChainContextSingle;
33 } u;
34 public:
35 DEFINE_SIZE_MIN (0);
36
37 enum Type {
38 Single = 1,
39 Multiple = 2,
40 Alternate = 3,
41 Ligature = 4,
42 Context = 5,
43 ChainContext = 6,
44 Extension = 7,
45 ReverseChainSingle = 8
46 };
47
48 template <typename context_t, typename ...Ts>
49 typename context_t::return_t dispatch (context_t *c, unsigned int lookup_type, Ts&&... ds) const
50 {
51 TRACE_DISPATCH (this, lookup_type);
52 switch (lookup_type) {
53 case Single: return_trace (u.single.dispatch (c, std::forward<Ts> (ds)...));
54 case Multiple: return_trace (u.multiple.dispatch (c, std::forward<Ts> (ds)...));
55 case Alternate: return_trace (u.alternate.dispatch (c, std::forward<Ts> (ds)...));
56 case Ligature: return_trace (u.ligature.dispatch (c, std::forward<Ts> (ds)...));
57 case Context: return_trace (u.context.dispatch (c, std::forward<Ts> (ds)...));
58 case ChainContext: return_trace (u.chainContext.dispatch (c, std::forward<Ts> (ds)...));
59 case Extension: return_trace (u.extension.dispatch (c, std::forward<Ts> (ds)...));
60 case ReverseChainSingle: return_trace (u.reverseChainContextSingle.dispatch (c, std::forward<Ts> (ds)...));
61 default: return_trace (c->default_return_value ());
62 }
63 }
64
65 bool intersects (const hb_set_t *glyphs, unsigned int lookup_type) const
66 {
67 hb_intersects_context_t c (glyphs);
68 return dispatch (&c, lookup_type);
69 }
70 };
71
72
73 }
74 }
75 }
76
77 #endif /* HB_OT_LAYOUT_GSUB_SUBSTLOOKUPSUBTABLE_HH */