扩展:语法高亮

From MediaWiki.org
Jump to navigation Jump to search
This page is a translated version of the page Extension:SyntaxHighlight and the translation is 97% complete.

Outdated translations are marked like this.
Other languages:
Deutsch • ‎English • ‎Türkçe • ‎dansk • ‎беларуская (тарашкевіца)‎ • ‎русский • ‎中文 • ‎日本語 • ‎한국어
此扩展已绑定在MediaWiki 1.21及以上版本 因此您不需要再次下载。 然而,您仍需要跟随提供的其他指导。
要在源代码编辑时对维基文本进行语法高亮,参阅CodeMirror 扩展或用户脚本记住点Cacycle
MediaWiki扩展手册
Crystal Clear action run.svg
SyntaxHighlight
发布状态: 稳定版
SyntaxHighlighting with Pygments.png
实现 Tag
描述 允许高亮显示在维基页面上的源代码
作者
  • Brion Vibber,
  • Tim Starling,
  • Rob Church,
  • Ori Livneh
最新版本 continuous updates
MediaWiki 1.25+
数据更新
许可协议 GNU General Public License 2.0 or later
下载
README
参数

  • $wgPygmentizePath
  • $wgSyntaxHighlightModels
标签
<syntaxhighlight>
使用的钩子
ContentGetParserOutput
ParserFirstCallInit
ApiFormatHighlight
ResourceLoaderRegisterModules
翻译SyntaxHighlight扩展如果在translatewiki.net可用
检查使用和版本矩阵。
问题 开放的工作 · 报告错误

SyntaxHighlight扩展(语法高亮扩展),原先被称作SyntaxHighlight_GeSHi,使用<syntaxhighlight>扩展标签对源代码提供了丰富的格式。 它是由Pygments库提供支持的,并支持数百种不同的编程语言和文件格式。

就像<pre><poem >标签,文本将按照输入的内容准确呈现且保留所有空格。

用法

当您安装本扩展后,您就可以在你的wiki使用“syntaxhighlight”标签。举个例子,

1 def quickSort(arr):
2 	less = []
3 	pivotList = []
4 	more = []
5 	if len(arr) <= 1:
6 		return arr
7 	else:
8 		pass

这是实现上面内容的维基代码:

<syntaxhighlight lang="Python" line='line'>
def quickSort(arr):
	less = []
	pivotList = []
	more = []
	if len(arr) <= 1:
		return arr
	else:
		pass
</syntaxhighlight>

在MediaWiki 1.16之前,这个扩展使用的是<source>标签。 它现在仍然可以使用,不过<syntaxhighlight>也许可以帮助你获取比<source>更准确的结果(例如XML语言)。

样式

如果您觉得标签里面的预览文字太大,您可以调整它通过把下面的代码拷贝到您wiki的MediaWiki:Common.css中 (创建它如果不存在的话):

/* 放置在这里的CSS会应用于全部皮肤 */
.mw-highlight pre {
	font-size: 90%;
}

代码块的外框可以通过在上方代码中插入一行border: 1px dashed blue;实现。 控制使用的字体也可以通过添加font-family: "Courier New", monospace;到上面的代码中。

语法高亮错误分类

该扩展将添加在<source><syntaxhighlight>标签中有错误lang属性的页面到一个追踪分类。 消息文字MediaWiki:syntaxhighlight-error-category决定了分类的名字,在本维基上为Category:Pages with syntax highlighting errors

导致页面被此类别标记的最常见错误是<syntaxhighlight><source>标记,根本没有lang属性,因为此扩展的旧版本支持“$wgSyntaxHighlightDefaultLang”的定义。 这些通常既可以替换为<pre>,也可以将lang="bash"lang="text"添加到标签。

参数

语言

lang="Name"属性定义了应使用什么词法分析器。 该语言会影响扩展如何高亮显示源代码。 pygments解析器区分大小写,所有语言都至少有一个大写字母(小写字母名称保留给gtags)。 参阅支持的语言这一章节获得关于受支持语言的详细内容。

def quickSort(arr):
    less = []
<syntaxhighlight lang="Python">
..
</syntaxhighlight>

指定了一个无效的或未知的语言名称,则该页面会被加入跟踪分类。 参阅语法高亮错误分类章节获取详细信息。

行号

line属性启用行号。

1 def quickSort(arr):
2 	less = []
<syntaxhighlight lang="Python" line>
..
</syntaxhighlight>

开始位置

start属性(与line相配合)定义了代码块的第一行行号。 例如,line start="55"将会使行号从55开始。

55 def quickSort(arr):
56     less = []
<syntaxhighlight lang="Python" line start="55">
..
</syntaxhighlight>

高亮

highlight属性将指定一行或多行将被标记(通过对指定的行显示不同的背景色)。 您可以指定多个行的数字通过逗号分隔(例如,highlight="1,4,8")或使用一个连字符和两个数字表示范围(例如,highlight="5-7")。 注意,行的数字将忽略任何start属性的重新标号。

