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.
- checksums.yaml +7 -0
- data/bin/presently +13 -0
- data/lib/presently/application.rb +104 -0
- data/lib/presently/clock.rb +77 -0
- data/lib/presently/display_view.rb +73 -0
- data/lib/presently/environment/application.rb +62 -0
- data/lib/presently/page.rb +38 -0
- data/lib/presently/page.xrb +31 -0
- data/lib/presently/presentation.rb +72 -0
- data/lib/presently/presentation_controller.rb +181 -0
- data/lib/presently/presenter_view.rb +264 -0
- data/lib/presently/slide.rb +148 -0
- data/lib/presently/slide_view.rb +92 -0
- data/lib/presently/state.rb +66 -0
- data/lib/presently/version.rb +9 -0
- data/lib/presently.rb +9 -0
- data/license.md +21 -0
- data/public/_components/@socketry/syntax/Syntax/CodeElement.js +337 -0
- data/public/_components/@socketry/syntax/Syntax/Errors.js +52 -0
- data/public/_components/@socketry/syntax/Syntax/Language/apache.js +49 -0
- data/public/_components/@socketry/syntax/Syntax/Language/applescript.js +157 -0
- data/public/_components/@socketry/syntax/Syntax/Language/assembly.js +42 -0
- data/public/_components/@socketry/syntax/Syntax/Language/bash-script.js +108 -0
- data/public/_components/@socketry/syntax/Syntax/Language/bash.js +32 -0
- data/public/_components/@socketry/syntax/Syntax/Language/basic.js +232 -0
- data/public/_components/@socketry/syntax/Syntax/Language/c++.js +1 -0
- data/public/_components/@socketry/syntax/Syntax/Language/c.js +1 -0
- data/public/_components/@socketry/syntax/Syntax/Language/clang.js +201 -0
- data/public/_components/@socketry/syntax/Syntax/Language/cpp.js +1 -0
- data/public/_components/@socketry/syntax/Syntax/Language/csharp.js +166 -0
- data/public/_components/@socketry/syntax/Syntax/Language/css.js +244 -0
- data/public/_components/@socketry/syntax/Syntax/Language/diff.js +24 -0
- data/public/_components/@socketry/syntax/Syntax/Language/go.js +135 -0
- data/public/_components/@socketry/syntax/Syntax/Language/haskell.js +110 -0
- data/public/_components/@socketry/syntax/Syntax/Language/html.js +69 -0
- data/public/_components/@socketry/syntax/Syntax/Language/io.js +68 -0
- data/public/_components/@socketry/syntax/Syntax/Language/java.js +134 -0
- data/public/_components/@socketry/syntax/Syntax/Language/javascript.js +89 -0
- data/public/_components/@socketry/syntax/Syntax/Language/json.js +36 -0
- data/public/_components/@socketry/syntax/Syntax/Language/lisp.js +38 -0
- data/public/_components/@socketry/syntax/Syntax/Language/lua.js +87 -0
- data/public/_components/@socketry/syntax/Syntax/Language/markdown.js +112 -0
- data/public/_components/@socketry/syntax/Syntax/Language/nginx.js +37 -0
- data/public/_components/@socketry/syntax/Syntax/Language/objective-c.js +1 -0
- data/public/_components/@socketry/syntax/Syntax/Language/ocaml.js +225 -0
- data/public/_components/@socketry/syntax/Syntax/Language/pascal.js +166 -0
- data/public/_components/@socketry/syntax/Syntax/Language/patch.js +2 -0
- data/public/_components/@socketry/syntax/Syntax/Language/perl5.js +317 -0
- data/public/_components/@socketry/syntax/Syntax/Language/php-script.js +112 -0
- data/public/_components/@socketry/syntax/Syntax/Language/php.js +18 -0
- data/public/_components/@socketry/syntax/Syntax/Language/plain.js +20 -0
- data/public/_components/@socketry/syntax/Syntax/Language/protobuf.js +77 -0
- data/public/_components/@socketry/syntax/Syntax/Language/python.js +208 -0
- data/public/_components/@socketry/syntax/Syntax/Language/ruby.js +124 -0
- data/public/_components/@socketry/syntax/Syntax/Language/scala.js +81 -0
- data/public/_components/@socketry/syntax/Syntax/Language/smalltalk.js +30 -0
- data/public/_components/@socketry/syntax/Syntax/Language/sql.js +865 -0
- data/public/_components/@socketry/syntax/Syntax/Language/super-collider.js +70 -0
- data/public/_components/@socketry/syntax/Syntax/Language/swift.js +176 -0
- data/public/_components/@socketry/syntax/Syntax/Language/xml.js +76 -0
- data/public/_components/@socketry/syntax/Syntax/Language/xrb.js +33 -0
- data/public/_components/@socketry/syntax/Syntax/Language/yaml.js +29 -0
- data/public/_components/@socketry/syntax/Syntax/Language.js +276 -0
- data/public/_components/@socketry/syntax/Syntax/Loader.js +78 -0
- data/public/_components/@socketry/syntax/Syntax/Match.js +546 -0
- data/public/_components/@socketry/syntax/Syntax/Rule.js +306 -0
- data/public/_components/@socketry/syntax/Syntax.js +356 -0
- data/public/_components/@socketry/syntax/bin/syntax-ast.js +42 -0
- data/public/_components/@socketry/syntax/examples/_template.html +53 -0
- data/public/_components/@socketry/syntax/examples/apache.html +72 -0
- data/public/_components/@socketry/syntax/examples/applescript.html +72 -0
- data/public/_components/@socketry/syntax/examples/assembly.html +74 -0
- data/public/_components/@socketry/syntax/examples/bash.html +90 -0
- data/public/_components/@socketry/syntax/examples/basic.html +87 -0
- data/public/_components/@socketry/syntax/examples/c.html +141 -0
- data/public/_components/@socketry/syntax/examples/clang.html +202 -0
- data/public/_components/@socketry/syntax/examples/csharp.html +110 -0
- data/public/_components/@socketry/syntax/examples/css-colors.html +179 -0
- data/public/_components/@socketry/syntax/examples/custom-theme.html +155 -0
- data/public/_components/@socketry/syntax/examples/diff.html +142 -0
- data/public/_components/@socketry/syntax/examples/examples.css +216 -0
- data/public/_components/@socketry/syntax/examples/go.html +413 -0
- data/public/_components/@socketry/syntax/examples/haskell.html +373 -0
- data/public/_components/@socketry/syntax/examples/html.html +316 -0
- data/public/_components/@socketry/syntax/examples/index.html +97 -0
- data/public/_components/@socketry/syntax/examples/io.html +552 -0
- data/public/_components/@socketry/syntax/examples/java.html +786 -0
- data/public/_components/@socketry/syntax/examples/javascript.html +199 -0
- data/public/_components/@socketry/syntax/examples/json.html +150 -0
- data/public/_components/@socketry/syntax/examples/lisp.html +476 -0
- data/public/_components/@socketry/syntax/examples/lua.html +737 -0
- data/public/_components/@socketry/syntax/examples/markdown.html +121 -0
- data/public/_components/@socketry/syntax/examples/mixed.html +306 -0
- data/public/_components/@socketry/syntax/examples/nginx.html +554 -0
- data/public/_components/@socketry/syntax/examples/ocaml.html +596 -0
- data/public/_components/@socketry/syntax/examples/pascal.html +762 -0
- data/public/_components/@socketry/syntax/examples/perl5.html +488 -0
- data/public/_components/@socketry/syntax/examples/php-script.html +142 -0
- data/public/_components/@socketry/syntax/examples/php.html +95 -0
- data/public/_components/@socketry/syntax/examples/plain.html +222 -0
- data/public/_components/@socketry/syntax/examples/protobuf.html +405 -0
- data/public/_components/@socketry/syntax/examples/python.html +82 -0
- data/public/_components/@socketry/syntax/examples/readme.md +79 -0
- data/public/_components/@socketry/syntax/examples/ruby.html +58 -0
- data/public/_components/@socketry/syntax/examples/scala.html +41 -0
- data/public/_components/@socketry/syntax/examples/smalltalk.html +436 -0
- data/public/_components/@socketry/syntax/examples/sql.html +373 -0
- data/public/_components/@socketry/syntax/examples/super-collider.html +55 -0
- data/public/_components/@socketry/syntax/examples/swift.html +176 -0
- data/public/_components/@socketry/syntax/examples/wrap-demo.html +103 -0
- data/public/_components/@socketry/syntax/examples/xml.html +112 -0
- data/public/_components/@socketry/syntax/examples/xrb.html +37 -0
- data/public/_components/@socketry/syntax/examples/yaml.html +72 -0
- data/public/_components/@socketry/syntax/license.md +21 -0
- data/public/_components/@socketry/syntax/package-lock.json +834 -0
- data/public/_components/@socketry/syntax/package.json +43 -0
- data/public/_components/@socketry/syntax/readme.md +162 -0
- data/public/_components/@socketry/syntax/test/Syntax/CodeElement.js +306 -0
- data/public/_components/@socketry/syntax/test/Syntax/ErrorHandling.js +85 -0
- data/public/_components/@socketry/syntax/test/Syntax/Language/apache.js +153 -0
- data/public/_components/@socketry/syntax/test/Syntax/Language/applescript.js +198 -0
- data/public/_components/@socketry/syntax/test/Syntax/Language/assembly.js +209 -0
- data/public/_components/@socketry/syntax/test/Syntax/Language/bash-script.js +225 -0
- data/public/_components/@socketry/syntax/test/Syntax/Language/bash.js +162 -0
- data/public/_components/@socketry/syntax/test/Syntax/Language/basic.js +265 -0
- data/public/_components/@socketry/syntax/test/Syntax/Language/clang.js +390 -0
- data/public/_components/@socketry/syntax/test/Syntax/Language/csharp.js +436 -0
- data/public/_components/@socketry/syntax/test/Syntax/Language/css.js +431 -0
- data/public/_components/@socketry/syntax/test/Syntax/Language/diff.js +206 -0
- data/public/_components/@socketry/syntax/test/Syntax/Language/go.js +386 -0
- data/public/_components/@socketry/syntax/test/Syntax/Language/haskell.js +454 -0
- data/public/_components/@socketry/syntax/test/Syntax/Language/html.js +111 -0
- data/public/_components/@socketry/syntax/test/Syntax/Language/io.js +229 -0
- data/public/_components/@socketry/syntax/test/Syntax/Language/java.js +362 -0
- data/public/_components/@socketry/syntax/test/Syntax/Language/javascript.js +101 -0
- data/public/_components/@socketry/syntax/test/Syntax/Language/json.js +101 -0
- data/public/_components/@socketry/syntax/test/Syntax/Language/lisp.js +224 -0
- data/public/_components/@socketry/syntax/test/Syntax/Language/lua.js +307 -0
- data/public/_components/@socketry/syntax/test/Syntax/Language/markdown.js +163 -0
- data/public/_components/@socketry/syntax/test/Syntax/Language/nginx.js +267 -0
- data/public/_components/@socketry/syntax/test/Syntax/Language/ocaml.js +299 -0
- data/public/_components/@socketry/syntax/test/Syntax/Language/pascal.js +311 -0
- data/public/_components/@socketry/syntax/test/Syntax/Language/perl5.js +333 -0
- data/public/_components/@socketry/syntax/test/Syntax/Language/php-script.js +197 -0
- data/public/_components/@socketry/syntax/test/Syntax/Language/php.js +92 -0
- data/public/_components/@socketry/syntax/test/Syntax/Language/plain.js +327 -0
- data/public/_components/@socketry/syntax/test/Syntax/Language/protobuf.js +294 -0
- data/public/_components/@socketry/syntax/test/Syntax/Language/python.js +213 -0
- data/public/_components/@socketry/syntax/test/Syntax/Language/ruby.js +70 -0
- data/public/_components/@socketry/syntax/test/Syntax/Language/scala.js +75 -0
- data/public/_components/@socketry/syntax/test/Syntax/Language/smalltalk.js +223 -0
- data/public/_components/@socketry/syntax/test/Syntax/Language/sql.js +281 -0
- data/public/_components/@socketry/syntax/test/Syntax/Language/super-collider.js +66 -0
- data/public/_components/@socketry/syntax/test/Syntax/Language/swift.js +71 -0
- data/public/_components/@socketry/syntax/test/Syntax/Language/xml.js +170 -0
- data/public/_components/@socketry/syntax/test/Syntax/Language/xrb.js +57 -0
- data/public/_components/@socketry/syntax/test/Syntax/Language/yaml.js +123 -0
- data/public/_components/@socketry/syntax/test/Syntax/Language.js +62 -0
- data/public/_components/@socketry/syntax/test/Syntax/Match.js +40 -0
- data/public/_components/@socketry/syntax/test/Syntax/Rule.js +251 -0
- data/public/_components/@socketry/syntax/test/Syntax.js +38 -0
- data/public/_components/@socketry/syntax/test/helpers/ast-matcher.js +90 -0
- data/public/_components/@socketry/syntax/themes/base/apache.css +1 -0
- data/public/_components/@socketry/syntax/themes/base/applescript.css +1 -0
- data/public/_components/@socketry/syntax/themes/base/assembly.css +1 -0
- data/public/_components/@socketry/syntax/themes/base/bash.css +1 -0
- data/public/_components/@socketry/syntax/themes/base/basic.css +1 -0
- data/public/_components/@socketry/syntax/themes/base/c.css +1 -0
- data/public/_components/@socketry/syntax/themes/base/clang.css +0 -0
- data/public/_components/@socketry/syntax/themes/base/csharp.css +1 -0
- data/public/_components/@socketry/syntax/themes/base/css.css +22 -0
- data/public/_components/@socketry/syntax/themes/base/diff.css +48 -0
- data/public/_components/@socketry/syntax/themes/base/go.css +1 -0
- data/public/_components/@socketry/syntax/themes/base/haskell.css +1 -0
- data/public/_components/@socketry/syntax/themes/base/html.css +1 -0
- data/public/_components/@socketry/syntax/themes/base/io.css +1 -0
- data/public/_components/@socketry/syntax/themes/base/java.css +1 -0
- data/public/_components/@socketry/syntax/themes/base/javascript.css +1 -0
- data/public/_components/@socketry/syntax/themes/base/json.css +41 -0
- data/public/_components/@socketry/syntax/themes/base/lisp.css +1 -0
- data/public/_components/@socketry/syntax/themes/base/lua.css +1 -0
- data/public/_components/@socketry/syntax/themes/base/markdown.css +16 -0
- data/public/_components/@socketry/syntax/themes/base/nginx.css +1 -0
- data/public/_components/@socketry/syntax/themes/base/ocaml.css +1 -0
- data/public/_components/@socketry/syntax/themes/base/pascal.css +1 -0
- data/public/_components/@socketry/syntax/themes/base/perl5.css +1 -0
- data/public/_components/@socketry/syntax/themes/base/php-script.css +1 -0
- data/public/_components/@socketry/syntax/themes/base/php.css +1 -0
- data/public/_components/@socketry/syntax/themes/base/plain.css +1 -0
- data/public/_components/@socketry/syntax/themes/base/protobuf.css +1 -0
- data/public/_components/@socketry/syntax/themes/base/python.css +1 -0
- data/public/_components/@socketry/syntax/themes/base/ruby.css +23 -0
- data/public/_components/@socketry/syntax/themes/base/scala.css +3 -0
- data/public/_components/@socketry/syntax/themes/base/smalltalk.css +1 -0
- data/public/_components/@socketry/syntax/themes/base/sql.css +1 -0
- data/public/_components/@socketry/syntax/themes/base/super-collider.css +33 -0
- data/public/_components/@socketry/syntax/themes/base/swift.css +1 -0
- data/public/_components/@socketry/syntax/themes/base/syntax.css +63 -0
- data/public/_components/@socketry/syntax/themes/base/xml.css +1 -0
- data/public/_components/@socketry/syntax/themes/base/xrb.css +29 -0
- data/public/_components/@socketry/syntax/themes/base/yaml.css +1 -0
- data/public/_components/@socketry/syntax/themes/theming.md +233 -0
- data/public/_components/@socketry/syntax/update-examples.js +135 -0
- data/public/_static/index.css +593 -0
- data/public/application.js +147 -0
- data/readme.md +69 -0
- data/releases.md +3 -0
- data/templates/code.xrb +12 -0
- data/templates/default.xrb +5 -0
- data/templates/image.xrb +8 -0
- data/templates/section.xrb +5 -0
- data/templates/title.xrb +8 -0
- data/templates/translation.xrb +8 -0
- data/templates/two_column.xrb +8 -0
- 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><syntax-code></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>
|