from . import tool import re def start(data, title): # 맨 앞과 끝에 개행 문자 추가 data = '\r\n' + data + '\r\n' # 텍스트 꾸미기 문법 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('\r\n#(?:redirect|넘겨주기) (?P(?:(?!\r\n).)+)\r\n', '', data) # 문단 문법 toc_full = 0 toc_stack = [0, 0, 0, 0, 0, 0] while 1: toc = re.search('\r\n(={1,6}) ?((?:(?!=).)+) ?={1,6}\r\n', data) if toc: toc = toc.groups() toc_number = len(toc[0]) # 더 크면 그 전 스택은 초기화 if toc_full > toc_number: for i in range(toc_number, 6): toc_stack[i] = 0 toc_full = toc_number toc_stack[toc_number - 1] += 1 toc_number = str(toc_number) all_stack = '' # 스택 합치기 for i in range(0, 6): all_stack += str(toc_stack[i]) + '.' all_stack = re.sub('0.', '', all_stack) data = re.sub('\r\n(={1,6}) ?((?:(?!=).)+) ?={1,6}\r\n', '' + all_stack + ' ' + toc[1] + '\r\n', data, 1) else: break while 1: hr = re.search('\r\n-{4,9}\r\n', data) if hr: data = re.sub('\r\n-{4,9}\r\n', '
', data, 1) else: break # 리스트 구현 while 1: li = re.search('(\r\n(?:(?: *)\* ?(?:(?:(?!\r\n).)+)\r\n)+)', data) if li: li = li.groups()[0] while 1: sub_li = re.search('\r\n(?:( *)\* ?((?:(?!\r\n).)+))', li) if sub_li: sub_li = sub_li.groups() # 앞의 공백 만큼 margin 먹임 if len(sub_li[0]) == 0: margin = 20 else: margin = len(sub_li[0]) * 20 li = re.sub('\r\n(?:( *)\* ?((?:(?!\r\n).)+))', '
  • ' + sub_li[1] + '
  • ', li, 1) else: break data = re.sub('(\r\n(?:(?: *)\* ?(?:(?:(?!\r\n).)+)\r\n)+)', '
      ' + li + '
    ', data, 1) else: break # 들여쓰기 구현 while 1: indent = re.search('\r\n( +)', data) if indent: indent = len(indent.groups()[0]) # 앞에 공백 만큼 margin 먹임 margin = '' * indent data = re.sub('\r\n( +)', '\r\n' + margin, data, 1) else: break # 마지막 처리 data = re.sub('(?P<\/h[1-6]>)\r\n', '\g', data) data = re.sub('\r\n', '
    ', data) return data