MediaWiki

From WhiteWing
Jump to: navigation, search

Contents

Changes

  • languages 폴더의 classes와 messages를 한글과 영어를 제외하고는 삭제해 버림 (용량 문제)
  • Short URL 적용 [1], [2]

External Image

Syntax Highlight

미디어위키 1.18에서 제대로 작동하는 걸 찾기가 하늘의 별따기다. 버전업을 하면서 api를 지맘대로 바꾸고, 익스텐션들을 제공한 개발자들이 계속 보수를 하지 않아서 생기는 문제이다.

  • geshi[1] : 에러
  • GoogleCodePrettify[2] : 구림
  • ASHighlight[3] : 에러
  • SyntaxHighlight-GeSHi[4] : 설치, 잘 돌아가지만 css가 맘에 들지 않음.

그래서 예전 모니위키에서 사용한 SyntaxHighlighter 연결 익스텐션을 직접 하나 맹글었습니다. 미디어위키 익스텐션 사이트에도 등록하고 Github에도 등록했으니 나름 책임있게 유지 보수 해야 할 것 같아요.

Google Analytics

미디어위키에 관련 익스텐션이 있으나[5] 이는 파서를 사용하는 것으로 내가 원하는 것과는 약간 다르다. 내가 원하는 것은 알아서 모든 위키 페이지의 해더에 관련 스크립트를 집어넣어주는 것이기 때문이다. 그렇기에 간단히 내가 만들었다.

<?php
if (! defined( 'MEDIAWIKI' ) ) {
        echo( "This is an extension to the MediaWiki package and cannot be run standalone.\n" );
        die( -1 );
}

$wgExtensionCredits['other'][] = array(
        'path'          => __FILE__,
        'name'          => 'GoogleAnalytics',
        'description'   => 'Adds scripts for google analytics',
        'version'       => '1.0',
        'author'        => 'Seong Jae Lee');

$wgHooks['BeforePageDisplay'][] = 'wfGoogleAnalyticsBeforePageDisplay';

