presently 0.1.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 (215) hide show
  1. checksums.yaml +7 -0
  2. data/bin/presently +13 -0
  3. data/lib/presently/application.rb +104 -0
  4. data/lib/presently/clock.rb +77 -0
  5. data/lib/presently/display_view.rb +73 -0
  6. data/lib/presently/environment/application.rb +62 -0
  7. data/lib/presently/page.rb +38 -0
  8. data/lib/presently/page.xrb +31 -0
  9. data/lib/presently/presentation.rb +72 -0
  10. data/lib/presently/presentation_controller.rb +181 -0
  11. data/lib/presently/presenter_view.rb +264 -0
  12. data/lib/presently/slide.rb +148 -0
  13. data/lib/presently/slide_view.rb +92 -0
  14. data/lib/presently/state.rb +66 -0
  15. data/lib/presently/version.rb +9 -0
  16. data/lib/presently.rb +9 -0
  17. data/license.md +21 -0
  18. data/public/_components/@socketry/syntax/Syntax/CodeElement.js +337 -0
  19. data/public/_components/@socketry/syntax/Syntax/Errors.js +52 -0
  20. data/public/_components/@socketry/syntax/Syntax/Language/apache.js +49 -0
  21. data/public/_components/@socketry/syntax/Syntax/Language/applescript.js +157 -0
  22. data/public/_components/@socketry/syntax/Syntax/Language/assembly.js +42 -0
  23. data/public/_components/@socketry/syntax/Syntax/Language/bash-script.js +108 -0
  24. data/public/_components/@socketry/syntax/Syntax/Language/bash.js +32 -0
  25. data/public/_components/@socketry/syntax/Syntax/Language/basic.js +232 -0
  26. data/public/_components/@socketry/syntax/Syntax/Language/c++.js +1 -0
  27. data/public/_components/@socketry/syntax/Syntax/Language/c.js +1 -0
  28. data/public/_components/@socketry/syntax/Syntax/Language/clang.js +201 -0
  29. data/public/_components/@socketry/syntax/Syntax/Language/cpp.js +1 -0
  30. data/public/_components/@socketry/syntax/Syntax/Language/csharp.js +166 -0
  31. data/public/_components/@socketry/syntax/Syntax/Language/css.js +244 -0
  32. data/public/_components/@socketry/syntax/Syntax/Language/diff.js +24 -0
  33. data/public/_components/@socketry/syntax/Syntax/Language/go.js +135 -0
  34. data/public/_components/@socketry/syntax/Syntax/Language/haskell.js +110 -0
  35. data/public/_components/@socketry/syntax/Syntax/Language/html.js +69 -0
  36. data/public/_components/@socketry/syntax/Syntax/Language/io.js +68 -0
  37. data/public/_components/@socketry/syntax/Syntax/Language/java.js +134 -0
  38. data/public/_components/@socketry/syntax/Syntax/Language/javascript.js +89 -0
  39. data/public/_components/@socketry/syntax/Syntax/Language/json.js +36 -0
  40. data/public/_components/@socketry/syntax/Syntax/Language/lisp.js +38 -0
  41. data/public/_components/@socketry/syntax/Syntax/Language/lua.js +87 -0
  42. data/public/_components/@socketry/syntax/Syntax/Language/markdown.js +112 -0
  43. data/public/_components/@socketry/syntax/Syntax/Language/nginx.js +37 -0
  44. data/public/_components/@socketry/syntax/Syntax/Language/objective-c.js +1 -0
  45. data/public/_components/@socketry/syntax/Syntax/Language/ocaml.js +225 -0
  46. data/public/_components/@socketry/syntax/Syntax/Language/pascal.js +166 -0
  47. data/public/_components/@socketry/syntax/Syntax/Language/patch.js +2 -0
  48. data/public/_components/@socketry/syntax/Syntax/Language/perl5.js +317 -0
  49. data/public/_components/@socketry/syntax/Syntax/Language/php-script.js +112 -0
  50. data/public/_components/@socketry/syntax/Syntax/Language/php.js +18 -0
  51. data/public/_components/@socketry/syntax/Syntax/Language/plain.js +20 -0
  52. data/public/_components/@socketry/syntax/Syntax/Language/protobuf.js +77 -0
  53. data/public/_components/@socketry/syntax/Syntax/Language/python.js +208 -0
  54. data/public/_components/@socketry/syntax/Syntax/Language/ruby.js +124 -0
  55. data/public/_components/@socketry/syntax/Syntax/Language/scala.js +81 -0
  56. data/public/_components/@socketry/syntax/Syntax/Language/smalltalk.js +30 -0
  57. data/public/_components/@socketry/syntax/Syntax/Language/sql.js +865 -0
  58. data/public/_components/@socketry/syntax/Syntax/Language/super-collider.js +70 -0
  59. data/public/_components/@socketry/syntax/Syntax/Language/swift.js +176 -0
  60. data/public/_components/@socketry/syntax/Syntax/Language/xml.js +76 -0
  61. data/public/_components/@socketry/syntax/Syntax/Language/xrb.js +33 -0
  62. data/public/_components/@socketry/syntax/Syntax/Language/yaml.js +29 -0
  63. data/public/_components/@socketry/syntax/Syntax/Language.js +276 -0
  64. data/public/_components/@socketry/syntax/Syntax/Loader.js +78 -0
  65. data/public/_components/@socketry/syntax/Syntax/Match.js +546 -0
  66. data/public/_components/@socketry/syntax/Syntax/Rule.js +306 -0
  67. data/public/_components/@socketry/syntax/Syntax.js +356 -0
  68. data/public/_components/@socketry/syntax/bin/syntax-ast.js +42 -0
  69. data/public/_components/@socketry/syntax/examples/_template.html +53 -0
  70. data/public/_components/@socketry/syntax/examples/apache.html +72 -0
  71. data/public/_components/@socketry/syntax/examples/applescript.html +72 -0
  72. data/public/_components/@socketry/syntax/examples/assembly.html +74 -0
  73. data/public/_components/@socketry/syntax/examples/bash.html +90 -0
  74. data/public/_components/@socketry/syntax/examples/basic.html +87 -0
  75. data/public/_components/@socketry/syntax/examples/c.html +141 -0
  76. data/public/_components/@socketry/syntax/examples/clang.html +202 -0
  77. data/public/_components/@socketry/syntax/examples/csharp.html +110 -0
  78. data/public/_components/@socketry/syntax/examples/css-colors.html +179 -0
  79. data/public/_components/@socketry/syntax/examples/custom-theme.html +155 -0
  80. data/public/_components/@socketry/syntax/examples/diff.html +142 -0
  81. data/public/_components/@socketry/syntax/examples/examples.css +216 -0
  82. data/public/_components/@socketry/syntax/examples/go.html +413 -0
  83. data/public/_components/@socketry/syntax/examples/haskell.html +373 -0
  84. data/public/_components/@socketry/syntax/examples/html.html +316 -0
  85. data/public/_components/@socketry/syntax/examples/index.html +97 -0
  86. data/public/_components/@socketry/syntax/examples/io.html +552 -0
  87. data/public/_components/@socketry/syntax/examples/java.html +786 -0
  88. data/public/_components/@socketry/syntax/examples/javascript.html +199 -0
  89. data/public/_components/@socketry/syntax/examples/json.html +150 -0
  90. data/public/_components/@socketry/syntax/examples/lisp.html +476 -0
  91. data/public/_components/@socketry/syntax/examples/lua.html +737 -0
  92. data/public/_components/@socketry/syntax/examples/markdown.html +121 -0
  93. data/public/_components/@socketry/syntax/examples/mixed.html +306 -0
  94. data/public/_components/@socketry/syntax/examples/nginx.html +554 -0
  95. data/public/_components/@socketry/syntax/examples/ocaml.html +596 -0
  96. data/public/_components/@socketry/syntax/examples/pascal.html +762 -0
  97. data/public/_components/@socketry/syntax/examples/perl5.html +488 -0
  98. data/public/_components/@socketry/syntax/examples/php-script.html +142 -0
  99. data/public/_components/@socketry/syntax/examples/php.html +95 -0
  100. data/public/_components/@socketry/syntax/examples/plain.html +222 -0
  101. data/public/_components/@socketry/syntax/examples/protobuf.html +405 -0
  102. data/public/_components/@socketry/syntax/examples/python.html +82 -0
  103. data/public/_components/@socketry/syntax/examples/readme.md +79 -0
  104. data/public/_components/@socketry/syntax/examples/ruby.html +58 -0
  105. data/public/_components/@socketry/syntax/examples/scala.html +41 -0
  106. data/public/_components/@socketry/syntax/examples/smalltalk.html +436 -0
  107. data/public/_components/@socketry/syntax/examples/sql.html +373 -0
  108. data/public/_components/@socketry/syntax/examples/super-collider.html +55 -0
  109. data/public/_components/@socketry/syntax/examples/swift.html +176 -0
  110. data/public/_components/@socketry/syntax/examples/wrap-demo.html +103 -0
  111. data/public/_components/@socketry/syntax/examples/xml.html +112 -0
  112. data/public/_components/@socketry/syntax/examples/xrb.html +37 -0
  113. data/public/_components/@socketry/syntax/examples/yaml.html +72 -0
  114. data/public/_components/@socketry/syntax/license.md +21 -0
  115. data/public/_components/@socketry/syntax/package-lock.json +834 -0
  116. data/public/_components/@socketry/syntax/package.json +43 -0
  117. data/public/_components/@socketry/syntax/readme.md +162 -0
  118. data/public/_components/@socketry/syntax/test/Syntax/CodeElement.js +306 -0
  119. data/public/_components/@socketry/syntax/test/Syntax/ErrorHandling.js +85 -0
  120. data/public/_components/@socketry/syntax/test/Syntax/Language/apache.js +153 -0
  121. data/public/_components/@socketry/syntax/test/Syntax/Language/applescript.js +198 -0
  122. data/public/_components/@socketry/syntax/test/Syntax/Language/assembly.js +209 -0
  123. data/public/_components/@socketry/syntax/test/Syntax/Language/bash-script.js +225 -0
  124. data/public/_components/@socketry/syntax/test/Syntax/Language/bash.js +162 -0
  125. data/public/_components/@socketry/syntax/test/Syntax/Language/basic.js +265 -0
  126. data/public/_components/@socketry/syntax/test/Syntax/Language/clang.js +390 -0
  127. data/public/_components/@socketry/syntax/test/Syntax/Language/csharp.js +436 -0
  128. data/public/_components/@socketry/syntax/test/Syntax/Language/css.js +431 -0
  129. data/public/_components/@socketry/syntax/test/Syntax/Language/diff.js +206 -0
  130. data/public/_components/@socketry/syntax/test/Syntax/Language/go.js +386 -0
  131. data/public/_components/@socketry/syntax/test/Syntax/Language/haskell.js +454 -0
  132. data/public/_components/@socketry/syntax/test/Syntax/Language/html.js +111 -0
  133. data/public/_components/@socketry/syntax/test/Syntax/Language/io.js +229 -0
  134. data/public/_components/@socketry/syntax/test/Syntax/Language/java.js +362 -0
  135. data/public/_components/@socketry/syntax/test/Syntax/Language/javascript.js +101 -0
  136. data/public/_components/@socketry/syntax/test/Syntax/Language/json.js +101 -0
  137. data/public/_components/@socketry/syntax/test/Syntax/Language/lisp.js +224 -0
  138. data/public/_components/@socketry/syntax/test/Syntax/Language/lua.js +307 -0
  139. data/public/_components/@socketry/syntax/test/Syntax/Language/markdown.js +163 -0
  140. data/public/_components/@socketry/syntax/test/Syntax/Language/nginx.js +267 -0
  141. data/public/_components/@socketry/syntax/test/Syntax/Language/ocaml.js +299 -0
  142. data/public/_components/@socketry/syntax/test/Syntax/Language/pascal.js +311 -0
  143. data/public/_components/@socketry/syntax/test/Syntax/Language/perl5.js +333 -0
  144. data/public/_components/@socketry/syntax/test/Syntax/Language/php-script.js +197 -0
  145. data/public/_components/@socketry/syntax/test/Syntax/Language/php.js +92 -0
  146. data/public/_components/@socketry/syntax/test/Syntax/Language/plain.js +327 -0
  147. data/public/_components/@socketry/syntax/test/Syntax/Language/protobuf.js +294 -0
  148. data/public/_components/@socketry/syntax/test/Syntax/Language/python.js +213 -0
  149. data/public/_components/@socketry/syntax/test/Syntax/Language/ruby.js +70 -0
  150. data/public/_components/@socketry/syntax/test/Syntax/Language/scala.js +75 -0
  151. data/public/_components/@socketry/syntax/test/Syntax/Language/smalltalk.js +223 -0
  152. data/public/_components/@socketry/syntax/test/Syntax/Language/sql.js +281 -0
  153. data/public/_components/@socketry/syntax/test/Syntax/Language/super-collider.js +66 -0
  154. data/public/_components/@socketry/syntax/test/Syntax/Language/swift.js +71 -0
  155. data/public/_components/@socketry/syntax/test/Syntax/Language/xml.js +170 -0
  156. data/public/_components/@socketry/syntax/test/Syntax/Language/xrb.js +57 -0
  157. data/public/_components/@socketry/syntax/test/Syntax/Language/yaml.js +123 -0
  158. data/public/_components/@socketry/syntax/test/Syntax/Language.js +62 -0
  159. data/public/_components/@socketry/syntax/test/Syntax/Match.js +40 -0
  160. data/public/_components/@socketry/syntax/test/Syntax/Rule.js +251 -0
  161. data/public/_components/@socketry/syntax/test/Syntax.js +38 -0
  162. data/public/_components/@socketry/syntax/test/helpers/ast-matcher.js +90 -0
  163. data/public/_components/@socketry/syntax/themes/base/apache.css +1 -0
  164. data/public/_components/@socketry/syntax/themes/base/applescript.css +1 -0
  165. data/public/_components/@socketry/syntax/themes/base/assembly.css +1 -0
  166. data/public/_components/@socketry/syntax/themes/base/bash.css +1 -0
  167. data/public/_components/@socketry/syntax/themes/base/basic.css +1 -0
  168. data/public/_components/@socketry/syntax/themes/base/c.css +1 -0
  169. data/public/_components/@socketry/syntax/themes/base/clang.css +0 -0
  170. data/public/_components/@socketry/syntax/themes/base/csharp.css +1 -0
  171. data/public/_components/@socketry/syntax/themes/base/css.css +22 -0
  172. data/public/_components/@socketry/syntax/themes/base/diff.css +48 -0
  173. data/public/_components/@socketry/syntax/themes/base/go.css +1 -0
  174. data/public/_components/@socketry/syntax/themes/base/haskell.css +1 -0
  175. data/public/_components/@socketry/syntax/themes/base/html.css +1 -0
  176. data/public/_components/@socketry/syntax/themes/base/io.css +1 -0
  177. data/public/_components/@socketry/syntax/themes/base/java.css +1 -0
  178. data/public/_components/@socketry/syntax/themes/base/javascript.css +1 -0
  179. data/public/_components/@socketry/syntax/themes/base/json.css +41 -0
  180. data/public/_components/@socketry/syntax/themes/base/lisp.css +1 -0
  181. data/public/_components/@socketry/syntax/themes/base/lua.css +1 -0
  182. data/public/_components/@socketry/syntax/themes/base/markdown.css +16 -0
  183. data/public/_components/@socketry/syntax/themes/base/nginx.css +1 -0
  184. data/public/_components/@socketry/syntax/themes/base/ocaml.css +1 -0
  185. data/public/_components/@socketry/syntax/themes/base/pascal.css +1 -0
  186. data/public/_components/@socketry/syntax/themes/base/perl5.css +1 -0
  187. data/public/_components/@socketry/syntax/themes/base/php-script.css +1 -0
  188. data/public/_components/@socketry/syntax/themes/base/php.css +1 -0
  189. data/public/_components/@socketry/syntax/themes/base/plain.css +1 -0
  190. data/public/_components/@socketry/syntax/themes/base/protobuf.css +1 -0
  191. data/public/_components/@socketry/syntax/themes/base/python.css +1 -0
  192. data/public/_components/@socketry/syntax/themes/base/ruby.css +23 -0
  193. data/public/_components/@socketry/syntax/themes/base/scala.css +3 -0
  194. data/public/_components/@socketry/syntax/themes/base/smalltalk.css +1 -0
  195. data/public/_components/@socketry/syntax/themes/base/sql.css +1 -0
  196. data/public/_components/@socketry/syntax/themes/base/super-collider.css +33 -0
  197. data/public/_components/@socketry/syntax/themes/base/swift.css +1 -0
  198. data/public/_components/@socketry/syntax/themes/base/syntax.css +63 -0
  199. data/public/_components/@socketry/syntax/themes/base/xml.css +1 -0
  200. data/public/_components/@socketry/syntax/themes/base/xrb.css +29 -0
  201. data/public/_components/@socketry/syntax/themes/base/yaml.css +1 -0
  202. data/public/_components/@socketry/syntax/themes/theming.md +233 -0
  203. data/public/_components/@socketry/syntax/update-examples.js +135 -0
  204. data/public/_static/index.css +593 -0
  205. data/public/application.js +147 -0
  206. data/readme.md +69 -0
  207. data/releases.md +3 -0
  208. data/templates/code.xrb +12 -0
  209. data/templates/default.xrb +5 -0
  210. data/templates/image.xrb +8 -0
  211. data/templates/section.xrb +5 -0
  212. data/templates/title.xrb +8 -0
  213. data/templates/translation.xrb +8 -0
  214. data/templates/two_column.xrb +8 -0
  215. metadata +280 -0