3 def quickSort(arr):
4     less = []
5     pivotList = []
6     more = []
7     if len(arr) <= 1:
8         return arr

上面为下方代码的输出结果:

<syntaxhighlight lang="Python" highlight="1,5-7" start='3' line>
..
</syntaxhighlight>

内联

MediaWiki版本: 1.26

该属性表示源代码将作为段落的一部分内联(而不是自己的块)。 该选项在MediaWiki 1.26版本开始可用。 为了保持向后兼容,enclose="none"也会有同样效果。

注意,换行符可以在标签开始和结束之间的任何空格处出现,若源代码带有class="nowrap"(在那些受支持的维基;见下方)或style=white-space:nowrap则是不换行的。

例如:

lambda x: x * 2是在Python的Lambda 表达式

是下方的结果:

<syntaxhighlight lang="Python" inline>lambda x: x * 2</syntaxhighlight>是在Python的[[w:Lambda (programming)|Lambda 表达式]]。

class样式

当使用了inline时,指定class="nowrap"(在那些受到支持的维基上,而不是MediaWiki本身)不应在代码块内的空格处出现换行符。

例如:

没有class="nowrap"

xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxlambda x: x * 2xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

With style="white-space:nowrap":

xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxlambda x: x * 2xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

style样式

style属性允许CSS属性被直接包含。 这相当于将块封装在<div>标签(不是<span>标签)中。 tab‑size属性不能够通过这种方式指定。它需要<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>

支持的语言

Pygments库为数百种计算机语言和文件格式提供支持。 full list is:

Programming languages

  • ActionScript
  • Ada
  • ANTLR
  • AppleScript
  • Assembly
  • Asymptote
  • Awk
  • Befunge
  • Boo
  • BrainFuck
  • C / C++
  • C#
  • Clojure
  • CoffeeScript
  • ColdFusion
  • Common Lisp
  • Coq
  • Cryptol
  • Crystal
  • Cython
  • D
  • Dart
  • Delphi
  • Dylan
  • Elm
  • Erlang
  • Ezhil
  • Factor
  • Fancy
  • Fortran
  • F#
  • GAP
  • Gherkin (Cucumber)
  • GL shaders
  • Groovy
  • Haskell
  • IDL
  • Io
  • Java
  • JavaScript
  • Lasso
  • LLVM
  • Logtalk
  • Lua
  • Matlab
  • MiniD
  • Modelica
  • Modula-2
  • MuPad
  • Nemerle
  • Nimrod
  • Objective-C
  • Objective-J
  • Octave
  • OCaml
  • PHP
  • Perl
  • PovRay
  • PostScript
  • PowerShell
  • Prolog
  • Python 2.x and 3.x
  • REBOL
  • Red
  • Redcode
  • Ruby
  • Rust
  • S, S-Plus and R
  • Scala
  • Scheme
  • Scilab
  • Smalltalk
  • SNOBOL
  • Tcl
  • Vala
  • Verilog
  • VHDL
  • Visual Basic.NET
  • Visual FoxPro
  • XQuery
  • Zephir

Template languages

  • Cheetah templates
  • Django / Jinja templates
  • ERB
  • Genshi
  • JSP
  • Myghty
  • Mako
  • Smarty templates
  • Tea

Other markup

  • Apache config files
  • Bash shell scripts
  • BBCode
  • CMake
  • CSS
  • Debian control files
  • Diff files
  • DTD
  • Gettext catalogs
  • Gnuplot script
  • Groff markup
  • HTML
  • HTTP sessions
  • INI-style config files
  • IRC logs (irssi style)
  • Lighttpd config files
  • Makefiles
  • MoinMoin/Trac Wiki markup
  • MySQL
  • Nginx config files
  • POV-Ray scenes
  • Ragel
  • Redcode
  • ReST
  • Robot Framework
  • RPM spec files
  • SQL
  • Squid configuration
  • TeX
  • tcsh
  • Vim Script
  • Windows batch files
  • XML
  • XSLT
  • YAML

