作品內的單一角色介紹文字超過二十行,則建議轉為獨立角色條目。

"使用說明:Pukiwiki-Mediawiki轉換教學" 修訂間的差異

出自 Komica wiki
前往: 導覽搜尋
(外部連結)
(使用新模板,幫部份程式碼標記顏色)
行 2: 行 2:
 
{|class="wikitable" style="margin:auto;"
 
{|class="wikitable" style="margin:auto;"
 
|因為原wiki使用pukiwiki格式,在此列出pukiwiki-mediawiki轉換器與手動轉換解說,以幫助有心搬移資料的島民。
 
|因為原wiki使用pukiwiki格式,在此列出pukiwiki-mediawiki轉換器與手動轉換解說,以幫助有心搬移資料的島民。
 +
|-
 +
|以下將使用{{code| |bgcolor=#ffddee}}表示PukiWiki專用碼、{{code| |bgcolor=#ddffee}}表MediaWiki專用碼,兩者通用的或來自HTML/CSS的碼不加註顏色
 
|}
 
|}
 
==自動轉換==
 
==自動轉換==
行 12: 行 14:
 
*[https://www.dropbox.com/s/l0e6b81g5qsnfog/komica-puki_to_mediawiki.zip?dl=0 komica-puki_to_mediawiki.zip]
 
*[https://www.dropbox.com/s/l0e6b81g5qsnfog/komica-puki_to_mediawiki.zip?dl=0 komica-puki_to_mediawiki.zip]
 
**最終更新日為2017年6月9日,版本0.4.2
 
**最終更新日為2017年6月9日,版本0.4.2
**'''為KomicaWiki量身打造''',基於舊wiki約定成俗的條目寫作習慣轉換(如<code>*大標題</code><code><nowiki>{{h0|大標題}}</nowiki></code>
+
**'''為KomicaWiki量身打造''',基於舊wiki約定成俗的條目寫作習慣轉換(如{{code|*大標題|bgcolor=#ffddee|start=1}}{{code|<nowiki>{{h0|大標題}}</nowiki>|bgcolor=#ddffee}}
**會自動附加<code><nowiki><references /></nowiki></code>於底部
+
**會自動附加{{code|<nowiki><references /></nowiki>|bgcolor=#ddffee}}於底部
 
**需按照裡面說明,安裝[https://notepad-plus-plus.org/download/ Notepad++(32位元版)]與[http://npppythonscript.sourceforge.net/download.shtml Python Script],並照步驟操作
 
**需按照裡面說明,安裝[https://notepad-plus-plus.org/download/ Notepad++(32位元版)]與[http://npppythonscript.sourceforge.net/download.shtml Python Script],並照步驟操作
 
**部份Puki碼(如表格的儲存格格式和合併儲存格)無法直接轉換,必須手動修正
 
**部份Puki碼(如表格的儲存格格式和合併儲存格)無法直接轉換,必須手動修正
行 23: 行 25:
 
*# 此程式並未針對 Komica Wiki 的模板進行調整,所以自動生成完後需要手動處理模板問題
 
*# 此程式並未針對 Komica Wiki 的模板進行調整,所以自動生成完後需要手動處理模板問題
 
*# 此程式在處理表格時,表格標頭可能會沒法轉換成功
 
*# 此程式在處理表格時,表格標頭可能會沒法轉換成功
*# 尚未具備處理底線<code>%%%_%%%</code>和底線加刪除線<code>%%%%%_%%%%%</code>的能力
+
*# 尚未具備處理底線{{code|%%%_%%%|bgcolor=#ffddee}}和底線加刪除線{{code|%%%%%_%%%%%|bgcolor=#ffddee}}的能力
  
 
==手動轉換==
 
==手動轉換==
行 29: 行 31:
 
*為求正確轉換,需使用[[Wikipedia:zh:正则表达式|正規表達式]](Regular Expression,簡稱Regex){{ref|部份編輯器不使用$1、$2表示被()抓取的文字,而是使用\1、\2。關於此點,請參考您使用的編輯器說明書}}
 
*為求正確轉換,需使用[[Wikipedia:zh:正则表达式|正規表達式]](Regular Expression,簡稱Regex){{ref|部份編輯器不使用$1、$2表示被()抓取的文字,而是使用\1、\2。關於此點,請參考您使用的編輯器說明書}}
 
**與一般程式寫作不同,空格字元會被當作一般字元檢查,因此Regex中不可有任何多餘空格
 
**與一般程式寫作不同,空格字元會被當作一般字元檢查,因此Regex中不可有任何多餘空格
**為對應PukiWiki碼構造,數量標記諸如任何次數標記(<code>.*</code><code><nowiki>[\s\S]*</nowiki></code>尾端的<code>*</code>)和任何正整數次標記(<code>.+</code><code><nowiki>[\s\S]+</nowiki></code>尾端的<code>+</code>)的後面,大部份時候需要追加一個問號(如:<code>.*?</code><code><nowiki>[\s\S]+?</nowiki></code>)以搜尋「最少字數的符合項目」
+
**為對應PukiWiki碼構造,數量標記諸如任何次數標記({{code|.*}}{{code|<nowiki>[\s\S]*</nowiki>}}尾端的{{code|*}})和任何正整數次標記({{code|.+}}{{code|<nowiki>[\s\S]+</nowiki>}}尾端的{{code|+}})的後面,大部份時候需要追加一個問號(如:{{code|.*?}}{{code|<nowiki>[\s\S]+?</nowiki>}})以搜尋「最少字數的符合項目」
***對於字串{{color|blue||''他出於%%無奈%%好奇開了門%%,然後他就囧掉了%%,自此學到教訓''}},搜尋<code>%%.+%%</code>時會得到{{color|blue||''%%無奈%%好奇開了門%%,然後他就囧掉了%%''}},單次搜尋<code>%%.+?%%</code>時會得到{{color|blue||''%%無奈%%''}},搜尋下一個時會得到{{color|blue||''%%,然後他就囧掉了%%''}}
+
***對於字串{{color|blue||''他出於%%無奈%%好奇開了門%%,然後他就囧掉了%%,自此學到教訓''}},搜尋{{code|%%.+%%}}時會得到{{color|blue||''%%無奈%%好奇開了門%%,然後他就囧掉了%%''}},單次搜尋{{code|%%.+?%%}}時會得到{{color|blue||''%%無奈%%''}},搜尋下一個時會得到{{color|blue||''%%,然後他就囧掉了%%''}}
***在搜尋包夾型Puki碼時,如果不使用<code>起始碼(.*?)終止碼</code>而用<code>起始碼(.*)終止碼</code>,當同一行有多個搜尋項目時,會被錯誤地當成只有一個項目。
+
***在搜尋包夾型Puki碼時,如果不使用{{code|起始碼(.*?)終止碼}}而用{{code|起始碼(.*)終止碼}},當同一行有多個搜尋項目時,會被錯誤地當成只有一個項目。
 
*若所使用的文字/程式語言編輯器不支援Regex的語法檢查,可使用網頁[https://regex101.com/ https://regex101.com/]協助除錯
 
*若所使用的文字/程式語言編輯器不支援Regex的語法檢查,可使用網頁[https://regex101.com/ https://regex101.com/]協助除錯
*前述的Notepad++的轉換用Python script即應用了以下絕大部份的轉換方法{{ref|Notepad用的運算式搜尋取代,其Regex語法與Python原生的Regex不同,具有許多自訂的關鍵字,能做更多變化。(例如:Notepad++專用Regex裡,取代字串可用<code>(?{4}ab$5dc)</code>代表「若$4存在則取代為ab$5dc」;在Python原生Regex裡,則要用迴圈逐個搜尋、判斷,再行取代)}}
+
*前述的Notepad++的轉換用Python script即應用了以下絕大部份的轉換方法{{ref|Notepad用的運算式搜尋取代,其Regex語法與Python原生的Regex不同,具有許多自訂的關鍵字,能做更多變化。(例如:Notepad++專用Regex裡,取代字串可用{{code|(?{4}ab$5dc)}}代表「若$4存在則取代為ab$5dc」;在Python原生Regex裡,則要用迴圈逐個搜尋、判斷,再行取代)}}
  
 
=== PukiWiki 和 MediaWiki 的語法資料 ===
 
=== PukiWiki 和 MediaWiki 的語法資料 ===
行 42: 行 44:
  
 
===目錄與標題===
 
===目錄與標題===
*MediaWiki目錄為自動產生,因此Puki的目錄語法<code>#contents</code>可以直接刪除
+
*MediaWiki目錄為自動產生,因此Puki的目錄語法{{code|#contents|bgcolor=#ffddee}}可以直接刪除
 
*MediaWiki目錄會自動抓取頁面中的所有大小標題,並以樹狀列表排整齊
 
*MediaWiki目錄會自動抓取頁面中的所有大小標題,並以樹狀列表排整齊
*在Komica形成的文化中,位於頁首的第一層標題(<code>*標題</code>)通常做為整篇文章的「真‧條目名稱」使用,因此該標題不應轉換為MediaWiki的標題語法,必須改用[[Template:H0]]包夾,以防其出現於目錄裡
+
*在Komica形成的文化中,位於頁首的第一層標題({{code|*標題|bgcolor=#ffddee|start=1}})通常做為整篇文章的「真‧條目名稱」使用,因此該標題不應轉換為MediaWiki的標題語法,必須改用[[Template:H0]]包夾,以防其出現於目錄裡
*因上述的理由,之後的標題通常是從第2層(<code>**標題</code>)開始(有少數例外,如[[夢日記]]在舊KWiki上的內容)
+
*因上述的理由,之後的標題通常是從第2層({{code|**標題|bgcolor=#ffddee|start=1}})開始(有少數例外,如[[夢日記]]在舊KWiki上的內容)
 
*除了做為「真‧條目名稱」使用的標題,剩下的標題可依以下規則轉換:
 
*除了做為「真‧條目名稱」使用的標題,剩下的標題可依以下規則轉換:
**<code><nowiki>**大章節</nowiki></code><code><nowiki>==大章節==</nowiki></code>
+
**{{code|<nowiki>**大章節</nowiki>|bgcolor=#ffddee|start=1}}{{code|<nowiki>==大章節==</nowiki>|bgcolor=#ddffee|start=1}}
**<code><nowiki>***小章節</nowiki></code><code><nowiki>===小章節===</nowiki></code>
+
**{{code|<nowiki>***小章節</nowiki>|bgcolor=#ffddee|start=1}}{{code|<nowiki>===小章節===</nowiki>|bgcolor=#ddffee|start=1}}
*MediaWiki的標題總共有5層(從雙等號包夾<code><nowiki>==標題==</nowiki></code>到六等號包夾<code><nowiki>======標題======</nowiki></code>),需要追加細分時可以使用
+
*MediaWiki的標題總共有5層(從雙等號包夾{{code|<nowiki>==標題==</nowiki>|bgcolor=#ddffee|start=1}}到六等號包夾{{code|<nowiki>======標題======</nowiki>|bgcolor=#ddffee|start=1}}),需要追加細分時可以使用
*注意:'''請勿在任何一般條目裡使用單等號包夾(<code><nowiki>=非標題=</nowiki></code>)'''。雖然MediaWiki存在單等號包夾的語法,但它是給頁面內容之外、在頂部的頁面名稱使用。
+
*注意:'''請勿在任何一般條目裡使用單等號包夾({{code|<nowiki>=非標題=</nowiki>|start=1}})'''。雖然MediaWiki存在單等號包夾的語法,但它是給頁面內容之外、在頂部的頁面名稱使用。
  
 
===條目內回應區或Comments頁面===
 
===條目內回應區或Comments頁面===
 
*移動之前,請先比照一般條目的語法轉換方式處理(如項目符號轉換),可用自動轉換
 
*移動之前,請先比照一般條目的語法轉換方式處理(如項目符號轉換),可用自動轉換
**Pukiwiki留言的時間戳記語法<code>&new{};</code>在MediaWiki不能用,應整個去掉
+
**Pukiwiki留言的時間戳記語法{{code|&new{};|bgcolor=#ffddee}}在MediaWiki不能用,應整個去掉
***Regex: <code><nowiki>&new\{(.*?)\};</nowiki></code> <code><nowiki>$1</nowiki></code>
+
***Regex: {{code|<nowiki>&new\{(.*?)\};</nowiki>}} {{code|<nowiki>$1</nowiki>}}
***雖然也有轉成<code>&lt;time></code>標籤的方式,但該標籤沒有實質作用,且MediaWiki並不會給簽名/時間戳記語法(<code><nowiki>~~~~~</nowiki></code><code><nowiki>~~~~</nowiki></code>)自動追加該標籤
+
***雖然也有轉成{{code|&lt;time>}}標籤的方式,但該標籤沒有實質作用,且MediaWiki並不會給簽名/時間戳記語法({{code|<nowiki>~~~~~</nowiki>|bgcolor=#ddffee}}{{code|<nowiki>~~~~</nowiki>|bgcolor=#ddffee}})自動追加該標籤
 
*Comments頁面的內容,應複製貼上到條目本身的「討論」頁面,點頁面左上方的「討論」以進入
 
*Comments頁面的內容,應複製貼上到條目本身的「討論」頁面,點頁面左上方的「討論」以進入
 
**比如舊wiki上的 [https://wiki.komica.org/wiki5/?Comments%2FFate%2FGrand%20Order&word Comments/Fate/Grand Order] ,應移至[[討論:Fate/Grand Order]]裡
 
**比如舊wiki上的 [https://wiki.komica.org/wiki5/?Comments%2FFate%2FGrand%20Order&word Comments/Fate/Grand Order] ,應移至[[討論:Fate/Grand Order]]裡
行 62: 行 64:
 
*條目內的回應區可選擇原地保留或移動至「討論」頁,但'''請勿直接捨棄'''
 
*條目內的回應區可選擇原地保留或移動至「討論」頁,但'''請勿直接捨棄'''
 
**如果需要移動,'''應比照Comments頁面的處理法''',將所有內容剪下貼進「討論」頁面
 
**如果需要移動,'''應比照Comments頁面的處理法''',將所有內容剪下貼進「討論」頁面
**若要在內文追加討論頁連結,可使用「<code><nowiki>[[Talk:{{FULLPAGENAME}}]]</nowiki></code>」。此連結適合於所有一般條目,因為<code><nowiki>{{FULLPAGENAME}}</nowiki></code>即為內建模板「頁面全名」。
+
**若要在內文追加討論頁連結,可使用「{{code|<nowiki>[[Talk:{{FULLPAGENAME}}]]</nowiki>|bgcolor=#ddffee}}」。此連結適合於所有一般條目,因為{{code|<nowiki>{{FULLPAGENAME}}</nowiki>|bgcolor=#ddffee}}即為內建模板「頁面全名」。
*移動完畢後,請在整塊留言上方給予一個雙等號包夾的<code><nowiki>==標題==</nowiki></code>,例如<code><nowiki>==無主題之留言==</nowiki></code><code><nowiki>==雜談==</nowiki></code>……等
+
*移動完畢後,請在整塊留言上方給予一個雙等號包夾的{{code|<nowiki>==標題==</nowiki>|bgcolor=#ddffee|start=1}},例如{{code|<nowiki>==無主題之留言==</nowiki>|bgcolor=#ddffee|start=1}}{{code|<nowiki>==雜談==</nowiki>|bgcolor=#ddffee|start=1}}……等
  
 
===粗體/斜體===
 
===粗體/斜體===
行 69: 行 71:
 
**須注意尚有五單引號(粗斜體)的狀況。雖然五單引號可直接用於MediaWiki,但為了避免在雙單引號與三單引號的轉換過程中被動到,必須先轉成html標籤再轉回去
 
**須注意尚有五單引號(粗斜體)的狀況。雖然五單引號可直接用於MediaWiki,但為了避免在雙單引號與三單引號的轉換過程中被動到,必須先轉成html標籤再轉回去
 
**轉換步驟如下(步驟1~3不可替換順序):
 
**轉換步驟如下(步驟1~3不可替換順序):
**#將成對五單引號<code><nowiki>'''''_'''''</nowiki></code>轉為粗斜體標籤<code><nowiki><b><i>_</i></b></nowiki></code>
+
**#將成對五單引號{{code|<nowiki>'''''_'''''</nowiki>|bgcolor=#ffddee
**#:regex:<code><nowiki>'''''(.+?)'''''</nowiki></code> <code><nowiki><b><i>$1<\/i><\/b></nowiki></code>
+
}}轉為粗斜體標籤{{code|<nowiki><b><i>_</i></b></nowiki>}}
**#將成對三單引號<code><nowiki>'''_'''</nowiki></code>轉為斜體標籤<code><nowiki><i>_</i></nowiki></code>
+
**#:regex:{{code|<nowiki>'''''(.+?)'''''</nowiki>}} {{code|<nowiki><b><i>$1<\/i><\/b></nowiki>}}
**#:regex:<code><nowiki>'''(.+?)'''</nowiki></code> <code><nowiki><i>$1<\/i></nowiki></code>
+
**#將成對三單引號{{code|<nowiki>'''_'''</nowiki>|bgcolor=#ffddee
**#將成對雙單引號<code><nowiki>''_''</nowiki></code>轉為粗體標籤<code><nowiki><b>_</b></nowiki></code>
+
}}轉為斜體標籤{{code|<nowiki><i>_</i></nowiki>}}
**#:regex:<code><nowiki>''(.+?)''</nowiki></code> <code><nowiki><b>$1<\/b></nowiki></code>
+
**#:regex:{{code|<nowiki>'''(.+?)'''</nowiki>}} {{code|<nowiki><i>$1<\/i></nowiki>}}
**#將<code><nowiki><b></nowiki></code><code><nowiki></b></nowiki></code>都取代為<code><nowiki>'''</nowiki></code>
+
**#將成對雙單引號{{code|<nowiki>''_''</nowiki>|bgcolor=#ffddee
**#將<code><nowiki><i></nowiki></code><code><nowiki></i></nowiki></code>都取代為<code><nowiki>''</nowiki></code>
+
}}轉為粗體標籤{{code|<nowiki><b>_</b></nowiki>}}
 +
**#:regex:{{code|<nowiki>''(.+?)''</nowiki>}} {{code|<nowiki><b>$1<\/b></nowiki>}}
 +
**#將{{code|<nowiki><b></nowiki>}}{{code|<nowiki></b></nowiki>}}都取代為{{code|<nowiki>'''</nowiki>|bgcolor=#ddffee}}
 +
**#將{{code|<nowiki><i></nowiki>}}{{code|<nowiki></i></nowiki>}}都取代為{{code|<nowiki>''</nowiki>|bgcolor=#ddffee}}
 
**轉回多重單引號的步驟可省略,因為MediaWiki可正常使用HTML標籤
 
**轉回多重單引號的步驟可省略,因為MediaWiki可正常使用HTML標籤
  
 
===刪除線/底線===
 
===刪除線/底線===
*Puki有自家的刪除線/底線語法,分別是<code>%%刪除線%%</code><code>%%%底線%%%</code>;MediaWiki只有HTML標籤,最短的寫法為<code><nowiki><s>刪除線</s></nowiki></code><code><nowiki><u>底線</u></nowiki></code>
+
*Puki有自家的刪除線/底線語法,分別是{{code|%%刪除線%%|bgcolor=#ffddee}}{{code|%%%底線%%%|bgcolor=#ffddee}};MediaWiki只有HTML標籤,最短的寫法為{{code|<nowiki><s>刪除線</s></nowiki>}}{{code|<nowiki><u>底線</u></nowiki>}}
**變化形為<code>%%%%%刪除線加底線%%%%%</code>,為了避免被當做「僅有刪除線」或「僅有底線」轉換,必須優先處理
+
**變化形為{{code|%%%%%刪除線加底線%%%%%|bgcolor=#ffddee}},為了避免被當做「僅有刪除線」或「僅有底線」轉換,必須優先處理
 
**轉換順序如下:
 
**轉換順序如下:
**#將<code>%%%%%刪除線加底線%%%%%</code>轉為<code><nowiki><s><u>刪除線加底線</u></s></nowiki></code>
+
**#將{{code|%%%%%刪除線加底線%%%%%|bgcolor=#ffddee}}轉為{{code|<nowiki><s><u>刪除線加底線</u></s></nowiki>}}
**#:regex:<code><nowiki>%%%%%(.+?)%%%%%</nowiki></code> <code><nowiki><s><u>$1<\/u><\/s></nowiki></code>
+
**#:regex:{{code|<nowiki>%%%%%(.+?)%%%%%</nowiki>}} {{code|<nowiki><s><u>$1<\/u><\/s></nowiki>}}
**#將<code>%%%底線%%%</code>轉為<code><nowiki><u>底線</u></nowiki></code>
+
**#將{{code|%%%底線%%%|bgcolor=#ffddee}}轉為{{code|<nowiki><u>底線</u></nowiki>}}
**#:regex:<code><nowiki>%%%(.+?)%%%</nowiki></code> <code><nowiki><u>$1<\/u></nowiki></code>
+
**#:regex:{{code|<nowiki>%%%(.+?)%%%</nowiki>}} {{code|<nowiki><u>$1<\/u></nowiki>}}
**#將<code>%%刪除線%%</code>轉為<code><nowiki><s>刪除線</s></nowiki></code>
+
**#將{{code|%%刪除線%%|bgcolor=#ffddee}}轉為{{code|<nowiki><s>刪除線</s></nowiki>}}
**#:regex:<code><nowiki>%%(.+?)%%</nowiki></code> <code><nowiki><s>$1<\/s></nowiki></code>
+
**#:regex:{{code|<nowiki>%%(.+?)%%</nowiki>}} {{code|<nowiki><s>$1<\/s></nowiki>}}
  
 
===參照(註腳)===
 
===參照(註腳)===
*轉換方式:<code><nowiki>((</nowiki></code><code><nowiki>{{ref|</nowiki></code><code><nowiki>))</nowiki></code><code><nowiki>}}</nowiki></code>
+
*轉換方式:{{code|<nowiki>((</nowiki>|bgcolor=#ffddee}}{{code|<nowiki>{{ref|</nowiki>|bgcolor=#ddffee}}{{code|<nowiki>))</nowiki>|bgcolor=#ffddee}}{{code|<nowiki>}}</nowiki>|bgcolor=#ddffee}}
 
*參照語法應避免使用巢狀構造(註解中再塞其他註解),盡可能改寫其說明,使之可以在單一參照之內完成
 
*參照語法應避免使用巢狀構造(註解中再塞其他註解),盡可能改寫其說明,使之可以在單一參照之內完成
  
行 101: 行 106:
 
|-
 
|-
 
!Pukiwiki
 
!Pukiwiki
|<code><nowiki>[[URL]]</nowiki></code> || <code><nowiki>[[連結文字>URL]]</nowiki></code> || 與內部連結構造相同<br>以前置的http://或https://判斷
+
|{{code|<nowiki>[[URL]]</nowiki>}} || {{code|<nowiki>[[連結文字>URL]]</nowiki>}} || 與內部連結構造相同<br>以前置的http://或https://判斷
 
|-
 
|-
 
!Mediawiki
 
!Mediawiki
|<code><nowiki>[URL URL]</nowiki></code> || <code><nowiki>[URL 連結文字]</nowiki></code> || 中間必空一格
+
|{{code|<nowiki>[URL URL]</nowiki>}} || {{code|<nowiki>[URL 連結文字]</nowiki>}} || 中間必空一格
 
|}
 
|}
 
*必須根據URL部份是否從http://或https://起始,來斷定一個連結是否為外部連結
 
*必須根據URL部份是否從http://或https://起始,來斷定一個連結是否為外部連結
 
*使用正規表達式處理,需要照順序執行兩個步驟,不可對調{{ref|例如''<nowiki>[[http://abcd>http://google.com]]</nowiki>''的狀況,如果先執行第2步驟「處理無文字的連結」,會被錯誤轉換成''<nowiki>[http://abcd>http://google.com http://abcd>http://google.com]。</nowiki>''}}:
 
*使用正規表達式處理,需要照順序執行兩個步驟,不可對調{{ref|例如''<nowiki>[[http://abcd>http://google.com]]</nowiki>''的狀況,如果先執行第2步驟「處理無文字的連結」,會被錯誤轉換成''<nowiki>[http://abcd>http://google.com http://abcd>http://google.com]。</nowiki>''}}:
*#處理有文字的連結:<code><nowiki>\[\[(.+?)>(https?:\/\/.*?)\]\]</nowiki></code>換成<code><nowiki>[$2 $1]</nowiki></code>
+
*#處理有文字的連結:{{code|<nowiki>\[\[(.+?)>(https?:\/\/.*?)\]\]</nowiki>}}換成{{code|<nowiki>[$2 $1]</nowiki>}}
*#處理無文字的連結:<code><nowiki>\[\[(https?:\/\/.*?)\]\]</nowiki></code>換成<code><nowiki>[$1 $1]</nowiki></code>
+
*#處理無文字的連結:{{code|<nowiki>\[\[(https?:\/\/.*?)\]\]</nowiki>}}換成{{code|<nowiki>[$1 $1]</nowiki>}}
*<mark>注意:外部連結中如果有空白字元<code> </code>,請取代為<code>%20</code>,以免URL被錯誤分段
+
*<mark>注意:外部連結中如果有空白字元{{code| }},請取代為{{code|%20}},以免URL被錯誤分段
**例如Puki的<code><nowiki>[[舊留言頁>https://wiki.komica.org/wiki5/?Comments/FrontPage 2006]]</nowiki></code></mark>→MediaWiki的<code><nowiki>[https://wiki.komica.org/wiki5/?Comments/FrontPage%202006 舊留言頁]</nowiki></code>
+
**例如Puki的{{code|<nowiki>[[舊留言頁>https://wiki.komica.org/wiki5/?Comments/FrontPage 2006]]</nowiki>|bgcolor=#ffddee}}</mark>→MediaWiki的{{code|<nowiki>[https://wiki.komica.org/wiki5/?Comments/FrontPage%202006 舊留言頁]</nowiki>|bgcolor=#ddffee}}
  
 
===內部連結===
 
===內部連結===
行 119: 行 124:
  
 
*使用正規表達式處理,有兩種狀況:
 
*使用正規表達式處理,有兩種狀況:
**未預先完成外部連結轉換時:<code><nowiki>\[\[(.+?)>((?!https?:\/\/).*?)\]\]</nowiki></code>換成<code><nowiki>[[$2|$1]]</nowiki></code>
+
**未預先完成外部連結轉換時:{{code|<nowiki>\[\[(.+?)>((?!https?:\/\/).*?)\]\]</nowiki>}}換成{{code|<nowiki>[[$2|$1]]</nowiki>}}
***<code><nowiki>(?!https?:\/\/)</nowiki></code>為否定條件的判斷式,用於剔除連結名稱以http://或https://起始的狀況
+
***{{code|<nowiki>(?!https?:\/\/)</nowiki>}}為否定條件的判斷式,用於剔除連結名稱以http://或https://起始的狀況
**已預先完成外部連結轉換時:<code><nowiki>\[\[(.+?)>(.+?)\]\]</nowiki></code>換成<code><nowiki>[[$2|$1]]</nowiki></code>
+
**已預先完成外部連結轉換時:{{code|<nowiki>\[\[(.+?)>(.+?)\]\]</nowiki>}}換成{{code|<nowiki>[[$2|$1]]</nowiki>}}
  
 
===頁面標題連結===
 
===頁面標題連結===
*頁內連結格式:<code><nowiki>[[#標題名稱]]</nowiki></code><code><nowiki>[[#標題名稱|連結文字]]</nowiki></code>
+
*頁內連結格式:{{code|<nowiki>[[#標題名稱]]</nowiki>}}{{code|<nowiki>[[#標題名稱|連結文字]]</nowiki>|bgcolor=#ddffee}}
*跨頁連結格式:<code><nowiki>[[頁面名稱#標題名稱]]</nowiki></code><code><nowiki>[[頁面名稱#標題名稱|連結文字]]</nowiki></code>
+
*跨頁連結格式:{{code|<nowiki>[[頁面名稱#標題名稱]]</nowiki>}}{{code|<nowiki>[[頁面名稱#標題名稱|連結文字]]</nowiki>|bgcolor=#ddffee}}
*PukiWiki的錨點設定語法(anchor,格式為<code><nowiki>[</nowiki>#錨點名稱<nowiki>]</nowiki></code>),在MediaWiki'''並沒有相對應的語法'''
+
*PukiWiki的錨點設定語法(anchor,格式為{{code|<nowiki>[</nowiki>#錨點名稱<nowiki>]</nowiki>|bgcolor=#ffddee
** 折衷方法是,在標題的前面使用<code><nowiki><span id="錨點名稱"></span></nowiki></code>。此方法於標題較長的時候適用,此後把以上的「標題名稱」以「錨點名稱」代替即可。
+
}}),在MediaWiki'''並沒有相對應的語法'''
 +
** 折衷方法是,在標題的前面使用{{code|<nowiki><span id="錨點名稱"></span></nowiki>}}。此方法於標題較長的時候適用,此後把以上的「標題名稱」以「錨點名稱」代替即可。
 
*連結中的「標題名稱」'''必須手動修改''',無法以任何形式的自動取代達成
 
*連結中的「標題名稱」'''必須手動修改''',無法以任何形式的自動取代達成
  
 
===引用區塊(縮排)===
 
===引用區塊(縮排)===
*Puki語法為區塊內每行行首1~3個<code>&gt;</code>、減少層級或結束時為行首的1~3個<code>&lt;</code>
+
*Puki語法為區塊內每行行首1~3個{{code|&gt;|bgcolor=#ffddee
 +
}}、減少層級或結束時為行首的1~3個{{code|&lt;|bgcolor=#ffddee
 +
}}
 
*轉換時必須先觀察整個區塊的上一行是否為列表項目,才能決定如何轉換
 
*轉換時必須先觀察整個區塊的上一行是否為列表項目,才能決定如何轉換
**當該行為空行,或非列表項目時,可以直接將區塊裡的行首<code>&gt;</code>換成<code>:</code>
+
**當該行為空行,或非列表項目時,可以直接將區塊裡的行首{{code|&gt;|bgcolor=#ffddee
**當該行為列表項目時,則必須在'''區塊內每一行'''插入該行的項目符號於行首,再把之後的<code>&gt;</code>換成<code>:</code>
+
}}換成{{code|:|bgcolor=#ddffee}}
*區塊尾端的<code>&lt;</code>直接連同換行一起清除即可
+
**當該行為列表項目時,則必須在'''區塊內每一行'''插入該行的項目符號於行首,再把之後的{{code|&gt;|bgcolor=#ffddee
 +
}}換成{{code|:|bgcolor=#ddffee}}
 +
*區塊尾端的{{code|&lt;|bgcolor=#ffddee
 +
}}直接連同換行一起清除即可
 
==== 範例 ====
 
==== 範例 ====
 
{|class="wikitable" style="margin:auto;"
 
{|class="wikitable" style="margin:auto;"
行 199: 行 210:
 
|}
 
|}
 
===項目符號===
 
===項目符號===
*基礎代換方式:行首的<code><nowiki>-</nowiki></code> 換成 <code><nowiki>*</nowiki></code><code><nowiki>+</nowiki></code> 換成 <code><nowiki>#</nowiki></code>,PukiWiki裡一行最多3個
+
*基礎代換方式:行首的{{code|<nowiki>-</nowiki>|bgcolor=#ffddee
**注意<code><nowiki>----</nowiki></code>是分隔線、不是項目符號,不需轉換
+
}} 換成 {{code|<nowiki>*</nowiki>|bgcolor=#ddffee}}{{code|<nowiki>+</nowiki>|bgcolor=#ffddee
 +
}} 換成 {{code|<nowiki>#</nowiki>|bgcolor=#ddffee}},PukiWiki裡一行最多3個
 +
**注意{{code|<nowiki>----</nowiki>}}是分隔線、不是項目符號,不需轉換
 
*每兩項之間不可有空行,必須緊貼上一行,否則項目符號會顯示異常
 
*每兩項之間不可有空行,必須緊貼上一行,否則項目符號會顯示異常
 
**因為當初在PukiWiki時的排版需求,許多項目中間存在著空行或換行符號;來到MediaWiki後,再也不需要這些空行,所以需要編輯者手動清理
 
**因為當初在PukiWiki時的排版需求,許多項目中間存在著空行或換行符號;來到MediaWiki後,再也不需要這些空行,所以需要編輯者手動清理
*如果有需求必須與上一層項目斷開多行,則改成 <code>:*</code> 這種加入縮排的格式,每多一層就多一個冒號
+
*如果有需求必須與上一層項目斷開多行,則改成 {{code|:*|bgcolor=#ddffee|start=1}} 這種加入縮排的格式,每多一層就多一個冒號
**使用縮排前請先嘗試以換行標籤<code>&lt;br></code>解決,真的有需要時再使用
+
**使用縮排前請先嘗試以換行標籤{{code|&lt;br>}}解決,真的有需要時再使用
**只有在項目符號全部為圖案(<code><nowiki>*</nowiki></code>)時才適用,否則編號會無法正確計算{{ref|例如在<code>*#</code>下一行用<code>*#*</code><code>*##</code>時,觀察原始碼時可以看到標準HTML列表具有的&lt;ul>&lt;li>或&lt;ol>&lt;li>巢狀結構;然而使用<code>::*</code><code>::#</code>時,卻會看到縮排標籤&lt;dl>&lt;dd>,與上一行沒有形成巢狀構造,不能成為完整的列表}}
+
**只有在項目符號全部為圖案({{code|<nowiki>*</nowiki>|bgcolor=#ddffee}})時才適用,否則編號會無法正確計算{{ref|例如在{{code|*#|bgcolor=#ddffee|start=1}}下一行用{{code|*#*|bgcolor=#ddffee|start=1}}{{code|*##|bgcolor=#ddffee|start=1}}時,觀察原始碼時可以看到標準HTML列表具有的&lt;ul>&lt;li>或&lt;ol>&lt;li>巢狀結構;然而使用{{code|::*|bgcolor=#ddffee|start=1}}{{code|::#|bgcolor=#ddffee|start=1}}時,卻會看到縮排標籤&lt;dl>&lt;dd>,與上一行沒有形成巢狀構造,不能成為完整的列表}}
  
 
==== 範例 ====
 
==== 範例 ====
行 281: 行 294:
 
|-
 
|-
 
!有間隔行,但不可清除時
 
!有間隔行,但不可清除時
|如果因為中間有圖片或表格,非得與上一項目空多行不可時,需改用<code>:*</code>形式:
+
|如果因為中間有圖片或表格,非得與上一項目空多行不可時,需改用{{code|:*}}形式:
 
|<pre>
 
|<pre>
 
- 第一層
 
- 第一層
行 312: 行 325:
  
 
===表格===
 
===表格===
*MediaWiki語法中,表格以行首<code><nowiki>{|</nowiki></code>起始,以行首<code><nowiki>|}</nowiki></code>結束
+
*MediaWiki語法中,表格以{{code|<nowiki>{|</nowiki>|bgcolor=#ddffee|start=1}}起始,以{{code|<nowiki>|}</nowiki>|bgcolor=#ddffee|start=1}}結束
**表格起點<code><nowiki>{|</nowiki></code>前面可加入任意數量的縮排符號<code><nowiki>:</nowiki></code>,但項目符號<code><nowiki>*</nowiki></code>與編號<code><nowiki>#</nowiki></code>皆不可使用
+
**表格起點{{code|<nowiki>{|</nowiki>|bgcolor=#ddffee}}前面可加入任意數量的縮排符號{{code|<nowiki>:</nowiki>|bgcolor=#ddffee}},但項目符號{{code|<nowiki>*</nowiki>|bgcolor=#ddffee}}與編號{{code|<nowiki>#</nowiki>|bgcolor=#ddffee}}皆不可使用
**首行的<code><nowiki>{|</nowiki></code>後面可以加入class和style屬性
+
**首行的{{code|<nowiki>{|</nowiki>|bgcolor=#ddffee}}後面可以加入class和style屬性
***通常表格都建議加入<code><nowiki>class="wikitable" style="margin:auto;"</nowiki></code>,以套用MediaWiki預設的表格樣式,並使表格如PukiWiki預設一般置中
+
***通常表格都建議加入{{code|<nowiki>class="wikitable" style="margin:auto;"</nowiki>}},以套用MediaWiki預設的表格樣式,並使表格如PukiWiki預設一般置中
*每一個新列以行首<code><nowiki>|-</nowiki></code>為開頭,首列的可以省略
+
*每一個新列以{{code|<nowiki>|-</nowiki>|bgcolor=#ddffee|start=1}}為開頭,首列的可以省略
**<code><nowiki>|-</nowiki></code>後方可以加入style屬性,給予整列自訂格式
+
**{{code|<nowiki>|-</nowiki>|bgcolor=#ddffee|start=1}}後方可以加入style屬性,給予整列自訂格式
*標題儲存格(th)語法在Puki為<code><nowiki>|~</nowiki>{{color|blue||內容}}{{color|#00bf00||<nowiki>|</nowiki>}}</code>,對應MediaWiki語法為行首<code><nowiki>!</nowiki>{{color|blue||內容}}</code>
+
*標題儲存格(th)語法在Puki為{{code|<nowiki>|~</nowiki>{{color|blue||內容}}{{color|#00bf00||<nowiki>|</nowiki>}}|bgcolor=#ffddee}},對應MediaWiki語法為{{code|<nowiki>!</nowiki>{{color|blue||內容}}|bgcolor=#ddffee|start=1}}
**須注意後方無空格的、直接連著<code><nowiki>|</nowiki></code><code><nowiki>|~</nowiki></code><code><nowiki>|~</nowiki>{{color|#00bf00||<nowiki>|</nowiki>}}</code>)並非標題儲存格,而是儲存格的多列合併語法,這個狀況無法利用單純的regex取代轉換
+
**須注意後方無空格的、直接連著{{code|<nowiki>|</nowiki>}}{{code|<nowiki>|~</nowiki>|bgcolor=#ffddee}}{{code|<nowiki>|~</nowiki>{{color|#00bf00||<nowiki>|</nowiki>}}|bgcolor=#ffddee}})並非標題儲存格,而是儲存格的多列合併語法,這個狀況無法利用單純的regex取代轉換
*一般儲存格(td)在MediaWiki語法為行首<code><nowiki>|</nowiki>{{color|blue||內容}}</code>,因此直接換行即可
+
*一般儲存格(td)在MediaWiki語法為{{code|<nowiki>|</nowiki>{{color|blue||內容}}|bgcolor=#ddffee|start=1}},因此直接換行即可
*在PukiWiki,儲存格欄合併語法為<code><nowiki>|></nowiki>{{color|#00bf00||<nowiki>|</nowiki>}}</code>(併至右方欄)、列合併語法為<code><nowiki>|~</nowiki>{{color|#00bf00||<nowiki>|</nowiki>}}</code>(併至上方列);在MediaWiki,需要根據合併後總數在儲存格'''最左上的位置'''內加入colspan或/和rowspan屬性
+
**須注意,如果Puki碼的儲存格內容只有一個「-」號,請務必在「-」前面空一格({{code|<nowiki>| -</nowiki>|bgcolor=#ddffee|start=1}}),以免被當作換列指令
*PukiWiki的格式標記(<code>LEFT:</code><code>CENTER:</code><code>RIGHT:</code><code>COLOR({{color|blue||顏色碼}}):</code><code>BGCOLOR({{color|blue||顏色碼}}):</code><code>SIZE({{color|blue||字型大小}}):</code>),需要改為儲存格的style屬性值(<code>text-align:</code><code>color:{{color|blue||顏色碼}}</code><code>background-color:{{color|blue||顏色碼}}</code><code>font-size:{{color|blue||字型大小}}px</code>
+
*在PukiWiki,儲存格欄合併語法為{{code|<nowiki>|></nowiki>{{color|#00bf00||<nowiki>|</nowiki>}}|bgcolor=#ffddee}}(併至右方欄)、列合併語法為{{code|<nowiki>|~</nowiki>{{color|#00bf00||<nowiki>|</nowiki>}}|bgcolor=#ffddee}}(併至上方列);在MediaWiki,需要根據合併後總數在儲存格'''最左上的位置'''內加入colspan或/和rowspan屬性
 +
*PukiWiki的格式標記({{code|LEFT:|bgcolor=#ffddee}}{{code|CENTER:|bgcolor=#ffddee}}{{code|RIGHT:|bgcolor=#ffddee}}{{code|COLOR({{color|blue||顏色碼}}):|bgcolor=#ffddee}}{{code|BGCOLOR({{color|blue||顏色碼}}):|bgcolor=#ffddee}}{{code|SIZE({{color|blue||字型大小}}):|bgcolor=#ffddee}}),需要改為儲存格的style屬性值({{code|text-align:}}{{code|color:{{color|blue||顏色碼}}}}{{code|background-color:{{color|blue||顏色碼}}}}{{code|font-size:{{color|blue||字型大小}}px}}
 
====範例====
 
====範例====
 
{|class="wikitable" style="margin:auto;"
 
{|class="wikitable" style="margin:auto;"
行 397: 行 411:
 
===註解(非顯示文字)===
 
===註解(非顯示文字)===
 
*只有在編輯模式下能看見的文字,不對顯示內容造成任何影響
 
*只有在編輯模式下能看見的文字,不對顯示內容造成任何影響
*MediaWiki的註解只能使用HTML標籤<code>&lt;!-- --&gt;</code>,但不限於放在行首
+
*MediaWiki的註解只能使用HTML標籤{{code|&lt;!-- --&gt;}},但不限於放在行首
*轉換方式:(行首)<code>// 註解文字</code><code>&lt;!-- 註解文字 --&gt;</code>
+
*轉換方式:(行首){{code|// 註解文字|bgcolor=#ffddee}}{{code|&lt;!-- 註解文字 --&gt;}}
**regex:<code><nowiki>(^|\n)\/\/(.*)</nowiki></code> <code><nowiki>$1<!--$2--></nowiki></code>
+
**regex:{{code|<nowiki>(^|\n)\/\/(.*)</nowiki>}} {{code|<nowiki>$1<!--$2--></nowiki>}}
 
==備註==
 
==備註==
 
<references />
 
<references />
  
 
[[分類:說明文件]]
 
[[分類:說明文件]]

於 2017年6月11日 (日) 15:56 的修訂

Pukiwiki-Mediawiki轉換教學
因為原wiki使用pukiwiki格式,在此列出pukiwiki-mediawiki轉換器與手動轉換解說,以幫助有心搬移資料的島民。
以下將使用 表示PukiWiki專用碼、 表MediaWiki專用碼,兩者通用的或來自HTML/CSS的碼不加註顏色

自動轉換

此處列出別人已經寫好的轉換程式。

注意事項:
  • 部份語法不被支援,故使用後請手動檢查。
  • 若原本的puki碼已有錯誤,自動轉換或手動Regex取代的結果可能會出現異常。
  • 因為PukiWiki頁面內容不存在相當於「分類」的語法,故無法自動追加「MediaWiki分類」,需要手動完成

Notepad++

  • komica-puki_to_mediawiki.zip
    • 最終更新日為2017年6月9日,版本0.4.2
    • 為KomicaWiki量身打造,基於舊wiki約定成俗的條目寫作習慣轉換(如行首*大標題{{h0|大標題}}
    • 會自動附加<references />於底部
    • 需按照裡面說明,安裝Notepad++(32位元版)Python Script,並照步驟操作
    • 部份Puki碼(如表格的儲存格格式和合併儲存格)無法直接轉換,必須手動修正

GoLang

  • p2mfmt
    • 這支程式被用在機器人
    • 目前此程式的問題
    1. 此程式並未針對 Komica Wiki 的模板進行調整,所以自動生成完後需要手動處理模板問題
    2. 此程式在處理表格時,表格標頭可能會沒法轉換成功
    3. 尚未具備處理底線%%%_%%%和底線加刪除線%%%%%_%%%%%的能力

手動轉換

這邊列出手動轉換的要點。

  • 為求正確轉換,需使用正規表達式(Regular Expression,簡稱Regex)[1]
    • 與一般程式寫作不同,空格字元會被當作一般字元檢查,因此Regex中不可有任何多餘空格
    • 為對應PukiWiki碼構造,數量標記諸如任何次數標記(.*[\s\S]*尾端的*)和任何正整數次標記(.+[\s\S]+尾端的+)的後面,大部份時候需要追加一個問號(如:.*?[\s\S]+?)以搜尋「最少字數的符合項目」
      • 對於字串他出於%%無奈%%好奇開了門%%,然後他就囧掉了%%,自此學到教訓,搜尋%%.+%%時會得到%%無奈%%好奇開了門%%,然後他就囧掉了%%,單次搜尋%%.+?%%時會得到%%無奈%%,搜尋下一個時會得到%%,然後他就囧掉了%%
      • 在搜尋包夾型Puki碼時,如果不使用起始碼(.*?)終止碼而用起始碼(.*)終止碼,當同一行有多個搜尋項目時,會被錯誤地當成只有一個項目。
  • 若所使用的文字/程式語言編輯器不支援Regex的語法檢查,可使用網頁https://regex101.com/協助除錯
  • 前述的Notepad++的轉換用Python script即應用了以下絕大部份的轉換方法[2]

PukiWiki 和 MediaWiki 的語法資料

若對 PukiWiki 或 MediaWiki 語法有疑問,可參考下面網頁:

目錄與標題

  • MediaWiki目錄為自動產生,因此Puki的目錄語法#contents可以直接刪除
  • MediaWiki目錄會自動抓取頁面中的所有大小標題,並以樹狀列表排整齊
  • 在Komica形成的文化中,位於頁首的第一層標題(行首*標題)通常做為整篇文章的「真‧條目名稱」使用,因此該標題不應轉換為MediaWiki的標題語法,必須改用Template:H0包夾,以防其出現於目錄裡
  • 因上述的理由,之後的標題通常是從第2層(行首**標題)開始(有少數例外,如夢日記在舊KWiki上的內容)
  • 除了做為「真‧條目名稱」使用的標題,剩下的標題可依以下規則轉換:
    • 行首**大章節行首==大章節==
    • 行首***小章節行首===小章節===
  • MediaWiki的標題總共有5層(從雙等號包夾行首==標題==到六等號包夾行首======標題======),需要追加細分時可以使用
  • 注意:請勿在任何一般條目裡使用單等號包夾(行首=非標題=。雖然MediaWiki存在單等號包夾的語法,但它是給頁面內容之外、在頂部的頁面名稱使用。

條目內回應區或Comments頁面

  • 移動之前,請先比照一般條目的語法轉換方式處理(如項目符號轉換),可用自動轉換
    • Pukiwiki留言的時間戳記語法&new{};在MediaWiki不能用,應整個去掉
      • Regex: &new\{(.*?)\};$1
      • 雖然也有轉成<time>標籤的方式,但該標籤沒有實質作用,且MediaWiki並不會給簽名/時間戳記語法(~~~~~~~~~)自動追加該標籤
  • Comments頁面的內容,應複製貼上到條目本身的「討論」頁面,點頁面左上方的「討論」以進入
  • 條目內的回應區可選擇原地保留或移動至「討論」頁,但請勿直接捨棄
    • 如果需要移動,應比照Comments頁面的處理法,將所有內容剪下貼進「討論」頁面
    • 若要在內文追加討論頁連結,可使用「[[Talk:{{FULLPAGENAME}}]]」。此連結適合於所有一般條目,因為{{FULLPAGENAME}}即為內建模板「頁面全名」。
  • 移動完畢後,請在整塊留言上方給予一個雙等號包夾的行首==標題==,例如行首==無主題之留言==行首==雜談==……等

粗體/斜體

  • Puki和MediaWiki兩者是相反的,也就是原本的雙單引號要改成三單引號,三單引號要改成雙單引號。
    • 須注意尚有五單引號(粗斜體)的狀況。雖然五單引號可直接用於MediaWiki,但為了避免在雙單引號與三單引號的轉換過程中被動到,必須先轉成html標籤再轉回去
    • 轉換步驟如下(步驟1~3不可替換順序):
      1. 將成對五單引號'''''_'''''轉為粗斜體標籤<b><i>_</i></b>
        regex:'''''(.+?)'''''<b><i>$1<\/i><\/b>
      2. 將成對三單引號'''_'''轉為斜體標籤<i>_</i>
        regex:'''(.+?)'''<i>$1<\/i>
      3. 將成對雙單引號''_''轉為粗體標籤<b>_</b>
        regex:''(.+?)''<b>$1<\/b>
      4. <b></b>都取代為'''
      5. <i></i>都取代為''
    • 轉回多重單引號的步驟可省略,因為MediaWiki可正常使用HTML標籤

刪除線/底線

  • Puki有自家的刪除線/底線語法,分別是%%刪除線%%%%%底線%%%;MediaWiki只有HTML標籤,最短的寫法為<s>刪除線</s><u>底線</u>
    • 變化形為%%%%%刪除線加底線%%%%%,為了避免被當做「僅有刪除線」或「僅有底線」轉換,必須優先處理
    • 轉換順序如下:
      1. %%%%%刪除線加底線%%%%%轉為<s><u>刪除線加底線</u></s>
        regex:%%%%%(.+?)%%%%%<s><u>$1<\/u><\/s>
      2. %%%底線%%%轉為<u>底線</u>
        regex:%%%(.+?)%%%<u>$1<\/u>
      3. %%刪除線%%轉為<s>刪除線</s>
        regex:%%(.+?)%%<s>$1<\/s>

參照(註腳)

  • 轉換方式:(({{ref|))}}
  • 參照語法應避免使用巢狀構造(註解中再塞其他註解),盡可能改寫其說明,使之可以在單一參照之內完成

外部連結

格式種類 對應語法 備註
Pukiwiki [[URL]] [[連結文字>URL]] 與內部連結構造相同
以前置的http://或https://判斷
Mediawiki [URL URL] [URL 連結文字] 中間必空一格
  • 必須根據URL部份是否從http://或https://起始,來斷定一個連結是否為外部連結
  • 使用正規表達式處理,需要照順序執行兩個步驟,不可對調[3]
    1. 處理有文字的連結:\[\[(.+?)>(https?:\/\/.*?)\]\]換成[$2 $1]
    2. 處理無文字的連結:\[\[(https?:\/\/.*?)\]\]換成[$1 $1]
  • 注意:外部連結中如果有空白字元 ,請取代為%20,以免URL被錯誤分段
    • 例如Puki的[[舊留言頁>https://wiki.komica.org/wiki5/?Comments/FrontPage 2006]]→MediaWiki的[https://wiki.komica.org/wiki5/?Comments/FrontPage%202006 舊留言頁]

內部連結

  • 一般的內部連結不用改動,但是頁面名稱和連結文字不同者需要。
    • Pukiwiki格式:[[連結文字>頁面名稱]]
    • Mediawiki格式:[[頁面名稱|連結文字]]
  • 使用正規表達式處理,有兩種狀況:
    • 未預先完成外部連結轉換時:\[\[(.+?)>((?!https?:\/\/).*?)\]\]換成[[$2|$1]]
      • (?!https?:\/\/)為否定條件的判斷式,用於剔除連結名稱以http://或https://起始的狀況
    • 已預先完成外部連結轉換時:\[\[(.+?)>(.+?)\]\]換成[[$2|$1]]

頁面標題連結

  • 頁內連結格式:[[#標題名稱]][[#標題名稱|連結文字]]
  • 跨頁連結格式:[[頁面名稱#標題名稱]][[頁面名稱#標題名稱|連結文字]]
  • PukiWiki的錨點設定語法(anchor,格式為[#錨點名稱]),在MediaWiki並沒有相對應的語法
    • 折衷方法是,在標題的前面使用<span id="錨點名稱"></span>。此方法於標題較長的時候適用,此後把以上的「標題名稱」以「錨點名稱」代替即可。
  • 連結中的「標題名稱」必須手動修改,無法以任何形式的自動取代達成

引用區塊(縮排)

  • Puki語法為區塊內每行行首1~3個>、減少層級或結束時為行首的1~3個<
  • 轉換時必須先觀察整個區塊的上一行是否為列表項目,才能決定如何轉換
    • 當該行為空行,或非列表項目時,可以直接將區塊裡的行首>換成:
    • 當該行為列表項目時,則必須在區塊內每一行插入該行的項目符號於行首,再把之後的>換成:
  • 區塊尾端的<直接連同換行一起清除即可

範例

原本 pukiwiki 內容 改成 Mediawiki 預覽
無項目符號時
上一行
> 引用區塊開始
>> 引用區塊第二層
>>> 引用區塊第三層
>> 引用區塊第二層
> 引用區塊結束
<
下一行
上一行
: 引用區塊開始
:: 引用區塊第二層
::: 引用區塊第三層
:: 引用區塊第二層
: 引用區塊結束
下一行
上一行
引用區塊開始
引用區塊第二層
引用區塊第三層
引用區塊第二層
引用區塊結束

下一行

有項目符號時
-上兩行
-+上一行
> 引用區塊開始
>> 引用區塊第二層
>>> 引用區塊第三層
>> 引用區塊第二層
> 引用區塊結束
<
-+下一行
*上兩行
*#上一行
*#: 引用區塊開始
*#:: 引用區塊第二層
*#::: 引用區塊第三層
*#:: 引用區塊第二層
*#: 引用區塊結束
*#下一行
  • 上兩行
    1. 上一行
      引用區塊開始
      引用區塊第二層
      引用區塊第三層
      引用區塊第二層
      引用區塊結束
    2. 下一行

項目符號

  • 基礎代換方式:行首的- 換成 *+ 換成 #,PukiWiki裡一行最多3個
    • 注意----是分隔線、不是項目符號,不需轉換
  • 每兩項之間不可有空行,必須緊貼上一行,否則項目符號會顯示異常
    • 因為當初在PukiWiki時的排版需求,許多項目中間存在著空行或換行符號;來到MediaWiki後,再也不需要這些空行,所以需要編輯者手動清理
  • 如果有需求必須與上一層項目斷開多行,則改成 行首:* 這種加入縮排的格式,每多一層就多一個冒號
    • 使用縮排前請先嘗試以換行標籤<br>解決,真的有需要時再使用
    • 只有在項目符號全部為圖案(*)時才適用,否則編號會無法正確計算[4]

範例

狀況 說明 原本 pukiwiki 內容 改成 Mediawiki 預覽
無空行無編號 照一般方式轉換即可
- 第一層
-- 第二層
--- 第三層
- 又回到第一層
* 第一層
** 第二層
*** 第三層
* 又回到第一層
  • 第一層
    • 第二層
      • 第三層
  • 又回到第一層
無空行有編號 照一般方式轉換即可
- 第一層
-+ 第二層
-+- 第三層
-+ 第二層
-+ 第二層
-+- 第三層
* 第一層
*# 第二層
*#* 第三層
*# 第二層
*# 第二層
*#* 第三層
  • 第一層
    1. 第二層
      • 第三層
    2. 第二層
    3. 第二層
      • 第三層
有間隔行,可清除時 必須手動清理多餘空行,否則
項目符號或編號會異常,如下:
  • 第一層
    • 第二層
    • 第二層
- 第一層
-- 第二層
--- 第三層
- 又回到第一層

-- 第二層
* 第一層
** 第二層
*** 第三層
* 又回到第一層
** 第二層
  • 第一層
    • 第二層
      • 第三層
  • 又回到第一層
    • 第二層
有間隔行,但不可清除時 如果因為中間有圖片或表格,非得與上一項目空多行不可時,需改用:*形式:
- 第一層
-- 第二層
--- 第三層
-- 回到第二層
|~我是表格|礙事的表格|
-- 第二層的處理方式
* 第一層
** 第二層
*** 第三層
** 回到第二層
{|class="wikitable"
!我是表格
|礙事的表格
|}
:* 第二層的處理方式
  • 第一層
    • 第二層
      • 第三層
    • 回到第二層
我是表格 礙事的表格
  • 第二層的處理方式

表格

  • MediaWiki語法中,表格以行首{|起始,以行首|}結束
    • 表格起點{|前面可加入任意數量的縮排符號:,但項目符號*與編號#皆不可使用
    • 首行的{|後面可以加入class和style屬性
      • 通常表格都建議加入class="wikitable" style="margin:auto;",以套用MediaWiki預設的表格樣式,並使表格如PukiWiki預設一般置中
  • 每一個新列以行首|-為開頭,首列的可以省略
    • 行首|-後方可以加入style屬性,給予整列自訂格式
  • 標題儲存格(th)語法在Puki為|~內容|,對應MediaWiki語法為行首!內容
    • 須注意後方無空格的、直接連著||~|~|)並非標題儲存格,而是儲存格的多列合併語法,這個狀況無法利用單純的regex取代轉換
  • 一般儲存格(td)在MediaWiki語法為行首|內容,因此直接換行即可
    • 須注意,如果Puki碼的儲存格內容只有一個「-」號,請務必在「-」前面空一格(行首| -),以免被當作換列指令
  • 在PukiWiki,儲存格欄合併語法為|>|(併至右方欄)、列合併語法為|~|(併至上方列);在MediaWiki,需要根據合併後總數在儲存格最左上的位置內加入colspan或/和rowspan屬性
  • PukiWiki的格式標記(LEFT:CENTER:RIGHT:COLOR(顏色碼):BGCOLOR(顏色碼):SIZE(字型大小):),需要改為儲存格的style屬性值(text-align:color:顏色碼background-color:顏色碼font-size:字型大小px

範例

類型 原本 pukiwiki 內容 改成 Mediawiki 預覽
儲存格樣式代換
|~COLOR(red):紅色標題|~標題|
|CENTER:內容|COLOR(blue):藍色內容|
{| class="wikitable" style="margin:auto;"
|-
! style="color: red;" | 紅色標題
! 標題
|-
| style="text-align: center;"|內容
| style="color: blue;" | 藍色內容
|}
紅色標題 標題
內容 藍色內容
儲存格合併
|td|~th|~th|~th|~th|~th|~th|
|共佔2列|td|td|td|td|td|td|
|~|>|>|>|>|>|共佔6欄|
{| class="wikitable" style="margin:auto;"
|-
| td
! th
! th
! th
! th
! th
! th
|-
| rowspan = "2" | 共佔2列
| td
| td
| td
| td
| td
| td
|-
| colspan="6" |共佔6欄 
|}
td th th th th th th
共佔2列 td td td td td td
共佔6欄

註解(非顯示文字)

  • 只有在編輯模式下能看見的文字,不對顯示內容造成任何影響
  • MediaWiki的註解只能使用HTML標籤<!-- -->,但不限於放在行首
  • 轉換方式:(行首)// 註解文字<!-- 註解文字 -->
    • regex:(^|\n)\/\/(.*)$1<!--$2-->

備註

  1. 部份編輯器不使用$1、$2表示被()抓取的文字,而是使用\1、\2。關於此點,請參考您使用的編輯器說明書
  2. Notepad用的運算式搜尋取代,其Regex語法與Python原生的Regex不同,具有許多自訂的關鍵字,能做更多變化。(例如:Notepad++專用Regex裡,取代字串可用(?{4}ab$5dc)代表「若$4存在則取代為ab$5dc」;在Python原生Regex裡,則要用迴圈逐個搜尋、判斷,再行取代)
  3. 例如[[http://abcd>http://google.com]]的狀況,如果先執行第2步驟「處理無文字的連結」,會被錯誤轉換成[http://abcd>http://google.com http://abcd>http://google.com]。
  4. 例如在行首*#下一行用行首*#*行首*##時,觀察原始碼時可以看到標準HTML列表具有的<ul><li>或<ol><li>巢狀結構;然而使用行首::*行首::#時,卻會看到縮排標籤<dl><dd>,與上一行沒有形成巢狀構造,不能成為完整的列表