入力した漢字がJIS漢字水準のどれか、それは常用漢字か、ついでにUTF16と16進数も表示する
デモ
https://script.google.com/macros/s/AKfycbwy_MVWnJNHV4u61T-Nxdaua3znBRqKa9LxaQnEE0T50zx6uGM/exec
やっていること
- 漢字一覧のJSONファイルを取得してJavaScriptで扱えるようにparseする
- 入力された漢字の[UTF16, 16進数, JIS漢字水準 , 常用漢字]の値を取得する
- それぞれを画面に表示する
事前に作っておくもの
- JIS第一水準から第四水準と常用漢字の一覧から以下のようなJSONファイル
{
"漢字1": [ UTF16, 16進数, JIS漢字水準 , 常用漢字],
"漢字2": [ UTF16, 16進数, JIS漢字水準 , 常用漢字],
...
}
JSONファイルの中身
それを作ったJSONファイル
(個人のGoogleドライブ上に置いているため、予告なく共有設定を切ることもあります)
https://drive.google.com/file/d/1nP585m4LmmoaVlXDDCQPEKEr0pj6FIje/view?usp=sharing
JSONファイルを作るための元データ(wikipediaの情報を元にシートにまとめたもの)
コード.gs
function doGet() {
return HtmlService.createHtmlOutputFromFile("index");
}
var FILE_ID = "1HmoOYSCFh3tq6u22o5eE4hhmjwsle7hv";
function get_jobj_gs() {
var file = DriveApp.getFileById(FILE_ID);
var blob = file.getBlob()
var data = blob.getDataAsString();
var jobj = JSON.parse(data);
return jobj;
}
|
意訳この機能がやること 指定したhtmlファイルを表示する 漢字のデータが入ったJSONFILE_IDを指定(Googleドライブ) この機能がやること FILE_IDからファイルを取得して ファイルのblobを取得して データを取得して オブジェクトに変換して 返す |
index.html
<!DOCTYPE html>
<head>
<style>
.kanji {
width: 120px;
font-size: 60px;
border: none;
}
.tb {
width: 120px;
font-size: 18px;
border: none;
}
table {
border: solid 1px #000000;
border-collapse: collapse;
margin-left: auto;
margin-right: auto;
}
td {
border: solid 1px silver
}
</style>
</head>
<html>
<body>
<table>
<tbody>
<tr>
<td>漢字</td>
<td><input type="text" id="kanji" class="kanji"></td>
</tr>
<tr>
<td>UTF16</td>
<td><input type="text" id="utf16" class="tb" readonly></td>
</tr>
<tr>
<td>16進数</td>
<td><input type="text" id="hexadecimal" class="tb" readonly></td>
</tr>
<tr>
<td>JIS</td>
<td><input type="text" id="category" class="tb" readonly></td>
</tr>
<tr>
<td>常用</td>
<td><input type="text" id="joyo" class="tb" readonly></td>
</tr>
</tbody>
</table>
<script>
var kanji = document.getElementById("kanji");
var utf16 = document.getElementById("utf16");
var hexadecimal = document.getElementById("hexadecimal");
var category = document.getElementById("category");
var joyo = document.getElementById("joyo");
var obj;
kanji.focus()
document.addEventListener('DOMContentLoaded', get_jobj);
kanji.onkeyup = kanji_keyup;
function get_jobj() {
google.script.run
.withFailureHandler(onFailure)
.withSuccessHandler(onSuccess)
.get_jobj_gs();
}
function onSuccess(jobj) {
obj = jobj;
}
function onFailure(e) {
alert([e.message, e.stack]);
}
function kanji_keyup(e) {
var kanji = this.value[0];
var key_code = e.keyCode;
if (key_code == 8) {
clear_result();
get_result(kanji);
} else {
get_result(kanji);
}
}
function get_result(kanji) {
if(/[㐂-頻]/.test(kanji)){
utf16.value = obj[kanji][0];
hexadecimal.value = obj[kanji][1];
category.value = obj[kanji][3];
joyo.value = obj[kanji][4];
}
}
function clear_result() {
utf16.value = '';
hexadecimal.value = '';
category.value = '';
joyo.value = '';
}
</script>
</body>
</html>
|
意訳kanjiのスタイル 幅 文字サイズ 枠線 tbのスタイル 幅 文字サイズ 枠線 tableのスタイル 枠線 枠線を離さず表示 左の余白 右の余白 taのスタイル 枠線 漢字 漢字の入力欄 UTF16 UTF16の出力欄 16進数 16進数の出力欄 JIS JISの出力欄 常用 常用漢字の出力欄 idがkanjiの要素を取得 idがutf16の要素を取得 idがhexadecimalの要素を取得 idがcategoryの要素を取得 idがjoyoの要素を取得 objの入れ物 kanjiにフォーカス DOMの内容が読み込まれたらget_jobjを実行する kanji内でキーが上がったらkanji_keyupを実行する この機能がやること .gsのスクリプトを実行する 失敗したらonFailureを実行する 成功したらonSuccessを実行する 実行する.gsスクリプトはget_jobj_gs この機能がやること 渡されたjobjをobjに入れる この機能がやること 受け取ったエラーをアラートに出す この機能がやること 入力された先頭の漢字をkanjiに入れて 押されたキーコードを取得して もし8なら(8はdeleteキー) clear_resultを実行して get_resultにkanjiを渡す それ以外なら get_resultにkanjiを渡す この機能がやること もし渡されたkanjiが㐂-頻の範囲にあるなら(JIS第一から第四水準がこの範囲内に含まれる前提) objからutf16の値を取得して objからhexadecimalの値を取得して objからcategoryの値を取得して objからjoyoの値を取得してそれぞれの出力欄に入れる この機能がやること utf16の値を空にして hexadecimalの値を空にして categoryの値を空にして joyoの値を空にする |

