如何让restructuredText为每个HTML <p>标签添加类?
我正在使用Django的markup包,把restructuredText转换成html。请问有没有办法自定义HTML写入方式,让每个<p>
标签都加上一个类属性呢?
我可以对每个段落使用类指令,但是我想让这个过程自动化。
比如说,我希望这个restructured文本:
hello
=====
A paragraph of text.
能转换成这个html。
<h1>hello</h1>
<p class="specialClass">A paragraph of text.</p>
我想插入类的原因是因为我在使用hyphenator库,这个库是通过给所有带有“hyphenate”类的标签添加连字符来工作的。我可以把hyphenate类加到容器标签上,但那样所有子标签都会继承这个类。我也可以用javascript动态添加这个类,但我觉得用restructuredText可能有更简单的方法。
谢谢你的帮助,
Joe
2 个回答
6
创建一个新的类,继承自内置的 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())
4
你没有说明为什么想给每个段落添加一个类,但其实可以换个方法来做。比如,如果你是想给段落设置样式,可以用另一种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();