utopia-project 0.37.6 → 0.38.0

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 (104) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data/context/documentation-guidelines.md +12 -7
  4. data/lib/utopia/project/import_map.rb +1 -0
  5. data/lib/utopia/project/version.rb +1 -1
  6. data/pages/_page.xnode +8 -13
  7. data/public/_components/@socketry/syntax/Syntax/CodeElement.js +293 -0
  8. data/public/_components/@socketry/syntax/Syntax/Errors.js +52 -0
  9. data/public/_components/@socketry/syntax/Syntax/Language/apache.js +49 -0
  10. data/public/_components/@socketry/syntax/Syntax/Language/applescript.js +157 -0
  11. data/public/_components/@socketry/syntax/Syntax/Language/assembly.js +42 -0
  12. data/public/_components/@socketry/syntax/Syntax/Language/bash-script.js +108 -0
  13. data/public/_components/@socketry/syntax/Syntax/Language/bash.js +32 -0
  14. data/public/_components/@socketry/syntax/Syntax/Language/basic.js +232 -0
  15. data/public/_components/@socketry/syntax/Syntax/Language/c++.js +1 -0
  16. data/public/_components/@socketry/syntax/Syntax/Language/c.js +1 -0
  17. data/public/_components/@socketry/syntax/Syntax/Language/clang.js +201 -0
  18. data/public/_components/@socketry/syntax/Syntax/Language/cpp.js +1 -0
  19. data/public/_components/@socketry/syntax/Syntax/Language/csharp.js +166 -0
  20. data/public/_components/@socketry/syntax/Syntax/Language/css.js +244 -0
  21. data/public/_components/@socketry/syntax/Syntax/Language/diff.js +24 -0
  22. data/public/_components/@socketry/syntax/Syntax/Language/go.js +135 -0
  23. data/public/_components/@socketry/syntax/Syntax/Language/haskell.js +110 -0
  24. data/public/_components/@socketry/syntax/Syntax/Language/html.js +69 -0
  25. data/public/_components/@socketry/syntax/Syntax/Language/io.js +68 -0
  26. data/public/_components/@socketry/syntax/Syntax/Language/java.js +134 -0
  27. data/public/_components/@socketry/syntax/Syntax/Language/javascript.js +89 -0
  28. data/public/_components/@socketry/syntax/Syntax/Language/json.js +36 -0
  29. data/public/_components/@socketry/syntax/Syntax/Language/lisp.js +38 -0
  30. data/public/_components/@socketry/syntax/Syntax/Language/lua.js +87 -0
  31. data/public/_components/@socketry/syntax/Syntax/Language/markdown.js +112 -0
  32. data/public/_components/@socketry/syntax/Syntax/Language/nginx.js +37 -0
  33. data/public/_components/@socketry/syntax/Syntax/Language/objective-c.js +1 -0
  34. data/public/_components/@socketry/syntax/Syntax/Language/ocaml.js +225 -0
  35. data/public/_components/@socketry/syntax/Syntax/Language/pascal.js +166 -0
  36. data/public/_components/@socketry/syntax/Syntax/Language/patch.js +2 -0
  37. data/public/_components/@socketry/syntax/Syntax/Language/perl5.js +317 -0
  38. data/public/_components/@socketry/syntax/Syntax/Language/php-script.js +112 -0
  39. data/public/_components/@socketry/syntax/Syntax/Language/php.js +18 -0
  40. data/public/_components/@socketry/syntax/Syntax/Language/plain.js +20 -0
  41. data/public/_components/@socketry/syntax/Syntax/Language/protobuf.js +77 -0
  42. data/public/_components/@socketry/syntax/Syntax/Language/python.js +208 -0
  43. data/public/_components/@socketry/syntax/Syntax/Language/ruby.js +124 -0
  44. data/public/_components/@socketry/syntax/Syntax/Language/scala.js +81 -0
  45. data/public/_components/@socketry/syntax/Syntax/Language/smalltalk.js +30 -0
  46. data/public/_components/@socketry/syntax/Syntax/Language/sql.js +865 -0
  47. data/public/_components/@socketry/syntax/Syntax/Language/super-collider.js +70 -0
  48. data/public/_components/@socketry/syntax/Syntax/Language/swift.js +176 -0
  49. data/public/_components/@socketry/syntax/Syntax/Language/xml.js +76 -0
  50. data/public/_components/@socketry/syntax/Syntax/Language/xrb.js +33 -0
  51. data/public/_components/@socketry/syntax/Syntax/Language/yaml.js +29 -0
  52. data/public/_components/@socketry/syntax/Syntax/Language.js +276 -0
  53. data/public/_components/@socketry/syntax/Syntax/Loader.js +78 -0
  54. data/public/_components/@socketry/syntax/Syntax/Match.js +546 -0
  55. data/public/_components/@socketry/syntax/Syntax/Rule.js +306 -0
  56. data/public/_components/@socketry/syntax/Syntax.js +356 -0
  57. data/public/_components/@socketry/syntax/license.md +21 -0
  58. data/public/_components/@socketry/syntax/package.json +43 -0
  59. data/public/_components/@socketry/syntax/readme.md +162 -0
  60. data/public/_components/@socketry/syntax/themes/base/apache.css +1 -0
  61. data/public/_components/@socketry/syntax/themes/base/applescript.css +1 -0
  62. data/public/_components/@socketry/syntax/themes/base/assembly.css +1 -0
  63. data/public/_components/@socketry/syntax/themes/base/bash.css +1 -0
  64. data/public/_components/@socketry/syntax/themes/base/basic.css +1 -0
  65. data/public/_components/@socketry/syntax/themes/base/c.css +1 -0
  66. data/public/_components/@socketry/syntax/themes/base/clang.css +0 -0
  67. data/public/_components/@socketry/syntax/themes/base/csharp.css +1 -0
  68. data/public/_components/@socketry/syntax/themes/base/css.css +22 -0
  69. data/public/_components/@socketry/syntax/themes/base/diff.css +48 -0
  70. data/public/_components/@socketry/syntax/themes/base/go.css +1 -0
  71. data/public/_components/@socketry/syntax/themes/base/haskell.css +1 -0
  72. data/public/_components/@socketry/syntax/themes/base/html.css +1 -0
  73. data/public/_components/@socketry/syntax/themes/base/io.css +1 -0
  74. data/public/_components/@socketry/syntax/themes/base/java.css +1 -0
  75. data/public/_components/@socketry/syntax/themes/base/javascript.css +1 -0
  76. data/public/_components/@socketry/syntax/themes/base/json.css +41 -0
  77. data/public/_components/@socketry/syntax/themes/base/lisp.css +1 -0
  78. data/public/_components/@socketry/syntax/themes/base/lua.css +1 -0
  79. data/public/_components/@socketry/syntax/themes/base/markdown.css +16 -0
  80. data/public/_components/@socketry/syntax/themes/base/nginx.css +1 -0
  81. data/public/_components/@socketry/syntax/themes/base/ocaml.css +1 -0
  82. data/public/_components/@socketry/syntax/themes/base/pascal.css +1 -0
  83. data/public/_components/@socketry/syntax/themes/base/perl5.css +1 -0
  84. data/public/_components/@socketry/syntax/themes/base/php-script.css +1 -0
  85. data/public/_components/@socketry/syntax/themes/base/php.css +1 -0
  86. data/public/_components/@socketry/syntax/themes/base/plain.css +1 -0
  87. data/public/_components/@socketry/syntax/themes/base/protobuf.css +1 -0
  88. data/public/_components/@socketry/syntax/themes/base/python.css +1 -0
  89. data/public/_components/@socketry/syntax/themes/base/ruby.css +23 -0
  90. data/public/_components/@socketry/syntax/themes/base/scala.css +3 -0
  91. data/public/_components/@socketry/syntax/themes/base/smalltalk.css +1 -0
  92. data/public/_components/@socketry/syntax/themes/base/sql.css +1 -0
  93. data/public/_components/@socketry/syntax/themes/base/super-collider.css +33 -0
  94. data/public/_components/@socketry/syntax/themes/base/swift.css +1 -0
  95. data/public/_components/@socketry/syntax/themes/base/syntax.css +63 -0
  96. data/public/_components/@socketry/syntax/themes/base/xml.css +1 -0
  97. data/public/_components/@socketry/syntax/themes/base/xrb.css +29 -0
  98. data/public/_components/@socketry/syntax/themes/base/yaml.css +1 -0
  99. data/public/_components/@socketry/syntax/themes/theming.md +233 -0
  100. data/public/_static/sidebar.js +55 -22
  101. data/public/_static/site.css +0 -4
  102. data.tar.gz.sig +0 -0
  103. metadata +94 -1
  104. metadata.gz.sig +0 -0
