6

Django のマークアップ パッケージを使用して、restructuredText を html に変換しています。<p>各タグにクラス属性を追加するように HTML ライターをカスタマイズする方法はありますか?

段落ごとにクラス ディレクティブを使用することもできますが、このプロセスを自動化したいと考えています。

たとえば、次の再構成されたテキストが必要です。

hello
=====

A paragraph of text.

このhtmlに変換します。

<h1>hello</h1>
<p class="specialClass">A paragraph of text.</p>

クラスを挿入したい理由は、「ハイフネーション」クラスを持つすべてのタグにハイフンを追加することで機能するハイフネータ ライブラリを使用しているためです。ハイフネート クラスをコンテナ タグに追加することもできますが、その場合、すべての子がハイフネート クラスを継承してしまいます。javascript を使用して動的にクラスを追加することもできましたが、restructuredText を使用して簡単に追加できる方法があるのではないかと考えました。

助けてくれてありがとう、

ジョー

4

2 に答える 2

5

これを参考にして、組み込みのhtml4css1ライターをサブクラス化します。

from docutils.writers import html4css1

class MyHTMLWriter(html4css1.Writer):
  """
  This docutils writer will use the MyHTMLTranslator class below.
  """
  def __init__(self):
      html4css1.Writer.__init__(self)
      self.translator_class = MyHTMLTranslator

class MyHTMLTranslator(html4css1.HTMLTranslator):
  def visit_paragraph(self, node):
      self.section_level += 1
      self.body.append(self.starttag(node, 'p', CLASS='specialClass'))
  def depart_paragraph(self, node):
      self.section_level -= 1
      self.body.append('</p>\n')

次に、次のように使用します。

from docutils.core import publish_string
print publish_string("*This* is the input text", writer=MyHTMLWriter())
于 2010-09-10T03:38:09.867 に答える
4

すべての段落にクラスを追加する理由はわかりませんが、別のアプローチを取る方が簡単かもしれません。たとえば、段落のスタイルを設定しようとしている場合、別の CSS 手法を使用して、出力内のすべての段落を選択できます。

CSS:

div.resttext p {
    /* all the styling you want... */
}

HTML:

<div class='resttext'>
<p>Blah</p>
<p>Bloo</p>
</div>

更新: hyphenator.js を使用しようとしているので、そのselectorfunction設定を使用して要素を別の方法で選択することをお勧めします。

Hyphenator.config({
    selectorfunction: function () {
        /* Use jQuery to find all the REST p tags. */
        return $('div.resttext p');
        }
    });
Hyphenator.run();
于 2009-12-03T03:36:35.950 に答える