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