U E D R S I H C RSS
ID
Password
Join
현명한 사람은 자기 자신에게 의문을 품고 어리석은 자는 남들만 의심한다. ―H.A.



Contents

1 동기
2 패치과정
2.1 wiki.php의 Fommatter.send_page() 소스 복사
2.2 Fommatter.send_page_js() 소스 수정
2.3 jsprint 플러그인
3 사용법

1 동기 #

테터툴즈는 일단 글을 작성하면 DB화가 힘듭니다. 모니위키와 같은 위키시스템만큼 KB(Knowledge Base)화하기가 쉬운 환경은 없죠. 개인적으로 대부분의 글은 위키에 적습니다만, 적은 글을 블로그에 포스팅하기가 생각보다 번거롭더군요. 그냥 복사해서 등록하는 것은 번거로울뿐더러 귀차니즘에도 위반되고, 똑같은 글이 두 번 저장된다는 아픔이 있습니다.

고민을 하던 중 bloglines의 blogroll이 내부 자료를 주석문 처리된 자바스크립트로 출력한 것을 보고 '''위키도 똑같은 기능이 있으면 좋겠다 해서 만든 기능이 바로 jsprint입니다.

블로그 뿐만아니라 다른 게시판에 인용하거나 전체 첨부하기에도 편할거라 생각됩니다. :)

조금 무식한 패치과정입니다. 용서해주시길... :)

2 패치과정 #

2.1 wiki.php의 Fommatter.send_page() 소스 복사 #

우선 모니위키의 wiki.php 소스에서 Formatter 클래스의 send_page() 맴버함수를 찾습니다. (대략 2116 라인쯤 있습니다) 이 부분을 주욱 잘 긁어서 바로 아래에 한번 복사를 합니다. 그런 후 복사된 send_page(...)send_page_js(...)로 rename합니다. 즉,
function send_page($body="",$options=array()) {
.
.
.
}

function simple_diff($diff) {
.
.
.
이렇게 되어있는 위에서 언급한데로 고치시면
function send_page($body="",$options=array()) {
.
.
.
}

function send_page_js($body="",$options=array()) {
.
.
.
}

function simple_diff($diff) {
.
.
.
이렇게 되어야합니다.

2.2 Fommatter.send_page_js() 소스 수정 #

이제 복사된 send_page_js() 소스의 하단부를 봅니다. 다음과 같이 되어있을겁니다. (대략 2451라인 근처)
.
.
.
    # close div
    #if ($in_p) $close.="</div>\n"; # </para>
    if ($in_p) $close.=$this->_div(0,$in_div); # </para>

    # activate  tag
    #$text=preg_replace("/(&lt;)(\/?del>)/i","<\\2",$text);
    $text.=$close;

##########################################################################  
    print $text;
##########################################################################
    if ($this->sisters and !$options['nosisters']) {
      $sisters=join("\n",$this->sisters);
      $sisters=preg_replace("/(".$wordrule.")/e","\$this->link_repl('\\1')",$sisters);
      print "<div id='wikiSister'>\n<tt class='foot'>----</tt><br/>\nSister Sites Index<br />\n$sisters</div>\n";
    }

    if ($options['pagelinks']) $this->store_pagelinks();
  }

  function simple_diff($diff) {
.
.
.
여기서 print $text;라고 되어있는 소스 한 줄을 지우고, 아래에 ###### 으로 구분되어있는 소스로 삽입합니다. 바꾸면 아래와 같이 되어야합니다.
.
.
.
    # close div
    #if ($in_p) $close.="</div>\n"; # </para>
    if ($in_p) $close.=$this->_div(0,$in_div); # </para>

    # activate  tag
    #$text=preg_replace("/(&lt;)(\/?del>)/i","<\\2",$text);
    $text.=$close;

##########################################################################
    print "document.write(\"".preg_replace( 
		array("'\"'", "'\n'" ), 
		array(	"\\\"","\");\ndocument.write(\"" ), 
		$text)."\");\n";
##########################################################################

    if ($this->sisters and !$options['nosisters']) {
      $sisters=join("\n",$this->sisters);
      $sisters=preg_replace("/(".$wordrule.")/e","\$this->link_repl('\\1')",$sisters);
      print "<div id='wikiSister'>\n<tt class='foot'>----</tt><br/>\nSister Sites Index<br />\n$sisters</div>\n";
    }

    if ($options['pagelinks']) $this->store_pagelinks();
  }

  function simple_diff($diff) {
.
.
.
이제 Fommatter.send_page_js() 함수가 생겼습니다. :)

2.3 jsprint 플러그인 #

아래 소스를 plugin 폴더에 jsprint.php라는 이름으로 저장합니다.
<?php
function do_jsprint($formatter,$options) {
  global $DBInfo;
  print "<!--\n";
  $formatter->external_on=1;
  $formatter->send_page_js();
  print "// -->";
  return;
}
?>
이제 소스 수정이 끝났습니다!

3 사용법 #

  • 위 과정대로 설치되면 모든 페이지에 ?action=jsprint을 URL에 붙여서 변환된 자바스크립트 소스를 얻을 수 있습니다. 예를 들어 제 위키(www.redwiki.net/wiki/wiki.php)의 Lua 페이지에 대한 jsprint 소스를 보려면,
    http://www.redwiki.net/wiki/wiki.php/Lua?action=jsprint
    
    라는 링크를 브라우저에서 연다음(아무것도 안보일겁니다. :) ) "소스 보기"기능으로 소스를 확인해보시면 됩니다.
  • 테터툴즈나 다른 HTML가능한 툴을 통한 게시물 작성때 <script src=jsprint링크 ></script> 한줄만 추가해주면 됩니다. 즉, 위 링크로 적어보면,
    <script src="http://www.redwiki.net/wiki/wiki.php/Lua?action=jsprint" ></script>
    
    가 되겠죠.

별거 아닌 패치지만 유용하게 쓰실 분이 계시리라 생각합니다. 즐거운 블로깅 되시길~

잘 쓰겠습니다. ;) -- 레이옷 2005-01-29

아직 <pre> 태그에 대한 버그가 있습니다. 손을 좀 봐야하는데. 귀차니즘땜시... :( -- redpixel 2005-01-30

Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2010-10-28 12:42:52
Processing time 0.5050 sec