Extension:SyntaxHighlight/ru

Расширение SyntaxHighlight, ранее известное как SyntaxHighlight_GeSHi обеспечивает огромное количество подсветок синтаксиса кода используя тег Расширение работает от библиотеки Pygments и поддерживает сотни различных языков программирования и форматов файлов.

Подобно тегам и , текст отображается точно так же, как и набранный, сохраняя любое пустое пространство.

The SyntaxHighlight extension does not work on hardened wiki installations due to lack of proc_open, shell_exec and friends. See Phrabicator T250763.

Применение
После установки вы можете использовать теги «syntaxhighlight» на страницах вики. Например,

является результатом следующей разметки wikitext:

В старых версиях (до MediaWiki 1.16) расширение использовало тег. Этот вариант по-прежнему поддерживается, но считается устаревшим. Вместо него необходимо использовать.

Стайлинг
Если отображаемый код слишком велик, вы можете настроить его, поместив следующее на страницу MediaWiki:Common.css в своей вики (создайте её, если она не существует):

Выделение рамкой кодовых блоков в границах можно сделать, вставив строку, подобную, в секции выше. Контроль над «семейством используемых шрифтов» также может быть осуществлен путем вставки строки, такой как, в секции выше.

Категория подсветки ошибок синтаксиса
Расширение добавляет страницы, которые имеют неверный атрибут  в теге, в отслеживающую категорию. Ключ сообщения MediaWiki:syntaxhighlight-error-category определяет имя категории; на этой вики это Category:.

Наиболее распространённой ошибкой, которая приводит к тому, что страницы помечаются этой категорией, является тег вообще без атрибута , поскольку более старые версии этого расширения поддерживали определение. Обычно их можно заменить на, или к тегу можно добавить  или.

Категория также может быть добавлена, и её содержимое не будет выделено, если в тексте более 1000 строк или текст более 100 КБ.

lang
Атрибут  определяет, какой lexer следует использовать. Язык влияет на то, как расширение подсвечивает исходный код. Подробнее о поддерживаемых языках см. в разделе Поддерживаемые языки.

Указание недопустимого или неизвестного имени пометит страницу, что поместит её в категорию отслеживания. Подробнее см. в разделе Категория подсветки ошибок синтаксиса на этой странице.

line
Атрибут  активирует нумерацию строк.

start
Атрибут  (в сочетании с  ) определяет номер первой строки кода. Например,  начнёт нумерацию строк с числа 55.

highlight
Атрибут  указывает одну или несколько строк, которые должны быть отмечены (путем выделения этих строк другим цветом фона). Вы можете указать несколько номеров строк, разделенных запятыми (например, ) или диапазоны, используя два номера строк и дефис (например,  ).

является результатом

inline
Атрибут указывает, что исходный код должен быть встроенным как часть абзаца (в отличие от отдельного блока). Эта опция доступна начиная с MediaWiki 1.26. Для обратной совместимости атрибут  приводит к такому же поведению.

Например:

Следующий код  - это aнонимная функция в Python.

Является результатом:

class
Использование,   (на тех вики, которые его поддерживают, а не на самой MediaWiki) указывает, что разрывы строк не должны возникать в пробелах внутри блока кода.

Например:

Без :

xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx С : xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

style
Атрибут  позволяет напрямую использовать атрибуты CSS. Это эквивалентно включению блока в тег (не ). Атрибут  не может быть указан таким образом; для этого требуется заключение в тег, как описано ниже, в разделе  Дополнительно.

Например:

Является результатом:

Поддерживаемые языки
Библиотека Pygments обеспечивает поддержку сотен компьютерных языков и форматированных файлов. Полный список по состоянию на январь 2020 года:

Языки программирования
1=

ActionScript

Ada

Agda (включая Literate Agda)

Alloy

AMPL

ANTLR

APL

AppleScript

Ассемблер (различные)

Asymptote

Augeas

AutoIt

Awk

BBC Basic

Befunge

BlitzBasic

Boa

Boo

Boogie

BrainFuck

C, C++ (включая диалекты, например Arduino)

C#

Chapel

Charm++ CI

Cirru

Clay

Clean

Clojure

CoffeeScript

ColdFusion

Common Lisp

Component Pascal

Coq

Croc (MiniD)

Cryptol (включая Literate Cryptol)

Crystal

Cypher

Cython

D

Dart

DCPU-16

Delphi

Dylan (включая консоль)

Eiffel

Elm

Emacs Lisp

Email

Erlang (включая сессии в командной строке)

Ezhil

Factor

Fancy

Fantom

Fennel

FloScript

Forth

Fortran

FreeFEM++

F#

GAP

Gherkin (Cucumber)

Шейдеры GLSL

Golo

Gosu

Groovy

Haskell (включая Literate Haskell)

HLSL

HSpec

Hy

IDL

Idris (включая Literate Idris)

Igor Pro

Io

Jags

Java

JavaScript

Jasmin

Jcl

Julia

Kotlin

Lasso (включая шаблонизирование)

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 (включая сессии в командной строке и трассировки стека)

QBasic

Racket

Raku a.k.a. Perl 6

REBOL

Red

Redcode

Rexx

Ride

Ruby (включая сессии irb)

Rust

S, S-Plus, R

Scala

Scdoc

Scheme

Scilab

SGF

