15c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/* 25c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (C) 2007 Apple Computer, Inc. 35c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 45c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Portions are Copyright (C) 1998 Netscape Communications Corporation. 55c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 65c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * This library is free software; you can redistribute it and/or 75c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * modify it under the terms of the GNU Lesser General Public 85c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * License as published by the Free Software Foundation; either 95c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * version 2.1 of the License, or (at your option) any later version. 105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * This library is distributed in the hope that it will be useful, 125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * but WITHOUT ANY WARRANTY; without even the implied warranty of 135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Lesser General Public License for more details. 155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * You should have received a copy of the GNU Lesser General Public 175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * License along with this library; if not, write to the Free Software 185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Alternatively, the contents of this file may be used under the terms 215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * of either the Mozilla Public License Version 1.1, found at 225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * http://www.mozilla.org/MPL/ (the "MPL") or the GNU General Public 235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * License Version 2.0, found at http://www.fsf.org/copyleft/gpl.html 245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * (the "GPL"), in which case the provisions of the MPL or the GPL are 255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * applicable instead of those above. If you wish to allow use of your 265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * version of this file only under the terms of one of those two 275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * licenses (the MPL or the GPL) and not to allow others to use your 285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * version of this file under the LGPL, indicate your decision by 295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * deletingthe provisions above and replace them with the notice and 305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * other provisions required by the MPL or the GPL, as the case may be. 315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * If you do not delete the provisions above, a recipient may use your 325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * version of this file under any of the LGPL, the MPL or the GPL. 335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include "config.h" 361e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)#include "platform/text/UnicodeRange.h" 375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 38c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)namespace blink { 395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4002772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch// This table depends on unicode range definitions. 415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// Each item's index must correspond to a unicode range value 425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// eg. x-cyrillic = LangGroupTable[cRangeCyrillic] 43f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)static const char* const gUnicodeRangeToLangGroupTable[] = 445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) "x-cyrillic", 465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) "el", 475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) "tr", 485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) "he", 495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) "ar", 505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) "x-baltic", 515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) "th", 525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) "ko", 535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) "ja", 545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) "zh-CN", 555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) "zh-TW", 565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) "x-devanagari", 575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) "x-tamil", 585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) "x-armn", 595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) "x-beng", 605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) "x-cans", 615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) "x-ethi", 625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) "x-geor", 635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) "x-gujr", 645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) "x-guru", 655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) "x-khmr", 665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) "x-mlym" 675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}; 685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/********************************************************************** 705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Unicode subranges as defined in unicode 3.0 7102772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch * x-western, x-central-euro, tr, x-baltic -> latin 7202772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch * 0000 - 036f 735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 1e00 - 1eff 745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 2000 - 206f (general punctuation) 755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 20a0 - 20cf (currency symbols) 765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 2100 - 214f (letterlike symbols) 775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 2150 - 218f (Number Forms) 785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * el -> greek 795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 0370 - 03ff 805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 1f00 - 1fff 815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * x-cyrillic -> cyrillic 825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 0400 - 04ff 835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * he -> hebrew 845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 0590 - 05ff 855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * ar -> arabic 865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 0600 - 06ff 875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * fb50 - fdff (arabic presentation forms) 885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * fe70 - feff (arabic presentation forms b) 895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * th - thai 905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 0e00 - 0e7f 915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * ko -> korean 925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * ac00 - d7af (hangul Syllables) 935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 1100 - 11ff (jamo) 945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 3130 - 318f (hangul compatibility jamo) 955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * ja 965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 3040 - 309f (hiragana) 975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 30a0 - 30ff (katakana) 985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * zh-CN 995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * zh-TW 1005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 1015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * CJK 1025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 3100 - 312f (bopomofo) 1035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 31a0 - 31bf (bopomofo extended) 10402772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch * 3000 - 303f (CJK Symbols and Punctuation) 1055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 2e80 - 2eff (CJK radicals supplement) 1065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 2f00 - 2fdf (Kangxi Radicals) 1075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 2ff0 - 2fff (Ideographic Description Characters) 1085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 3190 - 319f (kanbun) 1095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 3200 - 32ff (Enclosed CJK letters and Months) 1105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 3300 - 33ff (CJK compatibility) 1115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 3400 - 4dbf (CJK Unified Ideographs Extension A) 1125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 4e00 - 9faf (CJK Unified Ideographs) 1135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * f900 - fa5f (CJK Compatibility Ideographs) 1145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * fe30 - fe4f (CJK compatibility Forms) 1155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * ff00 - ffef (halfwidth and fullwidth forms) 1165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 1175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Armenian 11802772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch * 0530 - 058f 11902772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch * Sriac 1205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 0700 - 074f 1215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Thaana 1225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 0780 - 07bf 1235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Devanagari 1245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 0900 - 097f 1255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Bengali 1265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 0980 - 09ff 1275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Gurmukhi 1285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 0a00 - 0a7f 1295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Gujarati 1305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 0a80 - 0aff 1315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Oriya 1325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 0b00 - 0b7f 1335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Tamil 1345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 0b80 - 0bff 1355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Telugu 1365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 0c00 - 0c7f 1375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Kannada 1385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 0c80 - 0cff 1395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Malayalam 1405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 0d00 - 0d7f 1415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Sinhala 1425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 0d80 - 0def 1435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Lao 1445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 0e80 - 0eff 1455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Tibetan 1465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 0f00 - 0fbf 1475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Myanmar 1485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 1000 - 109f 1495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Georgian 1505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 10a0 - 10ff 1515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Ethiopic 1525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 1200 - 137f 1535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Cherokee 1545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 13a0 - 13ff 1555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Canadian Aboriginal Syllabics 1565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 1400 - 167f 1575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Ogham 1585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 1680 - 169f 15902772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch * Runic 1605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 16a0 - 16ff 1615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Khmer 1625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 1780 - 17ff 1635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Mongolian 1645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 1800 - 18af 1655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Misc - superscripts and subscripts 1665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 2070 - 209f 1675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Misc - Combining Diacritical Marks for Symbols 1685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 20d0 - 20ff 1695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Misc - Arrows 1705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 2190 - 21ff 1715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Misc - Mathematical Operators 1725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 2200 - 22ff 1735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Misc - Miscellaneous Technical 1745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 2300 - 23ff 1755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Misc - Control picture 1765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 2400 - 243f 1775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Misc - Optical character recognition 1785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 2440 - 2450 1795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Misc - Enclose Alphanumerics 1805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 2460 - 24ff 18102772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch * Misc - Box Drawing 1825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 2500 - 257f 1835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Misc - Block Elements 1845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 2580 - 259f 1855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Misc - Geometric Shapes 1865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 25a0 - 25ff 1875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Misc - Miscellaneous Symbols 1885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 2600 - 267f 1895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Misc - Dingbats 1905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 2700 - 27bf 1915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Misc - Braille Patterns 1925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 2800 - 28ff 1935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Yi Syllables 1945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * a000 - a48f 1955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Yi radicals 1965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * a490 - a4cf 1975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Alphabetic Presentation Forms 1985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * fb00 - fb4f 1995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Misc - Combining half Marks 2005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * fe20 - fe2f 2015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Misc - small form variants 2025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * fe50 - fe6f 2035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Misc - Specials 2045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * fff0 - ffff 2055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *********************************************************************/ 2065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)static const unsigned cNumSubTables = 9; 2085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)static const unsigned cSubTableSize = 16; 2095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 21002772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdochstatic const unsigned char gUnicodeSubrangeTable[cNumSubTables][cSubTableSize] = 21102772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch{ 2125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { // table for X--- 2135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) cRangeTableBase+1, //u0xxx 2145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) cRangeTableBase+2, //u1xxx 2155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) cRangeTableBase+3, //u2xxx 2165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) cRangeSetCJK, //u3xxx 2175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) cRangeSetCJK, //u4xxx 2185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) cRangeSetCJK, //u5xxx 2195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) cRangeSetCJK, //u6xxx 2205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) cRangeSetCJK, //u7xxx 2215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) cRangeSetCJK, //u8xxx 2225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) cRangeSetCJK, //u9xxx 2235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) cRangeTableBase+4, //uaxxx 2245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) cRangeKorean, //ubxxx 2255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) cRangeKorean, //ucxxx 2265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) cRangeTableBase+5, //udxxx 2275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) cRangePrivate, //uexxx 2285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) cRangeTableBase+6 //ufxxx 2295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 2305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { //table for 0X-- 2315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) cRangeSetLatin, //u00xx 2325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) cRangeSetLatin, //u01xx 2335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) cRangeSetLatin, //u02xx 2345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) cRangeGreek, //u03xx XXX 0300-036f is in fact cRangeCombiningDiacriticalMarks 2355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) cRangeCyrillic, //u04xx 2365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) cRangeTableBase+7, //u05xx, includes Cyrillic supplement, Hebrew, and Armenian 2375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) cRangeArabic, //u06xx 2385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) cRangeTertiaryTable, //u07xx 2395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) cRangeUnassigned, //u08xx 2405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) cRangeTertiaryTable, //u09xx 2415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) cRangeTertiaryTable, //u0axx 2425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) cRangeTertiaryTable, //u0bxx 2435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) cRangeTertiaryTable, //u0cxx 2445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) cRangeTertiaryTable, //u0dxx 2455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) cRangeTertiaryTable, //u0exx 2465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) cRangeTibetan, //u0fxx 2475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 2485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { //table for 1x-- 2495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) cRangeTertiaryTable, //u10xx 2505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) cRangeKorean, //u11xx 2515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) cRangeEthiopic, //u12xx 2525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) cRangeTertiaryTable, //u13xx 2535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) cRangeCanadian, //u14xx 2545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) cRangeCanadian, //u15xx 2555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) cRangeTertiaryTable, //u16xx 2565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) cRangeKhmer, //u17xx 2575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) cRangeMongolian, //u18xx 2585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) cRangeUnassigned, //u19xx 2595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) cRangeUnassigned, //u1axx 2605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) cRangeUnassigned, //u1bxx 2615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) cRangeUnassigned, //u1cxx 2625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) cRangeUnassigned, //u1dxx 2635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) cRangeSetLatin, //u1exx 2645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) cRangeGreek, //u1fxx 2655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 2665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { //table for 2x-- 2675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) cRangeSetLatin, //u20xx 2685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) cRangeSetLatin, //u21xx 2695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) cRangeMathOperators, //u22xx 2705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) cRangeMiscTechnical, //u23xx 2715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) cRangeControlOpticalEnclose, //u24xx 2725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) cRangeBoxBlockGeometrics, //u25xx 2735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) cRangeMiscSymbols, //u26xx 2745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) cRangeDingbats, //u27xx 2755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) cRangeBraillePattern, //u28xx 2765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) cRangeUnassigned, //u29xx 2775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) cRangeUnassigned, //u2axx 2785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) cRangeUnassigned, //u2bxx 2795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) cRangeUnassigned, //u2cxx 2805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) cRangeUnassigned, //u2dxx 2815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) cRangeSetCJK, //u2exx 2825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) cRangeSetCJK, //u2fxx 2835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 2845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { //table for ax-- 2855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) cRangeYi, //ua0xx 2865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) cRangeYi, //ua1xx 2875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) cRangeYi, //ua2xx 2885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) cRangeYi, //ua3xx 2895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) cRangeYi, //ua4xx 2905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) cRangeUnassigned, //ua5xx 2915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) cRangeUnassigned, //ua6xx 2925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) cRangeUnassigned, //ua7xx 2935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) cRangeUnassigned, //ua8xx 2945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) cRangeUnassigned, //ua9xx 2955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) cRangeUnassigned, //uaaxx 2965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) cRangeUnassigned, //uabxx 2975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) cRangeKorean, //uacxx 2985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) cRangeKorean, //uadxx 2995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) cRangeKorean, //uaexx 3005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) cRangeKorean, //uafxx 3015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 3025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { //table for dx-- 3035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) cRangeKorean, //ud0xx 3045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) cRangeKorean, //ud1xx 3055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) cRangeKorean, //ud2xx 3065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) cRangeKorean, //ud3xx 3075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) cRangeKorean, //ud4xx 3085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) cRangeKorean, //ud5xx 3095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) cRangeKorean, //ud6xx 3105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) cRangeKorean, //ud7xx 3115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) cRangeSurrogate, //ud8xx 3125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) cRangeSurrogate, //ud9xx 3135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) cRangeSurrogate, //udaxx 3145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) cRangeSurrogate, //udbxx 3155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) cRangeSurrogate, //udcxx 3165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) cRangeSurrogate, //uddxx 3175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) cRangeSurrogate, //udexx 3185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) cRangeSurrogate, //udfxx 3195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 3205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { // table for fx-- 32102772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch cRangePrivate, //uf0xx 32202772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch cRangePrivate, //uf1xx 32302772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch cRangePrivate, //uf2xx 32402772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch cRangePrivate, //uf3xx 32502772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch cRangePrivate, //uf4xx 32602772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch cRangePrivate, //uf5xx 32702772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch cRangePrivate, //uf6xx 32802772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch cRangePrivate, //uf7xx 32902772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch cRangePrivate, //uf8xx 33002772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch cRangeSetCJK, //uf9xx 33102772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch cRangeSetCJK, //ufaxx 3325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) cRangeArabic, //ufbxx, includes alphabic presentation form 3335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) cRangeArabic, //ufcxx 3345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) cRangeArabic, //ufdxx 33502772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch cRangeArabic, //ufexx, includes Combining half marks, 33602772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch // CJK compatibility forms, 33702772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch // CJK compatibility forms, 3385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // small form variants 3395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) cRangeTableBase+8, //uffxx, halfwidth and fullwidth forms, includes Specials 3405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 3415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { //table for 0x0500 - 0x05ff 3425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) cRangeCyrillic, //u050x 3435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) cRangeCyrillic, //u051x 3445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) cRangeCyrillic, //u052x 3455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) cRangeArmenian, //u053x 3465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) cRangeArmenian, //u054x 3475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) cRangeArmenian, //u055x 3485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) cRangeArmenian, //u056x 3495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) cRangeArmenian, //u057x 3505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) cRangeArmenian, //u058x 3515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) cRangeHebrew, //u059x 3525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) cRangeHebrew, //u05ax 3535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) cRangeHebrew, //u05bx 3545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) cRangeHebrew, //u05cx 3555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) cRangeHebrew, //u05dx 3565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) cRangeHebrew, //u05ex 3575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) cRangeHebrew, //u05fx 3585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 3595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { //table for 0xff00 - 0xffff 3605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) cRangeSetCJK, //uff0x, fullwidth latin 3615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) cRangeSetCJK, //uff1x, fullwidth latin 3625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) cRangeSetCJK, //uff2x, fullwidth latin 3635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) cRangeSetCJK, //uff3x, fullwidth latin 3645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) cRangeSetCJK, //uff4x, fullwidth latin 3655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) cRangeSetCJK, //uff5x, fullwidth latin 3665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) cRangeSetCJK, //uff6x, halfwidth katakana 3675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) cRangeSetCJK, //uff7x, halfwidth katakana 3685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) cRangeSetCJK, //uff8x, halfwidth katakana 3695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) cRangeSetCJK, //uff9x, halfwidth katakana 3705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) cRangeSetCJK, //uffax, halfwidth hangul jamo 3715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) cRangeSetCJK, //uffbx, halfwidth hangul jamo 3725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) cRangeSetCJK, //uffcx, halfwidth hangul jamo 3735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) cRangeSetCJK, //uffdx, halfwidth hangul jamo 3745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) cRangeSetCJK, //uffex, fullwidth symbols 3755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) cRangeSpecials, //ufffx, Specials 3765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 3775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}; 3785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 37902772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch// Most scripts between U+0700 and U+16FF are assigned a chunk of 128 (0x80) 3805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// code points so that the number of entries in the tertiary range 3815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// table for that range is obtained by dividing (0x1700 - 0x0700) by 128. 38202772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch// Exceptions: Ethiopic, Tibetan, Hangul Jamo and Canadian aboriginal 3835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// syllabaries take multiple chunks and Ogham and Runic share a single chunk. 3845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)static const unsigned cTertiaryTableSize = ((0x1700 - 0x0700) / 0x80); 3855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)static const unsigned char gUnicodeTertiaryRangeTable[cTertiaryTableSize] = 38702772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch{ //table for 0x0700 - 0x1600 3885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) cRangeSyriac, //u070x 3895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) cRangeThaana, //u078x 3905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) cRangeUnassigned, //u080x place holder(resolved in the 2ndary tab.) 3915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) cRangeUnassigned, //u088x place holder(resolved in the 2ndary tab.) 3925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) cRangeDevanagari, //u090x 3935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) cRangeBengali, //u098x 3945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) cRangeGurmukhi, //u0a0x 3955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) cRangeGujarati, //u0a8x 3965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) cRangeOriya, //u0b0x 3975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) cRangeTamil, //u0b8x 3985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) cRangeTelugu, //u0c0x 3995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) cRangeKannada, //u0c8x 4005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) cRangeMalayalam, //u0d0x 4015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) cRangeSinhala, //u0d8x 40202772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch cRangeThai, //u0e0x 4035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) cRangeLao, //u0e8x 4045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) cRangeTibetan, //u0f0x place holder(resolved in the 2ndary tab.) 4055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) cRangeTibetan, //u0f8x place holder(resolved in the 2ndary tab.) 4065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) cRangeMyanmar, //u100x 4075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) cRangeGeorgian, //u108x 4085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) cRangeKorean, //u110x place holder(resolved in the 2ndary tab.) 4095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) cRangeKorean, //u118x place holder(resolved in the 2ndary tab.) 4105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) cRangeEthiopic, //u120x place holder(resolved in the 2ndary tab.) 4115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) cRangeEthiopic, //u128x place holder(resolved in the 2ndary tab.) 41202772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch cRangeEthiopic, //u130x 4135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) cRangeCherokee, //u138x 4145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) cRangeCanadian, //u140x place holder(resolved in the 2ndary tab.) 4155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) cRangeCanadian, //u148x place holder(resolved in the 2ndary tab.) 4165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) cRangeCanadian, //u150x place holder(resolved in the 2ndary tab.) 4175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) cRangeCanadian, //u158x place holder(resolved in the 2ndary tab.) 41802772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch cRangeCanadian, //u160x 4195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) cRangeOghamRunic, //u168x this contains two scripts, Ogham & Runic 4205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}; 4215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 42202772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch// A two level index is almost enough for locating a range, with the 4235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// exception of u03xx and u05xx. Since we don't really care about range for 42402772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch// combining diacritical marks in our font application, they are 42502772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch// not discriminated further. Future adoption of this method for other use 42602772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch// should be aware of this limitation. The implementation can be extended if 4275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// there is such a need. 4285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// For Indic, Southeast Asian scripts and some other scripts between 4295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// U+0700 and U+16FF, it's extended to the third level. 43007a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdochunsigned findCharUnicodeRange(UChar32 ch) 4315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 4325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (ch >= 0xFFFF) 4335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return 0; 4345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 43507a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch unsigned range; 4365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) //search the first table 4385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) range = gUnicodeSubrangeTable[0][ch >> 12]; 43902772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch 4405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (range < cRangeTableBase) 44102772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch // we try to get a specific range 4425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return range; 4435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // otherwise, we have one more table to look at 4455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) range = gUnicodeSubrangeTable[range - cRangeTableBase][(ch & 0x0f00) >> 8]; 4465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (range < cRangeTableBase) 4475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return range; 4485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (range < cRangeTertiaryTable) 4495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return gUnicodeSubrangeTable[range - cRangeTableBase][(ch & 0x00f0) >> 4]; 4505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Yet another table to look at : U+0700 - U+16FF : 128 code point blocks 4525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return gUnicodeTertiaryRangeTable[(ch - 0x0700) >> 7]; 4535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 4545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)const char* langGroupFromUnicodeRange(unsigned char unicodeRange) 4565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 45702772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch if (cRangeSpecificItemNum > unicodeRange) 4585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return gUnicodeRangeToLangGroupTable[unicodeRange]; 4595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return 0; 4605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 4615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 463