
# CLI

shikiphp에는 `bin/shikiphp`에 있는 소형 명령줄 도구가 포함되어 있습니다(프로젝트에 `vendor/bin/shikiphp`로 설치됨). 명령어는 세 가지입니다. `highlight`는 파일 하나를 HTML로 렌더링하고, `langs`와 `themes`는 번들에 포함된 항목을 나열합니다.

## `highlight`

파일을 HTML 형식으로 하이라이트해 stdout에 출력합니다.

```bash
vendor/bin/shikiphp highlight <file> [--lang=<lang>] [--theme=<theme>]
```

- `<file>` — 읽을 파일의 경로입니다. 기존 파일이어야 하며 표준 입력은 읽지 않습니다.
- `--lang` — 언어 ID 또는 별칭입니다. 생략하면 파일 확장자를 그대로 ID로 사용하며, 확장자가 없으면 `txt`로 대체합니다.
- `--theme` — 테마 ID입니다. 기본값은 `github-dark`입니다.

```bash
vendor/bin/shikiphp highlight src/App.php --lang=php --theme=nord
```

출력은 [`codeToHtml`](https://shikiphp.inline0.dev/ko/docs/api#shikiphpcodetohtml)가 반환하는 단일 테마 `<pre class="shiki …">` 블록과 동일하며, 뒤에 줄바꿈이 추가됩니다. 따라서 파일로 바로 리디렉션할 수 있습니다:

```bash
vendor/bin/shikiphp highlight src/App.php --theme=github-light > app.html
```

이 명령어에는 다른 옵션이 없습니다. 이중 테마, 변환기 또는 다른 [옵션](https://shikiphp.inline0.dev/ko/docs/options)이 필요하면 대신 PHP API를 호출하세요.

### 옵션 및 인수

옵션은 `--name=value` 형식이어야 합니다. `--`로 시작하는 다른 인수는 무시되며, `--`로 시작하지 않는 마지막 인수를 파일로 취급합니다. 따라서 `--lang php file.rs`는 `file.rs`를 Rust로 하이라이트합니다. `--lang`은 무시되고, `php`은 `file.rs`로 대체되며, 언어는 `.rs` 확장자에서 가져옵니다.

### 언어 추론

`--lang`가 없으면 확장자를 변경 없이 언어 ID로 사용합니다. 확장자 자체가 번들 ID 또는 별칭인 경우에는 작동합니다(`php`, `js`, `ts`, `tsx`, `py`, `rs`, `go`, `md`, `yml`, `json`, `sh` 등. [언어](https://shikiphp.inline0.dev/ko/docs/languages) 참조). 다음의 경우에는 작동하지 않습니다:

- `Makefile` 또는 `Dockerfile`처럼 확장자가 없는 파일은 `txt`로 대체됩니다.
- `.txt`처럼 언어 ID가 아닌 확장자입니다.

`txt`는 번들 언어가 아니므로 현재 두 경우 모두 `Unknown language "txt"` 오류([#3](https://github.com/inline0/shikiphp/issues/3))로 중단됩니다. 이러한 파일에는 `--lang`를 전달하세요:

```bash
vendor/bin/shikiphp highlight Dockerfile --lang=docker
vendor/bin/shikiphp highlight Makefile --lang=make
```

## `langs`

번들이 언어로 허용하는 모든 ID를 한 줄에 하나씩 출력합니다.

```bash
vendor/bin/shikiphp langs
```

목록은 350줄입니다. 253개의 번들 문법 ID가 번들 순서(알파벳순 아님)로 나오고, 이어서 별칭 97개(`js`, `cjs`, `mjs` 등)가 표시됩니다. 문법 ID에는 `vue-directives` 및 `es-tag-css`처럼 다른 문법에 포함되는 보조 문법 18개도 포함됩니다. 이름과 별칭이 있는 전체 목록은 [언어](https://shikiphp.inline0.dev/ko/docs/languages)를 참조하세요. 알파벳순 목록을 보려면 `sort`로 파이프하세요.

## `themes`

번들에 포함된 모든 테마 ID를 알파벳순으로 한 줄에 하나씩 출력합니다(테마 65개).

```bash
vendor/bin/shikiphp themes
```

이름과 라이트/다크 유형이 포함된 목록은 [테마](https://shikiphp.inline0.dev/ko/docs/themes)를 참조하세요.

## 도움말 및 종료 상태

명령어 없이 실행하거나 `-h` / `--help` / `help`를 사용하면 사용법을 출력합니다.

```bash
vendor/bin/shikiphp --help
```

| 상황 | 출력 | 종료 상태 |
| --- | --- | --- |
| 성공 또는 도움말 | stdout | `0` |
| 알 수 없는 명령어 | stderr에 `Unknown command: <name>` | `1` |
| 파일 없이 `highlight`를 실행하거나 파일이 존재하지 않음 | stderr에 사용법 줄 | `1` |
| 알 수 없는 언어 또는 테마 | 처리되지 않은 `Shikiphp\Exceptions\Highlight`(스택 추적을 포함한 PHP 치명적 오류) | `255` |
