Krita Source Code Documentation
Loading...
Searching...
No Matches
KoWritingSystemUtils Class Reference

The KoScriptUtils class. More...

#include <KoWritingSystemUtils.h>

Classes

struct  Bcp47Locale
 The Bcp47Locale class This holds a parsed BCP47 locale. QLocale is primarily made for POSIX locale format, and even there ignores the @modifier tag. On top of that, many minority languages are not handled by QLocale. To keep track of that extra data we use this BCP Locale struct. More...
 

Static Public Member Functions

static QLocale localeFromBcp47Locale (const Bcp47Locale &locale)
 
static QLocale localeFromBcp47Locale (const QString &locale)
 
static Bcp47Locale parseBcp47Locale (const QString &locale)
 
static QChar::Script qCharScriptForScriptTag (const QString &tag)
 
static QMap< QString, QString > samples ()
 
static QString sampleTagForQLocale (const QLocale &locale)
 
static QLocale::Script scriptForScriptTag (const QString &tag)
 
static QString scriptTagForQCharScript (QChar::Script script)
 
static QString scriptTagForQLocaleScript (QLocale::Script script)
 
static QString scriptTagForWritingSystem (QFontDatabase::WritingSystem system)
 
static QFontDatabase::WritingSystem writingSystemForScriptTag (const QString &tag)
 

Detailed Description

The KoScriptUtils class.

Collection of utility functions to wrangle the different script and writing system enums in QFontDataBase, QLocale and QChar and ISO 15924 tags

Definition at line 19 of file KoWritingSystemUtils.h.

Member Function Documentation

◆ localeFromBcp47Locale() [1/2]

QLocale KoWritingSystemUtils::localeFromBcp47Locale ( const Bcp47Locale & locale)
static

Definition at line 530 of file KoWritingSystemUtils.cpp.

531{
532 return QLocale(locale.toPosixLocaleFormat());
533}

References KoWritingSystemUtils::Bcp47Locale::toPosixLocaleFormat().

◆ localeFromBcp47Locale() [2/2]

QLocale KoWritingSystemUtils::localeFromBcp47Locale ( const QString & locale)
static

Definition at line 535 of file KoWritingSystemUtils.cpp.

536{
538}
static Bcp47Locale parseBcp47Locale(const QString &locale)
static QLocale localeFromBcp47Locale(const Bcp47Locale &locale)

References localeFromBcp47Locale(), and parseBcp47Locale().

◆ parseBcp47Locale()

KoWritingSystemUtils::Bcp47Locale KoWritingSystemUtils::parseBcp47Locale ( const QString & locale)
static

Definition at line 444 of file KoWritingSystemUtils.cpp.

