/ 最近 .rdf 追記 編集 設定 本棚

脳log[20131209] tDiary用MathMLプラグイン(x-math.rb)の置換用正規表現 | インストールできる最新の Internet Explorer(Qちゃん) on Vistaの持病 | 脚注プラグイン(footnote.rb)とセルフリンクプラグイン(my-ex.rb)の組み合わせ問題



2013年12月09日 (月)

最終更新: 2014-09-04T19:38+0900

[tDiary][正規表現] tDiary用MathMLプラグイン(x-math.rb)の置換用正規表現

 問題のある現象と急場しのぎの*解決

SCRIPTタグの外側に書いた HTMLコメント(<--から-->までの、二連のハイフンに挟まれた文字)が CDATAセクションに置き換えられたり、STYLEタグを挿入する位置によって無関係の HTMLコメントがやはり CDATAセクションに置き換えられたりられなかったりする現象が発生していて、以下の replace_bodyメソッド内の2行をコメントアウトすることで解消した。正確にいうとこの2行の直前の行末のドットを削除する必要もある。

gsub(/(<style [^>]*?>.*?)<!--(.*?)-->(.*?<\/style>)/m){"#{$1}\n<![CDATA[\n#{$2}\n]]>\n#{$3}"}.
gsub(/(<script [^>]*?>.*?)<!--(.*?)-->(.*?<\/script>)/m){"#{$1}\n<![CDATA[\n#{$2}\n]]>\n#{$3}"}

これは以前にちらりと書いた(自分の好みを正当化する理由としてでっちあげた)指摘の実例ではないかと思う。

つづくパターン次第ではマッチを成功させるために .*? は何にだってマッチする。

避ける方法は例えばドットの直前に (?!</script>) とか (?!</style>) とか (?!-->) と書くなど(だけではなく否定先読みとドットをグループ化したものでドットを置き換えるようにしないといけないかも)。空白を閉じタグのどこに挿入できるかできないかは調べられなかった。

 @2014-09-04 具体的にはこう。(先読みとドットの前後を入れ替えると意味が変わることを覚えられずいつも引っ掛かる)
gsub(/(<style [^>]*?>(?:(?!<\/style>).)*?)<!--((?:(?!<\/style>).)*?)-->(.*?<\/style>)/m){"#{$1}\n<![CDATA[\n#{$2}\n]]>\n#{$3}"}.
gsub(/(<script [^>]*?>(?:(?!<\/script>).)*?)<!--((?:(?!<\/script>).)*?)-->(.*?<\/script>)/m){"#{$1}\n<![CDATA[\n#{$2}\n]]>\n#{$3}"}

ちょーめんどくせー。しかもこれでも閉じタグが <!-- --> でコメントアウトされている場合にその閉じタグを無視できない。思うに、開きタグと <!--の間、-->と閉じタグの間に空白だけを許可すれば単純になるのでは?

# 最終形。置換後に改行が増えてるのが(※元々の仕様)気に入らないけど……。
gsub(/(<(style|script)(?: [^>]*)?>\s*)<!--((?:(?!--|<\/\2>).)*)-->(\s*<\/\2>)/m){"#{$1}\n<![CDATA[\n#{$3}\n]]>\n#{$4}"}

 問題2: XHTMLInfo#unsupported_body (@2014-01-06)

def unsupported_body
	date = @cgi.params['date'][0]
	url = @conf.index + @plugin.anchor(date, false)
	force_url = @conf.index + self.anchor(date, true)

85行目の @plugin.anchor が引数1つのところに2つ渡したエラーになるので、86行目にならって self.anchorに書き換えた。

url = @conf.index + self.anchor(date, false)

 問題3: XHTMLInfo#supported_agent? (2014-01-06)

def supported_agent?
	is_gecko? || is_mathplayer?
end

Blink Operaなんかも XHTMLをサポートしてるらしい(少なくとも HTTPでそう宣言している)ので下のように書きかえた。

def supported_agent?
	@cgi.accept.to_s.index("application/xhtml+xml") || is_gecko? || is_mathplayer?
end
 @2014-01-08 XHTMLでなく MathML

MathML対応の方が問題になるのだった。

対応しているのは、Gecko を採用している Mozilla Firefox などのブラウザ[4]、Safari 5.1 以降。また、Presto を採用している、Opera 9.50[5]〜12.1 においても単体でほとんどの数式の表示が可能となったが、Opera 14 より WebKit そして Blink になり非対応。Google Chrome は対応していない。非対応ブラウザでも MathJax[6] で表示可能。Internet Explorer では、例えばプラグインの Design Science の MathPlayer をインストールすることで MathML を表示できるようになる。

やる気のないブラウザのことなんて知らない。

* 本来の意味の姑息を使うべき場面ですよ。

最終更新: 2014-01-02T17:32+0900

[Vista] インストールできる最新の Internet Explorer(Qちゃん) on Vistaの持病

