미디어위키/미디어위키 익스텐션

미디어위키(Mediawiki) 기본 제공 익스텐션(Extension) SyntaxHighlight 설치와 활용

씨실과 날실 2020. 5. 3. 14:00

[익스텐션 목록]

기본 익스텐션

2019/10/29 - [미디어위키/미디어위키 익스텐션] - 미디어위키(Mediawiki) 기본 제공 익스텐션(Extension) Interwiki 설치와 활용

2020/04/28 - [미디어위키/미디어위키 익스텐션] - 미디어위키(Mediawiki) 기본 제공 익스텐션(Extension) Nuke 설치와 활용

2020/04/28 - [미디어위키/미디어위키 익스텐션] - 미디어위키(Mediawiki) 기본 제공 익스텐션(Extension) Renameuser 설치와 활용

2020/04/29 - [미디어위키/미디어위키 익스텐션] - 미디어위키(Mediawiki) 기본 제공 익스텐션(Extension) CiteThisPage 설치와 활용

2020/04/29 - [미디어위키/미디어위키 익스텐션] - 미디어위키(Mediawiki) 기본 제공 익스텐션(Extension) Replace Text 설치와 활용

2020/04/29 - [미디어위키/미디어위키 익스텐션] - 미디어위키(Mediawiki) 기본 제공 익스텐션(Extension) WikiEditor 설치와 활용

2020/04/30 - [미디어위키/미디어위키 익스텐션] - 미디어위키(Mediawiki) 기본 제공 익스텐션(Extension) CodeEditor 설치와 활용

2020/04/30 - [미디어위키/미디어위키 익스텐션] - 미디어위키(Mediawiki) 기본 제공 익스텐션(Extension) CategoryTree 설치와 활용

2020/05/01 - [미디어위키/미디어위키 익스텐션] - 미디어위키(Mediawiki) 기본 제공 익스텐션(Extension) Cite 설치와 활용

2020/05/01 - [미디어위키/미디어위키 익스텐션] - 미디어위키(Mediawiki) 기본 제공 익스텐션(Extension) ImageMap 설치와 활용

2020/05/02 - [미디어위키/미디어위키 익스텐션] - 미디어위키(Mediawiki) 기본 제공 익스텐션(Extension) InputBox 설치와 활용

2020/05/02 - [미디어위키/미디어위키 익스텐션] - 미디어위키(Mediawiki) 기본 제공 익스텐션(Extension) ParserFunctions 설치와 활용

2020/05/03 - [미디어위키/미디어위키 익스텐션] - 미디어위키(Mediawiki) 기본 제공 익스텐션(Extension) Poem 설치와 활용

2020/05/03 - [미디어위키/미디어위키 익스텐션] - 미디어위키(Mediawiki) 기본 제공 익스텐션(Extension) SyntaxHighlight 설치와 활용

2020/05/04 - [미디어위키/미디어위키 익스텐션] - 미디어위키(Mediawiki) 기본 제공 익스텐션(Extension) PDF Handler 설치와 활용

2020/05/04 - [미디어위키/미디어위키 익스텐션] - 미디어위키(Mediawiki) 기본 제공 익스텐션(Extension) ConfirmEdit 설치와 활용

2020/05/05 - [미디어위키/미디어위키 익스텐션] - 미디어위키(Mediawiki) 기본 제공 익스텐션(Extension) SpamBlacklist 설치와 활용

2020/05/05 - [미디어위키/미디어위키 익스텐션] - 미디어위키(Mediawiki) 기본 제공 익스텐션(Extension) TitleBlacklist 설치와 활용

2020/05/06 - [미디어위키/미디어위키 익스텐션] - 미디어위키(Mediawiki) 기본 제공 익스텐션(Extension) Gadgets 설치와 활용

2020/05/06 - [미디어위키/미디어위키 익스텐션] - 미디어위키(Mediawiki) 기본 제공 익스텐션(Extension) LocalisationUpdate 설치와 활용

