tdiary/tdiary-core — Issue #137: GFMスタイルでtDiaryプラグイン記法が使えない
Author: machu
Created: 2012-02-18 17:14:11+00:00
State: open

### 事象

GFMスタイルにてシングルクォートを含むプラグイン呼び出しを記述する。

```
{{amazon '4906470068'}}
```

するとerbのパースでSyntax Errorになる。

```
SyntaxError

(TDiary::Plugin#eval_src):67: syntax error, unexpected ';'
; _erbout.concat((section_leav...
^
(TDiary::Plugin#eval_src):191: syntax error, unexpected $end, expecting ')'
; _erbout.force_encoding(__ENCODING__)
^
```

### 原因

Redcarpetによる変換時にシングルクォートが数字文字参照に変換されているため。

```
変換前 {{amazon '4906470068'}}
変換後 {{amazon '4906470068'}}
```

### 対処

erbへ渡す前に数字文字参照をデコードする。

```ruby
diff --git a/misc/style/gfm/gfm_style.rb b/misc/style/gfm/gfm_style.rb
index b6d5d83..112537d 100644
--- a/misc/style/gfm/gfm_style.rb
+++ b/misc/style/gfm/gfm_style.rb
@@ -109,7 +109,7 @@ module TDiary
r.gsub!(/"
+ "<%=#{CGI.unescapeHTML($1)}%>"
}
r
end
```

### 懸念事項

プラグインの呼び出し方法によっては、意図しないデコードが走ってしまうかもしれません。