
# Параметры

Все точки входа (`codeToHtml`, `codeToTokens`, `codeToTokensResult`, `codeToHast`) принимают один и тот же массив параметров вторым аргументом. Обязательны только `lang` и тема.

## `lang`

**Обязательный параметр.** Идентификатор или псевдоним языка для токенизации: `php`, `ts`, `js`, `rust`, `python`, `html` и так далее. Специальное значение `'ansi'` подсвечивает управляющие последовательности терминала вместо использования грамматики (см. [ANSI](https://shikiphp.inline0.dev/ru/docs/ansi)).

```php
['lang' => 'php']
```

## `theme`

Идентификатор одной темы. Обязателен, если не задано `themes`.

```php
['lang' => 'php', 'theme' => 'github-dark']
```

## `themes`

Карта ключей и идентификаторов тем для вывода с двойной (или несколькими) темами через переменные CSS.
Обязательна, если не задано `theme`.

```php
['lang' => 'ts', 'themes' => ['light' => 'github-light', 'dark' => 'github-dark']]
```

## `defaultColor`

Какой ключ из `themes` задаёт цвет по умолчанию во встроенных стилях (для остальных используются переменные `--shiki-<key>` CSS). По умолчанию — `'light'`. Установите `false`, чтобы выводить только переменные, без цвета по умолчанию во встроенных стилях; это удобно, если все цвета задаются через CSS.

```php
['themes' => ['light' => '…', 'dark' => '…'], 'defaultColor' => 'dark']
```

## `transformers`

Список объектов `Shikiphp\Transformer\Transformer`, применяемых через конвейер. См. раздел [Трансформеры](https://shikiphp.inline0.dev/ru/docs/transformers).

```php
use Shikiphp\Transformer\Notation\NotationHighlight;

['transformers' => [new NotationHighlight()]]
```

## `decorations`

Применяйте классы или атрибуты к произвольным диапазонам исходного текста, задавая строку и позицию символа. Каждый элемент декорации имеет формат `{start, end, properties}`, позиции указаны в системе `{line, character}` (отсчёт с нуля).

```php
['decorations' => [
    [
        'start'      => ['line' => 0, 'character' => 0],
        'end'        => ['line' => 0, 'character' => 5],
        'properties' => ['class' => 'highlight'],
    ],
]]
```

## `colorReplacements`

Изменяет цвета в выводе. Строковые элементы заменяют цвет во всём выводе; вложенные элементы с ключом по имени темы применяются только к этой теме.

```php
['colorReplacements' => [
    '#ffffff'      => '#f8f8f2',          // global
    'github-dark'  => ['#24292e' => '#000'], // only in github-dark
]]
```

## `structure`

`'classic'` (по умолчанию) выводит полную структуру `pre > code > span.line > span`.
`'inline'` выводит только диапазоны токенов с переносами строк, без обёртывающих элементов `pre`/`code`. Подходит для встроенных фрагментов кода.

```php
['structure' => 'inline']
```

## `tabindex`

Атрибут `tabindex` элемента `<pre>`. По умолчанию — `0`. Передайте `false`, чтобы не выводить его.

```php
['tabindex' => false]
```

## `cssVariablePrefix`

Префикс переменных CSS для двойной темы. По умолчанию — `'--shiki-'`.

```php
['cssVariablePrefix' => '--my-']
```

## `mergeWhitespaces`

Управляет обработкой токенов пробелов. `true` (по умолчанию) объединяет токены, состоящие только из пробелов, со следующим токеном; `'never'` разделяет начальные и конечные пробелы каждого токена на отдельные токены; `false` оставляет токены без изменений.

```php
['mergeWhitespaces' => 'never']
```

## `tokenizeMaxLineLength`

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

```php
['tokenizeMaxLineLength' => 1000]
```

## `meta`

Произвольные метаданные, передаваемые трансформерам через контекст трансформера; например, строка метаданных блока кода, которую использует [`MetaHighlight`](https://shikiphp.inline0.dev/ru/docs/transformers#metahighlight) и [`MetaWordHighlight`](https://shikiphp.inline0.dev/ru/docs/transformers#metawordhighlight).

```php
['meta' => ['__raw' => '{1,3-5}']]
```

## `grammarState`

`Shikiphp\GrammarState` (из `getLastGrammarState`), с которого нужно возобновить токенизацию. Унаследованные `lang` и theme(s) должны совпадать. См. [`getLastGrammarState`](https://shikiphp.inline0.dev/ru/docs/api#shikiphpgetlastgrammarstate).
