func_mark.py 7.2 KB

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