User:Yes0song/hani converter.js

Note: After publishing, you may have to bypass your browser's cache to see the changes.

  • Firefox / Safari: Hold Shift while clicking Reload, or press either Ctrl-F5 or Ctrl-R (⌘-R on a Mac)
  • Google Chrome: Press Ctrl-Shift-R (⌘-Shift-R on a Mac)
  • Internet Explorer / Edge: Hold Ctrl while clicking Refresh, or press Ctrl-F5
  • Opera: Press Ctrl-F5.
// 이 스크립트에 대한 안내 및 설치 방법은 [[User:Yes0song/漢字 異體字 變換機]]를 참조해 주십시오.

 // 異體字 變換 스크립트
 // 原本 소스: http://incubator.wikimedia.org/w/index.php?title=User:Leque/monobook.js&oldid=76535
 // 修正, maintainer: [[User:Yes0song]]
 //
 // 生成되는 탭의 目錄
 // ks: 本文의 漢字를 KS 코드 內의 漢字 中 常用漢字에 近接한 것으로 統一시킴.
 // 常用漢字: 本文의 漢字를 常用漢字로 統一시킴(KS 코드 範圍 벗어남).
 // 本字: 本文의 漢字를 本字로 統一시킴(KS 코드 範圍 벗어남).
 //
 // 本 소스에서 使用된 略號
 // kss: KS 코드 內의 漢字 中 常用漢字이거나 그것에 近接한 글자.
 // (예: 萬, 草, 産, 强)
 // syo: KS 코드 外의 常用漢字 및 이와 類似한 글자.
 // (예: 產)
 // bja: KS 코드 外의 本字. 但, 古字類는 排除.
 // (예: 強)

 var conversionTables = {
     "ks": {
 	// syo->kss
 	"吿": "告", "祕": "秘", "產": "産", "插": "揷", "叙": "敍", "鎻": "鎖", "顏": "顔",
 	"鴈": "雁", "彥": "彦", "研": "硏", "妍": "姸", "艷": "艶", "衞": "衛", "絕": "絶", 
 	"即": "卽", "册": "冊", "栅": "柵", "豐": "豊",
 	// "畫": "畵", //畫는 劃일 수도 있어서 一旦 이 글자는 變換하지 않도록 設定함.
 	// "畫": "劃", //畫은 畵일 수도 있어서 一旦 이 글자는 變換하지 않도록 設定함.
 
 	// bja->kss
 	"強": "强", "皋": "皐", "躳": "躬", "竆": "窮",
 	"亙": "亘", // 亘이 '뻗칠 긍'일 때만 亙과 異體字 關係 成立.
 		   // 亘이 '펼 선'일 때는 宣과 通字 關係 成立.
 	"涼": "凉", "畱": "留", "橊": "榴", "澑": "溜", "璢": "瑠", "癅": "瘤",
 	// 以上 畱→留(留가 KS에 있으므로 거기에 맞춤)
 	"冰": "氷", "彝" :"彛", "姊": "姉", "恆": "恒", "郉": "邢", 
 	"籀": "籒", // 이것은 反對로 留→畱의 變換. 籒가 KS 擴張漢字에 있으므로 거기에 맞춤.
 	"霸": "覇", "戲": "戱", 
 
 	// 其他
 	"黙": "默" // [[한/글|아래아한글]]에서 默이 黙으로 잘못 整理됨. 아래아한글을 通해
 		   // 編輯하는 使用者를 配慮하여 追加함.
 	},
 
     "sy": {
 	// kss->syo
 	"告": "吿", "秘": "祕", "産": "產", "揷": "插", "敍": "叙", "鎖": "鎻", "顔": "顏",
 	"雁": "鴈", "彦": "彥", "硏": "研", "妍": "姸", "艷": "艶", "衛": "衞", "絶": "絕", 
 	"卽": "即", "冊": "册", "柵": "栅", "豊": "豐", 
 	"畵": "畫",
 	// "劃": "畫", //劃은 畫으로 바꾸면 안 되는 境遇도 있다는 見解가 있어
 			// 一旦 이 글자는 變換하지 않도록 設定함.
 
 	// bja->syo, kss
 	"強": "强", "皋": "皐", "躳": "躬", "竆": "窮",
 	"亙": "亘", // 亘이 '뻗칠 긍'일 때만 亙과 異體字 關係 成立.
 		   // 亘이 '펼 선'일 때는 宣과 通字 關係 成立.
 	"涼": "凉", "畱": "留", "橊": "榴", "㙧": "塯", "澑": "溜", "璢": "瑠", "癅": "瘤",
 	"羀": "罶", "鐂": "鎦", "飅": "飀", "驑": "騮",
 	// 以上 畱→留(留가 常用漢字이므로 거기에 맞춤)
 	"冰": "氷", "彝" :"彛", "姊": "姉", "恆": "恒", "郉": "邢", 
 	"籀": "籒", // 이것은 反對로 留→畱의 變換. 籒와 籀는 常用漢字에서 빠진 글자.
 		   // 大韓民國의 漢字混用文에서 一般的으로 KS 擴張漢字에 있는 籒를 使用하는
 		   // 傾向이 많은 것으로 判斷되므로, 留 等과 反對로 變換함.
 	"霸": "覇", "戲": "戱", 
 
 	// 其他
 	"黙": "默" // [[한/글|아래아한글]]에서 默이 黙으로 잘못 整理됨. 아래아한글을 通해
 		   // 編輯하는 使用者를 配慮하여 追加함.
 	},
 
     "bj": {
 	// kss->bj
 	"告": "吿", "秘": "祕", "産": "產", "揷": "插", "叙": "敍", "鎻": "鎖", "顔": "顏",
 	"雁": "鴈", "彦": "彥", "研": "硏", "妍": "姸", "艶": "艷", "衛": "衞", "絶": "絕", 
 	"即": "卽", "冊": "册", "柵": "栅", "豊": "豐", 
 
 	// syo->bj, kss
 	"强": "強", "皐": "皋", "躬": "躳", "窮": "竆",
 	// "亘": "亙", // 亘이 '뻗칠 긍'일 때만 亙과 異體字 關係 成立.
 		     // 亘이 '펼 선'일 때는 宣과 通字 關係 成立.
 		     // 一旦 이 글자는 變換하지 않도록 設定함.
 	"凉": "涼", "留": "畱", "榴": "橊", "塯": "㙧", "溜": "澑", "瑠": "璢", "瘤": "癅",
 	"罶": "羀", "鎦": "鐂", "飀": "飅", "騮": "驑",
 	// 以上 留→畱(留가 常用漢字이므로 거기에 맞춤)
 	"氷": "冰", "彛" :"彝", "姉": "姊", "恒": "恆", "邢": "郉", 
 	"籀": "籒", // 이것도 留→畱
 	"霸": "覇", "戱": "戲", 
 
 	// 其他
 	"黙": "默" // [[한/글|아래아한글]]에서 默이 黙으로 잘못 整理됨. 아래아한글을 通해
 		   // 編輯하는 使用者를 配慮하여 追加함.
 	},
 
 };
 
 var menu_items = {
     "ks": "ks",
     "常用漢字": "sy",
     "本字": "bj",
 }
 
 function copyPropsInto(targetObj) {
     var i, prop, fromObj;
 
     for (i = 1; i < arguments.length; i++) {
 	fromObj = arguments[i];
 	for (prop in fromObj) {
 	    targetObj[prop] = fromObj[prop];
 	}
     }
 }
 
 function getParameter(search, param)
 {
     var r;
 
     if (r = search.match("[?&;]" + param + "=([-._~a-zA-Z0-9]*)")) {
 	return r[1];
     } else {
 	return null;
     }
 }
 
 function convertZitai(kind) {
     var table = conversionTables[kind];
     var elems = document.getElementsByTagName("*");
     var i, j;
 
     for (i = 0; i < elems.length; i++) {
 	var elem = elems.item(i);
 	var nodes = elem.childNodes;
 
 	for (j = 0; j < nodes.length; j++) {
 	    if (nodes.item(j).nodeType == 3) {
 		var text_node = nodes.item(j);
 		text_node.nodeValue = text_node.nodeValue.replace(/./g, function(str) { return table.hasOwnProperty(str) ? table[str] : str; });
 	    }
 	}
     }
 
 }
 
 function initZitaiConverter() {
     var seizi, ryakuzi, kana;
     var anchor, li;

     for (kyuuzi in conversionTables.kyuuzi2sinzi) {
 	sinzi = conversionTables.kyuuzi2sinzi[kyuuzi];
 	if (!conversionTables.sinzi2kyuuzi[sinzi]) {
 	    conversionTables.sinzi2kyuuzi[sinzi] = kyuuzi;
 	} else {
 	    conversionTables.sinzi2kyuuzi[sinzi] = sinzi;
 	}
     }
 
     copyPropsInto(conversionTables.old_style,
 		  conversionTables.sinzi2kyuuzi,
 		  conversionTables.enlarge_small_kana)
     copyPropsInto(conversionTables.archaic_style,
 		  conversionTables.old_style,
 		  conversionTables.remove_dakuten_handakuten,
 		  conversionTables.remove_kutouten);
 
     var menu = document.getElementById("ca-edit").parentNode;
 
     for (var label in menu_items) {
 	var v = menu_items[label];
 	anchor = document.createElement("a");
 	anchor.appendChild(document.createTextNode(label));
 	anchor.href = document.location.pathname + "?variant=" + v;
 
 	li = document.createElement("li");
 	li.id = "char-trans:" + v;
 	li.appendChild(anchor);
 
 	menu.appendChild(li);
     }
 
     var variant = getParameter(document.location.search, "variant");
     if (variant)
 	convertZitai(variant);
 }
 
 if (window.addEventListener) {
     window.addEventListener("load", initZitaiConverter, false);
 } else if (window.attachEvent) {
     window.attachEvent("onload", initZitaiConverter);
 }

 // 異體字 變換 스크립트 끝.