Toggle menu
Toggle personal menu
Not logged in
Your IP address will be publicly visible if you make any edits.

위키에 코드컬러라이저 추가하기: Difference between revisions

From ZeroWiki
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[0]) == "#!cplusplus":
     if string.strip(lines&#91;0&#93;) == "#!cplusplus":
         del lines[0]
         del lines&#91;0&#93;
   
   
     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[0]) == "#!java":
     if string.strip(lines&#91;0&#93;) == "#!java":
         del lines[0]
         del lines&#91;0&#93;
   
   
     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[endpos+3:]                    
                     line = line&#91;endpos+3:&#93;                    
                 elif string.strip(line)[:2] == "#!" and string.find(line, 'python') &gt; 0:
                 elif string.strip(line)&#91;:2&#93; == "#!" and string.find(line, 'python') &gt; 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 = [line]
                     self.colorize_lines = &#91;line&#93;
                     continue
                     continue
이렇게 바꾸자!
이렇게 바꾸자!
Line 113: Line 113:
   
   
                     # send rest of line through regex machinery
                     # send rest of line through regex machinery
                     line = line[endpos+3:]
                     line = line&#91;endpos+3:&#93;
                 elif string.strip(line)[:2] == "#!" and string.find(line, 'cplusplus') &gt; 0:
                 elif string.strip(line)&#91;:2&#93; == "#!" and string.find(line, 'cplusplus') &gt; 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 = [line]
                     self.colorize_lines = &#91;line&#93;
                     continue
                     continue
                 elif string.strip(line)[:2] == "#!" and string.find(line, 'java') &gt; 0:
                 elif string.strip(line)&#91;:2&#93; == "#!" and string.find(line, 'java') &gt; 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 = [line]
                     self.colorize_lines = &#91;line&#93;
                     continue
                     continue
                 elif string.strip(line)[:2] == "#!" and string.find(line, 'python') &gt; 0:
                 elif string.strip(line)&#91;:2&#93; == "#!" and string.find(line, 'python') &gt; 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 = [line]
                     self.colorize_lines = &#91;line&#93;
                     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:ParserMarketExample이라 된 곳에서는 잘 사용하고 있는것이다...
하지만 어디에도 어떻게 저렇게 할수 있는지 안나오니, 이렇게 불친잘할수가! --;;(단순히 본인의 서칭능력 부족일 가능성도 다분하다..)
그리하여 그 방법을 연구한 결과가 이문서의 내용이다..;;

준비물

  • 다음 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

위키분류, lostship