mark.py 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. from .set_mark.namu import namu
  2. from .set_mark.markdown import markdown
  3. from .set_mark.tool import *
  4. import re
  5. import html
  6. import sqlite3
  7. import urllib.parse
  8. import threading
  9. import multiprocessing
  10. def load_conn2(data):
  11. global conn
  12. global curs
  13. conn = data
  14. curs = conn.cursor()
  15. def send_parser(data):
  16. if not re.search('^<br>$', data):
  17. data = html.escape(data)
  18. javascript = re.compile('javascript:', re.I)
  19. data = javascript.sub('', data)
  20. while 1:
  21. re_data = re.search('&lt;a(?: (?:(?:(?!&gt;).)*))?&gt;(?P<in>(?:(?!&lt;).)*)&lt;\/a&gt;', data)
  22. if re_data:
  23. re_data = re_data.groups()[0]
  24. data = re.sub('&lt;a(?: (?:(?:(?!&gt;).)*))?&gt;(?P<in>(?:(?!&lt;).)*)&lt;\/a&gt;', '<a href="/w/' + urllib.parse.quote(re_data).replace('/','%2F') + '">' + re_data + '</a>', data, 1)
  25. else:
  26. break
  27. return data
  28. def plusing(data):
  29. for data_in in data:
  30. curs.execute(db_change("select title from back where title = ? and link = ? and type = ?"), [data_in[1], data_in[0], data_in[2]])
  31. if not curs.fetchall():
  32. curs.execute(db_change("insert into back (title, link, type) values (?, ?, ?)"), [data_in[1], data_in[0], data_in[2]])
  33. def namumark(title, data, num, include):
  34. curs.execute(db_change('select data from other where name = "markup"'))
  35. rep_data = curs.fetchall()
  36. if rep_data[0][0] == 'namumark':
  37. data = namu(conn, data, title, num, include)
  38. elif rep_data[0][0] == 'markdown':
  39. data = markdown(conn, data, title, num)
  40. elif rep_data[0][0] == 'raw':
  41. data = [data, '', []]
  42. else:
  43. data = ['', '', []]
  44. if num == 1:
  45. data_num = len(data[2])
  46. data_in_num = int(data_num / multiprocessing.cpu_count())
  47. data_in = []
  48. for i in range(multiprocessing.cpu_count()):
  49. if i != multiprocessing.cpu_count() - 1:
  50. data_in += [data[2][data_in_num * i:data_in_num * (i + 1)]]
  51. else:
  52. data_in += [data[2][data_in_num * i:]]
  53. for data_in_for in data_in:
  54. thread_start = threading.Thread(target = plusing, args = [data_in_for])
  55. thread_start.start()
  56. thread_start.join()
  57. conn.commit()
  58. if num == 2:
  59. return [data[0], data[1]]
  60. else:
  61. return data[0] + data[1]