Pergunta

Eu estou usando o pacote de marcação do Django para transformar ReStructuredText em html. Existe uma maneira de personalizar o escritor HTML para adicionar um atributo de classe para cada tag <p>?

eu poderia usar o classe directiva para cada parágrafo, mas eu gostaria de automatizar esse processo.

Por exemplo, eu quero este texto reestruturado:

hello
=====

A paragraph of text.

Para ser convertidos para este html.

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

A razão eu quero inserir classes é porque eu estou usando o hifenizador biblioteca que funciona através da adição de hífens para todas as etiquetas com uma classe "hyphenate". Eu poderia adicionar a classe hyphenate ao tag recipiente, mas, em seguida, todos os filhos herdariam a classe hyphenate. Eu poderia usar javascript para dinamicamente adicionar a classe, mas eu pensei que poderia haver uma maneira simples de fazê-lo com ReStructuredText.

Obrigado pela ajuda,

Joe

Foi útil?

Solução

Você não diz por que você deseja adicionar uma classe para cada parágrafo, mas pode ser mais fácil de ter uma abordagem diferente. Por exemplo, se você está tentando estilo de parágrafos, você pode usar uma técnica CSS diferente para selecionar todos os parágrafos na saída:

CSS:

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

HTML:

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

Atualização: uma vez que você está tentando hyphenator.js uso, gostaria de sugerir usando sua configuração selectorfunction para selecionar os elementos de forma diferente:

Hyphenator.config({
    selectorfunction: function () {
        /* Use jQuery to find all the REST p tags. */
        return $('div.resttext p');
        }
    });
Hyphenator.run();

Outras dicas

subclasse o built-in escritor html4css1, usando este como uma referência ..

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')

Em seguida, usá-lo como este:

from docutils.core import publish_string
print publish_string("*This* is the input text", writer=MyHTMLWriter())
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top