from . import tool
import datetime
import html
import re
def table_parser(data, cel_data, start_data, num = 0):
table_class = 'class="'
all_table = 'style="'
cel_style = 'style="'
row_style = 'style="'
row = ''
cel = ''
table_width = re.search("<table ?width=((?:(?!>).)*)>", data)
if table_width:
if re.search('^[0-9]+$', table_width.groups()[0]):
all_table += 'width: ' + table_width.groups()[0] + 'px;'
else:
all_table += 'width: ' + table_width.groups()[0] + ';'
table_height = re.search("<table ?height=((?:(?!>).)*)>", data)
if table_height:
if re.search('^[0-9]+$', table_height.groups()[0]):
all_table += 'height: ' + table_height.groups()[0] + 'px;'
else:
all_table += 'height: ' + table_height.groups()[0] + ';'
table_align = re.search("<table ?align=((?:(?!>).)*)>", data)
if table_align:
if table_align.groups()[0] == 'right':
all_table += 'float: right;'
elif table_align.groups()[0] == 'center':
all_table += 'margin: auto;'
table_text_align = re.search("<table ?textalign=((?:(?!>).)*)>", data)
if table_text_align:
num = 1
if table_text_align.groups()[0] == 'right':
all_table += 'text-align: right;'
elif table_text_align.groups()[0] == 'center':
all_table += 'text-align: center;'
row_table_align = re.search("<row ?textalign=((?:(?!>).)*)>", data)
if row_table_align:
if row_table_align.groups()[0] == 'right':
row_style += 'text-align: right;'
elif row_table_align.groups()[0] == 'center':
row_style += 'text-align: center;'
else:
row_style += 'text-align: left;'
table_cel = re.search("<-((?:(?!>).)*)>", data)
if table_cel:
cel = 'colspan="' + table_cel.groups()[0] + '"'
else:
cel = 'colspan="' + str(round(len(start_data) / 2)) + '"'
table_row = re.search("<\|((?:(?!>).)*)>", data)
if table_row:
row = 'rowspan="' + table_row.groups()[0] + '"'
row_bgcolor = re.search("<rowbgcolor=(#(?:[0-9a-f-A-F]{3}){1,2}|\w+)>", data)
if row_bgcolor:
row_style += 'background: ' + row_bgcolor.groups()[0] + ';'
table_border = re.search("<table ?bordercolor=(#(?:[0-9a-f-A-F]{3}){1,2}|\w+)>", data)
if table_border:
all_table += 'border: ' + table_border.groups()[0] + ' 2px solid;'
table_bgcolor = re.search("<table ?bgcolor=(#(?:[0-9a-f-A-F]{3}){1,2}|\w+)>", data)
if table_bgcolor:
all_table += 'background: ' + table_bgcolor.groups()[0] + ';'
bgcolor = re.search("<(?:bgcolor=)?(#(?:[0-9a-f-A-F]{3}){1,2}|\w+)>", data)
if bgcolor:
cel_style += 'background: ' + bgcolor.groups()[0] + ';'
cel_width = re.search("<width=((?:(?!>).)*)>", data)
if cel_width:
cel_style += 'width: ' + cel_width.groups()[0] + 'px;'
cel_height = re.search("<height=((?:(?!>).)*)>", data)
if cel_height:
cel_style += 'height: ' + cel_height.groups()[0] + 'px;'
text_right = re.search("<\)>", data)
text_center = re.search("<:>", data)
text_left = re.search("<\(>", data)
if text_right:
cel_style += 'text-align: right;'
elif text_center:
cel_style += 'text-align: center;'
elif text_left:
cel_style += 'text-align: left;'
elif num == 0:
if re.search('^ ', cel_data) and re.search(' $', cel_data):
cel_style += 'text-align: center;'
elif re.search('^ ', cel_data):
cel_style += 'text-align: right;'
elif re.search(' $', cel_data):
cel_style += 'text-align: left;'
text_class = re.search("<table ?class=((?:(?!>).)+)>", data)
if text_class:
table_class += text_class.groups()[0]
all_table += '"'
cel_style += '"'
row_style += '"'
table_class += '"'
return [all_table, row_style, cel_style, row, cel, table_class, num]
def table_start(data):
while 1:
table = re.search('\n((?:(?:(?:(?:\|\|)+(?:(?:(?!\|\|).(?:\n)*)*))+)\|\|(?:\n)?)+)', data)
if table:
table = table.groups()[0]
while 1:
all_table = re.search('^((?:\|\|)+)((?:<(?:(?:(?!>).)+)>)*)\n*((?:(?!\|\|).\n*)*)', table)
if all_table:
all_table = all_table.groups()
return_table = table_parser(all_table[1], all_table[2], all_table[0])
number = return_table[6]
table = re.sub('^((?:\|\|)+)((?:<(?:(?:(?!>).)+)>)*)\n*', '\n
| ', table, 1)
else:
break
while 1:
cel_table = re.search('((?:\|\|)+)((?:<(?:(?:(?!>).)+)>)*)\n*((?:(?:(?!\|\||<\/td>).)|\n)*\n*)', table)
if cel_table:
cel_table = cel_table.groups()
return_table = table_parser(cel_table[1], re.sub('\n', ' ', cel_table[2]), cel_table[0], number)
table = re.sub('((?:\|\|)+)((?:<(?:(?:(?!>).)+)>)*)\n*', ' | ', table, 1)
else:
break
data = re.sub('\n((?:(?:(?:(?:\|\|)+(?:(?:(?!\|\|).(?:\n)*)*))+)\|\|(?:\n)?)+)', table, data, 1)
else:
break
return data
def middle_parser(data, fol_num, syntax_num, folding_num):
global end_data
global plus_data
middle_stack = 0
middle_list = []
middle_number = 0
middle_re = re.compile('(?:{{{((?:(?:(?! |{{{|}}}|<).)*) ?)|(}}}))')
while 1:
middle_data = middle_re.search(data)
if middle_data:
middle_data = middle_data.groups()
if not middle_data[1]:
if middle_stack > 0:
middle_stack += 1
data = re.sub('(?:{{{((?:(?! |{{{|}}}|<).)*)(?P ?)|(}}}))', '{{{' + middle_data[0] + '\g', data, 1)
else:
if re.search('^(#|@|\+|\-)', middle_data[0]) and not re.search('^(#|@|\+|\-){2}', middle_data[0]):
middle_search = re.search('^(#(?:[0-9a-f-A-F]{3}){1,2})', middle_data[0])
if middle_search:
middle_list += ['span']
data = middle_re.sub('', data, 1)
else:
middle_search = re.search('^(?:#(\w+))', middle_data[0])
if middle_search:
middle_list += ['span']
data = middle_re.sub('', data, 1)
else:
middle_search = re.search('^(?:@((?:[0-9a-f-A-F]{3}){1,2}))', middle_data[0])
if middle_search:
middle_list += ['span']
data = middle_re.sub('', data, 1)
else:
middle_search = re.search('^(?:@(\w+))', middle_data[0])
if middle_search:
middle_list += ['span']
data = middle_re.sub('', data, 1)
else:
middle_search = re.search('^(\+|-)([1-5])', middle_data[0])
if middle_search:
middle_search = middle_search.groups()
if middle_search[0] == '+':
font_size = str(int(middle_search[1]) * 20 + 100)
else:
font_size = str(100 - int(middle_search[1]) * 10)
middle_list += ['span']
data = middle_re.sub('', data, 1)
else:
middle_search = re.search('^#!wiki', middle_data[0])
if middle_search:
middle_data_2 = re.search('{{{#!wiki(?: style=(?:"|')((?:(?!"|').)*)(?:"|'))?\n?', data)
if middle_data_2:
middle_data_2 = middle_data_2.groups()
else:
middle_data_2 = ['']
middle_list += ['div_end']
data = re.sub('{{{#!wiki(?: style=(?:"|')((?:(?!"|').)*)(?:"|'))?\n?', '', data, 1)
else:
middle_search = re.search('^#!syntax', middle_data[0])
if middle_search:
middle_data_2 = re.search('{{{#!syntax ((?:(?!\n).)+)\n?', data)
if middle_data_2:
middle_data_2 = middle_data_2.groups()
else:
middle_data_2 = ['python']
if syntax_num == 0:
plus_data += '''
'''
syntax_num = 1
middle_list += ['pre']
data = re.sub('{{{#!syntax ?((?:(?!\n).)*)\n?', ' ', data, 1)
else:
middle_search = re.search('^#!folding', middle_data[0])
if middle_search:
middle_list += ['2div']
folding_data = re.search('{{{#!folding ?((?:(?!\n).)*)\n?', data)
if folding_data:
folding_data = folding_data.groups()
else:
folding_data = ['Test']
if folding_num == 0:
folding_num = 1
data = re.sub('{{{#!folding ?((?:(?!\n).)*)\n?', '' + str(folding_data[0]) + ' [do]', data, 1)
fol_num += 1
else:
middle_list += ['span']
data = middle_re.sub(' ', data, 1)
else:
middle_list += ['code']
middle_stack += 1
data = middle_re.sub('' + middle_data[0].replace('\\', '\\\\'), data, 1)
middle_number += 1
else:
if middle_list == []:
data = middle_re.sub('}}}', data, 1)
else:
if middle_stack > 0:
middle_stack -= 1
if middle_stack > 0:
data = middle_re.sub('}}}', data, 1)
else:
if middle_number > 0:
middle_number -= 1
if middle_list[middle_number] == '2div':
data = middle_re.sub('', data, 1)
elif middle_list[middle_number] == 'pre':
data = middle_re.sub('', data, 1)
else:
data = middle_re.sub('' + middle_list[middle_number] + '>', data, 1)
del(middle_list[middle_number])
else:
if middle_stack == 0:
break
else:
if middle_list == []:
data += '}}}'
else:
if middle_stack > 0:
middle_stack -= 1
if middle_stack > 0:
data += '}}}'
else:
if middle_number > 0:
middle_number -= 1
if middle_list[middle_number] == '2div':
data += ''
elif middle_list[middle_number] == 'pre':
data += ''
else:
data += '' + middle_list[middle_number] + '>'
del(middle_list[middle_number])
num = 0
while 1:
nowiki_data = re.search('((?:(?:(?!<\/code>).)*\n*)*)<\/code>', data)
if nowiki_data:
nowiki_data = nowiki_data.groups()
num += 1
end_data += [['nowiki_' + str(num), nowiki_data[0], 'code']]
data = re.sub('((?:(?:(?!<\/code>).)*\n*)*)<\/code>', '', data, 1)
else:
break
num = 0
while 1:
syntax_data = re.search('((?:(?:(?:(?!<\/code>|((?:(?:(?:(?!<\/code>|', data, 1)
else:
break
return [data, [fol_num, syntax_num, folding_num]]
def link_fix(main_link):
if re.search('^:', main_link):
main_link = re.sub('^:', '', main_link)
main_link = re.sub('^사용자:', 'user:', main_link)
main_link = re.sub('^파일:', 'file:', main_link)
main_link = re.sub('^분류:', 'category:', main_link)
other_link = re.search('(#.+)$', main_link)
if other_link:
other_link = other_link.groups()[0]
main_link = re.sub('(#.+)$', '', main_link)
else:
other_link = ''
return [main_link, other_link]
def namu(conn, data, title, main_num):
curs = conn.cursor()
global plus_data
global end_data
data = '\n' + data + '\n'
plus_data = ''
backlink = []
end_data = []
data = re.sub('
| ', data)
data = re.sub('\n', '', data)
data = re.sub('\n<\/include>', '', data)
data = re.sub('(?P<\/h[0-9]>)(\n)+', '\g', data)
data = re.sub('\n\n', '\n', data)
data = re.sub('<\/ul>\n\n', '
', data)
data = re.sub('^(\n)+', '', data)
data = re.sub('(\n)+