よみもの:@wikiからMediaWikiへのソースコード変換
| よみものページ | |
| この「よみもの」は、BadEditorが作成したものです。 他ユーザーの編集も歓迎いたします。 |
「@wiki」と「MediaWiki」は文法が違うので、転載するときにはソースコードをうまい具合に変換する必要がある。
※ 秀丸エディタの正規表現を用いた変換方法を解説する。
マクロ[編集]
まず、下記のマクロをソースコード全体に適用する。
// テーブルの変換
replaceallfast "\\|$","",regular;
replaceallfast "(?!^)\\|", "\\|\\|", regular;
// その他変換
replaceallfast "\\[\\[([^\\]]+?)>(https?:\\/\\/[^\\]]+?)\\]\\]", "[\\2 \\1]", regular;
replaceallfast "&bold\\(\\){(.*?)}","'''\\1'''",regular;
replaceallfast "&footnote\\(([^)]+)\\)","<ref>\\1</ref>",regular;
replaceallfast "\\*\\*\\*([^\\*\\n]+)","====\\1====",regular;
replaceallfast "\\*\\*([^\\*\\n]+)","===\\1===",regular;
replaceallfast "\\*([^\\*\\n]+)","==\\1==",regular;
replaceallfast "^-","*",regular;
replaceallfast "^(?![=*;:])([^\\r\\n\\|]+)(\\r?\\n)(?=[^\\r\\n])","\\1<br>\\r",regular;
replaceallfast "&br()","<br>"; // regular不要
replaceallfast "&u\\(\\){(.*?)}","<ins>\\1</ins>",regular;
replaceallfast "RIGHT:", ""; // regular不要
replaceallfast "CENTER:", ""; // regular不要
次にテーブルの箇所だけドラッグで選択して、下記マクロを実行する。
if (selecting == 0) endmacro; // 選択範囲がなければ何もしない(誤操作防止)
#endPoint = selendy;
#selectedLine = selendy - seltopy;
#afterReplaceEndPoint = #endPoint + #selectedLine;
replaceallfast "$","\n|-",regular,inselect;
replaceallfast "\\|\\|h$", "",regular,inselect;
replaceallfast "~", "〃",inselect;
replaceallfast "||>||", "||〃||",inselect;
moveto 0, #afterReplaceEndPoint; // 範囲置換後、置換した最後の行に移動
これで大体のソースコードが変換できます。
しかし、テーブルはまだ完全には変換できていないことでしょう。
冒頭に「 {| class="wikitable" 」を追加したり、見出しの「パイプ(|)」→「!」を変換したり、末尾に「 |} 」を追加したり、rowspan / colspan を設定するのは、手動でおねげーしますだ。
マクロの各ステップの詳細解説[編集]
上記マクロは一体何をしているのか。各ステップに分けて解説します。
なお、上から順番に実行することが重要です。順番を前後させると正しく変換できない可能性があります。
テーブルの変換1[編集]
行末のパイプ(|)一本を除去する。
- 検索:
\|$ - 置換: (空)
テーブルの変換2[編集]
行頭以外のパイプ一本(|)を、二本(||)に増やす。
- 検索:
(?!^)\| - 置換:
\|\|
リンクの変換[編集]
[リンク先名称>https://hogehoge.jp] を [https://hogehoge.jp リンク先名称] に変換する。
- 検索:
\[\[([^\]]+?)>(https?:\/\/[^\]]+?)\]\] - 検索:
[\2 \1]
太字の変換[編集]
&bold(){単語} を '''単語''' に変換する。
- 検索:
&bold\(\){(.*?)} - 置換:
'''\1'''
下線の変換[編集]
&u(){単語} を <ins>単語</ins> に変換する。
- 検索:
&u\(\){(.*?)} - 置換:
<ins>\\1</ins>
脚注の変換[編集]
&footnote(単語) を <ref>単語</ref> に変換する。
- 検索:
&footnote\(([^)]+)\) - 置換:
<ref>\1</ref>
セクションの変換[編集]
階層が低い方から順番に(h4→h3→h2)実行する必要がある。
もし、h5以下がある場合は、適宜「\*」と「=」を増やす。
【h4の場合】
- 検索:
\*\*\*([^\*\n]+) - 置換:
====\1====
【h3の場合】
- 検索:
\*\*([^\*\n]+) - 置換:
===\1===
【h2の場合】
- 検索:
\*([^\*\n]+) - 置換:
==\1==
箇条書きの変換[編集]
行頭のハイフンを、アスタリスクに変換する。
- 検索:
^- - 置換:
*
改行の変換[編集]
「@wiki」と「MediaWiki」は改行の仕様さえ異なっている。変換方法は色々考えられるが、下記が最もわかりやすい解決法であろう。
「=」「*」「;」「:」で始まっておらず、行末がパイプ(|)ではなく、次の一行にもテキストがある(次の一行が改行ではない)文章の末尾に <br> を追加する。
- 検索:
^(?![=*;:])([^\r\n\|]+)(\r?\n)(?=[^\r\n]) - 置換:
\1<br>\r
改行の変換2[編集]
&br() を <br> に変換する。
正規表現のチェックボックスをONにする必要はない。
- 検索:
&br() - 置換:
<br>
テーブルの変換3[編集]
※ここから下は、テーブルの箇所のみに実行する置換。
一行ごとに 「(改行)|-」 を追加する。
- 検索:
$ - 置換:
\n|-
テーブルの変換4以降[編集]
解説めんどくさいので、自力で解読おねげーしますだ。どうせ誰もこの解説よんでないでしょ。