1// â»Macæã®ç¬èªã®å¦çããããã䏿¸ãããéã¯æ³¨æãã¦ãã ãã!! 2 3// Copyright (c) 2013 Keith Perhac @ DelfiNet (http://delfi-net.com) 4// 5// Based on the AutoRuby library created by: 6// Copyright (c) 2005-2008 spinelz.org (http://script.spinelz.org/) 7// 8// Permission is hereby granted, free of charge, to any person obtaining 9// a copy of this software and associated documentation files (the 10// "Software"), to deal in the Software without restriction, including 11// without limitation the rights to use, copy, modify, merge, publish, 12// distribute, sublicense, and/or sell copies of the Software, and to 13// permit persons to whom the Software is furnished to do so, subject to 14// the following conditions: 15// 16// The above copyright notice and this permission notice shall be 17// included in all copies or substantial portions of the Software. 18// 19// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 20// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 21// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 22// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 23// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 24// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 25// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 26 27(function ($) { 28 $.fn.autoKana = function (element1, element2, passedOptions) { 29 30 // Macæã®å¦ç䏿¸ã注æ 31 var ua = navigator.userAgent.toLowerCase(); 32 var isMac = ((ua.indexOf("mac") > -1) && (ua.indexOf("os") > -1)) && !((ua.indexOf("iphone") > -1) || (ua.indexOf("ipad") > -1) || (ua.indexOf("windows") > -1)); 33 34 var options = $.extend( 35 { 36 "katakana": false 37 }, passedOptions); 38 39 var kanaExtractionPattern = new RegExp("[^ ããã-ãã¼]", "g"); 40 var kanaCompactingPattern = new RegExp("[ããã ããã£ãã ã]", "g"); 41 var elName, 42 elKana, 43 active = false, 44 timer = null, 45 flagConvert = true, 46 input, 47 romanChar, 48 values, 49 ignoreString, 50 baseKana; 51 52 elName = $(element1); 53 elKana = $(element2); 54 active = true; 55 stateClear(); 56 57 if (isMac) { 58 elName.keyup(eventKeyUp); 59 } else { 60 elName.blur(eventBlur); 61 elName.focus(eventFocus); 62 elName.keydown(eventKeyDown); 63 } 64 65 function checkConvert(newValues) { 66 if (!flagConvert) { 67 if (Math.abs(values.length - newValues.length) > 1) { 68 var tmpValues = newValues.join("").replace(kanaCompactingPattern, "").split(""); 69 if (Math.abs(values.length - tmpValues.length) > 1) { 70 stateConvert(); 71 } 72 } else { 73 if (values.length === input.length && values.join("") !== input) { 74 if (input.match(kanaExtractionPattern)) { 75 stateConvert(); 76 } 77 } 78 } 79 } 80 }; 81 82 function checkValue() { 83 var newInput, newValues; 84 newInput = elName.val(); 85 if (newInput === "") { 86 stateClear(); 87 setKana(); 88 } else { 89 newInput = removeString(newInput); 90 if (input === newInput) { 91 return; 92 } else { 93 input = newInput; 94 if (!flagConvert) { 95 newValues = newInput.replace(kanaExtractionPattern, "").split(""); 96 checkConvert(newValues); 97 setKana(newValues); 98 } 99 } 100 } 101 }; 102 103 function resetInterval() { 104 clearInterval(timer); 105 }; 106 107 function eventBlur(event) { 108 resetInterval(); 109 }; 110 function eventFocus(event) { 111 stateInput(); 112 startInterval(); 113 }; 114 function eventKeyDown(event) { 115 if (flagConvert) { 116 stateInput(); 117 } 118 }; 119 120 // Macæã®å¦ç䏿¸ã注æ 121 function eventKeyUp(event) {// ãã¼ãã¼ãå ¥åãè¡ãããå ´å(ãã¼ãå ¥åããããæ¯åº¦è¡ã) 122 123 var realTimeKeyCode = event.keyCode;// ãã¼ã³ã¼ããæå¾ 124 if (65 <= realTimeKeyCode && realTimeKeyCode <= 90) { 125 romanChar += String.fromCharCode(realTimeKeyCode)// ãã¼ãåãå ¥ã(a-z) 126 } else if (realTimeKeyCode === 8 && elName.val() === "") {// TextBoxã®ä¸èº«ã空ã«ãªã£ãå ´å 127 romanChar = ""; 128 elKana.val(""); 129 } else if (realTimeKeyCode === 13) {// Enterãæ¼ãããå ´å 130 romanChar = ""; 131 } 132 if (romanChar) { 133 var newValues = romanToHiragana(romanChar.toLowerCase());
133// ãã¼ãåããã²ãããªã¸å¤æãã¦ãã 134 if (newValues.match(/^[ã-ãã¼ã]+$/)) {// ã²ãããªãå ¥ã£ã¦ããããã§ãã¯ã¯ãã¦ãããsetKanaãè¡ã 135 setKanaMac(newValues); 136 romanChar = ""; 137 } 138 } 139 }; 140 function isHiragana(chara) { 141 return ((chara >= 12353 && chara <= 12435) || chara == 12445 || chara == 12446); 142 }; 143 function removeString(newInput) { 144 if (newInput.indexOf(ignoreString) !== -1) { 145 return newInput.replace(ignoreString, ""); 146 } else { 147 var i; 148 var ignoreArray = ignoreString.split(""); 149 var inputArray = newInput.split(""); 150 for (i = 0; i < ignoreArray.length; i++) { 151 if (ignoreArray[i] === inputArray[i]) { 152 inputArray[i] = ""; 153 } 154 } 155 return inputArray.join(""); 156 } 157 }; 158 function startInterval() { 159 var self = this; 160 timer = setInterval(checkValue, 30); 161 for (var intervalId = 1; intervalId < timer; intervalId++) { 162 clearInterval(intervalId); 163 } 164 }; 165 function setKana(newValues) { 166 if (!flagConvert) { 167 if (newValues) { 168 values = newValues; 169 } 170 if (active) { 171 var _val = toKatakana(baseKana + values.join("")); 172 elKana.val(_val); 173 } 174 } 175 }; 176 // Macæã®å¦ç䏿¸ã注æ 177 function setKanaMac(newValues) { 178 baseKana = elKana.val(); 179 var values = toKatakana(baseKana + newValues); 180 elKana.val(values); 181 }; 182 function stateClear() { 183 baseKana = ""; 184 flagConvert = false; 185 ignoreString = ""; 186 input = ""; 187 romanChar = ""; 188 values = []; 189 }; 190 function stateInput() { 191 baseKana = elKana.val(); 192 flagConvert = false; 193 ignoreString = elName.val(); 194 }; 195 function stateConvert() { 196 baseKana = baseKana + values.join(""); 197 flagConvert = true; 198 values = []; 199 }; 200 function toKatakana(src) { 201 if (options.katakana) { 202 var c, i, str; 203 str = new String; 204 for (i = 0; i < src.length; i++) { 205 c = src.charCodeAt(i); 206 if (isHiragana(c)) { 207 str += String.fromCharCode(c + 96); 208 } else { 209 str += src.charAt(i); 210 } 211 } 212 return str; 213 } else { 214 return src; 215 } 216 } 217 // Macæã®å¦ç䏿¸ã注æ 218 var hiraganaBox = { 219 "a": "ã", "i": "ã", "u": "ã", "e": "ã", "o": "ã", 220 "ka": "ã", "ki": "ã", "ku": "ã", "ke": "ã", "ko": "ã", 221 "sa": "ã", "si": "ã", "su": "ã", "se": "ã", "so": "ã", 222 "ta": "ã", "ti": "ã¡", "tu": "ã¤", "te": "ã¦", "to": "ã¨", "chi": "ã¡", "tsu": "ã¤", 223 "na": "ãª", "ni": "ã«", "nu": "ã¬", "ne": "ã", "no": "ã®", 224 "ha": "ã¯", "hi": "ã²", "hu": "ãµ", "he": "ã¸", "ho": "ã»", "fu": "ãµ", 225 "ma": "ã¾", "mi": "ã¿", "mu": "ã", "me": "ã", "mo": "ã", 226 "ya": "ã", "yi": "ã", "yu": "ã", "ye": "ãã", "yo": "ã", 227 "ra": "ã", "ri": "ã", "ru": "ã", "re": "ã", "ro": "ã", 228 "wa": "ã", "wyi": "ã", "wu": "ã", "wye": "ã", "wo": "ã", 229 "nn": "ã", 230 "ga": "ã", "gi": "ã", "gu": "ã", "ge": "ã", "go": "ã", 231 "za": "ã", "zi": "ã", "zu": "ã", "ze": "ã", "zo": "ã", "ji": "ã", 232 "da": "ã ", "di": "ã¢", "du": "ã¥", "de": "ã§", "do": "ã©", 233 "ba": "ã°", "bi": "ã³", "bu": "ã¶", "be": "ã¹", "bo": "ã¼", 234 "pa": "ã±", "pi": "ã´", "pu": "ã·", "pe": "ãº", "po": "ã½", 235 "kya": "ãã", "kyu": "ãã ", "kyo": "ãã", 236 "sya": "ãã", "syu": "ãã ", "syo": "ãã", 237 "tya": "ã¡ã", "tyi": "ã¡ã", "tyu": "ã¡ã ", "tye": "ã¡ã", "tyo": "ã¡ã", "cha": "ã¡ã", "chu": "ã¡ã ", "che": "ã¡ã", "cho": "ã¡ã", 238 "nya": "ã«ã", "nyi": "ã«ã", "nyu": "ã«ã ", "nye": "ã«ã", "nyo": "ã«ã", 239 "hya": "ã²ã", "hyi": "ã²ã", "hyu": "ã²ã ", "hye": "ã²ã", "hyo": "ã²ã", 240 "mya": "ã¿ã", "myi": "ã¿ã", "myu": "ã¿ã ", "mye": "ã¿ã", "myo": "ã¿ã", 241 "rya": "ãã", "ryi": "ãã", "ryu": "ãã ", "rye": "ãã", "ryo": "ãã", 242 "gya": "ãã", "gyi": "ãã", "gyu": "ãã ", "gye": "ãã", "gyo": "ãã", 243 "zya": "ãã", "zyi": "ãã", "zyu": "ãã ", "zye": "ãã", "zyo": "ãã", 244 "ja": "ãã", "ju": "ãã ", "je": "ãã", "jo": "ãã", "jya": "ãã", "jyi": "ãã", "jyu": "ãã ", "jye": "ãã", "jyo": "ãã", 245 "dya": "ã¢ã", "dyi": "ã¢ã", "dyu": "ã¢ã ", "dye": "ã¢ã", "dyo": "ã¢ã", 246 "bya": "ã³ã", "byi": "ã³ã", "byu": "ã³ã ", "bye": "ã³ã", "byo": "ã³ã", 247 "pya": "ã´ã", "pyi": "ã´ã", "pyu": "ã´ã ", "pye": "ã´ã", "pyo": "ã´ã", 248 "fa": "ãµã", "fi": "ãµã", "fe": "ãµã", "fo": "ãµã", 249 "fya": "ãµã", "fyu": "ãµã ", "fyo": "ãµã", 250 "xa": "ã", "xi": "ã", "xu": "ã ", "xe": "ã", "xo": "ã", "la": "ã", "li": "ã", "lu": "ã ", "le": "ã", "lo": "ã", 251 "xya": "ã", "xyu": "ã ", "xyo": "ã", 252 "xtu": "ã£", "xtsu": "ã£", 253 "wi": "ãã", "we": "ãã", 254 "va": "ã´ã", "vi": "ã´ã", "vu": "ã´", "ve": "ã´ã", "vo": "ã´ã" 255 }; 256 // Macæã®å¦ç䏿¸ã注æ 257 function romanToHiragana(roman) { 258 var i, iz, match, regex, 259 hiragana = "", table = hiraganaBox; 260 261 regex = new RegExp((function (table) { 262 var key, 263 s = "^(?:"; 264 265 for (key in table) if (table.hasOwnProperty(key)) { 266 s += key + "|"; 267 }
268 return s + "(?:n(?![aiueo]|y[aiueo]|$))|" + "([^aiueon])\\1)"; 269 })(table)); 270 for (i = 0, iz = roman.length; i < iz; ++i) { 271 if (match = roman.slice(i).match(regex)) { 272 if (match[0] === "n") { 273 hiragana += "ã"; 274 } else if (/^([^n])\1$/.test(match[0])) { 275 hiragana += "ã£"; 276 --i; 277 } else { 278 hiragana += table[match[0]]; 279 } 280 i += match[0].length - 1; 281 } else { 282 hiragana += roman[i]; 283 } 284 } 285 return hiragana; 286 }; 287 }; 288})(jQuery);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.