func_render.py 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. from .func_tool import *
  2. from .func_render_namumark import class_do_render_namumark
  3. # 커스텀 마크 언젠간 다시 추가 예정
  4. class class_do_render:
  5. def __init__(self, conn, lang_data = {}, markup = ''):
  6. self.conn = conn
  7. if lang_data == '{}':
  8. lang_data = {
  9. 'toc' : 'toc',
  10. 'category' : 'category'
  11. }
  12. self.lang_data = lang_data
  13. self.markup = markup
  14. def do_render(self, doc_name, doc_data, data_type):
  15. curs = self.conn.cursor()
  16. doc_set = {}
  17. if data_type == 'from':
  18. doc_set['doc_from'] = 'O'
  19. data_type = 'view'
  20. else:
  21. doc_set['doc_from'] = ''
  22. if data_type == 'backlink':
  23. doc_set['doc_type'] = 'view'
  24. else:
  25. doc_set['doc_type'] = data_type
  26. doc_set['doc_include'] = str(time.time_ns()) + '_'
  27. rep_data = self.markup
  28. if rep_data == '' and doc_name != '':
  29. curs.execute(db_change("select set_data from data_set where doc_name = ? and set_name = 'document_markup'"), [doc_name])
  30. db_data = curs.fetchall()
  31. if db_data and db_data[0][0] != '' and db_data[0][0] != 'normal':
  32. rep_data = db_data[0][0]
  33. if rep_data == '':
  34. curs.execute(db_change('select data from other where name = "markup"'))
  35. db_data = curs.fetchall()
  36. rep_data = db_data[0][0] if db_data else 'namumark'
  37. if rep_data == 'namumark' or rep_data == 'namumark_beta':
  38. data_end = class_do_render_namumark(self.conn, doc_name, doc_data, doc_set, self.lang_data)()
  39. elif rep_data == 'raw':
  40. data_end = [html.escape(doc_data).replace('\n', '<br>'), '', {}]
  41. else:
  42. data_end = [doc_data, '', {}]
  43. if data_type == 'thread':
  44. def do_thread_a_change(match):
  45. data = match[2].replace('#', '')
  46. data_split = data.split('-')
  47. if match[1] == 'topic_a' or len(data_split) == 1:
  48. return '<a href="' + match[2] + '">' + match[2] + '</a>'
  49. elif match[1] == 'topic_a_post' and len(data_split) == 3:
  50. return '<a href="/bbs/w/' + data_split[2] + '/' + data_split[1] + '#' + data_split[0] + '">#' + data_split[0] + '-' + data_split[1] + '</a>'
  51. elif len(data_split) == 2:
  52. return '<a href="/thread/' + data_split[1] + '#' + data_split[0] + '">' + match[2] + '</a>'
  53. else:
  54. return ''
  55. data_end[0] = re.sub(r'&lt;(topic_a(?:_post|_thread)?)&gt;((?:(?!&lt;\/topic_a(?:_post|_thread)?&gt;).)+)&lt;\/topic_a(?:_post|_thread)?&gt;', do_thread_a_change, data_end[0])
  56. data_end[0] = re.sub(r'&lt;topic_call&gt;@(?P<in>(?:(?!&lt;\/topic_call&gt;).)+)&lt;\/topic_call&gt;', '<a href="/w/user:\\g<in>">@\\g<in></a>', data_end[0])
  57. if data_type == 'backlink':
  58. mode = ''
  59. if re.search('^user:', doc_name):
  60. mode = 'user'
  61. elif re.search('^file:', doc_name):
  62. mode = 'file'
  63. elif re.search('^category:', doc_name):
  64. mode = 'category'
  65. curs.execute(db_change("delete from back where link = ?"), [doc_name])
  66. curs.execute(db_change("delete from back where title = ? and type = 'no'"), [doc_name])
  67. curs.execute(db_change("delete from data_set where doc_name = ? and set_name = 'link_count'"), [doc_name])
  68. curs.execute(db_change("delete from data_set where doc_name = ? and set_name = 'doc_type'"), [doc_name])
  69. backlink = data_end[2]['backlink'] if 'backlink' in data_end[2] else []
  70. if backlink != []:
  71. curs.executemany(db_change("insert into back (link, title, type, data) values (?, ?, ?, ?)"), backlink)
  72. curs.execute(db_change("delete from back where title = ? and type = 'no'"), [doc_name])
  73. link_count = 0
  74. if 'link_count' in data_end[2]:
  75. link_count = data_end[2]['link_count']
  76. curs.execute(db_change("insert into data_set (doc_name, doc_rev, set_name, set_data) values (?, '', 'link_count', ?)"), [doc_name, link_count])
  77. if mode != '':
  78. curs.execute(db_change("insert into data_set (doc_name, doc_rev, set_name, set_data) values (?, '', 'doc_type', ?)"), [doc_name, mode])
  79. elif 'redirect' in data_end[2] and data_end[2]['redirect'] == 1:
  80. curs.execute(db_change("insert into data_set (doc_name, doc_rev, set_name, set_data) values (?, '', 'doc_type', 'redirect')"), [doc_name])
  81. else:
  82. curs.execute(db_change("insert into data_set (doc_name, doc_rev, set_name, set_data) values (?, '', 'doc_type', '')"), [doc_name])
  83. return [data_end[0], data_end[1], data_end[2]]