Practice/Lisp

리습(Lisp)을 위한 SyntaxHighlighter 3.0 플러그인 작성

SyntaxHighlighter[각주:1]는 프로그래밍 언어의 문법에 따른 색상을 강조하는 프로그램이다.
자바스크립트(Javascript)와 CSS로 작성하였다.
블로그에 개발에 관련한 글을 쓰다보면 종종 소스 코드를 포함한다.
그럴 때마다 이 프로그램의 고마움을 많이 느꼈다.


공식 배포본에는 리습(Lisp)용 플러그인이 없다.
다행이도 누군가 리습을 위한 플러그인을 만들어서 올려놓았다.[각주:2]
썩 마음에 들지는 않지만, 그냥 저냥 사용하기에는 큰 무리는 없었다.


그러던 중, 눈에 거슬리는 버그 하나를 발견했다.

(defun my-save (fname)
  (with-open-file (*standard-output*
                   fname
                   :direction :output
                   :if-exists :supersede)
    (my-write)))

위 소스 코드를 보면, 키워드 변수인 ":if-exists"의 "if"를 특별한 의미로 해석했음을 볼 수 있다.


이 플러그인을 고쳐보려다가 아래 몇가지 이유로 다시 작성하기로 마음을 먹었다.

  • 내가 쓰고 있는 SyntaxHighlighter는 버젼이 3.0.83인데, 이 플러그인은 2.0 기반이다.
    따라서, 3.0 기반으로 변경할 필요가 생겼다.
  • 이맥스(Emacs)의 리습 모드(Lisp Mode)의 폰트락(Font Lock)[각주:3]과 유사하게 동작하게 만들고 싶었다.
    기존 플러그인이 리습 코드를 해석하는 것을 보면, 작성자가 리습에 대한 이해가 좀 부족한 듯 하다.


새로 작성한 플러그인은 다음과 같이 나온다.

(defun my-save (fname)
  (with-open-file (*standard-output*
                   fname
                   :direction :output
                   :if-exists :supersede)
    (my-write)))

문제의 버그를 깔끔하게 고쳤다.
더불어, 이맥스처럼 my-save를 함수명으로 인식하여 색상을 강조한다.


이 블로그에 적용된 리습을 위한 SyntaxHighlighter 3.0 플러그인은 내 깃허브(Github)에도 올려놓았다.[각주:4]


  1. <a href="http://alexgorbatchev.com/SyntaxHighlighter/" target="_blank" class="tx-link">http://alexgorbatchev.com/SyntaxHighlighter/</a> [본문으로]
  2. <a href="https://github.com/knuthaug/sh-lisp" target="_blank" class="tx-link">https://github.com/knuthaug/sh-lisp</a> [본문으로]
  3. 이맥스의 문법에 따른 색상 강조 시스템 [본문으로]
  4. <a href="https://github.com/unipro/shBrushLisp" target="_blank" class="tx-link">https://github.com/unipro/shBrushLisp</a> [본문으로]
저작자 표시 변경 금지
신고
크리에이티브 커먼즈 라이선스
Creative Commons License

알림

이 블로그는 구글에서 제공한 크롬에 최적화 되어있고, 네이버에서 제공한 나눔글꼴이 적용되어 있습니다.

카운터

Today : 13
Yesterday : 124
Total : 164,163

티스토리 툴바