feeles-ide
Version:
The hackable and serializable IDE to make learning material
33 lines (28 loc) • 1.52 kB
JavaScript
var regExp = /[!-~”’、。ー]/;
var userWasCanceled = false;
export default function zenkakuToHankaku(cm, change) {
if (userWasCanceled || change.origin !== '+input' && change.origin !== '*compose') return;
// 全角の数字・記号が含まれているかどうか
var hasZenkaku = regExp.test(change.text.join());
if (!hasZenkaku) return;
// 半角に変換する
var text = change.text.map(function (text) {
return text.split('').map(function (char) {
if (regExp.test(char)) {
var hankaku = char.replace(/[!-~]/, function (s) {
return String.fromCharCode(s.charCodeAt(0) - 0xfee0);
}).replace(/”/, '"').replace(/’/, '\'').replace(/、/, ',').replace(/。/, '.').replace(/ー/, '-');
// 置換するか聞く
if (!userWasCanceled && confirm('\u5168\u89D2\u306E ' + char + ' \u304C\u5165\u529B\u3055\u308C\u307E\u3057\u305F\u3002\u30D7\u30ED\u30B0\u30E9\u30DF\u30F3\u30B0\u3067\u306F\u3075\u3064\u3046\u534A\u89D2\u306E ' + hankaku + ' \u3092\u4F7F\u3044\u307E\u3059\u3002 ' + hankaku + ' \u306B\u3057\u307E\u3059\u304B\uFF1F')) {
alert('次からは、キーボードの【全角/半角】または【英数】キーを押して、半角入力にしておきましょう!');
return hankaku;
} else {
// キャンセルされたらもう聞かない
userWasCanceled = true;
}
}
return char;
}).join('');
});
change.update(change.from, change.to, text);
}