From 105eff9dec51bc4898a74af2854ab71f927a5c3b Mon Sep 17 00:00:00 2001 From: Rich Felker Date: Mon, 13 Nov 2017 18:34:27 -0500 Subject: [PATCH] generalize iconv framework for 8-bit codepages previously, 8-bit codepages could only remap the high 128 bytes; the low range was assumed/forced to agree with ascii. interpretation of codepage table headers has been changed so that it's possible to represent mappings for up to 256 slots (fewer if the initial portion of the map is elided because it coincides with unicode codepoints). this requires consuming a bit more of the 10-bit space of characters that can be represented in 8-bit codepages, but there's still a plenty left. the size of the legacy_chars table is actually reduced now by eliding the first 256 entries and considering them to map implicitly via the identity map. before these changes, there seem to have been minor bugs/omissions in codepage table generation, so it's likely that some actual bug fixes are silently included in this commit. round-trip testing of a few codepages was performed on the new version of the code, but no differential testing against the old version was done. --- src/locale/codepages.h | 417 +++++++++++++++++++++------------------ src/locale/iconv.c | 27 +-- src/locale/legacychars.h | 75 ++++--- 3 files changed, 273 insertions(+), 246 deletions(-) diff --git a/src/locale/codepages.h b/src/locale/codepages.h index ab146e89..626d1433 100644 --- a/src/locale/codepages.h +++ b/src/locale/codepages.h @@ -1,265 +1,288 @@ "iso88591\0" "latin1\0" -"\0\200" +"\0\100" "iso88592\0" -"\0\40" -"\0\330\20\313\32\0\244\21\10\0\0\34\122\310\42\240\0\100\212\50\0\334\60\13\33" -"\0\250\41\10\54\0\40\142\10\43\241\324\122\312\50\173\0\0\0\15\0\224\201\3\0" -"\76\0\200\4\0\112\0\0\0\20\102\264\21\7\0\0\334\1\0\0\177\124\2\300\45" -"\0\0\220\10\0\174\0\0\100\15\0\230\221\3\0\77\0\220\4\0\113\0\0\100\20" -"\103\270\41\7\0\0\340\1\0\0\200\130\2\0\46\0\0\240\210\54" +"\0\50" +"\240\20\364\127\116\244\334\364\324\51\250\124\65\125\126\156\265\42\27\134" +"\260\24\24\230\116\264\340\4\225\137\270\130\105\225\126\157\15\66\127\134" +"\111\5\43\214\100\304\314\144\320\61\14\45\143\321\62\30\65\343\214\103" +"\20\355\364\323\64\324\24\145\315\65\115\215\245\115\131\334\164\163\325\67" +"\112\205\43\316\100\344\320\164\320\71\15\245\163\321\72\31\265\343\316\103" +"\21\361\4\324\74\364\30\145\317\75\116\221\245\217\131\374\364\203\25\140" "iso88593\0" -"\0\40" -"\0\130\21\13\0\0\4\100\5\0\0\170\121\210\23\140\0\20\200\50\0\134\1\0\0" -"\0\0\120\5\0\0\174\141\310\23\141\0\20\300\50\0\0\0\100\0\0\360\240\3\0" -"\0\0\0\0\0\0\0\0\0\0\1\0\0\0\0\0\100\1\0\0\114\0\0\0\0\0\114\62\10\0" -"\0\0\0\100\0\0\364\260\3\0\0\0\0\0\0\0\0\0\0\0\1\0\0\0\0\0\104\1\0\0" -"\115\0\0\0\0\0\120\102\210\54" +"\0\50" +"\240\220\364\327\50\244\0\40\322\51\250\260\64\25\107\56\265\2\0\134" +"\260\224\44\313\54\264\324\62\322\55\270\264\104\125\107\57\365\2\100\134" +"\300\4\43\14\0\304\50\204\320\61\310\44\243\314\62\314\64\343\314\63" +"\0\104\43\315\64\324\170\144\315\65\32\145\243\315\66\334\204\25\325\67" +"\340\204\43\16\0\344\54\224\320\71\350\244\243\316\72\354\264\343\316\73" +"\0\304\43\317\74\364\174\144\317\75\33\345\243\317\76\374\210\45\25\140" "iso88594\0" -"\0\40" -"\0\330\100\106\37\0\140\161\6\0\0\34\102\204\24\215\0\100\12\0\0\334\60\213\37" -"\0\144\201\6\54\0\40\122\304\24\216\314\121\12\35\62\0\0\0\0\0\0\0\0\27" -"\76\0\200\4\0\106\0\0\200\26\102\274\121\207\30\0\0\0\0\0\0\144\2\0\0" -"\0\74\22\11\0\63\0\0\0\0\0\0\0\100\27\77\0\220\4\0\107\0\0\300\26" -"\103\300\141\307\30\0\0\0\0\0\0\150\2\0\0\0\100\42\211\54" +"\0\50" +"\240\20\44\323\122\244\230\124\323\51\250\124\45\21\110\133\265\42\327\53" +"\260\24\24\30\123\264\234\144\223\137\270\130\65\121\110\134\5\65\227\120" +"\0\5\43\314\60\304\24\143\214\112\14\45\143\321\62\24\65\343\14\112" +"\20\365\64\24\114\324\124\143\315\65\330\234\245\315\66\334\164\365\325\67" +"\1\205\43\316\70\344\224\143\316\112\15\245\163\321\72\25\265\343\116\112" +"\21\371\104\124\114\364\324\143\317\75\370\240\245\317\76\374\170\5\26\140" "iso88595\0" -"\0\40" -"\0\14\104\120\101\6\35\204\120\102\12\55\304\120\103\16\1\360\20\104" -"\21\111\64\21\105\25\131\164\21\106\31\151\264\21\107\35\171\364\21\110" -"\41\211\64\22\111\45\231\164\22\112\51\251\264\22\113\55\271\364\22\114" -"\61\311\64\23\115\65\331\164\23\116\71\351\264\23\117\75\371\364\23\120" -"\101\11\65\24\121\105\31\165\24\122\111\51\265\24\123\115\71\365\24\124" -"\127\106\45\325\124\124\125\145\325\125\130\145\245\325\126\134\15\320\225\127" +"\0\50" +"\240\104\47\335\164\324\125\147\335\165\330\145\247\335\166" +"\334\265\322\235\167\337\201\27\236\170\343\221\127\236\171" +"\347\241\227\236\172\353\261\327\236\173\357\301\27\237\174" +"\363\321\127\237\175\367\341\227\237\176\373\361\327\237\177\377\1\30\240\200" +"\3\22\130\240\201\7\42\230\240\202\13\62\330\240\203\17\102\30\241\204" +"\23\122\130\241\205\27\142\230\241\206\33\162\330\241\207\46\177\10\142\210" +"\42\216\110\142\211\46\236\210\142\212\52\236\262\42\213" "iso88596\0" -"\0\40" -"\0\4\20\100\0\0\4\20\100\0\1\4\20\100\0\224\1\20\100\0\1\4\20\100\0" -"\1\4\20\100\0\1\4\20\100\145\1\4\20\200\145\1\134\206\131\146" -"\232\155\306\131\147\236\175\6\132\150\242\215\106\132\151\246\235\206\132\152" -"\252\255\306\132\153\256\275\6\133\0\1\4\20\100\0\261\311\66\33\155" -"\265\331\166\33\156\271\351\266\33\157\275\371\366\33\160\301\11\67\134\0" -"\1\4\20\100\0\1\4\20\100\0\1\4\20\100\0" +"\0\50" +"\240\0\0\0\0\244\0\0\0\0\0\0\0\0\0\142\266\2\0\0\0\0\0\0\0\0\0\0\0\0" +"\0\0\0\300\230\0\0\0\0\231\0\224\151\346\231\150\246\251\346\232" +"\154\266\351\346\233\160\306\51\347\234\164\326\151\347\235" +"\170\346\251\347\236\174\366\351\47\0\0\0\0\0\0\177\2\32\250\240" +"\203\22\132\250\241\207\42\232\250\242\213\62\332\250\243\217\102\32\51\0" +"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "iso88597\0" -"\0\40" -"\0\24\151\44\0\124\126\11\0\0\0\0\260\13\0\0\0\20\300\220\0\0\0\0\0" -"\274\364\342\13\0\277\0\23\14\0\302\0\60\14\61\305\30\163\14\62" -"\311\50\263\14\63\315\70\363\14\64\321\110\63\15\65\325\130\23\300\65" -"\330\144\243\315\66\334\164\343\315\67\340\204\43\316\70\344\224\143\316\71" -"\350\244\243\316\72\354\264\343\316\73\360\304\43\317\74\364\324\143\317\75" -"\370\344\243\317\76\374\364\343\317\77\0\5\44\120\0" +"\0\50" +"\240\114\114\361\50\44\227\154\312\51\250\244\222\330\52\254\264\2\100\304" +"\260\304\42\313\54\212\55\306\330\55\215\71\366\330\56\220\365\22\231\144" +"\223\121\126\231\145\227\141\226\231\146\233\161\326\231\147" +"\237\201\26\232\150\243\221\6\100\151\246\235\206\132\152\252\255\306\132\153" +"\256\275\6\133\154\262\315\106\133\155\266\335\206\133\156\272\355\306\133\157" +"\276\375\6\134\160\302\15\107\134\161\306\35\207\134\162\312\55\307\134\163" +"\316\75\7\35\0" "iso88598\0" -"\0\40" -"\0\4\0\0\0\0\0\0\0\0\0\0\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\360\0\0" -"\0\0\0\100\0\1\4\20\100\0\1\4\20\100\0\1\4\20\100\0\1\4\20\100\0\1\4\20\100\0" -"\1\4\20\100\0\1\4\20\100\0\1\4\20\0\221\164\325\145\327\135" -"\170\345\245\327\136\174\365\345\327\137\200\5\46\330\140\204\25\146\330\141" -"\210\45\246\330\142\214\65\346\130\0\1\374\10\144\0" +"\0\50" +"\240\0\40\312\50\244\224\142\312\51\250\244\162\315\52\254\264\342\312\53" +"\260\304\42\313\54\264\324\142\313\55\270\344\162\317\56\274\364\342\13\0" +"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" +"\0\0\0\200\304\102\16\111\144\221\106\36\211\144\222\112\56\311\144\223" +"\116\76\11\145\224\122\116\111\145\225\126\136\211\145\226\132\156\311\45\0" +"\0\64\354\60\0" "iso88599\0" -"\0\120" -"\116\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\170\121\10\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" -"\0\0\0\0\0\117\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\174\141\10\0" +"\0\64" +"\34\105\43\315\64\324\124\143\315\65\330\144\243\315\66\334\260\64\325\67" +"\340\204\43\316\70\344\224\143\316\71\350\244\243\316\72\354\264\343\316\73" +"\35\305\43\317\74\364\324\143\317\75\370\344\243\317\76\374\264\104\325\77" "iso885910\0" -"\0\40" -"\0\330\100\204\24\132\140\41\6\0\147\10\161\110\43\244\0\20\311\34" -"\0\334\120\304\24\133\144\61\6\0\150\14\201\210\43\245\14\51\11\35\62\0\0\0\0" -"\0\0\0\0\27\76\0\200\4\0\106\0\0\0\0\0\274\121\7\0\0\0\0\300\43\0\144\2\0\0" -"\0\0\0\0\0\63\0\0\0\0\0\0\0\100\27\77\0\220\4\0\107\0\0\0\0\0\300\141\7\0" -"\0\0\0\0\44\0\150\2\0\0\0\0\0\0\31" +"\0\50" +"\240\20\44\21\110\50\231\4\323\51\65\101\124\325\126\162\265\362\125\120" +"\260\24\64\121\110\51\235\24\323\55\66\105\144\25\127\163\105\14\226\120" +"\0\5\43\314\60\304\24\143\214\112\14\45\143\321\62\24\65\343\314\63" +"\320\364\64\324\64\324\124\143\115\127\330\234\245\315\66\334\164\343\315\67" +"\1\205\43\316\70\344\224\143\316\112\15\245\163\321\72\25\265\343\316\73" +"\360\370\104\324\74\364\324\143\217\127\370\240\245\317\76\374\364\343\217\114" "iso885911\0" "tis620\0" -"\0\40" -"\0\100\27\235\164\323\121\127\235\165\327\141\227\235\166\333\161\327\235\167" -"\337\201\27\236\170\343\221\127\236\171\347\241\227\236\172" -"\353\261\327\236\173\357\301\27\237\174\363\321\127\237\175" -"\367\341\227\237\176\373\361\327\237\177\377\1\30\240\200\3\22\130\240\201" -"\7\42\230\140\0\1\4\20\200\202\13\62\330\240\203\17\102\30\241\204" -"\23\122\130\241\205\27\142\230\241\206\33\162\330\241\207\37\202\30\242\210" -"\43\222\130\242\211\1\4\20\100\0" +"\0\50" +"\240\170\372\51\250\241\212\72\52\251\245\232\172\52\252\251\252\272\52\253" +"\255\272\372\52\254\261\312\72\53\255\265\332\172\53\256\271\352\272\53\257" +"\275\372\372\53\260\301\12\73\54\261\305\32\173\54\262\311\52\273\54\263" +"\315\72\373\54\264\321\112\73\55\265\325\132\173\55\0\0\0\0\0\266" +"\331\152\273\55\267\335\172\373\55\270\341\212\73\56\271\345\232\173\56\272" +"\351\252\273\56\273\355\272\373\56\274\361\312\73\57\275\0\0\0\0\0" "iso885913\0" -"\0\40" -"\0\44\11\0\0\0\50\11\0\0\15\0\320\7\0\0\0\0\300\2\0\0\0\0\0\110\2\0\0\0" -"\20\0\340\7\0\0\0\0\200\3\66\160\41\3\16\0\0\200\4\21\76\0\0\212\21" -"\122\210\241\305\31\207\264\361\6\0\165\0\0\0\0\231\254\21\110\44" -"\0\210\102\12\0\67\164\61\103\16\0\0\220\104\21\77\0\20\312\21" -"\123\214\261\5\32\210\270\1\7\0\166\0\0\0\0\232\260\41\210\44" -"\0\214\122\212\221" +"\0\50" +"\240\134\54\312\50\244\140\154\312\51\330\244\262\324\52\254\264\342\212\61" +"\260\304\42\313\54\26\327\142\313\55\370\344\302\324\56\274\364\342\213\71" +"\4\251\4\220\101\304\24\143\221\104\14\45\343\26\105\40\301\204\122\115" +"\125\355\324\323\64\103\125\143\315\65\147\345\364\324\127\334\300\45\327\67" +"\5\255\24\320\101\344\224\163\321\104\15\245\363\126\105\41\305\224\222\115" +"\126\361\344\323\74\104\325\143\317\75\150\351\4\25\130\374\304\65\27\305" "iso885914\0" -"\0\40" -"\0\234\210\42\0\74\364\220\42\0\65\2\160\243\212\73\2\0\300\47" -"\53\262\10\105\24\55\272\10\300\213\66\302\210\143\214\74\346\250\243\214" -"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\233\0\0\0\0\0\0\0\300\214\0\0\0\0\0" -"\0\0\320\11\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\234\0\0\0\0\0\0\0\0\215" -"\0\0\0\0\0\0\0\340\11\0" +"\0\50" +"\240\324\153\357\50\12\55\164\357\51\3\247\122\60\276\11\267\342\112\133" +"\371\352\353\321\107\373\362\153\113\277\4\373\153\360\277\12\37\214\60\300" +"\300\4\43\314\60\304\24\143\314\61\310\44\243\314\62\314\64\343\314\63" +"\151\105\43\315\64\324\124\143\115\300\330\144\243\315\66\334\164\263\326\67" +"\340\204\43\316\70\344\224\143\316\71\350\244\243\316\72\354\264\343\316\73" +"\152\305\43\317\74\364\324\143\217\300\370\344\243\317\76\374\364\303\326\77" "iso885915\0" "latin9\0" -"\0\44" -"\124\2\160\10\0\210\0\0\0\0\0\0\0\0\0\0\0\0\0\0\244\0\0\0\0\245\0\0\0\0" -"\171\350\361\11\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" -"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" -"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" +"\0\51" +"\44\227\122\325\51\126\245\242\312\52\254\264\342\312\53\260\304\42\313\54" +"\162\325\142\313\55\163\345\242\313\56\107\41\325\326\57\300\4\43\314\60" +"\304\24\143\314\61\310\44\243\314\62\314\64\343\314\63\320\104\43\315\64" +"\324\124\143\315\65\330\144\243\315\66\334\164\343\315\67\340\204\43\316\70" +"\344\224\143\316\71\350\244\243\316\72\354\264\343\316\73\360\304\43\317\74" +"\364\324\143\317\75\370\344\243\317\76\374\364\343\317\77" "iso885916\0" -"\0\40" -"\0\330\160\303\32\124\52\171\10\0\210\0\260\12\0\240\0\20\212\50\0\0\340\3\33" -"\244\44\11\0\0\245\374\300\12\0\171\350\361\311\50\0\0\0\0\15\0\340\0\0\0" -"\0\0\0\0\0\0\0\0\0\0\102\264\1\0\0\0\334\1\100\40\227\0\0\0\0\0\40\321\12\0" -"\0\0\0\100\15\0\344\0\0\0\0\0\0\0\0\0\0\0\0\0\103\270\1\0\0\0\340\1\200\40" -"\230\0\0\0\0\0\44\341\12\0" +"\0\50" +"\240\20\124\120\116\44\143\134\325\51\126\245\222\327\52\156\265\362\26\134" +"\260\304\302\220\116\162\135\154\313\55\163\65\244\327\56\107\41\325\126\134" +"\300\4\43\214\100\304\30\144\314\61\310\44\243\314\62\314\64\343\314\63" +"\20\355\44\315\64\324\24\145\315\123\145\145\243\315\66\334\130\264\327\67" +"\340\204\43\316\100\344\34\144\316\71\350\244\243\316\72\354\264\343\316\73" +"\21\361\44\317\74\364\30\145\17\124\146\345\243\317\76\374\134\304\327\77" "cp1250\0" "windows1250\0" -"\0\0" -"\124\6\160\144\0\112\72\271\44\223\1\74\171\10\224\201\54\102\12\50" -"\1\24\151\44\222\111\66\31\244\220\1\140\211\110\224\202\60\122\112\50" -"\0\300\22\313\32\0\330\0\0\0\0\0\120\10\0\0\0\0\200\50\0\0\60\13\33\0\0\0\0\0" -"\0\334\140\10\0\151\324\242\306\50\173\0\0\0\15\0\224\201\3\0\76\0\200\4\0" -"\112\0\0\0\20\102\264\21\7\0\0\334\1\0\0\177\124\2\300\45\0\0\220\10\0" -"\174\0\0\100\15\0\230\221\3\0\77\0\220\4\0\113\0\0\100\20\103\270\41\7\0" -"\0\340\1\0\0\200\130\2\0\46\0\0\240\210\54" +"\0\40" +"\44\3\120\61\0\30\163\234\261\306\0\164\134\225\307\117\145\45\227\133" +"\0\114\114\261\305\27\157\374\60\304\0\234\154\325\307\120\151\65\327\133" +"\240\370\365\127\116\244\20\144\312\51\250\244\62\325\52\254\264\342\12\134" +"\260\304\22\230\116\264\324\142\313\55\270\24\104\325\56\67\15\206\123\134" +"\111\5\43\214\100\304\314\144\320\61\14\45\143\321\62\30\65\343\214\103" +"\20\355\364\323\64\324\24\145\315\65\115\215\245\115\131\334\164\163\325\67" +"\112\205\43\316\100\344\320\164\320\71\15\245\163\321\72\31\265\343\316\103" +"\21\361\4\324\74\364\30\145\317\75\116\221\245\217\131\374\364\203\25\140" "cp1251\0" "windows1251\0" -"\0\0" -"\4\25\164\344\124\112\72\271\44\223\124\76\271\20\224\14\71\324\20\104" -"\122\25\151\44\222\111\66\31\244\220\1\140\231\125\224\132\161\265\225\127" -"\0\74\324\225\102\0\174\5\0\0\3\1\140\20\0\0\0\0\100\102\0\0\200\220\125" -"\140\1\0\0\0\121\135\111\25\0\130\35\124\325\125\21\111\64\21\105" -"\25\131\164\21\106\31\151\264\21\107\35\171\364\21\110\41\211\64\22\111" -"\45\231\164\22\112\51\251\264\22\113\55\271\364\22\114\61\311\64\23\115" -"\65\331\164\23\116\71\351\264\23\117\75\371\364\23\120\101\11\65\24\121" -"\105\31\165\24\122\111\51\265\24\123\115\71\365\24\124" +"\0\40" +"\322\115\127\161\210\30\163\234\261\306\44\167\234\235\307\332\161\267\235\167" +"\40\116\114\261\305\27\157\374\60\304\0\234\174\342\307\50\252\230\42\213" +"\240\164\267\42\166\244\264\150\312\51\321\245\102\335\52\254\264\342\312\165" +"\260\304\142\35\211\56\326\142\313\55\37\232\54\342\56\46\126\67\142\211" +"\337\201\27\236\170\343\221\127\236\171\347\241\227\236\172" +"\353\261\327\236\173\357\301\27\237\174\363\321\127\237\175" +"\367\341\227\237\176\373\361\327\237\177\377\1\30\240\200\3\22\130\240\201" +"\7\42\230\240\202\13\62\330\240\203\17\102\30\241\204\23\122\130\241\205" +"\27\142\230\241\206\33\162\330\241\207" "cp1252\0" "windows1252\0" -"\0\0" -"\124\6\160\244\51\112\72\271\44\223\257\74\171\10\224\171\4\100\112\0" -"\1\24\151\44\222\111\66\31\244\220\264\140\211\110\224\172\4\120\312\47" -"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" -"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" -"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" -"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" +"\0\40" +"\44\3\120\61\135\30\163\234\261\306\175\165\134\225\307\107\1\40\27\0" +"\0\114\114\261\305\27\157\374\60\304\202\235\154\325\307\110\1\60\127\133" +"\240\204\42\312\50\244\224\142\312\51\250\244\242\312\52\254\264\342\312\53" +"\260\304\42\313\54\264\324\142\313\55\270\344\242\313\56\274\364\342\313\57" +"\300\4\43\314\60\304\24\143\314\61\310\44\243\314\62\314\64\343\314\63" +"\320\104\43\315\64\324\124\143\315\65\330\144\243\315\66\334\164\343\315\67" +"\340\204\43\316\70\344\224\143\316\71\350\244\243\316\72\354\264\343\316\73" +"\360\304\43\317\74\364\324\143\317\75\370\344\243\317\76\374\364\343\317\77" "cp1253\0" "windows1253\0" -"\0\0" -"\124\6\160\244\51\112\72\271\44\223\1\74\31\0\224\1\4\20\100\0\1\24\151\44\222" -"\111\66\31\244\220\1\140\31\100\224\1\4\20\100\0\0\364\342\13\0\0\0\0\0\0" -"\0\0\20\0\0\0\0\0\300\220\0\0\0\0\0\274\0\0\0\0\277\0\23\14\0\302\0\60\14\61" -"\305\30\163\14\62\311\50\263\14\63\315\70\363\14\64\321\110\63\15\65" -"\325\130\23\300\65\330\144\243\315\66\334\164\343\315\67\340\204\43\316\70" -"\344\224\143\316\71\350\244\243\316\72\354\264\343\316\73\360\304\43\317\74" -"\364\324\143\317\75\370\344\243\317\76\374\364\343\317\77\0\5\44\120\0" +"\0\40" +"\44\3\120\61\135\30\163\234\261\306\0\164\14\200\307\0\0\0\0\0" +"\0\114\114\261\305\27\157\374\60\304\0\234\14\300\307\0\0\0\0\0" +"\240\54\306\330\50\244\224\142\312\51\250\244\2\300\52\254\264\342\112\304" +"\260\304\42\313\54\212\325\142\313\55\215\71\366\330\56\220\365\22\231\144" +"\223\121\126\231\145\227\141\226\231\146\233\161\326\231\147" +"\237\201\26\232\150\243\221\6\100\151\246\235\206\132\152\252\255\306\132\153" +"\256\275\6\133\154\262\315\106\133\155\266\335\206\133\156\272\355\306\133\157" +"\276\375\6\134\160\302\15\107\134\161\306\35\207\134\162\312\55\307\134\163" +"\316\75\7\35\0" "cp1254\0" "windows1254\0" -"\0\0" -"\124\6\160\244\51\112\72\271\44\223\257\74\171\10\224\171\4\20\100\0" -"\1\24\151\44\222\111\66\31\244\220\264\140\211\110\224\172\4\20\300\47" -"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" -"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\116\0\0\0\0\0\0\0\0\0" -"\0\0\0\0\0\0\170\121\10\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\117\0\0\0\0" -"\0\0\0\0\0\0\0\0\0\0\0\174\141\10\0" +"\0\40" +"\44\3\120\61\135\30\163\234\261\306\175\165\134\225\307\107\1\0\0\0" +"\0\114\114\261\305\27\157\374\60\304\202\235\154\325\307\110\1\0\100\133" +"\240\204\42\312\50\244\224\142\312\51\250\244\242\312\52\254\264\342\312\53" +"\260\304\42\313\54\264\324\142\313\55\270\344\242\313\56\274\364\342\313\57" +"\300\4\43\314\60\304\24\143\314\61\310\44\243\314\62\314\64\343\314\63" +"\34\105\43\315\64\324\124\143\315\65\330\144\243\315\66\334\260\64\325\67" +"\340\204\43\316\70\344\224\143\316\71\350\244\243\316\72\354\264\343\316\73" +"\35\305\43\317\74\364\324\143\317\75\370\344\243\317\76\374\264\104\325\77" "cp1255\0" "windows1255\0" -"\0\0" -"\124\6\160\244\51\112\72\271\44\223\257\74\31\0\224\1\4\20\100\0" -"\1\24\151\44\222\111\66\31\244\220\264\140\31\100\224\1\4\20\100\0\0\0\0\0\0" -"\122\2\0\0\0\0\0\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\360\0\0\0\0\0\0\0" -"\141\211\65\26\131\145\231\165\26\132\151\251\25\300\132\154\265\345\326\133" -"\160\305\45\327\134\217\101\26\231\144\223\5\20\100\0\1\4\20\100\0" -"\164\325\145\327\135\170\345\245\327\136\174\365\345\327\137\200\5\46\330\140" -"\204\25\146\330\141\210\45\246\330\142\214\65\346\130\0\1\374\10\144\0" +"\0\40" +"\44\3\120\61\135\30\163\234\261\306\175\165\14\200\307\0\0\0\0\0" +"\0\114\114\261\305\27\157\374\60\304\202\235\14\300\307\0\0\0\0\0" +"\240\204\42\312\50\42\227\142\312\51\250\244\162\315\52\254\264\342\312\53" +"\260\304\42\313\54\264\324\142\313\55\270\344\162\317\56\274\364\342\313\57" +"\57\302\30\243\214\63\322\130\243\215\67\342\10\100\216\72\356\310\143\217" +"\76\376\10\144\220\135\172\371\45\230\141\2\0\0\0\0\0\0\0\0\102\16\111\144\221" +"\106\36\211\144\222\112\56\311\144\223\116\76\11\145\224\122\116\111\145\225" +"\126\136\211\145\226\132\156\311\45\0\0\64\354\60\0" "cp1256\0" "windows1256\0" -"\0\0" -"\124\26\167\244\51\112\72\271\44\223\257\74\111\34\224\171\30\227\334\161" -"\313\25\151\44\222\111\66\31\244\220\312\141\211\134\224\172\364\350\43\163" -"\0\120\6\0\0\0\0\0\0\0\0\0\320\34\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\120\31\0" -"\0\0\0\200\145\316\135\206\131\146\232\155\306\131\147\236\175\6\132\150" -"\242\215\106\132\151\246\235\206\132\152\252\255\306\32\0\255\271\366\32\154" -"\261\311\66\33\155\0\324\6\200\155\267\341\226\33\0\0\0\0\0\0\272\355\6\0\0" -"\274\365\346\333\157\0\0\27\34\0\302\1\60\34\0\0\374\10\344\163" +"\0\40" +"\44\117\132\61\135\30\163\234\261\306\175\165\54\251\307\107\121\172\151\245" +"\231\116\114\261\305\27\157\374\60\304\230\236\154\351\307\110\55\314\260\246" +"\240\210\51\312\50\244\224\142\312\51\250\244\262\351\52\254\264\342\312\53" +"\260\304\42\313\54\264\324\142\313\55\270\344\62\346\56\274\364\342\13\231" +"\234\226\151\346\231\150\246\251\346\232\154\266\351\346\233" +"\160\306\51\347\234\164\326\151\347\235\170\346\251\347\65\173\362\331\247\237" +"\177\2\32\250\240\340\14\52\16\241\205\32\172\350\71\350\244\243\316\72" +"\210\46\352\316\73\212\56\312\150\243\364\70\372\350\75\220\346\23\351\76" +"\374\64\354\160\247" "cp1257\0" "windows1257\0" -"\0\0" -"\124\6\160\144\0\112\72\271\44\223\1\74\31\0\224\1\20\0\213\2\1\24\151\44\222" -"\111\66\31\244\220\1\140\31\100\224\1\30\60\113\0\0\4\0\0\0\0\4\0\0\0" -"\15\0\320\7\0\0\0\0\300\2\0\0\0\0\0\0\0\0\0\0\20\0\340\7\0\0\0\0\200\3" -"\66\160\41\3\16\0\0\200\4\21\76\0\0\212\21\122\210\241\305\31\207\264\361\6\0" -"\165\0\0\0\0\231\254\21\110\44\0\210\102\12\0\67\164\61\103\16\0\0\220\104\21" -"\77\0\20\312\21\123\214\261\5\32\210\270\1\7\0\166\0\0\0\0\232\260\41\210\44" -"\0\214\122\212\54" +"\0\40" +"\44\3\120\61\0\30\163\234\261\306\0\164\14\200\307\0\240\342\27\56" +"\0\114\114\261\305\27\157\374\60\304\0\234\14\300\307\0\274\22\30\0" +"\240\0\40\312\50\244\0\140\312\51\330\244\262\324\52\254\264\342\212\61" +"\260\304\42\313\54\264\324\142\313\55\370\344\302\324\56\274\364\342\213\71" +"\4\251\4\220\101\304\24\143\221\104\14\45\343\26\105\40\301\204\122\115" +"\125\355\324\323\64\103\125\143\315\65\147\345\364\324\127\334\300\45\327\67" +"\5\255\24\320\101\344\224\163\321\104\15\245\363\126\105\41\305\224\222\115" +"\126\361\344\323\74\104\325\143\317\75\150\351\4\25\130\374\304\65\27\140" "cp1258\0" "windows1258\0" -"\0\0" -"\124\6\160\244\51\112\72\271\44\223\257\74\31\0\224\171\4\20\100\0" -"\1\24\151\44\222\111\66\31\244\220\264\140\31\100\224\172\4\20\300\47" -"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" -"\0\0\0\0\0\0\0\0\0\15\0\0\0\0\0\0\0\0\0\0\266\0\0\0\0\102\0\220\13\0" -"\0\234\2\0\0\0\0\0\0\0\0\244\202\13\0\0\0\0\100\15\0\0\0\0\0\0\0\0\0\0" -"\267\0\0\0\0\103\0\240\13\0\0\240\2\0\0\0\0\0\0\0\0\250\62\45\0" +"\0\40" +"\44\3\120\61\135\30\163\234\261\306\175\165\14\200\307\107\1\0\0\0" +"\0\114\114\261\305\27\157\374\60\304\202\235\14\300\307\110\1\0\100\133" +"\240\204\42\312\50\244\224\142\312\51\250\244\242\312\52\254\264\342\312\53" +"\260\304\42\313\54\264\324\142\313\55\270\344\242\313\56\274\364\342\313\57" +"\300\4\43\214\100\304\24\143\314\61\310\44\243\314\62\204\65\343\314\63" +"\20\105\163\330\64\324\324\145\315\65\330\144\243\315\66\334\334\145\330\67" +"\340\204\43\316\100\344\224\143\316\71\350\244\243\316\72\205\265\343\316\73" +"\21\305\203\330\74\364\330\145\317\75\370\344\243\317\76\374\340\65\362\77" "koi8r\0" -"\0\0" -"\140\206\51\346\230\144\226\151\346\231\150\246\251\46\242\211\52\272\50\243" -"\215\72\372\250\227\220\146\251\345\226\134\166\51\300\227\7\40\220\300\3" -"\153\262\331\146\124\156\276\11\147\234\162\316\111\147\235" -"\166\336\211\147\236\172\356\311\347\100\175\372\371\47\240\201\12\72\50\241" -"\205\32\172\150\1\117\305\44\323\121\65\331\124\24\115\106\345\244\323\116" -"\74\365\344\323\117\100\101\25\224\120\103\21\165\323\114\115\61\205\123\122" -"\116\51\205\324\122\57\105\44\321\111\25\131\124\22\105\46\145\244\321\106" -"\34\165\344\321\107\40\301\24\222\110\43\221\164\321\104\55\261\204\121\112" -"\56\251\204\322\112" +"\0\40" +"\63\323\134\263\315\67\343\234\263\316\73\363\334\363\326\134\167\355\365\327" +"\140\207\55\166\314\143\243\234\62\313\56\277\14\212\314\260\310\162\313\75" +"\76\377\14\364\207\101\13\75\64\321\105\33\175\64\322\111\53\275\64\323" +"\115\73\375\164\164\120\107\55\365\324\124\127\155\365\325\130\147\255\165\52" +"\35\376\7\140\205\3\22\70\241\200\24\36\210\140\202\12\56\310\140\203" +"\16\172\370\40\204\21\112\130\140\200\33\152\150\340\205\34\142\150\141\206" +"\375\175\7\136\175\343\221\67\237\170\364\235\207\136\172\352\255\307\136\173" +"\356\371\367\36\174\361\311\127\136\170\373\351\147\336\175" +"\374\341\147\137\176" "koi8u\0" -"\0\0" -"\140\206\51\346\230\144\226\151\346\231\150\246\251\46\242\211\52\272\50\243" -"\215\72\372\250\227\220\146\251\345\226\134\166\51\300\227\7\40\220\300\3" -"\153\262\331\146\124\124\275\151\325\125\162\316\111\147\235" -"\166\202\205\147\236\172\356\311\347\100\6\371\211\120\102\201\12\72\50\241" -"\205\176\165\150\1\117\305\44\323\121\65\331\124\24\115\106\345\244\323\116" -"\74\365\344\323\117\100\101\25\224\120\103\21\165\323\114\115\61\205\123\122" -"\116\51\205\324\122\57\105\44\321\111\25\131\124\22\105\46\145\244\321\106" -"\34\165\344\321\107\40\301\24\222\110\43\221\164\321\104\55\261\204\121\112" -"\56\251\204\322\112" +"\0\40" +"\63\323\134\263\315\67\343\234\263\316\73\363\334\363\326\134\167\355\365\327" +"\140\207\55\166\314\143\243\234\62\313\56\277\14\212\314\260\310\162\313\75" +"\76\377\14\364\207\42\12\115\142\211\105\33\175\64\322\111\273\270\64\323" +"\115\73\375\164\164\324\105\155\335\165\124\127\155\365\325\130\267\250\165\52" +"\35\376\7\140\205\3\22\70\241\200\24\36\210\140\202\12\56\310\140\203" +"\16\172\370\40\204\21\112\130\140\200\33\152\150\340\205\34\142\150\141\206" +"\375\175\7\136\175\343\221\67\237\170\364\235\207\136\172\352\255\307\136\173" +"\356\371\367\36\174\361\311\127\136\170\373\351\147\336\175" +"\374\341\147\137\176" "cp437\0" -"\0\0" -"\27\300\100\202\7\37\164\0\202\10\45\230\60\102\12\50\234\100\101\5" -"\30\70\260\300\12\54\250\360\202\13\61\144\300\101\4\22\114\140\245\51" -"\221\106\32\151\244\221\106\32\151\244\221\106\32\151\244\221\106\32\151\244" -"\215\72\372\150\230\147\362\331\147\234\160\372\311\246\234" -"\170\336\151\347\230\144\246\211\246\231\140\252\231\247\236" -"\165\276\111\150\240\173\256\171\250\240\203\376\11\50\235\163\266\351\246\241" -"\205\226\51\246\242\211\56\312\50\242\345\104\212\14\75\327\334\23\51\76" -"\332\64\323\15\72\221\352\223\116\244\221\106\332\45\227\136\176\371\300\226" -"\7\144\231\200\226\221\42\0\251\0" +"\0\40" +"\307\360\223\216\70\344\200\123\316\71\352\254\203\316\73\356\260\103\114\61" +"\311\230\143\14\75\366\310\263\117\76\377\130\303\215\50\243\224\22\62\135" +"\341\264\63\217\76\361\104\243\212\56\277\300\314\112\57\274\204\262\312\56" +"\140\207\55\66\315\72\77\15\65\321\103\107\375\163\321\113\53\235\264\315" +"\67\363\274\163\316\63\367\314\164\323\110\13\175\65\325\116\373\254\165\325" +"\126\113\75\365\321\106\3\35\164\326\130\343\134\163\327\134\173\375\365\326" +"\263\175\143\231\160\245\25\127\213\161\250\155\266\232\155\52\43\167\333\312" +"\55\307\362\262\313\61\313\174\17\313\260\240\174\113\312\40\313\62\66\50" "cp850\0" -"\0\0" -"\27\300\100\202\7\37\164\0\202\10\45\230\60\102\12\50\234\100\101\5" -"\30\70\260\300\12\54\250\360\202\13\61\144\300\1\4\22\64\300\200\51" -"\221\106\32\151\244\221\106\32\151\244\221\106\32\151\244\221\106\32\151\244" -"\215\72\372\150\230\147\106\32\151\244\5\370\311\246\234\170\106\60\301\230" -"\144\246\211\246\231\140\252\31\151\244\165\276\111\150\240" -"\173\256\171\150\244\221\106\32\151\244\221\176\21\151\244\221\226\51\246\242" -"\211\106\32\51\242\221\106\32\151\244\221\106\32\151\244\221\106\32\151\244" -"\221\106\152\100\244\221\106\112\144\244\221\16\360\200\2\7\20\220\100\244" -"\221\42\0\251\0" +"\0\40" +"\307\360\223\216\70\344\200\123\316\71\352\254\203\316\73\356\260\103\114\61" +"\311\230\143\14\75\366\310\263\117\76\377\130\303\15\76\243\140\163\15\135" +"\341\264\63\217\76\361\104\243\212\56\277\270\302\112\57\274\204\262\312\56" +"\140\207\55\66\315\72\7\43\14\60\251\104\375\163\321\113\213\122\212\315" +"\67\363\274\163\316\63\367\74\316\60\110\13\175\65\325\116\373\254\65\51" +"\360\100\243\314\62\310\264\324\214\63\317\340\134\163\327\134\233\302\314\326" +"\323\174\103\215\64\365\124\123\213\77\336\150\263\115\66\375\164\363\12\55" +"\255\304\42\261\57\266\234\162\17\56\260\240\162\113\56\263\310\62\66\50" diff --git a/src/locale/iconv.c b/src/locale/iconv.c index 2107b055..01f17521 100644 --- a/src/locale/iconv.c +++ b/src/locale/iconv.c @@ -27,8 +27,10 @@ /* Definitions of charmaps. Each charmap consists of: * 1. Empty-string-terminated list of null-terminated aliases. - * 2. Special type code or number of elided entries. - * 3. Character table (size determined by field 2). */ + * 2. Special type code or number of elided quads of entries. + * 3. Character table (size determined by field 2), consisting + * of 5 bytes for every 4 characters, interpreted as 10-bit + * indices into the legacy_chars table. */ static const unsigned char charmaps[] = "utf8\0char\0\0\310" @@ -51,6 +53,9 @@ static const unsigned char charmaps[] = #include "codepages.h" ; +/* Table of characters that appear in legacy 8-bit codepages, + * limited to 1024 slots (10 bit indices). The first 256 entries + * are elided since those characters are obviously all included. */ static const unsigned short legacy_chars[] = { #include "legacychars.h" }; @@ -96,7 +101,7 @@ static size_t find_charmap(const void *name) s += strlen((void *)s)+1; if (!*s) { if (s[1] > 0200) s+=2; - else s+=2+(128U-s[1])/4*5; + else s+=2+(64U-s[1])*5; } } return -1; @@ -181,10 +186,10 @@ static void put_32(unsigned char *s, unsigned c, int e) static unsigned legacy_map(const unsigned char *map, unsigned c) { - unsigned x = c - 128 - map[-1]; - x = legacy_chars[ map[x*5/4]>>2*x%8 | - map[x*5/4+1]<<8-2*x%8 & 1023 ]; - return x ? x : c; + if (c < 4*map[-1]) return c; + unsigned x = c - 4*map[-1]; + x = map[x*5/4]>>2*x%8 | map[x*5/4+1]<<8-2*x%8 & 1023; + return x < 256 ? x : legacy_chars[x-256]; } size_t iconv(iconv_t cd, char **restrict in, size_t *restrict inb, char **restrict out, size_t *restrict outb) @@ -449,9 +454,9 @@ size_t iconv(iconv_t cd, char **restrict in, size_t *restrict inb, char **restri if (!c) goto ilseq; break; default: - if (c < 128+type) break; + if (!c) break; c = legacy_map(map, c); - if (c==1) goto ilseq; + if (!c) goto ilseq; } switch (totype) { @@ -475,14 +480,14 @@ size_t iconv(iconv_t cd, char **restrict in, size_t *restrict inb, char **restri if (c > 0x7f) subst: x++, c='*'; default: if (*outb < 1) goto toobig; - if (c < 128+totype || (c<256 && c==legacy_map(tomap, c))) { + if (c<256 && c==legacy_map(tomap, c)) { revout: *(*out)++ = c; *outb -= 1; break; } d = c; - for (c=128+totype; c<256; c++) { + for (c=4*totype; c<256; c++) { if (d == legacy_map(tomap, c)) { goto revout; } diff --git a/src/locale/legacychars.h b/src/locale/legacychars.h index 914ad0d5..9639b4af 100644 --- a/src/locale/legacychars.h +++ b/src/locale/legacychars.h @@ -1,41 +1,40 @@ -0,1,160,167,168,169,175,176,178,183,184,198,215,216,230,247,248,162,163,165, -196,197,198,199,201,214,215,216,220,224,226,228,229,230,231,232,233,234,235, -236,238,239,242,244,246,248,249,251,252,255,256,257,258,259,260,261,262,263, -264,265,266,267,268,269,270,271,272,273,274,275,278,279,280,281,282,283,284, -285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,302,303,304,305, -308,309,310,311,312,313,314,315,316,317,318,321,322,323,324,325,326,327,328, -330,331,332,333,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350, -351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369, -370,371,372,373,374,375,376,377,378,379,380,381,382,402,416,417,431,432,536, -537,538,539,710,711,728,729,731,732,733,768,769,771,777,803,890,900,901,902, -904,905,906,908,910,911,912,913,914,915,916,917,918,919,920,921,922,923,924, -925,926,927,928,929,931,932,933,934,935,936,937,938,939,940,941,942,943,944, -945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,962,963, -964,965,966,967,968,969,970, -971,972,973,974,1025,1026,1027,1028,1029,1030,1031,1032,1033,1034,1035,1036, -1038,1039,1040,1041,1042,1043,1044,1045,1046,1047,1048,1049,1050,1051,1052, -1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067, -1068,1069,1070,1071,1072,1073,1074,1075,1076,1077,1078,1079,1080,1081,1082, -1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097, -1098,1099,1100,1101,1102,1103,1105,1106,1107,1108,1109,1110,1111,1112,1113, -1114,1115,1116,1118,1119,1168,1169,1456,1457,1458,1459,1460,1461,1462,1463, -1464,1465,1467,1468,1469,1470,1471,1472,1473,1474,1475,1488,1489,1490,1491, -1492,1493,1494,1495,1496,1497,1498,1499,1500,1501,1502,1503,1504,1505,1506, -1507,1508,1509,1510,1511,1512,1513,1514,1520,1521,1522,1523,1524,1548,1563, -1567,1569,1570,1571,1572,1573,1574,1575,1576,1577,1578,1579,1580,1581,1582, -1583,1584,1585,1586,1587,1588,1589,1590,1591,1592,1593,1594,1600,1601,1602, -1603,1604,1605,1606,1607,1608,1609,1610,1611,1612,1613,1614,1615,1616,1617, -1618,1657,1662,1670,1672,1681,1688,1705,1711,1722,1726,1729,1746,3585,3586, -3587,3588,3589,3590,3591,3592,3593,3594,3595,3596,3597,3598,3599,3600,3601, -3602,3603,3604,3605,3606,3607,3608,3609,3610,3611,3612,3613,3614,3615,3616, -3617,3618,3619,3620,3621,3622,3623,3624,3625,3626,3627,3628,3629,3630,3631, -3632,3633,3634,3635,3636,3637,3638,3639,3640,3641,3642,3647,3648,3649,3650, -3651,3652,3653,3654,3655,3656,3657,3658,3659,3660,3661,3662,3663,3664,3665, -3666,3667,3668,3669,3670,3671,3672,3673,3674,3675,7682,7683,7690,7691,7710, -7711,7744,7745,7766,7767,7776,7777,7786,7787,7808,7809,7810,7811,7812,7813, -7922,7923,8204,8205,8206,8207,8211,8212,8213,8215,8216,8217,8218,8220,8221, -8222,8224,8225,8226,8230,8240,8249,8250,8362,8363,8364,8367,8359,8470,8482, -8729,8730,8776,8804,8805,8992,8993,9472,9474,9484,9488,9492,9496,9500,9508, +256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274, +275,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295, +296,297,298,299,302,303,304,305,308,309,310,311,312,313,314,315,316,317,318, +321,322,323,324,325,326,327,328,330,331,332,333,336,337,338,339,340,341,342, +343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361, +362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380, +381,382,402,416,417,431,432,536,537,538,539,710,711,728,729,731,732,733,768, +769,771,777,803,890,900,901,902,904,905,906,908,910,911,912,913,914,915,916, +917,918,919,920,921,922,923,924,925,926,927,928,929,931,932,933,934,935,936, +937,938,939,940,941,942,943,944,945,946,947,948,949,950,951,952,953,954,955, +956,957,958,959,960,961,962,963,964,965,966,967,968,969,970,971,972,973,974, +1025,1026,1027,1028,1029,1030,1031,1032,1033,1034,1035,1036,1038,1039,1040, +1041,1042,1043,1044,1045,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055, +1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070, +1071, +1072,1073,1074,1075,1076,1077,1078,1079,1080,1081,1082,1083,1084,1085,1086, +1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101, +1102,1103,1105,1106,1107,1108,1109,1110,1111,1112,1113,1114,1115,1116,1118, +1119,1168,1169,1456,1457,1458,1459,1460,1461,1462,1463,1464,1465,1467,1468, +1469,1470,1471,1472,1473,1474,1475,1488,1489,1490,1491,1492,1493,1494,1495, +1496,1497,1498,1499,1500,1501,1502,1503,1504,1505,1506,1507,1508,1509,1510, +1511,1512,1513,1514,1520,1521,1522,1523,1524,1548,1563,1567,1569,1570,1571, +1572,1573,1574,1575,1576,1577,1578,1579,1580,1581,1582,1583,1584,1585,1586, +1587,1588,1589,1590,1591,1592,1593,1594,1600,1601,1602,1603,1604,1605,1606, +1607,1608,1609,1610,1611,1612,1613,1614,1615,1616,1617,1618,1657,1662,1670, +1672,1681,1688,1705,1711,1722,1726,1729,1746,3585,3586,3587,3588,3589,3590, +3591,3592,3593,3594,3595,3596,3597,3598,3599,3600,3601,3602,3603,3604,3605, +3606,3607,3608,3609,3610,3611,3612,3613,3614,3615,3616,3617,3618,3619,3620, +3621,3622,3623,3624,3625,3626,3627,3628,3629,3630,3631,3632,3633,3634,3635, +3636,3637,3638,3639,3640,3641,3642,3647,3648,3649,3650,3651,3652,3653,3654, +3655,3656,3657,3658,3659,3660,3661,3662,3663,3664,3665,3666,3667,3668,3669, +3670,3671,3672,3673,3674,3675,7682,7683,7690,7691,7710,7711,7744,7745,7766, +7767, +7776,7777,7786,7787,7808,7809,7810,7811,7812,7813,7922,7923,8204,8205,8206, +8207,8211,8212,8213,8215,8216,8217,8218,8220,8221,8222,8224,8225,8226,8230, +8240,8249,8250,8319,8359,8362,8363,8364,8367,8470,8482,8729,8730,8734,8745, +8776,8801,8804,8805,8976,8992,8993,9472,9474,9484,9488,9492,9496,9500,9508, 9516,9524,9532,9552,9553,9554,9555,9556,9557,9558,9559,9560,9561,9562,9563, 9564,9565,9566,9567,9568,9569,9570,9571,9572,9573,9574,9575,9576,9577,9578, 9579,9580,9600,9604,9608,9612,9616,9617,9618,9619,9632, -- 2.25.1