mid_pas.py 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  1. import re
  2. def mid_pas(data, fol_num, include, in_c, toc_y):
  3. syntax = 0
  4. folding_test = 0
  5. p = re.compile('{{{((?:(?:(?:\+|-)[0-5])|(?:#|@)(?:(?:[0-9a-f-A-F]{3}){1,2}|(?:\w+))|(?:#!(?:html|wiki|noin|folding|syntax)))(?:(?!{{{|}}}).)+)}}}', re.DOTALL)
  6. while 1:
  7. m = p.search(data)
  8. if m:
  9. data = p.sub('###' + m.groups()[0] + '/###', data, 1)
  10. else:
  11. break
  12. com = re.compile("{{{((?:(?!{{{|}}}).)*)}}}", re.DOTALL)
  13. while 1:
  14. m = com.search(data)
  15. if m:
  16. data = com.sub('<code>' + m.groups()[0] + '</code>', data, 1)
  17. else:
  18. break
  19. com3 = re.compile('###((?:(?!\/###).)+)\/###', re.DOTALL)
  20. m = com3.search(data)
  21. while 1:
  22. m = com3.search(data)
  23. if m:
  24. data = com3.sub('{{{' + m.groups()[0] + '}}}', data, 1)
  25. else:
  26. break
  27. com2 = re.compile("<code>((?:(?!(?:<code>|<\/code>)).)*)<\/code>", re.DOTALL)
  28. da_com = com2.findall(data)
  29. for com_da in da_com:
  30. mid_data = com_da.replace('<', '&lt;').replace('>', '&gt;')
  31. mid_data = re.sub("(?P<in>.)", "#no#\g<in>#/no#", mid_data)
  32. data = com2.sub(mid_data, data, 1)
  33. while 1:
  34. is_it = com.search(data)
  35. if is_it:
  36. it_d = is_it.groups()[0]
  37. big_a = re.compile("^\+([1-5]) (.*)$", re.DOTALL)
  38. big = big_a.search(it_d)
  39. small_a = re.compile("^\-([1-5]) (.*)$", re.DOTALL)
  40. small = small_a.search(it_d)
  41. color_b = re.compile("^(#(?:[0-9a-f-A-F]{3}){1,2}) (.*)$", re.DOTALL)
  42. color_2 = color_b.search(it_d)
  43. color_c = re.compile("^#(\w+) (.*)$", re.DOTALL)
  44. color_3 = color_c.search(it_d)
  45. back_a = re.compile("^@((?:[0-9a-f-A-F]{3}){1,2}) (.*)$", re.DOTALL)
  46. back = back_a.search(it_d)
  47. back_c = re.compile("^@(\w+) (.*)$", re.DOTALL)
  48. back_3 = back_c.search(it_d)
  49. include_out_a = re.compile("^#!noin ?(.*)$", re.DOTALL)
  50. include_out = include_out_a.search(it_d)
  51. div_a = re.compile("^#!wiki style=(?:&quot;|&#x27;)((?:(?!&quot;|&#x27;).)*)(?:&quot;|&#x27;)\r\n(.*)$", re.DOTALL)
  52. div = div_a.search(it_d)
  53. html_a = re.compile("^#!html ?(.*)$", re.DOTALL)
  54. html_d = html_a.search(it_d)
  55. fol_a = re.compile("^#!folding ((?:(?!\n).)*)\n(.*)$", re.DOTALL)
  56. fol = fol_a.search(it_d)
  57. syn_a = re.compile("^#!syntax ((?:(?!\n).)*)\n(.*)$", re.DOTALL)
  58. syn = syn_a.search(it_d)
  59. if big:
  60. big_d = big.groups()
  61. data = com.sub('<span style="font-size: ' + str(int(big_d[0]) * 20 + 100) + '%;">' + big_d[1] + '</span>', data, 1)
  62. elif small:
  63. sm_d = small.groups()
  64. data = com.sub('<span style="font-size: ' + str(100 - int(sm_d[0]) * 10) + '%;">' + sm_d[1] + '</span>', data, 1)
  65. elif color_2:
  66. c_d_2 = color_2.groups()
  67. data = com.sub('<span style="color: ' + c_d_2[0] + '">' + c_d_2[1] + '</span>', data, 1)
  68. elif color_3:
  69. c_d_3 = color_3.groups()
  70. data = com.sub('<span style="color: ' + c_d_3[0] + '">' + c_d_3[1] + '</span>', data, 1)
  71. elif back:
  72. back_d_1 = back.groups()
  73. data = com.sub('<span style="background: #' + back_d_1[0] + '">' + back_d_1[1] + '</span>', data, 1)
  74. elif back_3:
  75. back_d_3 = back_3.groups()
  76. data = com.sub('<span style="background: ' + back_d_3[0] + '">' + back_d_3[1] + '</span>', data, 1)
  77. elif div:
  78. div_d = div.groups()
  79. data = com.sub('<div style="' + div_d[0] + '">' + div_d[1] + '</div>', data, 1)
  80. elif html_d:
  81. data = com.sub(html_d.groups()[0], data, 1)
  82. elif fol:
  83. fol_d = fol.groups()
  84. if toc_y != 0:
  85. data = com.sub("<div>" + fol_d[0] + " <div id='folding_" + str(fol_num + 1) + "' style='display: inline-block;'>" + \
  86. "[<a href='javascript:void(0);' onclick='folding(" + str(fol_num + 1) + \
  87. "); folding(" + str(fol_num + 2) + "); folding(" + str(fol_num) + ");'>펼치기</a>]</div>" + \
  88. "<div id='folding_" + str(fol_num + 2) + "' style='display: none;'>[" + \
  89. "<a href='javascript:void(0);' onclick='folding(" + str(fol_num + 1) + "); folding(" + str(fol_num + 2) + ");" + \
  90. " folding(" + str(fol_num) + ");'>접기</a>]</div><div id='folding_" + str(fol_num) + "' style='display: none;'>" + \
  91. "<br>" + fol_d[1] + "</div></div>", data, 1)
  92. fol_num += 3
  93. else:
  94. data = com.sub("<div>" + fol_d[0] + "<br><br>" + fol_d[1] + "</div>", data, 1)
  95. elif syn:
  96. if syntax == 0:
  97. data += '<link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/default.min.css"> \
  98. <script src="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/highlight.min.js"></script> \
  99. <script>hljs.initHighlightingOnLoad();</script>'
  100. syntax = 1
  101. syn_d = syn.groups()
  102. tax_d = syn_d[1].replace(' ', '<space>')
  103. tax_d = tax_d.replace('\r\n', '<isbr>')
  104. data = com.sub('<pre id="syntax"><code class="' + syn_d[0] + '"><code>' + tax_d + '</code></code></pre>', data, 1)
  105. elif include_out:
  106. if (include or in_c) == 1:
  107. data = com.sub("", data, 1)
  108. else:
  109. data = com.sub(include_out.groups()[0], data, 1)
  110. else:
  111. data = com.sub(it_d, data, 1)
  112. else:
  113. break
  114. com2 = re.compile("<code>((?:(?!(?:<code>|<\/code>)).)*)<\/code>", re.DOTALL)
  115. da_com = com2.findall(data)
  116. for com_da in da_com:
  117. mid_data = com_da.replace('<', '&lt;').replace('>', '&gt;')
  118. mid_data = re.sub("(?P<in>.)", "#no#\g<in>#/no#", mid_data)
  119. data = com2.sub(mid_data, data, 1)
  120. return [data, fol_num]