Dokuwiki 的標題語法與oddmuse、Mediawiki剛好相反,h1是======,而h5是==。為了轉移方便,只好想辦法修改標題的解析。
我之前在某個地方看過,改好了。今天為了另一個功能升級Dokuwiki,結果這個修改爛掉。找了半天,好不容易才找到修改破解法。這次千萬要紀錄下來。
其實應該很簡單的,只要改掉相關解譯語法的功能就好了。但是因為headlines再dokuwiki中還有其他的功能,如用來自動產生頁面標題、產生TOC、判斷分段編輯等等之類,所以不只有一個地方要改。加上各次改版,這些功能都不是寫在相同地方,所以改起來更囉唆。
本次修改主要以DokuwikiVersion 2006-11-06:
1.
這個是原本舊版就有的修改步驟,新版教學沒有提到,注意不要漏掉。在 config file中加入此項:
$conf['inverseHeadings'] = 1; // inverts number of "=" in heading syntax
2. 修改 inc/parser/handler.php。
找出:
$level = 7 - strspn($title,'=');
換成:
if ($conf['inverseHeadings']) { $level = strspn($title,'=') - 1; } else { $level = 7 - strspn($title,'='); }
3. 修改 inc/toolbar.php
這是修改編輯工具列,找到相關語法部分,換成以下:
array( 'type' => 'format', 'title' => $lang['qb_h1'], 'icon' => 'h1.png', 'key' => '1', 'open' => ($conf['inverseHeadings']) ? '== ' : '====== ', 'close' => ($conf['inverseHeadings']) ? ' ==\n' : ' ======\n', ), array( 'type' => 'format', 'title' => $lang['qb_h2'], 'icon' => 'h2.png', 'key' => '2', 'open' => ($conf['inverseHeadings']) ? '=== ' : '===== ', 'close' => ($conf['inverseHeadings']) ? ' ===\n' : ' =====\n', ), array( 'type' => 'format', 'title' => $lang['qb_h3'], 'icon' => 'h3.png', 'key' => '3', 'open' => ($conf['inverseHeadings']) ? '==== ' : '==== ', 'close' => ($conf['inverseHeadings']) ? ' ====\n' : ' ====\n', ), array( 'type' => 'format', 'title' => $lang['qb_h4'], 'icon' => 'h4.png', 'key' => '4', 'open' => ($conf['inverseHeadings']) ? '===== ' : '=== ', 'close' => ($conf['inverseHeadings']) ? ' =====\n' : ' ===\n', ), array( 'type' => 'format', 'title' => $lang['qb_h5'], 'icon' => 'h5.png', 'key' => '5', 'open' => ($conf['inverseHeadings']) ? '====== ' : '== ', 'close' => ($conf['inverseHeadings']) ? ' ======\n' : ' ==\n', ),
4. 修改 inc/parser/wiki.php
找到 function header( ),將原來的階層陣列換成以下:
global $conf; if ($conf['inverseHeadings']) { $levels = array( 1=>'==', 2=>'===', 3=>'====', 4=>'=====', 5=>'======', ); } else { $levels = array( 1=>'======', 2=>'=====', 3=>'====', 4=>'===', 5=>'==', ); }
5. 完成收工。因為dokuwiki有cache,生效可能要等一下。