2
0

func_render.py 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173
  1. from .func_render_namumark import *
  2. # 커스텀 마크 언젠간 다시 추가 예정
  3. class class_do_render:
  4. def __init__(self, conn, lang_data):
  5. self.conn = conn
  6. self.lang_data = lang_data
  7. def do_backlink_generate(self, data_markup, doc_data, doc_name):
  8. conn = self.conn
  9. curs = self.conn.cursor()
  10. if data_markup == 'namumark':
  11. # Link
  12. link_re = re.compile(r'\[\[(?!https?:\/\/|inter:|외부:|out:|#)((?:(?!\[\[|\]\]|\|).)+)(?:\]\]|\|)', re.I)
  13. data_link = link_re.findall(doc_data)
  14. data_link = list(set(data_link))
  15. data_link_end = {}
  16. data_link_end['cat'] = []
  17. data_link_end['file'] = []
  18. data_link_end['link'] = []
  19. data_link_end_all = []
  20. for i in data_link:
  21. data_link_in = i
  22. if data_link_in.startswith('분류:') or \
  23. data_link_in.startswith('category:'):
  24. data_link_in = re.sub(r'\\(.)', r'\1', data_link_in)
  25. data_link_end['cat'] += [re.sub(r'^분류:', 'category:', data_link_in)]
  26. elif data_link_in.startswith('파일:') or \
  27. data_link_in.startswith('file:'):
  28. data_link_in = re.sub(r'\\(.)', r'\1', data_link_in)
  29. data_link_end['file'] += [re.sub(r'^파일:', 'file:', data_link_in)]
  30. else:
  31. data_link_in = re.sub(r'([^\\])#(?:[^#]*)$', r'\1', data_link_in)
  32. if data_link_in[0] == ':':
  33. data_link_in = re.sub(r'^:분류:', 'category:', data_link_in)
  34. data_link_in = re.sub(r'^:category:', 'category:', data_link_in)
  35. data_link_in = re.sub(r'^:file:', 'file:', data_link_in)
  36. data_link_in = re.sub(r'^:파일:', 'file:', data_link_in)
  37. elif data_link_in[0] == '/':
  38. data_link_in = doc_name + data_link_in
  39. elif len(data_link_in) >= 3 and data_link_in[0:3] == '../':
  40. data_link_in = data_link_in[3:len(data_link_in)]
  41. data_link_in = '' + \
  42. re.sub('\/[^/]+$', '', doc_name) + \
  43. (('/' + data_link_in) if data_link_in != '' else '') + \
  44. ''
  45. data_link_in = re.sub(r'\\(.)', r'\1', data_link_in)
  46. data_link_end['link'] += [data_link_in]
  47. if data_link_end != {}:
  48. data_link_end['cat'] = list(set(data_link_end['cat']))
  49. data_link_end['file'] = list(set(data_link_end['file']))
  50. data_link_end['link'] = list(set(data_link_end['link']))
  51. data_link_end_all += [[doc_name, i, 'cat'] for i in data_link_end['cat']]
  52. data_link_end_all += [[doc_name, i, 'file'] for i in data_link_end['file']]
  53. data_link_end_all += [[doc_name, i, ''] for i in data_link_end['link']]
  54. data_link_no = []
  55. for i in data_link_end['link']:
  56. curs.execute(db_change("select title from data where title = ?"), [i])
  57. if not curs.fetchall():
  58. data_link_no += [[doc_name, i, 'no']]
  59. data_link_end_all += data_link_no
  60. # Include
  61. include_re = re.compile(r'\[include\(((?:(?!\)\]).)+)\)\]', re.I)
  62. data_include = include_re.findall(doc_data)
  63. data_include = list(set(data_include))
  64. for i in data_include:
  65. data_include_in = i
  66. data_include_in = re.sub(r'([^\\]),.*$', r'\1', data_include_in)
  67. data_link_end_all += [[doc_name, data_include_in, 'include']]
  68. # Redirect
  69. redirect_re = re.compile(r'^#(?:redirect|넘겨주기) ([^\n]+)', re.I)
  70. data_redirect = redirect_re.search(doc_data)
  71. if data_redirect:
  72. data_redirect = data_redirect.group(1)
  73. data_redirect = re.sub(r'([^\\])#(?:[^#]*)$', r'\1', data_redirect)
  74. data_link_end_all += [[doc_name, data_redirect, 'redirect']]
  75. else:
  76. # markup == null
  77. data_link_end_all = []
  78. return data_link_end_all
  79. def do_render(self, doc_name, doc_data, data_type, data_in):
  80. conn = self.conn
  81. curs = self.conn.cursor()
  82. doc_set = {}
  83. if data_in == 'from':
  84. data_in = ''
  85. doc_set['doc_from'] = 'O'
  86. data_in = (data_in + '_') if data_in != '' else ''
  87. doc_set['doc_include'] = data_in
  88. curs.execute(db_change('select data from other where name = "markup"'))
  89. rep_data = curs.fetchall()
  90. rep_data = rep_data[0][0] if rep_data else 'namumark'
  91. if data_type != 'backlink':
  92. if rep_data == 'namumark':
  93. doc_data = html.escape(doc_data)
  94. doc_name = html.escape(doc_name)
  95. data_end = [
  96. '<pre class="render_content_load" id="' + data_in + 'render_content_load">' + doc_data + '</pre>' + \
  97. '<div class="render_content" id="' + data_in + 'render_content" style="display: none;"></div>',
  98. '''
  99. do_onmark_render(
  100. test_mode = "normal",
  101. name_id = "''' + data_in + '''render_content",
  102. name_include = "''' + data_in + '''",
  103. name_doc = "''' + doc_name + '''"
  104. );
  105. ''',
  106. {}
  107. ]
  108. elif rep_data == 'namumark_beta':
  109. data_end = class_do_render_namumark(
  110. curs,
  111. doc_name,
  112. doc_data,
  113. doc_set,
  114. self.lang_data
  115. )()
  116. else:
  117. data_end = [
  118. doc_data,
  119. '',
  120. {}
  121. ]
  122. return [
  123. data_end[0],
  124. data_end[1],
  125. data_end[2]
  126. ]
  127. else:
  128. if rep_data == 'namumark':
  129. backlink = self.do_backlink_generate(
  130. rep_data,
  131. doc_data,
  132. doc_name
  133. )
  134. else:
  135. backlink = []
  136. if backlink != []:
  137. curs.executemany(db_change("insert into back (link, title, type) values (?, ?, ?)"), backlink)
  138. curs.execute(db_change("delete from back where title = ? and type = 'no'"), [doc_name])
  139. conn.commit()