
# Primii pași

## Instalare

```bash
composer require shikiphp/shikiphp
```

shikiphp necesită PHP 8.2 sau o versiune ulterioară, cu `ext-json` și `ext-mbstring` — ambele activate în aproape toate versiunile PHP. Atât: fără Node, fără legături native Oniguruma și fără extensii suplimentare.

## Primul bloc

Fațada statică `Shikiphp` este cea mai rapidă cale de a începe. Transmiteți codul, ID-ul limbii și ID-ul temei:

```php
use Shikiphp\Shikiphp;

$html = Shikiphp::codeToHtml(<<<'PHP'
<?php
function greet(string $name): string {
    return "Hello, {$name}!";
}
PHP, [
    'lang'  => 'php',
    'theme' => 'github-dark',
]);

echo $html;
```

`codeToHtml` returnează un bloc `<pre class="shiki …">` complet, cu stiluri proprii. Culorile prim-planului și fundalului sunt scrise inline pe `<pre>`, astfel încât blocul este redat corect fără foi de stil suplimentare.

## Teme duale (deschisă și întunecată)

În loc de o singură `theme`, transmiteți o mapare `themes`. shikiphp emite variabile CSS (precum Shiki), astfel încât un singur bloc redat se adaptează la modul deschis și întunecat:

```php
use Shikiphp\Shikiphp;

$code = 'const answer: number = 42';

echo Shikiphp::codeToHtml($code, [
    'lang'   => 'ts',
    'themes' => ['light' => 'github-light', 'dark' => 'github-dark'],
]);
```

În mod implicit, culorile temei `light` sunt cele inline, iar `dark` este expusă prin variabile `--shiki-dark`. Activați tema întunecată cu puțin CSS — același fragment pe care îl documentează Shiki:

```css
html.dark .shiki,
html.dark .shiki span {
  color: var(--shiki-dark) !important;
  background-color: var(--shiki-dark-bg) !important;
  /* and font styles */
  font-style: var(--shiki-dark-font-style) !important;
  font-weight: var(--shiki-dark-font-weight) !important;
  text-decoration: var(--shiki-dark-text-decoration) !important;
}
```

Puteți alege tema ale cărei culori sunt implicite inline folosind opțiunea [`defaultColor`](https://shikiphp.inline0.dev/ro/docs/options#defaultcolor) sau puteți seta `defaultColor: false` pentru a emite doar variabile.

## ID-uri și aliasuri de limbă

Limbile sunt referite prin ID-ul sau aliasul lor Shiki — `php`, `ts`, `js`, `rust`, `python`, `html` și așa mai departe. Consultați [Limbi](https://shikiphp.inline0.dev/ro/docs/languages) pentru a vedea cum listați tot ce este inclus și [Teme](https://shikiphp.inline0.dev/ro/docs/themes) pentru ID-urile temelor.

## Refolosirea evidențiatorului

Fațada creează și memorează în cache, la cerere, un `Highlighter` inclus în pachet, astfel încât apelurile repetate la `Shikiphp::codeToHtml` reutilizează aceleași cache-uri pentru gramatici și teme. Dacă aveți nevoie de API mai complex (rezultat HAST, gramatici personalizate, grile de tokenuri), obțineți direct instanța:

```php
use Shikiphp\Shikiphp;

$code = 'fn main() {}';

$highlighter = Shikiphp::highlighter();
$hast = $highlighter->codeToHast($code, ['lang' => 'rust', 'theme' => 'nord']);
```

Consultați [API](https://shikiphp.inline0.dev/ro/docs/api) pentru descrierea completă a interfeței.
