「Wikipediaマークアップ修正」の版間の差分

提供: MeryWiki
ナビゲーションに移動 検索に移動
MSY-07 (トーク | 投稿記録)
配列の修正
MSY-07 (トーク | 投稿記録)
置換処理の順番を変更
38行目: 38行目:
["ローマ数字", roman_numerals],
["ローマ数字", roman_numerals],
["丸数字", circled_numbers],
["丸数字", circled_numbers],
["テンプレート", templates],
["マジックリンク", magic_links],
["空白", space],
["空白", space],
["改行・空行", line_breaks_and_blank_lines],
["改行・空行", line_breaks_and_blank_lines],
48行目: 46行目:
["ウィキリンク", wikilinks],
["ウィキリンク", wikilinks],
["リダイレクト", redirect],
["リダイレクト", redirect],
["マジックリンク", magic_links],
["テンプレート", templates],
["注釈", notes],
["注釈", notes],
["出典", references],
["出典", references],
386行目: 386行目:
.replace(/㊾/g, '(49)')
.replace(/㊾/g, '(49)')
.replace(/㊿/g, '(50)');
.replace(/㊿/g, '(50)');
}
// テンプレート
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:');
}
// マジックリンク
function magic_links(s) {
return s
.replace(/ISBN ([\d\-X]{10,17})/g, '{{ISBN2|$1}}')
.replace(/PMID ([\d]{1,8})/g, '{{PMID|$1}}')
.replace(/RFC ([\d]{1,4})/g, '{{IETF RFC|$1}}');
}
}


535行目: 469行目:
.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, '{{ISBN2|$1}}')
.replace(/PMID ([\d]{1,8})/g, '{{PMID|$1}}')
.replace(/RFC ([\d]{1,4})/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:');
}
}



2026年4月19日 (日) 16:24時点における版

Wikipediaの記事を標準的なマークアップや表記方法で修正します。

構文ファイルのWikitextと併用すると便利です。

注意事項

  • このマクロはウィキペディア日本語版の記事での動作を想定しています。他言語版や記事以外のページは動作対象外です。
  • ソースコードをコピーする前にエディターの編集モードが「ソースの編集」になっていることを確認してください。もし、編集モードが「ビジュアル編集」になっている場合は、「ソースの編集」に切り替えてからソースコードをコピーしてください。
  • 記事のソースコードの書き方によっては想定外の修正をしてしまう可能性がありますので、マクロを実行した後は必ずWikipedia上のプレビュー画面と差分画面の両方で問題がないことを確認してから投稿してください。

使用方法

  1. 修正したい記事の上部にある「編集」または「ソースを編集」ボタンをクリックして、ソースエディター内のソースコードを全選択してコピーした後、Meryにペーストします。
  2. 修正したいソースコードのタブがアクティブになっている状態でマクロを実行します。
  3. 修正したソースコードを全選択してコピーした後、ソースエディター内のソースコードを全選択した状態でペーストして上書きします。
  4. 「プレビューを表示」または「差分を表示」ボタンをクリックして、プレビュー画面または差分画面で修正箇所を確認します。問題がなければ、「編集内容の要約」に編集した内容の要約を記入した後、「変更を公開」ボタンをクリックして修正した記事を投稿します。

出典

ソースコード

#title = "Wikipediaマークアップ修正"
#tooltip = "Wikipediaのマークアップや表記を修正します。"

// --------------------------------------------------
// 置換処理の定義
// --------------------------------------------------
// [0] メニュー表示名
// [1] 実行する置換関数
// --------------------------------------------------
var f = [
	["全角空白", fullwidth_space],
	["全角記号", fullwidth_symbols],
	["全角英数", fullwidth_alphanumeric_characters],
	["半角カナ", halfwidth_kana],
	["約物", punctuation_marks],
	["ローマ数字", roman_numerals],
	["丸数字", circled_numbers],
	["空白", space],
	["改行・空行", line_breaks_and_blank_lines],
	["箇条書き", bullet_points],
	["1行改行", single_line_break],
	["表・Infobox", tables_and_infoboxes],
	["タグ", tag],
	["ウィキリンク", wikilinks],
	["リダイレクト", redirect],
	["マジックリンク", magic_links],
	["テンプレート", templates],
	["注釈", notes],
	["出典", references],
	["脚注", footnotes]
];

