func_render_namumark.py 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203
  1. from .func_tool import *
  2. class class_do_render_namumark:
  3. def __init__(
  4. self,
  5. curs,
  6. doc_name,
  7. doc_data,
  8. doc_include
  9. ):
  10. self.curs = curs
  11. self.doc_data = doc_data
  12. self.doc_name = doc_name
  13. self.doc_include = doc_include
  14. self.data_temp_storage = {}
  15. self.data_temp_storage_count = 0
  16. self.data_backlink = []
  17. self.data_toc = ''
  18. self.data_footnote = ''
  19. self.data_category = ''
  20. self.render_data = self.doc_data
  21. self.render_data = html.escape(self.render_data)
  22. self.render_data = '<back_br>\n' + self.render_data + '\n<front_br>'
  23. self.render_data_js = ''
  24. def get_tool_temp_storage(self, data_A = '', data_B = ''):
  25. self.data_temp_storage_count += 1
  26. data_name = 'opennamu_render_' + str(self.data_temp_storage_count)
  27. self.data_temp_storage[data_name] = data_A
  28. self.data_temp_storage['/' + data_name] = data_B
  29. return data_name
  30. def get_tool_data_restore(self, data):
  31. storage_count = self.data_temp_storage_count * 2
  32. storage_regex = r'<(\/?opennamu_render_(?:[0-9]+))>'
  33. while 1:
  34. if storage_count < 0:
  35. print('Error : render count overflow')
  36. break
  37. else:
  38. if re.search(storage_regex, data):
  39. data = re.sub(
  40. storage_regex,
  41. lambda match : self.data_temp_storage[match.group(1)],
  42. data,
  43. 1
  44. )
  45. else:
  46. break
  47. storage_count -= 1
  48. return data
  49. def do_render_text(self):
  50. # <b> function
  51. def do_render_text_bold(match):
  52. data = match.group(1)
  53. data_name = self.get_tool_temp_storage('<b>', '</b>')
  54. return '<' + data_name + '>' + data + '</' + data_name + '>'
  55. # <b>
  56. self.render_data = re.sub(
  57. r"&#x27;&#x27;&#x27;((?:(?!&#x27;&#x27;&#x27;).)+)&#x27;&#x27;&#x27;",
  58. do_render_text_bold,
  59. self.render_data
  60. )
  61. # <i> function
  62. def do_render_text_italic(match):
  63. data = match.group(1)
  64. data_name = self.get_tool_temp_storage('<i>', '</i>')
  65. return '<' + data_name + '>' + data + '</' + data_name + '>'
  66. # <i>
  67. self.render_data = re.sub(
  68. r"&#x27;&#x27;((?:(?!&#x27;&#x27;).)+)&#x27;&#x27;",
  69. do_render_text_italic,
  70. self.render_data
  71. )
  72. # <u> function
  73. def do_render_text_under(match):
  74. data = match.group(1)
  75. data_name = self.get_tool_temp_storage('<u>', '</u>')
  76. return '<' + data_name + '>' + data + '</' + data_name + '>'
  77. # <u>
  78. self.render_data = re.sub(
  79. r"__((?:(?!__).)+)__",
  80. do_render_text_under,
  81. self.render_data
  82. )
  83. # <sup> function
  84. def do_render_text_sup(match):
  85. data = match.group(1)
  86. data_name = self.get_tool_temp_storage('<sup>', '</sup>')
  87. return '<' + data_name + '>' + data + '</' + data_name + '>'
  88. # <sup>
  89. self.render_data = re.sub(
  90. r"\^\^\^((?:(?!\^\^\^).)+)\^\^\^",
  91. do_render_text_sup,
  92. self.render_data
  93. )
  94. # <sup> 2
  95. self.render_data = re.sub(
  96. r"\^\^((?:(?!\^\^).)+)\^\^",
  97. do_render_text_sup,
  98. self.render_data
  99. )
  100. # <sub> function
  101. def do_render_text_sub(match):
  102. data = match.group(1)
  103. data_name = self.get_tool_temp_storage('<sub>', '</sub>')
  104. return '<' + data_name + '>' + data + '</' + data_name + '>'
  105. # <sub>
  106. self.render_data = re.sub(
  107. r",,,((?:(?!,,,).)+),,,",
  108. do_render_text_sub,
  109. self.render_data
  110. )
  111. # <sub> 2
  112. self.render_data = re.sub(
  113. r",,((?:(?!,,).)+),,",
  114. do_render_text_sub,
  115. self.render_data
  116. )
  117. # <sub> function
  118. def do_render_text_strike(match):
  119. data = match.group(1)
  120. data_name = self.get_tool_temp_storage('<s>', '</s>')
  121. return '<' + data_name + '>' + data + '</' + data_name + '>'
  122. # <s>
  123. self.render_data = re.sub(
  124. r"--((?:(?!--).)+)--",
  125. do_render_text_strike,
  126. self.render_data
  127. )
  128. # <s> 2
  129. self.render_data = re.sub(
  130. r"~~((?:(?!~~).)+)~~",
  131. do_render_text_strike,
  132. self.render_data
  133. )
  134. def do_render_heading(self):
  135. pass
  136. def do_render_last(self):
  137. # remove front_br and back_br
  138. self.render_data = re.sub(
  139. r'\n<front_br>',
  140. '',
  141. self.render_data
  142. )
  143. self.render_data = re.sub(
  144. r'<back_br>\n',
  145. '',
  146. self.render_data
  147. )
  148. # \n to <br>
  149. self.render_data = re.sub(
  150. r'\n',
  151. '<br>',
  152. self.render_data
  153. )
  154. def __call__(self):
  155. self.do_render_text()
  156. self.do_render_heading()
  157. self.do_render_last()
  158. print(self.data_temp_storage)
  159. self.render_data = self.get_tool_data_restore(self.render_data)
  160. print('----')
  161. print(self.render_data)
  162. return [
  163. self.render_data, # HTML
  164. self.render_data_js, # JS
  165. [] # Other
  166. ]