• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright © 2015  Mozilla Foundation.
3  * Copyright © 2015  Google, Inc.
4  *
5  *  This is part of HarfBuzz, a text shaping library.
6  *
7  * Permission is hereby granted, without written agreement and without
8  * license or royalty fees, to use, copy, modify, and distribute this
9  * software and its documentation for any purpose, provided that the
10  * above copyright notice and the following two paragraphs appear in
11  * all copies of this software.
12  *
13  * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
14  * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
15  * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
16  * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
17  * DAMAGE.
18  *
19  * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
20  * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
21  * FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
22  * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
23  * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
24  *
25  * Mozilla Author(s): Jonathan Kew
26  * Google Author(s): Behdad Esfahbod
27  */
28 
29 #ifndef HB_OT_SHAPE_COMPLEX_USE_HH
30 #define HB_OT_SHAPE_COMPLEX_USE_HH
31 
32 #include "hb.hh"
33 
34 
35 #include "hb-ot-shape-complex.hh"
36 
37 
38 #define USE_TABLE_ELEMENT_TYPE uint8_t
39 
40 /* Cateories used in the Universal Shaping Engine spec:
41  * https://docs.microsoft.com/en-us/typography/script-development/use
42  */
43 /* Note: This enum is duplicated in the -machine.rl source file.
44  * Not sure how to avoid duplication. */
45 enum use_category_t {
46   USE_O		= 0,	/* OTHER */
47 
48   USE_B		= 1,	/* BASE */
49   USE_IND	= 3,	/* BASE_IND */
50   USE_N		= 4,	/* BASE_NUM */
51   USE_GB	= 5,	/* BASE_OTHER */
52   USE_CGJ	= 6,	/* CGJ */
53 //  USE_F		= 7,	/* CONS_FINAL */
54   USE_FM	= 8,	/* CONS_FINAL_MOD */
55 //  USE_M		= 9,	/* CONS_MED */
56 //  USE_CM	= 10,	/* CONS_MOD */
57   USE_SUB	= 11,	/* CONS_SUB */
58   USE_H		= 12,	/* HALANT */
59 
60   USE_HN	= 13,	/* HALANT_NUM */
61   USE_ZWNJ	= 14,	/* Zero width non-joiner */
62   USE_ZWJ	= 15,	/* Zero width joiner */
63   USE_WJ	= 16,	/* Word joiner */
64   USE_Rsv	= 17,	/* Reserved characters */
65   USE_R		= 18,	/* REPHA */
66   USE_S		= 19,	/* SYM */
67 //  USE_SM	= 20,	/* SYM_MOD */
68   USE_VS	= 21,	/* VARIATION_SELECTOR */
69 //  USE_V	= 36,	/* VOWEL */
70 //  USE_VM	= 40,	/* VOWEL_MOD */
71   USE_CS	= 43,	/* CONS_WITH_STACKER */
72 
73   /* https://github.com/harfbuzz/harfbuzz/issues/1102 */
74   USE_HVM	= 44,	/* HALANT_OR_VOWEL_MODIFIER */
75 
76   USE_Sk	= 48,	/* SAKOT */
77 
78   USE_FAbv	= 24,	/* CONS_FINAL_ABOVE */
79   USE_FBlw	= 25,	/* CONS_FINAL_BELOW */
80   USE_FPst	= 26,	/* CONS_FINAL_POST */
81   USE_MAbv	= 27,	/* CONS_MED_ABOVE */
82   USE_MBlw	= 28,	/* CONS_MED_BELOW */
83   USE_MPst	= 29,	/* CONS_MED_POST */
84   USE_MPre	= 30,	/* CONS_MED_PRE */
85   USE_CMAbv	= 31,	/* CONS_MOD_ABOVE */
86   USE_CMBlw	= 32,	/* CONS_MOD_BELOW */
87   USE_VAbv	= 33,	/* VOWEL_ABOVE / VOWEL_ABOVE_BELOW / VOWEL_ABOVE_BELOW_POST / VOWEL_ABOVE_POST */
88   USE_VBlw	= 34,	/* VOWEL_BELOW / VOWEL_BELOW_POST */
89   USE_VPst	= 35,	/* VOWEL_POST	UIPC = Right */
90   USE_VPre	= 22,	/* VOWEL_PRE / VOWEL_PRE_ABOVE / VOWEL_PRE_ABOVE_POST / VOWEL_PRE_POST */
91   USE_VMAbv	= 37,	/* VOWEL_MOD_ABOVE */
92   USE_VMBlw	= 38,	/* VOWEL_MOD_BELOW */
93   USE_VMPst	= 39,	/* VOWEL_MOD_POST */
94   USE_VMPre	= 23,	/* VOWEL_MOD_PRE */
95   USE_SMAbv	= 41,	/* SYM_MOD_ABOVE */
96   USE_SMBlw	= 42,	/* SYM_MOD_BELOW */
97   USE_FMAbv	= 45,	/* CONS_FINAL_MOD	UIPC = Top */
98   USE_FMBlw	= 46,	/* CONS_FINAL_MOD	UIPC = Bottom */
99   USE_FMPst	= 47,	/* CONS_FINAL_MOD	UIPC = Not_Applicable */
100 };
101 
102 HB_INTERNAL USE_TABLE_ELEMENT_TYPE
103 hb_use_get_category (hb_codepoint_t u);
104 
105 #endif /* HB_OT_SHAPE_COMPLEX_USE_HH */
106