2025-02-28 19:43:11 +08:00

495 lines
22 KiB
Plaintext
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Highlight.js
Highlight.js нужен для подсветки синтаксиса в примерах кода в блогах,
форумах и вообще на любых веб-страницах. Пользоваться им очень просто,
потому что работает он автоматически: сам находит блоки кода, сам
определяет язык, сам подсвечивает.
Автоопределением языка можно управлять, когда оно не справляется само (см.
дальше "Эвристика").
## Подключение и использование
В загруженном архиве лежит файл "highlight.pack.js" -- полная сжатая версия
библиотеки для работы. Все несжатые исходные файлы также есть в пакете, поэтому
не стесняйтесь в них смотреть!
Скрипт подключается одним файлом и одним вызовом инициализирующей
функции:
<script type="text/javascript" src="highlight.pack.js"></script>
<script type="text/javascript">
hljs.initHighlightingOnLoad();
</script>
Также вы можете заменить символы TAB ('\x09'), используемые для отступов, на
фиксированное количество пробелов или на отдельный `<span>`, чтобы задать ему
какой-нибудь специальный стиль:
<script type="text/javascript">
hljs.tabReplace = ' '; // 4 spaces
// ... or
hljs.tabReplace = '<span class="indent">\t</span>';
hljs.initHighlightingOnLoad();
</script>
Дальше скрипт ищет на странице конструкции `<pre><code>...</code></pre>`,
которые традиционно используются для написания кода, и код в них
размечается на куски, помеченные разными значениями классов.
### Инициализация вручную
Если вы используете другие теги для блоков кода, вы можете инициализировать их
явно с помощью функции `highlightBlock(code, tabReplace)`. Она принимает
DOM-элемент с текстом расцвечиваемого кода и опционально - строчку для замены
символов TAB.
Например с использованием jQuery код инициализации может выглядеть так:
$(document).ready(function() {
$('pre code').each(function(i, e) {hljs.highlightBlock(e, ' ')});
});
### Выбор стилей
Размеченным классами элементам кода можно задать желаемые стили например так:
.comment {
color: gray;
}
.keyword {
font-weight: bold;
}
.python .string {
color: blue;
}
.html .atribute .value {
color: green;
}
В комплекте с highlight.js идут несколько стилевых тем в директории styles,
которые можно использовать напрямую или как основу для собственных экспериментов.
Полный список классов для разных языков приведен ниже ("Языки").
## Экспорт
В файле export.html находится небольшая программка, которая показывает и дает
скопировать непосредственно HTML-код подсветки для любого заданного фрагмента кода.
Это может понадобится например на сайте, на котором нельзя подключить сам скрипт
highlight.js.
## Языки
В списке приведены все языки, которые знает библиотека с классами,
соответствующими различным синтаксическим частям. В скобках после
названий языков указаны идентификаторы языков, используемые в качестве
классов элемента `<code>`.
Python ("python"):
keyword ключевое слово языка
built_in стандартные значения (None, False, True и Ellipsis)
number число
string строка (любого типа)
comment комментарий
decorator @-декоратор функции
function заголовок функции "def some_name(...):"
class заголовок класса "class SomeName(...):"
title название функции или класса внутри заголовка
params все, что в скобках внутри заголовка функции или класса
Результаты профайлинга Питона ("profile"):
number число
string строка
builtin встроенная функция в строке результата
filename имя файла в строке результата
summary итоговые результаты профилирования
header заголовок таблицы результатов
keyword название колонки в заголовке
function название функции в строке результата (включая скобки)
title само название функци в строке результата (без скобок)
Ruby ("ruby"):
keyword ключевое слово языка
string строка
subst внутристроковая подстановка (#{...})
comment комментарий
yardoctag тег YARD
function заголовок функции "def ..."
class заголовок класса "class ..."
title название функции или класса внутри заголовка
parent название родительского класса
symbol символ
instancevar переменная класса
Perl ("perl"):
keyword ключевое слово языка
comment комментарий
number число
string строка
regexp регулярное выражение
sub заголовок процедуры (от "sub" до "{")
variable переменная, начинающаяся с "$", "%", "@"
operator оператор
pod документация (plain old doc)
PHP ("php"):
keyword ключевое слово языка
number число
string строка (любого типа)
comment комментарий
phpdoc параметры phpdoc в комментарии
variable переменная, начинающаяся с "$"
preprocessor метки препроцессора: "<?php" and "?>"
Scala ("scala"):
keyword ключевое слово языка
number число
string строка
comment комментарий
annotaion аннотация
javadoc javadoc-комментарии
javadoctag @-тег в javadoc
class заголовок класса
title название класса внутри заголовка
params все, что в скобках внутри заголовка класса
inheritance слова "extends" и "with" внутри заголовка класса
XML ("xml"):
tag любой открывающий или закрывающий тег от "<" до ">"
comment комментарий
pi инструкции обработки (<? ... ?>)
cdata раздел CDATA
attribute атрибут
value значение атрибута
HTML ("html"):
keyword тег языка HTML
tag любой открывающий или закрывающий тег от "<" до ">"
comment комментарий
doctype объявление <!DOCTYPE ... >
attribute атрибут внутри тега со значением или без
value значение атрибута
CSS ("css"):
keyword тег языка HTML в селекторах или свойство CSS в правилах
id #some_name в селекторах
class .some_name в селекторах
at_rule @-rule до первого "{" или ";"
attr_selector селектор атрибутов (квадатные скобоки в a[href^=http://])
pseudo псевдо-классы и элементы (:after, ::after и т.д.)
comment комментарий
rules все от "{" до "}"
value значение свойства внутри правила, все от ":" до ";" или
до конца блока правил
number число внутри значения
string строка внутри значения
hexcolor шестнадцатеричный цвет (#FFFFFF) внутри значения
function CSS-функция внутри значения
params все от "(" до ")" внутри функции
Django ("django"):
keyword тег HTML в HTML, встроенные шаблонные теги и фильтры в шаблонах
tag любой открывающий или закрывающий тег от "<" до ">"
comment комментарий
doctype объявление <!DOCTYPE ... >
attribute атрибут внутри тега со значением или без
value значение атрибута
template_tag шаблонный тег {% .. %}
variable шаблонная переменная {{ .. }}
template_comment шаблонный комментарий, и {# .. #}, и {% comment %}
filter фильтр от "|" до следующего фильтра или до конца тега
argument аргумент фильтра
Javascript ("javascript"):
keyword ключевое слово языка
comment комментарий
number число
literal специальное слово: "true", "false" и "null"
string строка
regexp регулярное выражение
function заголовок функции
title название функции внутри заголовка
params все, что в скобках внутри заголовка функции
VBScript ("vbscript"):
keyword ключевое слово языка
comment комментарий
number число
string строка
built_in встроенная функция
Lua ("lua"):
keyword ключевое слово языка
number число
string строка
comment комментарий
built_in встроенный оператор
function заголовок функции
title название функции внутри заголовка
params все, что в скобках внутри заголовка функции
long_brackets многострочная строка в [=[ .. ]=]
Delphi ("delphi"):
keyword ключевое слово языка
comment комментарий (любого типа)
number число
string строка
function заголовок функции, процедуры, конструктора или деструктора
title название функции, процедуры, конструктора или деструктора
внутри заголовка
params все, что в скобках внутри заголовка функций
class тело класса от "= class" до "end;"
Java ("java"):
keyword ключевое слово языка
number число
string строка
comment комментарий
annotaion аннотация
javadoc javadoc-комментарии
class заголовок класса от "class" до "{"
title название класса внутри заголовка
params все, что в скобках внутри заголовка класса
inheritance слова "extends" и "implements" внутри заголовка класса
C++ ("cpp"):
keyword ключевое слово языка
built_in тип из стандартной библиотеки (включая STL)
number число
string строка и одиночный символ
comment комментарий
preprocessor директива препроцессора
stl_container инстанцирование STL-контейнеров ("vector<...>")
C# ("cs"):
keyword ключевое слово языка
number число
string строка (включая @"..")
comment комментарий
xmlDocTag тег в xmldoc ("///", "<!--", "-->", "<..>")
RenderMan RSL ("rsl"):
keyword ключевое слово языка
number число
string строка
comment комментарий
preprocessor директива препроцессора
shader ключевое слово шейдеров
shading ключевое слово затенений
built_in встроенная функция
RenderMan RIB ("rib"):
keyword ключевое слово языка
number число
string строка
comment комментарий
commands команда
Maya Embedded Language ("mel"):
keyword ключевое слово языка
number число
string строка
comment комментарий
variable переменная
SQL ("sql"):
keyword ключевое слово (в основном из SQL'92 и SQL'99)
number число
string строка (любого типа: "..", '..', `..`)
comment комментарий
aggregate агрегатная функция
Smalltalk ("smalltalk"):
keyword ключевое слово
number число
string строка
comment комментарий
symbol символ
array массив
class имя класса
char буква
localvars блок локальных переменных
Lisp ("lisp"):
keyword ключевое слово
number число
string строка
comment комментарий
variable переменная
literal b, t и nil
list неквотированный список
title первый символ неквотированного списка
body остаток неквотированного списка
quoted_list квотированный список: и "(quote .. )", и "'(..)"
Ini ("ini"):
title заголовок секции
value значение настройки любого типа
string строка
number число
keyword ключевое слово булевского значения
Apache ("apache"):
keyword ключевое слово
number число
comment комментарий
literal "On" и "Off"
sqbracket переменная в rewrite'ах "%{..}"
cbracket опции в rewrite'ах "[..]"
tag начало и конец раздела конфига
Nginx ("nginx"):
keyword ключевое слово
string строка
number число
comment комментарий
built_in встроенная константа
variable $-переменная
DOS ("dos"):
keyword ключевое слово
flow команда .bat-файла
stream специальные файлы DOS ("con", "prn", ...)
winutils некоторые (см. dos.js за списком)
envvar переменная окружения
Bash ("bash"):
keyword ключевое слово
string строка
number число
comment комментарий
literal специальное слово: "true" и "false"
variable переменная
shebang заголовок интерпретатора скрипта
Diff ("diff"):
header заголовок файла
chunk заголовок куска внутри файла
addition добавленные строки
deletion удаленные строки
change измененные строки
Axapta ("axapta"):
keyword ключевое слово языка
number число
string строка
comment комментарий
class заголовок класса от "class" до "{"
title название класса внутри заголовка
params все, что в скобках внутри заголовка класса
inheritance слова "extends" и "implements" внутри заголовка класса
preprocessor директива препроцессора
1С ("1c"):
keyword ключевое слово языка
number число
date дата
string строка
comment комментарий
function заголовок функции или процедуры
title название функции внутри заголовка
params все, что в скобках внутри заголовка функции
preprocessor директива препроцессора
AVR ассемблер ("avrasm"):
keyword ключевое слово языка
built_in предопределенный регистр
number число
string строка
comment комментарий
label метка
preprocessor директива препроцессора
localvars подстановка в .macro
Parser3 ("parser3"):
keyword ключевое слово языка
number число
comment комментарий
variable переменная, начинающаяся с "$"
preprocessor директива препроцессора
title пользовательское имя, начинающееся с "@"
TeX ("tex"):
comment комментарий
number число
command команда
parameter параметр
formula формула
special специальный символ
## Эвристика
Определение языка, на котором написан фрагмент, делается с помощью
довольно простой эвристики: программа пытается расцветить фрагмент всеми
языками подряд, и для каждого языка считает количество подошедших
синтаксически конструкций и ключевых слов. Для какого языка нашлось больше,
тот и выбирается.
Это означает, что в коротких фрагментах высока вероятность ошибки, что
периодически и случается. Чтобы указать язык фрагмента явно, надо написать
его название в виде класса к элементу `<code>`:
<pre><code class="html">...</code></pre>
Можно использовать рекомендованные в HTML5 названия классов:
"language-html", "language-php". Также можно назначать классы на элемент
`<pre>`.
Чтобы запретить расцветку фрагмента вообще, используется класс "no-highlight":
<pre><code class="no-highlight">...</code></pre>
## Координаты
Версия: 5.11
URL: http://softwaremaniacs.org/soft/highlight/
Автор: Иван Сагалаев (Maniac@SoftwareManiacs.Org)
Лицензионное соглашение читайте в файле LICENSE.
Список соавторов читайте в файле AUTHORS.ru.txt