445{
446 Bcp47Locale bcp;
447
448 QStringList tags = grandFathered.value(locale, locale).split("-");
449
450 if (tags.isEmpty()) return bcp;
451
452 const QRegExp alphas("[A-Z]+", Qt::CaseInsensitive);
453 const QRegExp digits("[\\d]+");
454
455 // Language -- single primary language, followed by optional 3 letter extended tags.
456 if (tags.first().size() == 2 || tags.first().size() == 3) {
457 bcp.languageTags.append(tags.takeFirst().toLower());
458
459 // extensions only happen when first tag is 2 or 3 long.
460 while (!tags.isEmpty() && tags.first().size() == 3 && alphas.exactMatch(tags.first())) {
461 bcp.languageTags.append(tags.takeFirst().toLower());
462 }
463 } else if (tags.first().size() >= 4 || tags.first().size() <= 8) {
464 // 4 alpha is reserved for future use and 5-8 is also legit, but practically doesn't exist...
465 bcp.languageTags.append(tags.takeFirst().toLower());
466 } else if (tags.first() == "i" && tags.size() > 0) {
467 QString total = tags.takeFirst();
468 total += "-"+tags.takeFirst();
469 bcp.languageTags.append(total.toLower());
470 }
471
472 if (tags.isEmpty()) return bcp;
473
474 // Script -- This is an 4 letter alpha only.
475
476 if (alphas.exactMatch(tags.first()) && tags.first().size() == 4) {
477 bcp.scriptTag = tags.takeFirst().toLower();
478 bcp.scriptTag = bcp.scriptTag.at(0).toUpper()+bcp.scriptTag.mid(1);
479 }
480
481 if (tags.isEmpty()) return bcp;
482
483 // Region -- 2 letter alpha only.
484
485 if ((alphas.exactMatch(tags.first()) && tags.first().size() == 2)
486 || (digits.exactMatch(tags.first()) && tags.first().size() == 3)) {
487 bcp.regionTag = tags.takeFirst().toUpper();
488 }
489
490 if (tags.isEmpty()) return bcp;
491
492 // Variants -- [0+] alpha numerics, either between 5-8 char long, or 4 but starting with a digit.
493
494 const QRegExp variantAlphaNumeric("\\d[a-z0-9]{3}", Qt::CaseInsensitive);
495
496 while (!tags.isEmpty()
497 && ( (tags.first().size() >= 5 && tags.first().size() <= 8)
498 || (variantAlphaNumeric.exactMatch(tags.first()) && tags.first().size() == 4) )
499 ) {
500 bcp.variantTags.append(tags.takeFirst().toLower());
501 }
502
503 if (tags.isEmpty()) return bcp;
504 // extension and private use subtags. Each starts with a single letter to indicate the extension type.
505
506 QStringList currentExtension;
507 while (!tags.isEmpty()) {
508 if (!currentExtension.isEmpty() && tags.first().size() == 1) {
509 if (currentExtension.first() == "x") {
510 bcp.privateUseTags.append(currentExtension.join("-"));
511 } else {
512 bcp.extensionTags.append(currentExtension.join("-"));
513 }
514 currentExtension.clear();
515 }
516 currentExtension.append(tags.takeFirst().toLower());
517 }
518
519 if (!currentExtension.isEmpty()) {
520 if (currentExtension.first() == "x") {
521 bcp.privateUseTags.append(currentExtension.join("-"));
522 } else {
523 bcp.extensionTags.append(currentExtension.join("-"));
524 }
525 }
526
527 return bcp;
528}
const QMap< QString, QString > grandFathered

References KoWritingSystemUtils::Bcp47Locale::extensionTags, grandFathered, KoWritingSystemUtils::Bcp47Locale::languageTags, KoWritingSystemUtils::Bcp47Locale::privateUseTags, KoWritingSystemUtils::Bcp47Locale::regionTag, KoWritingSystemUtils::Bcp47Locale::scriptTag, and KoWritingSystemUtils::Bcp47Locale::variantTags.

◆ qCharScriptForScriptTag()

QChar::Script KoWritingSystemUtils::qCharScriptForScriptTag ( const QString & tag)
static

Definition at line 372 of file KoWritingSystemUtils.cpp.

373{
374 return QCHAR_SCRIPT_MAP.key(tag, QChar::Script_Unknown);
375}
static QMap< QChar::Script, QString > QCHAR_SCRIPT_MAP

References QCHAR_SCRIPT_MAP.

◆ samples()

QMap< QString, QString > KoWritingSystemUtils::samples ( )
static

This returns a map of samples and an associated tag. Note that the Sample is the first entry, the tag the second. This is because Latin, for example, has multiple sample strings associated depending on Latin coverage in the font. String it is stored with is s_<ISO 15924> tag for scripts and l_<BCP 47 Language> tag for languages. This way we can have samples per language as is useful for vietnamese.

Definition at line 378 of file KoWritingSystemUtils.cpp.

