Code Colorizer ¶
ì œì•½ 사í•:
ì�´ 문서ì�˜ ë‚´ìš©ì�€ MoinMoin 1.0 부터 ì§€ì›�하기 시작한 Process ì—� 기반한다. 그래서 ê·¸ ì�´í•˜ ë²„ì „ì—�서는 불가능하다.
ì�´ 문서ì�˜ ë‚´ìš©ì�€ MoinMoin 1.0 부터 ì§€ì›�하기 시작한 Process ì—� 기반한다. 그래서 ê·¸ ì�´í•˜ ë²„ì „ì—�서는 불가능하다.
MoinMoinì—� 파ì�´ì„ ìš© 코드 컬러ë�¼ì�´ì €ëŠ” 기본으로 들어있다. 그러나 ìž�바나 C++ìš© 코드 컬러ë�¼ì�´ì €ëŠ” 기본ì�´ 아니다. 그래서
ParserMarketì—� 가서 ìž�바와 C++ìš© 파서를 받아왔다. 그런ë�° ì�´ëŸ´ìˆ˜ê°€ 코드블ëŸë¬¸ì•ˆì—�서 파서 사용ì�´ 안ë�˜ëŠ”ê²ƒì�´ë‹¤.
{{{~cpp
{{{~cpp
!#java
...
}}}
그런ë�° MoinMoin:ParserMarket ì—� [http://bbs.rhaon.co.kr/mywiki/moin.cgi/ProgrammingTips_2fCStringFormat Example]ì�´ë�¼ ë�œ ê³³ì—�서는 잘 ì‚¬ìš©í•˜ê³ ìžˆëŠ”ê²ƒì�´ë‹¤...[[BR]]
하지만 ì–´ë””ì—�ë�„ 어떻게 ì €ë ‡ê²Œ í• ìˆ˜ 있는지 안나오니, ì�´ë ‡ê²Œ ë¶ˆì¹œìž˜í• ìˆ˜ê°€! --;;(단순히 본ì�¸ì�˜ 서ì¹ëŠ¥ë ¥ 부족ì�¼ 가능성ë�„ 다분하다..)[[BR]]
그리하여 그 방법� 연구한 결과가 �문서� 내용�다..;;
== 준비물 ==
* ì�¼ë‹¨ 파서. 다ì�Œ 3ê°œì�˜ 파ì�´ì„ 파ì�¼ì�„ MoinMoin/parser ë””ë ‰í„°ë¦¬ì—� ìƒ�성한다.
* [http://twistedmatrix.com/users/jh.twistd/moin/moin.cgi/parser_2fbase_2epy parser/base.py] [http://twistedmatrix.com/users/jh.twistd/moin/moin.cgi/parser_2fcplusplus_2epy parser/cplusplus.py] [http://twistedmatrix.com/users/jh.twistd/moin/moin.cgi/parser_2fjava_2epy parser/java.py]
* 다ì�Œ 2ê°œì�˜ 파ì�¼ì�„ MoinMoin/processor ë””ë ‰í„°ë¦¬ì—� ìƒ�성한다. (본ì�¸ì�€ ì�´ë¦„ì�˜ 통ì�¼ê°�ì�„ 위해 Colorize.py ë�„ PythonColorize.py 로 ì�´ë¦„ì�„ 바꾸었다.)
* CppColorize.py
{{{~cpp
"""
MoinMoin - Processor for Syntax Highlighting
Copyright (c) 2002 by J?gen Hermann <jh@web.de>
All rights reserved, see COPYING for details.
$Id: Colorize.py,v 1.3 2002/04/17 19:24:58 jhermann Exp $
"""
import string, sys, cStringIO
from MoinMoin.parser import cplusplus
def process(request, formatter, lines):
if not formatter.in_pre:
sys.stdout.write(formatter.preformatted(1))
if string.strip(lines[0]) == "#!cplusplus":
del lines[0]
buff = cStringIO.StringIO()
colorizer = cplusplus.Parser(string.join(lines, '\n'), request, out = buff)
colorizer.format(formatter, {})
sys.stdout.write(formatter.rawHTML(buff.getvalue()))
sys.stdout.write(formatter.preformatted(0))
}}}
* JavaColorize.py
{{{~cpp
"""
MoinMoin - Processor for Syntax Highlighting
Copyright (c) 2002 by J?gen Hermann <jh@web.de>
All rights reserved, see COPYING for details.
$Id: Colorize.py,v 1.3 2002/04/17 19:24:58 jhermann Exp $
"""
import string, sys, cStringIO
from MoinMoin.parser import java
def process(request, formatter, lines):
if not formatter.in_pre:
sys.stdout.write(formatter.preformatted(1))
if string.strip(lines[0]) == "#!java":
del lines[0]
buff = cStringIO.StringIO()
colorizer = java.Parser(string.join(lines, '\n'), request, out = buff)
colorizer.format(formatter, {})
sys.stdout.write(formatter.rawHTML(buff.getvalue()))
sys.stdout.write(formatter.preformatted(0))
}}}
== 최종 ê³¼ì œ ==
ì�´ì œ MoinMoin/parser ì—� 있는 wiki.py 를 ìˆ˜ì •í•´ë³´ìž�.[[BR]]
다�과 같� 부분� 찾아서...
{{{~cpp
if self.in_pre:
if self.in_pre == 2:
# processing mode
endpos = string.find(line, "}} }") # 옆� �래는 뛰어쓰기 안함
if endpos == -1:
self.colorize_lines.append(line)
continue
self.processor(self.request, self.formatter, self.colorize_lines)
del self.colorize_lines
self.in_pre = 0
# send rest of line through regex machinery
line = line[endpos+3:]
elif string.strip(line)[:2] == "#!" and string.find(line, 'python') > 0:
from MoinMoin.processor.Colorize import process
self.processor = process
self.in_pre = 2
self.colorize_lines = [line]
continue
}}}
ì�´ë ‡ê²Œ 바꾸ìž�!
{{{~cpp
if self.in_pre:
if self.in_pre == 2:
# processing mode
endpos = string.find(line, "}} }") # 옆� �래는 뛰어쓰기 안함
if endpos == -1:
self.colorize_lines.append(line)
continue
self.processor(self.request, self.formatter, self.colorize_lines)
del self.colorize_lines
self.in_pre = 0
# send rest of line through regex machinery
line = line[endpos+3:]
elif string.strip(line)[:2] == "#!" and string.find(line, 'cplusplus') > 0:
from MoinMoin.processor.CppColorize import process
self.processor = process
self.in_pre = 2
self.colorize_lines = [line]
continue
elif string.strip(line)[:2] == "#!" and string.find(line, 'java') > 0:
from MoinMoin.processor.JavaColorize import process
self.processor = process
self.in_pre = 2
self.colorize_lines = [line]
continue
elif string.strip(line)[:2] == "#!" and string.find(line, 'python') > 0:
from MoinMoin.processor.PythonColorize import process
self.processor = process
self.in_pre = 2
self.colorize_lines = [line]
continue
}}}
----
["위키분류"], ["lostship"]








