\n', data, 1)
else:
break
# 들여쓰기 구현
while 1:
indent = re.search('\n( +)', data)
if indent:
indent = len(indent.groups()[0])
# 앞에 공백 만큼 margin 먹임
margin = '' * indent
data = re.sub('\n( +)', '\n' + margin, data, 1)
else:
break
# 표 처리
data = table_start(data)
# 하위 문서
while 1:
under_link = re.search('\[\[\.\.\/(?:\|((?:(?!]]).)+))?]]', data)
if under_link:
under_link = under_link.groups()
title_data = re.search('^(.+)\/(?:(?:(?!\/).)+)$', title)
if title_data:
title_data = title_data.groups()[0]
if under_link[0]:
data = re.sub('\[\[\.\.\/(?:\|((?:(?!]]).)+))?]]', '[[' + title_data + '|' + under_link[0] + ']]', data, 1)
else:
data = re.sub('\[\[\.\.\/(?:\|((?:(?!]]).)+))?]]', '[[' + title_data + ']]', data, 1)
else:
if under_link[0]:
data = re.sub('\[\[\.\.\/(?:\|((?:(?!]]).)+))?]]', '[[' + title + '|' + under_link[0] + ']]', data, 1)
else:
data = re.sub('\[\[\.\.\/(?:\|((?:(?!]]).)+))?]]', '[[' + title + ']]', data, 1)
else:
break
# 링크 관련 문법 구현
category = '\n
분류: '
while 1:
link = re.search('\[\[((?:(?!\[\[|\]\]).)+)\]\]', data)
if link:
link = link.groups()[0]
link_split = re.search('((?:(?!\|).)+)(?:\|((?:(?!\|).)+))', link)
if link_split:
link_split = link_split.groups()
main_link = link_split[0]
see_link = link_split[1]
else:
main_link = link
see_link = link
if re.search('^(파일|외부):', main_link):
file_style = ''
width = re.search('width=((?:(?!&).)+)', see_link)
if width:
file_width = width.groups()[0]
if re.search('px$', file_width):
file_style += 'width: ' + file_width + ';'
else:
file_style += 'width: ' + file_width + 'px;'
height = re.search('height=((?:(?!&).)+)', see_link)
if height:
file_height = height.groups()[0]
if re.search('px$', file_height):
file_style += 'height: ' + file_height + ';'
else:
file_style += 'height: ' + file_height + 'px;'
align = re.search('align=((?:(?!&).)+)', see_link)
if align:
file_align = align.groups()[0]
if file_align == 'center':
file_align = 'display: block; text-align: center;'
else:
file_align = 'float: ' + file_align + ';'
else:
file_align = ''
if re.search('^외부:', main_link):
file_src = re.sub('^외부:', '', main_link)
file_alt = main_link
exist = 'Yes'
else:
file_data = re.search('^파일:((?:(?!\.).)+)\.(.+)$', main_link)
if file_data:
file_data = file_data.groups()
file_name = file_data[0]
file_end = file_data[1]
backlink += [[title, main_link, 'file']]
else:
file_name = 'TEST'
file_end = 'jpg'
file_src = '/image/' + tool.sha224(file_name) + '.' + file_end
file_alt = '파일:' + file_name + '.' + file_end
curs.execute("select title from data where title = ?", [file_alt])
exist = curs.fetchall()
if exist:
data = re.sub('\[\[((?:(?!\[\[|\]\]).)+)\]\]', '', data, 1)
else:
data = re.sub('\[\[((?:(?!\[\[|\]\]).)+)\]\]', '' + file_alt + '', data, 1)
elif re.search('^분류:', main_link):
see_link = re.sub('#include', '', see_link)
main_link = re.sub('#include', '', main_link)
if re.search('#blur', main_link):
see_link = '스포일러'
link_id = 'id="inside"'
main_link = re.sub('#blur', '', main_link)
else:
link_id = ''
backlink += [[title, main_link, 'cat']]
category += '' + re.sub('^분류:', '', see_link) + ' / '
data = re.sub('\[\[((?:(?!\[\[|\]\]).)+)\]\]', '', data, 1)
elif re.search('^wiki:', main_link):
data = re.sub('\[\[((?:(?!\[\[|\]\]).)+)\]\]', '' + see_link + '', data, 1)
elif re.search('^inter:((?:(?!:).)+):', main_link):
inter_data = re.search('^inter:((?:(?!:).)+):((?:(?!\]\]|\|).)+)', main_link)
inter_data = inter_data.groups()
curs.execute('select link from inter where title = ?', [inter_data[0]])
inter = curs.fetchall()
if inter:
if see_link != main_link:
data = re.sub('\[\[((?:(?!\[\[|\]\]).)+)\]\]', '' + inter_data[0] + ':' + see_link + '', data, 1)
else:
data = re.sub('\[\[((?:(?!\[\[|\]\]).)+)\]\]', '' + inter_data[0] + ':' + inter_data[1] + '', data, 1)
else:
data = re.sub('\[\[((?:(?!\[\[|\]\]).)+)\]\]', '인터위키 정보 없음', data, 1)
elif re.search('^\/', main_link):
under_title = re.search('^(\/(?:.+))$', main_link)
under_title = under_title.groups()[0]
if see_link != main_link:
data = re.sub('\[\[((?:(?!\[\[|\]\]).)+)\]\]', '[[' + title + under_title + '|' + see_link + ']]', data, 1)
else:
data = re.sub('\[\[((?:(?!\[\[|\]\]).)+)\]\]', '[[' + title + under_title + ']]', data, 1)
elif re.search('^http(s)?:\/\/', main_link):
data = re.sub('\[\[((?:(?!\[\[|\]\]).)+)\]\]', '' + see_link + '', data, 1)
else:
return_link = link_fix(main_link)
main_link = return_link[0]
other_link = return_link[1]
if not re.search('^\|', main_link):
if main_link != title:
if main_link != '':
curs.execute("select title from data where title = ?", [main_link])
if not curs.fetchall():
link_id = 'id="not_thing"'
backlink += [[title, main_link, 'no']]
else:
link_id = ''
backlink += [[title, main_link, '']]
data = re.sub('\[\[((?:(?!\[\[|\]\]).)+)\]\]', '' + see_link + '', data, 1)
else:
data = re.sub('\[\[((?:(?!\[\[|\]\]).)+)\]\]', '' + see_link + '', data, 1)
else:
data = re.sub('\[\[((?:(?!\[\[|\]\]).)+)\]\]', '' + see_link + '', data, 1)
else:
data = re.sub('\[\[((?:(?!\[\[|\]\]).)+)\]\]', '[[' + link + ']]', data, 1)
else:
break
# br 처리
data = re.sub("\[br\]", ' ', data)
# 각주 처리
footnote_number = 0
footnote_all = []
footnote_dict = {}
footnote_re = {}
footdata_all = '\n
'
while 1:
footnote = re.search('(?:\[\*((?:(?! |\]).)*)(?: ((?:(?!\]).)+))?\]|(\[각주\]))', data)
if footnote:
footnote_data = footnote.groups()
if footnote_data[2]:
footnote_all.sort()
for footdata in footnote_all:
footdata_all += '
':
footdata_all = ''
data = re.sub('\n$', footdata_all, data + '\n', 1)
# 분류 마지막 처리
category += '
'
category = re.sub(' / <\/div>$', '
', category)
if category == '\n
분류:
':
category = ''
data += category
# NoWiki 마지막 처리
for re_data in end_data:
if re_data[2] == 'normal':
data = data.replace('', re_data[1])
data = data.replace(tool.url_pas(''), tool.url_pas(re_data[1]))
else:
if re.search('\n', re_data[1]):
data = data.replace('', '\n
' + re.sub('^\n', '', re_data[1]) + '
')
else:
data = data.replace('', '' + re_data[1] + '')
# 마지막 처리
data = re.sub('<\/td_end>', '
', 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', '
\n', data)
data = re.sub('^(\n)+', '', data)
data = re.sub('(\n)+
', '
', data)
data = re.sub('(?P
).)*)>)\n', '\g', data)
data = re.sub('(\n)?(\n)?', '', data)
data = re.sub('<\/ul>\n\n