利用者:Hiro3600/char-convert0.js
注意: 保存後、変更を確認するにはブラウザーのキャッシュを消去する必要がある場合があります。
- Firefox / Safari: Shift を押しながら 再読み込み をクリックするか、Ctrl-F5 または Ctrl-R を押してください (Mac では ⌘-R)
- Google Chrome: Ctrl-Shift-R を押してください (Mac では ⌘-Shift-R)
- Internet Explorer / Microsoft Edge: Ctrl を押しながら 最新の情報に更新 をクリックするか、Ctrl-F5 を押してください
- Opera: Ctrl-F5を押してください
// ボタン操作により、
// 辞書ファイル及びclassがk-ancient1(「テンプレート:異体字使用」)の定義を元に変換テーブルを作成し
// classがmw-body-contentのDIVに対し、旧漢字を代用の漢字に置換
$(function() {
var namespaceNumber = mw.config.get('wgNamespaceNumber');
if (namespaceNumber !== 0) if (namespaceNumber != 2) return; //標準とユーザページに適用
$("#p-namespaces>ul").append($("<li><br />常用</li>").attr({'id': 'cnv_btn1','title':'常用漢字に変換'}).css({'color':'#0000ff','cursor':'pointer'}));
var dicData;
var dfd = new $.Deferred();
$(document).on('click','#cnv_btn1',function(){
getDic();
dfd.promise().then(function() {
console.log('deferred done');
var rp_data0 = arrangeData(dicData);
if ( $('.k-ancient1').length !== 0) {
var rp_data1 = setReplaceData(); //html内の置換定義を取得
$.extend(rp_data0, rp_data1); //置換定義をマージ
}
var txt= $('.mw-body-content').html();
console.log("replace-start");
$.each(rp_data0, function(key, value){
// console.log("置換文字:" + key + " → " + value);
txt = txt.replace(new RegExp(key, 'g'),value);
});
$('.mw-body-content').html(txt);
// 画像フォントをAlt文字に置換 (width<20は一般画像との区分け)
$('.mw-body-content img[alt]').each(function(i, image) {
if ($(image).width() < 20) $(image).replaceWith(document.createTextNode(image.alt));
});
console.log("replace-end");
$('#cnv_btn1').css({'color':'#000000'});
});
});
// ページ内の置換文字定義を取得(区切り文字「は」→「:」、「、」→「,」に置換)
function setReplaceData(){
var str0 = $('.k-ancient1').text().replace(/は/g,"\":\"").replace(/、/g,"\", \"");
var strj = JSON.parse("{\"" + str0 + "\"}");
return strj;
}
//辞書データの取得
function getDic() {
var pageids = "16658"; //辞書ページのPAGEIDS:"16658"
var dAstr = "*"; //データの中のマーカー
$.ajax({
type: "GET",
scriptCharset: "utf-8",
dataType: "jsonp",
url: "https://ja.wikisource.org/w/api.php?action=query&prop=revisions&rvprop=content&format=json&pageids="+pageids,
})
.done(function(json) {
dicData = json.query.pages[pageids].revisions[0][dAstr];
dfd.resolve();
})
.fail(function() {
alert( "辞書読取エラー" );
});
}
// データの整形、ユニコード文字化
function arrangeData(ddata) {
var lines = ddata.split( '\n' );
var strD =[];
for ( var i = 1; i < lines.length-1; i++ ) {
if (lines[i].match(/\*\s*([\S]*)\s*[::→]\s*([\S]*)/)) {
if (strD.length !==0) strD = strD + ", ";
strD = strD + "\""+RegExp.$1+"\":\""+RegExp.$2+"\"";
}
}
strD=strD.replace(/\;/g,"").replace( /&#x([0-9A-F]+)/g , function(c){
return unescape("%u"+RegExp.$1);
});
var strK = JSON.parse("{" + strD + "}");
return strK;
}
});