DokuWikiのedittable plugin(テーブル編集プラグイン)は表を編集すると各セルの最も長い文字列に合わせホワイトスペースを自動挿入して通常の編集画面での表を見やすくしてくれるのですが、全角文字が含まれている場合はスペースの数が合わず逆に表が見づらくなる問題があるので、改造して対策します。
注意:改造により不具合が発生する可能性があります自己責任でご利用下さい。またOS・サーバー・PHP・DokuWiki本体・プラグインの差異によっては動作しない可能性もあります。
未改造状態では表を編集すると下記のようにホワイトスペースが挿入されます(ホワイトスペースは半角ピリオドで表現しています)
半角文字だけなら各セルの幅や行の全長が綺麗に整形されるのですが、
全角文字が混じると崩れてしまう不具合があります。
この問題は全角文字を2文字分としてではなく1文字として計算しているのが原因なので、正しくカウントできるよう改造すると次のよう全角文字が混じっても綺麗に整形されます。
./lib/plugins/edittable/action/editor.php
を開き137行目を書き換えます。(プラグインのバージョンによって行番号は変更する可能性があります)
//137行目 改造前 $len = utf8_strlen($data[$row][$col]); //↓ //137行目 改造後 $len = mb_strwidth($data[$row][$col]);
これで全角文字があっても綺麗に整形されます。
次の改造は自動整形を無効化してホワイトスペースを完全に使わないようにする改造です(右寄せ時や中央寄せ時はDokuWiki構文の制限からスペースが前または前後に最小限挿入されます)。
改造カ所は2つあります。1つ目は「長さを一定にするホワイトスペースを使わない」変更、2つめはCenter・Left・Rightなど「表示位置によるホワイトスペースを最小限にする」変更をします
・長さを一定にするホワイトスペースを使わない
./lib/plugins/edittable/action/editor.php
を開き186行目を書き換えます。(プラグインのバージョンによって行番号は変更する可能性があります)
//186行目 元の状態 $addpad = $target - $length; //↓ //186行目 改造後の状態 $addpad = 0;
表示位置によるホワイトスペースを最小限にする
./lib/plugins/edittable/action/editor.php
を開き157行目~167行目を書き換えます。(プラグインのバージョンによって行番号は変更する可能性があります)
//157行目~ 改造前の状態 // minimum padding according to alignment if($meta[$row][$col]['align'] == 'center') { $lpad = 2; $rpad = 2; } elseif($meta[$row][$col]['align'] == 'right') { $lpad = 2; $rpad = 1; } else { $lpad = 1; $rpad = 2; } //↓ //157行目~ 改造後の状態 // minimum padding according to alignment if($meta[$row][$col]['align'] == 'center') { $lpad = 2; $rpad = 2; } elseif($meta[$row][$col]['align'] == 'right') { $lpad = 2; $rpad = 0; } else { $lpad = 0; $rpad = 0; }
これで左寄せ時は保存しても前後にホワイトスペースが自動挿入されません。(右寄せ時はスペースが左側に2個、中央寄せ次時にはスペースが左右に2個ずつ入ります)