この文書の現在のバージョンと選択したバージョンの差分を表示します。
両方とも前のリビジョン 前のリビジョン 次のリビジョン | 前のリビジョン | ||
dokuwiki:ediptable_space [2019/01/04 12:18] 管理者 [おまけ] |
— (現在) | ||
---|---|---|---|
ライン 1: | ライン 1: | ||
- | ====== 📝DokuWiki edittable pluginのホワイトスペース対策 ====== | ||
- | |||
- | DokuWikiの[[edittable-plugin|edittable plugin]](テーブル編集プラグイン)で表を編集すると各列の最も長い文字列に合わせて前後にホワイトスペースが挿入されます。英語など半角文字しか使わない場合はこのスペースにより通常のテキスト編集モードでも表が綺麗に整列して見えるのですが、日本語など全角文字が含まれる場合は位置ずれが発生しテキスト編集モードでは見ずらくなってしまうので、ホワイトスペースの自動挿入機能を改造して見やすくします。 | ||
- | |||
- | 注意:改造により不具合が発生する可能性があります自己責任でご利用下さい。またPHP・DokuWiki本体・プラグインのバージョンによっては動作しなくなる可能性もあります。 | ||
- | ---- | ||
- | <html> | ||
- | <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script> | ||
- | <!-- respon_0 --> | ||
- | <ins class="adsbygoogle" | ||
- | style="display:block" | ||
- | data-ad-client="ca-pub-9251612436023685" | ||
- | data-ad-slot="1409739163" | ||
- | data-ad-format="auto"></ins> | ||
- | <script> | ||
- | (adsbygoogle = window.adsbygoogle || []).push({}); | ||
- | </script> | ||
- | </html> | ||
- | |||
- | ===== はじめに ===== | ||
- | |||
- | 未改造状態では表を編集すると下記のようにホワイトスペースが挿入されます(ホワイトスペースは半角ピリオドで表現しています) | ||
- | |||
- | 半角文字だけなら縦方向に綺麗に整形されますが、 | ||
- | |||
- | |{{:media:201901:20190104_112515_ediptable.jpg|}}| | ||
- | |||
- | 全角文字が混じると縦方向が崩れてしまう。 | ||
- | |||
- | |{{:media:201901:20190104_112516_ediptable.jpg|}}| | ||
- | |||
- | |||
- | この問題は全角文字を2文字分としてではなく1文字として計算しているのが原因なので、改造して正しくカウントできるようにすると次のよう全角でも綺麗に整形されます。 | ||
- | |||
- | |{{:media:201901:20190104_112517_ediptable.jpg|}}| | ||
- | |||
- | |||
- | ===== 改造方法 ===== | ||
- | |||
- | ''./lib/plugins/edittable/action/editor.php'' を開き137行目を書き換えます。(プラグインのバージョンによって行番号は変更する可能性があります) | ||
- | |||
- | <code php> | ||
- | //137行目 改造前 | ||
- | $len = utf8_strlen($data[$row][$col]); | ||
- | |||
- | //↓ | ||
- | |||
- | //137行目 改造後 | ||
- | $len=mb_strwidth($data[$row][$col]); | ||
- | </code> | ||
- | |||
- | これで全角文字があっても綺麗に整形されます。 | ||
- | |||
- | |||
- | ==== おまけ ==== | ||
- | |||
- | この改造はホワイトスペースを使わない方法です(左寄せ時のみ、右寄せ時や中央寄せ時はDokuWiki構文の制限からスペースが前または前後に挿入されます) | ||
- | |||
- | 改造カ所は2つあります。1つ目は「長さを一定にするホワイトスペースを使わない」変更、2つめはCenter・Left・Rightなど「表示位置によるホワイトスペースを最小限にする」変更をします | ||
- | |||
- | |||
- | **・長さを一定にするホワイトスペースを使わない ** | ||
- | |||
- | ''./lib/plugins/edittable/action/editor.php'' を開き186行目を書き換えます。(プラグインのバージョンによって行番号は変更する可能性があります) | ||
- | |||
- | <code php> | ||
- | //186行目 元の状態 | ||
- | $addpad = $target - $length; | ||
- | |||
- | //↓ | ||
- | |||
- | //186行目 改造後の状態 | ||
- | $addpad = 0; | ||
- | </code> | ||
- | |||
- | ** 表示位置によるホワイトスペースを最小限にする ** | ||
- | |||
- | ''./lib/plugins/edittable/action/editor.php'' を開き157行目~167行目を書き換えます。(プラグインのバージョンによって行番号は変更する可能性があります) | ||
- | |||
- | <code php> | ||
- | //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; | ||
- | } | ||
- | </code> | ||
- | |||
- | これで左寄せ時は保存しても前後にホワイトスペースが自動挿入されません。(右寄せ時は左側に2個スペース、中央寄せ次時には左右に2個ずつスペースが入ります) | ||
- | |||
- | |||