// This should only be used when a commonly used font incorrectly declares its // coverage. If you add a font here, please leave a note explaining the issue // that caused it to be added static UScriptCode lcl_getHardCodedScriptNameForFont (const OutputDevice &rDevice)
{ const OUString &rName = rDevice.GetFont().GetFamilyName();
if (rName == "GB18030 Bitmap")
{ // As of OSX 10.9, the system font "GB18030 Bitmap" incorrectly declares // that it only covers "Phoenician" when in fact it's a Chinese font. return USCRIPT_HAN;
} elseif (rName == "BiauKai")
{ // "BiauKai" makes crazy claims to cover BUGINESE, SUNDANESE, etc // but in fact it's a Traditional Chinese font. return USCRIPT_TRADITIONAL_HAN;
} elseif (rName == "GungSeo" || rName == "PCMyungjo" || rName == "PilGi")
{ // These have no OS/2 tables, but we know they are Korean fonts. return USCRIPT_KOREAN;
} elseif (rName == "Hei" || rName == "Kai")
{ // These have no OS/2 tables, but we know they are Chinese fonts. return USCRIPT_HAN;
} elseif (rName.startsWith("Bangla "))
{ // "Bangla Sangam MN" claims it supports MALAYALAM, but it doesn't // "Bangla MN" claims just DEVANAGARI and not an additional BENGALI return USCRIPT_BENGALI;
} elseif (rName.startsWith("Gurmukhi "))
{ // "Gurmukhi MN" claims it supports TAMIL, but it doesn't return USCRIPT_GURMUKHI;
} elseif (rName.startsWith("Kannada "))
{ // "Kannada MN" claims it supports TAMIL, but it doesn't return USCRIPT_KANNADA;
} elseif (rName.startsWith("Lao "))
{ // "Lao Sangam MN" claims it supports TAMIL, but it doesn't return USCRIPT_LAO;
} elseif (rName.startsWith("Malayalam "))
{ // "Malayalam MN" claims it supports TAMIL, but it doesn't return USCRIPT_MALAYALAM;
} elseif (rName.startsWith("Sinhala "))
{ // "Sinhala MN" claims it supports CYRILLIC return USCRIPT_SINHALA;
} elseif (rName.startsWith("Telugu "))
{ // "Telugu MN" claims it supports TAMIL, but it doesn't return USCRIPT_TELUGU;
} elseif (rName.startsWith("Myanmar "))
{ return USCRIPT_MYANMAR;
} elseif (rName == "InaiMathi")
{ // "InaiMathi" claims it supports GOTHIC and CJK_UNIFIED_IDEOGRAPHS as well as // TAMIL, but it doesn't return USCRIPT_TAMIL;
} elseif (rName == "Hannotate TC" || rName == "HanziPen TC" || rName == "Heiti TC" || rName == "Weibei TC")
{ // These fonts claim support for ARMENIAN and a bunch of other stuff they don't support return USCRIPT_TRADITIONAL_HAN;
} elseif (rName == "Hannotate SC" || rName == "HanziPen SC" || rName == "Heiti SC" || rName == "Weibei SC")
{ // These fonts claim support for ARMENIAN and a bunch of other stuff they don't support return USCRIPT_SIMPLIFIED_HAN;
} return USCRIPT_INVALID_CODE;
}
if (!bOpenSymbol)
{
FontCharMapRef xFontCharMap; bool bHasCharMap = rDevice.GetFontCharMap(xFontCharMap); if( bHasCharMap )
{ // use some sample characters available in the font
sal_Unicode aText[8];
// start just above the PUA used by most symbol fonts
sal_uInt32 cNewChar = 0xFF00;
//These ones are typically for use in the font preview window in format //character
//There we generally know the language. Though it's possible for the language to //be "none".
//Currently we fall back to makeShortRepresentativeTextForScript when we don't //have suitable strings static OUString makeRepresentativeTextForLanguage(LanguageType eLang)
{
OUString sRet;
LanguageType pri = primary(eLang); if( pri == primary(LANGUAGE_ARMENIAN) )
sRet = makeRepresentativeTextForScript(USCRIPT_ARMENIAN); elseif( pri == primary(LANGUAGE_CHINESE) )
sRet = makeRepresentativeTextForScript(USCRIPT_HAN); elseif( pri == primary(LANGUAGE_GREEK) )
sRet = makeRepresentativeTextForScript(USCRIPT_GREEK); elseif( pri.anyOf(
primary(LANGUAGE_HEBREW),
primary(LANGUAGE_YIDDISH)) )
sRet = makeRepresentativeTextForScript(USCRIPT_HEBREW); elseif( pri == primary(LANGUAGE_ARABIC_SAUDI_ARABIA) )
sRet = makeRepresentativeTextForScript(USCRIPT_ARABIC); elseif( pri == primary(LANGUAGE_HINDI) )
sRet = makeRepresentativeTextForScript(USCRIPT_DEVANAGARI); elseif( pri == primary(LANGUAGE_ASSAMESE) )
{ static constexpr OUStringLiteral aAs =
u"\u0985\u09B8\u09AE\u09C0\u09AF\u09BC\u09BE" " \u0986\u0996\u09F0";
sRet = aAs;
} elseif( pri == primary(LANGUAGE_BENGALI) )
sRet = makeRepresentativeTextForScript(USCRIPT_BENGALI); elseif( pri == primary(LANGUAGE_PUNJABI) )
sRet = makeRepresentativeTextForScript(USCRIPT_GURMUKHI); elseif( pri == primary(LANGUAGE_GUJARATI) )
sRet = makeRepresentativeTextForScript(USCRIPT_GUJARATI); elseif( pri == primary(LANGUAGE_ODIA) )
sRet = makeRepresentativeTextForScript(USCRIPT_ORIYA); elseif( pri == primary(LANGUAGE_TAMIL) )
sRet = makeRepresentativeTextForScript(USCRIPT_TAMIL); elseif( pri == primary(LANGUAGE_TELUGU) )
sRet = makeRepresentativeTextForScript(USCRIPT_TELUGU); elseif( pri == primary(LANGUAGE_KANNADA) )
sRet = makeRepresentativeTextForScript(USCRIPT_KANNADA); elseif( pri == primary(LANGUAGE_MALAYALAM) )
sRet = makeRepresentativeTextForScript(USCRIPT_MALAYALAM); elseif( pri == primary(LANGUAGE_THAI) )
sRet = makeRepresentativeTextForScript(USCRIPT_THAI); elseif( pri == primary(LANGUAGE_LAO) )
sRet = makeRepresentativeTextForScript(USCRIPT_LAO); elseif( pri == primary(LANGUAGE_GEORGIAN) )
sRet = makeRepresentativeTextForScript(USCRIPT_GEORGIAN); elseif( pri == primary(LANGUAGE_KOREAN) )
sRet = makeRepresentativeTextForScript(USCRIPT_KOREAN); elseif( pri == primary(LANGUAGE_TIBETAN) )
sRet = makeRepresentativeTextForScript(USCRIPT_TIBETAN); elseif( pri == primary(LANGUAGE_SYRIAC) )
sRet = makeRepresentativeTextForScript(USCRIPT_SYRIAC); elseif( pri == primary(LANGUAGE_SINHALESE_SRI_LANKA) )
sRet = makeRepresentativeTextForScript(USCRIPT_SINHALA); elseif( pri == primary(LANGUAGE_BURMESE) )
sRet = makeRepresentativeTextForScript(USCRIPT_MYANMAR); elseif( pri == primary(LANGUAGE_AMHARIC_ETHIOPIA) )
sRet = makeRepresentativeTextForScript(USCRIPT_ETHIOPIC); elseif( pri == primary(LANGUAGE_CHEROKEE_UNITED_STATES) )
sRet = makeRepresentativeTextForScript(USCRIPT_CHEROKEE); elseif( pri == primary(LANGUAGE_KHMER) )
sRet = makeRepresentativeTextForScript(USCRIPT_KHMER); elseif( pri == primary(LANGUAGE_MONGOLIAN_MONGOLIAN_LSO) )
{ if (eLang.anyOf(
LANGUAGE_MONGOLIAN_MONGOLIAN_MONGOLIA,
LANGUAGE_MONGOLIAN_MONGOLIAN_CHINA,
LANGUAGE_MONGOLIAN_MONGOLIAN_LSO))
sRet = makeRepresentativeTextForScript(USCRIPT_MONGOLIAN);
} elseif( pri == primary(LANGUAGE_JAPANESE) )
sRet = makeRepresentativeTextForScript(USCRIPT_JAPANESE); elseif( pri == primary(LANGUAGE_YI) )
sRet = makeRepresentativeTextForScript(USCRIPT_YI); elseif( pri == primary(LANGUAGE_GAELIC_IRELAND) )
{ static constexpr OUStringLiteral aGa =
u"T\u00E9acs Samplach";
sRet = aGa;
}
return sRet;
}
namespace
{ #if OSL_DEBUG_LEVEL > 0 void lcl_dump_unicode_coverage(const std::optional<std::bitset<vcl::UnicodeCoverage::MAX_UC_ENUM>> &roIn)
{ if (!roIn)
{
SAL_INFO("svtools", "<NOTHING>"); return;
} auto & rIn(*roIn); if (rIn.none())
{
SAL_INFO("svtools", "<NONE>"); return;
} if (rIn[vcl::UnicodeCoverage::BASIC_LATIN])
SAL_INFO("svtools", "BASIC_LATIN"); if (rIn[vcl::UnicodeCoverage::LATIN_1_SUPPLEMENT])
SAL_INFO("svtools", "LATIN_1_SUPPLEMENT"); if (rIn[vcl::UnicodeCoverage::LATIN_EXTENDED_A])
SAL_INFO("svtools", "LATIN_EXTENDED_A"); if (rIn[vcl::UnicodeCoverage::LATIN_EXTENDED_B])
SAL_INFO("svtools", "LATIN_EXTENDED_B"); if (rIn[vcl::UnicodeCoverage::IPA_EXTENSIONS])
SAL_INFO("svtools", "IPA_EXTENSIONS"); if (rIn[vcl::UnicodeCoverage::SPACING_MODIFIER_LETTERS])
SAL_INFO("svtools", "SPACING_MODIFIER_LETTERS"); if (rIn[vcl::UnicodeCoverage::COMBINING_DIACRITICAL_MARKS])
SAL_INFO("svtools", "COMBINING_DIACRITICAL_MARKS"); if (rIn[vcl::UnicodeCoverage::GREEK_AND_COPTIC])
SAL_INFO("svtools", "GREEK_AND_COPTIC"); if (rIn[vcl::UnicodeCoverage::COPTIC])
SAL_INFO("svtools", "COPTIC"); if (rIn[vcl::UnicodeCoverage::CYRILLIC])
SAL_INFO("svtools", "CYRILLIC"); if (rIn[vcl::UnicodeCoverage::ARMENIAN])
SAL_INFO("svtools", "ARMENIAN"); if (rIn[vcl::UnicodeCoverage::HEBREW])
SAL_INFO("svtools", "HEBREW"); if (rIn[vcl::UnicodeCoverage::VAI])
SAL_INFO("svtools", "VAI"); if (rIn[vcl::UnicodeCoverage::ARABIC])
SAL_INFO("svtools", "ARABIC"); if (rIn[vcl::UnicodeCoverage::NKO])
SAL_INFO("svtools", "NKO"); if (rIn[vcl::UnicodeCoverage::DEVANAGARI])
SAL_INFO("svtools", "DEVANAGARI"); if (rIn[vcl::UnicodeCoverage::BENGALI])
SAL_INFO("svtools", "BENGALI"); if (rIn[vcl::UnicodeCoverage::GURMUKHI])
SAL_INFO("svtools", "GURMUKHI"); if (rIn[vcl::UnicodeCoverage::GUJARATI])
SAL_INFO("svtools", "GUJARATI"); if (rIn[vcl::UnicodeCoverage::ODIA])
SAL_INFO("svtools", "ODIA"); if (rIn[vcl::UnicodeCoverage::TAMIL])
SAL_INFO("svtools", "TAMIL"); if (rIn[vcl::UnicodeCoverage::TELUGU])
SAL_INFO("svtools", "TELUGU"); if (rIn[vcl::UnicodeCoverage::KANNADA])
SAL_INFO("svtools", "KANNADA"); if (rIn[vcl::UnicodeCoverage::MALAYALAM])
SAL_INFO("svtools", "MALAYALAM"); if (rIn[vcl::UnicodeCoverage::THAI])
SAL_INFO("svtools", "THAI"); if (rIn[vcl::UnicodeCoverage::LAO])
SAL_INFO("svtools", "LAO"); if (rIn[vcl::UnicodeCoverage::GEORGIAN])
SAL_INFO("svtools", "GEORGIAN"); if (rIn[vcl::UnicodeCoverage::BALINESE])
SAL_INFO("svtools", "BALINESE"); if (rIn[vcl::UnicodeCoverage::HANGUL_JAMO])
SAL_INFO("svtools", "HANGUL_JAMO"); if (rIn[vcl::UnicodeCoverage::LATIN_EXTENDED_ADDITIONAL])
SAL_INFO("svtools", "LATIN_EXTENDED_ADDITIONAL"); if (rIn[vcl::UnicodeCoverage::GREEK_EXTENDED])
SAL_INFO("svtools", "GREEK_EXTENDED"); if (rIn[vcl::UnicodeCoverage::GENERAL_PUNCTUATION])
SAL_INFO("svtools", "GENERAL_PUNCTUATION"); if (rIn[vcl::UnicodeCoverage::SUPERSCRIPTS_AND_SUBSCRIPTS])
SAL_INFO("svtools", "SUPERSCRIPTS_AND_SUBSCRIPTS"); if (rIn[vcl::UnicodeCoverage::CURRENCY_SYMBOLS])
SAL_INFO("svtools", "CURRENCY_SYMBOLS"); if (rIn[vcl::UnicodeCoverage::COMBINING_DIACRITICAL_MARKS_FOR_SYMBOLS])
SAL_INFO("svtools", "COMBINING_DIACRITICAL_MARKS_FOR_SYMBOLS"); if (rIn[vcl::UnicodeCoverage::LETTERLIKE_SYMBOLS])
SAL_INFO("svtools", "LETTERLIKE_SYMBOLS"); if (rIn[vcl::UnicodeCoverage::NUMBER_FORMS])
SAL_INFO("svtools", "NUMBER_FORMS"); if (rIn[vcl::UnicodeCoverage::ARROWS])
SAL_INFO("svtools", "ARROWS"); if (rIn[vcl::UnicodeCoverage::MATHEMATICAL_OPERATORS])
SAL_INFO("svtools", "MATHEMATICAL_OPERATORS"); if (rIn[vcl::UnicodeCoverage::MISCELLANEOUS_TECHNICAL])
SAL_INFO("svtools", "MISCELLANEOUS_TECHNICAL"); if (rIn[vcl::UnicodeCoverage::CONTROL_PICTURES])
SAL_INFO("svtools", "CONTROL_PICTURES"); if (rIn[vcl::UnicodeCoverage::OPTICAL_CHARACTER_RECOGNITION])
SAL_INFO("svtools", "OPTICAL_CHARACTER_RECOGNITION"); if (rIn[vcl::UnicodeCoverage::ENCLOSED_ALPHANUMERICS])
SAL_INFO("svtools", "ENCLOSED_ALPHANUMERICS"); if (rIn[vcl::UnicodeCoverage::BOX_DRAWING])
SAL_INFO("svtools", "BOX_DRAWING"); if (rIn[vcl::UnicodeCoverage::BLOCK_ELEMENTS])
SAL_INFO("svtools", "BLOCK_ELEMENTS"); if (rIn[vcl::UnicodeCoverage::GEOMETRIC_SHAPES])
SAL_INFO("svtools", "GEOMETRIC_SHAPES"); if (rIn[vcl::UnicodeCoverage::MISCELLANEOUS_SYMBOLS])
SAL_INFO("svtools", "MISCELLANEOUS_SYMBOLS"); if (rIn[vcl::UnicodeCoverage::DINGBATS])
SAL_INFO("svtools", "DINGBATS"); if (rIn[vcl::UnicodeCoverage::CJK_SYMBOLS_AND_PUNCTUATION])
SAL_INFO("svtools", "CJK_SYMBOLS_AND_PUNCTUATION"); if (rIn[vcl::UnicodeCoverage::HIRAGANA])
SAL_INFO("svtools", "HIRAGANA"); if (rIn[vcl::UnicodeCoverage::KATAKANA])
SAL_INFO("svtools", "KATAKANA"); if (rIn[vcl::UnicodeCoverage::BOPOMOFO])
SAL_INFO("svtools", "BOPOMOFO"); if (rIn[vcl::UnicodeCoverage::HANGUL_COMPATIBILITY_JAMO])
SAL_INFO("svtools", "HANGUL_COMPATIBILITY_JAMO"); if (rIn[vcl::UnicodeCoverage::PHAGS_PA])
SAL_INFO("svtools", "PHAGS_PA"); if (rIn[vcl::UnicodeCoverage::ENCLOSED_CJK_LETTERS_AND_MONTHS])
SAL_INFO("svtools", "ENCLOSED_CJK_LETTERS_AND_MONTHS"); if (rIn[vcl::UnicodeCoverage::CJK_COMPATIBILITY])
SAL_INFO("svtools", "CJK_COMPATIBILITY"); if (rIn[vcl::UnicodeCoverage::HANGUL_SYLLABLES])
SAL_INFO("svtools", "HANGUL_SYLLABLES"); if (rIn[vcl::UnicodeCoverage::NONPLANE_0])
SAL_INFO("svtools", "NONPLANE_0"); if (rIn[vcl::UnicodeCoverage::PHOENICIAN])
SAL_INFO("svtools", "PHOENICIAN"); if (rIn[vcl::UnicodeCoverage::CJK_UNIFIED_IDEOGRAPHS])
SAL_INFO("svtools", "CJK_UNIFIED_IDEOGRAPHS"); if (rIn[vcl::UnicodeCoverage::PRIVATE_USE_AREA_PLANE_0])
SAL_INFO("svtools", "PRIVATE_USE_AREA_PLANE_0"); if (rIn[vcl::UnicodeCoverage::CJK_STROKES])
SAL_INFO("svtools", "CJK_STROKES"); if (rIn[vcl::UnicodeCoverage::ALPHABETIC_PRESENTATION_FORMS])
SAL_INFO("svtools", "ALPHABETIC_PRESENTATION_FORMS"); if (rIn[vcl::UnicodeCoverage::ARABIC_PRESENTATION_FORMS_A])
SAL_INFO("svtools", "ARABIC_PRESENTATION_FORMS_A"); if (rIn[vcl::UnicodeCoverage::COMBINING_HALF_MARKS])
SAL_INFO("svtools", "COMBINING_HALF_MARKS"); if (rIn[vcl::UnicodeCoverage::VERTICAL_FORMS])
SAL_INFO("svtools", "VERTICAL_FORMS"); if (rIn[vcl::UnicodeCoverage::SMALL_FORM_VARIANTS])
SAL_INFO("svtools", "SMALL_FORM_VARIANTS"); if (rIn[vcl::UnicodeCoverage::ARABIC_PRESENTATION_FORMS_B])
SAL_INFO("svtools", "ARABIC_PRESENTATION_FORMS_B"); if (rIn[vcl::UnicodeCoverage::HALFWIDTH_AND_FULLWIDTH_FORMS])
SAL_INFO("svtools", "HALFWIDTH_AND_FULLWIDTH_FORMS"); if (rIn[vcl::UnicodeCoverage::SPECIALS])
SAL_INFO("svtools", "SPECIALS"); if (rIn[vcl::UnicodeCoverage::TIBETAN])
SAL_INFO("svtools", "TIBETAN"); if (rIn[vcl::UnicodeCoverage::SYRIAC])
SAL_INFO("svtools", "SYRIAC"); if (rIn[vcl::UnicodeCoverage::THAANA])
SAL_INFO("svtools", "THAANA"); if (rIn[vcl::UnicodeCoverage::SINHALA])
SAL_INFO("svtools", "SINHALA"); if (rIn[vcl::UnicodeCoverage::MYANMAR])
SAL_INFO("svtools", "MYANMAR"); if (rIn[vcl::UnicodeCoverage::ETHIOPIC])
SAL_INFO("svtools", "ETHIOPIC"); if (rIn[vcl::UnicodeCoverage::CHEROKEE])
SAL_INFO("svtools", "CHEROKEE"); if (rIn[vcl::UnicodeCoverage::UNIFIED_CANADIAN_ABORIGINAL_SYLLABICS])
SAL_INFO("svtools", "UNIFIED_CANADIAN_ABORIGINAL_SYLLABICS"); if (rIn[vcl::UnicodeCoverage::OGHAM])
SAL_INFO("svtools", "OGHAM"); if (rIn[vcl::UnicodeCoverage::RUNIC])
SAL_INFO("svtools", "RUNIC"); if (rIn[vcl::UnicodeCoverage::KHMER])
SAL_INFO("svtools", "KHMER"); if (rIn[vcl::UnicodeCoverage::MONGOLIAN])
SAL_INFO("svtools", "MONGOLIAN"); if (rIn[vcl::UnicodeCoverage::BRAILLE_PATTERNS])
SAL_INFO("svtools", "BRAILLE_PATTERNS"); if (rIn[vcl::UnicodeCoverage::YI_SYLLABLES])
SAL_INFO("svtools", "YI_SYLLABLES"); if (rIn[vcl::UnicodeCoverage::TAGALOG])
SAL_INFO("svtools", "TAGALOG"); if (rIn[vcl::UnicodeCoverage::OLD_ITALIC])
SAL_INFO("svtools", "OLD_ITALIC"); if (rIn[vcl::UnicodeCoverage::GOTHIC])
SAL_INFO("svtools", "GOTHIC"); if (rIn[vcl::UnicodeCoverage::DESERET])
SAL_INFO("svtools", "DESERET"); if (rIn[vcl::UnicodeCoverage::BYZANTINE_MUSICAL_SYMBOLS])
SAL_INFO("svtools", "BYZANTINE_MUSICAL_SYMBOLS"); if (rIn[vcl::UnicodeCoverage::MATHEMATICAL_ALPHANUMERIC_SYMBOLS])
SAL_INFO("svtools", "MATHEMATICAL_ALPHANUMERIC_SYMBOLS"); if (rIn[vcl::UnicodeCoverage::PRIVATE_USE_PLANE_15])
SAL_INFO("svtools", "PRIVATE_USE_PLANE_15"); if (rIn[vcl::UnicodeCoverage::VARIATION_SELECTORS])
SAL_INFO("svtools", "VARIATION_SELECTORS"); if (rIn[vcl::UnicodeCoverage::TAGS])
SAL_INFO("svtools", "TAGS"); if (rIn[vcl::UnicodeCoverage::LIMBU])
SAL_INFO("svtools", "LIMBU"); if (rIn[vcl::UnicodeCoverage::TAI_LE])
SAL_INFO("svtools", "TAI_LE"); if (rIn[vcl::UnicodeCoverage::NEW_TAI_LUE])
SAL_INFO("svtools", "NEW_TAI_LUE"); if (rIn[vcl::UnicodeCoverage::BUGINESE])
SAL_INFO("svtools", "BUGINESE"); if (rIn[vcl::UnicodeCoverage::GLAGOLITIC])
SAL_INFO("svtools", "GLAGOLITIC"); if (rIn[vcl::UnicodeCoverage::TIFINAGH])
SAL_INFO("svtools", "TIFINAGH"); if (rIn[vcl::UnicodeCoverage::YIJING_HEXAGRAM_SYMBOLS])
SAL_INFO("svtools", "YIJING_HEXAGRAM_SYMBOLS"); if (rIn[vcl::UnicodeCoverage::SYLOTI_NAGRI])
SAL_INFO("svtools", "SYLOTI_NAGRI"); if (rIn[vcl::UnicodeCoverage::LINEAR_B_SYLLABARY])
SAL_INFO("svtools", "LINEAR_B_SYLLABARY"); if (rIn[vcl::UnicodeCoverage::ANCIENT_GREEK_NUMBERS])
SAL_INFO("svtools", "ANCIENT_GREEK_NUMBERS"); if (rIn[vcl::UnicodeCoverage::UGARITIC])
SAL_INFO("svtools", "UGARITIC"); if (rIn[vcl::UnicodeCoverage::OLD_PERSIAN])
SAL_INFO("svtools", "OLD_PERSIAN"); if (rIn[vcl::UnicodeCoverage::SHAVIAN])
SAL_INFO("svtools", "SHAVIAN"); if (rIn[vcl::UnicodeCoverage::OSMANYA])
SAL_INFO("svtools", "OSMANYA"); if (rIn[vcl::UnicodeCoverage::CYPRIOT_SYLLABARY])
SAL_INFO("svtools", "CYPRIOT_SYLLABARY"); if (rIn[vcl::UnicodeCoverage::KHAROSHTHI])
SAL_INFO("svtools", "KHAROSHTHI"); if (rIn[vcl::UnicodeCoverage::TAI_XUAN_JING_SYMBOLS])
SAL_INFO("svtools", "TAI_XUAN_JING_SYMBOLS"); if (rIn[vcl::UnicodeCoverage::CUNEIFORM])
SAL_INFO("svtools", "CUNEIFORM"); if (rIn[vcl::UnicodeCoverage::COUNTING_ROD_NUMERALS])
SAL_INFO("svtools", "COUNTING_ROD_NUMERALS"); if (rIn[vcl::UnicodeCoverage::SUNDANESE])
SAL_INFO("svtools", "SUNDANESE"); if (rIn[vcl::UnicodeCoverage::LEPCHA])
SAL_INFO("svtools", "LEPCHA"); if (rIn[vcl::UnicodeCoverage::OL_CHIKI])
SAL_INFO("svtools", "OL_CHIKI"); if (rIn[vcl::UnicodeCoverage::SAURASHTRA])
SAL_INFO("svtools", "SAURASHTRA"); if (rIn[vcl::UnicodeCoverage::KAYAH_LI])
SAL_INFO("svtools", "KAYAH_LI"); if (rIn[vcl::UnicodeCoverage::REJANG])
SAL_INFO("svtools", "REJANG"); if (rIn[vcl::UnicodeCoverage::CHAM])
SAL_INFO("svtools", "CHAM"); if (rIn[vcl::UnicodeCoverage::ANCIENT_SYMBOLS])
SAL_INFO("svtools", "ANCIENT_SYMBOLS"); if (rIn[vcl::UnicodeCoverage::PHAISTOS_DISC])
SAL_INFO("svtools", "PHAISTOS_DISC"); if (rIn[vcl::UnicodeCoverage::CARIAN])
SAL_INFO("svtools", "CARIAN"); if (rIn[vcl::UnicodeCoverage::DOMINO_TILES])
SAL_INFO("svtools", "DOMINO_TILES"); if (rIn[vcl::UnicodeCoverage::RESERVED1])
SAL_INFO("svtools", "RESERVED1"); if (rIn[vcl::UnicodeCoverage::RESERVED2])
SAL_INFO("svtools", "RESERVED2"); if (rIn[vcl::UnicodeCoverage::RESERVED3])
SAL_INFO("svtools", "RESERVED3"); if (rIn[vcl::UnicodeCoverage::RESERVED4])
SAL_INFO("svtools", "RESERVED4"); if (!(rIn[vcl::UnicodeCoverage::RESERVED5])) return;
SAL_INFO("svtools", "RESERVED5");
}
void lcl_dump_codepage_coverage(const std::optional<std::bitset<vcl::CodePageCoverage::MAX_CP_ENUM>> &roIn)
{ if (!roIn)
{
SAL_INFO("svtools", "<NOTHING>"); return;
} auto & rIn(*roIn); if (rIn.none())
{
SAL_INFO("svtools", "<NONE>"); return;
} if (rIn[vcl::CodePageCoverage::CP1252])
SAL_INFO("svtools", "CP1252"); if (rIn[vcl::CodePageCoverage::CP1250])
SAL_INFO("svtools", "CP1250"); if (rIn[vcl::CodePageCoverage::CP1251])
SAL_INFO("svtools", "CP1251"); if (rIn[vcl::CodePageCoverage::CP1253])
SAL_INFO("svtools", "CP1253"); if (rIn[vcl::CodePageCoverage::CP1254])
SAL_INFO("svtools", "CP1254"); if (rIn[vcl::CodePageCoverage::CP1255])
SAL_INFO("svtools", "CP1255"); if (rIn[vcl::CodePageCoverage::CP1256])
SAL_INFO("svtools", "CP1256"); if (rIn[vcl::CodePageCoverage::CP1257])
SAL_INFO("svtools", "CP1257"); if (rIn[vcl::CodePageCoverage::CP1258])
SAL_INFO("svtools", "CP1258"); if (rIn[vcl::CodePageCoverage::CP874])
SAL_INFO("svtools", "CP874"); if (rIn[vcl::CodePageCoverage::CP932])
SAL_INFO("svtools", "CP932"); if (rIn[vcl::CodePageCoverage::CP936])
SAL_INFO("svtools", "CP936"); if (rIn[vcl::CodePageCoverage::CP949])
SAL_INFO("svtools", "CP949"); if (rIn[vcl::CodePageCoverage::CP950])
SAL_INFO("svtools", "CP950"); if (rIn[vcl::CodePageCoverage::CP1361])
SAL_INFO("svtools", "CP1361"); if (rIn[vcl::CodePageCoverage::CP869])
SAL_INFO("svtools", "CP869"); if (rIn[vcl::CodePageCoverage::CP866])
SAL_INFO("svtools", "CP866"); if (rIn[vcl::CodePageCoverage::CP865])
SAL_INFO("svtools", "CP865"); if (rIn[vcl::CodePageCoverage::CP864])
SAL_INFO("svtools", "CP864"); if (rIn[vcl::CodePageCoverage::CP863])
SAL_INFO("svtools", "CP863"); if (rIn[vcl::CodePageCoverage::CP862])
SAL_INFO("svtools", "CP862"); if (rIn[vcl::CodePageCoverage::CP861])
SAL_INFO("svtools", "CP861"); if (rIn[vcl::CodePageCoverage::CP860])
SAL_INFO("svtools", "CP860"); if (rIn[vcl::CodePageCoverage::CP857])
SAL_INFO("svtools", "CP857"); if (rIn[vcl::CodePageCoverage::CP855])
SAL_INFO("svtools", "CP855"); if (rIn[vcl::CodePageCoverage::CP852])
SAL_INFO("svtools", "CP852"); if (rIn[vcl::CodePageCoverage::CP775])
SAL_INFO("svtools", "CP775"); if (rIn[vcl::CodePageCoverage::CP737])
SAL_INFO("svtools", "CP737"); if (rIn[vcl::CodePageCoverage::CP780])
SAL_INFO("svtools", "CP780"); if (rIn[vcl::CodePageCoverage::CP850])
SAL_INFO("svtools", "CP850"); if (!(rIn[vcl::CodePageCoverage::CP437])) return;
for (size_t i = 0; i < vcl::UnicodeCoverage::MAX_UC_ENUM; ++i)
{ using vcl::UnicodeCoverage::UnicodeCoverageEnum;
UScriptCode eScriptCode = otCoverageToScript(static_cast<UnicodeCoverageEnum>(i)); if (unicode::getScriptClassFromUScriptCode(eScriptCode) == nScriptType)
aMask.set(i, false);
}
return aMask;
}
//false for all bits considered "Latin" by LibreOffice
std::bitset<vcl::UnicodeCoverage::MAX_UC_ENUM> const & getLatinMask()
{ static std::bitset<vcl::UnicodeCoverage::MAX_UC_ENUM> s_Mask(getMaskByScriptType(css::i18n::ScriptType::LATIN)); return s_Mask;
}
//false for all bits considered "Asian" by LibreOffice
std::bitset<vcl::UnicodeCoverage::MAX_UC_ENUM> const & getCJKMask()
{ static std::bitset<vcl::UnicodeCoverage::MAX_UC_ENUM> s_Mask(getMaskByScriptType(css::i18n::ScriptType::ASIAN)); return s_Mask;
}
//false for all bits considered "Complex" by LibreOffice
std::bitset<vcl::UnicodeCoverage::MAX_UC_ENUM> const & getCTLMask()
{ static std::bitset<vcl::UnicodeCoverage::MAX_UC_ENUM> s_Mask(getMaskByScriptType(css::i18n::ScriptType::COMPLEX)); return s_Mask;
}
//false for all bits considered "WEAK" by LibreOffice
std::bitset<vcl::UnicodeCoverage::MAX_UC_ENUM> const & getWeakMask()
{ static std::bitset<vcl::UnicodeCoverage::MAX_UC_ENUM> s_Mask(getMaskByScriptType(css::i18n::ScriptType::WEAK)); return s_Mask;
}
//Nearly every font supports some basic Latin
std::bitset<vcl::UnicodeCoverage::MAX_UC_ENUM> getCommonLatnSubsetMask()
{
std::bitset<vcl::UnicodeCoverage::MAX_UC_ENUM> aMask;
aMask.set();
aMask.set(vcl::UnicodeCoverage::BASIC_LATIN, false);
aMask.set(vcl::UnicodeCoverage::LATIN_1_SUPPLEMENT, false);
aMask.set(vcl::UnicodeCoverage::LATIN_EXTENDED_A, false);
aMask.set(vcl::UnicodeCoverage::LATIN_EXTENDED_B, false);
aMask.set(vcl::UnicodeCoverage::LATIN_EXTENDED_ADDITIONAL, false); return aMask;
}
template<size_t N>
size_t find_first(std::bitset<N> const& rSet)
{ for (size_t i = 0; i < N; ++i)
{ if (rSet.test(i)) return i;
}
assert(false); // see current usage return N;
}
UScriptCode getScript(const vcl::FontCapabilities &rFontCapabilities)
{ using vcl::UnicodeCoverage::UnicodeCoverageEnum;
if (aMasked.count() == 1) return otCoverageToScript(static_cast<UnicodeCoverageEnum>(find_first(aMasked)));
if (aMasked[vcl::UnicodeCoverage::ARABIC])
{
aMasked.set(vcl::UnicodeCoverage::ARABIC_PRESENTATION_FORMS_A, false);
aMasked.set(vcl::UnicodeCoverage::ARABIC_PRESENTATION_FORMS_B, false);
aMasked.set(vcl::UnicodeCoverage::NKO, false); //Probably strongly tuned for Arabic if (aMasked.count() == 1) return USCRIPT_ARABIC; if (aMasked.count() == 2 && aMasked[vcl::UnicodeCoverage::SYRIAC]) return USCRIPT_SYRIAC;
}
if (aMasked[vcl::UnicodeCoverage::DEVANAGARI])
{
aMasked.set(vcl::UnicodeCoverage::DEVANAGARI, false); //Probably strongly tuned for a single Indic script if (aMasked.count() == 1) return otCoverageToScript(static_cast<UnicodeCoverageEnum>(find_first(aMasked)));
}
aMasked.set(vcl::UnicodeCoverage::GREEK_EXTENDED, false);
aMasked.set(vcl::UnicodeCoverage::GREEK_AND_COPTIC, false); // tdf#88484 // Some fonts set the Arabic Presentation Forms-B bit because they // support U+FEFF (Zero Width Space) which happens to be in that block // but it isn’t an Arabic code point. By the time we reach here we // decided this isn’t an Arabic font, so it should be safe.
aMasked.set(vcl::UnicodeCoverage::ARABIC_PRESENTATION_FORMS_B, false); if (aMasked.count() == 1) return otCoverageToScript(static_cast<UnicodeCoverageEnum>(find_first(aMasked)));
if (aMasked[vcl::UnicodeCoverage::CYRILLIC])
{ //Probably strongly tuned for Georgian if (aMasked.count() == 2 && aMasked[vcl::UnicodeCoverage::GEORGIAN]) return USCRIPT_GEORGIAN;
}
//So, possibly a CJK font if (!aMasked.count() && rFontCapabilities.oCodePageRange)
{
std::bitset<vcl::CodePageCoverage::MAX_CP_ENUM> aCJKCodePageMask;
aCJKCodePageMask.set(vcl::CodePageCoverage::CP932);
aCJKCodePageMask.set(vcl::CodePageCoverage::CP936);
aCJKCodePageMask.set(vcl::CodePageCoverage::CP949);
aCJKCodePageMask.set(vcl::CodePageCoverage::CP950);
aCJKCodePageMask.set(vcl::CodePageCoverage::CP1361);
std::bitset<vcl::CodePageCoverage::MAX_CP_ENUM> aMaskedCodePage =
*rFontCapabilities.oCodePageRange & aCJKCodePageMask; //fold Korean if (aMaskedCodePage[vcl::CodePageCoverage::CP1361])
{
aMaskedCodePage.set(vcl::CodePageCoverage::CP949);
aMaskedCodePage.set(vcl::CodePageCoverage::CP1361, false);
}
if (aMaskedCodePage.count() == 1)
{ if (aMaskedCodePage[vcl::CodePageCoverage::CP932]) return USCRIPT_JAPANESE; if (aMaskedCodePage[vcl::CodePageCoverage::CP949]) return USCRIPT_KOREAN; if (aMaskedCodePage[vcl::CodePageCoverage::CP936]) return USCRIPT_SIMPLIFIED_HAN; if (aMaskedCodePage[vcl::CodePageCoverage::CP950]) return USCRIPT_TRADITIONAL_HAN;
}
if (aMaskedCodePage.count()) return USCRIPT_HAN;
}
return USCRIPT_COMMON;
}
}
const std::map<UScriptCode, std::vector<OUString>> distCjkMap =
{
{ USCRIPT_KOREAN, { u" KR"_ustr, u"Korean"_ustr} }, // Korean
{ USCRIPT_JAPANESE, {u" JP"_ustr, u"Japanese"_ustr} } , // Japanese
{ USCRIPT_SIMPLIFIED_HAN, {u" SC"_ustr, u" GB"_ustr, u"S Chinese"_ustr} }, // Simplified Chinese Family
{ USCRIPT_TRADITIONAL_HAN, {u" TC"_ustr, u" HC"_ustr, u" TW"_ustr, u" HK"_ustr, u" MO"_ustr, u"T Chinese"_ustr} }// Traditional Chinese Family
}; namespace
{
UScriptCode attemptToDisambiguateHan(UScriptCode eScript, OutputDevice const &rDevice)
{ //If we're a CJK font, see if we seem to be tuned for C, J or K if (eScript == USCRIPT_HAN)
{ const vcl::Font &rFont = rDevice.GetFont();
// for the last time, Check the ISO code strings or font specific strings const OUString &rName = rDevice.GetFont().GetFamilyName();
std::map<UScriptCode, std::vector<OUString>>::const_iterator distCjkMapIt; for (distCjkMapIt = distCjkMap.begin(); distCjkMapIt != distCjkMap.end(); ++distCjkMapIt) {
std::vector<OUString> cjkCodeList = distCjkMapIt->second;
std::vector<OUString>::const_iterator cjkPtr; for (cjkPtr = cjkCodeList.begin(); cjkPtr != cjkCodeList.end(); ++cjkPtr) { if (rName.indexOf(*cjkPtr) > 0) { return distCjkMapIt->first;
}
}
} //otherwise fall-through as USCRIPT_HAN and expect a combined Hant/Hans preview
} return eScript;
}
}
OUString makeShortRepresentativeTextForSelectedFont(OutputDevice const &rDevice)
{
UScriptCode eScript = lcl_getHardCodedScriptNameForFont(rDevice); if (eScript == USCRIPT_INVALID_CODE)
{
vcl::FontCapabilities aFontCapabilities; if (!rDevice.GetFontCapabilities(aFontCapabilities)) return OUString();
if (aFontCapabilities.oUnicodeRange)
*aFontCapabilities.oUnicodeRange &= getCommonLatnSubsetMask();
//If this font is probably tuned to display a single non-Latin //script and the font name is itself in Latin, then show a small //chunk of representative text for that script
eScript = getScript(aFontCapabilities); if (eScript == USCRIPT_COMMON) return OUString();
UScriptCode otCoverageToScript(vcl::UnicodeCoverage::UnicodeCoverageEnum eOTCoverage)
{
UScriptCode eRet = USCRIPT_COMMON; switch (eOTCoverage)
{ case vcl::UnicodeCoverage::BASIC_LATIN: case vcl::UnicodeCoverage::LATIN_1_SUPPLEMENT: case vcl::UnicodeCoverage::LATIN_EXTENDED_A: case vcl::UnicodeCoverage::LATIN_EXTENDED_B:
eRet = USCRIPT_LATIN; break; case vcl::UnicodeCoverage::COMBINING_DIACRITICAL_MARKS:
eRet = USCRIPT_INHERITED; break; case vcl::UnicodeCoverage::GREEK_AND_COPTIC:
eRet = USCRIPT_GREEK; break; case vcl::UnicodeCoverage::COPTIC:
eRet = USCRIPT_COPTIC; break; case vcl::UnicodeCoverage::CYRILLIC:
eRet = USCRIPT_CYRILLIC; break; case vcl::UnicodeCoverage::ARMENIAN:
eRet = USCRIPT_ARMENIAN; break; case vcl::UnicodeCoverage::HEBREW:
eRet = USCRIPT_HEBREW; break; case vcl::UnicodeCoverage::VAI:
eRet = USCRIPT_VAI; break; case vcl::UnicodeCoverage::ARABIC:
eRet = USCRIPT_ARABIC; break; case vcl::UnicodeCoverage::NKO:
eRet = USCRIPT_NKO; break; case vcl::UnicodeCoverage::DEVANAGARI:
eRet = USCRIPT_DEVANAGARI; break; case vcl::UnicodeCoverage::BENGALI:
eRet = USCRIPT_BENGALI; break; case vcl::UnicodeCoverage::GURMUKHI:
eRet = USCRIPT_GURMUKHI; break; case vcl::UnicodeCoverage::GUJARATI:
eRet = USCRIPT_GUJARATI; break; case vcl::UnicodeCoverage::ODIA:
eRet = USCRIPT_ORIYA; break; case vcl::UnicodeCoverage::TAMIL:
eRet = USCRIPT_TAMIL; break; case vcl::UnicodeCoverage::TELUGU:
eRet = USCRIPT_TELUGU; break; case vcl::UnicodeCoverage::KANNADA:
eRet = USCRIPT_KANNADA; break; case vcl::UnicodeCoverage::MALAYALAM:
eRet = USCRIPT_MALAYALAM; break; case vcl::UnicodeCoverage::THAI:
eRet = USCRIPT_THAI; break; case vcl::UnicodeCoverage::LAO:
eRet = USCRIPT_LAO; break; case vcl::UnicodeCoverage::GEORGIAN:
eRet = USCRIPT_GEORGIAN; break; case vcl::UnicodeCoverage::BALINESE:
eRet = USCRIPT_BALINESE; break; case vcl::UnicodeCoverage::HANGUL_JAMO:
eRet = USCRIPT_HANGUL; break; case vcl::UnicodeCoverage::LATIN_EXTENDED_ADDITIONAL:
eRet = USCRIPT_LATIN; break; case vcl::UnicodeCoverage::GREEK_EXTENDED:
eRet = USCRIPT_GREEK; break; case vcl::UnicodeCoverage::CURRENCY_SYMBOLS:
eRet = USCRIPT_SYMBOLS; break; case vcl::UnicodeCoverage::COMBINING_DIACRITICAL_MARKS_FOR_SYMBOLS:
eRet = USCRIPT_INHERITED; break; case vcl::UnicodeCoverage::LETTERLIKE_SYMBOLS: case vcl::UnicodeCoverage::NUMBER_FORMS: case vcl::UnicodeCoverage::ARROWS:
eRet = USCRIPT_SYMBOLS; break; case vcl::UnicodeCoverage::MATHEMATICAL_OPERATORS:
eRet = USCRIPT_MATHEMATICAL_NOTATION; break; case vcl::UnicodeCoverage::MISCELLANEOUS_TECHNICAL: case vcl::UnicodeCoverage::OPTICAL_CHARACTER_RECOGNITION: case vcl::UnicodeCoverage::BOX_DRAWING: case vcl::UnicodeCoverage::BLOCK_ELEMENTS: case vcl::UnicodeCoverage::GEOMETRIC_SHAPES: case vcl::UnicodeCoverage::MISCELLANEOUS_SYMBOLS: case vcl::UnicodeCoverage::DINGBATS: case vcl::UnicodeCoverage::CJK_SYMBOLS_AND_PUNCTUATION:
eRet = USCRIPT_SYMBOLS; break; case vcl::UnicodeCoverage::HIRAGANA:
eRet = USCRIPT_HIRAGANA; break; case vcl::UnicodeCoverage::KATAKANA:
eRet = USCRIPT_KATAKANA; break; case vcl::UnicodeCoverage::BOPOMOFO:
eRet = USCRIPT_BOPOMOFO; break; case vcl::UnicodeCoverage::HANGUL_COMPATIBILITY_JAMO:
eRet = USCRIPT_HANGUL; break; case vcl::UnicodeCoverage::PHAGS_PA:
eRet = USCRIPT_PHAGS_PA; break; case vcl::UnicodeCoverage::ENCLOSED_CJK_LETTERS_AND_MONTHS:
eRet = USCRIPT_HANGUL; break; case vcl::UnicodeCoverage::CJK_COMPATIBILITY:
eRet = USCRIPT_HAN; break; case vcl::UnicodeCoverage::HANGUL_SYLLABLES:
eRet = USCRIPT_HANGUL; break; case vcl::UnicodeCoverage::PHOENICIAN:
eRet = USCRIPT_PHOENICIAN; break; case vcl::UnicodeCoverage::CJK_UNIFIED_IDEOGRAPHS: case vcl::UnicodeCoverage::CJK_STROKES:
eRet = USCRIPT_HAN; break; case vcl::UnicodeCoverage::ARABIC_PRESENTATION_FORMS_A:
eRet = USCRIPT_ARABIC; break; case vcl::UnicodeCoverage::COMBINING_HALF_MARKS:
eRet = USCRIPT_INHERITED; break; case vcl::UnicodeCoverage::ARABIC_PRESENTATION_FORMS_B:
eRet = USCRIPT_ARABIC; break; case vcl::UnicodeCoverage::TIBETAN:
eRet = USCRIPT_TIBETAN; break; case vcl::UnicodeCoverage::SYRIAC:
eRet = USCRIPT_SYRIAC; break; case vcl::UnicodeCoverage::THAANA:
eRet = USCRIPT_THAANA; break; case vcl::UnicodeCoverage::SINHALA:
eRet = USCRIPT_SINHALA; break; case vcl::UnicodeCoverage::MYANMAR:
eRet = USCRIPT_MYANMAR; break; case vcl::UnicodeCoverage::ETHIOPIC:
eRet = USCRIPT_ETHIOPIC; break; case vcl::UnicodeCoverage::CHEROKEE:
eRet = USCRIPT_CHEROKEE; break; case vcl::UnicodeCoverage::UNIFIED_CANADIAN_ABORIGINAL_SYLLABICS:
eRet = USCRIPT_CANADIAN_ABORIGINAL; break; case vcl::UnicodeCoverage::OGHAM:
eRet = USCRIPT_OGHAM; break; case vcl::UnicodeCoverage::RUNIC:
eRet = USCRIPT_RUNIC; break; case vcl::UnicodeCoverage::KHMER:
eRet = USCRIPT_KHMER; break; case vcl::UnicodeCoverage::MONGOLIAN:
eRet = USCRIPT_MONGOLIAN; break; case vcl::UnicodeCoverage::BRAILLE_PATTERNS:
eRet = USCRIPT_BRAILLE; break; case vcl::UnicodeCoverage::YI_SYLLABLES:
eRet = USCRIPT_YI; break; case vcl::UnicodeCoverage::TAGALOG:
eRet = USCRIPT_TAGALOG; break; case vcl::UnicodeCoverage::OLD_ITALIC:
eRet = USCRIPT_OLD_ITALIC; break; case vcl::UnicodeCoverage::GOTHIC:
eRet = USCRIPT_GOTHIC; break; case vcl::UnicodeCoverage::DESERET:
eRet = USCRIPT_DESERET; break; case vcl::UnicodeCoverage::BYZANTINE_MUSICAL_SYMBOLS: case vcl::UnicodeCoverage::MATHEMATICAL_ALPHANUMERIC_SYMBOLS: case vcl::UnicodeCoverage::PRIVATE_USE_PLANE_15:
eRet = USCRIPT_SYMBOLS; break; case vcl::UnicodeCoverage::VARIATION_SELECTORS:
eRet = USCRIPT_INHERITED; break; case vcl::UnicodeCoverage::TAGS:
eRet = USCRIPT_SYMBOLS; break; case vcl::UnicodeCoverage::LIMBU:
eRet = USCRIPT_LIMBU; break; case vcl::UnicodeCoverage::TAI_LE:
eRet = USCRIPT_TAI_LE; break; case vcl::UnicodeCoverage::NEW_TAI_LUE:
eRet = USCRIPT_NEW_TAI_LUE; break; case vcl::UnicodeCoverage::BUGINESE:
eRet = USCRIPT_BUGINESE; break; case vcl::UnicodeCoverage::GLAGOLITIC:
eRet = USCRIPT_GLAGOLITIC; break; case vcl::UnicodeCoverage::TIFINAGH:
eRet = USCRIPT_TIFINAGH; break; case vcl::UnicodeCoverage::YIJING_HEXAGRAM_SYMBOLS:
eRet = USCRIPT_SYMBOLS; break; case vcl::UnicodeCoverage::SYLOTI_NAGRI:
eRet = USCRIPT_SYLOTI_NAGRI; break; case vcl::UnicodeCoverage::LINEAR_B_SYLLABARY:
eRet = USCRIPT_LINEAR_B; break; case vcl::UnicodeCoverage::ANCIENT_GREEK_NUMBERS:
eRet = USCRIPT_GREEK; break; case vcl::UnicodeCoverage::UGARITIC:
eRet = USCRIPT_UGARITIC; break; case vcl::UnicodeCoverage::OLD_PERSIAN:
eRet = USCRIPT_OLD_PERSIAN; break; case vcl::UnicodeCoverage::SHAVIAN:
eRet = USCRIPT_SHAVIAN; break; case vcl::UnicodeCoverage::OSMANYA:
eRet = USCRIPT_OSMANYA; break; case vcl::UnicodeCoverage::CYPRIOT_SYLLABARY:
eRet = USCRIPT_CYPRIOT; break; case vcl::UnicodeCoverage::KHAROSHTHI:
eRet = USCRIPT_KHAROSHTHI; break; case vcl::UnicodeCoverage::CUNEIFORM:
eRet = USCRIPT_CUNEIFORM; break; case vcl::UnicodeCoverage::SUNDANESE:
eRet = USCRIPT_SUNDANESE; break; case vcl::UnicodeCoverage::LEPCHA:
eRet = USCRIPT_LEPCHA; break; case vcl::UnicodeCoverage::OL_CHIKI:
eRet = USCRIPT_OL_CHIKI; break; case vcl::UnicodeCoverage::SAURASHTRA:
eRet = USCRIPT_SAURASHTRA; break; case vcl::UnicodeCoverage::KAYAH_LI:
eRet = USCRIPT_KAYAH_LI; break; case vcl::UnicodeCoverage::REJANG:
eRet = USCRIPT_REJANG; break; case vcl::UnicodeCoverage::CHAM:
eRet = USCRIPT_CHAM; break; case vcl::UnicodeCoverage::CARIAN:
eRet = USCRIPT_CARIAN; break; case vcl::UnicodeCoverage::DOMINO_TILES: case vcl::UnicodeCoverage::TAI_XUAN_JING_SYMBOLS: case vcl::UnicodeCoverage::COUNTING_ROD_NUMERALS: case vcl::UnicodeCoverage::ANCIENT_SYMBOLS: case vcl::UnicodeCoverage::PHAISTOS_DISC:
eRet = USCRIPT_SYMBOLS; break; case vcl::UnicodeCoverage::IPA_EXTENSIONS: case vcl::UnicodeCoverage::SPECIALS: case vcl::UnicodeCoverage::HALFWIDTH_AND_FULLWIDTH_FORMS: case vcl::UnicodeCoverage::VERTICAL_FORMS: case vcl::UnicodeCoverage::SMALL_FORM_VARIANTS: case vcl::UnicodeCoverage::ALPHABETIC_PRESENTATION_FORMS: case vcl::UnicodeCoverage::PRIVATE_USE_AREA_PLANE_0: case vcl::UnicodeCoverage::NONPLANE_0: case vcl::UnicodeCoverage::ENCLOSED_ALPHANUMERICS: case vcl::UnicodeCoverage::CONTROL_PICTURES: case vcl::UnicodeCoverage::SUPERSCRIPTS_AND_SUBSCRIPTS: case vcl::UnicodeCoverage::GENERAL_PUNCTUATION: case vcl::UnicodeCoverage::SPACING_MODIFIER_LETTERS: case vcl::UnicodeCoverage::RESERVED1: case vcl::UnicodeCoverage::RESERVED2: case vcl::UnicodeCoverage::RESERVED3: case vcl::UnicodeCoverage::RESERVED4: case vcl::UnicodeCoverage::RESERVED5: case vcl::UnicodeCoverage::MAX_UC_ENUM: break;
} return eRet;
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.