mediawiki.Title: Reduce transfer size of phpCharToUpper.json
authorTimo Tijhof <krinklemail@gmail.com>
Tue, 17 Sep 2019 18:40:03 +0000 (19:40 +0100)
committerKrinkle <krinklemail@gmail.com>
Tue, 17 Sep 2019 19:04:03 +0000 (19:04 +0000)
Follows-up 416895821fdb68, which increased this payload by 1-2KB.

Bug: T233095
Change-Id: I90745fe1c1ad4389fef399a30966b123f7812506

maintenance/mediawiki.Title/generatePhpCharToUpperMappings.php
resources/src/mediawiki.Title/Title.js
resources/src/mediawiki.Title/phpCharToUpper.json

index 5dd9432..e1a50ea 100755 (executable)
@@ -67,7 +67,13 @@ class GeneratePhpCharToUpperMappings extends Maintenance {
                        $phpUpper = $wgContLang->ucfirst( $char );
                        $jsUpper = $jsUpperChars[$i];
                        if ( $jsUpper !== $phpUpper ) {
-                               $data[$char] = $phpUpper;
+                               if ( $char === $phpUpper ) {
+                                       // Optimisation: Use the empty string to signal "leave character unchanged".
+                                       // Reduces the transfer size by ~50%. Reduces browser memory cost as well.
+                                       $data[$char] = '';
+                               } else {
+                                       $data[$char] = $phpUpper;
+                               }
                        }
                }
 
index 3f39fd1..843f00f 100644 (file)
 
 /* Private members */
 
-var
+var toUpperMap,
        mwString = require( 'mediawiki.String' ),
 
-       toUpperMapping = require( './phpCharToUpper.json' ),
-
        namespaceIds = mw.config.get( 'wgNamespaceIds' ),
 
        /**
@@ -765,8 +763,15 @@ Title.normalizeExtension = function ( extension ) {
  * @return {string} Unicode character, in upper case, according to the same rules as in PHP
  */
 Title.phpCharToUpper = function ( chr ) {
-       var mapped = toUpperMapping[ chr ];
-       return mapped || chr.toUpperCase();
+       if ( !toUpperMap ) {
+               toUpperMap = require( './phpCharToUpper.json' );
+       }
+       if ( toUpperMap[ chr ] === '' ) {
+               // Optimisation: When the override is to keep the character unchanged,
+               // we use an empty string in JSON. This reduces the data by 50%.
+               return chr;
+       }
+       return toUpperMap[ chr ] || chr.toUpperCase();
 };
 
 /* Public members */
