Общие слова

Стилевая тема — это обычный CSS-файл, который описывает внешний вид фрагментов кода, размеченных <span>ами с классами. К теме есть простые пожелания (не особенно жесткие, впрочем):

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

Highlight.js использует унифицированные названия классов для многих конструкций. Например, строка и комментарий любого языка имеют классы "string" и "comment", что позволяет задавать им стили для всех языков сразу. Тем не менее, стоит отдельно позаботиться о том, чтобы специфичные конструкции языков не были забыты. Часто стили для них можно определять пачкой, зная, что эти конструкции разных языков никогда не встретятся вместе:

.javadoc,
.decorator,
.filter .argument,
.localvars,
.array,
.attr_selector,
.pi,
.doctype {
  color: #88F;
}

Таблицу всех существующих стилей можно найти в README. А вдохновение — в других стилях в директории styles.

Указывать ли язык

Очень часто при задании стиля всяким классам просто таки тянет указать язык, к которому они относятся:

.python .decorator { ... }
.html .tag { ... }

Это, между тем, не очень верно, потому что убивает идею унификации классов. Определив ".html .tag" вам придется описать отдельно и ".xml .tag". А если появится в будущем еще какое-нибудь описание языка с тегами, то он не подхватит уже определенные стили тегов. Поэтому от указания языка лучше воздерживаться.

Есть, тем не менее, случаи, когда без этого не обойтись. Например, имитация других стилей.

Имитация известных стилей

Часто хочется сымитировать стиль какой-нибудь среды программирования или редактора. Благое дело! Стоит, однако, сразу быть готовыми к тому, что стиль highlight.js не приветствует большую пестроту, поэтому расцвечиваемых элементов в highlight.js окажется скорее всего меньше, чем в других инструментах. Это не беда. Достаточно сымитировать общий стиль, не вдаваясь в детали.

Как уже упоминалось выше, при имитации существующих стилей возникает необходимость отойти от философии highlight.js и размечать одинаковые конструкции по-разному для разных языков:

.ruby .string { color: #080; }
.cpp .string { color: #008; }

Оформление

Тема оформляется в виде отдельного .css файла, наверху которого в комментарии указывается свое авторство в виде:

/*

Mean-and-clean style (c) John Smith <email@domain.com>

*/

Файл можно прислать мне на Maniac@SoftwareManiacs.Org или выложить где-нибудь в интернете и написать про него в форуме.