10#include <vcl/font.hxx>
16#include <com/sun/star/i18n/ScriptType.hpp>
27 if (rName ==
"GB18030 Bitmap")
33 else if (rName ==
"BiauKai")
37 return USCRIPT_TRADITIONAL_HAN;
39 else if (rName ==
"GungSeo" || rName ==
"PCMyungjo" || rName ==
"PilGi")
42 return USCRIPT_KOREAN;
44 else if (rName ==
"Hei" || rName ==
"Kai")
49 else if (rName.startsWith(
"Bangla "))
53 return USCRIPT_BENGALI;
55 else if (rName.startsWith(
"Gurmukhi "))
58 return USCRIPT_GURMUKHI;
60 else if (rName.startsWith(
"Kannada "))
63 return USCRIPT_KANNADA;
65 else if (rName.startsWith(
"Lao "))
70 else if (rName.startsWith(
"Malayalam "))
73 return USCRIPT_MALAYALAM;
75 else if (rName.startsWith(
"Sinhala "))
78 return USCRIPT_SINHALA;
80 else if (rName.startsWith(
"Telugu "))
83 return USCRIPT_TELUGU;
85 else if (rName.startsWith(
"Myanmar "))
87 return USCRIPT_MYANMAR;
89 else if (rName ==
"InaiMathi")
95 else if (rName ==
"Hannotate TC" || rName ==
"HanziPen TC" || rName ==
"Heiti TC" || rName ==
"Weibei TC")
98 return USCRIPT_TRADITIONAL_HAN;
100 else if (rName ==
"Hannotate SC" || rName ==
"HanziPen SC" || rName ==
"Heiti SC" || rName ==
"Weibei SC")
103 return USCRIPT_SIMPLIFIED_HAN;
105 return USCRIPT_INVALID_CODE;
110 return (rFont.
GetCharSet() == RTL_TEXTENCODING_SYMBOL) ||
111 rFont.
GetFamilyName().equalsIgnoreAsciiCase(
"Apple Color Emoji") ||
116 rFont.
GetFamilyName().equalsIgnoreAsciiCase(
"jsMath-cmsy10") ||
117 rFont.
GetFamilyName().equalsIgnoreAsciiCase(
"jsMath-cmex10") ||
122 rFont.
GetFamilyName().equalsIgnoreAsciiCase(
"GlyphBasic1") ||
123 rFont.
GetFamilyName().equalsIgnoreAsciiCase(
"GlyphBasic2") ||
124 rFont.
GetFamilyName().equalsIgnoreAsciiCase(
"GlyphBasic3") ||
125 rFont.
GetFamilyName().equalsIgnoreAsciiCase(
"GlyphBasic4") ||
126 rFont.
GetFamilyName().equalsIgnoreAsciiCase(
"Letters Laughing") ||
133 rFont.
GetFamilyName().equalsIgnoreAsciiCase(
"Wingdings 2") ||
134 rFont.
GetFamilyName().equalsIgnoreAsciiCase(
"Wingdings 3") ||
135 rFont.
GetFamilyName().equalsIgnoreAsciiCase(
"Bookshelf Symbol 7") ||
153 static constexpr OUStringLiteral aImplAppleSymbolText =
154 u"\u03BC\u2202\u2211\u220F\u03C0\u222B\u03A9\u221A";
155 bool bHasSampleTextGlyphs
158 if (bHasSampleTextGlyphs)
159 return aImplAppleSymbolText;
160 static constexpr OUStringLiteral aImplAdobeSymbolText =
161 u"\uF06D\uF0B6\uF0E5\uF0D5\uF070\uF0F2\uF057\uF0D6";
162 return aImplAdobeSymbolText;
177 sal_uInt32 cNewChar = 0xFF00;
180 int nSkip = xFontCharMap->GetCharCount() / nMaxCount;
183 else if( nSkip <= 0 )
185 for(
int i = 0;
i < nMaxCount; ++
i )
187 sal_uInt32 cOldChar = cNewChar;
188 for(
int j = nSkip; --j >= 0; )
189 cNewChar = xFontCharMap->GetPrevChar( cNewChar );
190 if( cOldChar == cNewChar )
196 return OUString(aText);
201 0xF021,0xF032,0xF043,0xF054,0xF065,0xF076,0xF0B7,0xF0C8,0};
203 0x2702,0x2708,0x270D,0xE033,0x2211,0x2288,0};
204 const sal_Unicode* pText = bOpenSymbol ? aImplStarSymbolText : aImplSymbolFontText;
205 OUString sSampleText(pText);
206 bool bHasSampleTextGlyphs = (-1 == rDevice.
HasGlyphs(rDevice.
GetFont(), sSampleText));
207 return bHasSampleTextGlyphs ? sSampleText : OUString();
222 OUString sSampleText;
227 static constexpr OUStringLiteral aGrek =
228 u"\u0391\u03BB\u03C6\u03AC\u03B2\u03B7\u03C4\u03BF";
234 static constexpr OUStringLiteral aHebr =
235 u"\u05D0\u05DC\u05E3\u05BE\u05D1\u05D9\u05EA "
236 "\u05E2\u05D1\u05E8\u05D9";
242 static constexpr OUStringLiteral aArab =
243 u"\u0623\u0628\u062C\u062F\u064A\u0629 \u0639"
244 "\u0631\u0628\u064A\u0629";
248 case USCRIPT_ARMENIAN:
250 static constexpr OUStringLiteral aArmenian =
251 u"\u0561\u0575\u0562\u0578\u0582\u0562\u0565"
253 sSampleText = aArmenian;
256 case USCRIPT_DEVANAGARI:
258 static constexpr OUStringLiteral aDeva =
259 u"\u0926\u0947\u0935\u0928\u093E\u0917\u0930\u0940";
263 case USCRIPT_BENGALI:
265 static constexpr OUStringLiteral aBeng =
266 u"\u09AC\u09BE\u0982\u09B2\u09BE \u09B2\u09BF"
271 case USCRIPT_GURMUKHI:
273 static constexpr OUStringLiteral aGuru =
274 u"\u0A17\u0A41\u0A30\u0A2E\u0A41\u0A16\u0A40";
278 case USCRIPT_GUJARATI:
280 static constexpr OUStringLiteral aGujr =
281 u"\u0A97\u0AC1\u0A9C\u0AB0\u0ABE\u0AA4\u0aC0 "
282 "\u0AB2\u0ABF\u0AAA\u0ABF";
288 static constexpr OUStringLiteral aOrya =
289 u"\u0B09\u0B24\u0B4D\u0B15\u0B33 \u0B32\u0B3F"
296 static constexpr OUStringLiteral aTaml =
297 u"\u0B85\u0BB0\u0BBF\u0B9A\u0BCD\u0B9A\u0BC1\u0BB5"
304 static constexpr OUStringLiteral aTelu =
305 u"\u0C24\u0C46\u0C32\u0C41\u0C17\u0C41";
309 case USCRIPT_KANNADA:
311 static constexpr OUStringLiteral aKnda =
312 u"\u0C95\u0CA8\u0CCD\u0CA8\u0CA1 \u0CB2\u0CBF"
317 case USCRIPT_MALAYALAM:
319 static constexpr OUStringLiteral aMlym =
320 u"\u0D2E\u0D32\u0D2F\u0D3E\u0D33\u0D32\u0D3F\u0D2A"
327 static constexpr OUStringLiteral aThai =
328 u"\u0E2D\u0E31\u0E01\u0E29\u0E23\u0E44\u0E17\u0E22";
334 static constexpr OUStringLiteral aLao =
335 u"\u0EAD\u0EB1\u0E81\u0EAA\u0EAD\u0E99\u0EA5\u0EB2"
340 case USCRIPT_GEORGIAN:
342 static constexpr OUStringLiteral aGeorgian =
343 u"\u10D3\u10D0\u10DB\u10EC\u10D4\u10E0\u10DA\u10DD"
345 sSampleText = aGeorgian;
352 static constexpr OUStringLiteral aHang =
357 case USCRIPT_TIBETAN:
359 static constexpr OUStringLiteral aTibt =
360 u"\u0F51\u0F56\u0F74\u0F0B\u0F45\u0F53\u0F0B";
366 static constexpr OUStringLiteral aSyri =
367 u"\u0723\u071B\u072A\u0722\u0713\u0720\u0710";
373 static constexpr OUStringLiteral aThaa =
374 u"\u078C\u07A7\u0782\u07A6";
378 case USCRIPT_SINHALA:
380 static constexpr OUStringLiteral aSinh =
381 u"\u0DC1\u0DD4\u0DAF\u0DCA\u0DB0 \u0DC3\u0DD2"
382 "\u0D82\u0DC4\u0DBD";
386 case USCRIPT_MYANMAR:
388 static constexpr OUStringLiteral aMymr =
389 u"\u1019\u103C\u1014\u103A\u1019\u102C\u1021\u1000"
390 "\u1039\u1001\u101B\u102C";
394 case USCRIPT_ETHIOPIC:
396 static constexpr OUStringLiteral aEthi =
397 u"\u130D\u12D5\u12DD";
401 case USCRIPT_CHEROKEE:
403 static constexpr OUStringLiteral aCher =
404 u"\u13D7\u13AA\u13EA\u13B6\u13D9\u13D7";
410 static constexpr OUStringLiteral aKhmr =
411 u"\u17A2\u1780\u17D2\u1781\u179A\u1780\u17D2\u179A"
412 "\u1798\u1781\u17C1\u1798\u179A\u1797\u17B6\u179F"
417 case USCRIPT_MONGOLIAN:
419 static constexpr OUStringLiteral aMongolian =
420 u"\u182A\u1822\u1834\u1822\u182D\u180C";
421 sSampleText = aMongolian;
424 case USCRIPT_TAGALOG:
426 static constexpr OUStringLiteral aTagalog =
427 u"\u170A\u170A\u170C\u1712";
428 sSampleText = aTagalog;
431 case USCRIPT_NEW_TAI_LUE:
433 static constexpr OUStringLiteral aTalu =
434 u"\u1991\u19BA\u199F\u19B9\u19C9";
438 case USCRIPT_TRADITIONAL_HAN:
440 static constexpr OUStringLiteral aHant =
445 case USCRIPT_SIMPLIFIED_HAN:
447 static constexpr OUStringLiteral aHans =
454 static constexpr OUStringLiteral aSimplifiedAndTraditionalChinese =
456 sSampleText = aSimplifiedAndTraditionalChinese;
459 case USCRIPT_JAPANESE:
461 static constexpr OUStringLiteral aJpan =
462 u"\u65E5\u672C\u8A9E";
468 static constexpr OUStringLiteral aYiii =
469 u"\uA188\uA320\uA071\uA0B7";
473 case USCRIPT_PHAGS_PA:
475 static constexpr OUStringLiteral aPhag =
476 u"\uA84F\uA861\uA843 \uA863\uA861\uA859 "
477 u"\uA850\uA85C\uA85E";
483 static constexpr OUStringLiteral aTale =
484 u"\u1956\u196D\u1970\u1956\u196C\u1973\u1951\u1968"
490 sSampleText =
"Lorem ipsum";
500 OUString sSampleText;
503 case USCRIPT_TRADITIONAL_HAN:
504 case USCRIPT_SIMPLIFIED_HAN:
508 static constexpr OUStringLiteral aZh =
509 u"\u4EBA\u4E4B\u521D \u6027\u672C\u5584";
513 case USCRIPT_JAPANESE:
516 static constexpr OUStringLiteral aJa =
517 u"\u7F8E\u3057\u3044\u65E5\u672C\u8A9E";
526 static constexpr OUStringLiteral aKo =
527 u"\uD0A4\uC2A4\uC758 \uACE0\uC720\uC870"
536 if (sSampleText.isEmpty())
543 OUString sSampleText;
548 static constexpr OUStringLiteral aGrek =
555 static constexpr OUStringLiteral aHebr =
599 static constexpr OUStringLiteral aAs =
600 u"\u0985\u09B8\u09AE\u09C0\u09AF\u09BC\u09BE"
601 " \u0986\u0996\u09F0";
656 static constexpr OUStringLiteral aGa =
657 u"T\u00E9acs Samplach";
666#if OSL_DEBUG_LEVEL > 0
667 void lcl_dump_unicode_coverage(
const std::optional<std::bitset<vcl::UnicodeCoverage::MAX_UC_ENUM>> &roIn)
683 SAL_INFO(
"svtools",
"LATIN_1_SUPPLEMENT");
685 SAL_INFO(
"svtools",
"LATIN_EXTENDED_A");
687 SAL_INFO(
"svtools",
"LATIN_EXTENDED_B");
689 SAL_INFO(
"svtools",
"IPA_EXTENSIONS");
691 SAL_INFO(
"svtools",
"SPACING_MODIFIER_LETTERS");
693 SAL_INFO(
"svtools",
"COMBINING_DIACRITICAL_MARKS");
695 SAL_INFO(
"svtools",
"GREEK_AND_COPTIC");
739 SAL_INFO(
"svtools",
"LATIN_EXTENDED_ADDITIONAL");
741 SAL_INFO(
"svtools",
"GREEK_EXTENDED");
743 SAL_INFO(
"svtools",
"GENERAL_PUNCTUATION");
745 SAL_INFO(
"svtools",
"SUPERSCRIPTS_AND_SUBSCRIPTS");
747 SAL_INFO(
"svtools",
"CURRENCY_SYMBOLS");
749 SAL_INFO(
"svtools",
"COMBINING_DIACRITICAL_MARKS_FOR_SYMBOLS");
751 SAL_INFO(
"svtools",
"LETTERLIKE_SYMBOLS");
753 SAL_INFO(
"svtools",
"NUMBER_FORMS");
757 SAL_INFO(
"svtools",
"MATHEMATICAL_OPERATORS");
759 SAL_INFO(
"svtools",
"MISCELLANEOUS_TECHNICAL");
761 SAL_INFO(
"svtools",
"CONTROL_PICTURES");
763 SAL_INFO(
"svtools",
"OPTICAL_CHARACTER_RECOGNITION");
765 SAL_INFO(
"svtools",
"ENCLOSED_ALPHANUMERICS");
769 SAL_INFO(
"svtools",
"BLOCK_ELEMENTS");
771 SAL_INFO(
"svtools",
"GEOMETRIC_SHAPES");
773 SAL_INFO(
"svtools",
"MISCELLANEOUS_SYMBOLS");
777 SAL_INFO(
"svtools",
"CJK_SYMBOLS_AND_PUNCTUATION");
785 SAL_INFO(
"svtools",
"HANGUL_COMPATIBILITY_JAMO");
789 SAL_INFO(
"svtools",
"ENCLOSED_CJK_LETTERS_AND_MONTHS");
791 SAL_INFO(
"svtools",
"CJK_COMPATIBILITY");
793 SAL_INFO(
"svtools",
"HANGUL_SYLLABLES");
799 SAL_INFO(
"svtools",
"CJK_UNIFIED_IDEOGRAPHS");
801 SAL_INFO(
"svtools",
"PRIVATE_USE_AREA_PLANE_0");
805 SAL_INFO(
"svtools",
"ALPHABETIC_PRESENTATION_FORMS");
807 SAL_INFO(
"svtools",
"ARABIC_PRESENTATION_FORMS_A");
809 SAL_INFO(
"svtools",
"COMBINING_HALF_MARKS");
811 SAL_INFO(
"svtools",
"VERTICAL_FORMS");
813 SAL_INFO(
"svtools",
"SMALL_FORM_VARIANTS");
815 SAL_INFO(
"svtools",
"ARABIC_PRESENTATION_FORMS_B");
817 SAL_INFO(
"svtools",
"HALFWIDTH_AND_FULLWIDTH_FORMS");
835 SAL_INFO(
"svtools",
"UNIFIED_CANADIAN_ABORIGINAL_SYLLABICS");
845 SAL_INFO(
"svtools",
"BRAILLE_PATTERNS");
847 SAL_INFO(
"svtools",
"YI_SYLLABLES");
857 SAL_INFO(
"svtools",
"BYZANTINE_MUSICAL_SYMBOLS");
859 SAL_INFO(
"svtools",
"MATHEMATICAL_ALPHANUMERIC_SYMBOLS");
861 SAL_INFO(
"svtools",
"PRIVATE_USE_PLANE_15");
863 SAL_INFO(
"svtools",
"VARIATION_SELECTORS");
879 SAL_INFO(
"svtools",
"YIJING_HEXAGRAM_SYMBOLS");
881 SAL_INFO(
"svtools",
"SYLOTI_NAGRI");
883 SAL_INFO(
"svtools",
"LINEAR_B_SYLLABARY");
885 SAL_INFO(
"svtools",
"ANCIENT_GREEK_NUMBERS");
895 SAL_INFO(
"svtools",
"CYPRIOT_SYLLABARY");
899 SAL_INFO(
"svtools",
"TAI_XUAN_JING_SYMBOLS");
903 SAL_INFO(
"svtools",
"COUNTING_ROD_NUMERALS");
919 SAL_INFO(
"svtools",
"ANCIENT_SYMBOLS");
921 SAL_INFO(
"svtools",
"PHAISTOS_DISC");
925 SAL_INFO(
"svtools",
"DOMINO_TILES");
940 void lcl_dump_codepage_coverage(
const std::optional<std::bitset<vcl::CodePageCoverage::MAX_CP_ENUM>> &roIn)
1020 std::bitset<vcl::UnicodeCoverage::MAX_UC_ENUM> getMaskByScriptType(sal_Int16 nScriptType)
1022 std::bitset<vcl::UnicodeCoverage::MAX_UC_ENUM> aMask;
1030 aMask.set(i,
false);
1037 std::bitset<vcl::UnicodeCoverage::MAX_UC_ENUM>
const & getLatinMask()
1039 static std::bitset<vcl::UnicodeCoverage::MAX_UC_ENUM> s_Mask(getMaskByScriptType(css::i18n::ScriptType::LATIN));
1044 std::bitset<vcl::UnicodeCoverage::MAX_UC_ENUM>
const & getCJKMask()
1046 static std::bitset<vcl::UnicodeCoverage::MAX_UC_ENUM> s_Mask(getMaskByScriptType(css::i18n::ScriptType::ASIAN));
1051 std::bitset<vcl::UnicodeCoverage::MAX_UC_ENUM>
const & getCTLMask()
1053 static std::bitset<vcl::UnicodeCoverage::MAX_UC_ENUM> s_Mask(getMaskByScriptType(css::i18n::ScriptType::COMPLEX));
1058 std::bitset<vcl::UnicodeCoverage::MAX_UC_ENUM>
const & getWeakMask()
1060 static std::bitset<vcl::UnicodeCoverage::MAX_UC_ENUM> s_Mask(getMaskByScriptType(css::i18n::ScriptType::WEAK));
1065 std::bitset<vcl::UnicodeCoverage::MAX_UC_ENUM> getCommonLatnSubsetMask()
1067 std::bitset<vcl::UnicodeCoverage::MAX_UC_ENUM> aMask;
1078 size_t find_first(std::bitset<N>
const& rSet)
1080 for (
size_t i = 0;
i <
N; ++
i)
1093 std::bitset<vcl::UnicodeCoverage::MAX_UC_ENUM> aMasked;
1099 if (aMasked.count() == 1)
1108 if (aMasked.count() == 1)
1109 return USCRIPT_ARABIC;
1111 return USCRIPT_SYRIAC;
1118 if (aMasked.count() == 1)
1130 if (aMasked.count() == 1)
1137 return USCRIPT_GEORGIAN;
1140 aMasked &= getCJKMask();
1150 std::bitset<vcl::CodePageCoverage::MAX_CP_ENUM> aCJKCodePageMask;
1156 std::bitset<vcl::CodePageCoverage::MAX_CP_ENUM> aMaskedCodePage =
1165 if (aMaskedCodePage.count() == 1)
1168 return USCRIPT_JAPANESE;
1170 return USCRIPT_KOREAN;
1172 return USCRIPT_SIMPLIFIED_HAN;
1174 return USCRIPT_TRADITIONAL_HAN;
1177 if (aMaskedCodePage.count())
1181 return USCRIPT_COMMON;
1187 { USCRIPT_KOREAN, {
" KR",
"Korean"} },
1188 { USCRIPT_JAPANESE, {
" JP",
"Japanese"} } ,
1189 { USCRIPT_SIMPLIFIED_HAN, {
" SC",
" GB",
"S Chinese"} },
1190 { USCRIPT_TRADITIONAL_HAN, {
" TC",
" HC",
" TW",
" HK",
" MO",
"T Chinese"} }
1194 UScriptCode attemptToDisambiguateHan(UScriptCode eScript,
OutputDevice const &rDevice)
1197 if (eScript == USCRIPT_HAN)
1201 bool bKore =
false, bJpan =
false, bHant =
false, bHans =
false;
1203 static constexpr OUStringLiteral sKorean =
u"\u4E6D\u4E76\u596C";
1204 if (-1 == rDevice.
HasGlyphs(rFont, sKorean))
1207 static constexpr OUStringLiteral sJapanese =
u"\u5968\u67A0\u9D8F";
1208 if (-1 == rDevice.
HasGlyphs(rFont, sJapanese))
1211 static constexpr OUStringLiteral sTraditionalChinese =
u"\u555F\u96DE";
1212 if (-1 == rDevice.
HasGlyphs(rFont, sTraditionalChinese))
1215 static constexpr OUStringLiteral sSimplifiedChinese =
u"\u4E61\u542F\u5956";
1216 if (-1 == rDevice.
HasGlyphs(rFont, sSimplifiedChinese))
1219 if (bKore && !bJpan && !bHans && !bHant) {
1220 eScript = USCRIPT_KOREAN;
1223 else if (bJpan && !bKore && !bHans && !bHant) {
1224 eScript = USCRIPT_JAPANESE;
1227 else if (bHans && !bHant && !bKore && !bJpan) {
1228 eScript = USCRIPT_SIMPLIFIED_HAN;
1231 else if (bHant && !bHans && !bKore && !bJpan) {
1232 eScript = USCRIPT_TRADITIONAL_HAN;
1238 std::map<UScriptCode, std::vector<OUString>>::const_iterator distCjkMapIt;
1240 std::vector<OUString> cjkCodeList = distCjkMapIt->second;
1241 std::vector<OUString>::const_iterator cjkPtr;
1242 for (cjkPtr = cjkCodeList.begin(); cjkPtr != cjkCodeList.end(); ++cjkPtr) {
1243 if (rName.indexOf(*cjkPtr) > 0) {
1244 return distCjkMapIt->first;
1257 if (eScript == USCRIPT_INVALID_CODE)
1263#if OSL_DEBUG_LEVEL > 0
1269 *aFontCapabilities.
oUnicodeRange &= getCommonLatnSubsetMask();
1274 eScript = getScript(aFontCapabilities);
1275 if (eScript == USCRIPT_COMMON)
1278 eScript = attemptToDisambiguateHan(eScript, rDevice);
1282 bool bHasSampleTextGlyphs = (-1 == rDevice.
HasGlyphs(rDevice.
GetFont(), sSampleText));
1283 return bHasSampleTextGlyphs ? sSampleText : OUString();
1288 UScriptCode eRet = USCRIPT_COMMON;
1289 switch (eOTCoverage)
1295 eRet = USCRIPT_LATIN;
1298 eRet = USCRIPT_INHERITED;
1301 eRet = USCRIPT_GREEK;
1304 eRet = USCRIPT_COPTIC;
1307 eRet = USCRIPT_CYRILLIC;
1310 eRet = USCRIPT_ARMENIAN;
1313 eRet = USCRIPT_HEBREW;
1319 eRet = USCRIPT_ARABIC;
1325 eRet = USCRIPT_DEVANAGARI;
1328 eRet = USCRIPT_BENGALI;
1331 eRet = USCRIPT_GURMUKHI;
1334 eRet = USCRIPT_GUJARATI;
1337 eRet = USCRIPT_ORIYA;
1340 eRet = USCRIPT_TAMIL;
1343 eRet = USCRIPT_TELUGU;
1346 eRet = USCRIPT_KANNADA;
1349 eRet = USCRIPT_MALAYALAM;
1352 eRet = USCRIPT_THAI;
1358 eRet = USCRIPT_GEORGIAN;
1361 eRet = USCRIPT_BALINESE;
1364 eRet = USCRIPT_HANGUL;
1367 eRet = USCRIPT_LATIN;
1370 eRet = USCRIPT_GREEK;
1373 eRet = USCRIPT_SYMBOLS;
1376 eRet = USCRIPT_INHERITED;
1381 eRet = USCRIPT_SYMBOLS;
1384 eRet = USCRIPT_MATHEMATICAL_NOTATION;
1394 eRet = USCRIPT_SYMBOLS;
1397 eRet = USCRIPT_HIRAGANA;
1400 eRet = USCRIPT_KATAKANA;
1403 eRet = USCRIPT_BOPOMOFO;
1406 eRet = USCRIPT_HANGUL;
1409 eRet = USCRIPT_PHAGS_PA;
1412 eRet = USCRIPT_HANGUL;
1418 eRet = USCRIPT_HANGUL;
1421 eRet = USCRIPT_PHOENICIAN;
1428 eRet = USCRIPT_ARABIC;
1431 eRet = USCRIPT_INHERITED;
1434 eRet = USCRIPT_ARABIC;
1437 eRet = USCRIPT_TIBETAN;
1440 eRet = USCRIPT_SYRIAC;
1443 eRet = USCRIPT_THAANA;
1446 eRet = USCRIPT_SINHALA;
1449 eRet = USCRIPT_MYANMAR;
1452 eRet = USCRIPT_ETHIOPIC;
1455 eRet = USCRIPT_CHEROKEE;
1458 eRet = USCRIPT_CANADIAN_ABORIGINAL;
1461 eRet = USCRIPT_OGHAM;
1464 eRet = USCRIPT_RUNIC;
1467 eRet = USCRIPT_KHMER;
1470 eRet = USCRIPT_MONGOLIAN;
1473 eRet = USCRIPT_BRAILLE;
1479 eRet = USCRIPT_TAGALOG;
1482 eRet = USCRIPT_OLD_ITALIC;
1485 eRet = USCRIPT_GOTHIC;
1488 eRet = USCRIPT_DESERET;
1493 eRet = USCRIPT_SYMBOLS;
1496 eRet = USCRIPT_INHERITED;
1499 eRet = USCRIPT_SYMBOLS;
1502 eRet = USCRIPT_LIMBU;
1505 eRet = USCRIPT_TAI_LE;
1508 eRet = USCRIPT_NEW_TAI_LUE;
1511 eRet = USCRIPT_BUGINESE;
1514 eRet = USCRIPT_GLAGOLITIC;
1517 eRet = USCRIPT_TIFINAGH;
1520 eRet = USCRIPT_SYMBOLS;
1523 eRet = USCRIPT_SYLOTI_NAGRI;
1526 eRet = USCRIPT_LINEAR_B;
1529 eRet = USCRIPT_GREEK;
1532 eRet = USCRIPT_UGARITIC;
1535 eRet = USCRIPT_OLD_PERSIAN;
1538 eRet = USCRIPT_SHAVIAN;
1541 eRet = USCRIPT_OSMANYA;
1544 eRet = USCRIPT_CYPRIOT;
1547 eRet = USCRIPT_KHAROSHTHI;
1550 eRet = USCRIPT_CUNEIFORM;
1553 eRet = USCRIPT_SUNDANESE;
1556 eRet = USCRIPT_LEPCHA;
1559 eRet = USCRIPT_OL_CHIKI;
1562 eRet = USCRIPT_SAURASHTRA;
1565 eRet = USCRIPT_KAYAH_LI;
1568 eRet = USCRIPT_REJANG;
1571 eRet = USCRIPT_CHAM;
1574 eRet = USCRIPT_CARIAN;
1581 eRet = USCRIPT_SYMBOLS;
1612 if (sRet.isEmpty() || (-1 != aDevice->HasGlyphs(rFont, sRet)))
1614 aDevice->SetFont(rFont);
1616 if (aDevice->GetFontCapabilities(aFontCapabilities))
1618#if OSL_DEBUG_LEVEL > 0
1626 if (nScriptType != css::i18n::ScriptType::ASIAN)
1631 if (nScriptType != css::i18n::ScriptType::LATIN)
1633 if (nScriptType != css::i18n::ScriptType::COMPLEX)
1637#if OSL_DEBUG_LEVEL > 0
1643 UScriptCode eScript = getScript(aFontCapabilities);
1645 if (nScriptType == css::i18n::ScriptType::ASIAN)
1646 eScript = attemptToDisambiguateHan(eScript, *aDevice);
1653 if (nScriptType == css::i18n::ScriptType::COMPLEX)
1656 if (-1 != aDevice->HasGlyphs(rFont, sRet))
1659 if (-1 != aDevice->HasGlyphs(rFont, sRet))
1663 else if (nScriptType == css::i18n::ScriptType::LATIN)
const vcl::Font & GetFont() const
bool GetFontCharMap(FontCharMapRef &rxFontCharMap) const
bool GetFontCapabilities(vcl::FontCapabilities &rFontCapabilities) const
sal_Int32 HasGlyphs(const vcl::Font &rFont, std::u16string_view rStr, sal_Int32 nIndex=0, sal_Int32 nLen=-1) const
static sal_Int16 getScriptClassFromUScriptCode(UScriptCode eScript)
const OUString & GetFamilyName() const
LanguageType GetLanguage() const
rtl_TextEncoding GetCharSet() const
UNOTOOLS_DLLPUBLIC bool IsOpenSymbol(std::u16string_view rFontName)
#define LANGUAGE_ARMENIAN
#define LANGUAGE_MONGOLIAN_MONGOLIAN_CHINA
#define LANGUAGE_MONGOLIAN_MONGOLIAN_MONGOLIA
#define LANGUAGE_GAELIC_IRELAND
#define LANGUAGE_JAPANESE
#define LANGUAGE_SINHALESE_SRI_LANKA
#define LANGUAGE_ASSAMESE
#define LANGUAGE_ARABIC_SAUDI_ARABIA
#define LANGUAGE_CHEROKEE_UNITED_STATES
#define LANGUAGE_MALAYALAM
constexpr LanguageType primary(LanguageType lt)
#define LANGUAGE_GEORGIAN
#define LANGUAGE_AMHARIC_ETHIOPIA
#define LANGUAGE_GUJARATI
#define LANGUAGE_MONGOLIAN_MONGOLIAN_LSO
#define SAL_INFO(area, stream)
#define SAL_N_ELEMENTS(arr)
ARABIC_PRESENTATION_FORMS_A
LATIN_EXTENDED_ADDITIONAL
SUPERSCRIPTS_AND_SUBSCRIPTS
ARABIC_PRESENTATION_FORMS_B
ALPHABETIC_PRESENTATION_FORMS
BYZANTINE_MUSICAL_SYMBOLS
MATHEMATICAL_ALPHANUMERIC_SYMBOLS
COMBINING_DIACRITICAL_MARKS
OPTICAL_CHARACTER_RECOGNITION
ENCLOSED_CJK_LETTERS_AND_MONTHS
COMBINING_DIACRITICAL_MARKS_FOR_SYMBOLS
HALFWIDTH_AND_FULLWIDTH_FORMS
HANGUL_COMPATIBILITY_JAMO
CJK_SYMBOLS_AND_PUNCTUATION
UNIFIED_CANADIAN_ABORIGINAL_SYLLABICS
OUString makeShortRepresentativeTextForSelectedFont(OutputDevice const &rDevice)
static UScriptCode lcl_getHardCodedScriptNameForFont(const OutputDevice &rDevice)
bool canRenderNameOfSelectedFont(OutputDevice const &rDevice)
OUString makeShortMinimalTextForScript(UScriptCode eScript)
static OUString makeMinimalTextForScript(UScriptCode eScript)
static OUString makeRepresentativeTextForScript(UScriptCode eScript)
bool isSymbolFont(const vcl::Font &rFont)
static OUString makeRepresentativeTextForLanguage(LanguageType eLang)
OUString makeShortRepresentativeTextForScript(UScriptCode eScript)
UScriptCode otCoverageToScript(vcl::UnicodeCoverage::UnicodeCoverageEnum eOTCoverage)
const std::map< UScriptCode, std::vector< OUString > > distCjkMap
OUString makeRepresentativeTextForFont(sal_Int16 nScriptType, const vcl::Font &rFont)
OUString makeShortRepresentativeSymbolTextForSelectedFont(OutputDevice const &rDevice)
bool anyOf(strong_int v) const
std::optional< std::bitset< CodePageCoverage::MAX_CP_ENUM > > oCodePageRange
std::optional< std::bitset< UnicodeCoverage::MAX_UC_ENUM > > oUnicodeRange