Guest User

Untitled

a guest
May 24th, 2018
181
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.96 KB | None | 0 0
  1. """
  2. Maven2 Site Plugin APT(almost plain text) document tree Writer.
  3. """
  4.  
  5. __docformat__ = 'reStructuredText'
  6.  
  7. import sys
  8. import os
  9. import os.path
  10. import time
  11. import re
  12. import docutils
  13. from docutils import frontend, nodes, utils, writers, languages
  14. from docutils.transforms import writer_aux
  15.  
  16.  
  17. class Writer(writers.Writer):
  18.  
  19. supported = ('apt')
  20. """Formats this writer supports."""
  21.  
  22. settings_defaults = {'output_encoding_error_handler': 'xmlcharrefreplace'}
  23.  
  24. relative_path_settings = ('stylesheet_path',)
  25.  
  26. config_section = 'm2apt writer'
  27. config_section_dependencies = ('writers',)
  28.  
  29. def get_transforms(self):
  30. #return writers.Writer.get_transforms(self) + [writer_aux.Admonitions]
  31. return writers.Writer.get_transforms(self)
  32.  
  33. def __init__(self):
  34. writers.Writer.__init__(self)
  35. #self.translator_class = HTMLTranslator
  36. self.translator_class = Maven2AptTranslator
  37. self.title = ""
  38.  
  39. def translate(self):
  40. self.visitor = visitor = self.translator_class(self.document)
  41. self.document.walkabout(visitor)
  42.  
  43. self.output = ''.join(getattr(visitor, 'text'))
  44.  
  45. # for development
  46. self.output = self.output.encode('big5')
  47.  
  48.  
  49. class Maven2AptTranslator(nodes.GenericNodeVisitor):
  50.  
  51. def __init__(self, document):
  52. nodes.NodeVisitor.__init__(self, document)
  53. self.text = []
  54. self.__in_section = False
  55. self.__in_title = False
  56. self.__in_note = False
  57. self.__in_literal_block = False
  58. self.__after_topic = False
  59. self.__bullet_list = False
  60. self.__enumerated_list = False
  61. self.__list_item_count = 0
  62. self.__ref_table = {}
  63.  
  64. self.__indent_count = 1
  65.  
  66. def indentString(self):
  67. ind = ''
  68. for i in range(self.__indent_count):
  69. ind += "\t"
  70. return ind
  71.  
  72. def appendLn(self, str = ""):
  73. self.append(str+"\n")
  74.  
  75. def append(self, str = ''):
  76. self.text.append(str)
  77.  
  78. def appendNodeLn(self, node, encoding = None):
  79. self.appendNode(node, encoding, True)
  80.  
  81. def appendNode(self, node, encoding = None, newLine = False):
  82. text = node.astext()
  83. if newLine:
  84. text += "\n"
  85. self.text.append(text)
  86.  
  87. def default_visit(self, node):
  88. print node.__class__
  89. pass
  90.  
  91. def default_departure(self, node):
  92. print "L: ", node.__class__
  93. pass
  94.  
  95. def depart_topic(self, node):
  96. self.__after_topic = True
  97.  
  98. def visit_section(self, node):
  99. self.__in_section = True
  100.  
  101. def depart_section(self, node):
  102. self.__in_section = False
  103.  
  104. def visit_paragraph(self, node):
  105. self.__indent_count += 1
  106.  
  107. def depart_paragraph(self, node):
  108. self.__indent_count -= 1
  109. self.appendLn("")
  110. self.appendLn("")
  111.  
  112. def visit_bullet_list(self, node):
  113. self.__indent_count += 1
  114. self.__bullet_list = True
  115.  
  116. def depart_bullet_list(self, node):
  117. self.__indent_count -= 1
  118. self.__bullet_list = False
  119.  
  120. def visit_enumerated_list(self, node):
  121. self.__indent_count += 1
  122. self.__enumerated_list = True
  123.  
  124. def depart_enumerated_list(self, node):
  125. self.__indent_count -= 1
  126. self.__enumerated_list = False
  127. self.__list_item_count = 0
  128.  
  129. def visit_list_item(self, node):
  130. if self.__after_topic and not self.__in_title:
  131. if self.__enumerated_list:
  132. self.__list_item_count += 1
  133. self.append(self.indentString())
  134. self.append(" [[%s]] " % (self.__list_item_count))
  135.  
  136. if self.__bullet_list:
  137. self.append(self.indentString())
  138. self.append(" * ")
  139.  
  140. def depart_list_item(self, node):
  141. self.appendLn("")
  142.  
  143. def visit_Text(self, node):
  144. if self.__ref_table.has_key(node.astext()):
  145. self.append("{{{%s}%s}}" % (self.__ref_table[node.astext()], node.astext()))
  146. return
  147.  
  148. if self.__in_literal_block:
  149. self.appendNode(node)
  150. return
  151.  
  152. if self.__in_note:
  153. for i in node.astext().split("[\r\n]+"):
  154. self.append(" " + i)
  155. # this return is important. prevent node text from re-printing
  156. return
  157.  
  158. if self.__after_topic and not self.__in_title:
  159. self.append(self.indentString())
  160. for i in node.astext().split("[\r\n]+"):
  161. self.append(" " + i)
  162.  
  163. def visit_title(self, node):
  164. self.__in_title = True
  165.  
  166. if self.__in_section:
  167. self.appendLn()
  168. self.appendLn()
  169. self.appendNodeLn(node)
  170. self.appendLn()
  171.  
  172. def depart_title(self, node):
  173. self.__in_title = False
  174.  
  175. def visit_strong(self, node):
  176. self.append(' <<')
  177.  
  178. def depart_strong(self, node):
  179. self.append('>>')
  180.  
  181. def visit_emphasis(self, node):
  182. self.append(' <')
  183.  
  184. def depart_emphasis(self, node):
  185. self.append('>')
  186.  
  187. def visit_note(self, node):
  188. self.__in_note = True
  189. self.appendLn("")
  190. self.append(self.indentString())
  191. self.append("[NOTE] ")
  192.  
  193. def depart_note(self, node):
  194. self.__in_note = False
  195.  
  196. def visit_literal_block(self, node):
  197. self.__in_literal_block = True
  198. self.appendLn("")
  199. self.appendLn("+-----------------------------------------+")
  200.  
  201. def depart_literal_block(self, node):
  202. self.__in_literal_block = False
  203. self.appendLn("")
  204. self.appendLn("+-----------------------------------------+")
  205.  
  206. def visit_reference(self, node):
  207. name = None
  208. uri = None
  209.  
  210. for k, v in node.attlist():
  211. if k == "name":
  212. name = v
  213. if k == "refuri":
  214. uri = v
  215. if uri is not None:
  216. self.__ref_table[name] = uri
  217. pass
Add Comment
Please, Sign In to add comment