ページの作成や編集にはユーザ登録が必要です。
ブロック書式のエスケープ処理は機能しているのか?(fswiki3.6.5)
- 投稿者: KG
- カテゴリ: 本体
- 優先度: 重要
- 状態: 完了
- 日時: 2018年9月25日 12時45分00秒
内容
当方のHPで公開している下記ページ
tex2jax テンプレートのテスト
がFSWiki3.6.5で正常に動作しなくなったようなので、原因を調査していました。(※現在、バージョンアップ中の為、当方公開用HPではまだ旧バージョンです)
どのような現象かというと、ブロック書式内に記述したMathJax書式がブロック出力内から外れてしまうという現象です。つまり、ブロック書式のプラグインにパラメータとして渡らなくなりました。
原因を調査したところ下記の部分が該当することがわかり、削除すると正常に動作します。
- FSWiki3.6.5 Wiki/Parser.pm#84〜
# ブロック書式のエスケープ if($word2 eq "\\\\" || $word1 eq "\\"){ my @obj = $self->parse_line(substr($line, 1)); $self->l_text(\@obj); next; }
で、上記処理を見てみましたが、先頭が \ で始まる場合のエスケープ処理を実装しようとしているように思えますが、if文内の処理で parse_lineしている為、parse_line内でプラグイン評価されてしまいます。
結果として「〜プラグインは存在しません」というメッセージが表示されてしまいます。
当時のコードにて実行しましたが、上記処理が実装された当初からそのような動作をしていたと思うのですが、実装の意図がよくわかっていません。
単純にif文の個所を下記のように修正すれば、当方のプラグイン動作には影響しなくなりますが・・・
if(!$self->{block} && ($word2 eq "\\\\" || $word1 eq "\\")){
本来実装しようとしているエスケープ処理ではありませんよね?
正しい実装としては、parse_line内で\で始まるプラグイン記述に対するエスケープ処理が必要だと思うのですが・・・
中途半端な状態で実装されたのではないかと考えています。
現状、\で始まる文章の記述を使用している方はそうそういないでしょうから問題にはなっていないかもしれませんが、この「ブロック書式のエスケープ」処理は一旦削除してもよいのではないかとも考えています。
- コミットしました。 - KG (2018年10月18日 13時50分23秒)
- 注意点として・・・誤解の無いように言っておきますが、ここで言っている「ブロック書式の・・・」はプラグイン記述の事ではありません。現在はプラグイン書式をそのまま表示させたい場合は raw, pre などのプラグインを使用するしか方法がありません。また、カテゴリプラグインを raw, pre でそのままコード表示すると、カテゴリを指定したとみなされますのでご注意ください(原因は判明しておりますが、解析速度を重視すると修正するかどうか迷うところです)。 - KG (2018年10月18日 16時39分55秒)
- うーむ・・・やはりここの処理自体機能していないので削除する方が良いのかもしれない・・・単なる「プラグイン以外のパラグラフ書式のエスケープ」でしかない気がするのだが・・・ - KG (2018年10月22日 13時09分41秒)
最終更新時間:2018年10月22日 13時09分41秒