E D R , A S I H C RSS

위키� 코드컬러��저 추가하기

Code Colorizer

제약 사항:
� 문서� 내용� MoinMoin 1.0 부터 지�하기 시작한 Process � 기반한다. 그래서 그 �하 버전�서는 불가능하다.


MoinMoin� 파�선용 코드 컬러��저는 기본으로 들어있다. 그러나 �바나 C++용 코드 컬러��저는 기본� 아니다. 그래서 MoinMoin: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"]
Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2021-02-07 05:30:28
Processing time 0.0054 sec