Dokuwiki 標題語法修改

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,生效可能要等一下。