2020/05/07 - [미디어위키/미디어위키 익스텐션] - 미디어위키(Mediawiki) 기본 제공 익스텐션(Extension) MultimediaViewer 설치와 활용

2020/05/07 - [미디어위키/미디어위키 익스텐션] - 미디어위키(Mediawiki) 기본 제공 익스텐션(Extension) OATHAuth 설치와 활용




[SyntaxHighlight 익스텐션 관련 정보]

익스텐션 공식 안내 페이지

https://www.mediawiki.org/wiki/Extension:SyntaxHighlight

다운로드

미디어위키 내 배포 페이지

https://www.mediawiki.org/wiki/Special:ExtensionDistributor/SyntaxHighlight_GeSHi

github 페이지

https://github.com/wikimedia/mediawiki-extensions-SyntaxHighlight_GeSHi


SyntaxHighlight 익스텐션 기능

위키 문서에서 소스 코드를 구문 강조할 있는 기능을 제공하는 태그 형식의 익스텐션입니다.





익스텐션 다운로드 및 설치

설치 전 주의 사항

Python 버전

버전 1.30 이전의 미디어위키와 대응되는 버전의 SyntaxHighlight 익스텐션은 Python 2를 사용했습니다.

그러나 버전 1.31 이후의 미디어위키와 대응되는 버전의 SyntaxHighlight 익스텐션은 서버에 Python 3가 설치되어 있어야 합니다.

python3 바이너리는 PHP 인터프리터의 실행 PATH에 설치해야 합니다.



다운로드 안내

익스텐션 다운로드 및 설치 방법은 아래 링크를 참고하시기 바랍니다.


사용 중인 미디어위키의 버전에 맞는 배포 익스텐션 압축 파일을 다운로드받습니다.

다운로드 받은 압축 파일을 서버 안 미디어위키 설치 폴더 내에 있는  extensions폴더 안에 풀어줍니다.

리눅스 서버의 경우

$ sudo tar -xzf SyntaxHighlight_GeSHi-REL1_34-d45d04f.tar.gz -C /미디어위키 설치 경로/extensions


예시 - Ubuntu

$ sudo tar -xzf SyntaxHighlight_GeSHi-REL1_34-d45d04f.tar.gz -C /var/www/html/w/extensions

위 명령은 제 블로그를 그대로 따라오신 분의 경우 적용되는 예시입니다.


Linux에서 pygmentize 바이너리에 대한 실행 권한을 설정합니다. FTP 클라이언트 프로그램을 이용해 설정하거나, 아래의 쉘 명령을 사용하여 이를 수행합니다.

$ sudo chmod a+x /path/to/extensions/SyntaxHighlight_GeSHi/pygments/pygmentize


Ubuntu의 경우 예시

$ sudo chmod a+x /var/www/html/w/extensions/SyntaxHighlight_GeSHi/pygments/pygmentize

※ 미디어위키의 디렉터리명이 w인 경우


윈도 서버의 경우

탐색기로 압축 파일을 해당 위치에 풀어주시면 됩니다.


호스팅을 받는 경우

파일질라, 알FTP 등 FTP 프로그램을 이용해 미리 풀어 놓은 익스텐션 폴더(SyntaxHighlight_GeSHi)를 통째로 해당 위치에 전송해줍니다.




SyntaxHighlight 익스텐션 필수 설정

미디어위키의 환경 설정 파일인 LocalSettings.php 파일에 다음과 같은 코드를 추가해줍니다.

wfLoadExtension( 'SyntaxHighlight_GeSHi' );


... 전략 ...