@@ -0,0 +1,43 @@
1
+ {
2
+ "name": "@socketry/syntax",
3
+ "version": "0.3.3",
4
+ "description": "A modern, framework-agnostic syntax highlighter using Web Components",
5
+ "type": "module",
6
+ "main": "Syntax.js",
7
+ "exports": {
8
+ ".": "./Syntax.js",
9
+ "./Match": "./Syntax/Match.js",
10
+ "./Language": "./Syntax/Language.js",
11
+ "./Loader": "./Syntax/Loader.js",
12
+ "./Errors": "./Syntax/Errors.js",
13
+ "./Language/*": "./Syntax/Language/*.js"
14
+ },
15
+ "files": [
16
+ "Syntax.js",
17
+ "Syntax/",
18
+ "styles/",
19
+ "themes/"
20
+ ],
21
+ "scripts": {
22
+ "test": "node --test 'test/**/*.js'",
23
+ "format": "prettier --write '**/*.{js,json,md}'",
24
+ "format:check": "prettier --check '**/*.{js,json,md}'"
25
+ },
26
+ "keywords": [
27
+ "syntax",
28
+ "highlighting",
29
+ "web-components",
30
+ "code",
31
+ "highlighter"
32
+ ],
33
+ "author": "Samuel G. D. Williams",
34
+ "license": "MIT",
35
+ "repository": {
36
+ "type": "git",
37
+ "url": "https://github.com/socketry/syntax-js.git"
38
+ },
39
+ "devDependencies": {
40
+ "jsdom": "^25.0.0",
41
+ "prettier": "^3.6.2"
42
+ }
43
+ }
@@ -0,0 +1,162 @@
1
+ # @socketry/syntax
2
+
3
+ A modern, framework-agnostic syntax highlighter using Web Components. This is a reimplementation of [jQuery.Syntax](https://github.com/ioquatix/jquery-syntax) without jQuery dependencies.
4
+
5
+ ## Features
6
+
7
+ - 🎨 **Modern Web Components** - Uses autonomous custom elements
8
+ - 📦 **Dynamic Loading** - Loads language definitions on-demand
9
+ - 🔒 **No Dependencies** - Pure JavaScript, no jQuery required
10
+ - 🎯 **Framework Agnostic** - Works with React, Vue, vanilla JS, etc.
11
+ - 🌲 **Clean Architecture** - Well-structured classes with clear responsibilities
12
+ - 🔐 **Private Fields** - Modern JavaScript with proper encapsulation
13
+
14
+ ## Installation
15
+
16
+ ```bash
17
+ npm install @socketry/syntax
18
+ ```
19
+
20
+ ## Usage
21
+
22
+ ### Automatic Upgrade
23
+
24
+ The easiest way to use Syntax is to let it automatically upgrade existing `<code>` elements:
25
+
26
+ ```html
27
+ <script type="module">
28
+ import Syntax from '@socketry/syntax';
29
+
30
+ // Automatically upgrade all code blocks with language classes
31
+ document.addEventListener('DOMContentLoaded', async function() {
32
+ await Syntax.highlight();
33
+ });
34
+ </script>
35
+
36
+ <!-- Standard code blocks - will be automatically upgraded -->
37
+ <pre><code class="language-javascript">
38
+ const hello = "world";
39
+ console.log(hello);
40
+ </code></pre>
41
+
42
+ <p>Inline code: <code class="language-javascript">const x = 1;</code></p>
43
+ ```
44
+
45
+ By default, `Syntax.highlight()` will:
46
+ - Find all `<code>` elements with class names matching `language-*` e.g., `language-javascript`, `language-python`.
47
+ - Replace them with `<syntax-code>` web components.
48
+ - Automatically detect if they're inside `<pre>` tags for proper wrapping behavior.
49
+
50
+ You can customize the selector:
51
+
52
+ ```javascript
53
+ // Only upgrade specific elements:
54
+ await Syntax.highlight({
55
+ selector: 'code.highlight'
56
+ });
57
+ ```
58
+
59
+ ### Manual Web Components
60
+
61
+ You can also use the `<syntax-code>` web component directly:
62
+
63
+ ```html
64
+ <script type="module">
65
+ import {Syntax} from '@socketry/syntax';
66
+
67
+ // Disable automatic upgrade, just register the component:
68
+ await Syntax.highlight({upgradeAll: false});
69
+ </script>
70
+
71
+ <!-- Use the web component directly -->
72
+ <syntax-code language="javascript">
73
+ const hello = "world"; console.log(hello);
74
+ </syntax-code>
75
+
76
+ <!-- Inside a <pre> tag for block display with line wrapping -->
77
+ <pre><syntax-code language="python" wrap>
78
+ def greet(name):
79
+ print(f"Hello, {name}!")
80
+ </syntax-code></pre>
81
+ ```
82
+
83
+ ### Programmatic Usage
84
+
85
+ ```javascript
86
+ import Syntax from '@socketry/syntax';
87
+ import registerJavaScript from '@socketry/syntax/Language/javascript.js';
88
+
89
+ // Create a Syntax instance
90
+ const syntax = new Syntax();
91
+ registerJavaScript(syntax);
92
+
93
+ // Get the JavaScript language and process code:
94
+ const language = await syntax.getLanguage('javascript');
95
+ const code = 'const x = 10;';
96
+ const html = await language.process(code);
97
+ document.body.appendChild(html);
98
+ ```
99
+
100
+ ### The `wrap` Attribute
101
+
102
+ The `<syntax-code>` element automatically detects whether it's inside a `<pre>` tag:
103
+
104
+ - **Inside `<pre>`**: Sets `wrap` attribute, enables line wrapping with proper indentation.
105
+ - **Standalone**: No `wrap` attribute, uses horizontal scrolling for long lines.
106
+
107
+ You can manually control this:
108
+
109
+ ```html
110
+ <!-- Force wrapping even outside <pre> -->
111
+ <syntax-code language="javascript" wrap>
112
+ const reallyLongLine = "This will wrap instead of scroll";
113
+ </syntax-code>
114
+
115
+ <!-- Disable wrapping even inside <pre> -->
116
+ <pre><syntax-code language="javascript">
117
+ const code = "This will scroll horizontally";
118
+ </syntax-code></pre>
119
+ ```
120
+
121
+ ## Command Line Tool
122
+
123
+ A simple CLI tool is included to inspect the AST (Abstract Syntax Tree) of parsed code:
124
+
125
+ ```bash
126
+ node bin/syntax-ast.js <language> <code>
127
+ ```
128
+
129
+ Examples:
130
+
131
+ ```bash
132
+ # Parse JavaScript
133
+ node bin/syntax-ast.js javascript "const x = 1;"
134
+
135
+ # Parse Markdown
136
+ node bin/syntax-ast.js markdown '`inline code`'
137
+
138
+ # Parse Python
139
+ node bin/syntax-ast.js python "def foo(): pass"
140
+ ```
141
+
142
+ Output shows all matched tokens with their type, position, length, and text:
143
+
144
+ ```
145
+ Language: javascript
146
+ Code: "const x = 1;"
147
+
148
+ Matches: 3
149
+ ────────────────────────────────────────────────────────────────────────────────
150
+ [keyword] @0..5 (5 chars)
151
+ Text: "const"
152
+ [operator] @8..9 (1 chars)
153
+ Text: "="
154
+ [constant] @10..11 (1 chars)
155
+ Text: "1"
156
+ ```
157
+
158
+ This is useful for:
159
+ - Debugging language definitions
160
+ - Understanding how code is tokenized
161
+ - Testing pattern matching
162
+ - Developing new language support
@@ -0,0 +1 @@
1
+ /* Per-language overrides for Apache (empty by default). */
@@ -0,0 +1 @@
1
+ /* Per-language overrides for AppleScript (empty by default). */
@@ -0,0 +1 @@
1
+ /* Per-language overrides for Assembly (empty by default). */
@@ -0,0 +1 @@
1
+ /* Per-language overrides for Bash (empty by default). */
@@ -0,0 +1 @@
1
+ /* Per-language overrides for BASIC (empty by default). */
@@ -0,0 +1 @@
1
+ /* Per-language overrides for C (empty by default). */
@@ -0,0 +1 @@
1
+ /* Per-language overrides for C# (empty by default). */
@@ -0,0 +1,22 @@
1
+ /* Per-language overrides for CSS (empty by default). */
2
+
3
+ /* Color box styling */
4
+ .colour-box {
5
+ display: inline-block;
6
+ margin: 0 0.2em;
7
+ border: 1px solid #999;
8
+ line-height: 0.9;
9
+ vertical-align: middle;
10
+ }
11
+
12
+ .colour-box .sample {
13
+ display: inline-block;
14
+ width: 0.9em;
15
+ height: 0.9em;
16
+ }
17
+
18
+ @media (prefers-color-scheme: dark) {
19
+ .colour-box {
20
+ border-color: #666;
21
+ }
22
+ }
@@ -0,0 +1,48 @@
1
+ /* Per-language overrides for Diff (empty by default). */
2
+
3
+ /* Light mode: Style entire lines based on the type of change */
4
+ .syntax.diff .insert {
5
+ background-color: rgba(0, 180, 0, 0.08);
6
+ }
7
+
8
+ .syntax.diff .remove {
9
+ background-color: rgba(220, 0, 0, 0.08);
10
+ }
11
+
12
+ .syntax.diff .offset {
13
+ background-color: rgba(0, 100, 200, 0.08);
14
+ font-weight: bold;
15
+ }
16
+
17
+ .syntax.diff .add {
18
+ color: #22863a;
19
+ font-weight: bold;
20
+ }
21
+
22
+ .syntax.diff .del {
23
+ color: #b31d28;
24
+ font-weight: bold;
25
+ }
26
+
27
+ /* Dark mode */
28
+ @media (prefers-color-scheme: dark) {
29
+ .syntax.diff .insert {
30
+ background-color: rgba(0, 255, 0, 0.1);
31
+ }
32
+
33
+ .syntax.diff .remove {
34
+ background-color: rgba(255, 0, 0, 0.1);
35
+ }
36
+
37
+ .syntax.diff .offset {
38
+ background-color: rgba(0, 150, 255, 0.1);
39
+ }
40
+
41
+ .syntax.diff .add {
42
+ color: #34d058;
43
+ }
44
+
45
+ .syntax.diff .del {
46
+ color: #ea4a5a;
47
+ }
48
+ }
@@ -0,0 +1 @@
1
+ /* Per-language overrides for Go (empty by default). */
@@ -0,0 +1 @@
1
+ /* Per-language overrides for Haskell (empty by default). */
@@ -0,0 +1 @@
1
+ /* Per-language overrides for HTML (empty by default). */
@@ -0,0 +1 @@
1
+ /* Io Syntax Theme */
@@ -0,0 +1 @@
1
+ /* Java Syntax Theme */
@@ -0,0 +1 @@
1
+ /* Per-language overrides for JavaScript (empty by default). */
@@ -0,0 +1,41 @@
1
+ /* JSON syntax highlighting styles */
2
+
3
+ /* Light mode (default) */
4
+ code.syntax .key {
5
+ color: #0451a5;
6
+ font-weight: normal;
7
+ }
8
+
9
+ code.syntax .string {
10
+ color: #a31515;
11
+ }
12
+
13
+ code.syntax .constant {
14
+ color: #098658;
15
+ }
16
+
17
+ code.syntax .operator {
18
+ color: #000000;
19
+ opacity: 0.6;
20
+ }
21
+
22
+ /* Dark mode */
23
+ @media (prefers-color-scheme: dark) {
24
+ code.syntax .key {
25
+ color: #9cdcfe;
26
+ font-weight: normal;
27
+ }
28
+
29
+ code.syntax .string {
30
+ color: #ce9178;
31
+ }
32
+
33
+ code.syntax .constant {
34
+ color: #b5cea8;
35
+ }
36
+
37
+ code.syntax .operator {
38
+ color: #d4d4d4;
39
+ opacity: 0.8;
40
+ }
41
+ }
@@ -0,0 +1 @@
1
+ /* Lisp Syntax Theme */
@@ -0,0 +1 @@
1
+ /* Lua Syntax Theme */
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Markdown language theme
3
+ *
4
+ * Markdown uses semantic token types with appropriate styling.
5
+ * Colors are derived from the base theme using hue rotation.
6
+ */
7
+
8
+ /* Semantic markdown tokens */
9
+ code.syntax .heading { color: hsl(calc(var(--syntax-base-hue) + 30), var(--syntax-base-saturation), var(--syntax-base-lightness)); font-weight: bold; }
10
+ code.syntax .emphasis { color: hsl(calc(var(--syntax-base-hue) - 90), calc(var(--syntax-base-saturation) - 10%), calc(var(--syntax-base-lightness) - 10%)); font-style: italic; }
11
+ code.syntax .strong { color: hsl(calc(var(--syntax-base-hue) + 30), var(--syntax-base-saturation), var(--syntax-base-lightness)); font-weight: bold; }
12
+ code.syntax .code { color: hsl(calc(var(--syntax-base-hue) - 30), var(--syntax-base-saturation), var(--syntax-base-lightness)); }
13
+ code.syntax .link { color: hsl(calc(var(--syntax-base-hue) - 60), var(--syntax-base-saturation), var(--syntax-base-lightness)); text-decoration: underline; }
14
+ code.syntax .quote { color: hsl(var(--syntax-base-hue), calc(var(--syntax-base-saturation) - 45%), var(--syntax-base-lightness)); font-style: italic; }
15
+ code.syntax .list-marker { color: hsl(calc(var(--syntax-base-hue) + 90), var(--syntax-base-saturation), var(--syntax-base-lightness)); }
16
+
@@ -0,0 +1 @@
1
+ /* Nginx Configuration Theme */
@@ -0,0 +1 @@
1
+ /* OCaml/F# Theme */
@@ -0,0 +1 @@
1
+ /* Pascal/Delphi Theme */
@@ -0,0 +1 @@
1
+ /* Perl 5 Syntax Highlighting */
@@ -0,0 +1 @@
1
+ /* PHP-script Syntax Highlighting Theme */
@@ -0,0 +1 @@
1
+ /* PHP Syntax Highlighting Theme */
@@ -0,0 +1 @@
1
+ /* Plain Text Syntax Highlighting */
@@ -0,0 +1 @@
1
+ /* Protocol Buffers Syntax Highlighting */
@@ -0,0 +1 @@
1
+ /* Per-language overrides for Python (empty by default). */
@@ -0,0 +1,23 @@
1
+ /* Ruby-specific token styles */
2
+
3
+ /* Light mode */
4
+ /* Symbols like :symbol */
5
+ code.syntax .symbol {
6
+ color: #d73a49;
7
+ }
8
+
9
+ /* Instance/class/global variables */
10
+ code.syntax .variable {
11
+ color: #6f42c1;
12
+ }
13
+
14
+ /* Dark mode */
15
+ @media (prefers-color-scheme: dark) {
16
+ code.syntax .symbol {
17
+ color: #e06c75;
18
+ }
19
+
20
+ code.syntax .variable {
21
+ color: #e5c07b;
22
+ }
23
+ }
@@ -0,0 +1,3 @@
1
+ /* Scala language specific tweaks (optional) */
2
+
3
+ /* Inherit base theme colors for standard token types. Add overrides here if desired. */
@@ -0,0 +1 @@
1
+ /* Smalltalk Syntax Theme */
@@ -0,0 +1 @@
1
+ /* SQL Syntax Theme */
@@ -0,0 +1,33 @@
1
+ /* SuperCollider-specific token styles */
2
+
3
+ /* Light mode */
4
+ /* Symbols like \freq or 'name' */
5
+ code.syntax .symbol {
6
+ color: #d73a49; /* red accent distinct from strings */
7
+ }
8
+
9
+ /* SC instance/class/global variables (@var, @@var, $char shown as constant) */
10
+ code.syntax .variable {
11
+ color: #6f42c1; /* purple distinct from constants */
12
+ }
13
+
14
+ /* Optional: emphasize function/method calls a bit more */
15
+ code.syntax .function {
16
+ color: #005cc5;
17
+ font-weight: 600;
18
+ }
19
+
20
+ /* Dark mode */
21
+ @media (prefers-color-scheme: dark) {
22
+ code.syntax .symbol {
23
+ color: #e06c75; /* reddish accent distinct from strings */
24
+ }
25
+
26
+ code.syntax .variable {
27
+ color: #e5c07b; /* warm yellow distinct from constants */
28
+ }
29
+
30
+ code.syntax .function {
31
+ color: #61afef;
32
+ }
33
+ }
@@ -0,0 +1 @@
1
+ /* Swift specific styles */
@@ -0,0 +1,63 @@
1
+ :host {
2
+ /* Base color - all other colors derive from this via hue rotation */
3
+ --syntax-base-hue: 270;
4
+ --syntax-base-saturation: 60%;
5
+ --syntax-base-lightness: 50%;
6
+ }
7
+
8
+ @media (prefers-color-scheme: dark) {
9
+ :host {
10
+ --syntax-base-saturation: 50%;
11
+ --syntax-base-lightness: 70%;
12
+ }
13
+ }
14
+
15
+ :host(:not([wrap])) {
16
+ overflow-x: auto;
17
+ white-space: pre;
18
+ }
19
+
20
+ :host[wrap] {
21
+ white-space: pre-wrap;
22
+ }
23
+
24
+ :host([wrap]) code.syntax > span {
25
+ display: flex;
26
+ }
27
+
28
+ code.syntax {
29
+ tab-size: 2;
30
+ }
31
+
32
+ :host([wrap]) code.syntax .indent {
33
+ flex-grow: 0;
34
+ flex-shrink: 0;
35
+ opacity: 0.5;
36
+ }
37
+
38
+ :host([wrap]) code.syntax .text {
39
+ white-space: pre-wrap;
40
+ padding-left: 2ch;
41
+ text-indent: -2ch;
42
+ }
43
+
44
+ /* Token type styles - colors derived from base via hue rotation */
45
+ code.syntax .keyword { color: hsl(calc(var(--syntax-base-hue) + 15), var(--syntax-base-saturation), var(--syntax-base-lightness)); font-weight: bold; }
46
+ code.syntax .string { color: hsl(calc(var(--syntax-base-hue) - 45), calc(var(--syntax-base-saturation) - 10%), calc(var(--syntax-base-lightness) - 5%)); }
47
+ code.syntax .comment { color: hsl(var(--syntax-base-hue), calc(var(--syntax-base-saturation) - 45%), var(--syntax-base-lightness)); font-style: italic; }
48
+ code.syntax .number { color: hsl(calc(var(--syntax-base-hue) - 30), var(--syntax-base-saturation), var(--syntax-base-lightness)); }
49
+ code.syntax .operator { color: hsl(calc(var(--syntax-base-hue) + 45), var(--syntax-base-saturation), var(--syntax-base-lightness)); }
50
+ code.syntax .function { color: hsl(calc(var(--syntax-base-hue) - 60), var(--syntax-base-saturation), var(--syntax-base-lightness)); }
51
+ code.syntax .constant { color: hsl(calc(var(--syntax-base-hue) - 30), var(--syntax-base-saturation), var(--syntax-base-lightness)); }
52
+ code.syntax .type { color: hsl(var(--syntax-base-hue), var(--syntax-base-saturation), var(--syntax-base-lightness)); }
53
+ code.syntax .preprocessor { color: hsl(calc(var(--syntax-base-hue) + 30), var(--syntax-base-saturation), var(--syntax-base-lightness)); font-style: italic; }
54
+ code.syntax .access { color: hsl(calc(var(--syntax-base-hue) + 15), var(--syntax-base-saturation), var(--syntax-base-lightness)); font-weight: bold; }
55
+ code.syntax .escape { color: hsl(calc(var(--syntax-base-hue) + 60), var(--syntax-base-saturation), var(--syntax-base-lightness)); font-weight: bold; }
56
+
57
+ /* HTML-oriented tokens */
58
+ code.syntax .tag { color: hsl(calc(var(--syntax-base-hue) + 50), var(--syntax-base-saturation), var(--syntax-base-lightness)); }
59
+ code.syntax .tag-name { color: hsl(calc(var(--syntax-base-hue) + 50), var(--syntax-base-saturation), var(--syntax-base-lightness)); font-weight: bold; }
60
+ code.syntax .attribute { color: hsl(calc(var(--syntax-base-hue) - 40), var(--syntax-base-saturation), var(--syntax-base-lightness)); }
61
+ code.syntax .entity { color: hsl(calc(var(--syntax-base-hue) + 45), var(--syntax-base-saturation), var(--syntax-base-lightness)); }
62
+ code.syntax .doctype { color: hsl(calc(var(--syntax-base-hue) + 15), var(--syntax-base-saturation), var(--syntax-base-lightness)); }
63
+ code.syntax .cdata { color: hsl(var(--syntax-base-hue), calc(var(--syntax-base-saturation) - 45%), var(--syntax-base-lightness)); }
@@ -0,0 +1 @@
1
+ /* XML specific styles */
@@ -0,0 +1,29 @@
1
+ /* XRB (XML with embedded Ruby) styles */
2
+
3
+ /* Light mode */
4
+ /* Delimiters for Ruby processing instruction: <?r ... ?> */
5
+ code.syntax .ruby-pi-open,
6
+ code.syntax .ruby-pi-close {
7
+ color: #005cc5; /* blue */
8
+ opacity: 0.9;
9
+ }
10
+
11
+ /* Delimiters for interpolation: #{ ... } */
12
+ code.syntax .ruby-interp-open,
13
+ code.syntax .ruby-interp-close {
14
+ color: #22863a; /* green */
15
+ opacity: 0.95;
16
+ }
17
+
18
+ /* Dark mode */
19
+ @media (prefers-color-scheme: dark) {
20
+ code.syntax .ruby-pi-open,
21
+ code.syntax .ruby-pi-close {
22
+ color: #61afef; /* blue-ish */
23
+ }
24
+
25
+ code.syntax .ruby-interp-open,
26
+ code.syntax .ruby-interp-close {
27
+ color: #98c379; /* green-ish */
28
+ }
29
+ }
@@ -0,0 +1 @@
1
+ /* Per-language overrides for YAML (empty by default). */