スムーズスクロールが ONの場合に限って異常にスクロールが引っかかり、ほとんどまともな閲覧が不可能になる。スペック不足ではなく、それが証拠にスムーズスクロールを OFFにすると何の支障もないどころか軽快そのもの。

最近やっていたテキスト処理(20131101p01)で DOMをいじくり要素を作成・追加しすぎたのかと思っていたが、そういえばちょっと前はそんなことなかった。検索すると IEの持病であるらしい。これは 2011年の記事。

IE9でスクロールがカクカクする: たきざわテクニカル PC修理&サポート

直近の Windows Updateから下のをアンインストールしたら直った。

Windows Vista for x64-based Systems 用 Internet Explorer 9 の累積的なセキュリティ更新プログラム (KB2888505)

はぁー。IE11をインストールしたいなあ。

 @2013-12-14 直った。

12月分の累積的~(これにはアンインストールした11月分も含まれているのか11月分はリストから消えた)をインストールしても遅くならなかった。

 @2013-12-下旬 再発した。

Windows Updateでは Definition Updateしかインストールしてないんだけど。

* 全角文字の字間は拡大するが英字はそのままなので、一部は間延びして一部は詰まって見える。全体に散らした方が目立たないのに。@2013-11-19 Safariと同じ方法をより限定された対象に適用するだけで矯正できるのでやってしまった。対象を限定しなくても副作用はないけど処理負荷を考えて限定した。コピペコード率高し(だが構わない。分岐直後なので当然のこと。ツールファンクションは共有してもいいけど)。@2013-12-16 ■の連続も分割されないな。どういう Unicodeプロパティを参照してるんだろ。

最終更新: 2014-01-03T21:32+0900

[tDiary] 脚注プラグイン(footnote.rb)とセルフリンクプラグイン(my-ex.rb)の組み合わせ問題

 おことわり

多分に自作成分(#p03.05)が入っているので指摘が公式版に当てはまるかは不明。

 現象

サブタイトル内で脚注プラグインを呼び出している過去のセクションに言及すると、言及した方のセクションにその脚注が現れる。

 解析

日記本文内で [[YYYYMMDDpSS]] 形式(Wikiスタイルの場合)でリンクを作成すると、それは my プラグインの呼び出しに展開され、my-ex.rb内で再定義された拡張版 my メソッドは apply_plugin( section.subtitle_to_html, true ) によってリンク先のサブタイトルの取得を試みる。これは evalに相当する処理であり、脚注プラグインのようにセクションの入り口で初期化処理を行いその後のプラグインメソッド呼び出しを待ち構えるタイプのプラグインを撹乱しているのではないか。

公式版で現象が報告されていないのは、このサブタイトル取得機能は言及された日付の日記データが @diaries変数に予め入れられていることを前提としており、実質的に同月内の直近のエントリへのリンクでしか機能しないからではないか。この日記で顕在化しやすいのは取得できるサブタイトルに制限がないからだ(20090114p01, 20110220)。

 どうするか

*_enter_procと *_leave_procの実行順序に期待できない Hikiでどうやっているか知りたい。


プラグインファイルのトップレベルでベタっと初期化していた。参考にならない。

 自作成分

  • 同じ内容の脚注をまとめられる。

    「* * * 脚注文章」とか「* *2 *3 脚注文章」という表示になる(アンカーはユニークでないといけないので並べる必要がある)。二番目三番目はともに fn(1) または fn(1, "*") と書いている。三番目は fn(2) と書いても良かったかも(その場合は自動的に決まる脚注マークに少し影響する)。

    脚注マーク(title属性には脚注文章が入る)の遅延文字列化はない*ので、まだ書いていない脚注を fn(4) などと参照することはできない。

  • 脚注マークがかぶっていないときは連番を振らない。

    これで冒頭の数文字を脚注マークに転用しやすくなる。二番目が登場したときに番号1をさかのぼって振れないのが少し不満。

  • 第一引数と第二引数がともに文字列のとき、短い方を脚注マークと判断する。

    これで冒頭の数文字を脚注マークに転用しやすくなるし、頭を悩ませることなくどう書いても正解になる。普通ならね。

無駄に手が込んでるのだけど、脚注よりはかっこ書きが、かっこ書きよりは整理して流れのあるひとつの文を構成する方が良い。タッチ操作で脚注マークの title属性を読む方法もわからないしね。

* できたらおもしろいのだけど、ERBが eoutvarを文字列で初期化してしまうのと、<%=%>で埋め込んだスクリプトをまめに .to_sしてくれるのでできない。ここは <<演算子のオーバーロードだけを(ERBが eoutvarに)要求すべき場面ではないか。

 脚注の脚注(のつもり。本当にやろうとすると Stringを HTMLTextと PlainTextに分けてやらないとエスケープ漏れの原因になる)。プラグインに渡す文字列内で <%=%>って素直に書いたらあかんのね(プレビューでエラーが出る)。WikiSection#to_htmlが仕事してないから内部仕様が日記著者に露呈してるのだ。

See also...

listed by...