1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 /*
3  * This file is part of the LibreOffice project.
4  *
5  * This Source Code Form is subject to the terms of the Mozilla Public
6  * License, v. 2.0. If a copy of the MPL was not distributed with this
7  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8  */
9 
10 #ifndef INCLUDED_VCL_FONTCAPABILITIES_HXX
11 #define INCLUDED_VCL_FONTCAPABILITIES_HXX
12 
13 #include <optional>
14 #include <bitset>
15 
16 //See OS/2 table, i.e. http://www.microsoft.com/typography/otspec/os2.htm#ur
17 namespace vcl
18 {
19     namespace UnicodeCoverage
20     {
21         enum UnicodeCoverageEnum
22         {
23             BASIC_LATIN                                 = 0,
24             LATIN_1_SUPPLEMENT                          = 1,
25             LATIN_EXTENDED_A                            = 2,
26             LATIN_EXTENDED_B                            = 3,
27             IPA_EXTENSIONS                              = 4,
28             SPACING_MODIFIER_LETTERS                    = 5,
29             COMBINING_DIACRITICAL_MARKS                 = 6,
30             GREEK_AND_COPTIC                            = 7,
31             COPTIC                                      = 8,
32             CYRILLIC                                    = 9,
33             ARMENIAN                                    = 10,
34             HEBREW                                      = 11,
35             VAI                                         = 12,
36             ARABIC                                      = 13,
37             NKO                                         = 14,
38             DEVANAGARI                                  = 15,
39             BENGALI                                     = 16,
40             GURMUKHI                                    = 17,
41             GUJARATI                                    = 18,
42             ODIA                                        = 19,
43             TAMIL                                       = 20,
44             TELUGU                                      = 21,
45             KANNADA                                     = 22,
46             MALAYALAM                                   = 23,
47             THAI                                        = 24,
48             LAO                                         = 25,
49             GEORGIAN                                    = 26,
50             BALINESE                                    = 27,
51             HANGUL_JAMO                                 = 28,
52             LATIN_EXTENDED_ADDITIONAL                   = 29,
53             GREEK_EXTENDED                              = 30,
54             GENERAL_PUNCTUATION                         = 31,
55             SUPERSCRIPTS_AND_SUBSCRIPTS                 = 32,
56             CURRENCY_SYMBOLS                            = 33,
57             COMBINING_DIACRITICAL_MARKS_FOR_SYMBOLS     = 34,
58             LETTERLIKE_SYMBOLS                          = 35,
59             NUMBER_FORMS                                = 36,
60             ARROWS                                      = 37,
61             MATHEMATICAL_OPERATORS                      = 38,
62             MISCELLANEOUS_TECHNICAL                     = 39,
63             CONTROL_PICTURES                            = 40,
64             OPTICAL_CHARACTER_RECOGNITION               = 41,
65             ENCLOSED_ALPHANUMERICS                      = 42,
66             BOX_DRAWING                                 = 43,
67             BLOCK_ELEMENTS                              = 44,
68             GEOMETRIC_SHAPES                            = 45,
69             MISCELLANEOUS_SYMBOLS                       = 46,
70             DINGBATS                                    = 47,
71             CJK_SYMBOLS_AND_PUNCTUATION                 = 48,
72             HIRAGANA                                    = 49,
73             KATAKANA                                    = 50,
74             BOPOMOFO                                    = 51,
75             HANGUL_COMPATIBILITY_JAMO                   = 52,
76             PHAGS_PA                                    = 53,
77             ENCLOSED_CJK_LETTERS_AND_MONTHS             = 54,
78             CJK_COMPATIBILITY                           = 55,
79             HANGUL_SYLLABLES                            = 56,
80             NONPLANE_0                                  = 57,
81             PHOENICIAN                                  = 58,
82             CJK_UNIFIED_IDEOGRAPHS                      = 59,
83             PRIVATE_USE_AREA_PLANE_0                    = 60,
84             CJK_STROKES                                 = 61,
85             ALPHABETIC_PRESENTATION_FORMS               = 62,
86             ARABIC_PRESENTATION_FORMS_A                 = 63,
87             COMBINING_HALF_MARKS                        = 64,
88             VERTICAL_FORMS                              = 65,
89             SMALL_FORM_VARIANTS                         = 66,
90             ARABIC_PRESENTATION_FORMS_B                 = 67,
91             HALFWIDTH_AND_FULLWIDTH_FORMS               = 68,
92             SPECIALS                                    = 69,
93             TIBETAN                                     = 70,
94             SYRIAC                                      = 71,
95             THAANA                                      = 72,
96             SINHALA                                     = 73,
97             MYANMAR                                     = 74,
98             ETHIOPIC                                    = 75,
99             CHEROKEE                                    = 76,
100             UNIFIED_CANADIAN_ABORIGINAL_SYLLABICS       = 77,
101             OGHAM                                       = 78,
102             RUNIC                                       = 79,
103             KHMER                                       = 80,
104             MONGOLIAN                                   = 81,
105             BRAILLE_PATTERNS                            = 82,
106             YI_SYLLABLES                                = 83,
107             TAGALOG                                     = 84,
108             OLD_ITALIC                                  = 85,
109             GOTHIC                                      = 86,
110             DESERET                                     = 87,
111             BYZANTINE_MUSICAL_SYMBOLS                   = 88,
112             MATHEMATICAL_ALPHANUMERIC_SYMBOLS           = 89,
113             PRIVATE_USE_PLANE_15                        = 90,
114             VARIATION_SELECTORS                         = 91,
115             TAGS                                        = 92,
116             LIMBU                                       = 93,
117             TAI_LE                                      = 94,
118             NEW_TAI_LUE                                 = 95,
119             BUGINESE                                    = 96,
120             GLAGOLITIC                                  = 97,
121             TIFINAGH                                    = 98,
122             YIJING_HEXAGRAM_SYMBOLS                     = 99,
123             SYLOTI_NAGRI                                = 100,
124             LINEAR_B_SYLLABARY                          = 101,
125             ANCIENT_GREEK_NUMBERS                       = 102,
126             UGARITIC                                    = 103,
127             OLD_PERSIAN                                 = 104,
128             SHAVIAN                                     = 105,
129             OSMANYA                                     = 106,
130             CYPRIOT_SYLLABARY                           = 107,
131             KHAROSHTHI                                  = 108,
132             TAI_XUAN_JING_SYMBOLS                       = 109,
133             CUNEIFORM                                   = 110,
134             COUNTING_ROD_NUMERALS                       = 111,
135             SUNDANESE                                   = 112,
136             LEPCHA                                      = 113,
137             OL_CHIKI                                    = 114,
138             SAURASHTRA                                  = 115,
139             KAYAH_LI                                    = 116,
140             REJANG                                      = 117,
141             CHAM                                        = 118,
142             ANCIENT_SYMBOLS                             = 119,
143             PHAISTOS_DISC                               = 120,
144             CARIAN                                      = 121,
145             DOMINO_TILES                                = 122,
146             RESERVED1                                   = 123,
147             RESERVED2                                   = 124,
148             RESERVED3                                   = 125,
149             RESERVED4                                   = 126,
150             RESERVED5                                   = 127,
151             MAX_UC_ENUM                                 = 128
152         };
153     };
154 
155     namespace CodePageCoverage
156     {
157         enum CodePageCoverageEnum
158         {
159             CP1252       = 0,
160             CP1250       = 1,
161             CP1251       = 2,
162             CP1253       = 3,
163             CP1254       = 4,
164             CP1255       = 5,
165             CP1256       = 6,
166             CP1257       = 7,
167             CP1258       = 8,
168             CP874        = 16,
169             CP932        = 17,
170             CP936        = 18,
171             CP949        = 19,
172             CP950        = 20,
173             CP1361       = 21,
174             CP869        = 48,
175             CP866        = 49,
176             CP865        = 50,
177             CP864        = 51,
178             CP863        = 52,
179             CP862        = 53,
180             CP861        = 54,
181             CP860        = 55,
182             CP857        = 56,
183             CP855        = 57,
184             CP852        = 58,
185             CP775        = 59,
186             CP737        = 60,
187             CP780        = 61,
188             CP850        = 62,
189             CP437        = 63,
190             MAX_CP_ENUM  = 64
191         };
192     };
193 
194     struct FontCapabilities
195     {
196         std::optional<std::bitset<UnicodeCoverage::MAX_UC_ENUM>> oUnicodeRange;
197         std::optional<std::bitset<CodePageCoverage::MAX_CP_ENUM>> oCodePageRange;
198     };
199 }
200 
201 #endif
202 
203 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
204