현재의 티스토리 에디터는 직접 markdown 편집도 지원을 하고 있지만, 구 버전의 편집기 사용시에 다음과 같은 markdown 소스를 작성하여 HTML 변환을 한 후 티스토리 소스에 붙여넣을 경우,


## 제목1
본문

## 제목2
- 리스트1
- 리스트2

본문

## 제목2
본문

- 리스트1
- 리스트2


아래와 같이 깔끔하지 않게 나오지 않는 경우가 있는데, (특히, 단락 앞뒤에 공백 옵션을 사용하지 않았을 경우. 적용되는 스킨의 CSS에 따라 차이는 있을 수 있음.)


제목1

본문

제목2

  • 리스트1
  • 리스트2

본문

제목2

본문

  • 리스트1
  • 리스트2


이 변환기를 사용할 경우, 다음과 같이 추가적인 줄바꿈을 넣어줘서,


## 제목1
<p><br></p>
본문
 
<p><br></p>
<p><br></p>
## 제목2
- 리스트1
- 리스트2
 
본문
 
<p><br></p>
<p><br></p>
## 제목2
<p><br></p>
본문
 
- 리스트1
- 리스트2


HTML 변환후에, 아래 결과와 같이 보기좋게(?) 표시될 수 있게합니다.


제목1


본문



제목2

  • 리스트1
  • 리스트2

본문



제목2


본문

  • 리스트1
  • 리스트2


변환기 소스


md_convert.py:

# -*- coding: utf-8 -*-
#!/usr/bin/python

import sys

DOUBLE_BR_BEFORE_HEADER = True

STATUS_START = 0
STATUS_NONE = 1
STATUS_LIST = 2
STATUS_PRE = 3
STATUS_HEADER = 4

LINE_BR = "<p><br></p>\n"

def print_usage():
    print("usage: python md_convert.py [option]")
    print("Options:")
    print("-i input-file : 지정된 입력 파일을 사용하여 변환을 하고 입력 파일을 덮어씁니다.")
    print("-i input-file output-file : 지정된 입력 파일과 출력 파일을 사용하여 변환을 합니다.")

def is_ol_item(str):
    pos = str.find(". ")
    if pos == -1:
        return False
    return str[:pos].isdigit()

def go_convert(config):
    filename_in = config["filename_in"]
    filename_out = config["filename_in"]
    if "filename_out" in config:
        filename_out = config["filename_out"]

    print("\nconverting %s.." % filename_in)

    file_in = open(filename_in, 'r', encoding = "utf-8")

    all_line = []
    for line in file_in:
        all_line.append(line)
    file_in.close()

    all_line_new = []
    insidePre = False
    status = STATUS_START
    status_old = status

    for line in all_line:
        status_old = status

        line_strip = line.lstrip()
        if len(line_strip) > 0:
            if insidePre:
                if line_strip[:5] == "</pre":
                    insidePre = False
            else:
                if line_strip[:4] == "<pre":
                    insidePre = True
                    status = STATUS_PRE
                elif line_strip[:1] == "-" or is_ol_item(line_strip):
                    status = STATUS_LIST
                elif line_strip[:1] == "#":
                    status = STATUS_HEADER
                else:
                    status = STATUS_NONE
                    
            if DOUBLE_BR_BEFORE_HEADER and status == STATUS_HEADER and status_old != STATUS_START:
                all_line_new.append(LINE_BR)
                
            if status_old == STATUS_NONE:
                if status == STATUS_HEADER:
                    all_line_new.append(LINE_BR)
            elif status_old == STATUS_HEADER:
                if status == STATUS_NONE:
                    all_line_new.append(LINE_BR)
                if status == STATUS_HEADER:
                    all_line_new.append(LINE_BR)
        all_line_new.append(line)

    file_out = open(filename_out, 'w', encoding = "utf-8")
    for line in all_line_new:
        file_out.write(line)
    file_out.close()

    print("end")

config = {}

if len(sys.argv) >= 2:
    if sys.argv[1] == "-i":
        if len(sys.argv) == 3:
            config['filename_in'] = sys.argv[2]
            go_convert(config)
        else:
            config['filename_in'] = sys.argv[2]
            config['filename_out'] = sys.argv[3]
            go_convert(config)
    else:
        print_usage()
else:
    print_usage()






사용 방법


사용 방법: python md_convert.py [옵션]
옵션:
-i input-file             : 지정된 입력 파일을 사용하여 변환을 하고 입력 파일을 덮어씁니다.
-i input-file output-file : 지정된 입력 파일과 출력 파일을 사용하여 변환을 합니다.


PS1. pre 태그 내에서 소스 코드에 html 관련 코드를 사용할 경우, 충돌이 나서 (특히 pre 태그 관련, 당연한가?) 소스내 모든 <와 >를 &lt;와 &gt;로 바꿔줄 수 밖에 없었습니다.
PS2. 추가 작업 후보 : 소스 md에 줄바꿈이 있을 때만 추가적인 줄바꿈 삽입
,