// ポップアップメニューを作成
var menu = CreatePopupMenu();

// 「すべての置換処理を順番に実行」メニュー
menu.Add("すべて実行", 1, 0);
menu.Add("", 0, meMenuSeparator);

// 個別の置換処理メニュー
for (var i = 0; i < f.length; i++) {
	menu.Add(f[i][0], i + 2, 0);
}

// ポップアップメニューを表示
var n = menu.Track(mePosMouse);

// メニューが選択されなかった場合は終了
if (n == 0) {
	Quit();
}

var sel = document.selection;

// 未選択の場合は全文を対象にする
if (sel.Text == "") {
	sel.SelectAll();
}

// 対象テキストを取得
var s = sel.Text;

// すべての置換処理を実行
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;

// -------------------------
// 置換処理用関数
// -------------------------

// 全角空白
function fullwidth_space(s) {
	return s
		.replace(/ /g, ' ');
}

// 全角記号
function fullwidth_symbols(s) {
	return s
		.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, '`');
}

// 全角英数
function fullwidth_alphanumeric_characters(s) {
	return s
		.replace(/0/g, '0')
		.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(/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');
}

// 半角カナ
function halfwidth_kana(s) {
	return s
		.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, '゜');
}

// 約物
function punctuation_marks(s) {
	return s
		.replace(/。。。|、、、/g, '…')
		.replace(/・・・/g, '…')
		.replace(/!!/g, '!!')
		.replace(/!?/g, '!?')
		.replace(/?!/g, '?!')
		.replace(/??/g, '??')
		.replace(/([^\/])(~|~)/g, '$1〜') //全角チルダ(U+FF5E)やチルダ(U+007E)を波ダッシュ(U+301C)に変更
		.replace(/‥/g, '…')
		.replace(/〇|◯/g, '○'); //漢数字のゼロ「〇」や大きな丸「◯」を丸「○」に変更
}

// ローマ数字
function roman_numerals(s) {
	return s
		.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, 'XI')
		.replace(/Ⅻ/g, 'XII')
		.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, 'xi')
		.replace(/ⅻ/g, 'xii');
}

// 丸数字
function circled_numbers(s) {
	return s
		.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, '(21)')
		.replace(/㉒/g, '(22)')
		.replace(/㉓/g, '(23)')
		.replace(/㉔/g, '(24)')
		.replace(/㉕/g, '(25)')
		.replace(/㉖/g, '(26)')
		.replace(/㉗/g, '(27)')
		.replace(/㉘/g, '(28)')
		.replace(/㉙/g, '(29)')
		.replace(/㉚/g, '(30)')
		.replace(/㉛/g, '(31)')
		.replace(/㉜/g, '(32)')
		.replace(/㉝/g, '(33)')
		.replace(/㉞/g, '(34)')
		.replace(/㉟/g, '(35)')
		.replace(/㊱/g, '(36)')
		.replace(/㊲/g, '(37)')
		.replace(/㊳/g, '(38)')
		.replace(/㊴/g, '(39)')
		.replace(/㊵/g, '(40)')
		.replace(/㊶/g, '(41)')
		.replace(/㊷/g, '(42)')
		.replace(/㊸/g, '(43)')
		.replace(/㊹/g, '(44)')
		.replace(/㊺/g, '(45)')
		.replace(/㊻/g, '(46)')
		.replace(/㊼/g, '(47)')
		.replace(/㊽/g, '(48)')
		.replace(/㊾/g, '(49)')
		.replace(/㊿/g, '(50)');
}

