Syntax Highlighter 1.3 - Google Code Prettify를 쓸 때 ` `를 표시하지 못하는 문제 수정
이전에 Syntax Highlighter 1.3 - Google Code Prettify를 Markdown에 맞게 고치기라는 글을 통해 별도의 구문을 쓰지 않고 코드 하이라이팅을 처리하도록 하는 방법에 대해서 얘기했었다.
그러면서 를 제대로 출력하지 못하는 문제에 대해,
처음엔 "Markdown에서 코드 블럭을 처리하는데 버그가 있는것 같다."고 했다가,
그 다음엔 "Google Code Prettify와의 연동 문제인것 같다."고 고쳤었는데..
"내가 한번 고쳐보지!"라는 마음에 코드를 봤다가,
Google Code Prettify의 버그란 것을 알게됬다.
구글이 만들었다길래 좀 믿고(?) 있었는데.. 뒤통수 맞은 느낌이다.
문제의 코드는 다음과 같다. 주1
// ...
(function () {
// ...
var pr_ltEnt = /</g;
var pr_gtEnt = />/g;
var pr_aposEnt = /'/g;
var pr_quotEnt = /"/g;
var pr_ampEnt = /&/g;
var pr_nbspEnt = / /g;
/** unescapes html to plain text. */
function htmlToText(html) {
// ...
return html.replace(pr_ltEnt, '<')
.replace(pr_gtEnt, '>')
.replace(pr_aposEnt, "'")
.replace(pr_quotEnt, '"')
.replace(pr_ampEnt, '&')
.replace(pr_nbspEnt, ' ');
}
// ...
})();
눈치가 빠른 사람은 이 코드가 나오자마자 '딱!'하고 눈치를 챘을거다.
htmlToText() 끝부분을 보면 문자열을 바꿔치는 코드를 볼 수 있다.
이 코드는, html에서 특별한 문자를 표현하기 위해 사용하는, character entity를
원래 표현하려던 문자로 바꿔주는 역할을 한다.
문제는 바꿔치기하는 순서다.
&가 맨 마지막에 있어야 하는데, 앞에 있는 바람에
&nbsp;가 띄어쓰기로 변환되 버리는거다.
주2
문제를 해결하려면, &를 맨 마지막에 바꾸도록 다음처럼 바꾼다.
// ...
.replace(pr_quotEnt, '"')
.replace(pr_nbspEnt, ' ')
.replace(pr_ampEnt, '&');
}
// ...
이제 Google Code Prettify가 적용된 코드에서도
가 잘 표시되는걸 확인할 수 있다.
어때?
- 2009/09/24"모든 블로그의 최근 글 보기"에 정렬방식 추가하기 [0]
- 2009/09/23텍스트큐브를 위한 알라딘 TTB 플러그인 v0.3 [0]
- 2009/09/08Syntax Highlighter 1.3 - Google Code Prettify를... [1]
- 2009/09/06Footnote 0.5에서 주석 안에 [, ]를 쓸 수 있게하기 [0]
- 2009/09/06nayana를 처리하다. [0]


The eye님이 'SyntaxHighlighter 2.0'를 냈길래 Markdown용으로 수정해서 업데이트 했더니 이 버그가 수정되어있다.
google-code-prettify의 최신 버전(prettify-3-Dec-2009)도 수정되있는걸 보니, 버그 리포팅이되서 수정된 모양이다.