             (str 텍스트 "\n"))))
 
 (deftest 분석테스트
+  (testing "소스코드"
+    (are [시도 결과] (= 시도 결과)
+      (분석 "``` clojure\n(def a 1)\n```")
+      [:문서 [:소스코드
+              [:소스언어 "c" "l" "o" "j" "u" "r" "e"]
+              [:코드내용 "(" "d" "e" "f" " " "a" " " "1" ")" "\n"]]]
+
+      (분석 "```\n(def a 1)\n```")
+      [:문서 [:소스코드 [:코드내용 "(" "d" "e" "f" " " "a" " " "1" ")" "\n"]]]
+
+      (분석 "```clojure\n(def a 1)\n```\n그리고\n```\n한번더\n```")
+      [:문서
+       [:소스코드 [:소스언어 "c" "l" "o" "j" "u" "r" "e"]
+        [:코드내용 "(" "d" "e" "f" " " "a" " " "1" ")" "\n"]]
+       [:문단 "그" "리" "고"]
+       [:소스코드 [:코드내용 "한" "번" "더" "\n"]]]))
+
   (testing "원문"
     (are [시도 결과] (= 시도 결과)
       (분석 "    원문 텍스트는 줄넘김\n    문자도 유지")
       [:문서 [:원문 "원" "문" " " "텍" "스" "트" "는" " "
               "줄" "넘" "김" "\n" "문" "자" "도" " " "유" "지" "\n"]]
 
-      (분석 "    원문 텍스트는 *강조*처리 제외")))
+      (분석 "    원문 텍스트는 *강조*처리 제외")
+      [:문서 [:원문 "원" "문" " " "텍" "스" "트" "는" " "
+              "*" "강" "조" "*" "처" "리" " " "제" "외" "\n"]]))
 
   (testing "인용"
     (are [시도 결과] (= 시도 결과)


    (* 목록 *)
    <목록>       := 일반목록 | 숫자목록
    일반목록     := (<'*' 공백> 항목 LF)+
    숫자목록     := (<숫자+ '.' 공백?> 항목 LF)+
    항목         := 평문

    (* 인용 *)
    인용         := (<'>' 공백?> (빈줄 / 평문) LF)+
    빈줄         := 공백*

    (* 원문 *)
    원문         := (<공백 공백 공백 공백> ANY* '\\n')+

    (* 링크 *)
    <링크들>     := 일반링크 / 자동링크


(def 파서
  (insta/parser
   "문서         := (제목 / 목록 / 인용 / 원문 / 소스코드 / 문단)+
    문단         := 평문? <LF>
    <제목>       := (작은제목 / 큰제목) <LF>
    <평문>       := (링크들 / 강조 / ANY)+

    (* 제목 *)
