func_render.py 2.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  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 = {}):
  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. def do_render(self, doc_name, doc_data, data_type, data_in):
  14. curs = self.conn.cursor()
  15. doc_set = {}
  16. if data_type == 'from':
  17. doc_set['doc_from'] = 'O'
  18. data_type = 'view'
  19. data_in = (data_in + '_') if data_in != '' else ''
  20. doc_set['doc_include'] = data_in
  21. rep_data = ''
  22. if rep_data == '' and doc_name != '':
  23. curs.execute(db_change("select set_data from data_set where doc_name = ? and set_name = 'document_markup'"), [doc_name])
  24. db_data = curs.fetchall()
  25. if db_data and db_data[0][0] != '' and db_data[0][0] != 'normal':
  26. rep_data = db_data[0][0]
  27. if rep_data == '':
  28. curs.execute(db_change('select data from other where name = "markup"'))
  29. db_data = curs.fetchall()
  30. rep_data = db_data[0][0] if db_data else 'namumark'
  31. if rep_data == 'namumark' or rep_data == 'namumark_beta':
  32. data_end = class_do_render_namumark(
  33. curs,
  34. doc_name,
  35. doc_data,
  36. doc_set,
  37. self.lang_data
  38. )()
  39. elif rep_data == 'raw':
  40. data_end = [
  41. html.escape(doc_data).replace('\n', '<br>'),
  42. '',
  43. {}
  44. ]
  45. else:
  46. data_end = [
  47. doc_data,
  48. '',
  49. {}
  50. ]
  51. if data_type == 'thread' or data_type == 'api_thread':
  52. data_end[0] = re.sub(
  53. r'&lt;topic_a&gt;(?P<in>(?:(?!&lt;\/topic_a&gt;).)+)&lt;\/topic_a&gt;',
  54. '<a href="\g<in>">\g<in></a>',
  55. data_end[0]
  56. )
  57. data_end[0] = re.sub(
  58. r'&lt;topic_call&gt;@(?P<in>(?:(?!&lt;\/topic_call&gt;).)+)&lt;\/topic_call&gt;',
  59. '<a href="/w/user:\g<in>">@\g<in></a>',
  60. data_end[0]
  61. )
  62. if data_type == 'backlink':
  63. if 'backlink' in data_end[2]:
  64. backlink = data_end[2]['backlink']
  65. else:
  66. backlink = []
  67. if backlink != []:
  68. curs.executemany(db_change("insert into back (link, title, type) values (?, ?, ?)"), data_end[2]['backlink'])
  69. curs.execute(db_change("delete from back where title = ? and type = 'no'"), [doc_name])
  70. self.conn.commit()
  71. return [
  72. data_end[0],
  73. data_end[1],
  74. data_end[2]
  75. ]