configurationblock.py 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. from docutils.parsers.rst import Directive, directives
  2. from docutils import nodes
  3. from string import upper
  4. class configurationblock(nodes.General, nodes.Element):
  5. pass
  6. class ConfigurationBlock(Directive):
  7. has_content = True
  8. required_arguments = 0
  9. optional_arguments = 0
  10. final_argument_whitespace = True
  11. option_spec = {}
  12. formats = {
  13. 'html': 'HTML',
  14. 'xml': 'XML',
  15. 'php': 'PHP',
  16. 'yaml': 'YAML',
  17. 'jinja': 'Twig',
  18. 'html+jinja': 'Twig',
  19. 'jinja+html': 'Twig',
  20. 'php+html': 'PHP',
  21. 'html+php': 'PHP',
  22. 'ini': 'INI',
  23. 'php-annotations': 'Annotations',
  24. }
  25. def run(self):
  26. env = self.state.document.settings.env
  27. node = nodes.Element()
  28. node.document = self.state.document
  29. self.state.nested_parse(self.content, self.content_offset, node)
  30. entries = []
  31. for i, child in enumerate(node):
  32. if isinstance(child, nodes.literal_block):
  33. # add a title (the language name) before each block
  34. #targetid = "configuration-block-%d" % env.new_serialno('configuration-block')
  35. #targetnode = nodes.target('', '', ids=[targetid])
  36. #targetnode.append(child)
  37. innernode = nodes.emphasis(self.formats[child['language']], self.formats[child['language']])
  38. para = nodes.paragraph()
  39. para += [innernode, child]
  40. entry = nodes.list_item('')
  41. entry.append(para)
  42. entries.append(entry)
  43. resultnode = configurationblock()
  44. resultnode.append(nodes.bullet_list('', *entries))
  45. return [resultnode]
  46. def visit_configurationblock_html(self, node):
  47. self.body.append(self.starttag(node, 'div', CLASS='configuration-block'))
  48. def depart_configurationblock_html(self, node):
  49. self.body.append('</div>\n')
  50. def visit_configurationblock_latex(self, node):
  51. pass
  52. def depart_configurationblock_latex(self, node):
  53. pass
  54. def setup(app):
  55. app.add_node(configurationblock,
  56. html=(visit_configurationblock_html, depart_configurationblock_html),
  57. latex=(visit_configurationblock_latex, depart_configurationblock_latex))
  58. app.add_directive('configuration-block', ConfigurationBlock)