Como chegar ReStructuredText para adicionar uma classe para tag cada html
?
-
11-09-2019 - |
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
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())