([$external-link1 完整列表]和[$pypments 文档中的http://pygments.org/docs/lexers/完整详细信息])并且GeSHi支持某些语言名称的映射(完整列表)。

Pygments还没有提过对"wikitext"或"mediawiki"提供词法分析(phab:T29828) 。 请使用"html"、"xml"或"moin"代替。

以下是GeSHi可以高亮显示的部分语言清单,在切换到Pygments之后不再支持语言的被用横线删去。


安装

This extension requires access to the shell.
MediaWiki 1.31捆绑在一起的此扩展版本需要在服务器上安装Python3(python3)。这是与MediaWiki 1.30捆绑在一起的版本的更改,后者使用的是Python2(python)。请注意,python3二进制文件必须安装在PHP解释器的执行PATH中。
尽管它已经更新到Pygments(并不使用GeSHi),尽管它的名称已更新,但此扩展在内部仍使用以下所述的前一个文件名。
  • 下载文件,并将其放置在您extensions/文件夹中的SyntaxHighlight_GeSHi目录内。
  • 将下列代码放置在您的LocalSettings.php的底部:
    wfLoadExtension( 'SyntaxHighlight_GeSHi' );
    
  • Linux中,请为pygmentize二进制文件设置可执行权限。
chmod a+x /path/to/extensions/SyntaxHighlight_GeSHi/pygments/pygmentize
  • Yes 完成 – 在您的wiki上导航至Special:Version,以验证扩展已成功安装。

致使用MediaWiki 1.24或更早版本的用户:

上面的说明介绍的是安装此扩展的新方法,它使用wfLoadExtension() 如果您需要在早期版本(MediaWiki 1.24和更早版本)中安装此扩展,而不是wfLoadExtension( 'SyntaxHighlight_GeSHi' );,您需要使用:

require_once "$IP/extensions/SyntaxHighlight_GeSHi/SyntaxHighlight_GeSHi.php";
当安装自Git时,请注意在MediaWiki 1.26版本开始,该扩展需要Composer

所以,在从Git安装之后,切换到包含该扩展的目录。例如:"../extensions/SyntaxHighlight_GeSHi/"并运行composer install --no-dev,或在更新时:composer update --no-dev

或者最好将"extensions/SyntaxHighlight_GeSHi/composer.json"添加到在Wiki根目录下的"composer.local.json"文件中,例如:
{
	"extra": {
		"merge-plugin": {
			"include": [
				"extensions/SyntaxHighlight_GeSHi/composer.json"
			]
		}
	}
}
现在运行composer update --no-dev。 Voilà!
当通过FTP上传扩展时,请确保将pygments/pygmentize文件作为binary传输。

配置

Linux
  • $wgPygmentizePath(可选):Pygments包中pygmentize的绝对路径。 默认情况下,扩展中附带了Pygments包,$wgPygmentizePath指向默认了Pygments包,但如果需要,您可以指向不同的版本。 例如:$wgPygmentizePath = "/usr/local/bin/pygmentize";
  • $wgSyntaxHighlightModels:对一些维基页面配置默认的语法分析器。 默认情况下它会高亮显示javascript和css页面。 额外的内容模型可以通过扩展名配置(例如:Lua、JSON等)。
Windows
  • 若您在一台Windows主机上运行MediaWiki,您需要设置Pygmentize.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中。

问题排除

找升级到MediaWiki 1.26 版本及其以后,一些用户开始报告与这个扩展的问题。 有些情况下,当某些语言(如Lua)可能无法突出显示并打开调试中时,MediaWiki会抛出错误Notice: Failed to invoke Pygments: /usr/bin/env: python3: No such file or directory

  • 尝试在LocalSettings.php指定$wgPygmentizePath为外部pygmentize二进制文件。
  • In shared hosting environments with cPanel, this can be done by setting up a new Python application through the "Setup Python App" menu, and activating the virtual environment for the app through SSH (source /virtualenv/python/3.5/bin/activate). After this, the Pygments module can be added to the Python app, for which navigate to the virtual environment path (cd virtualenv/python/3.5/bin/), download and install Pygments (./pip install Pygments) and then activate the module by adding "Pygments" under the "Existing applications" section of the "Setup Python App" menu. This will create the required file at path: virtualenv/python/3.5/bin/pygmentize
  • 获取更多建议和信息,请参见P站任务


可视化编辑器集成

该插件可以使用可视化编辑器直接编辑。 一个对话框会被打开,当一个用户想要编辑sourcesyntaxhighlight段落。 要使其工作,可视化编辑器必须被安装且从最新git版本被配置,与Parsoid相同。 该功能在较老的Parsoid版本中随机地无法使用。 参见Extension:SyntaxHighlight/VisualEditor获取更多细节

高级

<pre><code>标记不同,HTML代码实体(例如&nbsp;)不需要(也不应该)将 & 字符转义为&amp;。 与<pre>标签一样,但与<code>标签不同,范围内的标签(除了自己的结束标签)不需要将<符号转义为&lt;,也不需要使用<nowiki>标签转义wikitext。

此外,虽然<pre>假定制表符每8个字符停止并在复制渲染文本时使用实际空格渲染制表符,<syntaxhighlight>使用4空格制表位(Internet Explorer使用8除外)并保留渲染文本中的制表符,后者可以使用封闭的<span style="-moz-tab-size:nn; -o-tab-size:nn; tab-size:nn;">标记(不是<div>,而不是使用自己的style属性)进行更改。 Firefox4.0起需要-moz-前缀,Opera需要-o-前缀(从10.60到15)。[1] (请注意,wiki编辑框采用8空格缩进。) 这仅适用于实际保存的页面,通过编辑框或Special:ExpandTemplates生成的预览可能会有所不同。

另请参阅

脚注