mirror of
https://github.com/wxWidgets/wxWidgets.git
synced 2026-10-08 20:54:25 +08:00
Update language database and move support for it to wxUILocale
Update the language database from the canonical sources: - It now includes most locales supported by Windows 10. - It now also has the following attributes for each entry: - BCP 47-like locale tag. - Reference to canonical name for generic language entries. - Language name in this language itself. - Also add data file with list of language script identifiers and aliases based on ISO 15924. - And update genlang.py to handle all the new attributes and data. Also move database-related methods of wxLocale to wxUILocale and just redirect wxLocale methods to the new wxUILocale ones (they are still preserved for compatibility). Closes https://github.com/wxWidgets/wxWidgets/pull/2594
This commit is contained in:
+2
-6
@@ -238,8 +238,8 @@ public:
|
||||
wxString GetHeaderValue(const wxString& header,
|
||||
const wxString& domain = wxEmptyString) const;
|
||||
|
||||
// These two methods are for internal use only. First one creates
|
||||
// ms_languagesDB if it doesn't already exist, second one destroys
|
||||
// These two methods are for internal use only. First one creates the
|
||||
// global language database if it doesn't already exist, second one destroys
|
||||
// it.
|
||||
static void CreateLanguagesDB();
|
||||
static void DestroyLanguagesDB();
|
||||
@@ -251,10 +251,6 @@ private:
|
||||
const wxString& shortName,
|
||||
int language);
|
||||
|
||||
// copy default table of languages from global static array to
|
||||
// m_langugagesInfo, called by InitLanguagesDB
|
||||
static void InitLanguagesDB();
|
||||
|
||||
// This method is trivial and just initializes the member fields to default
|
||||
// values.
|
||||
void DoCommonInit();
|
||||
|
||||
+673
-14
File diff suppressed because it is too large
Load Diff
@@ -82,12 +82,17 @@ enum wxLocaleInfo
|
||||
struct WXDLLIMPEXP_BASE wxLanguageInfo
|
||||
{
|
||||
int Language; // wxLanguage id
|
||||
wxString LocaleTag; // Tag of locale in BCP 47-like notation
|
||||
wxString CanonicalName; // Canonical name, e.g. fr_FR
|
||||
wxString CanonicalRef; // Canonical reference including region,
|
||||
// if the name specifies the language only, e.g. fr_FR for fr;
|
||||
// empty, if region is unknown or already part of the name.
|
||||
#ifdef __WINDOWS__
|
||||
wxUint32 WinLang, // Win32 language identifiers
|
||||
WinSublang;
|
||||
#endif // __WINDOWS__
|
||||
wxString Description; // human-readable name of the language
|
||||
wxString Description; // human-readable name of the language in English
|
||||
wxString DescriptionNative; // human-readable name of the language in native language
|
||||
wxLayoutDirection LayoutDirection;
|
||||
|
||||
#ifdef __WINDOWS__
|
||||
|
||||
@@ -138,11 +138,59 @@ public:
|
||||
// its dtor is not virtual.
|
||||
~wxUILocale();
|
||||
|
||||
// Try to get user's (or OS's) preferred language setting.
|
||||
// Return wxLANGUAGE_UNKNOWN if language-guessing algorithm failed
|
||||
static int GetSystemLanguage();
|
||||
|
||||
// Retrieve the language info struct for the given language
|
||||
//
|
||||
// Returns NULL if no info found, pointer must *not* be deleted by caller
|
||||
static const wxLanguageInfo* GetLanguageInfo(int lang);
|
||||
|
||||
// Returns language name in English or empty string if the language
|
||||
// is not in database
|
||||
static wxString GetLanguageName(int lang);
|
||||
|
||||
// Returns ISO code ("canonical name") of language or empty string if the
|
||||
// language is not in database
|
||||
static wxString GetLanguageCanonicalName(int lang);
|
||||
|
||||
// Find the language for the given locale string which may be either a
|
||||
// canonical ISO 2 letter language code ("xx"), a language code followed by
|
||||
// the country code ("xx_XX") or a Windows full language name ("Xxxxx...")
|
||||
//
|
||||
// Returns NULL if no info found, pointer must *not* be deleted by caller
|
||||
static const wxLanguageInfo* FindLanguageInfo(const wxString& locale);
|
||||
|
||||
// Add custom language to the list of known languages.
|
||||
// Notes: 1) wxLanguageInfo contains platform-specific data
|
||||
// 2) must be called before Init to have effect
|
||||
static void AddLanguage(const wxLanguageInfo& info);
|
||||
|
||||
// These two methods are for internal use only. First one creates the
|
||||
// global language database if it doesn't already exist, second one destroys
|
||||
// it.
|
||||
static void CreateLanguagesDB();
|
||||
static void DestroyLanguagesDB();
|
||||
|
||||
// These two methods are for internal use only.
|
||||
// wxLocaleIdent expects script identifiers as listed in ISO 15924.
|
||||
// However, directory names for translation catalogs follow the
|
||||
// Unix convention, using script aliases as listed in ISO 15924.
|
||||
// First one converts a script name to its alias, second converts
|
||||
// a script alias to its corresponding script name.
|
||||
// Both methods return empty strings, if the script name or alias
|
||||
// couldn't be found.
|
||||
static wxString GetScriptAliasFromName(const wxString& scriptName);
|
||||
static wxString GetScriptNameFromAlias(const wxString& scriptAlias);
|
||||
|
||||
private:
|
||||
// This ctor is private and exists only for implementation reasons.
|
||||
// It takes ownership of the provided pointer.
|
||||
explicit wxUILocale(wxUILocaleImpl* impl = NULL) : m_impl(impl) { }
|
||||
|
||||
// Creates the global tables of languages and scripts called by CreateLanguagesDB
|
||||
static void InitLanguagesDB();
|
||||
|
||||
static wxUILocale ms_current;
|
||||
|
||||
|
||||
+25
-1
@@ -33,9 +33,26 @@ struct wxLanguageInfo
|
||||
/// language info structure.
|
||||
int Language;
|
||||
|
||||
/**
|
||||
Tag for locale in BCP 47-like notation.
|
||||
|
||||
@since 3.1.6
|
||||
*/
|
||||
wxString LocaleTag;
|
||||
|
||||
/// Canonical name of the language, e.g. @c fr_FR.
|
||||
wxString CanonicalName;
|
||||
|
||||
/**
|
||||
Canonical reference including region.
|
||||
|
||||
Set, if the name specifies the language only, e.g. fr_FR for fr.
|
||||
Empty, if region is unknown or already part of the name.
|
||||
|
||||
@since 3.1.6
|
||||
*/
|
||||
wxString CanonicalRef;
|
||||
|
||||
//@{
|
||||
/**
|
||||
Win32 language identifiers (LANG_xxxx, SUBLANG_xxxx).
|
||||
@@ -45,9 +62,16 @@ struct wxLanguageInfo
|
||||
wxUint32 WinLang, WinSublang;
|
||||
//@}
|
||||
|
||||
/// Human-readable name of the language.
|
||||
/// Human-readable name of the language in English.
|
||||
wxString Description;
|
||||
|
||||
/**
|
||||
Human-readable name of the language in this language itself.
|
||||
|
||||
@since 3.1.6
|
||||
*/
|
||||
wxString DescriptionNative;
|
||||
|
||||
/// The layout direction used for this language.
|
||||
wxLayoutDirection LayoutDirection;
|
||||
|
||||
|
||||
+673
-14
File diff suppressed because it is too large
Load Diff
@@ -189,6 +189,69 @@ public:
|
||||
conventions.
|
||||
*/
|
||||
bool IsSupported() const;
|
||||
|
||||
/**
|
||||
Adds custom, user-defined language to the database of known languages.
|
||||
This database is used in conjunction with the first form of Init().
|
||||
*/
|
||||
static void AddLanguage(const wxLanguageInfo& info);
|
||||
|
||||
/**
|
||||
This function may be used to find the language description structure for the
|
||||
given locale, specified either as a two letter ISO language code (for example,
|
||||
"pt"), a language code followed by the country code ("pt_BR") or a full, human
|
||||
readable, language description ("Portuguese-Brazil").
|
||||
|
||||
Returns the information for the given language or @NULL if this language
|
||||
is unknown. Note that even if the returned pointer is valid, the caller
|
||||
should @e not delete it.
|
||||
|
||||
@see GetLanguageInfo()
|
||||
*/
|
||||
static const wxLanguageInfo* FindLanguageInfo(const wxString& locale);
|
||||
|
||||
/**
|
||||
Returns a pointer to wxLanguageInfo structure containing information about
|
||||
the given language or @NULL if this language is unknown. Note that even if
|
||||
the returned pointer is valid, the caller should @e not delete it.
|
||||
|
||||
See AddLanguage() for the wxLanguageInfo description.
|
||||
As with Init(), @c wxLANGUAGE_DEFAULT has the special meaning if passed
|
||||
as an argument to this function and in this case the result of
|
||||
GetSystemLanguage() is used.
|
||||
*/
|
||||
static const wxLanguageInfo* GetLanguageInfo(int lang);
|
||||
|
||||
/**
|
||||
Returns English name of the given language or empty string if this
|
||||
language is unknown.
|
||||
|
||||
See GetLanguageInfo() for a remark about special meaning of @c wxLANGUAGE_DEFAULT.
|
||||
*/
|
||||
static wxString GetLanguageName(int lang);
|
||||
|
||||
/**
|
||||
Returns canonical name (see GetCanonicalName()) of the given language
|
||||
or empty string if this language is unknown.
|
||||
|
||||
See GetLanguageInfo() for a remark about special meaning of @c wxLANGUAGE_DEFAULT.
|
||||
*/
|
||||
static wxString GetLanguageCanonicalName(int lang);
|
||||
|
||||
/**
|
||||
Tries to detect the user's default locale setting.
|
||||
|
||||
Returns the ::wxLanguage value or @c wxLANGUAGE_UNKNOWN if the language-guessing
|
||||
algorithm failed.
|
||||
|
||||
@note This function works with @em locales and returns the user's default
|
||||
locale. This may be, and usually is, the same as their preferred UI
|
||||
language, but it's not the same thing. Use wxTranslation to obtain
|
||||
@em language information.
|
||||
|
||||
@see wxTranslations::GetBestTranslation().
|
||||
*/
|
||||
static int GetSystemLanguage();
|
||||
};
|
||||
|
||||
/**
|
||||
|
||||
+27
-4
@@ -1,5 +1,28 @@
|
||||
Run the genlang.py script from the top level wxWidgets directory to update
|
||||
include/wx/language.h (wxLanguage enum), interface/wx/language.h (its
|
||||
documentation) and src/common/languageinfo.cpp (conversion tables) with the data
|
||||
from langtabl.txt.
|
||||
Run the genlang.py script from the top level wxWidgets directory to
|
||||
update include/wx/language.h (wxLanguage enum), interface/wx/language.h
|
||||
(its documentation) and src/common/languageinfo.cpp (conversion tables)
|
||||
with the data from langtabl.txt and scripttabl.txt.
|
||||
|
||||
langtabl.txt contains a tabular list of language entries. Each entry
|
||||
contains
|
||||
|
||||
- a symbolic language identifier used in enum wxLanguage,
|
||||
- a BCP 47-like locale identifier,
|
||||
- a Unix locale identifier,
|
||||
- a Unix locale identifier including a region id (if the default Unix
|
||||
locale identifier does not include a region identifier) (mainly for
|
||||
compatibility with wxWidgets version below 3.1.6),
|
||||
- numeric Windows language identifier (1),
|
||||
- numeric Windows sublanguage identifier (1),
|
||||
- language and region description in English
|
||||
- language and region description in native language.
|
||||
|
||||
scripttabl.txt contains a list of 4-letter script codes and their
|
||||
aliases (English) based on the ISO 15924 standard (2), restricted to
|
||||
entries for which aliases are defined. This list is used in wxWidgets
|
||||
to convert between script code used in BCP 47-like identifiers and
|
||||
script modifiers used in Unix locale names. The data in (2) can be used
|
||||
to update scripttabl.txt if necessary.
|
||||
|
||||
(1) used on Windows only, deprecated by Microsoft
|
||||
(2) http://www.unicode.org/iso15924/iso15924-codes.html
|
||||
|
||||
+75
-36
@@ -10,22 +10,37 @@ import os
|
||||
import string
|
||||
import sys
|
||||
|
||||
def ReadScriptTable():
|
||||
scripttable = []
|
||||
try:
|
||||
f = open('misc/languages/scripttabl.txt')
|
||||
except:
|
||||
print("Did you run the script from top-level wxWidgets directory?")
|
||||
raise
|
||||
|
||||
for i in f.readlines():
|
||||
ispl = i.split()
|
||||
scripttable.append((ispl[0], ispl[1]))
|
||||
f.close()
|
||||
return scripttable
|
||||
|
||||
|
||||
def ReadTable():
|
||||
table = []
|
||||
try:
|
||||
f = open('misc/languages/langtabl.txt')
|
||||
except:
|
||||
print "Did you run the script from top-level wxWidgets directory?"
|
||||
print("Did you run the script from top-level wxWidgets directory?")
|
||||
raise
|
||||
|
||||
for i in f.readlines():
|
||||
ispl = i.split()
|
||||
table.append((ispl[0], ispl[1], ispl[2], ispl[3], ispl[4], string.join(ispl[5:])))
|
||||
table.append((ispl[0], ispl[1], ispl[2], ispl[3], ispl[4], ispl[5], ispl[6], string.join(ispl[7:])))
|
||||
f.close()
|
||||
return table
|
||||
|
||||
|
||||
def WriteEnum(f, table):
|
||||
def WriteEnum(f, table, scripttable):
|
||||
f.write("""
|
||||
/**
|
||||
The languages supported by wxLocale.
|
||||
@@ -51,6 +66,22 @@ enum wxLanguage
|
||||
/// For custom, user-defined languages.
|
||||
wxLANGUAGE_USER_DEFINED,
|
||||
|
||||
/// Synonyms.
|
||||
wxLANGUAGE_AZERI = wxLANGUAGE_AZERBAIJANI,
|
||||
wxLANGUAGE_AZERI_CYRILLIC = wxLANGUAGE_AZERBAIJANI_CYRILLIC,
|
||||
wxLANGUAGE_AZERI_LATIN = wxLANGUAGE_AZERBAIJANI_LATIN,
|
||||
wxLANGUAGE_BENGALI = wxLANGUAGE_BANGLA,
|
||||
wxLANGUAGE_BENGALI_BANGLADESH = wxLANGUAGE_BANGLA_BANGLADESH,
|
||||
wxLANGUAGE_BENGALI_INDIA = wxLANGUAGE_BANGLA_INDIA,
|
||||
wxLANGUAGE_BHUTANI = wxLANGUAGE_DZONGKHA,
|
||||
wxLANGUAGE_CHINESE_SIMPLIFIED = wxLANGUAGE_CHINESE_CHINA,
|
||||
wxLANGUAGE_CHINESE_TRADITIONAL = wxLANGUAGE_CHINESE_TAIWAN,
|
||||
wxLANGUAGE_CHINESE_MACAU = wxLANGUAGE_CHINESE_MACAO,
|
||||
wxLANGUAGE_KERNEWEK = wxLANGUAGE_CORNISH,
|
||||
wxLANGUAGE_MALAY_BRUNEI_DARUSSALAM = wxLANGUAGE_MALAY_BRUNEI,
|
||||
wxLANGUAGE_ORIYA = wxLANGUAGE_ODIA,
|
||||
wxLANGUAGE_ORIYA_INDIA = wxLANGUAGE_ODIA_INDIA,
|
||||
wxLANGUAGE_SPANISH_MODERN = wxLANGUAGE_SPANISH,
|
||||
|
||||
/// Obsolete synonym.
|
||||
wxLANGUAGE_CAMBODIAN = wxLANGUAGE_KHMER
|
||||
@@ -59,37 +90,33 @@ enum wxLanguage
|
||||
""")
|
||||
|
||||
|
||||
def WriteTable(f, table):
|
||||
all_langs = []
|
||||
all_sublangs = []
|
||||
def WriteTable(f, table, scripttable):
|
||||
sctable = ''
|
||||
for i in scripttable:
|
||||
scname = '"%s"' % i[0]
|
||||
scalias = '"%s"' % i[1]
|
||||
sctable += ' SCMAP(%s, %s)\n' % (scname, scalias)
|
||||
|
||||
lngtable = ''
|
||||
ifdefs = ''
|
||||
|
||||
for i in table:
|
||||
ican = '"%s"' % i[1]
|
||||
ibcp47 = '"%s"' % i[1]
|
||||
ican = '"%s"' % i[2]
|
||||
if ican == '"-"': ican = '""'
|
||||
ilang = i[2]
|
||||
icanbase = '"%s"' % i[3]
|
||||
if icanbase == '"-"': icanbase = '""'
|
||||
ilang = i[4]
|
||||
if ilang == '-': ilang = '0'
|
||||
isublang = i[3]
|
||||
isublang = i[5]
|
||||
if isublang == '-': isublang = '0'
|
||||
if (i[4] == "LTR") :
|
||||
if (i[6] == "LTR") :
|
||||
ilayout = "wxLayout_LeftToRight"
|
||||
elif (i[4] == "RTL"):
|
||||
elif (i[6] == "RTL"):
|
||||
ilayout = "wxLayout_RightToLeft"
|
||||
else:
|
||||
print "ERROR: Invalid value for the layout direction";
|
||||
lngtable += ' LNG(%-38s %-7s, %-15s, %-34s, %s, %s)\n' % \
|
||||
((i[0]+','), ican, ilang, isublang, ilayout, i[5])
|
||||
if ilang not in all_langs: all_langs.append(ilang)
|
||||
if isublang not in all_sublangs: all_sublangs.append(isublang)
|
||||
|
||||
for s in all_langs:
|
||||
if s != '0':
|
||||
ifdefs += '#ifndef %s\n#define %s (0)\n#endif\n' % (s, s)
|
||||
for s in all_sublangs:
|
||||
if s != '0' and s != 'SUBLANG_DEFAULT':
|
||||
ifdefs += '#ifndef %s\n#define %s SUBLANG_DEFAULT\n#endif\n' % (s, s)
|
||||
lngtable += ' LNG(%-60s %-17s, %-28s, %-15s, %-4s, %-4s, %s, %s)\n' % \
|
||||
((i[0]+','), ibcp47, ican, icanbase, ilang, isublang, ilayout, i[7])
|
||||
|
||||
f.write("""
|
||||
// This table is generated by misc/languages/genlang.py
|
||||
@@ -104,27 +131,36 @@ def WriteTable(f, table):
|
||||
#define SETWINLANG(info,lang,sublang) \\
|
||||
info.WinLang = lang, info.WinSublang = sublang;
|
||||
|
||||
%s
|
||||
|
||||
#endif // __WIN32__
|
||||
|
||||
#define LNG(wxlang, canonical, winlang, winsublang, layout, desc) \\
|
||||
info.Language = wxlang; \\
|
||||
info.CanonicalName = wxT(canonical); \\
|
||||
info.LayoutDirection = layout; \\
|
||||
info.Description = wxT(desc); \\
|
||||
SETWINLANG(info, winlang, winsublang) \\
|
||||
#define LNG(wxlang, bcp47tag, canonical, canonicalref, winlang, winsublang, layout, desc, descnative) \\
|
||||
info.Language = wxlang; \\
|
||||
info.LocaleTag = wxT(bcp47tag); \\
|
||||
info.CanonicalName = wxT(canonical); \\
|
||||
info.CanonicalRef = wxT(canonicalref); \\
|
||||
info.LayoutDirection = layout; \\
|
||||
info.Description = wxString::FromUTF8(desc); \\
|
||||
info.DescriptionNative = wxString::FromUTF8(descnative); \\
|
||||
SETWINLANG(info, winlang, winsublang) \\
|
||||
AddLanguage(info);
|
||||
|
||||
void wxLocale::InitLanguagesDB()
|
||||
{
|
||||
wxLanguageInfo info;
|
||||
#define SCMAP(scname, scalias) \\
|
||||
gs_scmap_name2alias[wxT(scname)] = wxT(scalias); \\
|
||||
gs_scmap_alias2name[wxT(scalias)] = wxT(scname);
|
||||
|
||||
void wxUILocale::InitLanguagesDB()
|
||||
{
|
||||
wxLanguageInfo info;
|
||||
|
||||
// Known languages
|
||||
%s
|
||||
// Known language scripts
|
||||
%s
|
||||
}
|
||||
#undef LNG
|
||||
#undef SCMAP
|
||||
|
||||
""" % (ifdefs, lngtable))
|
||||
""" % (lngtable,sctable))
|
||||
|
||||
|
||||
def ReplaceGeneratedPartOfFile(fname, func):
|
||||
@@ -147,7 +183,7 @@ def ReplaceGeneratedPartOfFile(fname, func):
|
||||
print 'Unexpected starting comment.'
|
||||
betweenBeginAndEnd = 1
|
||||
fout.write(l)
|
||||
func(fout, table)
|
||||
func(fout, table, scripttable)
|
||||
elif l == '// --- --- --- generated code ends here --- --- ---\n':
|
||||
if not betweenBeginAndEnd:
|
||||
print 'End comment found before the starting one?'
|
||||
@@ -164,10 +200,13 @@ def ReplaceGeneratedPartOfFile(fname, func):
|
||||
os.remove(fnameNew)
|
||||
sys.exit(1)
|
||||
|
||||
fout.close()
|
||||
fin.close()
|
||||
os.remove(fname)
|
||||
os.rename(fnameNew, fname)
|
||||
|
||||
table = ReadTable()
|
||||
scripttable = ReadScriptTable()
|
||||
ReplaceGeneratedPartOfFile('include/wx/language.h', WriteEnum)
|
||||
ReplaceGeneratedPartOfFile('interface/wx/language.h', WriteEnum)
|
||||
ReplaceGeneratedPartOfFile('src/common/languageinfo.cpp', WriteTable)
|
||||
|
||||
+879
-236
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,159 @@
|
||||
Adlm adlam
|
||||
Aghb caucasian_albanian
|
||||
Ahom ahom
|
||||
Arab arabic
|
||||
Armi imperial_aramaic
|
||||
Armn armenian
|
||||
Avst avestan
|
||||
Bali balinese
|
||||
Bamu bamum
|
||||
Bass bassa_vah
|
||||
Batk batak
|
||||
Beng bengali
|
||||
Bhks bhaiksuki
|
||||
Bopo bopomofo
|
||||
Brah brahmi
|
||||
Brai braille
|
||||
Bugi buginese
|
||||
Buhd buhid
|
||||
Cakm chakma
|
||||
Cans canadian_aboriginal
|
||||
Cari carian
|
||||
Cham cham
|
||||
Cher cherokee
|
||||
Chrs chorasmian
|
||||
Copt coptic
|
||||
Cprt cypriot
|
||||
Cyrl cyrillic
|
||||
Deva devanagari
|
||||
Diak dives_akuru
|
||||
Dogr dogra
|
||||
Dsrt deseret
|
||||
Dupl duployan
|
||||
Egyp egyptian_hieroglyphs
|
||||
Elba elbasan
|
||||
Elym elymaic
|
||||
Ethi ethiopic
|
||||
Geok georgian
|
||||
Geor georgian
|
||||
Glag glagolitic
|
||||
Gong gunjala_gondi
|
||||
Gonm masaram_gondi
|
||||
Goth gothic
|
||||
Gran grantha
|
||||
Grek greek
|
||||
Gujr gujarati
|
||||
Guru gurmukhi
|
||||
Hang hangul
|
||||
Hani han
|
||||
Hano hanunoo
|
||||
Hatr hatran
|
||||
Hebr hebrew
|
||||
Hira hiragana
|
||||
Hluw anatolian_hieroglyphs
|
||||
Hmng pahawh_hmong
|
||||
Hmnp nyiakeng_puachue_hmong
|
||||
Hrkt katakana_or_hiragana
|
||||
Hung old_hungarian
|
||||
Ital old_italic
|
||||
Java javanese
|
||||
Kali kayah_li
|
||||
Kana katakana
|
||||
Khar kharoshthi
|
||||
Khmr khmer
|
||||
Khoj khojki
|
||||
Kits khitan_small_script
|
||||
Knda kannada
|
||||
Kthi kaithi
|
||||
Lana tai_tham
|
||||
Laoo lao
|
||||
Latn latin
|
||||
Lepc lepcha
|
||||
Limb limbu
|
||||
Lina linear_a
|
||||
Linb linear_b
|
||||
Lisu lisu
|
||||
Lyci lycian
|
||||
Lydi lydian
|
||||
Mahj mahajani
|
||||
Maka makasar
|
||||
Mand mandaic
|
||||
Mani manichaean
|
||||
Marc marchen
|
||||
Medf medefaidrin
|
||||
Mend mende_kikakui
|
||||
Merc meroitic_cursive
|
||||
Mero meroitic_hieroglyphs
|
||||
Mlym malayalam
|
||||
Modi modi
|
||||
Mong mongolian
|
||||
Mroo mro
|
||||
Mtei meetei_mayek
|
||||
Mult multani
|
||||
Mymr myanmar
|
||||
Nand nandinagari
|
||||
Narb old_north_arabian
|
||||
Nbat nabataean
|
||||
Newa newa
|
||||
Nkoo nko
|
||||
Nshu nushu
|
||||
Ogam ogham
|
||||
Olck ol_chiki
|
||||
Orkh old_turkic
|
||||
Orya oriya
|
||||
Osge osage
|
||||
Osma osmanya
|
||||
Palm palmyrene
|
||||
Pauc pau_cin_hau
|
||||
Perm old_permic
|
||||
Phag phags_pa
|
||||
Phli inscriptional_pahlavi
|
||||
Phlp psalter_pahlavi
|
||||
Phnx phoenician
|
||||
Plrd miao
|
||||
Prti inscriptional_parthian
|
||||
Rjng rejang
|
||||
Rohg hanifi_rohingya
|
||||
Runr runic
|
||||
Samr samaritan
|
||||
Sarb old_south_arabian
|
||||
Saur saurashtra
|
||||
Sgnw signwriting
|
||||
Shaw shavian
|
||||
Shrd sharada
|
||||
Sidd siddham
|
||||
Sind khudawadi
|
||||
Sinh sinhala
|
||||
Sogd sogdian
|
||||
Sogo old_sogdian
|
||||
Sora sora_sompeng
|
||||
Soyo soyombo
|
||||
Sund sundanese
|
||||
Sylo syloti_nagri
|
||||
Syrc syriac
|
||||
Tagb tagbanwa
|
||||
Takr takri
|
||||
Tale tai_le
|
||||
Talu new_tai_lue
|
||||
Taml tamil
|
||||
Tang tangut
|
||||
Tavt tai_viet
|
||||
Telu telugu
|
||||
Tfng tifinagh
|
||||
Tglg tagalog
|
||||
Thaa thaana
|
||||
Thai thai
|
||||
Tibt tibetan
|
||||
Tirh tirhuta
|
||||
Ugar ugaritic
|
||||
Vaii vai
|
||||
Wara warang_citi
|
||||
Wcho wancho
|
||||
Xpeo old_persian
|
||||
Xsux cuneiform
|
||||
Yezi yezidi
|
||||
Yiii yi
|
||||
Zanb zanabazar_square
|
||||
Zinh inherited
|
||||
Zyyy common
|
||||
Zzzz unknown
|
||||
+406
-360
File diff suppressed because it is too large
Load Diff
+1081
-739
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user