func_mark.py 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. import os
  2. import html
  3. import sqlite3
  4. import threading
  5. from .func_tool import *
  6. # 커스텀 마크 언젠간 다시 추가 예정
  7. conn = ''
  8. curs = ''
  9. def load_conn2(data):
  10. global conn
  11. global curs
  12. conn = data
  13. curs = conn.cursor()
  14. def backlink_generate(data_markup, doc_data, doc_name):
  15. if data_markup == 'namumark':
  16. # Link
  17. link_re = re.compile(r'\[\[(?!https?:\/\/)((?:(?!\[\[|\]\]|\|).)+)(?:\]\]|\|)', re.I)
  18. data_link = link_re.findall(doc_data)
  19. data_link = list(set(data_link))
  20. data_link_end = {}
  21. data_link_end['cat'] = []
  22. data_link_end['file'] = []
  23. data_link_end['link'] = []
  24. for i in data_link:
  25. data_link_in = i
  26. if data_link_in[0] == '#':
  27. continue
  28. elif re.search(r'^(?:분류|category):', data_link_in):
  29. data_link_in = re.sub(r'\\(.)', '\1', data_link_in)
  30. data_link_end['cat'] += [re.sub(r'^분류:', 'category:', data_link_in)]
  31. elif re.search(r'^(?:파일|file):', data_link_in):
  32. data_link_in = re.sub(r'\\(.)', '\1', data_link_in)
  33. data_link_end['file'] += [re.sub(r'^파일:', 'file:', data_link_in)]
  34. else:
  35. data_link_in = re.sub(r'([^/])#(?:[^#]*)$', '\1', data_link_in)
  36. if data_link_in[0] == ':':
  37. data_link_in = re.sub(r'^:', '', data_link_in)
  38. elif data_link_in[0] == '/':
  39. data_link_in = doc_name + data_link_in
  40. elif len(data_link_in) >= 3 and data_link_in[0:3] == '../':
  41. data_link_in = data_link_in[3:len(data_link_in)]
  42. data_link_in = '' + \
  43. re.sub('\/[^/]+$', '', doc_name) + \
  44. (('/' + data_link_in) if data_link_in != '' else '') + \
  45. ''
  46. data_link_in = re.sub(r'\\(.)', '\1', data_link_in)
  47. data_link_end['link'] += [data_link_in]
  48. if data_link_end != {}:
  49. data_link_end['cat'] = list(set(data_link_end['cat']))
  50. data_link_end['file'] = list(set(data_link_end['file']))
  51. data_link_end['link'] = list(set(data_link_end['link']))
  52. data_link_end_all = []
  53. data_link_end_all += [[doc_name, i, 'cat'] for i in data_link_end['cat']]
  54. data_link_end_all += [[doc_name, i, 'file'] for i in data_link_end['file']]
  55. data_link_end_all += [[doc_name, i, ''] for i in data_link_end['link']]
  56. else:
  57. data_link_end_all = []
  58. # Include
  59. include_re = re.compile(r'\[include\(((?:(?!\)\]).)+)\)\]', re.I)
  60. data_include = include_re.findall(doc_data)
  61. data_include = list(set(data_include))
  62. # Redirect
  63. else:
  64. data_link_end_all = []
  65. return data_link_end_all
  66. def render_do(doc_name, doc_data, data_type, data_in):
  67. data_in = None if data_in == '' else data_in
  68. curs.execute(db_change('select data from other where name = "markup"'))
  69. rep_data = curs.fetchall()
  70. rep_data = rep_data[0][0] if rep_data else 'namumark'
  71. if data_type != 'backlink':
  72. if rep_data == 'namumark':
  73. data_in = (data_in + '_') if data_in else ''
  74. data_end = [
  75. '<div class="render_content" id="' + data_in + 'render_content">' + html.escape(doc_data) + '</div>',
  76. '''
  77. do_onmark_render(
  78. test_mode = "normal",
  79. name_id = "''' + data_in + '''render_content",
  80. name_include = "''' + data_in + '''",
  81. name_doc = "''' + doc_name.replace('"', '//"') + '''",
  82. );
  83. ''',
  84. []
  85. ]
  86. else:
  87. data_end = [
  88. doc_data,
  89. '',
  90. []
  91. ]
  92. if data_type == 'api_view':
  93. return [
  94. data_end[0],
  95. data_end[1]
  96. ]
  97. else:
  98. return data_end[0] + '<script>' + data_end[1] + '</script>'
  99. else:
  100. backlink = backlink_generate(
  101. rep_data,
  102. html.escape(doc_data),
  103. doc_name
  104. )
  105. print(backlink)
  106. if backlink != []:
  107. curs.executemany(db_change("insert into back (link, title, type) values (?, ?, ?)"), backlink)
  108. curs.execute(db_change("delete from back where title = ? and type = 'no'"), [doc_name])
  109. conn.commit()