Blog

The Syntax Highlighter of Jekyll with GitHub Pages

July 14, 2015

The Syntax Highlighter of Jekyll with GitHub Pages

※ 이 글은 원본이 갱신되었습니다. 원본을 읽어주시면 감사하겠습니다.

 

블로그에 글을 쓰다가 문득 의문이 들었다.

“과연 내 블로그는 어떤 언어들의 문법 강조가 가능할까?”

Jekyll 공식 홈페이지엔 이렇다할 해답이 없었는데, 의외로 GitHub Pages에 그 답이 있었다.
GitHub Pages는 기본 Jekyll highlighter로 pygments를 사용한다고 적혀있다.
그럼 Pygments는 무엇인가?
Pygments는 Python으로 개발된 문법 강조기이다.
현재 최신 버전은 2.0.2이다.
근데 Jekyll은 Ruby인데 Python 라이브러리인 Pygments를 어떻게 사용할까?
Jekyll 설치시 pygments.rb라는 것이 같이 설치가 된다.
이것을 통해 문법 강조를 하는 것이다.
(좀 더 자세한 설명은 아래에)

지원하는 문법의 종류도 상당히 많다.
Python에 관련한것만 찾아보면 다음과 같다.

  • Cython(cython, pyx, pyrex)
  • Dg(dg)
  • NumPy(numpy)
  • Python 3(python3, py3)
  • Python 3 Traceback(py3tb)
  • Python Console(pycon)
  • Python(python, py, sage)
  • Python Traceback(pytb)

이 외에 프레임워크에서 지원하는 문법도 지원한다.1

  • CSS Django(css+django, css+jinja)
  • Django(django, jinja)
  • HTML Django(html+django, html+jinja, djangohtml)
  • JavaScript Django(js+django, javascript+django, js+jinja, javascript+jinja)
  • XML Django(xml+django, xml+jinja)
  • YAML Jinja(yaml+jinja, salt, sls)
  • Mako CSS(css+mako)
  • Mako HTML(html+mako)
  • Mako JavaScript(js+mako, javascript+mako)
  • Mako (mako)
  • Mako XML (xml+mako)

자, 이렇게 여러가지 기능을 지원하는 pygments는 만능일까?
내 생각엔 아니다.
pygments.rb는 내부적으로 Python을 popen해서(그러니까 subprocess를 만들어서 실행해서) 사용하는 구조이다.
Pygments를 별도로 설치하지 않아도 되도록 아예 배포본 소스에 내장하고 있는데 그 버전은 2.0pre이다.
그리고 이 내장 Pygments의 버전은 1년째 갱신되지 않고 있다.

이것은 무엇을 의미할까?
일단 당장 개발했을때는 Pygments가 업데이트가 크지 않았으므로 별 상관 없다고 생각했을 수도 있다.
하지만 당장에 올해 안에 문법이 바뀔 메이저 언어가 내가 아는 것만 해도 2개나 있다.2
그 외에도 아직 Pygments 본진조차 지원하지 못하고 있는 언어가 많다.3
만약 이런 언어들의 지원이 Pygments 본진에 추가되도 pygments.rb가 갱신이 되지 않으면 안된다.
물론 pygments.rb가 업데이트 되어도 GitHub쪽에서 반영을 안하면 역시 말짱 도루묵이지만.

그리고 이 사실은 나한텐 이것을 의미한다.

Python 3.5, GraphQL 관련 코드를 올릴때 매우 곤란하다.

이 문제를 해결하려면 일단 Pygments 본진부터가 Python 3.5를 지원하게 만드는게 순서겠지만, GitHub Pages의 pygments.rb의 버전이 그렇게 호락호락하게 올라가줄까?
왠지 먹구름이 낀 느낌이다.


  1. Django와 Jinja가 뒤섞여있는게 매우 신경쓰인다. 
  2. PHP 7과 Python 3.5 
  3. JSX, GraphQL, Less 등등