shellfie 2.0.19 → 2.0.21

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 (75) 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 +314 -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 +115 -52
  69. package/dist/renderer/customGlyphs.js.map +1 -1
  70. package/dist/renderer/text.d.ts.map +1 -1
  71. package/dist/renderer/text.js +1 -0
  72. package/dist/renderer/text.js.map +1 -1
  73. package/dist/types.d.ts +9 -0
  74. package/dist/types.d.ts.map +1 -1
  75. 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;AAiMD;;;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,314 @@
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
+ /^#!.*\b(?:ba)?sh\b/m, // Bash/sh shebang
57
+ /^#!.*\bzsh\b/m, // Zsh shebang
58
+ /^#!.*\bfish\b/m, // Fish shebang
59
+ /\$\([^)]+\)/, // Command substitution
60
+ /\$\{[^}]+\}/, // Variable expansion
61
+ /\b(echo|export|source|alias)\b/, // Common builtins
62
+ /\b(if|then|else|fi|for|do|done)\b/, // Shell keywords
63
+ /\|\s*(?:grep|sed|awk|xargs)\b/, // Pipe to common tools
64
+ ],
65
+ weight: 1,
66
+ },
67
+ // TypeScript (check before JavaScript due to overlap)
68
+ {
69
+ language: 'typescript',
70
+ patterns: [
71
+ /:\s*(?:string|number|boolean|void|any|unknown|never)\b/, // Type annotations
72
+ /\binterface\s+\w+/, // Interface
73
+ /\btype\s+\w+\s*=/, // Type alias
74
+ /<\w+(?:\s*,\s*\w+)*>/, // Generic types
75
+ /\bas\s+\w+/, // Type assertion
76
+ /\?:/, // Optional property
77
+ ],
78
+ weight: 2,
79
+ },
80
+ // JavaScript
81
+ {
82
+ language: 'javascript',
83
+ patterns: [
84
+ /^#!.*\bnode\b/m, // Node.js shebang
85
+ /^#!.*\bbun\b/m, // Bun shebang
86
+ /^#!.*\bdeno\b/m, // Deno shebang
87
+ /\b(const|let|var)\s+\w+\s*=/, // Variable declarations
88
+ /\bfunction\s+\w+\s*\(/, // Function declarations
89
+ /=>\s*[{(]/, // Arrow functions
90
+ /\bclass\s+\w+/, // Class declarations
91
+ /\b(import|export)\s+/, // ES modules
92
+ /\b(async|await)\b/, // Async/await
93
+ /console\.\w+/, // Console usage
94
+ ],
95
+ weight: 1,
96
+ },
97
+ // Python
98
+ {
99
+ language: 'python',
100
+ patterns: [
101
+ /^#!.*python/m, // Python shebang
102
+ /\bdef\s+\w+\s*\(/, // Function def
103
+ /\bclass\s+\w+[:(]/, // Class def
104
+ /\bimport\s+\w+/, // Import
105
+ /\bfrom\s+\w+\s+import\b/, // From import
106
+ /:\s*$/m, // Colon at end of line
107
+ /__\w+__/, // Magic methods
108
+ /\bself\./, // Self reference
109
+ ],
110
+ weight: 1,
111
+ },
112
+ // JSON
113
+ {
114
+ language: 'json',
115
+ patterns: [
116
+ /^\s*\{[\s\S]*\}\s*$/, // Object
117
+ /^\s*\[[\s\S]*\]\s*$/, // Array
118
+ /"[^"]*"\s*:\s*(?:"[^"]*"|[\d.]+|true|false|null|\{|\[)/, // Key-value
119
+ ],
120
+ weight: 1,
121
+ },
122
+ // Go
123
+ {
124
+ language: 'go',
125
+ patterns: [
126
+ /\bpackage\s+\w+/, // Package declaration
127
+ /\bfunc\s+(?:\(\w+\s+\*?\w+\))?\s*\w+/, // Function/method
128
+ /\bgo\s+\w+/, // Goroutine
129
+ /:=\s*/, // Short declaration
130
+ /\bchan\s+/, // Channel
131
+ /\bdefer\s+/, // Defer
132
+ /\bstruct\s*\{/, // Struct
133
+ ],
134
+ weight: 1,
135
+ },
136
+ // Rust
137
+ {
138
+ language: 'rust',
139
+ patterns: [
140
+ /\bfn\s+\w+/, // Function
141
+ /\blet\s+(?:mut\s+)?\w+/, // Let binding
142
+ /\bimpl\s+(?:<[^>]+>\s*)?\w+/, // Impl block
143
+ /\bpub\s+(?:fn|struct|enum|mod)\b/, // Public items
144
+ /\bmatch\s+\w+\s*\{/, // Match expression
145
+ /->|=>/, // Arrows
146
+ /&(?:mut\s+)?'?\w+/, // References/lifetimes
147
+ /!$/m, // Macro calls
148
+ ],
149
+ weight: 1,
150
+ },
151
+ // Java
152
+ {
153
+ language: 'java',
154
+ patterns: [
155
+ /\bpublic\s+(?:static\s+)?(?:void|class|interface)\b/, // Public decl
156
+ /\bpackage\s+[\w.]+;/, // Package
157
+ /\bimport\s+[\w.*]+;/, // Import
158
+ /\bSystem\.out\./, // System.out
159
+ /@\w+(?:\([^)]*\))?/, // Annotations
160
+ /\bextends\s+\w+/, // Extends
161
+ /\bimplements\s+\w+/, // Implements
162
+ ],
163
+ weight: 1,
164
+ },
165
+ // C/C++
166
+ {
167
+ language: 'cpp',
168
+ patterns: [
169
+ /#include\s*[<"]/, // Include
170
+ /#define\s+\w+/, // Define
171
+ /\bint\s+main\s*\(/, // Main function
172
+ /\bstd::/, // STL namespace
173
+ /\btemplate\s*</, // Templates
174
+ /\bnamespace\s+\w+/, // Namespace
175
+ /\bvirtual\s+/, // Virtual
176
+ /->/, // Pointer member access
177
+ /\bnullptr\b/, // nullptr
178
+ ],
179
+ weight: 1,
180
+ },
181
+ // C (lower weight than C++ due to overlap)
182
+ {
183
+ language: 'c',
184
+ patterns: [
185
+ /#include\s*[<"]/, // Include
186
+ /\bint\s+main\s*\(/, // Main function
187
+ /\bprintf\s*\(/, // printf
188
+ /\bscanf\s*\(/, // scanf
189
+ /\bmalloc\s*\(/, // malloc
190
+ /\bfree\s*\(/, // free
191
+ /\bNULL\b/, // NULL
192
+ ],
193
+ weight: 0.5,
194
+ },
195
+ // C#
196
+ {
197
+ language: 'csharp',
198
+ patterns: [
199
+ /\busing\s+[\w.]+;/, // Using directive
200
+ /\bnamespace\s+[\w.]+/, // Namespace
201
+ /\bpublic\s+(?:partial\s+)?class\b/, // Class declaration
202
+ /\bvar\s+\w+\s*=/, // Var declaration
203
+ /\basync\s+Task/, // Async Task
204
+ /\bawait\s+/, // Await
205
+ /\bLinq\b|\.Select\(|\.Where\(/, // LINQ
206
+ /\bConsole\.Write/, // Console
207
+ ],
208
+ weight: 1,
209
+ },
210
+ // HTML/XML
211
+ {
212
+ language: 'html',
213
+ patterns: [
214
+ /<!DOCTYPE\s+html/i, // HTML doctype
215
+ /<html[\s>]/i, // HTML tag
216
+ /<head[\s>]/i, // Head tag
217
+ /<body[\s>]/i, // Body tag
218
+ /<div[\s>]/i, // Div tag
219
+ /<span[\s>]/i, // Span tag
220
+ /<\/\w+>/, // Closing tags
221
+ /<\w+[^>]*\/?>/, // Self-closing or opening tags
222
+ /\s(?:class|id|href|src)="/, // Common attributes
223
+ ],
224
+ weight: 1,
225
+ },
226
+ ];
227
+ /**
228
+ * Auto-detect the language of a code snippet
229
+ * Returns the best match or undefined if no confident match
230
+ */
231
+ function detectLanguage(code) {
232
+ const scores = new Map();
233
+ for (const { language, patterns, weight } of DETECTION_PATTERNS) {
234
+ let matchCount = 0;
235
+ for (const pattern of patterns) {
236
+ if (pattern.test(code)) {
237
+ matchCount++;
238
+ }
239
+ }
240
+ if (matchCount > 0) {
241
+ const score = (matchCount / patterns.length) * weight;
242
+ const existing = scores.get(language) ?? 0;
243
+ scores.set(language, Math.max(existing, score));
244
+ }
245
+ }
246
+ // Find the best match
247
+ let bestLang;
248
+ let bestScore = 0;
249
+ for (const [lang, score] of scores) {
250
+ if (score > bestScore) {
251
+ bestScore = score;
252
+ bestLang = lang;
253
+ }
254
+ }
255
+ // Require minimum confidence
256
+ if (bestLang && bestScore >= 0.15) {
257
+ return { language: bestLang, confidence: bestScore };
258
+ }
259
+ return undefined;
260
+ }
261
+ /**
262
+ * Convert tokens to ANSI-colored string
263
+ */
264
+ function tokensToAnsi(tokens) {
265
+ let result = '';
266
+ for (const token of tokens) {
267
+ const ansiCode = types_1.TOKEN_TO_ANSI[token.type];
268
+ if (ansiCode) {
269
+ result += ansiCode + token.value + types_1.ANSI_RESET;
270
+ }
271
+ else {
272
+ result += token.value;
273
+ }
274
+ }
275
+ return result;
276
+ }
277
+ /**
278
+ * Highlight code with syntax highlighting, returning ANSI-colored string
279
+ *
280
+ * @param code - The source code to highlight
281
+ * @param language - Language name, alias, or 'auto' for auto-detection
282
+ * @returns ANSI-colored string ready for shellfie
283
+ */
284
+ function highlight(code, language = 'auto') {
285
+ let tokenizer;
286
+ if (language === 'auto') {
287
+ const detected = detectLanguage(code);
288
+ if (detected) {
289
+ tokenizer = getLanguage(detected.language);
290
+ }
291
+ }
292
+ else {
293
+ tokenizer = getLanguage(language);
294
+ }
295
+ // If no tokenizer found, return code as-is
296
+ if (!tokenizer) {
297
+ return code;
298
+ }
299
+ const tokens = tokenizer.tokenize(code);
300
+ return tokensToAnsi(tokens);
301
+ }
302
+ var types_2 = require("./types");
303
+ Object.defineProperty(exports, "ANSI_RESET", { enumerable: true, get: function () { return types_2.ANSI_RESET; } });
304
+ Object.defineProperty(exports, "TOKEN_TO_ANSI", { enumerable: true, get: function () { return types_2.TOKEN_TO_ANSI; } });
305
+ // Export tokenizer utilities for custom language implementations
306
+ var tokenizer_1 = require("./tokenizer");
307
+ Object.defineProperty(exports, "COMMON_PATTERNS", { enumerable: true, get: function () { return tokenizer_1.COMMON_PATTERNS; } });
308
+ Object.defineProperty(exports, "createCLikePatterns", { enumerable: true, get: function () { return tokenizer_1.createCLikePatterns; } });
309
+ Object.defineProperty(exports, "tokenize", { enumerable: true, get: function () { return tokenizer_1.tokenize; } });
310
+ Object.defineProperty(exports, "wordBoundary", { enumerable: true, get: function () { return tokenizer_1.wordBoundary; } });
311
+ // Export languages
312
+ var languages_2 = require("./languages");
313
+ Object.defineProperty(exports, "languages", { enumerable: true, get: function () { return languages_2.languages; } });
314
+ //# 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"}