Warning: リポジトリと同期できません (サポートされていないバージョンコントロールシステム "svn です。 Python のライブラリに "svn" が正しくインストールされているか確認してください。)

バージョン 2 から バージョン 3 における更新: TracDoc/MarkupClass

差分発生行の前後
無視リスト:
更新日時:
2006/04/23 11:51:00 (18 年 前)
更新者:
weekbuild (IP アドレス: 59.147.202.119)
コメント:

--

凡例:

変更なし
追加
削除
変更
  • TracDoc/MarkupClass

    v2 v3  
    11{{{ 
    22#!trachtml 
    3 <h1>TracのMarkupClassについて</h1> 
    4 <br /> <br /> 今回はTracの内部の話です。プラグインや、マクロを作る人むけ。<br /> <br />Trac 0.9.3で、クロスサイトスクリプティングを防ぐために、Markupというクラスが作られました。<br />   (詳しく知りたい人は、Tracサイトのチケット!#2473、チェンジセット![2724]あたりを参照。)<br /> 0.9.3以降のプラグインやマクロを開発する際には、ほとんどの場合(嫌でも)Markupクラスを使う必要があります。<br /> これにより、0.9.2以前用に作られたPluginやマクロは、ほとんど動かなくなっちゃっいました。<br /> <blockquote>TinyMCEPluginも公開直前に0.9.4で試したら、<br />  やたらと文字化けするようになってすげ-困りました。(・_・?) <br />  タグを生成しないならいいんですが、メニュー表示の際に既にタグを使わざるを得ないし。。<br /> </blockquote> <br /> Markupクラスは、「このテキストに含まれるHTMLタグは、エスケープしないでね」という宣言をするための<br /> strクラスのラッパーです。Markupクラスを通してない(かつHTMLタグを含む)文字列をHDFに入れると、<br />  全て勝手にエスケープされてしまいます。<br /> <pre>eq.hdf[xxx] = '&lt;b&gt;強調&lt;/b&gt;'<br /></pre>    <blockquote>   <p>&times;: &lt;b&gt;強調&lt;/b&gt;<br />   </p> </blockquote> <p>文字として&quot;&lt;b&gt;あ&lt;/b&gt;&quot;と表示したいのではなく、&quot;<strong>あ</strong>&quot;とタグとして表示したい場合<br />  は、Markupクラスを使う必要があります。<br />      </p>      <pre>req.hdf[xxx] = Markup'&lt;b&gt;強調&lt;/b&gt;'<br /></pre>     <blockquote>   <p>○: <strong>強調</strong></p> </blockquote>     <p>■Markupの使い方と実験<br /> タグをHDFに入れるには、<br /> </p>  <pre>req.hdf[xxx] = Markup('&lt;b&gt;強調&lt;/b&gt;')<br /></pre>   <blockquote>○:<strong>強調</strong><br /> </blockquote> <p>Markupされた文字同士をつなげるには、<br /> </p>  <pre>req.hdf[xxx] = Markup('&lt;b&gt;強調&lt;/b&gt;')+Markup('&lt;b&gt;強調&lt;/b&gt;')<br /></pre>  <blockquote>   <p>○:<strong>強調強調</strong><br />   </p> </blockquote> <p> ただし、Markupしてない文字列とつなげると、エスケープされちゃいます。<br /> </p>  <pre>req.hdf[xxx] = '&lt;b&gt;強調&lt;/b&gt;'+Markup('&lt;b&gt;強調&lt;/b&gt;')+Markup('&lt;b&gt;強調&lt;/b&gt;')<br /></pre>   <blockquote>   <p>&times;:&lt;b&gt;強調&lt;/b&gt;&lt;b&gt;強調&lt;/b&gt;&lt;b&gt;強調&lt;/b&gt;<br />   </p> </blockquote> <p> wiki_to_htmlなど、Markupを済ませた値を返すメソッドもあり、注意が必要です。<br />      </p> <pre>req.hdf[xxx] = wiki_to_oneliner(&quot;'''強調'''&quot;, self.env, db,<br />                                                shorten=True)+Markup(Markup('&lt;b&gt;強調&lt;/b&gt;'))<br /></pre>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ○:<strong>強調強調</strong> <p> まあ、2重にMarkupしてもよいので、とりあえずMarkupで囲っておけば大丈夫かも。<br /> </p>     <pre>req.hdf[xxx] = Markup('&lt;b&gt;強調&lt;/b&gt;'+Markup('&lt;b&gt;強調&lt;/b&gt;'))<br /></pre>  <blockquote>       ○:<strong>強調強調</strong></blockquote> <p>&nbsp;</p> 
     3<h1 id="TracのMarkupClassについて">TracのMarkupClassについて</h1>[[VisitCounter(TracDoc/MarkupClass)]]<br /> <br /> 今回はTracの内部の話です。プラグインや、マクロを作る人むけ。<br /> <br />Trac 0.9.3で、クロスサイトスクリプティングを防ぐために、Markupというクラスが作られました。<br />   (詳しく知りたい人は、Tracサイトのチケット!#2473、チェンジセット![2724]あたりを参照。)<br /> 0.9.3以降のプラグインやマクロを開発する際には、ほとんどの場合(嫌でも)Markupクラスを使う必要があります。<br /> これにより、0.9.2以前用に作られたPluginやマクロは、ほとんど動かなくなっちゃっいました。<br /> <blockquote>TinyMCEPluginも公開直前に0.9.4で試したら、<br />  やたらと文字化けするようになってすげ-困りました。(・_・?) <br />  タグを生成しないならいいんですが、メニュー表示の際に既にタグを使わざるを得ないし。。<br /> </blockquote> <br /> Markupクラスは、「このテキストに含まれるHTMLタグは、エスケープしないでね」という宣言をするための<br /> strクラスのラッパーです。Markupクラスを通してない(かつHTMLタグを含む)文字列をHDFに入れると、<br />  全て勝手にエスケープされてしまいます。<br /> <pre>eq.hdf[xxx] = '&lt;b&gt;強調&lt;/b&gt;'<br /></pre>    <blockquote>   <p>&times;: &lt;b&gt;強調&lt;/b&gt;<br />   </p> </blockquote> <p>文字として&quot;&lt;b&gt;あ&lt;/b&gt;&quot;と表示したいのではなく、&quot;<strong>あ</strong>&quot;とタグとして表示したい場合<br />  は、Markupクラスを使う必要があります。<br />      </p>      <pre>req.hdf[xxx] = Markup'&lt;b&gt;強調&lt;/b&gt;'<br /></pre>     <blockquote>   <p>○: <strong>強調</strong></p> </blockquote>     <p>■Markupの使い方と実験<br /> タグをHDFに入れるには、<br /> </p>  <pre>req.hdf[xxx] = Markup('&lt;b&gt;強調&lt;/b&gt;')<br /></pre>   <blockquote>○:<strong>強調</strong><br /> </blockquote> <p>Markupされた文字同士をつなげるには、<br /> </p>  <pre>req.hdf[xxx] = Markup('&lt;b&gt;強調&lt;/b&gt;')+Markup('&lt;b&gt;強調&lt;/b&gt;')<br /></pre>  <blockquote>   <p>○:<strong>強調強調</strong><br />   </p> </blockquote> <p> ただし、Markupしてない文字列とつなげると、エスケープされちゃいます。<br /> </p>  <pre>req.hdf[xxx] = '&lt;b&gt;強調&lt;/b&gt;'+Markup('&lt;b&gt;強調&lt;/b&gt;')+Markup('&lt;b&gt;強調&lt;/b&gt;')<br /></pre>   <blockquote>   <p>&times;:&lt;b&gt;強調&lt;/b&gt;&lt;b&gt;強調&lt;/b&gt;&lt;b&gt;強調&lt;/b&gt;<br />   </p> </blockquote> <p> wiki_to_htmlなど、Markupを済ませた値を返すメソッドもあり、注意が必要です。<br />      </p> <pre>req.hdf[xxx] = wiki_to_oneliner(&quot;'''強調'''&quot;, self.env, db,<br />                                                shorten=True)+Markup(Markup('&lt;b&gt;強調&lt;/b&gt;'))<br /></pre>        ○:<strong>強調強調</strong> <p> まあ、2重にMarkupしてもよいので、とりあえずMarkupで囲っておけば大丈夫かも。<br /> </p>     <pre>req.hdf[xxx] = Markup('&lt;b&gt;強調&lt;/b&gt;'+Markup('&lt;b&gt;強調&lt;/b&gt;'))<br /></pre>  <blockquote>       ○:<strong>強調強調</strong></blockquote> <p>&nbsp;</p> 
    54}}}