Comment obtenir ReStructuredText pour ajouter une classe à chaque html balise
?
-
11-09-2019 - |
Question
J'utilise le package de balisage de Django pour transformer ReStructuredText en html. Y at-il un moyen de personnaliser l'écrivain HTML pour ajouter un attribut class pour chaque balise <p>
?
Je pourrais utiliser la pour chaque paragraphe, mais je voudrais automatiser ce processus.
Par exemple, je veux que ce texte restructuré:
hello
=====
A paragraph of text.
Pour convertir ce html.
<h1>hello</h1>
<p class="specialClass">A paragraph of text.</p>
La raison pour laquelle je veux insérer des classes est parce que je suis en utilisant la bibliothèque qui Hyphenator fonctionne en ajoutant des traits d'union à tous les tags avec une classe « césure ». Je pourrais ajouter la classe Césure à la balise conteneur, mais tous les enfants hériterait la classe Césure. Je pourrais utiliser javascript pour ajouter dynamiquement la classe, mais je pensais qu'il pourrait y avoir un moyen simple de le faire avec ReStructuredText.
Merci pour l'aide,
Joe
La solution
Vous ne dites pas pourquoi vous voulez ajouter une classe à chaque paragraphe, mais il pourrait être plus facile de prendre une approche différente. Par exemple, si vous essayez de style les paragraphes, vous pouvez utiliser une technique CSS différente pour sélectionner tous les paragraphes de la sortie:
CSS:
div.resttext p {
/* all the styling you want... */
}
HTML:
<div class='resttext'>
<p>Blah</p>
<p>Bloo</p>
</div>
Mise à jour: puisque vous essayez d'utiliser hyphenator.js, je suggère d'utiliser son réglage de selectorfunction
pour sélectionner différemment les éléments:
Hyphenator.config({
selectorfunction: function () {
/* Use jQuery to find all the REST p tags. */
return $('div.resttext p');
}
});
Hyphenator.run();
Autres conseils
intégré écrivain html4css1
, ce comme référence ..
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')
Utilisez ensuite comme ceci:
from docutils.core import publish_string
print publish_string("*This* is the input text", writer=MyHTMLWriter())