index 2ba08cf..0334039 100644 (file)
 {
-       "ß": "ß",
-       "ʼn": "ʼn",
-       "ƀ": "ƀ",
-       "ƚ": "ƚ",
-       "Dž": "Dž",
+       "ß": "",
+       "ʼn": "",
+       "ƀ": "",
+       "ƚ": "",
+       "Dž": "",
        "dž": "Dž",
-       "Lj": "Lj",
+       "Lj": "",
        "lj": "Lj",
-       "Nj": "Nj",
+       "Nj": "",
        "nj": "Nj",
-       "ǰ": "ǰ",
-       "Dz": "Dz",
+       "ǰ": "",
+       "Dz": "",
        "dz": "Dz",
-       "ȼ": "ȼ",
-       "ȿ": "ȿ",
-       "ɀ": "ɀ",
-       "ɂ": "ɂ",
-       "ɇ": "ɇ",
-       "ɉ": "ɉ",
-       "ɋ": "ɋ",
-       "ɍ": "ɍ",
-       "ɏ": "ɏ",
-       "ɐ": "ɐ",
-       "ɑ": "ɑ",
-       "ɒ": "ɒ",
-       "ɜ": "ɜ",
-       "ɡ": "ɡ",
-       "ɥ": "ɥ",
-       "ɦ": "ɦ",
-       "ɪ": "ɪ",
-       "ɫ": "ɫ",
-       "ɬ": "ɬ",
-       "ɱ": "ɱ",
-       "ɽ": "ɽ",
-       "ʂ": "ʂ",
-       "ʇ": "ʇ",
-       "ʉ": "ʉ",
-       "ʌ": "ʌ",
-       "ʝ": "ʝ",
-       "ʞ": "ʞ",
-       "ͅ": "ͅ",
-       "ͱ": "ͱ",
-       "ͳ": "ͳ",
-       "ͷ": "ͷ",
-       "ͻ": "ͻ",
-       "ͼ": "ͼ",
-       "ͽ": "ͽ",
-       "ΐ": "ΐ",
-       "ΰ": "ΰ",
-       "ϗ": "ϗ",
+       "ȼ": "",
+       "ȿ": "",
+       "ɀ": "",
+       "ɂ": "",
+       "ɇ": "",
+       "ɉ": "",
+       "ɋ": "",
+       "ɍ": "",
+       "ɏ": "",
+       "ɐ": "",
+       "ɑ": "",
+       "ɒ": "",
+       "ɜ": "",
+       "ɡ": "",
+       "ɥ": "",
+       "ɦ": "",
+       "ɪ": "",
+       "ɫ": "",
+       "ɬ": "",
+       "ɱ": "",
+       "ɽ": "",
+       "ʂ": "",
+       "ʇ": "",
+       "ʉ": "",
+       "ʌ": "",
+       "ʝ": "",
+       "ʞ": "",
+       "ͅ": "",
+       "ͱ": "",
+       "ͳ": "",
+       "ͷ": "",
+       "ͻ": "",
+       "ͼ": "",
+       "ͽ": "",
+       "ΐ": "",
+       "ΰ": "",
+       "ϗ": "",
        "ϲ": "Σ",
-       "ϳ": "ϳ",
-       "ϸ": "ϸ",
-       "ϻ": "ϻ",
-       "ӏ": "ӏ",
-       "ӷ": "ӷ",
-       "ӻ": "ӻ",
-       "ӽ": "ӽ",
-       "ӿ": "ӿ",
-       "ԑ": "ԑ",
-       "ԓ": "ԓ",
-       "ԕ": "ԕ",
-       "ԗ": "ԗ",
-       "ԙ": "ԙ",
-       "ԛ": "ԛ",
-       "ԝ": "ԝ",
-       "ԟ": "ԟ",
-       "ԡ": "ԡ",
-       "ԣ": "ԣ",
-       "ԥ": "ԥ",
-       "ԧ": "ԧ",
-       "ԩ": "ԩ",
-       "ԫ": "ԫ",
-       "ԭ": "ԭ",
-       "ԯ": "ԯ",
-       "և": "և",
-       "ა": "",
-       "ბ": "",
-       "გ": "",
-       "დ": "",
-       "ე": "",
-       "ვ": "",
-       "ზ": "",
-       "თ": "",
-       "ი": "",
-       "კ": "",
-       "ლ": "",
-       "მ": "",
-       "ნ": "",
-       "ო": "",
-       "პ": "",
-       "ჟ": "",
-       "რ": "",
-       "ს": "",
-       "ტ": "",
-       "უ": "",
-       "ფ": "",
-       "ქ": "",
-       "ღ": "",
-       "ყ": "",
-       "შ": "",
-       "ჩ": "",
-       "ც": "",
-       "ძ": "",
-       "წ": "",
-       "ჭ": "",
-       "ხ": "",
-       "ჯ": "",
-       "ჰ": "",
-       "ჱ": "",
-       "ჲ": "",
-       "ჳ": "",
-       "ჴ": "",
-       "ჵ": "",
-       "ჶ": "",
-       "ჷ": "",
-       "ჸ": "",
-       "ჹ": "",
-       "ჺ": "",
-       "ჽ": "",
-       "ჾ": "",
-       "ჿ": "",
-       "ᏸ": "",
-       "ᏹ": "",
-       "ᏺ": "",
-       "ᏻ": "",
-       "ᏼ": "",
-       "ᏽ": "",
-       "ᲀ": "",
-       "ᲁ": "",
-       "ᲂ": "",
-       "ᲃ": "",
-       "ᲄ": "",
-       "ᲅ": "",
-       "ᲆ": "",
-       "ᲇ": "",
-       "ᲈ": "",
-       "ᵹ": "",
-       "ᵽ": "",
-       "ᶎ": "",
-       "ẖ": "",
-       "ẗ": "",
-       "ẘ": "",
-       "ẙ": "",
-       "ẚ": "",
-       "ỻ": "",
-       "ỽ": "",
-       "ỿ": "ỿ",
-       "ὐ": "",
-       "ὒ": "",
-       "ὔ": "",
-       "ὖ": "",
+       "ϳ": "",
+       "ϸ": "",
+       "ϻ": "",
+       "ӏ": "",
+       "ӷ": "",
+       "ӻ": "",
+       "ӽ": "",
+       "ӿ": "",
+       "ԑ": "",
+       "ԓ": "",
+       "ԕ": "",
+       "ԗ": "",
+       "ԙ": "",
+       "ԛ": "",
+       "ԝ": "",
+       "ԟ": "",
+       "ԡ": "",
+       "ԣ": "",
+       "ԥ": "",
+       "ԧ": "",
+       "ԩ": "",
+       "ԫ": "",
+       "ԭ": "",
+       "ԯ": "",
+       "և": "",
+       "ა": "",
+       "ბ": "",
+       "გ": "",
+       "დ": "",
+       "ე": "",
+       "ვ": "",
+       "ზ": "",
+       "თ": "",
+       "ი": "",
+       "კ": "",
+       "ლ": "",
+       "მ": "",
+       "ნ": "",
+       "ო": "",
+       "პ": "",
+       "ჟ": "",
+       "რ": "",
+       "ს": "",
+       "ტ": "",
+       "უ": "",
+       "ფ": "",
+       "ქ": "",
+       "ღ": "",
+       "ყ": "",
+       "შ": "",
+       "ჩ": "",
+       "ც": "",
+       "ძ": "",
+       "წ": "",
+       "ჭ": "",
+       "ხ": "",
+       "ჯ": "",
+       "ჰ": "",
+       "ჱ": "",
+       "ჲ": "",
+       "ჳ": "",
+       "ჴ": "",
+       "ჵ": "",
+       "ჶ": "",
+       "ჷ": "",
+       "ჸ": "",
+       "ჹ": "",
+       "ჺ": "",
+       "ჽ": "",
+       "ჾ": "",
+       "ჿ": "",
+       "ᏸ": "",
+       "ᏹ": "",
+       "ᏺ": "",
+       "ᏻ": "",
+       "ᏼ": "",
+       "ᏽ": "",
+       "ᲀ": "",
+       "ᲁ": "",
+       "ᲂ": "",
+       "ᲃ": "",
+       "ᲄ": "",
+       "ᲅ": "",
+       "ᲆ": "",
+       "ᲇ": "",
+       "ᲈ": "",
+       "ᵹ": "",
+       "ᵽ": "",
+       "ᶎ": "",
+       "ẖ": "",
+       "ẗ": "",
+       "ẘ": "",
+       "ẙ": "",
+       "ẚ": "",
+       "ỻ": "",
+       "ỽ": "",
+       "ỿ": "",
+       "ὐ": "",
+       "ὒ": "",
+       "ὔ": "",
+       "ὖ": "",
        "ᾀ": "ᾈ",
        "ᾁ": "ᾉ",
        "ᾂ": "ᾊ",
        "ᾅ": "ᾍ",
        "ᾆ": "ᾎ",
        "ᾇ": "ᾏ",
-       "ᾈ": "",
-       "ᾉ": "",
-       "ᾊ": "",
-       "ᾋ": "",
-       "ᾌ": "",
-       "ᾍ": "",
-       "ᾎ": "",
-       "ᾏ": "",
+       "ᾈ": "",
+       "ᾉ": "",
+       "ᾊ": "",
+       "ᾋ": "",
+       "ᾌ": "",
+       "ᾍ": "",
+       "ᾎ": "",
+       "ᾏ": "",
        "ᾐ": "ᾘ",
        "ᾑ": "ᾙ",
        "ᾒ": "ᾚ",
        "ᾕ": "ᾝ",
        "ᾖ": "ᾞ",
        "ᾗ": "ᾟ",
-       "ᾘ": "",
-       "ᾙ": "",
-       "ᾚ": "",
-       "ᾛ": "",
-       "ᾜ": "",
-       "ᾝ": "",
-       "ᾞ": "",
-       "ᾟ": "",
+       "ᾘ": "",
+       "ᾙ": "",
+       "ᾚ": "",
+       "ᾛ": "",
+       "ᾜ": "",
+       "ᾝ": "",
+       "ᾞ": "",
+       "ᾟ": "",
        "ᾠ": "ᾨ",
        "ᾡ": "ᾩ",
        "ᾢ": "ᾪ",
        "ᾥ": "ᾭ",
        "ᾦ": "ᾮ",
        "ᾧ": "ᾯ",
-       "ᾨ": "",
-       "ᾩ": "",
-       "ᾪ": "",
-       "ᾫ": "",
-       "ᾬ": "",
-       "ᾭ": "",
-       "ᾮ": "",
-       "ᾯ": "",
-       "ᾲ": "",
+       "ᾨ": "",
+       "ᾩ": "",
+       "ᾪ": "",
+       "ᾫ": "",
+       "ᾬ": "",
+       "ᾭ": "",
+       "ᾮ": "",
+       "ᾯ": "",
+       "ᾲ": "",
        "ᾳ": "ᾼ",
-       "ᾴ": "",
-       "ᾶ": "",
-       "ᾷ": "",
-       "ᾼ": "",
-       "ῂ": "",
+       "ᾴ": "",
+       "ᾶ": "",
+       "ᾷ": "",
+       "ᾼ": "",
+       "ῂ": "",
        "ῃ": "ῌ",
-       "ῄ": "",
-       "ῆ": "",
-       "ῇ": "",
-       "ῌ": "",
-       "ῒ": "",
-       "ΐ": "",
-       "ῖ": "",
-       "ῗ": "",
-       "ῢ": "",
-       "ΰ": "",
-       "ῤ": "",
-       "ῦ": "",
-       "ῧ": "",
-       "ῲ": "",
+       "ῄ": "",
+       "ῆ": "",
+       "ῇ": "",
+       "ῌ": "",
+       "ῒ": "",
+       "ΐ": "",
+       "ῖ": "",
+       "ῗ": "",
+       "ῢ": "",
+       "ΰ": "",
+       "ῤ": "",
+       "ῦ": "",
+       "ῧ": "",
+       "ῲ": "",
        "ῳ": "ῼ",
-       "ῴ": "",
-       "ῶ": "",
-       "ῷ": "",
-       "ῼ": "",
-       "ⅎ": "",
-       "ⅰ": "",
-       "ⅱ": "",
-       "ⅲ": "",
-       "ⅳ": "",
-       "ⅴ": "",
-       "ⅵ": "",
-       "ⅶ": "",
-       "ⅷ": "",
-       "ⅸ": "",
-       "ⅹ": "",
-       "ⅺ": "",
-       "ⅻ": "",
-       "ⅼ": "",
-       "ⅽ": "",
-       "ⅾ": "",
-       "ⅿ": "",
-       "ↄ": "",
-       "ⓐ": "",
-       "ⓑ": "",
-       "ⓒ": "",
-       "ⓓ": "",
-       "ⓔ": "",
-       "ⓕ": "",
-       "ⓖ": "",
-       "ⓗ": "",
-       "ⓘ": "",
-       "ⓙ": "",
-       "ⓚ": "",
-       "ⓛ": "",
-       "ⓜ": "",
-       "ⓝ": "",
-       "ⓞ": "",
-       "ⓟ": "",
-       "ⓠ": "",
-       "ⓡ": "",
-       "ⓢ": "",
-       "ⓣ": "",
-       "ⓤ": "",
-       "ⓥ": "",
-       "ⓦ": "",
-       "ⓧ": "",
-       "ⓨ": "",
-       "ⓩ": "",
-       "ⰰ": "",
-       "ⰱ": "",
-       "ⰲ": "",
-       "ⰳ": "",
-       "ⰴ": "",
-       "ⰵ": "",
-       "ⰶ": "",
-       "ⰷ": "",
-       "ⰸ": "",
-       "ⰹ": "",
-       "ⰺ": "",
-       "ⰻ": "",
-       "ⰼ": "",
-       "ⰽ": "",
-       "ⰾ": "",
-       "ⰿ": "ⰿ",
-       "ⱀ": "",
-       "ⱁ": "",
-       "ⱂ": "",
-       "ⱃ": "",
-       "ⱄ": "",
-       "ⱅ": "",
-       "ⱆ": "",
-       "ⱇ": "",
-       "ⱈ": "",
-       "ⱉ": "",
-       "ⱊ": "",
-       "ⱋ": "",
-       "ⱌ": "",
-       "ⱍ": "",
-       "ⱎ": "",
-       "ⱏ": "",
-       "ⱐ": "",
-       "ⱑ": "",
-       "ⱒ": "",
-       "ⱓ": "",
-       "ⱔ": "",
-       "ⱕ": "",
-       "ⱖ": "",
-       "ⱗ": "",
-       "ⱘ": "",
-       "ⱙ": "",
-       "ⱚ": "",
-       "ⱛ": "",
-       "ⱜ": "",
-       "ⱝ": "",
-       "ⱞ": "",
-       "ⱡ": "",
-       "ⱥ": "",
-       "ⱦ": "",
-       "ⱨ": "",
-       "ⱪ": "",
-       "ⱬ": "",
-       "ⱳ": "",
-       "ⱶ": "",
-       "ⲁ": "",
-       "ⲃ": "",
-       "ⲅ": "",
-       "ⲇ": "",
-       "ⲉ": "",
-       "ⲋ": "",
-       "ⲍ": "",
-       "ⲏ": "",
-       "ⲑ": "",
-       "ⲓ": "",
-       "ⲕ": "",
-       "ⲗ": "",
-       "ⲙ": "",
-       "ⲛ": "",
-       "ⲝ": "",
-       "ⲟ": "",
-       "ⲡ": "",
-       "ⲣ": "",
-       "ⲥ": "",
-       "ⲧ": "",
-       "ⲩ": "",
-       "ⲫ": "",
-       "ⲭ": "",
-       "ⲯ": "",
-       "ⲱ": "",
-       "ⲳ": "",
-       "ⲵ": "",
-       "ⲷ": "",
-       "ⲹ": "",
-       "ⲻ": "",
-       "ⲽ": "",
-       "ⲿ": "ⲿ",
-       "ⳁ": "",
-       "ⳃ": "",
-       "ⳅ": "",
-       "ⳇ": "",
-       "ⳉ": "",
-       "ⳋ": "",
-       "ⳍ": "",
-       "ⳏ": "",
-       "ⳑ": "",
-       "ⳓ": "",
-       "ⳕ": "",
-       "ⳗ": "",
-       "ⳙ": "",
-       "ⳛ": "",
-       "ⳝ": "",
-       "ⳟ": "",
-       "ⳡ": "",
-       "ⳣ": "",
-       "ⳬ": "",
-       "ⳮ": "",
-       "ⳳ": "",
-       "ⴀ": "",
-       "ⴁ": "",
-       "ⴂ": "",
-       "ⴃ": "",
-       "ⴄ": "",
-       "ⴅ": "",
-       "ⴆ": "",
-       "ⴇ": "",
-       "ⴈ": "",
-       "ⴉ": "",
-       "ⴊ": "",
-       "ⴋ": "",
-       "ⴌ": "",
-       "ⴍ": "",
-       "ⴎ": "",
-       "ⴏ": "",
-       "ⴐ": "",
-       "ⴑ": "",
-       "ⴒ": "",
-       "ⴓ": "",
-       "ⴔ": "",
-       "ⴕ": "",
-       "ⴖ": "",
-       "ⴗ": "",
-       "ⴘ": "",
-       "ⴙ": "",
-       "ⴚ": "",
-       "ⴛ": "",
-       "ⴜ": "",
-       "ⴝ": "",
-       "ⴞ": "",
-       "ⴟ": "",
-       "ⴠ": "",
-       "ⴡ": "",
-       "ⴢ": "",
-       "ⴣ": "",
-       "ⴤ": "",
-       "ⴥ": "",
-       "ⴧ": "",
-       "ⴭ": "",
-       "ꙁ": "",
-       "ꙃ": "",
-       "ꙅ": "",
-       "ꙇ": "",
-       "ꙉ": "",
-       "ꙋ": "",
-       "ꙍ": "",
-       "ꙏ": "",
-       "ꙑ": "",
-       "ꙓ": "",
-       "ꙕ": "",
-       "ꙗ": "",
-       "ꙙ": "",
-       "ꙛ": "",
-       "ꙝ": "",
-       "ꙟ": "",
-       "ꙡ": "",
-       "ꙣ": "",
-       "ꙥ": "",
-       "ꙧ": "",
-       "ꙩ": "",
-       "ꙫ": "",
-       "ꙭ": "",
-       "ꚁ": "",
-       "ꚃ": "",
-       "ꚅ": "",
-       "ꚇ": "",
-       "ꚉ": "",
-       "ꚋ": "",
-       "ꚍ": "",
-       "ꚏ": "",
-       "ꚑ": "",
-       "ꚓ": "",
-       "ꚕ": "",
-       "ꚗ": "",
-       "ꚙ": "",
-       "ꚛ": "",
-       "ꜣ": "",
-       "ꜥ": "",
-       "ꜧ": "",
-       "ꜩ": "",
-       "ꜫ": "",
-       "ꜭ": "",
-       "ꜯ": "",
-       "ꜳ": "",
-       "ꜵ": "",
-       "ꜷ": "",
-       "ꜹ": "",
-       "ꜻ": "",
-       "ꜽ": "",
-       "ꜿ": "",
-       "ꝁ": "",
-       "ꝃ": "",
-       "ꝅ": "",
-       "ꝇ": "",
-       "ꝉ": "",
-       "ꝋ": "",
-       "ꝍ": "",
-       "ꝏ": "",
-       "ꝑ": "",
-       "ꝓ": "",
-       "ꝕ": "",
-       "ꝗ": "",
-       "ꝙ": "",
-       "ꝛ": "",
-       "ꝝ": "",
-       "ꝟ": "",
-       "ꝡ": "",
-       "ꝣ": "",
-       "ꝥ": "",
-       "ꝧ": "",
-       "ꝩ": "",
-       "ꝫ": "",
-       "ꝭ": "",
-       "ꝯ": "",
-       "ꝺ": "",
-       "ꝼ": "",
-       "ꝿ": "",
-       "ꞁ": "",
-       "ꞃ": "",
-       "ꞅ": "",
-       "ꞇ": "",
-       "ꞌ": "",
-       "ꞑ": "",
-       "ꞓ": "",
-       "ꞔ": "",
-       "ꞗ": "",
-       "ꞙ": "",
-       "ꞛ": "",
-       "ꞝ": "",
-       "ꞟ": "",
-       "ꞡ": "",
-       "ꞣ": "",
-       "ꞥ": "",
-       "ꞧ": "",
-       "ꞩ": "",
-       "ꞵ": "",
-       "ꞷ": "",
-       "ꞹ": "",
-       "ꞻ": "",
-       "ꞽ": "",
-       "ꞿ": "",
-       "ꟃ": "",
-       "ꭓ": "",
-       "ꭰ": "",
-       "ꭱ": "",
-       "ꭲ": "",
-       "ꭳ": "",
-       "ꭴ": "",
-       "ꭵ": "",
-       "ꭶ": "",
-       "ꭷ": "",
-       "ꭸ": "",
-       "ꭹ": "",
-       "ꭺ": "",
-       "ꭻ": "",
-       "ꭼ": "",
-       "ꭽ": "",
-       "ꭾ": "",
-       "ꭿ": "ꭿ",
-       "ꮀ": "",
-       "ꮁ": "",
-       "ꮂ": "",
-       "ꮃ": "",
-       "ꮄ": "",
-       "ꮅ": "",
-       "ꮆ": "",
-       "ꮇ": "",
-       "ꮈ": "",
-       "ꮉ": "",
-       "ꮊ": "",
-       "ꮋ": "",
-       "ꮌ": "",
-       "ꮍ": "",
-       "ꮎ": "",
-       "ꮏ": "",
-       "ꮐ": "",
-       "ꮑ": "",
-       "ꮒ": "",
-       "ꮓ": "",
-       "ꮔ": "",
-       "ꮕ": "",
-       "ꮖ": "",
-       "ꮗ": "",
-       "ꮘ": "",
-       "ꮙ": "",
-       "ꮚ": "",
-       "ꮛ": "",
-       "ꮜ": "",
-       "ꮝ": "",
-       "ꮞ": "",
-       "ꮟ": "",
-       "ꮠ": "",
-       "ꮡ": "",
-       "ꮢ": "",
-       "ꮣ": "",
-       "ꮤ": "",
-       "ꮥ": "",
-       "ꮦ": "",
-       "ꮧ": "",
-       "ꮨ": "",
-       "ꮩ": "",
-       "ꮪ": "",
-       "ꮫ": "",
-       "ꮬ": "",
-       "ꮭ": "",
-       "ꮮ": "",
-       "ꮯ": "",
-       "ꮰ": "",
-       "ꮱ": "",
-       "ꮲ": "",
-       "ꮳ": "",
-       "ꮴ": "",
-       "ꮵ": "",
-       "ꮶ": "",
-       "ꮷ": "",
-       "ꮸ": "",
-       "ꮹ": "",
-       "ꮺ": "",
-       "ꮻ": "",
-       "ꮼ": "",
-       "ꮽ": "",
-       "ꮾ": "",
-       "ꮿ": "ꮿ",
-       "ff": "",
-       "fi": "",
-       "fl": "",
-       "ffi": "",
-       "ffl": "",
-       "ſt": "",
-       "st": "",
-       "ﬓ": "",
-       "ﬔ": "",
-       "ﬕ": "",
-       "ﬖ": "",
-       "ﬗ": "",
-       "𐑎": "𐑎",
-       "𐑏": "𐑏",
-       "𐓘": "𐓘",
-       "𐓙": "𐓙",
-       "𐓚": "𐓚",
-       "𐓛": "𐓛",
-       "𐓜": "𐓜",
-       "𐓝": "𐓝",
-       "𐓞": "𐓞",
-       "𐓟": "𐓟",
-       "𐓠": "𐓠",
-       "𐓡": "𐓡",
-       "𐓢": "𐓢",
-       "𐓣": "𐓣",
-       "𐓤": "𐓤",
-       "𐓥": "𐓥",
-       "𐓦": "𐓦",
-       "𐓧": "𐓧",
-       "𐓨": "𐓨",
-       "𐓩": "𐓩",
-       "𐓪": "𐓪",
-       "𐓫": "𐓫",
-       "𐓬": "𐓬",
-       "𐓭": "𐓭",
-       "𐓮": "𐓮",
-       "𐓯": "𐓯",
-       "𐓰": "𐓰",
-       "𐓱": "𐓱",
-       "𐓲": "𐓲",
-       "𐓳": "𐓳",
-       "𐓴": "𐓴",
-       "𐓵": "𐓵",
-       "𐓶": "𐓶",
-       "𐓷": "𐓷",
-       "𐓸": "𐓸",
-       "𐓹": "𐓹",
-       "𐓺": "𐓺",
-       "𐓻": "𐓻",
-       "𐳀": "𐳀",
-       "𐳁": "𐳁",
-       "𐳂": "𐳂",
-       "𐳃": "𐳃",
-       "𐳄": "𐳄",
-       "𐳅": "𐳅",
-       "𐳆": "𐳆",
-       "𐳇": "𐳇",
-       "𐳈": "𐳈",
-       "𐳉": "𐳉",
-       "𐳊": "𐳊",
-       "𐳋": "𐳋",
-       "𐳌": "𐳌",
-       "𐳍": "𐳍",
-       "𐳎": "𐳎",
-       "𐳏": "𐳏",
-       "𐳐": "𐳐",
-       "𐳑": "𐳑",
-       "𐳒": "𐳒",
-       "𐳓": "𐳓",
-       "𐳔": "𐳔",
-       "𐳕": "𐳕",
-       "𐳖": "𐳖",
-       "𐳗": "𐳗",
-       "𐳘": "𐳘",
-       "𐳙": "𐳙",
-       "𐳚": "𐳚",
-       "𐳛": "𐳛",
-       "𐳜": "𐳜",
-       "𐳝": "𐳝",
-       "𐳞": "𐳞",
-       "𐳟": "𐳟",
-       "𐳠": "𐳠",
-       "𐳡": "𐳡",
-       "𐳢": "𐳢",
-       "𐳣": "𐳣",
-       "𐳤": "𐳤",
-       "𐳥": "𐳥",
-       "𐳦": "𐳦",
-       "𐳧": "𐳧",
-       "𐳨": "𐳨",
-       "𐳩": "𐳩",
-       "𐳪": "𐳪",
-       "𐳫": "𐳫",
-       "𐳬": "𐳬",
-       "𐳭": "𐳭",
-       "𐳮": "𐳮",
-       "𐳯": "𐳯",
-       "𐳰": "𐳰",
-       "𐳱": "𐳱",
-       "𐳲": "𐳲",
-       "𑣀": "𑣀",
-       "𑣁": "𑣁",
-       "𑣂": "𑣂",
-       "𑣃": "𑣃",
-       "𑣄": "𑣄",
-       "𑣅": "𑣅",
-       "𑣆": "𑣆",
-       "𑣇": "𑣇",
-       "𑣈": "𑣈",
-       "𑣉": "𑣉",
-       "𑣊": "𑣊",
-       "𑣋": "𑣋",
-       "𑣌": "𑣌",
-       "𑣍": "𑣍",
-       "𑣎": "𑣎",
-       "𑣏": "𑣏",
-       "𑣐": "𑣐",
-       "𑣑": "𑣑",
-       "𑣒": "𑣒",
-       "𑣓": "𑣓",
-       "𑣔": "𑣔",
-       "𑣕": "𑣕",
-       "𑣖": "𑣖",
-       "𑣗": "𑣗",
-       "𑣘": "𑣘",
-       "𑣙": "𑣙",
-       "𑣚": "𑣚",
-       "𑣛": "𑣛",
-       "𑣜": "𑣜",
-       "𑣝": "𑣝",
-       "𑣞": "𑣞",
-       "𑣟": "𑣟",
-       "𖹠": "𖹠",
-       "𖹡": "𖹡",
-       "𖹢": "𖹢",
-       "𖹣": "𖹣",
-       "𖹤": "𖹤",
-       "𖹥": "𖹥",
-       "𖹦": "𖹦",
-       "𖹧": "𖹧",
-       "𖹨": "𖹨",
-       "𖹩": "𖹩",
-       "𖹪": "𖹪",
-       "𖹫": "𖹫",
-       "𖹬": "𖹬",
-       "𖹭": "𖹭",
-       "𖹮": "𖹮",
-       "𖹯": "𖹯",
-       "𖹰": "𖹰",
-       "𖹱": "𖹱",
-       "𖹲": "𖹲",
-       "𖹳": "𖹳",
-       "𖹴": "𖹴",
-       "𖹵": "𖹵",
-       "𖹶": "𖹶",
-       "𖹷": "𖹷",
-       "𖹸": "𖹸",
-       "𖹹": "𖹹",
-       "𖹺": "𖹺",
-       "𖹻": "𖹻",
-       "𖹼": "𖹼",
-       "𖹽": "𖹽",
-       "𖹾": "𖹾",
-       "𖹿": "𖹿",
-       "𞤢": "𞤢",
-       "𞤣": "𞤣",
-       "𞤤": "𞤤",
-       "𞤥": "𞤥",
-       "𞤦": "𞤦",
-       "𞤧": "𞤧",
-       "𞤨": "𞤨",
-       "𞤩": "𞤩",
-       "𞤪": "𞤪",
-       "𞤫": "𞤫",
-       "𞤬": "𞤬",
-       "𞤭": "𞤭",
-       "𞤮": "𞤮",
-       "𞤯": "𞤯",
-       "𞤰": "𞤰",
-       "𞤱": "𞤱",
-       "𞤲": "𞤲",
-       "𞤳": "𞤳",
-       "𞤴": "𞤴",
-       "𞤵": "𞤵",
-       "𞤶": "𞤶",
-       "𞤷": "𞤷",
-       "𞤸": "𞤸",
-       "𞤹": "𞤹",
-       "𞤺": "𞤺",
-       "𞤻": "𞤻",
-       "𞤼": "𞤼",
-       "𞤽": "𞤽",
-       "𞤾": "𞤾",
-       "𞤿": "𞤿",
-       "𞥀": "𞥀",
-       "𞥁": "𞥁",
-       "𞥂": "𞥂",
-       "𞥃": "𞥃"
+       "ῴ": "",
+       "ῶ": "",
+       "ῷ": "",
+       "ῼ": "",
+       "ⅎ": "",
+       "ⅰ": "",
+       "ⅱ": "",
+       "ⅲ": "",
+       "ⅳ": "",
+       "ⅴ": "",
+       "ⅵ": "",
+       "ⅶ": "",
+       "ⅷ": "",
+       "ⅸ": "",
+       "ⅹ": "",
+       "ⅺ": "",
+       "ⅻ": "",
+       "ⅼ": "",
+       "ⅽ": "",
+       "ⅾ": "",
+       "ⅿ": "",
+       "ↄ": "",
+       "ⓐ": "",
+       "ⓑ": "",
+       "ⓒ": "",
+       "ⓓ": "",
+       "ⓔ": "",
+       "ⓕ": "",
+       "ⓖ": "",
+       "ⓗ": "",
+       "ⓘ": "",
+       "ⓙ": "",
+       "ⓚ": "",
+       "ⓛ": "",
+       "ⓜ": "",
+       "ⓝ": "",
+       "ⓞ": "",
+       "ⓟ": "",
+       "ⓠ": "",
+       "ⓡ": "",
+       "ⓢ": "",
+       "ⓣ": "",
+       "ⓤ": "",
+       "ⓥ": "",
+       "ⓦ": "",
+       "ⓧ": "",
+       "ⓨ": "",
+       "ⓩ": "",
+       "ⰰ": "",
+       "ⰱ": "",
+       "ⰲ": "",
+       "ⰳ": "",
+       "ⰴ": "",
+       "ⰵ": "",
+       "ⰶ": "",
+       "ⰷ": "",
+       "ⰸ": "",
+       "ⰹ": "",
+       "ⰺ": "",
+       "ⰻ": "",
+       "ⰼ": "",
+       "ⰽ": "",
+       "ⰾ": "",
+       "ⰿ": "",
+       "ⱀ": "",
+       "ⱁ": "",
+       "ⱂ": "",
+       "ⱃ": "",
+       "ⱄ": "",
+       "ⱅ": "",
+       "ⱆ": "",
+       "ⱇ": "",
+       "ⱈ": "",
+       "ⱉ": "",
+       "ⱊ": "",
+       "ⱋ": "",
+       "ⱌ": "",
+       "ⱍ": "",
+       "ⱎ": "",
+       "ⱏ": "",
+       "ⱐ": "",
+       "ⱑ": "",
+       "ⱒ": "",
+       "ⱓ": "",
+       "ⱔ": "",
+       "ⱕ": "",
+       "ⱖ": "",
+       "ⱗ": "",
+       "ⱘ": "",
+       "ⱙ": "",
+       "ⱚ": "",
+       "ⱛ": "",
+       "ⱜ": "",
+       "ⱝ": "",
+       "ⱞ": "",
+       "ⱡ": "",
+       "ⱥ": "",
+       "ⱦ": "",
+       "ⱨ": "",
+       "ⱪ": "",
+       "ⱬ": "",
+       "ⱳ": "",
+       "ⱶ": "",
+       "ⲁ": "",
+       "ⲃ": "",
+       "ⲅ": "",
+       "ⲇ": "",
+       "ⲉ": "",
+       "ⲋ": "",
+       "ⲍ": "",
+       "ⲏ": "",
+       "ⲑ": "",
+       "ⲓ": "",
+       "ⲕ": "",
+       "ⲗ": "",
+       "ⲙ": "",
+       "ⲛ": "",
+       "ⲝ": "",
+       "ⲟ": "",
+       "ⲡ": "",
+       "ⲣ": "",
+       "ⲥ": "",
+       "ⲧ": "",
+       "ⲩ": "",
+       "ⲫ": "",
+       "ⲭ": "",
+       "ⲯ": "",
+       "ⲱ": "",
+       "ⲳ": "",
+       "ⲵ": "",
+       "ⲷ": "",
+       "ⲹ": "",
+       "ⲻ": "",
+       "ⲽ": "",
+       "ⲿ": "",
+       "ⳁ": "",
+       "ⳃ": "",
+       "ⳅ": "",
+       "ⳇ": "",
+       "ⳉ": "",
+       "ⳋ": "",
+       "ⳍ": "",
+       "ⳏ": "",
+       "ⳑ": "",
+       "ⳓ": "",
+       "ⳕ": "",
+       "ⳗ": "",
+       "ⳙ": "",
+       "ⳛ": "",
+       "ⳝ": "",
+       "ⳟ": "",
+       "ⳡ": "",
+       "ⳣ": "",
+       "ⳬ": "",
+       "ⳮ": "",
+       "ⳳ": "",
+       "ⴀ": "",
+       "ⴁ": "",
+       "ⴂ": "",
+       "ⴃ": "",
+       "ⴄ": "",
+       "ⴅ": "",
+       "ⴆ": "",
+       "ⴇ": "",
+       "ⴈ": "",
+       "ⴉ": "",
+       "ⴊ": "",
+       "ⴋ": "",
+       "ⴌ": "",
+       "ⴍ": "",
+       "ⴎ": "",
+       "ⴏ": "",
+       "ⴐ": "",
+       "ⴑ": "",
+       "ⴒ": "",
+       "ⴓ": "",
+       "ⴔ": "",
+       "ⴕ": "",
+       "ⴖ": "",
+       "ⴗ": "",
+       "ⴘ": "",
+       "ⴙ": "",
+       "ⴚ": "",
+       "ⴛ": "",
+       "ⴜ": "",
+       "ⴝ": "",
+       "ⴞ": "",
+       "ⴟ": "",
+       "ⴠ": "",
+       "ⴡ": "",
+       "ⴢ": "",
+       "ⴣ": "",
+       "ⴤ": "",
+       "ⴥ": "",
+       "ⴧ": "",
+       "ⴭ": "",
+       "ꙁ": "",
+       "ꙃ": "",
+       "ꙅ": "",
+       "ꙇ": "",
+       "ꙉ": "",
+       "ꙋ": "",
+       "ꙍ": "",
+       "ꙏ": "",
+       "ꙑ": "",
+       "ꙓ": "",
+       "ꙕ": "",
+       "ꙗ": "",
+       "ꙙ": "",
+       "ꙛ": "",
+       "ꙝ": "",
+       "ꙟ": "",
+       "ꙡ": "",
+       "ꙣ": "",
+       "ꙥ": "",
+       "ꙧ": "",
+       "ꙩ": "",
+       "ꙫ": "",
+       "ꙭ": "",
+       "ꚁ": "",
+       "ꚃ": "",
+       "ꚅ": "",
+       "ꚇ": "",
+       "ꚉ": "",
+       "ꚋ": "",
+       "ꚍ": "",
+       "ꚏ": "",
+       "ꚑ": "",
+       "ꚓ": "",
+       "ꚕ": "",
+       "ꚗ": "",
+       "ꚙ": "",
+       "ꚛ": "",
+       "ꜣ": "",
+       "ꜥ": "",
+       "ꜧ": "",
+       "ꜩ": "",
+       "ꜫ": "",
+       "ꜭ": "",
+       "ꜯ": "",
+       "ꜳ": "",
+       "ꜵ": "",
+       "ꜷ": "",
+       "ꜹ": "",
+       "ꜻ": "",
+       "ꜽ": "",
+       "ꜿ": "",
+       "ꝁ": "",
+       "ꝃ": "",
+       "ꝅ": "",
+       "ꝇ": "",
+       "ꝉ": "",
+       "ꝋ": "",
+       "ꝍ": "",
+       "ꝏ": "",
+       "ꝑ": "",
+       "ꝓ": "",
+       "ꝕ": "",
+       "ꝗ": "",
+       "ꝙ": "",
+       "ꝛ": "",
+       "ꝝ": "",
+       "ꝟ": "",
+       "ꝡ": "",
+       "ꝣ": "",
+       "ꝥ": "",
+       "ꝧ": "",
+       "ꝩ": "",
+       "ꝫ": "",
+       "ꝭ": "",
+       "ꝯ": "",
+       "ꝺ": "",
+       "ꝼ": "",
+       "ꝿ": "",
+       "ꞁ": "",
+       "ꞃ": "",
+       "ꞅ": "",
+       "ꞇ": "",
+       "ꞌ": "",
+       "ꞑ": "",
+       "ꞓ": "",
+       "ꞔ": "",
+       "ꞗ": "",
+       "ꞙ": "",
+       "ꞛ": "",
+       "ꞝ": "",
+       "ꞟ": "",
+       "ꞡ": "",
+       "ꞣ": "",
+       "ꞥ": "",
+       "ꞧ": "",
+       "ꞩ": "",
+       "ꞵ": "",
+       "ꞷ": "",
+       "ꞹ": "",
+       "ꞻ": "",
+       "ꞽ": "",
+       "ꞿ": "",
+       "ꟃ": "",
+       "ꭓ": "",
+       "ꭰ": "",
+       "ꭱ": "",
+       "ꭲ": "",
+       "ꭳ": "",
+       "ꭴ": "",
+       "ꭵ": "",
+       "ꭶ": "",
+       "ꭷ": "",
+       "ꭸ": "",
+       "ꭹ": "",
+       "ꭺ": "",
+       "ꭻ": "",
+       "ꭼ": "",
+       "ꭽ": "",
+       "ꭾ": "",
+       "ꭿ": "",
+       "ꮀ": "",
+       "ꮁ": "",
+       "ꮂ": "",
+       "ꮃ": "",
+       "ꮄ": "",
+       "ꮅ": "",
+       "ꮆ": "",
+       "ꮇ": "",
+       "ꮈ": "",
+       "ꮉ": "",
+       "ꮊ": "",
+       "ꮋ": "",
+       "ꮌ": "",
+       "ꮍ": "",
+       "ꮎ": "",
+       "ꮏ": "",
+       "ꮐ": "",
+       "ꮑ": "",
+       "ꮒ": "",
+       "ꮓ": "",
+       "ꮔ": "",
+       "ꮕ": "",
+       "ꮖ": "",
+       "ꮗ": "",
+       "ꮘ": "",
+       "ꮙ": "",
+       "ꮚ": "",
+       "ꮛ": "",
+       "ꮜ": "",
+       "ꮝ": "",
+       "ꮞ": "",
+       "ꮟ": "",
+       "ꮠ": "",
+       "ꮡ": "",
+       "ꮢ": "",
+       "ꮣ": "",
+       "ꮤ": "",
+       "ꮥ": "",
+       "ꮦ": "",
+       "ꮧ": "",
+       "ꮨ": "",
+       "ꮩ": "",
+       "ꮪ": "",
+       "ꮫ": "",
+       "ꮬ": "",
+       "ꮭ": "",
+       "ꮮ": "",
+       "ꮯ": "",
+       "ꮰ": "",
+       "ꮱ": "",
+       "ꮲ": "",
+       "ꮳ": "",
+       "ꮴ": "",
+       "ꮵ": "",
+       "ꮶ": "",
+       "ꮷ": "",
+       "ꮸ": "",
+       "ꮹ": "",
+       "ꮺ": "",
+       "ꮻ": "",
+       "ꮼ": "",
+       "ꮽ": "",
+       "ꮾ": "",
+       "ꮿ": "",
+       "ff": "",
+       "fi": "",
+       "fl": "",
+       "ffi": "",
+       "ffl": "",
+       "ſt": "",
+       "st": "",
+       "ﬓ": "",
+       "ﬔ": "",
+       "ﬕ": "",
+       "ﬖ": "",
+       "ﬗ": "",
+       "𐑎": "",
+       "𐑏": "",
+       "𐓘": "",
+       "𐓙": "",
+       "𐓚": "",
+       "𐓛": "",
+       "𐓜": "",
+       "𐓝": "",
+       "𐓞": "",
+       "𐓟": "",
+       "𐓠": "",
+       "𐓡": "",
+       "𐓢": "",
+       "𐓣": "",
+       "𐓤": "",
+       "𐓥": "",
+       "𐓦": "",
+       "𐓧": "",
+       "𐓨": "",
+       "𐓩": "",
+       "𐓪": "",
+       "𐓫": "",
+       "𐓬": "",
+       "𐓭": "",
+       "𐓮": "",
+       "𐓯": "",
+       "𐓰": "",
+       "𐓱": "",
+       "𐓲": "",
+       "𐓳": "",
+       "𐓴": "",
+       "𐓵": "",
+       "𐓶": "",
+       "𐓷": "",
+       "𐓸": "",
+       "𐓹": "",
+       "𐓺": "",
+       "𐓻": "",
+       "𐳀": "",
+       "𐳁": "",
+       "𐳂": "",
+       "𐳃": "",
+       "𐳄": "",
+       "𐳅": "",
+       "𐳆": "",
+       "𐳇": "",
+       "𐳈": "",
+       "𐳉": "",
+       "𐳊": "",
+       "𐳋": "",
+       "𐳌": "",
+       "𐳍": "",
+       "𐳎": "",
+       "𐳏": "",
+       "𐳐": "",
+       "𐳑": "",
+       "𐳒": "",
+       "𐳓": "",
+       "𐳔": "",
+       "𐳕": "",
+       "𐳖": "",
+       "𐳗": "",
+       "𐳘": "",
+       "𐳙": "",
+       "𐳚": "",
+       "𐳛": "",
+       "𐳜": "",
+       "𐳝": "",
+       "𐳞": "",
+       "𐳟": "",
+       "𐳠": "",
+       "𐳡": "",
+       "𐳢": "",
+       "𐳣": "",
+       "𐳤": "",
+       "𐳥": "",
+       "𐳦": "",
+       "𐳧": "",
+       "𐳨": "",
+       "𐳩": "",
+       "𐳪": "",
+       "𐳫": "",
+       "𐳬": "",
+       "𐳭": "",
+       "𐳮": "",
+       "𐳯": "",
+       "𐳰": "",
+       "𐳱": "",
+       "𐳲": "",
+       "𑣀": "",
+       "𑣁": "",
+       "𑣂": "",
+       "𑣃": "",
+       "𑣄": "",
+       "𑣅": "",
+       "𑣆": "",
+       "𑣇": "",
+       "𑣈": "",
+       "𑣉": "",
+       "𑣊": "",
+       "𑣋": "",
+       "𑣌": "",
+       "𑣍": "",
+       "𑣎": "",
+       "𑣏": "",
+       "𑣐": "",
+       "𑣑": "",
+       "𑣒": "",
+       "𑣓": "",
+       "𑣔": "",
+       "𑣕": "",
+       "𑣖": "",
+       "𑣗": "",
+       "𑣘": "",
+       "𑣙": "",
+       "𑣚": "",
+       "𑣛": "",
+       "𑣜": "",
+       "𑣝": "",
+       "𑣞": "",
+       "𑣟": "",
+       "𖹠": "",
+       "𖹡": "",
+       "𖹢": "",
+       "𖹣": "",
+       "𖹤": "",
+       "𖹥": "",
+       "𖹦": "",
+       "𖹧": "",
+       "𖹨": "",
+       "𖹩": "",
+       "𖹪": "",
+       "𖹫": "",
+       "𖹬": "",
+       "𖹭": "",
+       "𖹮": "",
+       "𖹯": "",
+       "𖹰": "",
+       "𖹱": "",
+       "𖹲": "",
+       "𖹳": "",
+       "𖹴": "",
+       "𖹵": "",
+       "𖹶": "",
+       "𖹷": "",
+       "𖹸": "",
+       "𖹹": "",
+       "𖹺": "",
+       "𖹻": "",
+       "𖹼": "",
+       "𖹽": "",
+       "𖹾": "",
+       "𖹿": "",
+       "𞤢": "",
+       "𞤣": "",
+       "𞤤": "",
+       "𞤥": "",
+       "𞤦": "",
+       "𞤧": "",
+       "𞤨": "",
+       "𞤩": "",
+       "𞤪": "",
+       "𞤫": "",
+       "𞤬": "",
+       "𞤭": "",
+       "𞤮": "",
+       "𞤯": "",
+       "𞤰": "",
+       "𞤱": "",
+       "𞤲": "",
+       "𞤳": "",
+       "𞤴": "",
+       "𞤵": "",
+       "𞤶": "",
+       "𞤷": "",
+       "𞤸": "",
+       "𞤹": "",
+       "𞤺": "",
+       "𞤻": "",
+       "𞤼": "",
+       "𞤽": "",
+       "𞤾": "",
+       "𞤿": "",
+       "𞥀": "",
+       "𞥁": "",
+       "𞥂": "",
+       "𞥃": ""
 }