   (:require [instaparse.core :as insta]
             [clojure.test :refer :all]))
 
+;; (insta/parses 파서 "> 짜라투스트라는 **이렇게** 말했다\n")
+;; (분석 "큰제목\n===\n" :start :밑큰제목)
+;; (insta/parses 파서 "aaa__굵게__ 음?\n")
+;; (분석 "aaa__굵게__음?\n")
+;; FIXME: 밑제목을 추가하면, 다른 곳에서 우선순위 선택이 꼬이고 있다.
+
 (def 파서
   (insta/parser
    "문서         := (제목 / 목록 / 인용 / 원문 / 소스코드 / 문단)+
-    문단         := 평문? <LF>
-    <제목>       := (작은제목 / 큰제목) <LF>
-    <평문>       := (링크들 / 강조 / ANY)+
 
     (* 제목 *)
-    큰제목       := <'#' 공백> 평문 <공백? '#'>?
-    작은제목     := <'##' 공백> 평문 <공백? '##'>?
+    <제목>       := 작은제목 <LF> / 큰제목 <LF>
+    큰제목       := <'#' 공백> 평문 <공백? '#'+>?
+    작은제목     := <'##' 공백> 평문 <공백? '#'+>?
 
     (* 목록 *)
-    <목록>       := 일반목록 | 숫자목록
+    <목록>       := 일반목록 / 숫자목록
     일반목록     := (<'*' 공백> 항목 <LF>)+
     숫자목록     := (<숫자+ '.' 공백?> 항목 <LF>)+
     항목         := 평문

    원문         := (<공백 공백 공백 공백> ANY* LF)+

    (* 소스코드 *)
    소스코드     := <\"```\" 공백?> 소스언어? <LF> 코드내용 <\"```\"> <LF>
    소스언어     := ANY+
    코드내용     := (!'```' ANY+ LF)*

    (* 링크 *)
    <링크들>     := 일반링크 / 자동링크
    일반링크     := <'['> 텍스트 <']('> 주소 <')'>
    텍스트       := (강조 / ESC / ANY)+
    주소         := eTXT

    자동링크     := <'<'> 자동주소 <'>'>
    자동주소     := ANY+ '://' (!'>' ANY)+

    (* 강조 *)
    <강조>       := 굵게 / 기울임

    굵게         := 별굵게 | 밑줄굵게
    <별굵게>     := <'**'> eTXT <'**'>
    <밑줄굵게>   := <'__'> eTXT <'__'>

    기울임       := 별기울임 | 밑줄기울임
    <별기울임>   := <'*'> eTXT <'*'>
    <밑줄기울임> := <'_'> eTXT <'_'>

    <eTXT>       := (ESC / ANY)+
    ESC          := #'\\\\[*_\\[\\]()]'

      [:문서 [:문단 [:일반링크 [:텍스트 "[" "링" "크" "]"] [:주소 "주" "소"]] "걸" "기"]]

      (분석 "<http://자동.com/> 테스트>")
      [:문서 [:문단 [:자동링크 "h" "t" "t" "p" "://" "자" "동" "." "c" "o" "m" "/"]
              " " "테" "스" "트" ">"]]))

  (testing "문단"
