UNPKG

ares-ide

Version:

A browser-based code editor and UI designer for Enyo 2 projects

560 lines (494 loc) 17.5 kB
/*$ * @name locale.js * @fileOverview This file has conventions related to localization. * */ /*globals G11n Locale enyo*/ //* @protected enyo.g11n.Char = enyo.g11n.Char || {}; //* @protected enyo.g11n.Char._strTrans = function _strTrans(str, table) { var retString = "",c,i; for ( i = 0; i < str.length; i++ ) { c = table[str.charAt(i)]; retString += (c || str.charAt(i)); } return retString; }; enyo.g11n.Char._objectIsEmpty = function(object) { var property; for (property in object) { if (true) { // To make JSLint happy return false; } } return true; }; //* @protected enyo.g11n.Char._isIdeoLetter = function (num) { if ( (num >= 0x4E00) && (num <= 0x9FCB) || // Han (num >= 0xF900) && (num <= 0xFAD9) || // Han Compatibility (num >= 0x3400) && (num <= 0x4DB5) || // Han Extended-A (num >= 0x3041) && (num <= 0x309F) || // Hiragana (num >= 0x30A1) && (num <= 0x30FF) || // Katakana (num >= 0xFF66) && (num <= 0xFF9D) || // Halfwidth Katakana (num >= 0x31F0) && (num <= 0x31FF) || // Katakana extended (num >= 0x3105) && (num <= 0x312D) || // Bopomofo (num >= 0x31A0) && (num <= 0x31B7) || // Bopomofo extended (num >= 0x3131) && (num <= 0x318E) || // Hangul (num >= 0xFFA0) && (num <= 0xFFDC) || // Halfwidth Hangul (num >= 0xAC00) && (num <= 0xD7A3) || // Hangul Syllables (num >= 0xA000) && (num <= 0xA48C) || // Yi (num >= 0x1100) && (num <= 0x11FF) || // Jamo (num >= 0xA960) && (num <= 0xA97C) || // Jamo Extended-A (num >= 0xD7B0) && (num <= 0xD7FB) ) { // Jamo Extended-B return true; } return false; }; //* @protected enyo.g11n.Char._isIdeoOther = function (num) { if ( (num >= 0xA48D) && (num <= 0xA4CF) || // Yi symbols (num >= 0x3100) && (num <= 0x3104) || // Bopomofo (num >= 0x312E) && (num <= 0x312F) || // Bopomofo (num >= 0xFADA) && (num <= 0xFAFF) || // Han Compatibility (num >= 0xD7FC) && (num <= 0xD7FF) || // Jamo Extended-B (num >= 0x9FCC) && (num <= 0x9FFF) || // Han (num >= 0xA97D) && (num <= 0xA97F) || // Jamo Extended-A (num >= 0x3200) && (num <= 0x32FF) || // Enclosed CJK Letters and ideographs (num >= 0x3300) && (num <= 0x337F) || // CJK Squared Words (num >= 0x3380) && (num <= 0x33FF) || // CJK Squared Abbreviations (num === 0x3130) || // hangul (num === 0x318F) || // hangul (num === 0x30A0) || // katakana (num === 0x3040) || // hiragana (num === 0x3006) || // IDEOGRAPHIC CLOSING MARK (num === 0x303C) ) { // MASU MARK return true; } return false; }; //* @public /** Returns true if the first character in the string an Asian ideographic character. */ enyo.g11n.Char.isIdeo = function isIdeo(ch) { var num; if ( !ch || ch.length < 1 ) { return false; } num = ch.charCodeAt(0); return enyo.g11n.Char._isIdeoLetter(num) || enyo.g11n.Char._isIdeoOther(num); }; /* // taken from http://www.unicode.org/Public/5.2.0/ucd/PropList.txt enyo.g11n.Char._punctChars = { 0x002D: 1, // HYPHEN-MINUS 0x058A: 1, // ARMENIAN HYPHEN 0x05BE: 1, // HEBREW PUNCTUATION MAQAF 0x1400: 1, // CANADIAN SYLLABICS HYPHEN 0x1806: 1, // MONGOLIAN TODO SOFT HYPHEN 0x2010: 1, // HYPHEN 0x2015: 1, // HORIZONTAL BAR 0x2053: 1, // SWUNG DASH 0x207B: 1, // SUPERSCRIPT MINUS 0x208B: 1, // SUBSCRIPT MINUS 0x2212: 1, // MINUS SIGN 0x2E17: 1, // DOUBLE OBLIQUE HYPHEN 0x2E1A: 1, // HYPHEN WITH DIAERESIS 0x301C: 1, // WAVE DASH 0x3030: 1, // WAVY DASH 0x30A0: 1, // KATAKANA-HIRAGANA DOUBLE HYPHEN 0xFE31: 1, // PRESENTATION FORM FOR VERTICAL EM DASH 0xFE32: 1, // PRESENTATION FORM FOR VERTICAL EN DASH 0xFE58: 1, // SMALL EM DASH 0xFE63: 1, // SMALL HYPHEN-MINUS 0xFF0D: 1, // FULLWIDTH HYPHEN-MINUS 0x00AD: 1, // SOFT HYPHEN 0x2011: 1, // NON-BREAKING HYPHEN 0x30FB: 1, // KATAKANA MIDDLE DOT 0xFF65: 1, // HALFWIDTH KATAKANA MIDDLE DOT 0x0022: 1, // QUOTATION MARK 0x0027: 1, // APOSTROPHE 0x00AB: 1, // LEFT-POINTING DOUBLE ANGLE QUOTATION MARK 0x00BB: 1, // RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK 0x2018: 1, // LEFT SINGLE QUOTATION MARK 0x2019: 1, // RIGHT SINGLE QUOTATION MARK 0x201A: 1, // SINGLE LOW-9 QUOTATION MARK 0x201B: 1, // SINGLE HIGH-REVERSED-9 QUOTATION MARK 0x201C: 1, // LEFT DOUBLE QUOTATION MARK 0x201D: 1, // RIGHT DOUBLE QUOTATION MARK 0x201E: 1, // DOUBLE LOW-9 QUOTATION MARK 0x201F: 1, // DOUBLE HIGH-REVERSED-9 QUOTATION MARK 0x2039: 1, // SINGLE LEFT-POINTING ANGLE QUOTATION MARK 0x203A: 1, // SINGLE RIGHT-POINTING ANGLE QUOTATION MARK 0x300C: 1, // LEFT CORNER BRACKET 0x300D: 1, // RIGHT CORNER BRACKET 0x300E: 1, // LEFT WHITE CORNER BRACKET 0x300F: 1, // RIGHT WHITE CORNER BRACKET 0x301D: 1, // REVERSED DOUBLE PRIME QUOTATION MARK 0x301E: 1, // DOUBLE PRIME QUOTATION MARK 0x301F: 1, // LOW DOUBLE PRIME QUOTATION MARK 0xFE41: 1, // PRESENTATION FORM FOR VERTICAL LEFT CORNER BRACKET 0xFE42: 1, // PRESENTATION FORM FOR VERTICAL RIGHT CORNER BRACKET 0xFE43: 1, // PRESENTATION FORM FOR VERTICAL LEFT WHITE CORNER BRACKET 0xFE44: 1, // PRESENTATION FORM FOR VERTICAL RIGHT WHITE CORNER BRACKET 0xFF02: 1, // FULLWIDTH QUOTATION MARK 0xFF07: 1, // FULLWIDTH APOSTROPHE 0xFF62: 1, // HALFWIDTH LEFT CORNER BRACKET 0xFF63: 1, // HALFWIDTH RIGHT CORNER BRACKET 0x0021: 1, // EXCLAMATION MARK 0x002C: 1, // COMMA 0x002E: 1, // FULL STOP 0x003A: 1, // COLON 0x003B: 1, // SEMICOLON 0x003F: 1, // QUESTION MARK 0x037E: 1, // GREEK QUESTION MARK 0x0387: 1, // GREEK ANO TELEIA 0x0589: 1, // ARMENIAN FULL STOP 0x05C3: 1, // HEBREW PUNCTUATION SOF PASUQ 0x060C: 1, // ARABIC COMMA 0x061B: 1, // ARABIC SEMICOLON 0x061F: 1, // ARABIC QUESTION MARK 0x06D4: 1, // ARABIC FULL STOP 0x0700: 1, // SYRIAC END OF PARAGRAPH 0x0701: 1, // SYRIAC PUNCTUATION 0x0702: 1, // SYRIAC PUNCTUATION 0x0703: 1, // SYRIAC PUNCTUATION 0x0704: 1, // SYRIAC PUNCTUATION 0x0705: 1, // SYRIAC PUNCTUATION 0x0706: 1, // SYRIAC PUNCTUATION 0x0707: 1, // SYRIAC PUNCTUATION 0x0708: 1, // SYRIAC PUNCTUATION 0x0709: 1, // SYRIAC PUNCTUATION 0x070A: 1, // SYRIAC CONTRACTION 0x070C: 1, // SYRIAC HARKLEAN METOBELUS 0x07F8: 1, // NKO COMMA 0x07F9: 1, // NKO EXCLAMATION MARK 0x0830: 1, // SAMARITAN PUNCTUATION NEQUDAA 0x0831: 1, // SAMARITAN PUNCTUATION 0x0832: 1, // SAMARITAN PUNCTUATION 0x0833: 1, // SAMARITAN PUNCTUATION 0x0834: 1, // SAMARITAN PUNCTUATION 0x0835: 1, // SAMARITAN PUNCTUATION 0x0836: 1, // SAMARITAN PUNCTUATION 0x0837: 1, // SAMARITAN PUNCTUATION 0x0838: 1, // SAMARITAN PUNCTUATION 0x0839: 1, // SAMARITAN PUNCTUATION 0x083A: 1, // SAMARITAN PUNCTUATION 0x083B: 1, // SAMARITAN PUNCTUATION 0x083C: 1, // SAMARITAN PUNCTUATION 0x083D: 1, // SAMARITAN PUNCTUATION 0x083E: 1, // SAMARITAN PUNCTUATION ANNAAU 0x0964: 1, // DEVANAGARI DANDA 0x0965: 1, // DEVANAGARI DOUBLE DANDA 0x0E5A: 1, // THAI CHARACTER ANGKHANKHU 0x0E5B: 1, // THAI CHARACTER KHOMUT 0x0F08: 1, // TIBETAN MARK SBRUL SHAD 0x0F0D: 1, // TIBETAN MARK SHAD 0x0F0E: 1, // TIBETAN PUNCTUATION 0x0F0F: 1, // TIBETAN PUNCTUATION 0x0F10: 1, // TIBETAN PUNCTUATION 0x0F11: 1, // TIBETAN PUNCTUATION 0x0F12: 1, // TIBETAN MARK RGYA GRAM SHAD 0x104A: 1, // MYANMAR SIGN LITTLE SECTION 0x104B: 1, // MYANMAR SIGN SECTION 0x1361: 1, // ETHIOPIC WORDSPACE 0x1362: 1, // ETHIOPIC PUNCTUATION 0x1363: 1, // ETHIOPIC PUNCTUATION 0x1364: 1, // ETHIOPIC PUNCTUATION 0x1365: 1, // ETHIOPIC PUNCTUATION 0x1366: 1, // ETHIOPIC PUNCTUATION 0x1367: 1, // ETHIOPIC PUNCTUATION 0x1368: 1, // ETHIOPIC PARAGRAPH SEPARATOR 0x166D: 1, // CANADIAN SYLLABICS CHI SIGN 0x166E: 1, // CANADIAN SYLLABICS FULL STOP 0x16EB: 1, // RUNIC SINGLE PUNCTUATION 0x16EC: 1, // RUNIC PUNCTUATION 0x16ED: 1, // RUNIC CROSS PUNCTUATION 0x17D4: 1, // KHMER SIGN KHAN 0x17D5: 1, // KHMER SIGN KHAN..KHMER SIGN CAMNUC PII KUUH 0x17D6: 1, // KHMER SIGN CAMNUC PII KUUH 0x17DA: 1, // KHMER SIGN KOOMUUT 0x1802: 1, // MONGOLIAN COMMA 0x1803: 1, // MONGOLIAN COMMA..MONGOLIAN FOUR DOTS 0x1804: 1, // MONGOLIAN COMMA..MONGOLIAN FOUR DOTS 0x1805: 1, // MONGOLIAN FOUR DOTS 0x1808: 1, // MONGOLIAN MANCHU COMMA 0x1809: 1, // MONGOLIAN MANCHU FULL STOP 0x1944: 1, // LIMBU EXCLAMATION MARK 0x1945: 1, // LIMBU QUESTION MARK 0x1AA8: 1, // TAI THAM SIGN KAAN 0x1AA9: 1, // TAI PUNCTUATION 0x1AAA: 1, // TAI PUNCTUATION 0x1AAB: 1, // TAI THAM SIGN SATKAANKUU 0x1B5A: 1, // BALINESE PANTI 0x1B5B: 1, // BALINESE PAMADA 0x1B5D: 1, // BALINESE CARIK PAMUNGKAH 0x1B5E: 1, // BALINESE PUNCTUATION 0x1B5F: 1, // BBALINESE CARIK PAREREN 0x1C3B: 1, // LEPCHA PUNCTUATION 0x1C3C: 1, // LEPCHA PUNCTUATION 0x1C3D: 1, // LEPCHA PUNCTUATION 0x1C3E: 1, // LEPCHA PUNCTUATION 0x1C3F: 1, // LEPCHA PUNCTUATION 0x1C7E: 1, // OL CHIKI PUNCTUATION MUCAAD 0x1C7F: 1, // OL CHIKI PUNCTUATION DOUBLE MUCAAD 0x203C: 1, // DOUBLE EXCLAMATION MARK 0x203D: 1, // INTERROBANG 0x2047: 1, // DOUBLE QUESTION MARK 0x2048: 1, // PUNCTUATION 0x2049: 1, // EXCLAMATION QUESTION MARK 0x2E2E: 1, // REVERSED QUESTION MARK 0x3001: 1, // IDEOGRAPHIC COMMA 0x3002: 1, // IDEOGRAPHIC FULL STOP 0xA4FE: 1, // LISU PUNCTUATION COMMA 0xA4FF: 1, // LISU PUNCTUATION FULL STOP 0xA60D: 1, // VAI COMMA 0xA60E: 1, // VAI PUNCTUATION 0xA60F: 1, // VAI QUESTION MARK 0xA6F3: 1, // BAMUM FULL STOP 0xA6F4: 1, // BAMUM PUNCTUATION 0xA6F5: 1, // BAMUM PUNCTUATION 0xA6F6: 1, // BAMUM PUNCTUATION 0xA6F7: 1, // BAMUM QUESTION MARK 0xA876: 1, // PHAGS-PA MARK SHAD 0xA877: 1, // PHAGS-PA MARK DOUBLE SHAD 0xA8CE: 1, // SAURASHTRA DANDA 0xA8CF: 1, // SAURASHTRA DOUBLE DANDA 0xA92F: 1, // KAYAH LI SIGN SHYA 0xA9C7: 1, // JAVANESE PADA PANGKAT 0xA9C8: 1, // JAVANESE PUNCTUATION 0xA9C9: 1, // JAVANESE PADA LUNGSI 0xAA5D: 1, // CHAM PUNCTUATION DANDA 0xAA5E: 1, // CHAM PUNCTUATION 0xAA5F: 1, // CHAM PUNCTUATION TRIPLE DANDA 0xAADF: 1, // TAI VIET SYMBOL KOI KOI 0xABEB: 1, // MEETEI MAYEK CHEIKHEI 0xFE50: 1, // SMALL COMMA 0xFE51: 1, // SMALL PUNCTUATION 0xFE52: 1, // SMALL FULL STOP 0xFE53: 1, // SMALL SEMICOLON 0xFE54: 1, // SMALL SEMICOLON..SMALL EXCLAMATION MARK 0xFE55: 1, // SMALL SEMICOLON..SMALL EXCLAMATION MARK 0xFE56: 1, // SMALL SEMICOLON..SMALL EXCLAMATION MARK 0xFE57: 1, // SMALL EXCLAMATION MARK 0xFF01: 1, // FULLWIDTH EXCLAMATION MARK 0xFF0C: 1, // FULLWIDTH COMMA 0xFF0E: 1, // FULLWIDTH FULL STOP 0xFF1A: 1, // FULLWIDTH COLON 0xFF1B: 1, // FULLWIDTH SEMICOLON 0xFF1F: 1, // FULLWIDTH QUESTION MARK 0xFF61: 1, // HALFWIDTH IDEOGRAPHIC FULL STOP 0xFF64: 1 // HALFWIDTH IDEOGRAPHIC COMMA }; */ //* @public /** Returns true if the first character in the string is a punctuation character. */ enyo.g11n.Char.isPunct = function isPunct(ch) { var punctChars, ret; if ( !ch || ch.length < 1 ) { return false; } punctChars = enyo.g11n.Utils.getNonLocaleFile({ root: enyo.g11n.Utils._getEnyoRoot(), path: "base/character_data/chartype.punct.json" }); ret = (punctChars && ch.charAt(0) in punctChars); enyo.g11n.Utils.releaseAllJsonFiles(); return ret; }; //* @protected // taken from http://www.unicode.org/Public/5.2.0/ucd/PropList.txt //and now, spacechars, the movie enyo.g11n.Char._space = { 0x0009: 1, // tab 0x000A: 1, // line feed 0x000B: 1, // vertical tab 0x000C: 1, // form feed 0x000D: 1, // carriage return 0x0020: 1, // SPACE 0x0085: 1, // control-0085 0x00A0: 1, // NO-BREAK SPACE 0x1680: 1, // OGHAM SPACE MARK 0x180E: 1, // MONGOLIAN VOWEL SEPARATOR 0x2000: 1, // EN QUAD 0x2001: 1, // spaces 0x2002: 1, // spaces 0x2003: 1, // spaces 0x2004: 1, // spaces 0x2005: 1, // spaces 0x2006: 1, // spaces 0x2007: 1, // spaces 0x2008: 1, // spaces 0x2009: 1, // spaces 0x200A: 1, // HAIR SPACE 0x2028: 1, // LINE SEPARATOR 0x2029: 1, // PARAGRAPH SEPARATOR 0x202F: 1, // NARROW NO-BREAK SPACE 0x205F: 1, // MEDIUM MATHEMATICAL SPACE 0x3000: 1 // IDEOGRAPHIC SPACE }; //* @public /** Returns true if the first character in the string is a whitespace character. */ enyo.g11n.Char.isSpace = function isSpace(ch) { var num; if ( !ch || ch.length < 1 ) { return false; } num = ch.charCodeAt(0); return (num in enyo.g11n.Char._space); }; //* @public /** Returns a string containing the same content as the original parameter, but with all characters upper-cased according to the rules of the given locale. * str (String): The string to be upper-cased * locale (String): The string is upper-cased using the rules of the given locale. If this parameter is not specified, the function will use the current locale. */ enyo.g11n.Char.toUpper = function toUpper(str, locale) { var langinfo; if ( !str ) { return undefined; } if ( !locale ) { locale = enyo.g11n.currentLocale(); // can't do anything without the locale } langinfo = enyo.g11n.Utils.getJsonFile({ root: enyo.g11n.Utils._getEnyoRoot(), path: "base/character_data", locale: locale }); if ( !langinfo || !langinfo.upperMap ) { // default to the English behaviour langinfo = enyo.g11n.Utils.getJsonFile({ root: enyo.g11n.Utils._getEnyoRoot(), path: "base/character_data", locale: new enyo.g11n.Locale("en") }); } if ( langinfo && langinfo.upperMap !== undefined ) { return enyo.g11n.Char._strTrans(str, langinfo.upperMap); } enyo.g11n.Utils.releaseAllJsonFiles(); return str; }; //* @public /** Returns true if the first character in the string is a letter character. */ enyo.g11n.Char.isLetter = function isLetter(ch) { var c, num, letterChars, ret; if ( !ch || ch.length < 1 ) { return false; } c = ch.charAt(0); num = ch.charCodeAt(0); // chars in chartype.letter.json were taken from http://www.unicode.org/Public/5.2.0/ucd/UnicodeData.txt letterChars = enyo.g11n.Utils.getNonLocaleFile({ root: enyo.g11n.Utils._getEnyoRoot(), path: 'base/character_data/chartype.letter.json' }); ret = (letterChars && (c in letterChars)) || enyo.g11n.Char._isIdeoLetter(num); enyo.g11n.Utils.releaseAllJsonFiles(); return ret; }; /** Returns an array of strings containing all of the alphabetic characters that are used as index characters for the current locale. * locale (String): The locale for which the alphabetic index chars are being sought. This is a required parameter. The characters are returned in the order in which they should appear in the index. An index character is a character under which multiple items in a list can be categorized. In most languages, accented versions of a character are considered to be variants of the base character, so list items are grouped together under the same base character. In some locales, however, accented characters are considered to be separate from the unaccented base characters, so list items starting with the accented character are grouped under a separate header. The symbol "#" is appended to the end of the list as the placeholder character representing all strings that do not start with any of the alphabetic index chars. */ enyo.g11n.Char.getIndexChars = function getIndexChars(locale) { var indexchars, loc, rb; var i, arr = []; if (locale) { if (typeof(locale) === 'string') { loc = new enyo.g11n.Locale(locale); } else loc = locale; } else { loc = enyo.g11n.currentLocale(); // can't do anything without the locale } if (!enyo.g11n.Char._resources) { enyo.g11n.Char._resources = {}; } if (!enyo.g11n.Char._resources[loc.locale]) { enyo.g11n.Char._resources[loc.locale] = new enyo.g11n.Resources({ root: enyo.g11n.Utils._getEnyoRoot() + "/base", locale: loc }); } rb = enyo.g11n.Char._resources[loc.locale]; indexchars = enyo.g11n.Char._resources[loc.locale].$L({key: "indexChars", value: "ABCDEFGHIJKLMNOPQRSTUVWXYZ#"}); for ( i = 0; i < indexchars.length; i++ ) { arr.push(indexchars[i]); } return arr; }; /** Returns a string containing the same content as the original parameter, but with all characters replaced with their base characters according to the rules of the given locale. * str (String): The string to be de-accented * locale (String/Object): If specified, the string is de-accented using the rules of the given locale. If the locale is not specified, this function uses the current UI locale. The base character is defined to be a version of the same character in the list of alphabetic index chars as returned by _getIndexChars_, which usually does not have any accents or diacriticals unless the language considers the character with the accent to be distinct from the unaccented version. */ enyo.g11n.Char.getBaseString = function getBaseString(str, locale) { var langinfo, loc; if ( !str ) { return undefined; } if (locale) { if (typeof(locale) === 'string') { loc = new enyo.g11n.Locale(locale); } else loc = locale; } else { loc = enyo.g11n.currentLocale(); // can't do anything without the locale } langinfo = enyo.g11n.Utils.getJsonFile({ root: enyo.g11n.Utils._getEnyoRoot(), path: "base/character_data", locale: loc }); if ( !langinfo || enyo.g11n.Char._objectIsEmpty(langinfo) ) { // default to the English behaviour langinfo = enyo.g11n.Utils.getJsonFile({ root: enyo.g11n.Utils._getEnyoRoot(), path: "base/character_data", locale: new enyo.g11n.Locale("en") }); } if ( langinfo && langinfo.baseChars !== undefined ) { str = enyo.g11n.Char._strTrans(str, langinfo.baseChars); } enyo.g11n.Utils.releaseAllJsonFiles(); return str; };