“扩展MW:SyntaxHighlight”的版本间差异

来自Wikioe
跳到导航 跳到搜索
 
(未显示同一用户的4个中间版本)
第33行: 第33行:


== 安装 ==
== 安装 ==
'''syntaxhighlight'''需要用到'''pygments'''库,而'''pygments'''是用'''Python'''编写的语法高亮引擎,需要'''Python'''的支持<ref name="SyntaxHighlight#Installation">Extension:SyntaxHighlight#Installation https://www.mediawiki.org/wiki/Extension:SyntaxHighlight/zh#%E5%AE%89%E8%A3%85</ref><ref>What are the system requirements? https://pygments.org/faq/</ref>。<br/>
'''SyntaxHighlight'''需要用到'''pygments'''库,而'''pygments'''是用'''Python'''编写的语法高亮引擎,需要'''Python'''的支持<ref name="SyntaxHighlight#Installation">[https://www.mediawiki.org/wiki/Extension:SyntaxHighlight/zh#%E5%AE%89%E8%A3%85 Extension:SyntaxHighlight#Installation]</ref><ref>[https://pygments.org/faq/ What are the system requirements?]</ref>。
所以,syntaxhighlight的安装配置需要:
 
# (已集成[https://github.com/wikimedia/mediawiki-extensions-SyntaxHighlight_GeSHi/tree/REL1_35 SyntaxHighlight_GeSHi]到MediaWiki项目,不需要单独下载)
所以,SyntaxHighlight 的安装配置需要:
# '''安装Python到服务器''',MediaWiki 1.31之后需要Python3
# (已集成 [https://github.com/wikimedia/mediawiki-extensions-SyntaxHighlight_GeSHi/tree/REL1_35 SyntaxHighlight_GeSHi] 到 MediaWiki 项目,不需要单独下载)
# '''确认服务器的站点用户(如www)对支持组件(Python路径和pygments文件)有读取、执行权限'''
# '''安装 Python 到服务器''',MediaWiki 1.31 之后需要 Python3。
# '''确认服务器的站点用户(如:www)对支持组件(Python 路径和 pygments 文件)有读取、执行权限'''


== 参数 ==
== 参数 ==
第66行: 第67行:


== [https://www.mediawiki.org/wiki/Extension:SyntaxHighlight#Supported_languages 支持语言] ==
== [https://www.mediawiki.org/wiki/Extension:SyntaxHighlight#Supported_languages 支持语言] ==
* 支持“'''properties'''”(配置文件)【2020/10/07 22:17:38】
{| class="wikitable" style="width="100%";"
{| class="wikitable" style="width="100%";"
|-  
|-  
第162行: 第164行:
Note that the python3 binary must be installed in the execution PATH of the PHP interpreter.
Note that the python3 binary must be installed in the execution PATH of the PHP interpreter.
</pre>
</pre>
'''所以需要安装Python3到服务器,并确保站点用户(如www)对Python文件夹有读取、执行权限。'''<br/>
'''''所以需要安装Python3到服务器,并确保站点用户(如www)对Python文件夹有读取、执行权限。'''''<br/>
* [显示MediaWiki错误],可以看到详细的错误信息。
* [显示MediaWiki错误],可以看到详细的错误信息。



2022年8月23日 (二) 11:48的最新版本


说明

SyntaxHighlight,原名SyntaxHighlight_GeSHi,提供了丰富的格式的源代码使用<syntaxhighlight>标签。它由Pygments库提供支持,并支持数百种不同的编程语言和文件格式。与<pre>和标记一样,文本的显示方式与键入时完全相同,并保留所有空白。

启用SyntaxHighlight:

wfLoadExtension( 'SyntaxHighlight_GeSHi' );

安装后,您可以在Wiki页面上使用<syntaxhighlight>标签,如:

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

效果:

def quick_sort(arr):
	less = []
	pivot_list = []
	more = []
	if len(arr) <= 1:
		return arr
	else:
		pass

安装

SyntaxHighlight需要用到pygments库,而pygments是用Python编写的语法高亮引擎,需要Python的支持[1][2]

所以,SyntaxHighlight 的安装配置需要:

  1. (已集成 SyntaxHighlight_GeSHi 到 MediaWiki 项目,不需要单独下载)
  2. 安装 Python 到服务器,MediaWiki 1.31 之后需要 Python3。
  3. 确认服务器的站点用户(如:www)对支持组件(Python 路径和 pygments 文件)有读取、执行权限

参数

参数 说明
lang 该属性定义应使用的词法分析器
line 使用该line属性启用行号
start 定义了代码块的开始行号(与line结合使用)
highlight 设定一个或多个行为高亮,使用“,”或“-”指定行号(如highlight="1,5-7")。该行号为自然行号,而非以start设定的行号
inline 该属性指示源代内容是段落的一部分,而非像<pre>标签一样自成一块
class inline使用时,class="nowrap"(在支持它的那些Wiki上;不在MediaWiki本身上)指定在代码块内的空格处不应出现换行符。
style 该属性允许直接包含CSS属性。与在
(不是)标签中使用一样。

支持语言

  • 支持“properties”(配置文件)【2020/10/07 22:17:38】
编程语言
  • ActionScript, Ada, Agda (incl. literate), Alloy, AMPL, ANTLR, APL, AppleScript, Assembly (various), Asymptote, Augeas, AutoIt, Awk
  • BBC Basic, Befunge, BlitzBasic, Boa, Boo, Boogie, BrainFuck
  • C, C++ (incl. dialects like Arduino), C#, Chapel, Charm++ CI, Cirru, Clay, Clean, Clojure, CoffeeScript, ColdFusion, Common Lisp, Component Pascal, Coq, Croc (MiniD), Cryptol (incl. Literate Cryptol), Crystal, Cypher, Cython
  • D, Dart, DCPU-16, Delphi, Dylan (incl. console)
  • Eiffel, Elm, Emacs Lisp, Email, Erlang (incl. shell sessions), Ezhil
  • Factor, Fancy, Fantom, Fennel, FloScript, Fortran, FreeFEM++, F#
  • GAP, Gherkin (Cucumber), GLSL shaders, Golo, Gosu, Groovy
  • Haskell (incl. Literate Haskell), HLSL, HSpec, Hy
  • IDL, Idris (incl. Literate Idris), Igor Pro, Io
  • Jags, Java, JavaScript, Jasmin, Jcl, Julia
  • Kotlin
  • Lasso (incl. templating), Limbo, LiveScript, Logtalk, Logos, Lua
  • Mathematica, Matlab, Modelica, Modula-2, Monkey, Monte, MoonScript, Mosel, MuPad
  • NASM, Nemerle, NesC, NewLISP, Nimrod, Nit, Notmuch, NuSMV
  • Objective-C, Objective-J, Octave, OCaml, Opa, OpenCOBOL
  • ParaSail, Pawn, PHP, Perl 5, Pike, Pony, PovRay, PostScript, PowerShell, Praat, Prolog, Python (incl. console sessions and tracebacks)
  • QBasic
  • Racket, Raku a.k.a. Perl 6, REBOL, Red, Redcode, Rexx, Ride, Ruby (incl. irb sessions)Rust
  • S, S-Plus, R, Scala, Scdoc, Scheme, Scilab, SGF, Shell scripts (Bash, Tcsh, Fish), Shen, Silver, Slash, Slurm, Smalltalk, SNOBOL, Snowball, Solidity, SourcePawn, Stan, Standard ML, Stata, Swift, Swig, SuperCollider
  • Tcl, Tera Term language, TypeScript, TypoScript
  • USD, Unicon, Urbiscript
  • Vala, VBScript, Verilog, SystemVerilog, VHDL, Visual Basic.NET, Visual FoxPro
  • Whiley
  • Xtend, XQuery
  • Zeek, Zephir, Zig
模板语言
  • Angular templates
  • Cheetah templates, ColdFusion
  • Django / Jinja templates
  • ERB (Ruby templating), Evoque
  • Genshi (the Trac template language)
  • Handlebars
  • JSP (Java Server Pages)
  • Liquid
  • Myghty (the HTML::Mason based framework), Mako (the Myghty successor)
  • Slim, Smarty templates (PHP templating)
  • Tea, Twig
标记语言
  • Apache config files, Apache Pig
  • BBCode
  • CapDL, Cap'n Proto, CMake, Csound scores, CSS
  • Debian control files, Diff files, Dockerfiles, DTD
  • EBNF, E-mail headers, Extempore
  • Flatline
  • Gettext catalogs, Gnuplot script, Groff markup
  • Hexdumps, HTML, HTTP sessions
  • IDL, Inform, INI-style config files, IRC logs (irssi style), Isabelle
  • JSGF notation, JSON,JSON-LD
  • Lean theorem prover, Lighttpd config files, Linux kernel log (dmesg), LLVM assembly, LSL scripts
  • Makefiles, MoinMoin/Trac Wiki markup, MQL, MySQL
  • NCAR command language, Nginx config files, Nix language, NSIS scripts, Notmuch
  • POV-Ray scenes, Puppet
  • QML
  • Ragel, Redcode, ReST, Roboconf, Robot Framework, RPM spec files, Rql, RSL
  • Scdoc, SPARQL, SQL,also MySQL,SQLite, Squid configuration
  • TADS 3, Terraform, TeX, Thrift, TOML, Treetop grammars
  • USD (Universal Scene Description)
  • Varnish configs, VGLVim Script
  • WDiffWindows batch files
  • XML, XSLT
  • YAML
  • Windows Registry files

错误

存在语法高亮错误的页面

存在语法高亮错误的页面.png

页面被添加到追踪分类“存在语法高亮错误的页面”(可在“特殊页面”-“追踪分类”中的“存在语法高亮错误的页面”查看统计信息),可能的原因为:

  1. <syntaxhighlight>标签中没有lang属性;
  2. <syntaxhighlight>标签中的lang设置了不支持的语言;
  3. 扩展syntaxhighlight的运行环境错误,不能正常运行(如:缺失Pygments库或python)

使用废弃标签的页面

使用废弃标签的页面.png

页面被添加到追踪分类“使用废弃标签的页面”(可在“特殊页面”-“追踪分类”中的“使用已弃用source标签的页面”查看统计信息),可能的原因为:

  1. 使用了已废弃的<source>标签,而非<syntaxhighlight>标签。

FAQ

关于SyntaxHighlight的安装

安装MediaWiki并在配置文件LocalSettings.php中加载SyntaxHighlight,此时使用<SyntaxHighlight>的标签会出现“存在语法高亮错误的页面”的问题,因为没有Python支持。
而网上并没有详细的配置系列可供参考,只有MediaWiki的Extension:SyntaxHighlight页面有粗略的说明[1]

The version of this extension bundled with MediaWiki 1.31 requires Python version 3 (python3) to be installed on the server. ...
Note that the python3 binary must be installed in the execution PATH of the PHP interpreter.

所以需要安装Python3到服务器,并确保站点用户(如www)对Python文件夹有读取、执行权限。

  • [显示MediaWiki错误],可以看到详细的错误信息。

安装Python

Notice:  Failed to invoke Pygments: /usr/bin/env: python3: No such file or directory [Called from SyntaxHighlight::highlight in /www/wwwroot/wiki.eijux.com/extensions/SyntaxHighlight_GeSHi/includes/SyntaxHighlight.php at line 356] in /www/wwwroot/wiki.eijux.com/includes/debug/MWDebug.php on line 430
  • (其中“/usr/bin/env: python3”,参见“/www/wwwroot/wiki.eijux.com/extensions/SyntaxHighlight_GeSHi/pygments”中pygmentizeshebang:“#!/usr/bin/env python3”,该shebang指定从PATH环境变量中来查找python3解释器来执行该脚本)

即:在系统环境中找不到 python3来执行pygmentize内容。
步骤:

  1. 安装Python3到服务器,可以采用的方式:
    1. 安装Python3,需防止和宝塔Python2.7冲突(服务器暂时没有测试和开发需求,单独安装调试不太必要。之后在本地开发环境再搞吧)
      • 执行 “python -V”(或“python --version”)可以看到已安装的python版本为Python 2.7.5,而非Python3
    2. 使用BTPanel软件商店的“Python项目管理器”(方便统一管理BTPanel内的环境):
      • pythonmamager安装在“/www/server/panel/plugin/pythonmamager”
      • pythonmamager内安装的Python位于“/root/.pyenv/versions”(.pyenv为隐藏文件夹)
  2. 创建Python3的软连接到/usr/bin中:
    ln -s /root/.pyenv/versions/3.6.11/bin/python3.6 /usr/bin/python3

设置权限

Notice:  Failed to invoke Pygments: /usr/bin/env: python3: Permission denied [Called from SyntaxHighlight::highlight in /www/wwwroot/wiki.eijux.com/extensions/SyntaxHighlight_GeSHi/includes/SyntaxHighlight.php at line 356] in /www/wwwroot/wiki.eijux.com/includes/debug/MWDebug.php on line 430

即:(当前用户,如BTPanel的www)没有权限使用系统中的python3来执行pygmentize。(www用户不能读写、执行root下“/root/.pyenv/versions/3.6.11/bin”的内容)
步骤:

  1. 为“/root/.pyenv/versions/3.6.11/bin/python3.6”路径中的所有文件夹,都添加其他用户的读取执行权限:
    (包括root、.pyenv、versions、3.6.11、bin文件夹,以及可执行文件python3.6,但并非全部子文件夹)
  2. 为pygmentize二进制文件设置执行权限
    chmod a+x /www/wwwroot/wiki.eijux.com/extensions/SyntaxHighlight_GeSHi/pygments/pygmentize


经验证(已验证各步骤有效、可重现),以上设置可以完成syntaxhighlight插件的配置,当前使用良好。【2020/09/14 01:46:30】

参考

  1. 1.0 1.1 Extension:SyntaxHighlight#Installation 引用错误:无效<ref>标签;name属性“SyntaxHighlight#Installation”使用不同内容定义了多次
  2. What are the system requirements?