379{
380 QMap <QString, QString> samples;
381 // Also add simplified latin sample. By doing this first, it'll fall back nicely.
382 samples.insert("AaBbGg", "s_Latn");
383
384 // Some symbol samples...
385 samples.insert("\u263A\u2764\u2693\U0001F308", "s_Zsye"); // Emoji
386 samples.insert("βˆ†βˆ…βˆžβ‰ ", "s_Zmth"); // Some math operators
387 samples.insert("π„žπ… π„Ώπ„»", "s_Zsym"); // Musical notes
388 samples.insert("←↕↝↴", "s_Zsym"); // Arrows
389 for (int i = 0; i < QFontDatabase::WritingSystemsCount; i++) {
390 QFontDatabase::WritingSystem w = QFontDatabase::WritingSystem(i);
391 if (w == QFontDatabase::WritingSystem::Any) continue;
392
393 if (w == QFontDatabase::WritingSystem::Vietnamese) {
394 samples.insert(QFontDatabase::writingSystemSample(QFontDatabase::Vietnamese),
395 "l_vi");
396 } else {
397 samples.insert(QFontDatabase::writingSystemSample(w),
398 "s_"+WRITINGSYSTEM_SCRIPT_MAP.value(w, "Zyyy"));
399 }
400 }
401
402 return samples;
403}
static QMap< QFontDatabase::WritingSystem, QString > WRITINGSYSTEM_SCRIPT_MAP
static QMap< QString, QString > samples()

References samples(), and WRITINGSYSTEM_SCRIPT_MAP.

◆ sampleTagForQLocale()

QString KoWritingSystemUtils::sampleTagForQLocale ( const QLocale & locale)
static

Definition at line 405 of file KoWritingSystemUtils.cpp.

406{
407 const QLocale vietnamese(QLocale::Vietnamese, QLocale::LatinScript, QLocale::AnyCountry);
408
409 if (locale == vietnamese) {
410 return "l_vi";
411 }
412
413 return "s_"+QLOCALE_SCRIPT_MAP.value(locale.script(), "Zyyy");
414}
static QMap< QLocale::Script, QString > QLOCALE_SCRIPT_MAP

References QLOCALE_SCRIPT_MAP.

◆ scriptForScriptTag()

QLocale::Script KoWritingSystemUtils::scriptForScriptTag ( const QString & tag)
static

Definition at line 362 of file KoWritingSystemUtils.cpp.

363{
364 return QLOCALE_SCRIPT_MAP.key(tag, QLocale::AnyScript);
365}

References QLOCALE_SCRIPT_MAP.

◆ scriptTagForQCharScript()

QString KoWritingSystemUtils::scriptTagForQCharScript ( QChar::Script script)
static

Definition at line 367 of file KoWritingSystemUtils.cpp.

368{
369 return QCHAR_SCRIPT_MAP.value(script);
370}

References QCHAR_SCRIPT_MAP.

◆ scriptTagForQLocaleScript()

QString KoWritingSystemUtils::scriptTagForQLocaleScript ( QLocale::Script script)
static

Definition at line 357 of file KoWritingSystemUtils.cpp.

358{
359 return QLOCALE_SCRIPT_MAP.value(script);
360}

References QLOCALE_SCRIPT_MAP.

◆ scriptTagForWritingSystem()

QString KoWritingSystemUtils::scriptTagForWritingSystem ( QFontDatabase::WritingSystem system)
static

Definition at line 348 of file KoWritingSystemUtils.cpp.

348 {
349 return WRITINGSYSTEM_SCRIPT_MAP.value(system);
350}

References WRITINGSYSTEM_SCRIPT_MAP.

◆ writingSystemForScriptTag()

QFontDatabase::WritingSystem KoWritingSystemUtils::writingSystemForScriptTag ( const QString & tag)
static

Definition at line 352 of file KoWritingSystemUtils.cpp.

353{
354 return WRITINGSYSTEM_SCRIPT_MAP.key(tag, QFontDatabase::Any);
355}

References WRITINGSYSTEM_SCRIPT_MAP.


The documentation for this class was generated from the following files: