Extension:SyntaxHighlight

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

Other languages:
Deutsch • ‎English • ‎Türkçe • ‎dansk • ‎беларуская (тарашкевіца)‎ • ‎русский • ‎українська • ‎中文 • ‎日本語 • ‎한국어
This extension comes with MediaWiki 1.21 and above. Thus you do not have to download it again. However, you still need to follow the other instructions provided.
Для підсвічування синтаксису вікітексту при використанні редактора коду, див. розширення CodeMirror користувацьких скриптів Remember the dot і Cacycle.
Довідка про розширення MediaWiki
OOjs UI icon advanced.svg
SyntaxHighlight
Статус релізу: стабільний
SyntaxHighlighting with Pygments.png
Реалізація Tag
Опис Дозволяє підсвічування синтаксису початкового коду на вікі-сторінках.
Автор(и)
  • Brion Vibber,
  • Tim Starling,
  • Rob Church,
  • Ori Livneh
Найновіша версія continuous updates
MediaWiki 1.25+
Зміни в БД No
Ліцензія GNU General Public License 2.0 or later
Завантажити
README
Параметри

  • $wgPygmentizePath
  • $wgSyntaxHighlightModels
Теги
<syntaxhighlight>
Використані hook'и
ContentGetParserOutput
ParserFirstCallInit
ApiFormatHighlight
ResourceLoaderRegisterModules
Translate the SyntaxHighlight extension if it is available at translatewiki.net
Переглянути використання
Issues Open tasks · Report a bug

Розширення SyntaxHighlight, раніше відоме як SyntaxHighlight_GeSHi, надає багате форматування початкового коду за допомогою тегу <syntaxhighlight>. Воно працює на бібліотеці Pygments і підтримує сотні різних мов програмування та форматів файлів.

Як і з тегами <pre> і <poem >, текст відображається точнісінько так, як був набраний, зберігаючи будь-які пропуски.

Використання

Раз установивши, можна використовувати теги «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).

Стилізація

Якщо відображуваний код завеликий, можна підігнати його, помістивши наступне на сторінку MediaWiki:Common.css у вашій Вікіпедії (створіть її за відсутності):

/* Розміщений тут CSS застосовуватиметься для всіх скінів */
.mw-highlight pre {
	font-size: 90%;
}

Оболонкування блоків коду в межі можна зробити шляхом вставки рядка на кшталт border: 1px dashed blue; у розділі вище. Контроль над використовуваною родиною шрифтів також може здійснюватися вставкою рядка на кшталт font-family: "Courier New", monospace; у розділі вище.

Категорія помилок підсвічування синтаксису

Розширення додає сторінки, що мають поганий атрибут lang у тегах <source> або <syntaxhighlight>, до категорії відстеження. Ключ повідомлення MediaWiki:syntaxhighlight-error-category визначає назву категорії; у цій Вікіпедії це Category:Pages with syntax highlighting errors.

Найпоширенішою помилкою, що призводить до позначення сторінок даною категорією, є повна відсутність атрибуту lang у тегах <syntaxhighlight> або <source>, оскільки старіші версії даного розширення підтримуювали визначення «$wgSyntaxHighlightDefaultLang». Як правило, можна або замінити на <pre> чи lang="bash", або додати lang="text" до тегу.

Категорія також може додаватися, а вміст не підсвічуватися, якщо текст перевищує 1000 рядків або 100 кБ[1].

Параметри

lang

Атрибут lang="name" визначає, який лексичний аналізатор слід використати. Мова впливає на підсвічування розширенням початкового коду. Див. розділ Підтримувані мови для подробиць підтримуваних мов.

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

Вказання недійсної чи невідомої назви помітить сторінку категорією відстеження. Детальніше див. у розділі Категорія помилок підсвічування синтаксису на цій сторінці.

line

Атрибут line вмикає номери рядків.

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

start

Атрибут start (у поєднанні з line) визначає номер першого рядка блоку коду. Наприклад, line start="55" пронумерує рядки, починаючи з 55.

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

highlight

Атрибут 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>

inline

Версії MediaWiki: 1.26

Атрибут позначає, що початковий код слід вбудувати як частину абзацу (на відміну від власного блоку). Ця опція доступна, починаючи з MediaWiki 1.26. Для зворотної сумісності атрибут enclose="none" має наслідок ту саму поведінку.

Зауважте, що розриви рядків можуть відбуватися в будь-якому місці між відкривальним і закривальним тегами, якщо початковий код не марковано нерозривним за допомогою class="nowrap" (на тих Вікіпедіях, що підтримують його; див. нижче) чи style=white-space:nowrap.

Наприклад:

lambda x: x * 2 є лямбда-виразом у мові Python.

є результатом:

<syntaxhighlight lang="Python" inline>lambda x: x * 2</syntaxhighlight> є [[w:uk:Анонімна функція|лямбда-виразом]] у мові Python.

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 надає підтримку сотень комп'ютерних мов і форматів файлів. повний список:

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

Точні коди мов див. у повних деталях у документі Pygments, і деякі відображення для деяких назв мов, які підтримує GeSHi (повний список).

Pygments ще не надає лексичний аналізатор «wikitext» чи «mediawiki» (phab:T29828). Використовуйте натомість «html», «xml» або «moin».

Нижче частковий список мов, які GeSHi може підсвітити, закреслені мови більше не підтримуються після перемикання на Pygments.


Встановлення

