요즘 컨퍼런스 준비와 회사에서 신규 프로젝트 런칭으로 연일 야근 중, 오늘은 퇴근하고 저녁 밥도 꾸역 꾸역 먹고 피곤에 쓰러져 버렸다. 근데 이 시간에 깨 버렸네. 잠들기 전에 작성하던 v0.9 에 추가된 펜스 코드 블럭에 대한 소개나 할까 한다.
언젠가부터 웹 페이지에 코드를 표현하고자 할 때 IDE 와 동일하게 구문 강조 라이브러리를 사용하게 되었다. 최근 Github.com 이 주목을 받으며 마크다운(markdown) 포맷 문서화와 펜스 코드 블럭(fenced code block) 이 자주 활용되곤 한다.
하루프레스 0.9.0 버젼에서는 구문 강조를 위한 펜스 코드 블럭을 제공한다. 뿐만 아니라 코드블럭에 원하는 스타일을 적용할 수도 있다.
구문 강조는 highlight.js 를 이용했다. highlight.js 는 52 가지 언어를 지원하고 26가지의 유명한 구문 강조 스타일(코드 테마)을 제공한다.
| Language | key |
|---|---|
| Python | python |
| Python's profiler output | profile |
| Ruby | ruby |
| Perl | perl |
| PHP | php |
| Scala | scala |
| Go | go |
| XML | xml |
| HTML (with inline css and javascript | xml |
| Markdown | markdown |
| Django templates | django |
| CSS | css |
| JSON | json |
| JavaScript | javascript |
| CoffeeScript | coffeescript |
| ActionScript | actionscript |
| VBScript | vbscript |
| HTTP | http |
| Lua | lua |
| Delphi | delphi |
| Java | java |
| C++ | cpp |
| Objective C | objectivec |
| Vala | vala |
| C# | cs |
| D | d |
| RenderMan RSL | rsl |
| RenderMan RIB | rib |
| MEL | mel |
| GLSL | glsl |
| SQL | sql |
| SmallTalk | smalltalk |
| Lisp | lisp |
| Clojure | clojure |
| Ini file | ini |
| Apache | apache |
| nginx | nginx |
| Diff | diff |
| DOS batch files | dos |
| Bash | bash |
| CMake | cmake |
| Axapta | axapta |
| 1C | 1c |
| AVR Assembler | avrasm |
| VHDL | vhdl |
| Parser 3 | parser3 |
| TeX | tex |
| Haskell | haskell |
| Erlang | erlang |
| Rust | rust |
| Matlab | matlab |
| R | r |
| Style | key |
|---|---|
| Default | default |
| Dark | dark |
| FAR | far |
| IDEA | idea |
| Sunburst | sunburst |
| Zenburn | zenburn |
| Visual Studio | vs |
| Ascetic | ascetic |
| Magula | magula |
| GitHub | github |
| Google Code | googlecode |
| Brown Paper | brown_paper |
| School Book | school_book |
| IR Black | ir_black |
| Solarized - Dark | solarized_dark |
| Solarized - Light | solarized_light |
| Arta | arta |
| Monokai | monokai |
| XCode | xcode |
| Pojoaque | pojoaque |
| Rainbow | rainbow |
| Tomorrow | tomorrow |
| Tomorrow Night | tomorrow-night |
| Tomorrow Night Bright | tomorrow-night-bright |
| Tomorrow Night Blue | tomorrow-night-blue |
| Tomorrow Night Eighties | tomorrow-night-eighties |
컬러 테마로 잘 알려진 Solarized, Tomorrow 씨리즈는 기본으로 Github 스타일도 제공한다. 그외 위와 같이 굉장히 다양한 스타일을 제공한다.
좀더 자세한 스타일은 여기를 참고하세요.
특징 하루프레스는 간단한 방법으로 코드블럭 테마를 전역적으로 적용할 수 있을 뿐 아니라 각 페이지마다 별도의 테마를 적용할 수 있다.
먼저 마크다운에서 코드 블럭을 지정하는 방법을 알아보도록 하자.
마크다운에서 기본 코드 블럭은 1 tab 혹은 4 spaces 이다. 그런데 Github.com 에서는 3개의 backtick ` 을 연달아 작성하는 것으로 구문강조 코드 블럭을 지원하면서 이 Fenced Code Block 가 코드 블럭의 기본 방식처럼 되어가고 있다.
그외에 tilde ~ 3개를 이용해 코드 블럭을 지정하는 방법 중에 하나이다.
```ruby
code block
```
~~~
fenced code block
~~~
~~~javascript
function syntaxHighlight(code, lang) {
var foo = 'rhio';
var bar = 33;
}
~~~
javascript
function syntaxHighlight() {
var haroo = 'press';
return haroo;
}
ruby
def syntaxHighlight
@haroo = 'press'
return @haroo
end
python
def syntaxHighlight():
haroo = "press"
return haroo
기본 스타일은 하루프레스 환경설정 파일에 설정하는 테마로 특별히 지정하지 않는 코드 블럭에는 환경설정에 지정한 스타일로 적용된다.
환경설정 파일은 하루프레스 설치 디렉토리에 config.js 파일에 존재한다. 이 파일을 JSON 포맷으로 이루어져있다.
코드 블럭 스타일을 지정은 config.defaultCodeStyle 이라는 값에 지정할 수 있다. 하루프레스 기본값은 github 으로 설정되어 있고 위의 스타일 목록에서 key 값을 참조하여 지정하면 된다.
하루프레스는 기본 스타일뿐만 아니라 포스팅 별 코드 블럭에 스타일을 지정할 수가 있다. 하루프레스를 이용하고 있는 유저라면 별 어려움이 없게 간단한 옵션 하나로 지정할 수 있다.
포스팅한 마크다운 파일을 열어 메타 정보의 JSON 포맷에 일부 옵션을 설정하면 된다.
{
…,
advanced : { }
}
위와 같이 기본적으로 advanced:{} 는 빈 객체가 지정되어 있는데 여기에 codeStyle 키에 값을 지정하면 된다.
{
…,
advanced: {
codeStyle: 'solraized_dark'
}
}
구문 강조는 개발자 블로깅에 Must Have 아이템이 아닐 수 없다. 50개가 넘는 언어 지원과 30개에 육박하는 다양한 스타일 테마로 블로그 테마에 어울리고 페이지 성격에 걸맞는 스타일을 사용자가 원하는 데로 적용할 수 있다.
하루프레스를 이용하며 발생하는 문제나 좋은 아이디어들은 직접 fork 해 구현해도 좋고 아래 이슈 트래커에 언제든지 남겨주세요.