Как заставить реструктурированный текст добавить класс к каждому тегу html ‹p›?

Я использую пакет разметки Django для преобразования restructuredText в html. Есть ли способ настроить средство записи HTML для добавления атрибута класса к каждому тегу <p>?

Я мог бы использовать директиву класса для каждого абзаца, но я хотелось бы автоматизировать этот процесс.

Например, я хочу этот реструктурированный текст:

hello
=====

A paragraph of text.

Для преобразования в этот html.

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

Причина, по которой я хочу вставить классы, заключается в том, что я использую библиотеку расстановки переносов, которая работает путем добавления дефисы ко всем тегам с классом «дефис». Я мог бы добавить класс переноса в тег контейнера, но тогда все дочерние элементы унаследовали бы класс переноса. Я мог бы использовать javascript для динамического добавления класса, но я подумал, что может быть простой способ сделать это с помощью restructuredText.

Спасибо за помощь,

Джо


person Joe    schedule 03.12.2009    source источник


Ответы (2)


Вы не говорите, почему вы хотите добавить класс к каждому абзацу, но может быть проще использовать другой подход. Например, если вы пытаетесь стилизовать абзацы, вы можете использовать другую технику 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();
person Ned Batchelder    schedule 03.12.2009
comment
+1 Использование CSS для стиля (не полагаясь на вставку классов) - самый разумный подход. - person hughdbrown; 03.12.2009
comment
Я добавил некоторые уточнения в свой вопрос. Мне нужен класс для библиотеки javascript. - person Joe; 03.12.2009

Создайте подкласс встроенного модуля записи 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())
person Spaceghost    schedule 10.09.2010