More actions
imported>Unknown No edit summary |
(Repair MoniWiki formatting after migration) |
||
| (2 intermediate revisions by the same user not shown) | |||
| Line 1: | Line 1: | ||
== Code Colorizer == | == Code Colorizer == | ||
제약 사항: | 제약 사항: | ||
이 문서의 내용은 MoinMoin 1.0 부터 지원하기 시작한 Process 에 기반한다. 그래서 그 이하 버전에서는 불가능하다. | 이 문서의 내용은 [[MoinMoin]] 1.0 부터 지원하기 시작한 Process 에 기반한다. 그래서 그 이하 버전에서는 불가능하다. | ||
MoinMoin에 파이선용 코드 컬러라이저는 기본으로 들어있다. 그러나 자바나 C++용 코드 컬러라이저는 기본이 아니다. 그래서 MoinMoin:ParserMarket 에 가서 자바와 C++용 파서를 받아왔다. 그런데 이럴수가 코드블럭문안에서 파서 사용이 안되는것이다. | MoinMoin에 파이선용 코드 컬러라이저는 기본으로 들어있다. 그러나 자바나 C++용 코드 컬러라이저는 기본이 아니다. 그래서 [[MoinMoin]]:[[ParserMarket]] 에 가서 자바와 C++용 파서를 받아왔다. 그런데 이럴수가 코드블럭문안에서 파서 사용이 안되는것이다. | ||
{{{~cpp | {{{~cpp | ||
!#java | !#java | ||
... | ... | ||
그런데 MoinMoin:ParserMarket 에 [http://bbs.rhaon.co.kr/mywiki/moin.cgi/ProgrammingTips_2fCStringFormat Example]이라 된 곳에서는 잘 사용하고 있는것이다... | 그런데 [[MoinMoin]]:[[ParserMarket]] 에 [http://bbs.rhaon.co.kr/mywiki/moin.cgi/ProgrammingTips_2fCStringFormat Example]이라 된 곳에서는 잘 사용하고 있는것이다...<br /> | ||
하지만 어디에도 어떻게 저렇게 할수 있는지 안나오니, 이렇게 불친잘할수가! --;;(단순히 본인의 서칭능력 부족일 가능성도 다분하다..) | 하지만 어디에도 어떻게 저렇게 할수 있는지 안나오니, 이렇게 불친잘할수가! --;;(단순히 본인의 서칭능력 부족일 가능성도 다분하다..)<br /> | ||
그리하여 그 방법을 연구한 결과가 이문서의 내용이다..;; | 그리하여 그 방법을 연구한 결과가 이문서의 내용이다..;; | ||
| Line 34: | Line 34: | ||
sys.stdout.write(formatter.preformatted(1)) | sys.stdout.write(formatter.preformatted(1)) | ||
if string.strip(lines | if string.strip(lines[0]) == "#!cplusplus": | ||
del lines | del lines[0] | ||
buff = cStringIO.StringIO() | buff = cStringIO.StringIO() | ||
| Line 63: | Line 63: | ||
sys.stdout.write(formatter.preformatted(1)) | sys.stdout.write(formatter.preformatted(1)) | ||
if string.strip(lines | if string.strip(lines[0]) == "#!java": | ||
del lines | del lines[0] | ||
buff = cStringIO.StringIO() | buff = cStringIO.StringIO() | ||
| Line 77: | Line 77: | ||
== 최종 과제 == | == 최종 과제 == | ||
이제 MoinMoin/parser 에 있는 wiki.py 를 수정해보자. | 이제 MoinMoin/parser 에 있는 wiki.py 를 수정해보자.<br /> | ||
다음과 같은 부분을 찾아서... | 다음과 같은 부분을 찾아서... | ||
if self.in_pre: | if self.in_pre: | ||
| Line 92: | Line 92: | ||
# send rest of line through regex machinery | # send rest of line through regex machinery | ||
line = line | line = line[endpos+3:] | ||
elif string.strip(line) | elif string.strip(line)[:2] == "#!" and string.find(line, 'python') > 0: | ||
from MoinMoin.processor.Colorize import process | from MoinMoin.processor.Colorize import process | ||
self.processor = process | self.processor = process | ||
self.in_pre = 2 | self.in_pre = 2 | ||
self.colorize_lines = | self.colorize_lines = [line] | ||
continue | continue | ||
이렇게 바꾸자! | 이렇게 바꾸자! | ||
| Line 113: | Line 113: | ||
# send rest of line through regex machinery | # send rest of line through regex machinery | ||
line = line | line = line[endpos+3:] | ||
elif string.strip(line) | elif string.strip(line)[:2] == "#!" and string.find(line, 'cplusplus') > 0: | ||
from MoinMoin.processor.CppColorize import process | from MoinMoin.processor.CppColorize import process | ||
self.processor = process | self.processor = process | ||
self.in_pre = 2 | self.in_pre = 2 | ||
self.colorize_lines = | self.colorize_lines = [line] | ||
continue | continue | ||
elif string.strip(line) | elif string.strip(line)[:2] == "#!" and string.find(line, 'java') > 0: | ||
from MoinMoin.processor.JavaColorize import process | from MoinMoin.processor.JavaColorize import process | ||
self.processor = process | self.processor = process | ||
self.in_pre = 2 | self.in_pre = 2 | ||
self.colorize_lines = | self.colorize_lines = [line] | ||
continue | continue | ||
elif string.strip(line) | elif string.strip(line)[:2] == "#!" and string.find(line, 'python') > 0: | ||
from MoinMoin.processor.PythonColorize import process | from MoinMoin.processor.PythonColorize import process | ||
self.processor = process | self.processor = process | ||
self.in_pre = 2 | self.in_pre = 2 | ||
self.colorize_lines = | self.colorize_lines = [line] | ||
continue | continue | ||
---- | ---- | ||
[[위키분류]], [[lostship]] | [[위키분류]], [[lostship]] | ||
Latest revision as of 00:34, 29 March 2026
Code Colorizer
제약 사항: 이 문서의 내용은 MoinMoin 1.0 부터 지원하기 시작한 Process 에 기반한다. 그래서 그 이하 버전에서는 불가능하다.
MoinMoin에 파이선용 코드 컬러라이저는 기본으로 들어있다. 그러나 자바나 C++용 코드 컬러라이저는 기본이 아니다. 그래서 MoinMoin:ParserMarket 에 가서 자바와 C++용 파서를 받아왔다. 그런데 이럴수가 코드블럭문안에서 파서 사용이 안되는것이다.
{{{~cpp
!#java
...
그런데 MoinMoin:ParserMarket 에 Example이라 된 곳에서는 잘 사용하고 있는것이다...
하지만 어디에도 어떻게 저렇게 할수 있는지 안나오니, 이렇게 불친잘할수가! --;;(단순히 본인의 서칭능력 부족일 가능성도 다분하다..)
그리하여 그 방법을 연구한 결과가 이문서의 내용이다..;;
준비물
- 일단 파서. 다음 3개의 파이선 파일을 MoinMoin/parser 디렉터리에 생성한다.
- 다음 2개의 파일을 MoinMoin/processor 디렉터리에 생성한다. (본인은 이름의 통일감을 위해 Colorize.py 도 PythonColorize.py 로 이름을 바꾸었다.)
- CppColorize.py
"""
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
"""
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 를 수정해보자.
다음과 같은 부분을 찾아서...
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
이렇게 바꾸자!
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