「Wikipediaマークアップ修正」の版間の差分
ソースコードの簡素化 |
日付処理を追加、ウィキリンク処理をカテゴリ処理に変更 |
||
| (同じ利用者による、間の11版が非表示) | |||
| 24行目: | 24行目: | ||
#tooltip = "Wikipediaのマークアップや表記を修正します。" | #tooltip = "Wikipediaのマークアップや表記を修正します。" | ||
// -------------------------------------------------- | |||
// 置換処理の定義 | |||
// | // -------------------------------------------------- | ||
f | // [0] メニュー表示名 | ||
// [1] 実行する置換関数 | |||
// -------------------------------------------------- | |||
var f = [ | |||
["タブ文字", tab_character], | |||
["全角空白", fullwidth_space], | |||
["全角記号", fullwidth_symbols], | |||
["全角英数", fullwidth_alphanumeric_characters], | |||
["半角カナ", halfwidth_kana], | |||
["約物", punctuation_marks], | |||
["ローマ数字", roman_numerals], | |||
["丸数字", circled_numbers], | |||
["空白", space], | |||
["改行・空行", line_breaks_and_blank_lines], | |||
["1行改行", single_line_break], | |||
["箇条書き", bullet_points], | |||
["表・Infobox", tables_and_infoboxes], | |||
["日付", date], | |||
["タグ", tag], | |||
["カテゴリ", category], | |||
["リダイレクト", redirect], | |||
["マジックリンク", magic_links], | |||
["テンプレート", templates], | |||
["注釈", notes], | |||
["出典", references], | |||
["脚注", footnotes] | |||
]; | |||
// ポップアップメニューを作成 | // ポップアップメニューを作成 | ||
var menu = CreatePopupMenu(); | var menu = CreatePopupMenu(); | ||
// 「すべての置換処理を順番に実行」メニュー | |||
menu.Add("すべて実行", 1, 0); | |||
menu.Add("", 0, meMenuSeparator); | |||
// 個別の置換処理メニュー | |||
for (var i = 0; i < f.length; i++) { | for (var i = 0; i < f.length; i++) { | ||
menu.Add(f[i][0], i + | menu.Add(f[i][0], i + 2, 0); | ||
} | } | ||
// | |||
// ポップアップメニューを表示 | |||
var n = menu.Track(mePosMouse); | var n = menu.Track(mePosMouse); | ||
// | |||
// メニューが選択されなかった場合は終了 | |||
if (n == 0) { | if (n == 0) { | ||
Quit(); | Quit(); | ||
| 63行目: | 77行目: | ||
var sel = document.selection; | var sel = document.selection; | ||
// | // 未選択の場合は全文を対象にする | ||
if (sel.Text == "") { | if (sel.Text == "") { | ||
sel.SelectAll(); | sel.SelectAll(); | ||
} | } | ||
// | // 対象テキストを取得 | ||
var s = sel.Text; | var s = sel.Text; | ||
// | // すべての置換処理を実行 | ||
s = f[n - | if (n == 1) { | ||
for (var i = 0; i < f.length; i++) { | |||
s = f[i][1](s); | |||
} | |||
} | |||
// 選択された置換処理のみ実行 | |||
else { | |||
s = f[n - 2][1](s); | |||
} | |||
// | // 置換結果を反映 | ||
sel.Text = s; | sel.Text = s; | ||
// ------------------------- | |||
// 置換処理用関数 | |||
// ------------------------- | |||
// タブ文字 | |||
function tab_character(s) { | |||
return s | |||
.replace(/\t/g, ' '); //タブ文字(U+0009)を半角空白(U+0020)に変更 | |||
} | |||
// 全角空白 | // 全角空白 | ||
function fullwidth_space(s) { | function fullwidth_space(s) { | ||
return s | return s | ||
.replace(/ /g, ' '); | .replace(/ /g, ' '); //全角空白(U+3000)を半角空白(U+0020)に変更 | ||
} | } | ||
| 362行目: | 394行目: | ||
.replace(/㊾/g, '(49)') | .replace(/㊾/g, '(49)') | ||
.replace(/㊿/g, '(50)'); | .replace(/㊿/g, '(50)'); | ||
} | } | ||
| 451行目: | 417行目: | ||
.replace(/==\n\n/g, '==\n') //見出しの後の空行をトルツメ | .replace(/==\n\n/g, '==\n') //見出しの後の空行をトルツメ | ||
.replace(/([^=\n])\n==/g, '$1\n\n==') //見出しの前に空行を挿入 | .replace(/([^=\n])\n==/g, '$1\n\n==') //見出しの前に空行を挿入 | ||
.replace(/\n\n(===+) 注釈 (===+)/g, '\n$1 注釈 $2') //レベル3以降の注釈見出しの前の空行をトルツメ | .replace(/\n\n(===+) 注釈 (===+)/g, '\n$1 注釈 $2') //レベル3以降の注釈見出しの前の空行をトルツメ | ||
.replace(/\n\n(===+) 出典 (===+)/g, '\n$1 出典 $2') //レベル3以降の出典見出しの前の空行をトルツメ | .replace(/\n\n(===+) 出典 (===+)/g, '\n$1 出典 $2'); //レベル3以降の出典見出しの前の空行をトルツメ | ||
.replace(/\[\ | } | ||
.replace(/([^\n | |||
// 1行改行 | |||
function single_line_break(s) { | |||
return s | |||
.replace(/。\n([^\n\*#;:<\|].*?)。/g, '。$1。') //句点の後の1行改行をトルツメ(1周目) | |||
.replace(/。\n([^\n\*#;:<\|].*?)。/g, '。$1。') //句点の後の1行改行をトルツメ(2周目) | |||
.replace(/、\n([^\n\*#;:].*?)/g, '、$1') //読点の後の1行改行をトルツメ(1周目) | |||
.replace(/、\n([^\n\*#;:].*?)/g, '、$1') //読点の後の1行改行をトルツメ(2周目) | |||
.replace(/<br \/>\n([^\n\*#;:].*?)/g, '<br />$1') //改行タグの後の1行改行をトルツメ(1周目) | |||
.replace(/<br \/>\n([^\n\*#;:].*?)/g, '<br />$1'); //改行タグの後の1行改行をトルツメ(2周目) | |||
} | } | ||
| 467行目: | 442行目: | ||
.replace(/^(\*)(.*?)\n\n(\*|#|:)/gm, '$1$2\n$3') //箇条書きと箇条書きの間の空行をトルツメ(1周目) | .replace(/^(\*)(.*?)\n\n(\*|#|:)/gm, '$1$2\n$3') //箇条書きと箇条書きの間の空行をトルツメ(1周目) | ||
.replace(/^(\*)(.*?)\n\n(\*|#|:)/gm, '$1$2\n$3') //箇条書きと箇条書きの間の空行をトルツメ(2周目) | .replace(/^(\*)(.*?)\n\n(\*|#|:)/gm, '$1$2\n$3') //箇条書きと箇条書きの間の空行をトルツメ(2周目) | ||
.replace(/^(#|;|:)(.*?)\n\n(\*|#|;|:)/gm, '$1$2\n$3') //箇条書きと箇条書きの間の空行をトルツメ(1周目) | .replace(/^(#|;|:)(.*?)\n\n(\*|#|;|:)/gm, '$1$2\n$3') //箇条書きと箇条書きの間の空行をトルツメ(1周目) | ||
.replace(/^(#|;|:)(.*?)\n\n(\*|#|;|:)/gm, '$1$2\n$3'); //箇条書きと箇条書きの間の空行をトルツメ(2周目) | .replace(/^(#|;|:)(.*?)\n\n(\*|#|;|:)/gm, '$1$2\n$3'); //箇条書きと箇条書きの間の空行をトルツメ(2周目) | ||
} | } | ||
| 487行目: | 451行目: | ||
.replace(/^\|(.*?)\n\n\|/gm, '|$1\n|') //行頭のバーティカルバーと次の行頭のバーティカルバーの間の空行をトルツメ(1周目) | .replace(/^\|(.*?)\n\n\|/gm, '|$1\n|') //行頭のバーティカルバーと次の行頭のバーティカルバーの間の空行をトルツメ(1周目) | ||
.replace(/^\|(.*?)\n\n\|/gm, '|$1\n|') //行頭のバーティカルバーと次の行頭のバーティカルバーの間の空行をトルツメ(2周目) | .replace(/^\|(.*?)\n\n\|/gm, '|$1\n|') //行頭のバーティカルバーと次の行頭のバーティカルバーの間の空行をトルツメ(2周目) | ||
.replace(/^!(.*?)\n\n!/gm, '!$1\n!') //行頭の感嘆符と次の行頭の感嘆符の間の空行をトルツメ(1周目) | .replace(/^!(.*?)\n\n!/gm, '!$1\n!') //行頭の感嘆符と次の行頭の感嘆符の間の空行をトルツメ(1周目) | ||
.replace(/^!(.*?)\n\n!/gm, '!$1\n!'); //行頭の感嘆符と次の行頭の感嘆符の間の空行をトルツメ(2周目) | .replace(/^!(.*?)\n\n!/gm, '!$1\n!'); //行頭の感嘆符と次の行頭の感嘆符の間の空行をトルツメ(2周目) | ||
} | |||
// 日付 | |||
function date(s) { | |||
return s | |||
.replace(/\[\[([\d]{1,4})年\]\]/g, '$1年') | |||
.replace(/\[\[([\d]{1,2})月\]\]/g, '$1月') | |||
.replace(/\[\[([\d]{1,2})日\]\]/g, '$1日') | |||
.replace(/\[\[([\d]{1,2})月([\d]{1,2})日\]\]/g, '$1月$2日'); | |||
} | } | ||
| 497行目: | 470行目: | ||
} | } | ||
// | // カテゴリ | ||
function | function category(s) { | ||
return s | return s | ||
.replace(/\[\[(カテゴリ|category):/g, '[[Category:'); | .replace(/\[\[(カテゴリ|category):/g, '[[Category:'); | ||
| 511行目: | 484行目: | ||
.replace(/#redirect|#転送/g, '#REDIRECT') | .replace(/#redirect|#転送/g, '#REDIRECT') | ||
.replace(/#REDIRECT( ?)\[\[/g, '#REDIRECT [['); | .replace(/#REDIRECT( ?)\[\[/g, '#REDIRECT [['); | ||
} | |||
// マジックリンク | |||
function magic_links(s) { | |||
return s | |||
.replace(/ISBN ([\d\-X]{10,17})/g, '{{ISBN|$1}}') | |||
.replace(/PMID ([\d]{1,8})/g, '{{PMID|$1}}') | |||
.replace(/RFC ([\d]{1,5})/g, '{{IETF RFC|$1}}'); | |||
} | |||
// テンプレート | |||
function templates(s) { | |||
return s | |||
.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(/{{Tl\|a/g, '{{Tl|A') | |||
.replace(/{{Tl\|b/g, '{{Tl|B') | |||
.replace(/{{Tl\|c/g, '{{Tl|C') | |||
.replace(/{{Tl\|d/g, '{{Tl|D') | |||
.replace(/{{Tl\|e/g, '{{Tl|E') | |||
.replace(/{{Tl\|f/g, '{{Tl|F') | |||
.replace(/{{Tl\|g/g, '{{Tl|G') | |||
.replace(/{{Tl\|h/g, '{{Tl|H') | |||
.replace(/{{Tl\|i/g, '{{Tl|I') | |||
.replace(/{{Tl\|j/g, '{{Tl|J') | |||
.replace(/{{Tl\|k/g, '{{Tl|K') | |||
.replace(/{{Tl\|l/g, '{{Tl|L') | |||
.replace(/{{Tl\|m/g, '{{Tl|M') | |||
.replace(/{{Tl\|n/g, '{{Tl|N') | |||
.replace(/{{Tl\|o/g, '{{Tl|O') | |||
.replace(/{{Tl\|p/g, '{{Tl|P') | |||
.replace(/{{Tl\|q/g, '{{Tl|Q') | |||
.replace(/{{Tl\|r/g, '{{Tl|R') | |||
.replace(/{{Tl\|s/g, '{{Tl|S') | |||
.replace(/{{Tl\|t/g, '{{Tl|T') | |||
.replace(/{{Tl\|u/g, '{{Tl|U') | |||
.replace(/{{Tl\|v/g, '{{Tl|V') | |||
.replace(/{{Tl\|w/g, '{{Tl|W') | |||
.replace(/{{Tl\|x/g, '{{Tl|X') | |||
.replace(/{{Tl\|y/g, '{{Tl|Y') | |||
.replace(/{{Tl\|z/g, '{{Tl|Z') | |||
.replace(/{{デフォルトソート:/g, '{{DEFAULTSORT:'); | |||
} | } | ||
| 534行目: | 573行目: | ||
.replace(/{{Refnest\|group="注"( ?)\|/g, '{{Efn2|') //{{Efn2|に変更 | .replace(/{{Refnest\|group="注"( ?)\|/g, '{{Efn2|') //{{Efn2|に変更 | ||
.replace(/{{Refnest/g, '{{Efn2') //{{Efn2に変更 | .replace(/{{Refnest/g, '{{Efn2') //{{Efn2に変更 | ||
.replace(/{{Efn\|/g, '{{Efn2|') //{{Efn2|に変更 | .replace(/{{Efn\|/g, '{{Efn2|') //{{Efn2|に変更 | ||
.replace(/([^\n]){{Efn2\|/g, '$1\n{{Efn2|') //{{Efn2|の前に改行を追加 | .replace(/([^\n]){{Efn2\|/g, '$1\n{{Efn2|') //{{Efn2|の前に改行を追加 | ||
.replace(/{{Efn2\|(.*?)\|name( ?)=( ?)([^"].*?)( ?)}}/g, '{{Efn2|$1|name="$4"}}') //name引数に二重引用符を追加 | .replace(/{{Efn2\|(.*?)\|name( ?)=( ?)([^"].*?)( ?)}}/g, '{{Efn2|$1|name="$4"}}') //name引数に二重引用符を追加 | ||
| 546行目: | 585行目: | ||
.replace(/<ref group="注"( ?)name=(".*?")>(.*?)<\/ref>/g, '{{Efn2|name=$2|$3}}') //{{Efn2|name="○○"|○○}}に変更 | .replace(/<ref group="注"( ?)name=(".*?")>(.*?)<\/ref>/g, '{{Efn2|name=$2|$3}}') //{{Efn2|name="○○"|○○}}に変更 | ||
.replace(/<ref name=(".*?")( ?)group="注">(.*?)<\/ref>/g, '{{Efn2|name=$1|$3}}') //{{Efn2|name="○○"|○○}}に変更 | .replace(/<ref name=(".*?")( ?)group="注">(.*?)<\/ref>/g, '{{Efn2|name=$1|$3}}') //{{Efn2|name="○○"|○○}}に変更 | ||
.replace(/<ref group="注"( ?)name( ?)=( ?)(".*?")( ?)\/>/g, '{{Efn2|name=$4}}') //{{Efn2|name="○○"}}に変更 | .replace(/<ref group="注"( ?)name( ?)=( ?)(".*?")( ?)\/>/g, '{{Efn2|name=$4}}') //{{Efn2|name="○○"}}に変更 | ||
.replace(/<ref name( ?)=( ?)(".*?")( ?)group="注"( ?)\/>/g, '{{Efn2|name=$3}}') //{{Efn2|name="○○"}}に変更 | .replace(/<ref name( ?)=( ?)(".*?")( ?)group="注"( ?)\/>/g, '{{Efn2|name=$3}}') //{{Efn2|name="○○"}}に変更 | ||
.replace(/<ref group="注"( ?)>(.*?)<\/ref>/g, '{{Efn2|$2}}') //{{Efn2|○○}}に変更 | .replace(/<ref group="注"( ?)>(.*?)<\/ref>/g, '{{Efn2|$2}}') //{{Efn2|○○}}に変更 | ||
.replace(/([^\n])\n<ref([>| ])/g, '$1<ref$2') //<ref>の前の改行を除去 | .replace(/([^\n])\n<ref([>| ])/g, '$1<ref$2') //<ref>の前の改行を除去 | ||
.replace(/([^\n])\n{{Efn2\|/g, '$1{{Efn2|'); //{{Efn2|の前の改行を除去 | .replace(/([^\n])\n{{Efn2\|/g, '$1{{Efn2|'); //{{Efn2|の前の改行を除去 | ||
} | } | ||
スポンサーリンク