shellfie 2.0.18 → 2.0.20

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (78) hide show
  1. package/README.md +63 -46
  2. package/dist/highlight/index.d.ts +41 -0
  3. package/dist/highlight/index.d.ts.map +1 -0
  4. package/dist/highlight/index.js +309 -0
  5. package/dist/highlight/index.js.map +1 -0
  6. package/dist/highlight/languages/bash.d.ts +3 -0
  7. package/dist/highlight/languages/bash.d.ts.map +1 -0
  8. package/dist/highlight/languages/bash.js +78 -0
  9. package/dist/highlight/languages/bash.js.map +1 -0
  10. package/dist/highlight/languages/c.d.ts +4 -0
  11. package/dist/highlight/languages/c.d.ts.map +1 -0
  12. package/dist/highlight/languages/c.js +101 -0
  13. package/dist/highlight/languages/c.js.map +1 -0
  14. package/dist/highlight/languages/csharp.d.ts +3 -0
  15. package/dist/highlight/languages/csharp.d.ts.map +1 -0
  16. package/dist/highlight/languages/csharp.js +78 -0
  17. package/dist/highlight/languages/csharp.js.map +1 -0
  18. package/dist/highlight/languages/go.d.ts +3 -0
  19. package/dist/highlight/languages/go.d.ts.map +1 -0
  20. package/dist/highlight/languages/go.js +47 -0
  21. package/dist/highlight/languages/go.js.map +1 -0
  22. package/dist/highlight/languages/html.d.ts +3 -0
  23. package/dist/highlight/languages/html.d.ts.map +1 -0
  24. package/dist/highlight/languages/html.js +44 -0
  25. package/dist/highlight/languages/html.js.map +1 -0
  26. package/dist/highlight/languages/index.d.ts +26 -0
  27. package/dist/highlight/languages/index.d.ts.map +1 -0
  28. package/dist/highlight/languages/index.js +65 -0
  29. package/dist/highlight/languages/index.js.map +1 -0
  30. package/dist/highlight/languages/java.d.ts +3 -0
  31. package/dist/highlight/languages/java.d.ts.map +1 -0
  32. package/dist/highlight/languages/java.js +57 -0
  33. package/dist/highlight/languages/java.js.map +1 -0
  34. package/dist/highlight/languages/javascript.d.ts +3 -0
  35. package/dist/highlight/languages/javascript.d.ts.map +1 -0
  36. package/dist/highlight/languages/javascript.js +53 -0
  37. package/dist/highlight/languages/javascript.js.map +1 -0
  38. package/dist/highlight/languages/json.d.ts +3 -0
  39. package/dist/highlight/languages/json.d.ts.map +1 -0
  40. package/dist/highlight/languages/json.js +25 -0
  41. package/dist/highlight/languages/json.js.map +1 -0
  42. package/dist/highlight/languages/python.d.ts +3 -0
  43. package/dist/highlight/languages/python.d.ts.map +1 -0
  44. package/dist/highlight/languages/python.js +80 -0
  45. package/dist/highlight/languages/python.js.map +1 -0
  46. package/dist/highlight/languages/rust.d.ts +3 -0
  47. package/dist/highlight/languages/rust.d.ts.map +1 -0
  48. package/dist/highlight/languages/rust.js +68 -0
  49. package/dist/highlight/languages/rust.js.map +1 -0
  50. package/dist/highlight/languages/typescript.d.ts +3 -0
  51. package/dist/highlight/languages/typescript.d.ts.map +1 -0
  52. package/dist/highlight/languages/typescript.js +77 -0
  53. package/dist/highlight/languages/typescript.js.map +1 -0
  54. package/dist/highlight/tokenizer.d.ts +41 -0
  55. package/dist/highlight/tokenizer.d.ts.map +1 -0
  56. package/dist/highlight/tokenizer.js +147 -0
  57. package/dist/highlight/tokenizer.js.map +1 -0
  58. package/dist/highlight/types.d.ts +47 -0
  59. package/dist/highlight/types.d.ts.map +1 -0
  60. package/dist/highlight/types.js +27 -0
  61. package/dist/highlight/types.js.map +1 -0
  62. package/dist/index.d.ts +1 -0
  63. package/dist/index.d.ts.map +1 -1
  64. package/dist/index.js +23 -3
  65. package/dist/index.js.map +1 -1
  66. package/dist/renderer/customGlyphs.d.ts +1 -0
  67. package/dist/renderer/customGlyphs.d.ts.map +1 -1
  68. package/dist/renderer/customGlyphs.js +179 -90
  69. package/dist/renderer/customGlyphs.js.map +1 -1
  70. package/dist/renderer/index.d.ts.map +1 -1
  71. package/dist/renderer/index.js +11 -4
  72. package/dist/renderer/index.js.map +1 -1
  73. package/dist/renderer/text.d.ts.map +1 -1
  74. package/dist/renderer/text.js +10 -3
  75. package/dist/renderer/text.js.map +1 -1
  76. package/dist/types.d.ts +9 -0
  77. package/dist/types.d.ts.map +1 -1
  78. package/package.json +1 -1