Сценарии командной строки (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

Языки шаблонов
1=

Шаблоны Angular

Шаблоны Cheetah

ColdFusion

Шаблонизатор Django / Jinja

ERB (шаблонизатор Ruby)

Evoque

Genshi (шаблонизатор проекта Trac)

Handlebars

JSP (Java Server Pages)

Liquid

Myghty (фреймворк на основе HTML::Mason)

Mako (преемник Myghty)

Slim

Smarty (шаблонизация для языка PHP)

Tea

Twig

Другая разметка
1=

Конфигурационные файлы Apache

Apache Pig

BBCode

CapDL

Cap'n Proto

CMake

Партитуры Csound

CSS

Управляющие (control) файлы Debianа

Diff файлы

Dockerfiles

DTD

EBNF

Заголовки электронной почты

Extempore

Flatline

Каталоги gettext

Скрипт Gnuplot

Groff разметка

Hexdumps

HTML

HTTP сессии

IDL

Inform

Конфигурационные файлы в стиле .ini

Логи IRC (в стили irssi)

Isabelle

Нотация JSGF

JSON, JSON-LD

Доказатель теорем Lean

Конфигурационные файлы lighttpd

Сообщения ядра Linux (dmesg)

Сборка LLVM

Скрипты LSL

Makefiles

Вики-разметка MoinMoin/Trac

MQL

MySQL

NCAR command language

Конфигурационные файлы nginx

Язык Nix

Скрипты NSIS

Notmuch

сцены POV-Ray

Puppet

QML

Ragel

Redcode

ReST

Roboconf

Robot Framework

файлы спецификации RPM

Rql

RSL

Scdoc

SPARQL

SQL, а также MySQL, SQLite

Конфигурационные файлы Squidа

TADS 3

Terraform

TeX

Thrift

TOML

Спецификации грамматик на Treetop

USD (Universal Scene Description)

Конфигурационные файлы Varnish

VGL

Vim Script

WDiff

Пакетный файл Windows

XML

XSLT

YAML

Файлы реестра Windows

См. детали в документации Pygments и здесь некоторые сопоставления для некоторых языков, которые поддерживались GeSHi (полный список).

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



Настройка

 * Linux:


 * (необязательно): Абсолютный путь к pygmentize пакета Pygments. Расширение связывает пакет Pygments и с установленной версией по умолчанию, но вы можете указать другую версию, если хотите. Например:.
 * : настроить lexer по умолчанию для некоторых страниц вики. По умолчанию подсвечиваются страницы кода javascript и css. Дополнительные модели контента могут быть сконфигурированы с помощью расширений (например, Lua, JSON, ..). Пример:


 * Windows:


 * Если вы размещаете свою Mediawiki на компьютере с Windows, вам необходимо установить путь для Pygmentize.exe в
 * Если в директории нет  запустите   из командной строки внутри папки , чтобы сгенерировать файл.

Если вы используете бинарный пакет pygmentize (extensions/SyntaxHighlight_GeSHi/pygments/pygmentize), убедитесь, что вашему веб-серверу разрешено его выполнение. Если ваш хост не позволяет добавлять исполняемые файлы в ваш веб-каталог, установите python-pygments и добавьте в LocalSettings.php.


 * Поиск и устранение неисправностей:

После обновления до MediaWiki v1.26 и выше некоторые пользователи начали сообщать о проблемах с расширением. Могут быть случаи, когда некоторые языки (например «Luа») могут не подсвечиваться, и при включении режима отладки MediaWiki выдает ошибку,.


 * Попробуйте указать в в 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 . After this, the Pygments module can be added to the Python app, for which navigate to the virtual environment path, download and 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:


 * См. T128993 для этого для дальнейших предложений и информации.
 * SELinux can also prevent the extension from running with an error similar to  in your audit.log. This can be allowed with

VisualEditor интеграция
Плагин позволяет прямое редактирование с помощью VisualEditor. Всплывающее окно открывается, когда пользователь хочет редактировать  секции. Чтобы это работало, VisualEditor должен быть установлен и настроен с последней версии git, такой же для Parsoid. Функция случайным образом не работает со старыми версиями Parsoid. Для более подробной информации смотрите

Дополнительно
В отличие от тегов и, символьные сущности HTML, такие как  , не имеют (и не должны) экранироваться символом   как. Подобно тегу, но, в отличие от тега , теги в пределах диапазона (кроме собственного закрывающего тега) не должны иметь экранированный символ  как  , а также не нужно экранировать викитекст тегом.

Кроме того, в то время как предполагает, что табуляция останавливается каждые 8 символов и отображает вкладки с использованием фактических пробелов при копировании текста,  использует четырехпозиционные табуляции (кроме Internet Explorer, который использует 8) и сохраняет символы табуляции в визуализированном тексте ; последний может быть изменен с помощью охватывающего тега  (не, и не используя собственный атрибут  ). Префикс  требуется для Firefox (начиная с версии 4.0), а префикс   требуется для Opera (от версии 10.60 до версии 15). (Обратите внимание, что в окне редактирования вики предполагаются 8-пробельные табуляции.) Это относится только к сохранённым страницам; превью, сгенерированные в окне редактирования, или Special:ExpandTemplates имеют отличия.

См. также

 * Pygments — Python syntax highlighter
 * Расширения, зависящие от этого:
 * — выделяет страницы на основе суффиксов заголовков.
 * Альтернативные расширения:
 * — расширение синтаксической подсветки, которое использует библиотеку HighlightJS (поддерживает некоторые языки которые Pygments не поддерживает, например Maxima)
 * — расширение синтаксической подсветки, которое использует библиотеку Google Prettify.
 * — расширение синтаксической подсветки кода, которое использует библиотеку SyntaxHighlighter.