よみもの:@wikiからMediaWikiへのソースコード変換

出典: 謎の百科事典もどき『エンペディア(Enpedia)』
ナビゲーションに移動 検索に移動
エンペたん看板 Welcome.png よみものページ
この「よみもの」は、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以降[編集]

解説めんどくさいので、自力で解読おねげーしますだ。どうせ誰もこの解説よんでないでしょ。