Версія даного розширення, що йде у комплекті з MediaWiki 1.31, вимагає встановлення на сервері Python версії 3 (python3). Це зміна з версії, що йде у комплекті з MediaWiki 1.30, яка використовувала Python версії 2 (python). Зауважте, що двійкові файли python3 повинні бути встановлені у виконавчий PATH інтерпретатора PHP.
Попри це оновлення Pygments (і далеко від GeSHi) і попри оновлені назви, дане розширення внутрішньо досі використовує колишні імена файлів, як зазначено нижче.
  • Download and place the file(s) in a directory called SyntaxHighlight_GeSHi in your extensions/ folder.
  • Add the following code at the bottom of your LocalSettings.php:
    wfLoadExtension( 'SyntaxHighlight_GeSHi' );
    
  • На Linux установіть дозволи на виконання для двійкового файлу pygmentize. Для цього можна використати клієнт FTP або наступну команду оболонки:
chmod a+x /path/to/extensions/SyntaxHighlight_GeSHi/pygments/pygmentize
  • Yes Готово – Navigate to Special:Version on your wiki to verify that the extension is successfully installed.

To users running MediaWiki 1.24 or earlier:

The instructions above describe the new way of installing this extension using wfLoadExtension() If you need to install this extension on these earlier versions (MediaWiki 1.24 and earlier), instead of wfLoadExtension( 'SyntaxHighlight_GeSHi' );, you need to use:

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" до файлу «composer.local.json» у кореневій директорії вашої Вікіпедії, наприклад
{
	"extra": {
		"merge-plugin": {
			"include": [
				"extensions/SyntaxHighlight_GeSHi/composer.json"
			]
		}
	}
}
Тепер запустіть composer update --no-dev. Voilà!
При завантаженні розширення через FTP впевніться у завантаженні файлу «pygments/pygmentize» з типом передавання «binary».

Конфігурація

Linux
  • $wgPygmentizePath (опційна): Абсолютний шлях до pygmentize з пакету Pygments. Розширення за замовчуванням збирає пакет Pygments і точки $wgPygmentizePath у комплектну версію, але можна вказати на іншу версію, якщо хочете. Наприклад: $wgPygmentizePath = "/usr/local/bin/pygmentize";.
  • $wgSyntaxHighlightModels: Налаштовує лексичний аналізатор за замовчуванням для деяких вікі-сторінок. За замовчування це підсвічуватиме сторінки javascript і css. Додаткові моделі вмісту можуть налаштовуватися розширеннями (наприклад, Lua, JSON, …).
Windows
  • Якщо ви розміщуєте свою MediaWiki на машині Windows, ви маєте встановити шлях для Pygmentize.exe $wgPygmentizePath = "c:\\Python27\\Scripts\\pygmentize.exe";
    • За відсутності pygmentize.exe запустіть easy_install Pygments з командного рядка всередині папки Scripts для генерування файлу.

При використанні комплектного двійкового файлу pygmentize (extensions/SyntaxHighlight_GeSHi/pygments/pygmentize) впевніться, що веб-сервер має дозвіл виконувати його. Якщо ваш хост не дозволяє вам додавати виконавчі файли до веб-директорії, встановіть python-pygments і додайте $wgPygmentizePath = pygmentize до LocalSettings.php.

Вирішення проблем

Після оновлення до MediaWiki v1.26 і вище деякі користувачі почали доповідати про проблеми з розширенням. Можливі випадки, коли деякі мови на кшталт Lua могли не підсвічуватися, а після увімкнення налагодження MediaWiki викидав помилку Notice: Failed to invoke Pygments: /usr/bin/env: python3: No such file or directory.

  • Спробуйте вказати $wgPygmentizePath у LocalSettings.php просто до зовнішнього двійкового файлу 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


Інтеграція з Візуальним редактором

Плагін дозволяє пряме редагування з Візуальним редактором. Спливне вікно відкривається, коли користувач хоче редагувати розділи source або syntaxhighlight. Аби це працювало, Візуальний редактор повинен бути встановлений і налаштований з останньої версії на git, так само для Parsoid. Можливість довільно не працює зі старішими версіями Parsoid. Детальніше див. Extension:SyntaxHighlight/VisualEditor

Розширено

На відміну від тегів <pre> та <code>, символьні сутності HTML на кшталт &nbsp; не вимагають (і не повинні) екранування символу & як &amp;. Як тег <pre>, але на відміну від тегу <code>, теги всередині діапазону (іншого, ніж власний закривальний тег) не вимагає екранування символу < як &lt;, а вікітекст не вимагає екранування тегом <nowiki>.

Більше того, хоча <pre> припускає табуляції щовісім символів і відображає їх за допомогою дійсних пропусків при копіюванні відображеного тексту, <syntaxhighlight> використовує чотири-пропускні табуляції (за винятком Internet Explorer, який використовує 8) і зберігає символи табуляції у відображеному тексті; останнє може бути змінено за допомогою огородження тегом <span style="-moz-tab-size:nn; -o-tab-size:nn; tab-size:nn;"> (не <div> і не використовуючи власний атрибут style). Префікс -moz- вимагається для Firefox (з версії 4.0), а префікс -o- вимагається для Opera (з версії 10.60 до 15).[2] (Зауважте, що вікно редагування вікі припускає восьми-пропускні табуляції.) Це застосовується лише для дійсних збережених сторінок, попередні перегляди, згенеровані через вікна редагування чи Special:ExpandTemplates можуть відрізнятися.

Див. також

  • Pygments – Python syntax highlighter
  • Пов'язані розширення:
    • Extension:GoogleCodePrettify – підсвічувальник синтаксису, що використовує бібліотеку Google Code Prettify.
    • Extension:SyntaxHighlighter – підсвічувальник синтаксису, що використовує бібліотеку SyntaxHighlighter.
    • Extension:ViewFiles – розширення, залежно від цього, для підтримки підсвіченого тексту з файлів, переглянутих через спеціальну сторінку.

Примітки