# Enabled extensions. Most of the extensions are enabled by adding
# wfLoadExtensions('ExtensionName');
# to LocalSettings.php. Check specific extension documentation for more details.
# The following extensions were automatically enabled:
wfLoadExtension( 'CategoryTree' );
wfLoadExtension( 'Cite' );
wfLoadExtension( 'CiteThisPage' );
wfLoadExtension( 'CodeEditor' );
wfLoadExtension( 'ConfirmEdit' );
wfLoadExtension( 'Gadgets' );
wfLoadExtension( 'ImageMap' );
wfLoadExtension( 'InputBox' );
wfLoadExtension( 'Interwiki' );
wfLoadExtension( 'LocalisationUpdate' );
wfLoadExtension( 'MultimediaViewer' );
wfLoadExtension( 'Nuke' );
wfLoadExtension( 'OATHAuth' );
wfLoadExtension( 'ParserFunctions' );
wfLoadExtension( 'PdfHandler' );
wfLoadExtension( 'Poem' );
wfLoadExtension( 'Renameuser' );
wfLoadExtension( 'ReplaceText' );
wfLoadExtension( 'SpamBlacklist' );
wfLoadExtension( 'SyntaxHighlight_GeSHi' );
wfLoadExtension( 'TitleBlacklist' );
wfLoadExtension( 'WikiEditor' );

# End of automatically generated settings.
# Add more configuration options below.

... 후략 ...

미디어위키 설치시 기본 제공 익스텐션을 함께 설치하도록 설정한다면 코드는 보통 위 예시와 같은 위치에 추가됩니다.


설치 확인

미디어위키의 특수:버전(= Special:Version) 문서를 확인하면 위 익스텐션이 추가된 것을 확인할 수 있습니다.




SyntaxHighlight 익스텐션 추가 구성 설정

$wgPygmentizePath

// 선택 사항

Pygments 패키지의 pygmentize 절대 경로 설정입니다.

이 익스텐션은 Pygments 패키지가 포함되어 있고 기본적으로 번들 Pygments 패키지 버전을 기본값으로 사용합니다.

그러나 원하는 경우 다른 버전으로 설정할 후 있습니다. 예는 다음과 같습니다.

$wgPygmentizePath = "/usr/local/bin/pygmentize";

 

$wgSyntaxHighlightModels

일부 위키 페이지를 위한 기본 lexer(어휘 분석기)를 설정합니다.

기본적으로 자바 스크립트 및 CSS 페이지가 강조 표시됩니다. 추가 컨텐츠 모델 (예 : Lua, JSON, ...)을 해당 코드로 구성 할 수 있습니다.

$wgSyntaxHighlightModels[CONTENT_MODEL_SCRIBUNTO] = 'lua';


SyntaxHighlight 익스텐션 사용법


기본 구문


== SyntaxHighlight 익스텐션 ==
<syntaxhighlight lang="python" line='line'>
def quick_sort(arr):
    less = []
    pivot_list = []
    more = []
    if len(arr) <= 1:
        return arr
    else:
        pass
</syntaxhighlight>


파라미터 구문

lang


=== Parameters ===
==== lang ====
<syntaxhighlight lang="python">
def quick_sort(arr):
    less = []
</syntaxhighlight>


line


==== line ====
<syntaxhighlight lang="python" line>
def quick_sort(arr):
    less = []
</syntaxhighlight>


start


==== start ====
<syntaxhighlight lang="python" line start="55">
def quick_sort(arr):
    less = []
</syntaxhighlight>


highlight


==== highlight ====
<syntaxhighlight lang="python" highlight="1,5-7" start='3' line>
def quick_sort(arr):
    less = []
    pivot_list = []
    more = []
    if len(arr) <= 1:
        return arr
    else:
        pass
</syntaxhighlight>


inline


==== inline ====
다음 <syntaxhighlight lang="python" inline>lambda x: x * 2</syntaxhighlight> 구문은 Python의 lambda expression입니다.


style


==== style ====
<br />
<syntaxhighlight lang="python" style="border:3px dashed blue">
def quick_sort(arr):
    less = []
    pivot_list = []
    more = []
    if len(arr) <= 1:
        return arr
    else:
        pass
</syntaxhighlight>


다음의 내용은 익스텐션 공식 페이지를 참고하시기 바랍니다.