function wfGoogleAnalyticsBeforePageDisplay( OutputPage &$out, Skin &$skin ) {
        $out->addHeadItem( 'googleAnalytics', '
<script type="text/javascript">
        var _gaq = _gaq || [];
        _gaq.push([\'_setAccount\', \'UA-XXXXXXXX-X\']); // substitute the number to the corresponding one
        _gaq.push([\'_trackPageview\']);

        (function() {
                var ga = document.createElement(\'script\');
                ga.type = \'text/javascript\';
                ga.async = true;
                ga.src = (\'https:\' == document.location.protocol ? \'https://ssl\' : \'http://www\') + \'.google-analytics.com/ga.js\';
                var s = document.getElementByTagName(\'script\')[0];
                s.parentNode.insertBefore(ga, s);
        })();
</script>
');
        return true;
}
?>


Math

\(\left( \sum_{k=1}^n a_k b_k \right)^2 \leq \left( \sum_{k=1}^n a_k^2 \right) \left( \sum_{k=1}^n b_k^2 \right)\)

미디어위키에서 기본적으로 제공하는 수식 렌더링은 웹 서버에서 texvc를 포함한 온갖 프로그램을 돌릴 수 있어야 한다.[6] 물론 나같은 소시민의 웹 호스팅 계정은 그딴 거 지원하지 않으므로 다른 방법을 사용해야 한다. 우선은 모니위키에서 사용한 것처럼 codecogs.com 에서 지원하는 바깥 라텍스 렌더러[7]를 사용하기로 했다. 간단한 미디어위키 익스텐션과 함께. (자바스크립트를 사용해 폰트 자체를 렌더링 해 주는 멋진 익스텐션들이 있으나 (MathJax, JSMath) 미디어위키 1.18에서는 작동하지 않음.

<?php
if (! defined( 'MEDIAWIKI' ) ) {
        echo( "This is an extension to the MediaWiki package and cannot be run standalone.\n" );
        die( -1 );
}

$wgExtensionCredits['other'][] = array(
        'path'          => __FILE__,
        'name'          => 'ImgMath',
        'description'   => 'Rendering math tags from other webpages providing latex rendering',
        'version'       => '1.0',
        'author'        => 'Seong Jae Lee');

$wgHooks['ParserFirstCallInit'][] = 'wfWebMathParserInit';

function wfWebMathParserInit( Parser &$parser ) {
        $parser->setHook('math', 'wfWebMathRender');
        return true;
}

function wfWebMathRender( $input, array $args, Parser $parser, PPFrame $frame ) {
        return '<img class="math" src="http://latex.codecogs.com/png.latex?' . $input . '" />';
}

하지만 이런 귀찮은 짓을 할 필요 조차 없는 더 좋은 방법이 있다. 자바스크립트를 통해 폰트를 알아서 로드하여 폰트 자체를 렌더링 해 주는 라이브러리들이 존재하니까. JSMath[8]와 MathJax[9]가 그것이다. 둘 다 미디어위키에서 관련 익스텐션이 존재하긴 하는데, 설치해 보았더니 둘 다 제대로 동작하진 않았다. 하지만 MathJax의 경우는 그냥 자바스크립트만 하나 로드하면 된다. 그냥 현재 사용하고 있는 스킨 php 파일에 들어가서 initPage 함수에 다음 구문만 집어넣어주면 만사형통.

$out->addHeadItem( 'mathjax', '<script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>' );

WebMath의 경우는 math 태그를 변환시켜 주는 방식이고 MathJax의 경우는 \[에서 ]\ 사이의 구문을 변환시켜주는 방식이다. 하지만 전자의 경우는 이미지로 깔끔하게 뽑아주는 특징이 있고, 후자의 경우는 폰트를 렌더링 해 주는 특징이 있다. 전자의 경우는 이미지의 렌더링만큼의 해상도를 보여주어 이미지라는 것이 눈에 딱 띄는 데에 비해, 후자의 경우에는 폰트이기 때문에 클리어타입의 해상도까지 보여줄 수 있다는 장점이 있다. 하지만 아무래도 latex의 렌더링 방식을 자바스크립트로 구현한 것이기 때문에 정확하게 똑같이 보인다고는 할 수 없다.

어쨌거나 기존의 math 태그를 그대로 사용하면서 MathJax를 사용하고 싶거나, math 태그로 수식을 넣어 나중에 라이브러리를 치환할 가능성도 고려하고 싶다면 간단한 미디어위키 익스텐션을 만드는 것도 좋을 것이다. 이참에 굳이 스킨 php도 건드리지 않고 라이브러리를 로드하도록 하였다.

<?php
if (! defined( 'MEDIAWIKI' ) ) {
        echo( "This is an extension to the MediaWiki package and cannot be run standalone.\n" );
        die( -1 );
}

$wgExtensionCredits['other'][] = array(
        'path'          => __FILE__,
        'name'          => 'MathJaxMath',
        'description'   => 'Rendering math tags using MathJax javascript library',
        'version'       => '1.0',
        'author'        => 'Seong Jae Lee');

$wgHooks['BeforePageDisplay'][] = 'wfMathJaxMathInit';

function wfMathJaxMathInit( OutputPage &$out, Skin &$skin ) {
        $out->addHeadItem( 'mathjax', '<script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>' );
        return true;
}

$wgHooks['ParserFirstCallInit'][] = 'wfMathJaxMathParserInit';

function wfMathJaxMathParserInit( Parser &$parser ) {
        $parser->setHook('math', 'wfMathJaxMathRender');
        return true;
}

function wfMathJaxMathRender( $input, array $args, Parser $parser, PPFrame $frame ) {
        return '\[' . $input . '\]';
}

Extensions

References

  1. http://www.mediawiki.org/wiki/Extension:Geshi
  2. http://www.mediawiki.org/wiki/Extension:GoogleCodePrettify
  3. http://www.mediawiki.org/wiki/Extension:ASHighlight
  4. http://www.mediawiki.org/wiki/Extension:SyntaxHighlight_GeSHi
  5. http://www.mediawiki.org/wiki/Extension:Google_Analytics
  6. http://www.mediawiki.org/wiki/Manual:Math
  7. http://codecogs.com/latex/eqneditor.php
  8. http://www.math.union.edu/~dpvc/jsMath/
  9. http://www.mathjax.org/

Personal tools