마크다운 변환기

블로그에 사용하는 변환기를 변경할지 고민 중이다. 현재는 John Gruber의 오리지널 변환기를 쓰고 있는데 이걸 계속 고집하는 것이 좋을지 잘 모르겠다. 아마 이 글이 완성될 때 쯔음엔 결정되겠지.


조건

내가 바라는 조건은

  1. 지속성: Maintainability? Portability? Durability? 어떤 표현이 적당한지 잘 모르겠다. 나는 블로그의 글들을 적은 마크다운 파일들이 언젠가 이사를 가더라도 쉽게 이식되었으면 좋겠다. 그러려면 마크다운 변환기가 꾸준히 유지보수 되는, 너무 특이하지 않은 것이어야 한다.

  2. Code syntax highlighting: 단색으로 적힌 코드는 21세기에 너무 어울리지 않는다. 언젠가 여기에 코드를 적을지도 모른다. 비록 지금은 한 줄의 코드도 없지만 왠지 코드를 적고 싶어질 것만 같다.

  3. DRY(Don't repeat yourself): 내가 안 만들었으면 좋겠다. 내가 유지보수를 안 했으면 좋겠다. 누군가 만들어 놓은 것이 있으면 좋겠다. 코딩은 즐겁지만 희한하게도 이건 만들고 싶지 않다.

  4. 가벼움: 가벼웠으면 좋겠다. 가볍다는 건 내가 쓰지 않는 기능이 없는 변환기였으면 좋겠다는 말이다. 예를 들어 LaTeX이나 PDF 출력도 되는 변환기는 필요없다.

후보

검색해 보면 마크다운 관련하여 많은 결과가 나오지만 대부분 조건 1을 만족시키지 못한다. 유지보수가 될지 믿음직스럽지 못하거나 마크다운 문법이 너무 특이하다.

선택

PHP Markdown Extra + Code prettify 를 사용하기로 했다. Code prettify를 쓰려면 코드 블록에 클래스를 달아야 하고 PHP Markdown Extra가 마침 그 기능을 지원하기 때문이다. 예를 들어 OCaml 코드를 작성하면 아래와 같이 색을 칠해 준다.

[수정 2020-04-23] highlight.js로 옮겼다. 아래의 코드는 highlight.js에 의해 색칠된 것이다.

type t = A | B | C of int

(* comment *)

let foo = function
  | A -> 1
  | B -> 2
  | C i -> i

let goo x = x + 1

let hoo = fun x -> x + 1

나중에 참고할 목적으로 사용법을 정리하자면.

  1. 자바스크립트 읽기

    다음 명령어를 입력하여 자바스크립트를 읽는다. CGI 인자를 통해 언어나 스킨 설정을 할 수 있다. 사용가능한 언어 목록은 여기여기를 참고하자.

    <script src="https://cdn.rawgit.com/google/code-prettify/master/loader/run_prettify.js?lang=ml"></script>
  2. 코드 작성

    PHP Markdown Extra의 코드 블록 문법을 사용하여 코드를 작성한다.

    ~~~~~~~~~ {.prettyprint .linenums .lang-ml}
    code here
    ~~~~~~~~~

2016-08-02 씀.