Domanda

Sto usando il pacchetto di markup di Django per trasformare reStructuredText in html. C'è un modo per personalizzare lo scrittore HTML per aggiungere un attributo di classe per ogni tag <p>?

ho potuto utilizzare il per ogni paragrafo, ma mi piacerebbe per automatizzare questo processo.

Per esempio, io voglio questo testo ristrutturato:

hello
=====

A paragraph of text.

Per essere convertito in questo formato HTML.

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

Il motivo che voglio inserire classi è perché sto utilizzando il hyphenator biblioteca che lavora con l'aggiunta di trattini a tutti i tag con una classe "sillabare". Potrei aggiungere la classe sillabare al tag contenitore, ma poi tutti i bambini avrebbero ereditare la classe sillabare. Potrei usare javascript per aggiungere dinamicamente la classe, ma ho pensato che ci potrebbe essere un modo semplice per farlo con reStructuredText.

Grazie per l'aiuto,

Joe

È stato utile?

Soluzione

Non si dice perché si vuole aggiungere una classe ad ogni punto, ma potrebbe essere più facile adottare un approccio diverso. Ad esempio, se si sta cercando per lo stile dei paragrafi, è possibile utilizzare una tecnica diversa CSS per selezionare tutti i paragrafi in uscita:

CSS:

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

HTML:

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

Aggiornamento: dal momento che si sta tentando di utilizzare hyphenator.js, vi suggerirei di usare la sua impostazione selectorfunction per selezionare gli elementi in modo diverso:

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

Altri suggerimenti

sottoclasse il built-in scrittore html4css1, utilizzando questo come riferimento ..

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

Quindi utilizzare in questo modo:

from docutils.core import publish_string
print publish_string("*This* is the input text", writer=MyHTMLWriter())
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top