이 확장은 미디어위키 1.21과 그 이후 버전과 함께 제공됩니다. 따라서 여러분은 그것을 다시 다운로드할 필요가 없습니다. 어쨌든, 여러분은 여전히 제공된 다른 지침을 따라야 합니다.
SyntaxHighlight 확장은, 이전에는 SyntaxHighlight_GeSHi로 알려져 있었지만, <syntaxhighlight> 태그를 사용하여 다양한 소스 코드 형식을 제공합니다.
그것은 Pygments 라이브러리에 의해 구동되며 수백 가지의 서로 다른 프로그래밍 언어와 파일 형식을 지원합니다.
마치 <pre> 및 poem 태그와 마찬가지로 텍스트는 정확하게 입력된 대로 렌더링되어, 공백을 유지합니다.
이 확장은 구문 강조로 GeSHi를 사용했기 때문에 이전에는 SyntaxHighlight_GeSHi로 알려져 있었습니다. 2015년 6월부터 Pygments를 사용합니다.
Installation
소스 편집기를 사용할 때 위키 코드의 구문 강조 표시에 대해서는 Extension:CodeMirror 또는 Cacycle 및 Remember the dot의 userscripts를 참조하십시오. |
미디어위키 1.21부터는 미디어위키와 함께 배포가 되고 있습니다. 별도로 설치할 필요가 없습니다. |
미디어위키 확장 내려받기 지면에서 해당 판을 내려받아서 정해진 위치로 이동시킵니다.
미디어위키 설정 LocalSettings.php 파일에 다음을 추가합니다:
wfLoadExtension( 'SyntaxHighlight_GeSHi' );
Linux에서는, pygmentize 바이너리에 대한 실행 권한을 설정하십시오:
- sudo chmod a+x /var/www/html/w/extensions/SyntaxHighlight_GeSHi/pygments/pygmentize
일반적으로 배포될 때, 실행 권한이 있도록 제공되기 때문에 확인을 먼저 하시기 바랍니다.
Special:Version에 접근해서 확장이 정상적으로 설치가 되었는지 확인을 합니다.
pygments update
- cd /var/www/html/w/extensions/SyntaxHighlight_GeSHi/pygments
- sudo ./create_pygmentize_bundle
- sudo /var/www/html/w/maintenance/run ./maintenance/updateCSS.php --wiki=dawoum
Configuration
리눅스
- $wgPygmentizePath (선택 사항): Pygments 패키지의 pygmentize에 대한 절대 경로. 이 확장은 Pygments 패키지를 번들하고 $wgPygmentizePath 포인트를 번들된 버전에 묶어 주지만, 만약 원하는 경우에는 다른 버전을 가리킬 수 있습니다. 예를 들어: $wgPygmentizePath = "/usr/local/bin/pygmentize";
- $wgSyntaxHighlightModels: 일부 위키 페이지의 기본 lexer를 설정합니다. 기본적으로 이것은 자바-스크립트 및 css 페이지를 강조 표시합니다. 추가적인 컨텐츠 모델은 확장 기능 (예를 들어, Lua, JSON, ..)으로 구성할 수 있습니다.
윈도우
- 만약 윈도우 컴퓨터에서 미디어위키를 호스팅하는 경우에는, Pygramize.exe에 대한 경로를 $wgPygmentizePath = "c:\\Python27\\Scripts\\pygmentize.exe";로 설정해야 합니다.
- 만약 pygmentize.exe가 없으면 파일을 생성하기 위해서 Scripts 폴더 내에서 명령 줄에 easy_install Pygments를 실행하십시오.
만약 번들된 pygmentize 바이너리 (extensions/SyntaxHighlight_GeSHi/pygments/pygmentize)를 사용하는 경우에는, 웹 서버에서 실행하도록 허용되었는지 확인하십시오.
만약 호스트가 웹 디렉토리에 실행 파일을 추가할 수 없으면, python-pygments를 설치하고 $wgPygmentizePath = pygmentize를 LocalSettings.php에 추가하십시오.
Troubleshooting
MediaWiki v1.26 이상으로 업데이트한 후에는, 일부 사용자는 확장 프로그램 관련 문제를 보고하기 시작했습니다.
- LocalSettings.php에서 $wgPygmentizePath를 외부 pygmentize 바이너리로 향하게 하십시오.
- 추가 제안 및 정보는 phabricator task를 참조하십시오.
VisualEditor integration
이 플러그인은 Extension:VisualEditor와 함께 직접 편집할 수 있도록 활성화합니다.
사용자가 source 또는 syntaxhighlight 섹션을 편집하려고 할 때 팝업이 열립니다.
이 기능을 사용하기 위해서는, VisualEditor는, Parsoid와 동일한, 최신 버전의 git 버전을 설치하고 구성해야 합니다.
이 기능은 구형 Parsoid 버전에서는 무작위로 작동하지 않습니다.
Usage
일단 설치되면, wiki 페이지에서 "syntaxhighlight" 태그를 사용할 수 있습니다. 예를 들어,
def quickSort(arr):
less = []
pivotList = []
more = []
if len(arr) <= 1:
return arr
else:
pass
다음과 같은 wikitext 마크-업의 결과입니다:
<syntaxhighlight lang="python" line='line'>
def quickSort(arr):
less = []
pivotList = []
more = []
if len(arr) <= 1:
return arr
else:
pass
</syntaxhighlight>
이전 버전(MediaWiki 1.16 이전)에서는 확장 프로그램에서 <source> 태그를 사용했습니다. 이것은 여전히 지원되지만, 만약 소스 코드 자체에 <source> 태그(예를 들어, XML)가 포함되어 있으면 <syntaxhighlight>가 충돌을 피할 수 있습니다.
Styling
만약 표시된 코드가 너무 크면, 위키에 있는 MediaWiki:Common.css 페이지에 다음을 넣어 조정할 수 있습니다(존재하지 않는 경우에는 생성하십시오).
/* CSS placed here will be applied to all skins */
.mw-highlight pre {
font-size: 90%;
}
테두리에 코드 블록을 넣는 작업은 테두리와 위의 섹션에서처럼 border: 1px dashed blue; 같은 선을 삽입하여 수행할 수 있습니다.
font family에 대한 제어는 위의 섹션에서처럼 font-family: "Courier New", monospace; 같은 줄을 삽입하여 수행할 수도 있습니다.
Syntax highlighting error category
이 확장은 <source> 또는 <syntaxhighlight> 태그에 잘못된 lang 속성이 있는 페이지를 tracking category에 추가합니다.
메시지 키 mw:MediaWiki:syntaxhighlight-error-category는 분류 이름을 결정합니다; 이 위키에서는 Category:Pages with syntax highlighting errors 페이지입니다.
이 분류로 태그되는 페이지로 연결되는 가장 일반적인 오류는 lang 속성이 전혀없는 <syntaxhighlight> 또는 <source> 태그입니다.
이들은 전형적으로 <pre> 또는 lang="bash"로 대체할 수 있습니다.
두 번째로 가장 일반적인 오류는 지원되지 않는 lang="sh" 또는 lang="shell"의 사용입니다.
이들은 전형적으로 lang="bash" 또는 lang="shell-session"으로 대체될 수 있습니다.
Parameters
lang
lang="Name"속성은 어떤 렉서가 사용되어야 하는 것을 정의합니다.
언어는 확장 프로그램이 소스 코드를 강조하는 방법에 영향을 줍니다.
pygments 구문 분석기는 대소-문자를 구분하며 모든 언어는 적어도 하나의 대문자가 있습니다(소문자는 gtags 용으로 예약되어 있습니다).
지원되는 언어에 대한 자세한 내용은 지원되는 언어 섹션을 참조하십시오.
def quickSort(arr):
less = []
<syntaxhighlight lang="python">
..
</syntaxhighlight>
유효하지 않거나 알 수 없는 이름을 지정하면 페이지에 추적 분류가 표시됩니다.
자세한 내용은 이 페이지의 Syntax highlighting error category 단원을 참조하십시오.
line
line 속성은 행 번호를 사용 가능하게 합니다.
int x = 0;
Console.WriteLine("结果是:"+ x);
<syntaxhighlight lang="python" line>
..
</syntaxhighlight>
start
start 속성(line과 함께)은 코드 블록의 첫 번째 행 번호를 정의합니다.
예를 들어, line start="55"는 줄 번호 매김을 55에서 시작합니다.
def quickSort(arr):
less = []
<syntaxhighlight lang="python" line start="55">
..
</syntaxhighlight>
highlight
highlight 속성은 표시해야 할 하나 이상의 줄을 지정합니다(배경색이 다른 라인을 강조하기 위해서).
쉼표로 구분된 여러 줄 번호(예를 들어, highlight="1,4,8") 또는 두 개의 줄 번호와 하이픈(예를 들어, highlight="5-7")을 사용하여 범위를 지정할 수 있습니다.
주목할 것은 줄 번호 지정은 start 특성으로 표시된 줄 번호의 번호 매기기를 무시한다는 점입니다.
def quickSort(arr):
less = []
pivotList = []
more = []
if len(arr) <= 1:
return arr
다음의 결과입니다.
<syntaxhighlight lang="python" highlight="1,5-7" start='3' line>
..
</syntaxhighlight>
inline
MediaWiki version: |
≥ 1.26
|
이 속성은 소스 코드가 단락의 일부로 인라인되어야 함을 나타냅니다(자체 블록이 아닌).
이 옵션은 MediaWiki 1.26부터 사용할 수 있습니다.
이전 버전과의 호환성을 위해서는, enclose="none" 속성은 동일한 동작을 합니다.
주목할 것은 소스 코드가 class="nowrap"(지원하는 위키에서, 아래를 참조하십시오) 또는 style=white-space:nowrap을 사용하여 소스 코드가 non-breakable으로 표시되지 않는 한 줄 바꿈이 발생할 수 있다는 점입니다.
예를 들어:
lambda x: x * 2 is a lambda expression in Python.
다음의 결과입니다:
<syntaxhighlight lang="python" inline>lambda x: x * 2</syntaxhighlight> is a [[wikipedia:Lambda (programming)|lambda expression]] in Python.
class
inline을 사용할 때, class="nowrap"(지원하는 위키에서, MediaWiki 자체에서는 제외)는 코드 블록 내의 공백에서 줄 바꿈이 일어나지 않아야 함을 지정합니다.
예를 들어:
class="nowrap" 없는 경우:
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxlambda x: x * 2xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
style="white-space:nowrap" 있는 경우:
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxlambda x: x * 2xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
style
style 속성을 사용하면 CSS 속성을 직접 포함할 수 있습니다.
이것은 블록을 <div> (<span>이 아님) 태그로 묶는 것과 같습니다.
tab‑size 속성은 이 방법으로 지정할 수 없습니다. 아래에 설명된 대로 Advanced <span> 태그가 있어야 합니다.
예를 들어:
def quickSort(arr):
less = []
pivotList = []
more = []
if len(arr) <= 1:
return arr
else:
pass
다음의 결과입니다:
<syntaxhighlight lang="Python" style="border:3px dashed blue">
def quickSort(arr):
less = []
pivotList = []
more = []
if len(arr) <= 1:
return arr
else:
pass
</syntaxhighlight>
Installation
미디어위키 확장 내려받기 지면에서 해당 판을 내려받아서 정해진 위치로 이동시킵니다.
확장을 git에서 설치했을 때, Composer를 실행해서 PHP을 설치하십시오. 확장 디렉토리로 이동하셔서 composer install --no-dev를 실행하십시오.
미디어위키 설정 LocalSettings.php 파일에 다음을 추가합니다:
wfLoadExtension( 'SyntaxHighlight_GeSHi' );
리눅스에서, pygmentize 바이너리에 대한 실행 권한을 설정합니다. FTP 클라이언트 또는 다음 셸 명령을 사용하여 이를 수행할 수 있습니다.
chmod a+x /path/to/extensions/SyntaxHighlight_GeSHi/pygments/pygmentize
Special:Version에 접근해서 확장이 정상적으로 설치가 되었는지 확인을 합니다.
Advanced
<pre> 및 <code> 태그와 달리게, 와 같은 HTML 문자 엔터디에는 & 문자가 &로 이스케이프될 필요가 없습니다.
<pre> 태그와 비슷하지만 <code> 태그와는 달리게, 범위 내의 태그(자체 종료 태그 제외)는 < 기호로 <를 이스케이프 처리할 필요가 없으며, wikitext를 <nowiki> 태그로 이스케이프해야 할 필요도 없습니다.
게다가, <pre>는 탭이 8문자마다 멈추고 렌더링된 텍스트가 복사될 때 실제 공간을 사용하여 탭을 렌더링한다고 가정하지만 <syntaxhighlight>는 (Internet Explorer는 제외, IE는 8을 사용합니다) 4-공백 탭을 사용하고 렌더링된 텍스트; 후자는 <span style="-moz-tab-size:''nn''; -o-tab-size:''nn''; tab-size:''nn'';"> 태그를 사용하여 변경할 수 있습니다(<div>가 아니며, 자체 style 속성을 사용하지 않음).
Firefox(버전 4.0부터)에는 -moz- 접두어가 필요하고 Opera(버전 10.60에서 버전 15까지)에는 -o- 접두사가 필요합니다. (주목할 것은 위키 편집 상자는 8-칸 탭으로 가정한다는 점입니다.)
이것은 실제 저장된 페이지에만 적용됩니다. 편집 상자 또는 mw:Special:ExpandTemplates를 통해 생성된 미리보기는 다를 수 있습니다.