利用者:竹麦魚/jastyle.js
出典: フリー百科事典『ウィキペディア(Wikipedia)』
お知らせ: 保存した後、ブラウザのキャッシュをクリアする必要があります。
- Mozilla / Firefox / Safari: [Shift] を押しながら [再読み込み] をクリック、または [Shift]-[Ctrl]-[R] (Macでは [Cmd]-[Shift]-[R]);
- IE: [Ctrl] を押しながら [更新] をクリック、または [Ctrl]-[F5];
- Konqueror: [再読み込み] をクリック、または [F5]
- Opera: 「ツール」→「設定」からキャッシュをクリア。
// jastyle var jastyle_version = '0.6.0'; var jastyle_autostyle_namespaces = [ 0 ]; function install_jastyle() { var f = document.getElementById("editform"); if(!f) return; var html = '', m; if(m = document.body.className.match(/\bns-(\d+)\b/)) { for(var i = 0; i < jastyle_autostyle_namespaces.length; ++i) { if(m[1] == jastyle_autostyle_namespaces[i]) { if(f.addEventListener) f.addEventListener("submit", jastyle, false); else if(f.attachEvent) f.attachEvent("onsubmit", jastyle); html += '<label for="dontstyle"><input type="checkbox" id="dontstyle" value="1">disable autostyle</label>'; break; } } } html += '<button type="button" onclick="jastyle()">style</button>'; html += ' (jastyle version ' + jastyle_version + ')'; var p = document.createElement('p'); p.innerHTML = html; f.parentNode.insertBefore(p, f); } function jastyle() { var dont = document.getElementById('dontstyle'); if(dont && dont.checked) return; var strips = new Array(); var edit = document.getElementById('wpTextbox1'); var tmp = edit.value. // CRLF replace(/\r*\n|\r/g, "\n"). // 全角英数・記号 replace(/#/g, '#').replace(/$/g, '$'). replace(/%/g, '%').replace(/&/g, '&'). replace(/-/g, '-').replace(/^/g, '^'). replace(/@/g, '@').replace(/+/g, '+'). replace(/*/g, '*').replace(/</g, '<'). replace(/>/g, '>').replace(///g, '/'). replace(/_/g, '_').replace(/!/g, '!'). replace(/1/g,'1').replace(/2/g,'2').replace(/3/g,'3').replace(/4/g,'4'). replace(/5/g,'5').replace(/6/g,'6').replace(/7/g,'7').replace(/8/g,'8'). replace(/9/g,'9').replace(/0/g,'0').replace(/A/g,'A').replace(/B/g,'B'). replace(/C/g,'C').replace(/D/g,'D').replace(/E/g,'E').replace(/F/g,'F'). replace(/G/g,'G').replace(/H/g,'H').replace(/I/g,'I').replace(/J/g,'J'). replace(/K/g,'K').replace(/L/g,'L').replace(/M/g,'M').replace(/N/g,'N'). replace(/O/g,'O').replace(/P/g,'P').replace(/Q/g,'Q').replace(/R/g,'R'). replace(/S/g,'S').replace(/T/g,'T').replace(/U/g,'U').replace(/V/g,'V'). replace(/W/g,'W').replace(/X/g,'X').replace(/Y/g,'Y').replace(/Z/g,'Z'). replace(/a/g,'a').replace(/b/g,'b').replace(/c/g,'c').replace(/d/g,'d'). replace(/e/g,'e').replace(/f/g,'f').replace(/g/g,'g').replace(/h/g,'h'). replace(/i/g,'i').replace(/j/g,'j').replace(/k/g,'k').replace(/l/g,'l'). replace(/m/g,'m').replace(/n/g,'n').replace(/o/g,'o').replace(/p/g,'p'). replace(/q/g,'q').replace(/r/g,'r').replace(/s/g,'s').replace(/t/g,'t'). replace(/u/g,'u').replace(/v/g,'v').replace(/w/g,'w').replace(/x/g,'x'). replace(/y/g,'y').replace(/z/g,'z'). // 救済 replace(/([A-Za-z0-9]).[ \s]*/g, '$1. '). replace(/([A-Za-z0-9]),[ \s]*/g, '$1, '). // 句読点・半角カナ replace(/[,、]/g, '、').replace(/[.。]/g, '。'). replace(/ガ/g, 'ガ').replace(/ギ/g, 'ギ').replace(/グ/g, 'グ'). replace(/ゲ/g, 'ゲ').replace(/ゴ/g, 'ゴ').replace(/ザ/g, 'ザ'). replace(/ジ/g, 'ジ').replace(/ズ/g, 'ズ').replace(/ゼ/g, 'ゼ'). replace(/ゾ/g, 'ゾ').replace(/ダ/g, 'ダ').replace(/ヂ/g, 'ヂ'). replace(/ヅ/g, 'ヅ').replace(/デ/g, 'デ').replace(/ド/g, 'ド'). replace(/バ/g, 'バ').replace(/ビ/g, 'ビ').replace(/ブ/g, 'ブ'). replace(/ベ/g, 'ベ').replace(/ボ/g, 'ボ').replace(/パ/g, 'パ'). replace(/ピ/g, 'ピ').replace(/プ/g, 'プ').replace(/ペ/g, 'ペ'). replace(/ポ/g, 'ポ').replace(/ヴ/g, 'ヴ'). replace(/ァ/g, 'ァ').replace(/ィ/g, 'ィ').replace(/ゥ/g, 'ゥ'). replace(/ェ/g, 'ェ').replace(/ォ/g, 'ォ').replace(/ッ/g, 'ッ'). replace(/ャ/g, 'ャ').replace(/ュ/g, 'ュ').replace(/ョ/g, 'ョ'). replace(/ア/g, 'ア').replace(/イ/g, 'イ').replace(/ウ/g, 'ウ'). replace(/エ/g, 'エ').replace(/オ/g, 'オ').replace(/カ/g, 'カ'). replace(/キ/g, 'キ').replace(/ク/g, 'ク').replace(/ケ/g, 'ケ'). replace(/コ/g, 'コ').replace(/サ/g, 'サ').replace(/シ/g, 'シ'). replace(/ス/g, 'ス').replace(/セ/g, 'セ').replace(/ソ/g, 'ソ'). replace(/タ/g, 'タ').replace(/チ/g, 'チ').replace(/ツ/g, 'ツ'). replace(/テ/g, 'テ').replace(/ト/g, 'ト').replace(/ナ/g, 'ナ'). replace(/ニ/g, 'ニ').replace(/ヌ/g, 'ヌ').replace(/ネ/g, 'ネ'). replace(/ノ/g, 'ノ').replace(/ハ/g, 'ハ').replace(/ヒ/g, 'ヒ'). replace(/フ/g, 'フ').replace(/ヘ/g, 'ヘ').replace(/ホ/g, 'ホ'). replace(/マ/g, 'マ').replace(/ミ/g, 'ミ').replace(/ム/g, 'ム'). replace(/メ/g, 'メ').replace(/モ/g, 'モ').replace(/ヤ/g, 'ヤ'). replace(/ユ/g, 'ユ').replace(/ヨ/g, 'ヨ').replace(/ラ/g, 'ラ'). replace(/リ/g, 'リ').replace(/ル/g, 'ル').replace(/レ/g, 'レ'). replace(/ロ/g, 'ロ').replace(/ワ/g, 'ワ').replace(/ヲ/g, 'ヲ'). replace(/ン/g, 'ン').replace(/ー/g, 'ー'). replace(/「/g, '「').replace(/」/g, '」').replace(/・/g, '・'). replace(/゙/g, '゛').replace(/゚/g, '゜'). // 機種依存記号 replace(/①/g, '(1)').replace(/②/g, '(2)').replace(/③/g, '(3)'). replace(/④/g, '(4)').replace(/⑤/g, '(5)').replace(/⑥/g, '(6)'). replace(/⑦/g, '(7)').replace(/⑧/g, '(8)').replace(/⑨/g, '(9)'). replace(/⑩/g, '(10)').replace(/⑪/g, '(11)').replace(/⑫/g, '(12)'). replace(/⑬/g, '(13)').replace(/⑭/g, '(14)').replace(/⑮/g, '(15)'). replace(/⑯/g, '(16)').replace(/⑰/g, '(17)').replace(/⑱/g, '(18)'). replace(/⑲/g, '(19)').replace(/⑳/g, '(20)'). replace(/Ⅰ/g, 'I').replace(/Ⅱ/g, 'II').replace(/Ⅲ/g, 'III'). replace(/Ⅳ/g, 'IV').replace(/Ⅴ/g, 'V').replace(/Ⅵ/g, 'VI'). replace(/Ⅶ/g, 'VII').replace(/Ⅷ/g, 'VIII').replace(/Ⅸ/g, 'IX'). replace(/Ⅹ/g, 'X').replace(/㍉/g, 'ミリ').replace(/㌔/g, 'キロ'). replace(/㌢/g, 'センチ').replace(/㍍/g, 'メートル'). replace(/㌘/g, 'グラム').replace(/㌧/g, 'トン').replace(/㌃/g, 'アール'). replace(/㌶/g, 'ヘクタール').replace(/㍑/g, 'リットル'). replace(/㍗/g, 'ワット').replace(/㌍/g, 'カロリー').replace(/㌦/g, 'ドル'). replace(/㌣/g, 'セント').replace(/㌫/g, 'パーセント'). replace(/㍊/g, 'ミリバール').replace(/㌻/g, 'ページ'). replace(/㎜/g, 'mm').replace(/㎝/g, 'cm').replace(/㎞/g, 'km'). replace(/㎎/g, 'mg').replace(/㎏/g, 'kg').replace(/㏄/g, 'cc'). replace(/㎡/g, 'm²').replace(/㍻/g, '平成'). replace(/〝/g, '「').replace(/〟/g, '」').replace(/№/g, 'No.'). replace(/㏍/g, 'K.K.').replace(/℡/g, 'Tel').replace(/㊤/g, '(上)'). replace(/㊥/g, '(中)').replace(/㊦/g, '(下)').replace(/㊧/g, '(左)'). replace(/㊨/g, '(右)').replace(/㈱/g, '(株)').replace(/㈲/g, '(有)'). replace(/㈹/g, '(代)').replace(/㍾/g, '明治').replace(/㍽/g, '大正'). replace(/㍼/g, '昭和'). // Wiki記法 replace(/\s*\n-----*\s*/g, "\n----\n\n"). replace(/\{\{msg:/ig, '{{'). replace(/\{\{SERVER\}\}\{\{localurl:/ig, '{{fullurl:'). replace(/(\[\[:?)Category:/ig, '$1Category:'); if(location.host == 'ja.wikipedia.org') { tmp = tmp.replace(/\[\[w(:[a-z]{2,3}:)/g, '[[$1'). replace(/\[\[w:/ig, '[[:en:'); } // タグ tmp = tmp. replace(/\s*<\/?br\s*\/?>/ig, '<br/>'). replace(/\s*<\/?hr\s*\/?>\s*/ig, "\n----\n\n"). replace(/<(center|div|span|font|tr|td|th|table|caption)/ig, function(str) { return str.toLowerCase(); }). replace(/<\/(center|div|span|font|tr|td|th|table|caption)>/ig, function(str) { return str.toLowerCase(); }). replace(/(cell(padd|spac)ing|v?align|width|style|border)\s*=\s*/ig, function(str, p1) { return p1.toLowerCase() + '='; }); // strip tmp = tmp.replace(/<pre[^>]*?>(.|\n)*?<\/pre>/g, function(str) { var i = strips.length; strips[i] = str; return '<!--@@ jastyle-STRIP-' + i + ' @@-->'; }); // 行頭認識がいるもの var lines = tmp.split('\n'); var out = '', pre_p = false; for(var i = 0; i < lines.length; i++) { tmp = lines[i]. // 行頭の全角空白 replace(/^ +/g, ''). // 行頭の * : # ; replace(/^([\*\:\#\;]+)[\s ]*/, '$1 '). // REDIRECTだけ戻す replace(/^# REDIRECT[^\[]*\[\[/i, '#REDIRECT[['); // // '''で終わる行を ; に置き換え // replace(/^\'\'\'(.*?)\'\'\'$/, '; \'\'\'$1\'\'\''). if(!tmp.match(/^ /)) { // 行末空白除去 (半角空白しかない場合は除去しない for <pre>) tmp = tmp.replace(/[\s ]+$/, ''); pre_p = false; } else if(tmp.match(/^[\s ]+$/) && !pre_p) { // 孤立した空白のみの行 tmp = ''; } else { pre_p = true; } // == == if(tmp.match(/^=.*[^=]=/)) { tmp = tmp. replace(/^(={1,5})[\s ]*/, '$1 '). replace(/[\s ]*(={1,5})$/, ' $1'). replace(/関連(記事|事項|用語)/g, '関連項目'). replace(/外部(参照)?((への)?リンク|サイト)|関連リンク/g, '外部リンク'); } // interwiki if(tmp.match(/^\[\[([a-z]{2,3}|fiu-vro|pt-br|roa-rup|simple|zh-min-nan):.*?\]\]$/)) { tmp = decodeURI(tmp). replace(/&#((x[\dA-Fa-f]+)|\d+);/ig, function(str, dec, hex) { var ch = hex ? parseInt("0" + hex) : parseInt(dec, 10); return String.fromCharCode(ch); }). replace(/ /g, '_'); } out += tmp + '\n'; } out = out. replace(/^\s+/, '').replace(/\s+$/, ''). // 二行以上の空行トルツメ replace(/\n{3,}/g, '\n\n'). // 見出しの後の空行トルツメ replace(/==\n+/g, '==\n'). // 見出しの前に空行を挿入 replace(/([^=\n])\n+==/g, '$1\n\n=='). // 空白 replace(/[ \t]+/g, ' '); // unstrip out = out.replace(/<!--@@ jastyle-STRIP-(\d+) @@-->/g, function(str, n) { return strips[n]; }); edit.value = out + "\n"; return true; } addOnloadHook(install_jastyle);