よみもの:@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以降[編集]
解説めんどくさいので、自力で解読おねげーしますだ。どうせ誰もこの解説よんでないでしょ。