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

MSY-07 (トーク | 投稿記録)
ソースコードの簡素化
MSY-07 (トーク | 投稿記録)
日付処理を追加、ウィキリンク処理をカテゴリ処理に変更
 
(同じ利用者による、間の11版が非表示)
24行目: 24行目:
#tooltip = "Wikipediaのマークアップや表記を修正します。"
#tooltip = "Wikipediaのマークアップや表記を修正します。"


var f = [];
// --------------------------------------------------
 
// 置換処理の定義
// ここから下に置換処理を定義 ------------------------------
// --------------------------------------------------
f.push(["全角空白", fullwidth_space]);
// [0] メニュー表示名
f.push(["全角記号", fullwidth_symbols]);
// [1] 実行する置換関数
f.push(["全角英数", fullwidth_alphanumeric_characters]);
// --------------------------------------------------
f.push(["半角カナ", halfwidth_kana]);
var f = [
f.push(["約物", punctuation_marks]);
["タブ文字", tab_character],
f.push(["ローマ数字", roman_numerals]);
["全角空白", fullwidth_space],
f.push(["丸数字", circled_numbers]);
["全角記号", fullwidth_symbols],
f.push(["テンプレート", templates]);
["全角英数", fullwidth_alphanumeric_characters],
f.push(["マジックリンク", magic_links]);
["半角カナ", halfwidth_kana],
f.push(["空白", space]);
["約物", punctuation_marks],
f.push(["改行・空行", line_breaks_and_blank_lines]);
["ローマ数字", roman_numerals],
f.push(["箇条書き", bullet_points]);
["丸数字", circled_numbers],
f.push(["1行改行", single_line_break]);
["空白", space],
f.push(["表・Infobox", tables_and_infoboxes]);
["改行・空行", line_breaks_and_blank_lines],
f.push(["タグ", tag]);
["1行改行", single_line_break],
f.push(["ウィキリンク", wikilinks]);
["箇条書き", bullet_points],
f.push(["リダイレクト", redirect]);
["表・Infobox", tables_and_infoboxes],
f.push(["注釈", notes]);
["日付", date],
f.push(["出典", references]);
["タグ", tag],
f.push(["脚注", footnotes]);
["カテゴリ", 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 + 1, 0);
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 - 1][1](s);
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)');
}
// テンプレート
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}}');
}
}


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(/\[\[File:/g, '[[ファイル:') //[[ファイル:に変更
}
.replace(/([^\n =\|>])\[\[ファイル:/g, '$1\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周目)
}
// 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周目)
}
}


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 wikilinks(s) {
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|の前の改行を除去
}
}


スポンサーリンク