@@ -0,0 +1,97 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>@socketry/syntax - Examples</title>
7
+ <link rel="stylesheet" href="examples.css">
8
+ </head>
9
+ <body>
10
+ <header>
11
+ <h1>@socketry/syntax</h1>
12
+ <p class="subtitle">A modern, framework-agnostic syntax highlighter built with Web Components</p>
13
+ </header>
14
+
15
+ <div class="feature-list">
16
+ <strong>Features:</strong>
17
+ <ul>
18
+ <li>🎨 Syntax highlighting using <code>&lt;syntax-code&gt;</code> custom elements</li>
19
+ <li>📦 ES modules with dynamic language loading</li>
20
+ <li>🎯 Support for 40+ programming languages</li>
21
+ <li>🔗 Embedded language support (JavaScript in HTML, CSS in HTML, etc.)</li>
22
+ <li>⚡ Fast and lightweight with minimal dependencies</li>
23
+ </ul>
24
+ </div>
25
+
26
+ <h2>Web Languages</h2>
27
+ <div class="language-grid">
28
+ <a href="html.html">HTML</a>
29
+ <a href="css-colors.html">CSS</a>
30
+ <a href="javascript.html">JavaScript</a>
31
+ <a href="json.html">JSON</a>
32
+ <a href="xml.html">XML</a>
33
+ <a href="xrb.html">XRB</a>
34
+ <a href="php.html">PHP</a>
35
+ <a href="php-script.html">PHP-Script</a>
36
+ </div>
37
+
38
+ <h2>Systems Languages</h2>
39
+ <div class="language-grid">
40
+ <a href="c.html">C/C++</a>
41
+ <a href="csharp.html">C#</a>
42
+ <a href="go.html">Go</a>
43
+ <a href="java.html">Java</a>
44
+ <a href="swift.html">Swift</a>
45
+ <a href="assembly.html">Assembly</a>
46
+ </div>
47
+
48
+ <h2>Scripting Languages</h2>
49
+ <div class="language-grid">
50
+ <a href="python.html">Python</a>
51
+ <a href="ruby.html">Ruby</a>
52
+ <a href="bash.html">Bash</a>
53
+ <a href="perl5.html">Perl 5</a>
54
+ <a href="lua.html">Lua</a>
55
+ <a href="applescript.html">AppleScript</a>
56
+ </div>
57
+
58
+ <h2>Functional Languages</h2>
59
+ <div class="language-grid">
60
+ <a href="haskell.html">Haskell</a>
61
+ <a href="scala.html">Scala</a>
62
+ <a href="lisp.html">Lisp</a>
63
+ <a href="ocaml.html">OCaml</a>
64
+ </div>
65
+
66
+ <h2>Other Languages</h2>
67
+ <div class="language-grid">
68
+ <a href="basic.html">BASIC/VB</a>
69
+ <a href="io.html">Io</a>
70
+ <a href="pascal.html">Pascal</a>
71
+ <a href="smalltalk.html">Smalltalk</a>
72
+ <a href="super-collider.html">SuperCollider</a>
73
+ <a href="sql.html">SQL</a>
74
+ </div>
75
+
76
+ <h2>Configuration & Data</h2>
77
+ <div class="language-grid">
78
+ <a href="yaml.html">YAML</a>
79
+ <a href="apache.html">Apache</a>
80
+ <a href="nginx.html">Nginx</a>
81
+ <a href="protobuf.html">Protocol Buffers</a>
82
+ <a href="diff.html">Diff/Patch</a>
83
+ <a href="plain.html">Plain Text</a>
84
+ <a href="markdown.html">Markdown</a>
85
+ </div>
86
+
87
+ <script type="module">
88
+ import Syntax from '../Syntax.js';
89
+
90
+ // Initialize highlighting
91
+ await Syntax.highlight({
92
+ autoUpgrade: true,
93
+ syntax: Syntax.default
94
+ });
95
+ </script>
96
+ </body>
97
+ </html>
@@ -0,0 +1,552 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>Io Examples - @socketry/syntax</title>
7
+ <link rel="stylesheet" href="examples.css">
8
+ </head>
9
+ <body>
10
+ <header>
11
+ <h1>Io Examples</h1>
12
+ <p class="subtitle">Io syntax highlighting</p>
13
+ </header>
14
+
15
+ <nav>
16
+ <a href="index.html">Back to Examples</a>
17
+ </nav>
18
+
19
+ <h1>Io Code Example</h1>
20
+
21
+ <p>Io is a prototype-based programming language inspired by Smalltalk, Self, Lua, and others.</p>
22
+
23
+ <div class="example">
24
+ <h2>Basic Syntax</h2>
25
+ <p class="description">Example:</p>
26
+
27
+ <pre><code class="language-io"># Comments start with hash
28
+ // C++-style comments also work
29
+ /* C-style block comments */
30
+
31
+ # Assignment
32
+ x := 42
33
+ name := "Alice"
34
+
35
+ # Slot creation (creates a setter too)
36
+ x ::= 42
37
+
38
+ # Printing
39
+ "Hello, World!" println
40
+ x println
41
+ </code></pre>
42
+
43
+ <div class="example">
44
+ <h2>Objects and Cloning</h2>
45
+ <p class="description">Example:</p>
46
+
47
+ <pre><code class="language-io"># Everything is an object
48
+ # Create a new object by cloning
49
+ Person := Object clone
50
+
51
+ # Add slots (methods and data)
52
+ Person name := "Unknown"
53
+ Person age := 0
54
+
55
+ # Add a method using 'method'
56
+ Person greet := method(
57
+ "Hello, my name is " .. self name .. "!" println
58
+ )
59
+
60
+ # Clone to create instances
61
+ alice := Person clone
62
+ alice name = "Alice"
63
+ alice age = 30
64
+ alice greet
65
+ # Output: Hello, my name is Alice!
66
+
67
+ bob := Person clone setName("Bob") setAge(25)
68
+ </code></pre>
69
+
70
+ <div class="example">
71
+ <h2>Methods</h2>
72
+ <p class="description">Example:</p>
73
+
74
+ <pre><code class="language-io"># Method with parameters
75
+ add := method(a, b,
76
+ a + b
77
+ )
78
+
79
+ add(3, 4) println # Output: 7
80
+
81
+ # Method with default parameters
82
+ greet := method(name,
83
+ if(name == nil, name = "World")
84
+ "Hello, " .. name .. "!" println
85
+ )
86
+
87
+ greet # Output: Hello, World!
88
+ greet("Alice") # Output: Hello, Alice!
89
+
90
+ # Multiple statements in a method
91
+ factorial := method(n,
92
+ if(n <= 1,
93
+ return 1,
94
+ return n * factorial(n - 1)
95
+ )
96
+ )
97
+
98
+ factorial(5) println # Output: 120
99
+ </code></pre>
100
+
101
+ <div class="example">
102
+ <h2>Control Structures</h2>
103
+ <p class="description">Example:</p>
104
+
105
+ <pre><code class="language-io"># if-then-else
106
+ x := 10
107
+ if(x > 0,
108
+ "positive" println,
109
+ "not positive" println
110
+ )
111
+
112
+ # Nested if
113
+ if(x < 0,
114
+ "negative" println,
115
+ if(x > 0,
116
+ "positive" println,
117
+ "zero" println
118
+ )
119
+ )
120
+
121
+ # while loop
122
+ i := 0
123
+ while(i < 5,
124
+ i println
125
+ i = i + 1
126
+ )
127
+
128
+ # for loop
129
+ for(i, 1, 10,
130
+ i println
131
+ )
132
+
133
+ # Loop with step
134
+ for(i, 0, 100, 10,
135
+ i println
136
+ )
137
+
138
+ # break and continue
139
+ for(i, 1, 10,
140
+ if(i == 3, continue)
141
+ if(i == 7, break)
142
+ i println
143
+ )
144
+ </code></pre>
145
+
146
+ <div class="example">
147
+ <h2>Lists</h2>
148
+ <p class="description">Example:</p>
149
+
150
+ <pre><code class="language-io"># Create a list
151
+ numbers := list(1, 2, 3, 4, 5)
152
+
153
+ # Or using List clone
154
+ fruits := List clone
155
+ fruits append("apple")
156
+ fruits append("banana")
157
+ fruits append("cherry")
158
+
159
+ # Access elements
160
+ fruits at(0) println # Output: apple
161
+ fruits first println # Output: apple
162
+ fruits last println # Output: cherry
163
+
164
+ # List size
165
+ fruits size println # Output: 3
166
+
167
+ # Check if empty
168
+ fruits isEmpty println # Output: false
169
+
170
+ # Remove elements
171
+ fruits remove("banana")
172
+ fruits removeAt(0)
173
+
174
+ # Iterate over list
175
+ fruits foreach(fruit,
176
+ fruit println
177
+ )
178
+
179
+ # Map
180
+ squared := numbers map(x, x * x)
181
+ # Result: list(1, 4, 9, 16, 25)
182
+
183
+ # Filter
184
+ evens := numbers select(x, x % 2 == 0)
185
+ # Result: list(2, 4)
186
+
187
+ # Reduce
188
+ sum := numbers reduce(total, num, total + num, 0)
189
+ # Result: 15
190
+ </code></pre>
191
+
192
+ <div class="example">
193
+ <h2>Maps (Dictionaries)</h2>
194
+ <p class="description">Example:</p>
195
+
196
+ <pre><code class="language-io"># Create a map
197
+ person := Map clone
198
+ person atPut("name", "Alice")
199
+ person atPut("age", 30)
200
+ person atPut("city", "NYC")
201
+
202
+ # Access values
203
+ person at("name") println # Output: Alice
204
+
205
+ # Check if key exists
206
+ person hasKey("name") println # Output: true
207
+
208
+ # Get all keys
209
+ person keys foreach(key,
210
+ key println
211
+ )
212
+
213
+ # Get all values
214
+ person values foreach(value,
215
+ value println
216
+ )
217
+
218
+ # Iterate over map
219
+ person foreach(key, value,
220
+ (key .. ": " .. value) println
221
+ )
222
+
223
+ # Remove key
224
+ person removeAt("city")
225
+ </code></pre>
226
+
227
+ <div class="example">
228
+ <h2>Strings</h2>
229
+ <p class="description">Example:</p>
230
+
231
+ <pre><code class="language-io"># String literals
232
+ greeting := "Hello, World!"
233
+ name := 'Alice'
234
+
235
+ # String concatenation
236
+ fullName := "Alice" .. " " .. "Smith"
237
+
238
+ # String interpolation using concatenation
239
+ age := 30
240
+ message := "I am " .. age .. " years old"
241
+
242
+ # String methods
243
+ greeting size println # Length
244
+ greeting uppercase println # HELLO, WORLD!
245
+ greeting lowercase println # hello, world!
246
+
247
+ # String contains
248
+ greeting contains("World") println # true
249
+
250
+ # Split string
251
+ parts := "one,two,three" split(",")
252
+ parts foreach(part, part println)
253
+
254
+ # Replace
255
+ text := "Hello, Bob!" replace("Bob", "Alice")
256
+ # Result: "Hello, Alice!"
257
+
258
+ # Substring
259
+ text := "Hello, World!"
260
+ text slice(0, 5) println # Output: Hello
261
+ text slice(7) println # Output: World!
262
+ </code></pre>
263
+
264
+ <div class="example">
265
+ <h2>Numbers and Math</h2>
266
+ <p class="description">Example:</p>
267
+
268
+ <pre><code class="language-io"># Integers and floats
269
+ x := 42
270
+ y := 3.14
271
+
272
+ # Arithmetic
273
+ a := 10 + 5 # 15
274
+ b := 10 - 5 # 5
275
+ c := 10 * 5 # 50
276
+ d := 10 / 5 # 2
277
+ e := 10 % 3 # 1
278
+
279
+ # Comparison
280
+ x == y # false
281
+ x != y # true
282
+ x < y # false
283
+ x > y # true
284
+
285
+ # Math methods
286
+ (-5) abs println # 5
287
+ (3.7) ceil println # 4
288
+ (3.7) floor println # 3
289
+ (3.7) round println # 4
290
+ (16) sqrt println # 4
291
+ (2) pow(8) println # 256
292
+
293
+ # Random numbers
294
+ Number random println # Random float 0-1
295
+ (1 to(100)) random println # Random int 1-100
296
+ </code></pre>
297
+
298
+ <div class="example">
299
+ <h2>Blocks and Closures</h2>
300
+ <p class="description">Example:</p>
301
+
302
+ <pre><code class="language-io"># Block (like lambda/anonymous function)
303
+ square := block(x, x * x)
304
+ square call(5) println # Output: 25
305
+
306
+ # Blocks capture scope
307
+ makeCounter := method(
308
+ count := 0
309
+ block(
310
+ count = count + 1
311
+ count
312
+ )
313
+ )
314
+
315
+ counter := makeCounter
316
+ counter call println # Output: 1
317
+ counter call println # Output: 2
318
+ counter call println # Output: 3
319
+
320
+ # Blocks with lists
321
+ list(1, 2, 3, 4, 5) map(block(x, x * 2)) println
322
+ # Output: list(2, 4, 6, 8, 10)
323
+ </code></pre>
324
+
325
+ <div class="example">
326
+ <h2>Inheritance and Prototypes</h2>
327
+ <p class="description">Example:</p>
328
+
329
+ <pre><code class="language-io"># Base object
330
+ Animal := Object clone
331
+ Animal name := "Unknown"
332
+ Animal speak := method("..." println)
333
+
334
+ # Derive from Animal
335
+ Dog := Animal clone
336
+ Dog speak := method("Woof!" println)
337
+
338
+ Cat := Animal clone
339
+ Cat speak := method("Meow!" println)
340
+
341
+ # Create instances
342
+ fido := Dog clone
343
+ fido name = "Fido"
344
+ fido speak # Output: Woof!
345
+
346
+ whiskers := Cat clone
347
+ whiskers name = "Whiskers"
348
+ whiskers speak # Output: Meow!
349
+
350
+ # Check prototype chain
351
+ fido proto == Dog # true
352
+ Dog proto == Animal # true
353
+ </code></pre>
354
+
355
+ <div class="example">
356
+ <h2>Exception Handling</h2>
357
+ <p class="description">Example:</p>
358
+
359
+ <pre><code class="language-io"># try-catch
360
+ result := try(
361
+ # Code that might raise exception
362
+ x := 10 / 0
363
+ ) catch(Exception,
364
+ "Error occurred!" println
365
+ 0 # Default value
366
+ )
367
+
368
+ # Raising exceptions
369
+ validate := method(x,
370
+ if(x < 0,
371
+ Exception raise("Value must be positive")
372
+ )
373
+ x
374
+ )
375
+
376
+ # Custom exception handling
377
+ try(
378
+ validate(-5)
379
+ ) catch(Exception,
380
+ "Caught: " .. (Exception message) println
381
+ )
382
+ </code></pre>
383
+
384
+ <div class="example">
385
+ <h2>File I/O</h2>
386
+ <p class="description">Example:</p>
387
+
388
+ <pre><code class="language-io"># Read file
389
+ contents := File with("data.txt") contents
390
+
391
+ # Write file
392
+ File with("output.txt") write("Hello, World!")
393
+
394
+ # Append to file
395
+ File with("log.txt") appendToContents("Log entry\n")
396
+
397
+ # Check if file exists
398
+ File with("data.txt") exists println
399
+
400
+ # Create directory
401
+ Directory with("mydir") create
402
+
403
+ # List directory contents
404
+ Directory with(".") items foreach(item,
405
+ item name println
406
+ )
407
+ </code></pre>
408
+
409
+ <div class="example">
410
+ <h2>Advanced Examples</h2>
411
+ <p class="description">Example:</p>
412
+
413
+ <pre><code class="language-io"># Fibonacci sequence
414
+ fibonacci := method(n,
415
+ if(n <= 1,
416
+ return n,
417
+ return fibonacci(n - 1) + fibonacci(n - 2)
418
+ )
419
+ )
420
+
421
+ # Generate fibonacci sequence
422
+ fib := list()
423
+ for(i, 0, 10,
424
+ fib append(fibonacci(i))
425
+ )
426
+ fib println # list(0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55)
427
+
428
+ # Quicksort
429
+ quicksort := method(lst,
430
+ if(lst size <= 1,
431
+ return lst
432
+ )
433
+ pivot := lst at(0)
434
+ rest := lst slice(1)
435
+ less := rest select(x, x < pivot)
436
+ greater := rest select(x, x >= pivot)
437
+ return quicksort(less) append(pivot) appendSeq(quicksort(greater))
438
+ )
439
+
440
+ unsorted := list(3, 1, 4, 1, 5, 9, 2, 6)
441
+ quicksort(unsorted) println
442
+ # Output: list(1, 1, 2, 3, 4, 5, 6, 9)
443
+
444
+ # Object-oriented example: Bank account
445
+ Account := Object clone
446
+ Account balance := 0
447
+
448
+ Account deposit := method(amount,
449
+ if(amount <= 0,
450
+ Exception raise("Deposit amount must be positive")
451
+ )
452
+ self balance = self balance + amount
453
+ self
454
+ )
455
+
456
+ Account withdraw := method(amount,
457
+ if(amount <= 0,
458
+ Exception raise("Withdrawal amount must be positive")
459
+ )
460
+ if(amount > self balance,
461
+ Exception raise("Insufficient funds")
462
+ )
463
+ self balance = self balance - amount
464
+ self
465
+ )
466
+
467
+ Account getBalance := method(
468
+ self balance
469
+ )
470
+
471
+ # Create and use account
472
+ myAccount := Account clone
473
+ myAccount deposit(1000)
474
+ myAccount withdraw(250)
475
+ myAccount getBalance println # Output: 750
476
+
477
+ # Method chaining
478
+ myAccount deposit(500) withdraw(100) deposit(50)
479
+ myAccount getBalance println # Output: 1200
480
+
481
+ # Observer pattern
482
+ Observable := Object clone
483
+ Observable observers := list()
484
+
485
+ Observable addObserver := method(observer,
486
+ self observers append(observer)
487
+ )
488
+
489
+ Observable notifyObservers := method(
490
+ self observers foreach(observer,
491
+ observer update(self)
492
+ )
493
+ )
494
+
495
+ Observer := Object clone
496
+ Observer update := method(subject,
497
+ "Observer notified!" println
498
+ )
499
+
500
+ subject := Observable clone
501
+ observer1 := Observer clone
502
+ observer2 := Observer clone
503
+
504
+ subject addObserver(observer1)
505
+ subject addObserver(observer2)
506
+ subject notifyObservers
507
+ # Output:
508
+ # Observer notified!
509
+ # Observer notified!
510
+ </code></pre>
511
+
512
+ <div class="example">
513
+ <h2>Metaprogramming</h2>
514
+ <p class="description">Example:</p>
515
+
516
+ <pre><code class="language-io"># Get list of slots (methods/attributes)
517
+ Person slotNames println
518
+
519
+ # Check if object has a slot
520
+ Person hasSlot("name") println # true
521
+
522
+ # Get slot value
523
+ Person getSlot("name") println
524
+
525
+ # Set slot value
526
+ Person setSlot("city", "NYC")
527
+
528
+ # Dynamically call methods
529
+ Person perform("greet")
530
+
531
+ # Create methods dynamically
532
+ Person setSlot("age", 0)
533
+ Person setSlot("setAge", method(newAge,
534
+ self age = newAge
535
+ ))
536
+
537
+ # Forward unknown messages
538
+ ForwardingObject := Object clone
539
+ ForwardingObject forward := method(
540
+ "Called: " .. call message name println
541
+ "Arguments: " .. call message arguments println
542
+ )
543
+
544
+ obj := ForwardingObject clone
545
+ obj unknownMethod(1, 2, 3)
546
+ # Output:
547
+ # Called: unknownMethod
548
+ # Arguments: list(1, 2, 3)
549
+ </code></pre>
550
+
551
+ </body>
552
+ </html>