from bottle import request, app from bottle.ext import beaker from urllib import parse import json import sqlite3 import time import re import hashlib json_data = open('set.json').read() set_data = json.loads(json_data) conn = sqlite3.connect(set_data['db'] + '.db') curs = conn.cursor() session_opts = { 'session.type': 'file', 'session.data_dir': './app_session/', 'session.auto': True } app = beaker.middleware.SessionMiddleware(app(), session_opts) def get_time(): now = time.localtime() date = "%04d-%02d-%02d %02d:%02d:%02d" % (now.tm_year, now.tm_mon, now.tm_mday, now.tm_hour, now.tm_min, now.tm_sec) return(date) def ip_check(): session = request.environ.get('beaker.session') if(session.get('Now') == 1): ip = format(session['DREAMER']) else: if(request.environ.get('HTTP_X_FORWARDED_FOR')): ip = request.environ.get('HTTP_X_FORWARDED_FOR') else: ip = request.environ.get('REMOTE_ADDR') return(ip) def url_pas(data): return(parse.quote(data).replace('/','%2F')) def sha224(data): return(hashlib.sha224(bytes(data, 'utf-8')).hexdigest()) def savemark(data): data = re.sub("\[date\(now\)\]", get_time(), data) if(not re.search("\.", ip_check())): name = '[[사용자:' + ip_check() + '|' + ip_check() + ']]' else: name = ip_check() data = re.sub("\[name\]", name, data) return(data) def html_pas(data, how): data = re.sub("%phtml%(?P(?:\/)?(?:a|div|span|embed|iframe)(?:\s[^%]*)?)%phtml%", "<\g>", data) while(1): if(how == 1): y = re.search("<((a|div|span|embed|iframe)(?:\s[^>]*))>", data) else: y = re.search("<((a)(?:\s[^>]*))>", data) if(y): b = y.groups() if(re.search("<(\/" + b[1] + ")>", data)): xss_test = re.search('src=(?:"|\')?(http(s)?:\/\/([^\/]*)\/(?:[^"\' ]*))(?:"|\')?', b[0]) if(xss_test): check = xss_test.groups() if(check[2] == "www.youtube.com" or check[2] == "serviceapi.nmv.naver.com" or check[2] == "tv.kakao.com" or check[2] == "tvple.com"): a = b[0] else: a = re.sub('src=(?:"|\')([^"\']*)(?:"|\')', '', b[0]) else: a = b[0] a = re.sub('(?:"|\')', '#.#', a) try: if(check[1] != None): data = re.sub("<((?:\/)?" + b[1] + "(?:\s[^>]*))>", "%phtml%" + a + "%phtml%", data, 1) data = re.sub("<\/" + b[1] + ">", "%phtml%/" + b[1] + "%phtml%", data, 1) else: data = re.sub("<((?:\/)?" + b[1] + "(?:\s[^>]*))>", "[[" + check[0] + "]]", data, 1) data = re.sub("<\/" + b[1] + ">", "", data, 1) except: data = re.sub("<((?:\/)?" + b[1] + "(?:\s[^>]*))>", "%phtml%" + a + "%phtml%", data, 1) data = re.sub("<\/" + b[1] + ">", "%phtml%/" + b[1] + "%phtml%", data, 1) else: data = re.sub("<((?:\/)?" + b[1] + "(?:\s[^>]*))>", '<' + b[0] + '>', data, 1) break else: break data = re.sub('<', '<', data) data = re.sub('>', '>', data) data = re.sub('"', '"', data) data = re.sub("%phtml%(?P(?:\/)?(?:a|div|span|embed|iframe)(?:\s[^%]*)?)%phtml%", "<\g>", data) data = re.sub('#.#', '"', data) return(data) def mid_pas(data, fol_num, include): while(1): com = re.compile("{{{((?:(?!{{{)(?!}}}).)*)}}}", re.DOTALL) y = com.search(data) if(y): a = y.groups() big_a = re.compile("^\+([1-5])\s(.*)$", re.DOTALL) big = big_a.search(a[0]) small_a = re.compile("^\-([1-5])\s(.*)$", re.DOTALL) small = small_a.search(a[0]) color_a = re.compile("^(#[0-9a-f-A-F]{6})\s(.*)$", re.DOTALL) color = color_a.search(a[0]) color_b = re.compile("^(#[0-9a-f-A-F]{3})\s(.*)$", re.DOTALL) color_2 = color_b.search(a[0]) color_c = re.compile("^#(\w+)\s(.*)$", re.DOTALL) color_3 = color_c.search(a[0]) back_a = re.compile("^@([0-9a-f-A-F]{6})\s(.*)$", re.DOTALL) back = back_a.search(a[0]) back_b = re.compile("^@([0-9a-f-A-F]{3})\s(.*)$", re.DOTALL) back_2 = back_b.search(a[0]) back_c = re.compile("^@(\w+)\s(.*)$", re.DOTALL) back_3 = back_c.search(a[0]) include_out_a = re.compile("^#!noin\s(.*)$", re.DOTALL) include_out = include_out_a.search(a[0]) div_a = re.compile("^#!wiki\sstyle="((?:(?!"|\n).)*)"\n?\s\n(.*)$", re.DOTALL) div = div_a.search(a[0]) html_a = re.compile("^#!html\s(.*)$", re.DOTALL) html = html_a.search(a[0]) fol_a = re.compile("^#!folding\s((?:(?!\n).)*)\n?\s\n(.*)$", re.DOTALL) fol = fol_a.search(a[0]) syn_a = re.compile("^#!syntax\s([^\n]*)\r\n(.*)$", re.DOTALL) syn = syn_a.search(a[0]) if(big): result = big.groups() data = com.sub('' + result[1] + '', data, 1) elif(small): result = small.groups() data = com.sub('' + result[1] + '', data, 1) elif(color): result = color.groups() data = com.sub('' + result[1] + '', data, 1) elif(color_2): result = color_2.groups() data = com.sub('' + result[1] + '', data, 1) elif(color_3): result = color_3.groups() data = com.sub('' + result[1] + '', data, 1) elif(back): result = back.groups() data = com.sub('' + result[1] + '', data, 1) elif(back_2): result = back_2.groups() data = com.sub('' + result[1] + '', data, 1) elif(back_3): result = back_3.groups() data = com.sub('' + result[1] + '', data, 1) elif(div): result = div.groups() data = com.sub('
' + result[1] + '
', data, 1) elif(html): result = html.groups() data = com.sub(result[0], data, 1) elif(fol): result = fol.groups() data = com.sub( "
\ " + result[0] + " \
\ [펼치기] \
\ \ \
", data, 1) fol_num += 3 elif(syn): result = syn.groups() data = com.sub('
' + re.sub('\r\n', '', re.sub(' ', '', result[1])) + '
', data, 1) elif(html): result = html.groups() data = com.sub(result[0], data, 1) elif(include_out): if(include == 1): data = com.sub("", data, 1) else: result = include_out.groups() data = com.sub(result[0], data, 1) else: data = com.sub('' + a[0] + '', data, 1) else: break while(1): com = re.compile("(((?!<\/code>).)*)<\/code>", re.DOTALL) y = com.search(data) if(y): a = y.groups() mid_data = re.sub("<\/span>", "}}}", a[0]) mid_data = re.sub("<\/div>", "}}}", mid_data) mid_data = re.sub('', "{{{+\g ", mid_data) mid_data = re.sub('', "{{{-\g ", mid_data) mid_data = re.sub('', "{{{#\g ", mid_data) mid_data = re.sub('', "{{{@\g ", mid_data) mid_data = re.sub('
', "{{{#!wiki style="\g"\n", mid_data) mid_data = re.sub("(?P.)", "\g", mid_data) data = com.sub(mid_data, data, 1) else: break return((data, fol_num)) def toc_pas(data, title): i = [0, 0, 0, 0, 0, 0, 0] last = 0 span = '' rtoc = '
목차

' while(1): i[0] += 1 m = re.search('(={1,6})\s?([^=]*)\s?(?:={1,6})(?:\s+)?\n', data) if(m): result = m.groups() wiki = len(result[0]) if(last < wiki): last = wiki else: last = wiki if(wiki == 1): i[2] = 0 i[3] = 0 i[4] = 0 i[5] = 0 i[6] = 0 elif(wiki == 2): i[3] = 0 i[4] = 0 i[5] = 0 i[6] = 0 elif(wiki == 3): i[4] = 0 i[5] = 0 i[6] = 0 elif(wiki == 4): i[5] = 0 i[6] = 0 elif(wiki == 5): i[6] = 0 if(wiki == 1): i[1] += 1 elif(wiki == 2): i[2] += 1 elif(wiki == 3): i[3] += 1 elif(wiki == 4): i[4] += 1 elif(wiki == 5): i[5] += 1 else: i[6] += 1 toc = str(i[1]) + '.' + str(i[2]) + '.' + str(i[3]) + '.' + str(i[4]) + '.' + str(i[5]) + '.' + str(i[6]) + '.' toc = re.sub("(?P[0-9]0(?:[0]*)?)\.", '\g#.', toc) toc = re.sub("0\.", '', toc) toc = re.sub("#\.", '.', toc) toc = re.sub("\.$", '', toc) test = re.search('([0-9]*)(\.([0-9]*))?(\.([0-9]*))?(\.([0-9]*))?(\.([0-9]*))?', toc) if(test): g = test.groups() if(g[4]): span = '' * 4 elif(g[3]): span = '' * 3 elif(g[2]): span = '' * 2 elif(g[1]): span = '' else: span = '' rtoc += span + '' + toc + '. ' + result[1] + '
' c = re.sub(" $", "", result[1]) d = c c = re.sub("\[\[(([^|]*)\|)?(?P[^\]]*)\]\]", "\g", c) data = re.sub('(={1,6})\s?([^=]*)\s?(?:={1,6})(?:\s+)?\n', '' + toc + '. ' + d + ' [편집]', data, 1) else: rtoc += '
' break data = re.sub("\[목차\]", rtoc, data) return(data) def backlink_plus(name, link, backtype, num): if(num == 1): curs.execute("select title from back where title = ? and link = ? and type = ?", [link, name, backtype]) y = curs.fetchall() if(not y): curs.execute("insert into back (title, link, type) values (?, ?, ?)", [link, name, backtype]) conn.commit() def cat_plus(name, link, num): if(num == 1): curs.execute("select title from cat where title = ? and cat = ?", [link, name]) y = curs.fetchall() if(not y): curs.execute("insert into cat (title, cat) values (?, ?)", [link, name]) conn.commit() def namumark(title, data, num): data = html_pas(data, 1) b = 0 a = mid_pas(data, b, 0) data = a[0] b = a[1] data = re.sub("\[anchor\((?P[^\[\]]*)\)\]", '', data) data = savemark(data) include = re.compile("\[include\(((?:(?!\)\]|,).)*)((?:,\s?(?:[^)]*))+)?\)\]") while(1): m = include.search(data) if(m): results = m.groups() if(results[0] == title): data = include.sub("" + results[0] + "", data, 1) else: curs.execute("select data from data where title = ?", [results[0]]) in_con = curs.fetchall() backlink_plus(title, results[0], 'include', num) if(in_con): in_data = in_con[0][0] in_data = include.sub("", in_data) in_data = html_pas(in_data, 1) in_data = mid_pas(in_data, b, 1)[0] if(results[1]): a = results[1] while(1): g = re.search("([^= ,]*)\=([^,]*)", a) if(g): result = g.groups() in_data = re.sub("@" + result[0] + "@", result[1], in_data) a = re.sub("([^= ,]*)\=([^,]*)", "", a, 1) else: break in_data = toc_pas(in_data, results[0]) data = include.sub('\n[' + results[0] + ' 이동]
' + in_data + '
\n', data, 1) else: data = include.sub("" + results[0] + "", data, 1) else: break while(1): m = re.search('^#(?:redirect|넘겨주기) ([^\n]*)$', data) if(m): results = m.groups() g = re.sub("\\\#", "", results[0]) aa = re.search("^([^\n]*)(#(?:[^\n]*))$", g) if(aa): results = aa.groups() nosharp = re.sub("", "#", results[0]) data = re.sub('^#(?:redirect|넘겨주기) ([^\n]*)$', '', data, 1) else: nosharp = re.sub("", "#", g) data = re.sub('^#(?:redirect|넘겨주기) ([^\n]*)$', '', data, 1) backlink_plus(title, results[0], 'redirect', num) else: break data = '\n' + data + '\n' data = re.sub("\[nicovideo\((?P[^,)]*)(?:(?:,(?:[^,)]*))+)?\)\]", "[[http://embed.nicovideo.jp/watch/\g]]", data) while(1): m = re.search("\n>\s?((?:[^\n]*)(?:(?:(?:(?:\n>\s?)(?:[^\n]*))+)?))", data) if(m): result = m.groups() blockquote = result[0] blockquote = re.sub("\n>\s?", "\n", blockquote) data = re.sub("\n>\s?((?:[^\n]*)(?:(?:(?:(?:\n>\s?)(?:[^\n]*))+)?))", "\n
" + blockquote + "
", data, 1) else: break if(not re.search('\[목차\]', data)): if(not re.search('\[목차\(없음\)\]', data)): data = re.sub("(?P(={1,6})\s?([^=]*)\s?(?:={1,6})(?:\s+)?\n)", "[목차]\n\g", data, 1) else: data = re.sub("\[목차\(없음\)\]", "", data) data = re.sub("(\n)(?P\r\n(={1,6})\s?([^=]*)\s?(?:={1,6})(?:\s+)?\n)", "\g", data) data = toc_pas(data, title) category = '' while(1): m = re.search("\[\[(분류:(?:(?:(?!\]\]).)*))\]\]", data) if(m): g = m.groups() if(title != g[0]): cat_plus(title, g[0], num) if(category == ''): curs.execute("select title from data where title = ?", [g[0]]) exists = curs.fetchall() if(exists): red = "" else: red = 'class="not_thing"' category += '' + re.sub("분류:", "", g[0]) + '' else: curs.execute("select title from data where title = ?", [g[0]]) exists = curs.fetchall() if(exists): red = "" else: red = 'class="not_thing"' category += ' / ' + '' + re.sub("분류:", "", g[0]) + '' data = re.sub("\[\[(분류:(?:(?:(?!\]\]).)*))\]\]", '', data, 1) else: break data = re.sub("'''(?P.+?)'''(?!')", '\g', data) data = re.sub("''(?P.+?)''(?!')", '\g', data) data = re.sub('~~(?P.+?)~~(?!~)', '\g', data) data = re.sub('--(?P.+?)--(?!-)', '\g', data) data = re.sub('__(?P.+?)__(?!_)', '\g', data) data = re.sub('\^\^(?P.+?)\^\^(?!\^)', '\g', data) data = re.sub(',,(?P.+?),,(?!,)', '\g', data) data = re.sub('<math>(?P((?!<math>).)*)<\/math>', '$\g$', data) data = re.sub('{{\|(?P(?:(?:(?:(?!\|}}).)*)(?:\n?))+)\|}}', ' \ \ \ \ \ \
\ \g \
', data) data = re.sub('\[ruby\((?P[^\,]*)\,\s?(?P[^\)]*)\)\]', ' \ \g \ ( \ \g \ ) \ ', data) data = re.sub("##\s?(?P[^\n]*)\n", "
\g
", data) test = re.findall('\[\[wiki:([^|\]]+)(?:\|([^\]]+))?\]\]', data) if(test): for wiki in test: if(wiki[1]): data = re.sub('\[\[wiki:([^|\]]+)(?:\|([^\]]+))?\]\]', '' + wiki[1] + '', data, 1) else: data = re.sub('\[\[wiki:([^|\]]+)(?:\|([^\]]+))?\]\]', '' + wiki[0] + '', data, 1) while(1): m = re.search("\[\[파일:((?:(?!\]\]|\|).)*)(?:\|((?:(?!\]\]).)*))?\]\]", data) if(m): c = m.groups() if(c): if(not re.search("^파일:([^\n]*)", title)): backlink_plus(title, '파일:' + c[0], 'file', num) comp = re.compile("^(.+)(\.(?:jpg|gif|png|jpeg))$", re.I) if(c[1]): n = re.search("width=([^ \n&]*)", c[1]) e = re.search("height=([^ \n&]*)", c[1]) if(n): a = n.groups() width = a[0] else: width = '' if(e): b = e.groups() height = b[0] else: height = '' try: extension = comp.search(c[0]).groups() comp = re.compile("\.(?Pjpg|gif|png|jpeg)", re.I) img = comp.sub("#\g#", extension[1]) data = re.sub("\[\[파일:((?:(?!\]\]|\?).)*)(?:\?((?:(?!\]\]).)*))?\]\]", '', data, 1) except: data = re.sub("\[\[파일:((?:(?!\]\]|\?).)*)(?:\?((?:(?!\]\]).)*))?\]\]", 'Error', data, 1) else: try: extension = comp.search(c[0]).groups() comp = re.compile("\.(?Pjpg|gif|png|jpeg)", re.I) img = comp.sub("#\g#", extension[1]) data = re.sub("\[\[파일:((?:(?!\]\]|\?).)*)(?:\?((?:(?!\]\]).)*))?\]\]", "", data, 1) except: data = re.sub("\[\[파일:((?:(?!\]\]|\?).)*)(?:\?((?:(?!\]\]).)*))?\]\]", 'Error', data, 1) else: break else: break data = re.sub("\[br\]",'
', data) while(1): com = re.compile("\[youtube\(([^, )]*)(,[^)]*)?\)\]") m = com.search(data) if(m): src = '' width = '560' height = '315' time = '0' result = m.groups() if(result[0]): yudt = re.search('(?:\?v=(.*)|\/([^/?]*)|^([a-zA-Z0-9\-]*))$', result[0]) if(yudt): if(yudt.groups()[0]): src = yudt.groups()[0] elif(yudt.groups()[1]): src = yudt.groups()[1] elif(yudt.groups()[2]): src = yudt.groups()[2] else: src = '' if(result[1]): mdata = re.search('width=([0-9]*)', result[1]) if(mdata): width = mdata.groups()[0] mdata = re.search('height=([0-9]*)', result[1]) if(mdata): height = mdata.groups()[0] mdata = re.search('time=([0-9]*)', result[1]) if(mdata): time = mdata.groups()[0] data = com.sub('
', data, 1) else: break data = re.sub("\[\[(?::(?P(?:분류|파일):(?:(?:(?!\]\]).)*)))\]\]", "[[\g]]", data) a = re.findall('\[\[\.\.\/(\|(?:[^\]]*))?\]\]', data) for i in a: b = re.search('(.*)\/', title) if(b): m = b.groups() if(i): data = re.sub('\[\[\.\.\/(\|(?:[^\]]*))?\]\]', '[[' + m[0] + i + ']]', data, 1) else: data = re.sub('\[\[\.\.\/(\|(?:[^\]]*))?\]\]', '[[' + m[0] + ']]', data, 1) else: if(i): data = re.sub('\[\[\.\.\/(\|(?:[^\]]*))?\]\]', '[[' + title + i + ']]', data, 1) else: data = re.sub('\[\[\.\.\/(\|(?:[^\]]*))?\]\]', '[[' + title + ']]', data, 1) data = re.sub('\[\[(?P\/[^\]|]*)(?P\|(?:[^\]]*))?\]\]', '[[' + title + '\g\g]]', data) while(1): m = re.search("\[\[(((?!\]\]).)*)\]\]", data) if(m): result = m.groups() rep = result[0] rep = re.sub("\\\#", "", rep) a = re.search("^((?:(?!\|).)*)(?:\|(.*))?$", rep) results = a.groups() aa = re.search("^([^#]*)(#(?:.*))?$", results[0]) if(results[1]): g = re.sub("", "#", results[1]) else: g = re.sub("", "#", results[0]) results = aa.groups() if(not results[1]): sharp = '' else: sharp = results[1] b = re.search("^http(?:s)?:\/\/", results[0]) if(b): comp = re.compile("(?:\.(?:jpg|png|gif|jpeg))", re.I) c = comp.search(results[0]) if(c): img = results[0] comp = re.compile("\.(?Pjpg|gif|png|jpeg)", re.I) img = comp.sub("#\g#", img) data = re.sub('\[\[(((?!\]\]).)*)\]\]', '' + g + '', data, 1) else: data = re.sub('\[\[(((?!\]\]).)*)\]\]', '' + g + '', data, 1) else: if(results[0] == title): data = re.sub('\[\[(((?!\]\]).)*)\]\]', '' + g + '', data, 1) else: nosharp = re.sub("", "#", results[0]) curs.execute("select title from data where title = ?", [nosharp]) y = curs.fetchall() if(y): clas = '' else: clas = 'not_thing' data = re.sub('\[\[(((?!\]\]).)*)\]\]', '' + g + '', data, 1) backlink_plus(title, results[0], '', num) else: break while(1): com = re.compile("(http(?:s)?:\/\/(?:(?:(?:(?!\.(?:jpg|png|gif|jpeg)|#(?:jpg|png|gif|jpeg)#|<\/(?:[^>]*)>).)*)(?:\.(?:jpg|png|gif|jpeg))))(\?[^ \r\n]*)?", re.I) m = com.search(data) if(m): width = '' height = '' align = '' result = m.groups() if(result[1]): mdata = re.search('width=([0-9]*)', result[1]) if(mdata): width = mdata.groups()[0] mdata = re.search('height=([0-9]*)', result[1]) if(mdata): height = mdata.groups()[0] mdata = re.search('align=([^&]*)', result[1]) if(mdata): if(mdata.groups()[0] == 'right'): align = 'right' elif(mdata.groups()[0] == 'center'): align = 'center' c = result[0] comp = re.compile("\.(?Pjpg|gif|png|jpeg)", re.I) c = comp.sub("#\g#", c) data = com.sub("", data, 1) else: break while(1): m = re.search("((?:(?:( +)\*\s(?:[^\n]*))\n?)+)", data) if(m): result = m.groups() end = str(result[0]) while(1): isspace = re.search("( +)\*\s([^\n]*)", end) if(isspace): spacebar = isspace.groups() up = len(spacebar[0]) * 20 end = re.sub("( +)\*\s([^\n]*)", "
  • " + spacebar[1] + "
  • ", end, 1) else: break end = re.sub("\n", '', end) data = re.sub("(?:(?:(?:( +)\*\s([^\n]*))\n?)+)", '
      ' + end + '
    ', data, 1) else: break now_time = get_time() data = re.sub('\[date\]', now_time, data) time_data = re.search('^([0-9]{4})-([0-9]{2})-([0-9]{2})', now_time) time = time_data.groups() age_data = re.findall('\[age\(([0-9]{4})-([0-9]{2})-([0-9]{2})\)\]', data) for age in age_data: year = int(time[0]) - int(age[0]) if(age[1] > time[1]): year -= 1 elif(age[1] == time[1]): if(age[2] > time[2]): year -= 1 data = re.sub('\[age\(([0-9]{4})-([0-9]{2})-([0-9]{2})\)\]', str(year), data, 1) comp = re.compile("#(?Pjpg|gif|png|jpeg)#", re.I) data = comp.sub(".\g", data) data = re.sub("-{4,11}", "
    ", data) while(1): b = re.search("(<\/h[0-9]>|\n)( +)", data) if(b): result = b.groups() up = re.sub(' ', '', result[1]) if(re.search('<\/h[0-9]>', result[0])): data = re.sub("(?P\/h[0-9]>)( +)", '\g' + up, data, 1) else: data = re.sub("(?:\n)( +)", '
    ' + up, data, 1) else: break a = 1 tou = "

    " namu = [] while(1): b = re.search("\[\*([^\s]*)(?:\s(((?!\[|\]).)*))?\]", data) if(b): results = b.groups() if(not results[1] and results[0]): i = 0 while(1): try: if(namu[i] == results[0]): none_this = 0 break else: i += 2 except: none_this = 1 break if(none_this == 0): data = re.sub("\[\*([^\s]*)(?:\s(((?!\[|\]).)*))?\]", "[" + results[0] + "]", data, 1) else: data = re.sub("\[\*([^\s]*)(?:\s(((?!\[|\]).)*))?\]", "[" + results[0] + "]", data, 1) elif(results[0]): namu += [results[0]] namu += [results[1]] c = results[1] c = re.sub("<(?:[^>]*)>", '', c) tou += "[" + results[0] + "] " + results[1] + "
    " data = re.sub("\[\*([^\s]*)(?:\s(((?!\[|\]).)*))?\]", "[" + results[0] + "]", data, 1) a += 1 else: c = results[1] c = re.sub("<(?:[^>]*)>", '', c) tou += "[" + str(a) + "] " + results[1] + "
    " data = re.sub("\[\*([^\s]*)(?:\s(((?!\[|\]).)*))?\]", '[' + str(a) + ']', data, 1) a += 1 else: tou += '
    ' if(tou == "

    "): tou = "" break data = re.sub("\[각주\](?:(?:
    | |\r|\n)+)?$", "", data) data = re.sub("(?:(?:
    | |\r|\n)+)$", "", data) data = re.sub("\[각주\]", "
    " + tou, data) data += tou if(category): data += '
    분류: ' + category + '
    ' data = re.sub("(?:\|\|\r\n)", "#table#", data) while(1): y = re.search("(\|\|(?:(?:(?:(?:(?!\|\|).)*)(?:\n?))+))", data) if(y): a = y.groups() mid_data = re.sub("\|\|", "#table#", a[0]) mid_data = re.sub("\r\n", "
    ", mid_data) data = re.sub("(\|\|((?:(?:(?:(?!\|\|).)*)(?:\n?))+))", mid_data, data, 1) else: break data = re.sub("#table#", "||", data) data = re.sub("", "\r\n", data) while(1): m = re.search("(\|\|(?:(?:(?:.*)\n?)\|\|)+)", data) if(m): results = m.groups() table = results[0] while(1): a = re.search("^(\|\|(?:(?:\|\|)+)?)((?:<(?:(?:(?!>).)*)>)+)?", table) if(a): row = '' cel = '' celstyle = '' rowstyle = '' alltable = '' result = a.groups() if(result[1]): alltable = 'style="' celstyle = 'style="' rowstyle = 'style="' q = re.search("<table\s?width=((?:(?!>).)*)>", result[1]) w = re.search("<table\s?height=((?:(?!>).)*)>", result[1]) e = re.search("<table\s?align=((?:(?!>).)*)>", result[1]) if(q): resultss = q.groups() alltable += 'width:' + resultss[0] + ';' if(w): resultss = w.groups() alltable += 'height:' + resultss[0] + ';' if(e): resultss = e.groups() if(resultss[0] == 'right'): alltable += 'float:right;' elif(resultss[0] == 'center'): alltable += 'margin:auto;' ee = re.search("<table\s?textalign=((?:(?!>).)*)>", result[1]) if(ee): resultss = ee.groups() if(resultss[0] == 'right'): alltable += 'text-align:right;' elif(resultss[0] == 'center'): alltable += 'text-align:center;' r = re.search("<-((?:(?!>).)*)>", result[1]) if(r): resultss = r.groups() cel = 'colspan="' + resultss[0] + '"' else: cel = 'colspan="' + str(round(len(result[0]) / 2)) + '"' t = re.search("<\|((?:(?!>).)*)>", result[1]) if(t): resultss = t.groups() row = 'rowspan="' + resultss[0] + '"' ba = re.search("<rowbgcolor=(#[0-9a-f-A-F]{6})>", result[1]) bb = re.search("<rowbgcolor=(#[0-9a-f-A-F]{3})>", result[1]) bc = re.search("<rowbgcolor=(\w+)>", result[1]) if(ba): resultss = ba.groups() rowstyle += 'background:' + resultss[0] + ';' elif(bb): resultss = bb.groups() rowstyle += 'background:' + resultss[0] + ';' elif(bc): resultss = bc.groups() rowstyle += 'background:' + resultss[0] + ';' z = re.search("<table\s?bordercolor=(#[0-9a-f-A-F]{6})>", result[1]) x = re.search("<table\s?bordercolor=(#[0-9a-f-A-F]{3})>", result[1]) c = re.search("<table\s?bordercolor=(\w+)>", result[1]) if(z): resultss = z.groups() alltable += 'border:' + resultss[0] + ' 2px solid;' elif(x): resultss = x.groups() alltable += 'border:' + resultss[0] + ' 2px solid;' elif(c): resultss = c.groups() alltable += 'border:' + resultss[0] + ' 2px solid;' aq = re.search("<table\s?bgcolor=(#[0-9a-f-A-F]{6})>", result[1]) aw = re.search("<table\s?bgcolor=(#[0-9a-f-A-F]{3})>", result[1]) ae = re.search("<table\s?bgcolor=(\w+)>", result[1]) if(aq): resultss = aq.groups() alltable += 'background:' + resultss[0] + ';' elif(aw): resultss = aw.groups() alltable += 'background:' + resultss[0] + ';' elif(ae): resultss = ae.groups() alltable += 'background:' + resultss[0] + ';' j = re.search("<bgcolor=(#[0-9a-f-A-F]{6})>", result[1]) k = re.search("<bgcolor=(#[0-9a-f-A-F]{3})>", result[1]) l = re.search("<bgcolor=(\w+)>", result[1]) if(j): resultss = j.groups() celstyle += 'background:' + resultss[0] + ';' elif(k): resultss = k.groups() celstyle += 'background:' + resultss[0] + ';' elif(l): resultss = l.groups() celstyle += 'background:' + resultss[0] + ';' aa = re.search("<(#[0-9a-f-A-F]{6})>", result[1]) ab = re.search("<(#[0-9a-f-A-F]{3})>", result[1]) ac = re.search("<(\w+)>", result[1]) if(aa): resultss = aa.groups() celstyle += 'background:' + resultss[0] + ';' elif(ab): resultss = ab.groups() celstyle += 'background:' + resultss[0] + ';' elif(ac): resultss = ac.groups() celstyle += 'background:' + resultss[0] + ';' qa = re.search("<width=((?:(?!>).)*)>", result[1]) qb = re.search("<height=((?:(?!>).)*)>", result[1]) if(qa): resultss = qa.groups() celstyle += 'width:' + resultss[0] + ';' if(qb): resultss = qb.groups() celstyle += 'height:' + resultss[0] + ';' i = re.search("<\)>", result[1]) o = re.search("<:>", result[1]) p = re.search("<\(>", result[1]) if(i): celstyle += 'text-align:right;' elif(o): celstyle += 'text-align:center;' elif(p): celstyle += 'text-align:left;' alltable += '"' celstyle += '"' rowstyle += '"' table = re.sub("^(\|\|(?:(?:\|\|)+)?)((?:<(?:(?:(?!>).)*)>)+)?", " \ \ \ \ \ \ \ \ \ \ \
    ", table, 1) else: cel = 'colspan="' + str(round(len(result[0]) / 2)) + '"' table = re.sub("^(\|\|(?:(?:\|\|)+)?)((?:<(?:(?:(?!>).)*)>)+)?", " \ \ \ \ \ \
    ", table, 1) else: break table = re.sub("\|\|$", "
    ", table) while(1): b = re.search("\|\|\r\n(\|\|(?:(?:\|\|)+)?)((?:<(?:(?:(?!>).)*)>)+)?", table) if(b): row = '' cel = '' celstyle = '' rowstyle = '' result = b.groups() if(result[1]): celstyle = 'style="' rowstyle = 'style="' r = re.search("<-((?:(?!>).)*)>", result[1]) if(r): resultss = r.groups() cel = 'colspan="' + resultss[0] + '"' else: cel = 'colspan="' + str(round(len(result[0]) / 2)) + '"' t = re.search("<\|((?:(?!>).)*)>", result[1]) if(t): resultss = t.groups() row = 'rowspan="' + resultss[0] + '"' ba = re.search("<rowbgcolor=(#[0-9a-f-A-F]{6})>", result[1]) bb = re.search("<rowbgcolor=(#[0-9a-f-A-F]{3})>", result[1]) bc = re.search("<rowbgcolor=(\w+)>", result[1]) if(ba): resultss = ba.groups() rowstyle = rowstyle + 'background:' + resultss[0] + ';' elif(bb): resultss = bb.groups() rowstyle = rowstyle + 'background:' + resultss[0] + ';' elif(bc): resultss = bc.groups() rowstyle = rowstyle + 'background:' + resultss[0] + ';' j = re.search("<bgcolor=(#[0-9a-f-A-F]{6})>", result[1]) k = re.search("<bgcolor=(#[0-9a-f-A-F]{3})>", result[1]) l = re.search("<bgcolor=(\w+)>", result[1]) if(j): resultss = j.groups() celstyle = celstyle + 'background:' + resultss[0] + ';' elif(k): resultss = k.groups() celstyle = celstyle + 'background:' + resultss[0] + ';' elif(l): resultss = l.groups() celstyle = celstyle + 'background:' + resultss[0] + ';' aa = re.search("<(#[0-9a-f-A-F]{6})>", result[1]) ab = re.search("<(#[0-9a-f-A-F]{3})>", result[1]) ac = re.search("<(\w+)>", result[1]) if(aa): resultss = aa.groups() celstyle = celstyle + 'background:' + resultss[0] + ';' elif(ab): resultss = ab.groups() celstyle = celstyle + 'background:' + resultss[0] + ';' elif(ac): resultss = ac.groups() celstyle = celstyle + 'background:' + resultss[0] + ';' qa = re.search("<width=((?:(?!>).)*)>", result[1]) qb = re.search("<height=((?:(?!>).)*)>", result[1]) if(qa): resultss = qa.groups() celstyle = celstyle + 'width:' + resultss[0] + ';' if(qb): resultss = qb.groups() celstyle = celstyle + 'height:' + resultss[0] + ';' i = re.search("<\)>", result[1]) o = re.search("<:>", result[1]) p = re.search("<\(>", result[1]) if(i): celstyle = celstyle + 'text-align:right;' elif(o): celstyle = celstyle + 'text-align:center;' elif(p): celstyle = celstyle + 'text-align:left;' celstyle = celstyle + '"' rowstyle = rowstyle + '"' table = re.sub("\|\|\r\n(\|\|(?:(?:\|\|)+)?)((?:<(?:(?:(?!>).)*)>)+)?", "
    ", table, 1) else: cel = 'colspan="' + str(round(len(result[0]) / 2)) + '"' table = re.sub("\|\|\r\n(\|\|(?:(?:\|\|)+)?)((?:<(?:(?:(?!>).)*)>)+)?", "
    ", table, 1) else: break while(1): c = re.search("(\|\|(?:(?:\|\|)+)?)((?:<(?:(?:(?!>).)*)>)+)?", table) if(c): row = '' cel = '' celstyle = '' result = c.groups() if(result[1]): celstyle = 'style="' r = re.search("<-((?:(?!>).)*)>", result[1]) if(r): resultss = r.groups() cel = 'colspan="' + resultss[0] + '"' else: cel = 'colspan="' + str(round(len(result[0]) / 2)) + '"' t = re.search("<\|((?:(?!>).)*)>", result[1]) if(t): resultss = t.groups() row = 'rowspan="' + resultss[0] + '"' j = re.search("<bgcolor=(#[0-9a-f-A-F]{6})>", result[1]) k = re.search("<bgcolor=(#[0-9a-f-A-F]{3})>", result[1]) l = re.search("<bgcolor=(\w+)>", result[1]) if(j): resultss = j.groups() celstyle = celstyle + 'background:' + resultss[0] + ';' elif(k): resultss = k.groups() celstyle = celstyle + 'background:' + resultss[0] + ';' elif(l): resultss = l.groups() celstyle = celstyle + 'background:' + resultss[0] + ';' aa = re.search("<(#[0-9a-f-A-F]{6})>", result[1]) ab = re.search("<(#[0-9a-f-A-F]{3})>", result[1]) ac = re.search("<(\w+)>", result[1]) if(aa): resultss = aa.groups() celstyle = celstyle + 'background:' + resultss[0] + ';' elif(ab): resultss = ab.groups() celstyle = celstyle + 'background:' + resultss[0] + ';' elif(ac): resultss = ac.groups() celstyle = celstyle + 'background:' + resultss[0] + ';' qa = re.search("<width=((?:(?!>).)*)>", result[1]) qb = re.search("<height=((?:(?!>).)*)>", result[1]) if(qa): resultss = qa.groups() celstyle = celstyle + 'width:' + resultss[0] + ';' if(qb): resultss = qb.groups() celstyle = celstyle + 'height:' + resultss[0] + ';' i = re.search("<\)>", result[1]) o = re.search("<:>", result[1]) p = re.search("<\(>", result[1]) if(i): celstyle = celstyle + 'text-align:right;' elif(o): celstyle = celstyle + 'text-align:center;' elif(p): celstyle = celstyle + 'text-align:left;' celstyle = celstyle + '"' table = re.sub("(\|\|(?:(?:\|\|)+)?)((?:<(?:(?:(?!>).)*)>)+)?", "", table, 1) else: cel = 'colspan="' + str(round(len(result[0]) / 2)) + '"' table = re.sub("(\|\|(?:(?:\|\|)+)?)((?:<(?:(?:(?!>).)*)>)+)?", "", table, 1) else: break data = re.sub("(\|\|(?:(?:(?:.*)\n?)\|\|)+)", table, data, 1) else: break data = re.sub("\r\n(?P", data) data = re.sub("(\n|\n|)", "", data) data = re.sub("(?P.)<\/nowiki>", "\g", data) data = re.sub("", " ", data) data = re.sub('<\/blockquote>(?:(?:\r)?\n){2}
    ', '
    ', data) data = re.sub('<\/blockquote>(?:(?:\r)?\n)
    ', '
    ', data) data = re.sub('\n', '
    ', data) data = re.sub('', '\r\n', data) data = re.sub('^
    ', '', data) data += "" return(data)