// 空白
function space(s) {
	return s
		.replace(/ {2,}/g, ' ') //連続する空白を除去
		.replace(/([^=\-\|]) $/gm, '$1') //行末の空白を除去
		.replace(/ 。/g, '。') //句点の前の空白を除去
		.replace(/([^\-]) 、/g, '$1、') //読点の前の空白を除去
		.replace(/。 ([^#\-\|].*?)。/g, '。$1。') //句点の後の空白を除去(1周目)
		.replace(/。 ([^#\-\|].*?)。/g, '。$1。') //句点の後の空白を除去(2周目)
		.replace(/、 ([^\-].*?)、/g, '、$1、') //読点の後の空白を除去(1周目)
		.replace(/、 ([^\-].*?)、/g, '、$1、') //読点の後の空白を除去(2周目)
		.replace(/、 ([^\-].*?)。/g, '、$1。') //読点の後の空白を除去
		.replace(/(==+)( ?)(.*?)( ?)(==+)/g, '$1 $3 $5'); //見出しに空白を追加
}

// 改行・空行
function line_breaks_and_blank_lines(s) {
	return s
		.replace(/\n{3,}/g, '\n\n') //2行以上の空行をトルツメ
		.replace(/==\n\n/g, '==\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(/\[\[File:/g, '[[ファイル:') //[[ファイル:に変更
		.replace(/([^\n =\|>])\[\[ファイル:/g, '$1\n[[ファイル:'); //[[ファイル:の前に改行を追加
}

// 箇条書き
function bullet_points(s) {
	return s
		.replace(/^(\*+|#+|:+\*|:+#)([^ \*#:;].*?)/gm, '$1 $2') //箇条書きのあとに空白を追加
		.replace(/^(;|:+;)([^ ].*?)/gm, '$1 $2') //定義の箇条書き(;)のあとに空白を追加
		.replace(/^(:+)([^ \*#:;<\n].*?)/gm, '$1 $2') //定義の箇条書き(:)のあとに空白を追加
		.replace(/^([^=\*#:;].*?。)\n(\*|#|;|:)/gm, '$1\n\n$2') //文章と箇条書きの間に空行を挿入
		.replace(/^(\*|#|;|:)(.*?)\n([^\n=\*#:;].*?。)/gm, '$1$2\n\n$3') //箇条書きと文章の間に空行を挿入
		.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') //箇条書きと箇条書きの間の空行をトルツメ(1周目)
		.replace(/^(#|;|:)(.*?)\n\n(\*|#|;|:)/gm, '$1$2\n$3'); //箇条書きと箇条書きの間の空行をトルツメ(2周目)
}

// 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周目)
}

// 表・Infobox
function tables_and_infoboxes(s) {
	return s
		.replace(/^\|(.*?)\n\n\|/gm, '|$1\n|') //行頭のバーティカルバーと次の行頭のバーティカルバーの間の空行をトルツメ(1周目)
		.replace(/^\|(.*?)\n\n\|/gm, '|$1\n|') //行頭のバーティカルバーと次の行頭のバーティカルバーの間の空行をトルツメ(2周目)
		.replace(/^!(.*?)\n\n!/gm, '!$1\n!') //行頭の感嘆符と次の行頭の感嘆符の間の空行をトルツメ(1周目)
		.replace(/^!(.*?)\n\n!/gm, '!$1\n!'); //行頭の感嘆符と次の行頭の感嘆符の間の空行をトルツメ(2周目)
}

// タグ
function tag(s) {
	return s
		.replace(/<br( ?)>|<br\/>/g, '<br />');
}

// ウィキリンク
function wikilinks(s) {
	return s
		.replace(/\[\[(カテゴリ|category):/g, '[[Category:');
}

// リダイレクト
function redirect(s) {
	return s
		.replace(/# REDIRECT/g, '#REDIRECT')
		.replace(/# redirect/g, '#redirect')
		.replace(/# 転送/g, '#転送')
		.replace(/#redirect|#転送/g, '#REDIRECT')
		.replace(/#REDIRECT( ?)\[\[/g, '#REDIRECT [[');
}

// マジックリンク
function magic_links(s) {
	return s
		.replace(/ISBN ([\d\-X]{10,17})/g, '{{ISBN2|$1}}')
		.replace(/PMID ([\d]{1,8})/g, '{{PMID|$1}}')
		.replace(/RFC ([\d]{1,4})/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:');
}

// 注釈
function notes(s) {
	return s
		.replace(/group( ?)=( ?)("?)(注釈|注|†|※|\*)("?)/g, 'group="注"') //group="注"に変更
		.replace(/{{#tag:ref/g, '{{Refnest') //{{Refnestに変更
		.replace(/([^\n]){{Refnest\|/g, '$1\n{{Refnest|') //{{Refnest|の前に改行を追加
		.replace(/{{Refnest\|(.*?)\|group="注"\|name( ?)=( ?)([^"].*?)( ?)}}/g, '{{Refnest|$1|group="注"|name="$4"}}') //name引数に二重引用符を追加
		.replace(/{{Refnest\|(.*?)\|name( ?)=( ?)([^"].*?)( ?)\|group="注"}}/g, '{{Refnest|$1|name="$4"|group="注"}}') //name引数に二重引用符を追加
		.replace(/{{Refnest\|group="注"\|(.*?)\|name( ?)=( ?)([^"].*?)( ?)}}/g, '{{Refnest|group="注"|$1|name="$4"}}') //name引数に二重引用符を追加
		.replace(/{{Refnest\|name( ?)=( ?)([^"].*?)( ?)\|(.*?)\|group="注"}}/g, '{{Refnest|name="$3"|$5|group="注"}}') //name引数に二重引用符を追加
		.replace(/{{Refnest\|group="注"( ?)\|name( ?)=( ?)([^"].*?)( ?)\|/g, '{{Refnest|group="注"|name="$4"|') //name引数に二重引用符を追加
		.replace(/{{Refnest\|name( ?)=( ?)([^"].*?)( ?)\|group="注"( ?)\|/g, '{{Refnest|name="$3"|group="注"|') //name引数に二重引用符を追加
		.replace(/{{Refnest\|(.*?)\|group="注"\|name=(.*?)}}/g, '{{Efn2|name=$2|$1}}') //{{Efn2|name="○○"|○○}}に変更
		.replace(/{{Refnest\|(.*?)\|name=(.*?)\|group="注"}}/g, '{{Efn2|name=$2|$1}}') //{{Efn2|name="○○"|○○}}に変更
		.replace(/{{Refnest\|group="注"\|(.*?)\|name=(.*?)}}/g, '{{Efn2|name=$2|$1}}') //{{Efn2|name="○○"|○○}}に変更
		.replace(/{{Refnest\|name=(.*?)\|(.*?)\|group="注"}}/g, '{{Efn2|name=$1|$2}}') //{{Efn2|name="○○"|○○}}に変更
		.replace(/{{Refnest\|group="注"\|name=(.*?)\|/g, '{{Efn2|name=$1|') //{{Efn2|name="○○"|に変更
		.replace(/{{Refnest\|name=(.*?)\|group="注"\|/g, '{{Efn2|name=$1|') //{{Efn2|name="○○"|に変更
		.replace(/{{Refnest\|(.*?)\|group="注"}}/g, '{{Efn2|$1}}') //{{Efn2|○○}}に変更
		.replace(/{{Refnest\|group="注"( ?)\|/g, '{{Efn2|') //{{Efn2|に変更
		.replace(/{{Refnest/g, '{{Efn2') //{{Efn2に変更
		.replace(/{{Efn\|/g, '{{Efn2|') //{{Efn2|に変更
		.replace(/([^\n]){{Efn2\|/g, '$1\n{{Efn2|') //{{Efn2|の前に改行を追加
		.replace(/{{Efn2\|(.*?)\|name( ?)=( ?)([^"].*?)( ?)}}/g, '{{Efn2|$1|name="$4"}}') //name引数に二重引用符を追加
		.replace(/{{Efn2\|name( ?)=( ?)([^"].*?)( ?)(\||})/g, '{{Efn2|name="$3"$5') //name引数に二重引用符を追加
		.replace(/{{Efn2\|(.*?)\|name=(.*?)}}/g, '{{Efn2|name=$2|$1}}') //{{Efn2|name="○○"|○○}}に変更
		.replace(/([^\n])<ref([>| ])/g, '$1\n<ref$2') //<ref>の前に改行を追加
		.replace(/<ref group="注" name( ?)=( ?)([^"].*?)( ?)>(.*?)<\/ref>/g, '<ref group="注" name="$3">$5</ref>') //name引数に二重引用符を追加
		.replace(/<ref name( ?)=( ?)([^"].*?) group="注">(.*?)<\/ref>/g, '<ref name="$3" group="注">$4</ref>') //name引数に二重引用符を追加
		.replace(/<ref group="注" name( ?)=( ?)([^"].*?)( ?)\/>/g, '<ref group="注" name="$3" />') //name引数に二重引用符を追加
		.replace(/<ref name( ?)=( ?)([^"].*?) group="注"( ?)\/>/g, '<ref name="$3" group="注" />') //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 group="注"( ?)name( ?)=( ?)(".*?")( ?)\/>/g, '{{Efn2|name=$4}}') //{{Efn2|name="○○"}}に変更
		.replace(/<ref name( ?)=( ?)(".*?")( ?)group="注"( ?)\/>/g, '{{Efn2|name=$3}}') //{{Efn2|name="○○"}}に変更
		.replace(/<ref group="注"( ?)>(.*?)<\/ref>/g, '{{Efn2|$2}}') //{{Efn2|○○}}に変更
		.replace(/([^\n])\n<ref([>| ])/g, '$1<ref$2') //<ref>の前の改行を除去
		.replace(/([^\n])\n{{Efn2\|/g, '$1{{Efn2|'); //{{Efn2|の前の改行を除去
}

// 出典
function references(s) {
	return s
		.replace(/([^\n])<ref([>| ])/g, '$1\n<ref$2') //<ref>の前に改行を追加
		.replace(/<ref name( ?)=( ?)([^"].*?)( ?)>(.*?)<\/ref>/g, '<ref name="$3">$5</ref>') //name引数に二重引用符を追加
		.replace(/<ref name( ?)=( ?)([^"].*?)( ?)\/>/g, '<ref name="$3" />') //name引数に二重引用符を追加
		.replace(/<ref name( ?)=( ?)"(.*?)"( ?)\/>/g, '{{R|$3}}') //{{R|○○}}に変更
		.replace(/([^\n])\n<ref([>| ])/g, '$1<ref$2') //<ref>の前の改行を除去
		.replace(/([^\n])\n{{R\|/g, '$1{{R|'); //{{R|の前の改行を除去
}

// 脚注
function footnotes(s) {
	return s
		.replace(/<references( ?)\/>/g, '{{Reflist}}')
		.replace(/<references group="注"( ?)\/>/g, '{{Notelist2}}')
		.replace(/{{Reflist\|\|group="注"}}/g, '{{Reflist|group="注"|}}')
		.replace(/{{Reflist\|([0-9])\|group="注"}}/g, '{{Reflist|group="注"|$1}}')
		.replace(/{{Reflist\|colwidth=/g, '{{Reflist|')
		.replace(/{{Reflist\|em\|group="注"}}/g, '{{Reflist|group="注"|em}}')
		.replace(/{{Reflist\|([0-9]|[1-9][0-9])em\|group="注"}}/g, '{{Reflist|group="注"|$1em}}')
		.replace(/{{Reflist\|group="注"}}/g, '{{Notelist2}}')
		.replace(/{{Reflist\|group="注"\|/g, '{{Notelist2|')
		.replace(/{{Notelist}}/g, '{{Notelist2}}')
		.replace(/{{Notelist\|/g, '{{Notelist2|')
		.replace(/list\|colwidth=/g, 'list|')
		.replace(/list2\|colwidth=/g, 'list2|')
		.replace(/{{Reflist\|}}/g, '{{Reflist}}')
		.replace(/{{Reflist\|[0-1]}}/g, '{{Reflist}}')
		.replace(/{{Reflist\|2}}/g, '{{Reflist|30em}}')
		.replace(/{{Reflist\|[3-9]}}/g, '{{Reflist|20em}}')
		.replace(/{{Notelist2\|}}/g, '{{Notelist2}}')
		.replace(/{{Notelist2\|[0-1]}}/g, '{{Notelist2}}')
		.replace(/{{Notelist2\|2}}/g, '{{Notelist2|30em}}')
		.replace(/{{Notelist2\|[3-9]}}/g, '{{Notelist2|20em}}')
		.replace(/{{Reflist\|em}}/g, '{{Reflist}}')
		.replace(/{{Reflist\|([0-9]|1?[0-9]|2?[0-4])em}}/g, '{{Reflist|20em}}')
		.replace(/{{Reflist\|(2?[5-9]|[3-9][0-9])em}}/g, '{{Reflist|30em}}')
		.replace(/{{Notelist2\|em}}/g, '{{Notelist2}}')
		.replace(/{{Notelist2\|([0-9]|1?[0-9]|2?[0-4])em}}/g, '{{Notelist2|20em}}')
		.replace(/{{Notelist2\|(2?[5-9]|[3-9][0-9])em}}/g, '{{Notelist2|30em}}');
}
スポンサーリンク