
# Options

Tous les points d'entrée (`codeToHtml`, `codeToTokens`, `codeToTokensResult`,
`codeToHast`) prennent le même tableau d'options en deuxième argument. Seuls `lang`
et un thème sont obligatoires.

## `lang`

**Obligatoire.** L'identifiant ou l'alias du langage à utiliser pour la tokenisation — `php`, `ts`, `js`,
`rust`, `python`, `html`, etc. La valeur spéciale `'ansi'` met en évidence
les séquences d'échappement du terminal au lieu d'utiliser une grammaire (voir [ANSI](https://shikiphp.inline0.dev/fr/docs/ansi)).

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

## `theme`

Un seul identifiant de thème. Obligatoire sauf si `themes` est fourni.

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

## `themes`

Une correspondance entre clés et identifiants de thème pour produire plusieurs thèmes via les variables CSS. Obligatoire sauf si `theme` est fourni.

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

## `defaultColor`

Quelle clé de `themes` devient la couleur par défaut en ligne (les autres deviennent des variables `--shiki-<key>` CSS). La valeur par défaut est `'light'`. Réglez sur `false` pour générer uniquement des variables, sans couleur par défaut en ligne — pratique si vous gérez toutes les couleurs depuis CSS.

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

## `transformers`

Une liste d'objets `Shikiphp\Transformer\Transformer` appliqués dans le pipeline. Consultez [Transformateurs](https://shikiphp.inline0.dev/fr/docs/transformers).

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

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

## `decorations`

Appliquez des classes ou des attributs à des plages arbitraires du code source, selon la ligne et la position du caractère. Chaque décoration est `{start, end, properties}`, avec des positions `{line, character}` (indexées à partir de zéro).

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

## `colorReplacements`

Remappez les couleurs dans la sortie. Les entrées sous forme de chaîne remplacent une couleur partout ; les entrées imbriquées par nom de thème ne s'appliquent qu'à ce thème.

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

## `structure`

`'classic'` (par défaut) génère toute la structure `pre > code > span.line > span`.
`'inline'` génère uniquement les portées de jetons avec les sauts de ligne, sans enveloppe `pre`/`code` — utile pour les extraits en ligne.

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

## `tabindex`

L'attribut `tabindex` de l'élément `<pre>`. Valeur par défaut : `0`. Passez `false` pour l'omettre.

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

## `cssVariablePrefix`

Préfixe utilisé pour les variables CSS à double thème. Valeur par défaut : `'--shiki-'`.

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

## `mergeWhitespaces`

Contrôle le traitement des jetons d'espaces blancs. `true` (par défaut) fusionne les jetons composés uniquement d'espaces blancs avec le jeton suivant ; `'never'` sépare les espaces blancs de début et de fin de chaque jeton en jetons distincts ; `false` laisse les jetons intacts.

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

## `tokenizeMaxLineLength`

Ignore la tokenisation (et génère un seul jeton brut) pour toute ligne dont la longueur atteint ou dépasse cette limite, en unités de code UTF-16. Aucune limite par défaut. Protection contre les entrées anormales sur une seule ligne.

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

## `meta`

Métadonnées arbitraires transmises aux transformateurs via le contexte du transformateur — par exemple la chaîne de métadonnées de bloc de code consommée par
[`MetaHighlight`](https://shikiphp.inline0.dev/fr/docs/transformers#metahighlight) et
[`MetaWordHighlight`](https://shikiphp.inline0.dev/fr/docs/transformers#metawordhighlight).

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

## `grammarState`

Un `Shikiphp\GrammarState` (depuis `getLastGrammarState`) pour reprendre la tokenisation. Les `lang` et theme(s) transmis doivent correspondre. Consultez
[`getLastGrammarState`](https://shikiphp.inline0.dev/fr/docs/api#shikiphpgetlastgrammarstate).
