Ticket #13394

正規表現でソースをVML用に書き換える部分の修正
Open Date: 2008-08-27 05:41 Last Update: 2008-10-14 19:57

Reporter:
Owner:
Status:
Closed
Component:
(None)
MileStone:
(None)
Priority:
5 - Medium
Severity:
5 - Medium
Resolution:
Fixed
File:
1

Details

・改行を入れて分かりやすく
・誤動作する可能性がありそうな正規表現を、より厳密なも
のに
・svg 要素と xmlns 属性は複数登場する可能性があるので、
g フラグを追加
・生成される VML がダブルクォーテーションを用いるように
変更

以前の処理だと、例えば <textPath> に対しても <text →
<div という置換が行われてしまうので、気付いた範囲でそう
いった箇所を直しています。

<script> タグの処理をどうしたいのかがよく分からなかった
ので、パッチでは <script>~</script> の範囲を除去するよ
うにしていますが、<script> の部分は除去せずに残しておい
た方が良さそうに思います。

正直、これでいいのか迷う部分も多いのですが、手始めにこ
んな感じに直していただけるとありがたいです。

Ticket History (3/11 Histories)

2008-08-27 05:41 Updated by: revulo
  • File 3321: sie_svgtovml_regexp.patch is attached
2008-08-27 20:00 Updated by: dhrname
  • Resolution Update from None to Accepted
  • Priority Update from 5 - Medium to 8
Comment
Logged In: YES
user_id=32883

ありがとうございます。かなり読みやすくなりそうなので、当てて
みます。

> <script> の部分は除去せずに残しておいた方が良さそうに思い
ます。
<script>タグの除去に関しては、スクリプトを実行させたくないの
で、やっています。スクリプトのエラーが起きたときに、チェック
事項を減らすことができるからです。

しかし、頻繁にエラーが発生した昔とは違って、今のSIEは比較
的、安定していますので、0.30以降で、<script>タグ除去をやめる
つもりです。
2008-08-27 20:00 Updated by: dhrname
  • Owner Update from (None) to dhrname
2008-09-01 00:06 Updated by: revulo
Comment
Logged In: YES
user_id=33975

パッチに1つバグがありました。svg 要素に属性を何も指定せず
<svg> のようになっている SVG ファイルがあったので、

.replace(/<svg(?=s|>)/g, '<v:group
style="position:relative;top:0;left:0;width:100%;height:100%
"')

としないといけませんでした。
2008-09-02 19:43 Updated by: dhrname
Comment
Logged In: YES
user_id=32883

パッチのバグを、リビジョン464で修正しました。
2008-09-04 04:59 Updated by: revulo
Comment
Logged In: YES
user_id=33975

すみません。前回の書き込みも¥が抜けてしまっていま
した。正しくはこうです。

.replace(/<svg(?=¥s|>)/g, ... (¥は本当は半角)

dhrname さんの方で直してくれたようですが、?= でな
く ?: を使うと、置換後の文字列の最後に $1 をつける
必要が出てきます。それよりも、その下の g 要素を
replace している行をコピペしてきて g → svg に書き
換える方が確実で良いです。

ここに半角の¥を書きこむと消されてしまうみたいです
ね。これからは気をつけるようにします。

2008-09-10 00:37 Updated by: revulo
Comment
Logged In: YES
user_id=33975

現在の Rev.471 のコードには、属性無しの <svg> とい
うタグを変換した時に > が消えてしまうバグがありま
す。
以下のように ?: を ?= に変更して、できたら行末の空
白も削除して下さい。つまり <g> タグの処理と同じに
して欲しいです。

.replace(/<svg(?=¥s|>)/g, '<v:group
style="position:relative;top:0;left:0;width:100%;h
eight:100%"')

例によって、¥は本当は半角です。
2008-09-10 20:42 Updated by: dhrname
Comment
Logged In: YES
user_id=32883

revuloさんへ。リビジョン472で修正しました。
2008-09-15 18:35 Updated by: dhrname
  • Resolution Update from Accepted to Fixed
2008-09-27 20:29 Updated by: dhrname
  • Priority Update from 8 to 5 - Medium
2008-10-14 19:57 Updated by: dhrname
  • Ticket Close date is changed to 2008-10-14 19:57
  • Status Update from Open to Closed

Attachment File List

Edit

You are not logged in. I you are not logged in, your comment will be treated as an anonymous post. » Login