package/README.md CHANGED
@@ -5,33 +5,46 @@ Your terminal output deserves better than a blurry screenshot.
5
5
 
6
6
  ![shellfie](https://raw.githubusercontent.com/tool3/shellfie/refs/heads/master/examples/svgs/logo-2.svg)
7
7
 
8
- | Feature | shellfie | carbon-now-cli | svg-term | termtosvg |
9
- | ------------------- | -------- | -------------- | -------- | --------- |
10
- | Zero dependencies | ✅ | ❌ | ❌ | ❌ |
11
- | No native bindings | ✅ | ❌ | ❌ | ❌ |
12
- | No headless browser | ✅ | ❌ | ✅ | ✅ |
13
- | Full ANSI support | ✅ | ✅ | ✅ | ✅ |
14
- | 24-bit true color | ✅ | ✅ | ❌ | ✅ |
15
- | Runs in browser | ✅ | ❌ | ❌ | ❌ |
16
- | Synchronous API | ✅ | ❌ | ❌ | ❌ |
17
-
18
8
  ```typescript
19
- import { execSync } from "child_process";
20
- import shellfie from 'shellfie'
9
+ import shellfie, { themes } from "shellfie";
10
+ import { writeFileSync } from "node:fs";
11
+
12
+ const script = `
13
+ #!/bin/bash
14
+
15
+ echo "Hello World!"
16
+ `;
17
+
18
+ const svg = shellfie(script, {
19
+ template: "macos",
20
+ theme: themes.draculaPro,
21
+ title: "Syntax highlighting",
22
+ watermark: "\x1b[38;5;242mGenerated by shellfie\x1b[0m",
23
+ });
21
24
 
22
- const log = execSync("git log --oneline --graph --color=always").toString();
23
- const svg = shellfie(log, { title: "git log" });
25
+ writeFileSync("highlight.svg", svg);
24
26
  ```
25
27
 
26
- ![Git Log](https://raw.githubusercontent.com/tool3/shellfie/refs/heads/master/examples/svgs/git-log.svg)
28
+ ![Syntax Highlight](https://raw.githubusercontent.com/tool3/shellfie/refs/heads/master/examples/svgs/highlight.svg)
29
+
30
+ | Feature | shellfie | carbon-now-cli | svg-term | termtosvg |
31
+ | --------------------------- | -------- | -------------- | -------- | --------- |
32
+ | Zero dependencies | ✅ | ❌ | ❌ | ❌ |
33
+ | No native bindings | ✅ | ❌ | ❌ | ❌ |
34
+ | No headless browser | ✅ | ❌ | ✅ | ✅ |
35
+ | Full ANSI support | ✅ | ✅ | ✅ | ✅ |
36
+ | 24-bit true color | ✅ | ✅ | ❌ | ✅ |
37
+ | Runs in browser | ✅ | ❌ | ❌ | ❌ |
38
+ | Synchronous API | ✅ | ❌ | ❌ | ❌ |
39
+ | Built-in Syntax hightligher | ✅ | ❌ | ❌ | ❌ |
27
40
 
28
41
  ## Why SVG?
29
42
 
30
43
  ✅ **Infinitely scalable** — pixel-perfect at any zoom level, retina-ready by default.
31
44
  ✅ **Selectable text** — copy code directly from the image.
32
45
  ✅ **Embeddable everywhere** — high quality embedding in READMEs, docs, blogs, everywhere.
33
- ✅ **Tiny files** — 2-10KB vs blurry 500KB+ PNGs.
34
- ✅ **No rendering pipeline** — runs anywhere JavaScript runs.
46
+ ✅ **Tiny files** — 2-10KB vs blurry 500KB+ PNGs.
47
+ ✅ **No rendering pipeline** — runs anywhere JavaScript runs.
35
48
 
36
49
  ## Install
37
50
 
@@ -67,8 +80,8 @@ const svg = shellfie(terminalOutput, {
67
80
 
68
81
  ## Templates
69
82
 
70
- | macOS | Windows | Minimal |
71
- | --------------------------------- | ------------------------------------- | ------------------------------------- |
83
+ | macOS | Windows | Minimal |
84
+ | ---------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------- |
72
85
  | ![macos](https://raw.githubusercontent.com/tool3/shellfie/refs/heads/master/examples/svgs/macos.svg) | ![windows](https://raw.githubusercontent.com/tool3/shellfie/refs/heads/master/examples/svgs/windows.svg) | ![minimal](https://raw.githubusercontent.com/tool3/shellfie/refs/heads/master/examples/svgs/minimal.svg) |
73
86
 
74
87
  ```typescript
@@ -128,7 +141,8 @@ shellfie(output, {
128
141
  shellfie(input, {
129
142
  template?: "macos", // 'macos' | 'windows' | 'minimal' | Template
130
143
  title?: "my-terminal", // window title
131
- width?: 80, // terminal columns (auto-detected if not set)
144
+ width?: 80, // SVG width in pixels (auto-detected if not set)
145
+ height?: 400, // SVG height in pixels (auto-detected if not set)
132
146
  padding?: 16, // number | [v, h] | [top, right, bottom, left]
133
147
  controls?: true, // show window control buttons
134
148
  controlsPosition?: "left", // 'left' (macOS) or 'right' (Windows)
@@ -142,6 +156,7 @@ shellfie(input, {
142
156
  format: "woff2", // 'woff2' | 'woff' | 'ttf'
143
157
  },
144
158
  theme?: customTheme, // custom color theme or see themes below
159
+ language?: "typescript", // syntax highlighting: 'auto' | language | false
145
160
  watermark?: "Generated by shellfie", // bottom-right text (supports ANSI)
146
161
  watermarkPadding?: 16, // number | [v, h] | [top, right, bottom, left]
147
162
  header?: { // header configuration
@@ -183,52 +198,52 @@ import shellfie, { dracula, nord, tokyoNight } from "shellfie";
183
198
  shellfie(output, { theme: dracula });
184
199
  ```
185
200
 
186
- | Dracula | Dracula PRO | Nord |
187
- | -------------------------------------------- | --------------------------------------------- | -------------------------------------- |
201
+ | Dracula | Dracula PRO | Nord |
202
+ | --------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------- |
188
203
  | ![Dracula](https://raw.githubusercontent.com/tool3/shellfie/refs/heads/master/examples/svgs/themes/dracula.svg) | ![Dracula PRO](https://raw.githubusercontent.com/tool3/shellfie/refs/heads/master/examples/svgs/themes/dracula-pro.svg) | ![Nord](https://raw.githubusercontent.com/tool3/shellfie/refs/heads/master/examples/svgs/themes/nord.svg) |
189
204
 
190
- | Tokyo Night | One Dark | One Light |
191
- | ---------------------------------------------------- | ---------------------------------------------- | ---------------------------------------------- |
205
+ | Tokyo Night | One Dark | One Light |
206
+ | ----------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------- |
192
207
  | ![Tokyo Night](https://raw.githubusercontent.com/tool3/shellfie/refs/heads/master/examples/svgs/themes/tokyo-night.svg) | ![One Dark](https://raw.githubusercontent.com/tool3/shellfie/refs/heads/master/examples/svgs/themes/one-dark.svg) | ![One Light](https://raw.githubusercontent.com/tool3/shellfie/refs/heads/master/examples/svgs/themes/one-light.svg) |
193
208
 
194
- | Monokai | Catppuccin Mocha | Material |
195
- | -------------------------------------------- | -------------------------------------------------------------- | ---------------------------------------------- |
209
+ | Monokai | Catppuccin Mocha | Material |
210
+ | --------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------- |
196
211
  | ![Monokai](https://raw.githubusercontent.com/tool3/shellfie/refs/heads/master/examples/svgs/themes/monokai.svg) | ![Catppuccin Mocha](https://raw.githubusercontent.com/tool3/shellfie/refs/heads/master/examples/svgs/themes/catppuccin-mocha.svg) | ![Material](https://raw.githubusercontent.com/tool3/shellfie/refs/heads/master/examples/svgs/themes/material.svg) |
197
212
 
198
- | GitHub Dark | GitHub Light | VS Code |
199
- | ---------------------------------------------------- | ------------------------------------------------------ | ---------------------------------------------- |
213
+ | GitHub Dark | GitHub Light | VS Code |
214
+ | ----------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- |
200
215
  | ![GitHub Dark](https://raw.githubusercontent.com/tool3/shellfie/refs/heads/master/examples/svgs/themes/github-dark.svg) | ![GitHub Light](https://raw.githubusercontent.com/tool3/shellfie/refs/heads/master/examples/svgs/themes/github-light.svg) | ![VS Code](https://raw.githubusercontent.com/tool3/shellfie/refs/heads/master/examples/svgs/themes/vscode.svg) |
201
216
 
202
- | Gruvbox Dark | Gruvbox Light | Solarized Dark |
203
- | ------------------------------------------------------ | -------------------------------------------------------- | ---------------------------------------------------------- |
217
+ | Gruvbox Dark | Gruvbox Light | Solarized Dark |
218
+ | ------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------- |
204
219
  | ![Gruvbox Dark](https://raw.githubusercontent.com/tool3/shellfie/refs/heads/master/examples/svgs/themes/gruvbox-dark.svg) | ![Gruvbox Light](https://raw.githubusercontent.com/tool3/shellfie/refs/heads/master/examples/svgs/themes/gruvbox-light.svg) | ![Solarized Dark](https://raw.githubusercontent.com/tool3/shellfie/refs/heads/master/examples/svgs/themes/solarized-dark.svg) |
205
220
 
206
- | Solarized Light | SynthWave '84 | Shades of Purple |
207
- | ------------------------------------------------------------ | ------------------------------------------------------ | -------------------------------------------------------------- |
221
+ | Solarized Light | SynthWave '84 | Shades of Purple |
222
+ | ------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- |
208
223
  | ![Solarized Light](https://raw.githubusercontent.com/tool3/shellfie/refs/heads/master/examples/svgs/themes/solarized-light.svg) | ![SynthWave '84](https://raw.githubusercontent.com/tool3/shellfie/refs/heads/master/examples/svgs/themes/synthwave-84.svg) | ![Shades of Purple](https://raw.githubusercontent.com/tool3/shellfie/refs/heads/master/examples/svgs/themes/shades-of-purple.svg) |
209
224
 
210
- | Cobalt | Oceanic Next | Lucario |
211
- | -------------------------------------------- | ------------------------------------------------------ | ---------------------------------------------- |
225
+ | Cobalt | Oceanic Next | Lucario |
226
+ | ------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------- |
212
227
  | ![Cobalt](https://raw.githubusercontent.com/tool3/shellfie/refs/heads/master/examples/svgs/themes/cobalt.svg) | ![Oceanic Next](https://raw.githubusercontent.com/tool3/shellfie/refs/heads/master/examples/svgs/themes/oceanic-next.svg) | ![Lucario](https://raw.githubusercontent.com/tool3/shellfie/refs/heads/master/examples/svgs/themes/lucario.svg) |
213
228
 
214
- | Panda Syntax | Hopscotch | Paraiso Dark |
215
- | ---------------------------------------------------- | ---------------------------------------------- | ------------------------------------------------------ |
229
+ | Panda Syntax | Hopscotch | Paraiso Dark |
230
+ | ------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------- |
216
231
  | ![Panda Syntax](https://raw.githubusercontent.com/tool3/shellfie/refs/heads/master/examples/svgs/themes/panda-syntax.svg) | ![Hopscotch](https://raw.githubusercontent.com/tool3/shellfie/refs/heads/master/examples/svgs/themes/hopscotch.svg) | ![Paraiso Dark](https://raw.githubusercontent.com/tool3/shellfie/refs/heads/master/examples/svgs/themes/paraiso-dark.svg) |
217
232
 
218
- | Base16 Dark | Base16 Light | Duotone Dark |
219
- | ---------------------------------------------------- | ------------------------------------------------------ | ------------------------------------------------------ |
233
+ | Base16 Dark | Base16 Light | Duotone Dark |
234
+ | ----------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------- |
220
235
  | ![Base16 Dark](https://raw.githubusercontent.com/tool3/shellfie/refs/heads/master/examples/svgs/themes/base16-dark.svg) | ![Base16 Light](https://raw.githubusercontent.com/tool3/shellfie/refs/heads/master/examples/svgs/themes/base16-light.svg) | ![Duotone Dark](https://raw.githubusercontent.com/tool3/shellfie/refs/heads/master/examples/svgs/themes/duotone-dark.svg) |
221
236
 
222
- | 3024 Night | A11y Dark | Blackboard |
223
- | ---------------------------------------------------- | ---------------------------------------------- | ---------------------------------------------- |
237
+ | 3024 Night | A11y Dark | Blackboard |
238
+ | --------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------- |
224
239
  | ![3024 Night](https://raw.githubusercontent.com/tool3/shellfie/refs/heads/master/examples/svgs/themes/3024-night.svg) | ![A11y Dark](https://raw.githubusercontent.com/tool3/shellfie/refs/heads/master/examples/svgs/themes/a11y-dark.svg) | ![Blackboard](https://raw.githubusercontent.com/tool3/shellfie/refs/heads/master/examples/svgs/themes/blackboard.svg) |
225
240
 
226
- | Seti | Twilight | Verminal |
227
- | -------------------------------------------- | ---------------------------------------------- | ---------------------------------------------- |
241
+ | Seti | Twilight | Verminal |
242
+ | --------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------- |
228
243
  | ![Seti](https://raw.githubusercontent.com/tool3/shellfie/refs/heads/master/examples/svgs/themes/seti.svg) | ![Twilight](https://raw.githubusercontent.com/tool3/shellfie/refs/heads/master/examples/svgs/themes/twilight.svg) | ![Verminal](https://raw.githubusercontent.com/tool3/shellfie/refs/heads/master/examples/svgs/themes/verminal.svg) |
229
244
 
230
- | Yeti | Zenburn |
231
- | -------------------------------------------- | ---------------------------------------------- |
245
+ | Yeti | Zenburn |
246
+ | --------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------- |
232
247
  | ![Yeti](https://raw.githubusercontent.com/tool3/shellfie/refs/heads/master/examples/svgs/themes/yeti.svg) | ![Zenburn](https://raw.githubusercontent.com/tool3/shellfie/refs/heads/master/examples/svgs/themes/zenburn.svg) |
233
248
 
234
249
  ## Custom Themes
@@ -308,9 +323,11 @@ getMaxWidth(lines); // 80
308
323
  ```
309
324
 
310
325
  ## Related
326
+
311
327
  - See [shellfie-cli](https://github.com/tool3/shellfie-cli) for command line usage
312
- - See [shellfied](https://github.com/tool3/shellfied) the shellfie web app
328
+ - See [shellfied](https://github.com/tool3/shellfied) for the shellfie web app
329
+ <!-- - See [dvd](https://github.com/tool3/dvd) for shellfie on drugs !-->
313
330
 
314
331
  ## License
315
- MIT
316
332
 
333
+ MIT
@@ -0,0 +1,41 @@
1
+ /**
2
+ * Syntax Highlighting Module
3
+ *
4
+ * Zero-dependency syntax highlighting that outputs ANSI-colored strings
5
+ * for use with shellfie's SVG renderer.
6
+ */
7
+ import type { DetectionResult, LanguageTokenizer, Token } from './types';
8
+ /**
9
+ * Get a language tokenizer by name or alias
10
+ */
11
+ export declare function getLanguage(name: string): LanguageTokenizer | undefined;
12
+ /**
13
+ * Get all registered language names
14
+ */
15
+ export declare function getLanguageNames(): string[];
16
+ /**
17
+ * Get a language tokenizer by file extension
18
+ */
19
+ export declare function getLanguageByExtension(ext: string): LanguageTokenizer | undefined;
20
+ /**
21
+ * Auto-detect the language of a code snippet
22
+ * Returns the best match or undefined if no confident match
23
+ */
24
+ export declare function detectLanguage(code: string): DetectionResult | undefined;
25
+ /**
26
+ * Convert tokens to ANSI-colored string
27
+ */
28
+ export declare function tokensToAnsi(tokens: Token[]): string;
29
+ /**
30
+ * Highlight code with syntax highlighting, returning ANSI-colored string
31
+ *
32
+ * @param code - The source code to highlight
33
+ * @param language - Language name, alias, or 'auto' for auto-detection
34
+ * @returns ANSI-colored string ready for shellfie
35
+ */
36
+ export declare function highlight(code: string, language?: string): string;
37
+ export type { DetectionResult, LanguageTokenizer, Token, TokenPattern, TokenType } from './types';
38
+ export { ANSI_RESET, TOKEN_TO_ANSI } from './types';
39
+ export { COMMON_PATTERNS, createCLikePatterns, tokenize, wordBoundary } from './tokenizer';
40
+ export { languages } from './languages';
41
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/highlight/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,eAAe,EAAE,iBAAiB,EAAE,KAAK,EAAa,MAAM,SAAS,CAAC;AAgBpF;;GAEG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,iBAAiB,GAAG,SAAS,CAEvE;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,MAAM,EAAE,CAE3C;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,MAAM,GAAG,iBAAiB,GAAG,SAAS,CAGjF;AA4LD;;;GAGG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS,CAkCxE;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,CAapD;AAED;;;;;;GAMG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,GAAE,MAAe,GAAG,MAAM,CAmBzE;AAGD,YAAY,EAAE,eAAe,EAAE,iBAAiB,EAAE,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAClG,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAGpD,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAG3F,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC"}
@@ -0,0 +1,309 @@
1
+ "use strict";
2
+ /**
3
+ * Syntax Highlighting Module
4
+ *
5
+ * Zero-dependency syntax highlighting that outputs ANSI-colored strings
6
+ * for use with shellfie's SVG renderer.
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.languages = exports.wordBoundary = exports.tokenize = exports.createCLikePatterns = exports.COMMON_PATTERNS = exports.TOKEN_TO_ANSI = exports.ANSI_RESET = void 0;
10
+ exports.getLanguage = getLanguage;
11
+ exports.getLanguageNames = getLanguageNames;
12
+ exports.getLanguageByExtension = getLanguageByExtension;
13
+ exports.detectLanguage = detectLanguage;
14
+ exports.tokensToAnsi = tokensToAnsi;
15
+ exports.highlight = highlight;
16
+ const languages_1 = require("./languages");
17
+ const types_1 = require("./types");
18
+ /**
19
+ * Language registry - maps names/aliases to tokenizers
20
+ */
21
+ const registry = new Map();
22
+ // Build registry from all languages
23
+ for (const lang of languages_1.languages) {
24
+ registry.set(lang.name.toLowerCase(), lang);
25
+ for (const alias of lang.aliases) {
26
+ registry.set(alias.toLowerCase(), lang);
27
+ }
28
+ }
29
+ /**
30
+ * Get a language tokenizer by name or alias
31
+ */
32
+ function getLanguage(name) {
33
+ return registry.get(name.toLowerCase());
34
+ }
35
+ /**
36
+ * Get all registered language names
37
+ */
38
+ function getLanguageNames() {
39
+ return languages_1.languages.map(l => l.name);
40
+ }
41
+ /**
42
+ * Get a language tokenizer by file extension
43
+ */
44
+ function getLanguageByExtension(ext) {
45
+ const normalizedExt = ext.startsWith('.') ? ext.toLowerCase() : `.${ext.toLowerCase()}`;
46
+ return languages_1.languages.find(lang => lang.extensions.includes(normalizedExt));
47
+ }
48
+ /**
49
+ * Detection patterns for auto-detection
50
+ */
51
+ const DETECTION_PATTERNS = [
52
+ // Bash/Shell
53
+ {
54
+ language: 'bash',
55
+ patterns: [
56
+ /^#!/, // Shebang
57
+ /\$\([^)]+\)/, // Command substitution
58
+ /\$\{[^}]+\}/, // Variable expansion
59
+ /\b(echo|export|source|alias)\b/, // Common builtins
60
+ /\b(if|then|else|fi|for|do|done)\b/, // Shell keywords
61
+ /\|\s*(?:grep|sed|awk|xargs)\b/, // Pipe to common tools
62
+ ],
63
+ weight: 1,
64
+ },
65
+ // TypeScript (check before JavaScript due to overlap)
66
+ {
67
+ language: 'typescript',
68
+ patterns: [
69
+ /:\s*(?:string|number|boolean|void|any|unknown|never)\b/, // Type annotations
70
+ /\binterface\s+\w+/, // Interface
71
+ /\btype\s+\w+\s*=/, // Type alias
72
+ /<\w+(?:\s*,\s*\w+)*>/, // Generic types
73
+ /\bas\s+\w+/, // Type assertion
74
+ /\?:/, // Optional property
75
+ ],
76
+ weight: 2,
77
+ },
78
+ // JavaScript
79
+ {
80
+ language: 'javascript',
81
+ patterns: [
82
+ /\b(const|let|var)\s+\w+\s*=/, // Variable declarations
83
+ /\bfunction\s+\w+\s*\(/, // Function declarations
84
+ /=>\s*[{(]/, // Arrow functions
85
+ /\bclass\s+\w+/, // Class declarations
86
+ /\b(import|export)\s+/, // ES modules
87
+ /\b(async|await)\b/, // Async/await
88
+ /console\.\w+/, // Console usage
89
+ ],
90
+ weight: 1,
91
+ },
92
+ // Python
93
+ {
94
+ language: 'python',
95
+ patterns: [
96
+ /^#!.*python/m, // Python shebang
97
+ /\bdef\s+\w+\s*\(/, // Function def
98
+ /\bclass\s+\w+[:(]/, // Class def
99
+ /\bimport\s+\w+/, // Import
100
+ /\bfrom\s+\w+\s+import\b/, // From import
101
+ /:\s*$/m, // Colon at end of line
102
+ /__\w+__/, // Magic methods
103
+ /\bself\./, // Self reference
104
+ ],
105
+ weight: 1,
106
+ },
107
+ // JSON
108
+ {
109
+ language: 'json',
110
+ patterns: [
111
+ /^\s*\{[\s\S]*\}\s*$/, // Object
112
+ /^\s*\[[\s\S]*\]\s*$/, // Array
113
+ /"[^"]*"\s*:\s*(?:"[^"]*"|[\d.]+|true|false|null|\{|\[)/, // Key-value
114
+ ],
115
+ weight: 1,
116
+ },
117
+ // Go
118
+ {
119
+ language: 'go',
120
+ patterns: [
121
+ /\bpackage\s+\w+/, // Package declaration
122
+ /\bfunc\s+(?:\(\w+\s+\*?\w+\))?\s*\w+/, // Function/method
123
+ /\bgo\s+\w+/, // Goroutine
124
+ /:=\s*/, // Short declaration
125
+ /\bchan\s+/, // Channel
126
+ /\bdefer\s+/, // Defer
127
+ /\bstruct\s*\{/, // Struct
128
+ ],
129
+ weight: 1,
130
+ },
131
+ // Rust
132
+ {
133
+ language: 'rust',
134
+ patterns: [
135
+ /\bfn\s+\w+/, // Function
136
+ /\blet\s+(?:mut\s+)?\w+/, // Let binding
137
+ /\bimpl\s+(?:<[^>]+>\s*)?\w+/, // Impl block
138
+ /\bpub\s+(?:fn|struct|enum|mod)\b/, // Public items
139
+ /\bmatch\s+\w+\s*\{/, // Match expression
140
+ /->|=>/, // Arrows
141
+ /&(?:mut\s+)?'?\w+/, // References/lifetimes
142
+ /!$/m, // Macro calls
143
+ ],
144
+ weight: 1,
145
+ },
146
+ // Java
147
+ {
148
+ language: 'java',
149
+ patterns: [
150
+ /\bpublic\s+(?:static\s+)?(?:void|class|interface)\b/, // Public decl
151
+ /\bpackage\s+[\w.]+;/, // Package
152
+ /\bimport\s+[\w.*]+;/, // Import
153
+ /\bSystem\.out\./, // System.out
154
+ /@\w+(?:\([^)]*\))?/, // Annotations
155
+ /\bextends\s+\w+/, // Extends
156
+ /\bimplements\s+\w+/, // Implements
157
+ ],
158
+ weight: 1,
159
+ },
160
+ // C/C++
161
+ {
162
+ language: 'cpp',
163
+ patterns: [
164
+ /#include\s*[<"]/, // Include
165
+ /#define\s+\w+/, // Define
166
+ /\bint\s+main\s*\(/, // Main function
167
+ /\bstd::/, // STL namespace
168
+ /\btemplate\s*</, // Templates
169
+ /\bnamespace\s+\w+/, // Namespace
170
+ /\bvirtual\s+/, // Virtual
171
+ /->/, // Pointer member access
172
+ /\bnullptr\b/, // nullptr
173
+ ],
174
+ weight: 1,
175
+ },
176
+ // C (lower weight than C++ due to overlap)
177
+ {
178
+ language: 'c',
179
+ patterns: [
180
+ /#include\s*[<"]/, // Include
181
+ /\bint\s+main\s*\(/, // Main function
182
+ /\bprintf\s*\(/, // printf
183
+ /\bscanf\s*\(/, // scanf
184
+ /\bmalloc\s*\(/, // malloc
185
+ /\bfree\s*\(/, // free
186
+ /\bNULL\b/, // NULL
187
+ ],
188
+ weight: 0.5,
189
+ },
190
+ // C#
191
+ {
192
+ language: 'csharp',
193
+ patterns: [
194
+ /\busing\s+[\w.]+;/, // Using directive
195
+ /\bnamespace\s+[\w.]+/, // Namespace
196
+ /\bpublic\s+(?:partial\s+)?class\b/, // Class declaration
197
+ /\bvar\s+\w+\s*=/, // Var declaration
198
+ /\basync\s+Task/, // Async Task
199
+ /\bawait\s+/, // Await
200
+ /\bLinq\b|\.Select\(|\.Where\(/, // LINQ
201
+ /\bConsole\.Write/, // Console
202
+ ],
203
+ weight: 1,
204
+ },
205
+ // HTML/XML
206
+ {
207
+ language: 'html',
208
+ patterns: [
209
+ /<!DOCTYPE\s+html/i, // HTML doctype
210
+ /<html[\s>]/i, // HTML tag
211
+ /<head[\s>]/i, // Head tag
212
+ /<body[\s>]/i, // Body tag
213
+ /<div[\s>]/i, // Div tag
214
+ /<span[\s>]/i, // Span tag
215
+ /<\/\w+>/, // Closing tags
216
+ /<\w+[^>]*\/?>/, // Self-closing or opening tags
217
+ /\s(?:class|id|href|src)="/, // Common attributes
218
+ ],
219
+ weight: 1,
220
+ },
221
+ ];
222
+ /**
223
+ * Auto-detect the language of a code snippet
224
+ * Returns the best match or undefined if no confident match
225
+ */
226
+ function detectLanguage(code) {
227
+ const scores = new Map();
228
+ for (const { language, patterns, weight } of DETECTION_PATTERNS) {
229
+ let matchCount = 0;
230
+ for (const pattern of patterns) {
231
+ if (pattern.test(code)) {
232
+ matchCount++;
233
+ }
234
+ }
235
+ if (matchCount > 0) {
236
+ const score = (matchCount / patterns.length) * weight;
237
+ const existing = scores.get(language) ?? 0;
238
+ scores.set(language, Math.max(existing, score));
239
+ }
240
+ }
241
+ // Find the best match
242
+ let bestLang;
243
+ let bestScore = 0;
244
+ for (const [lang, score] of scores) {
245
+ if (score > bestScore) {
246
+ bestScore = score;
247
+ bestLang = lang;
248
+ }
249
+ }
250
+ // Require minimum confidence
251
+ if (bestLang && bestScore >= 0.15) {
252
+ return { language: bestLang, confidence: bestScore };
253
+ }
254
+ return undefined;
255
+ }
256
+ /**
257
+ * Convert tokens to ANSI-colored string
258
+ */
259
+ function tokensToAnsi(tokens) {
260
+ let result = '';
261
+ for (const token of tokens) {
262
+ const ansiCode = types_1.TOKEN_TO_ANSI[token.type];
263
+ if (ansiCode) {
264
+ result += ansiCode + token.value + types_1.ANSI_RESET;
265
+ }
266
+ else {
267
+ result += token.value;
268
+ }
269
+ }
270
+ return result;
271
+ }
272
+ /**
273
+ * Highlight code with syntax highlighting, returning ANSI-colored string
274
+ *
275
+ * @param code - The source code to highlight
276
+ * @param language - Language name, alias, or 'auto' for auto-detection
277
+ * @returns ANSI-colored string ready for shellfie
278
+ */
279
+ function highlight(code, language = 'auto') {
280
+ let tokenizer;
281
+ if (language === 'auto') {
282
+ const detected = detectLanguage(code);
283
+ if (detected) {
284
+ tokenizer = getLanguage(detected.language);
285
+ }
286
+ }
287
+ else {
288
+ tokenizer = getLanguage(language);
289
+ }
290
+ // If no tokenizer found, return code as-is
291
+ if (!tokenizer) {
292
+ return code;
293
+ }
294
+ const tokens = tokenizer.tokenize(code);
295
+ return tokensToAnsi(tokens);
296
+ }
297
+ var types_2 = require("./types");
298
+ Object.defineProperty(exports, "ANSI_RESET", { enumerable: true, get: function () { return types_2.ANSI_RESET; } });
299
+ Object.defineProperty(exports, "TOKEN_TO_ANSI", { enumerable: true, get: function () { return types_2.TOKEN_TO_ANSI; } });
300
+ // Export tokenizer utilities for custom language implementations
301
+ var tokenizer_1 = require("./tokenizer");
302
+ Object.defineProperty(exports, "COMMON_PATTERNS", { enumerable: true, get: function () { return tokenizer_1.COMMON_PATTERNS; } });
303
+ Object.defineProperty(exports, "createCLikePatterns", { enumerable: true, get: function () { return tokenizer_1.createCLikePatterns; } });
304
+ Object.defineProperty(exports, "tokenize", { enumerable: true, get: function () { return tokenizer_1.tokenize; } });
305
+ Object.defineProperty(exports, "wordBoundary", { enumerable: true, get: function () { return tokenizer_1.wordBoundary; } });
306
+ // Export languages
307
+ var languages_2 = require("./languages");
308
+ Object.defineProperty(exports, "languages", { enumerable: true, get: function () { return languages_2.languages; } });
309
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/highlight/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { LanguageTokenizer } from '../types';
2
+ export declare const bash: LanguageTokenizer;
3
+ //# sourceMappingURL=bash.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bash.d.ts","sourceRoot":"","sources":["../../../src/highlight/languages/bash.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAuB,MAAM,UAAU,CAAC;AAwFvE,eAAO,MAAM,IAAI,EAAE,iBAKlB,CAAC"}