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,79 @@
|
|
|
1
|
+
# Examples
|
|
2
|
+
|
|
3
|
+
This directory contains example pages demonstrating syntax highlighting for various languages.
|
|
4
|
+
|
|
5
|
+
## Structure
|
|
6
|
+
|
|
7
|
+
All example pages follow a consistent structure:
|
|
8
|
+
|
|
9
|
+
### HTML Template
|
|
10
|
+
|
|
11
|
+
```html
|
|
12
|
+
<!DOCTYPE html>
|
|
13
|
+
<html lang="en">
|
|
14
|
+
<head>
|
|
15
|
+
<meta charset="UTF-8">
|
|
16
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
17
|
+
<title>[Language] Examples - @socketry/syntax</title>
|
|
18
|
+
<link rel="stylesheet" href="examples.css">
|
|
19
|
+
</head>
|
|
20
|
+
<body>
|
|
21
|
+
<header>
|
|
22
|
+
<h1>[Language] Examples</h1>
|
|
23
|
+
<p class="subtitle">[Brief description]</p>
|
|
24
|
+
</header>
|
|
25
|
+
|
|
26
|
+
<nav>
|
|
27
|
+
<a href="index.html">Back to Examples</a>
|
|
28
|
+
<a href="[related].html">[Related Language]</a>
|
|
29
|
+
</nav>
|
|
30
|
+
|
|
31
|
+
<div class="example">
|
|
32
|
+
<h2>[Feature Name]</h2>
|
|
33
|
+
<p class="description">[Description of what this demonstrates]</p>
|
|
34
|
+
|
|
35
|
+
<syntax-code language="[language-id]">
|
|
36
|
+
[code example]
|
|
37
|
+
</syntax-code>
|
|
38
|
+
</div>
|
|
39
|
+
|
|
40
|
+
<script type="module">
|
|
41
|
+
import Syntax from '../Syntax.js';
|
|
42
|
+
import register[Language] from '../Syntax/Language/[language].js';
|
|
43
|
+
|
|
44
|
+
register[Language](Syntax.default);
|
|
45
|
+
|
|
46
|
+
await Syntax.highlight({
|
|
47
|
+
autoUpgrade: true,
|
|
48
|
+
syntax: Syntax.default
|
|
49
|
+
});
|
|
50
|
+
</script>
|
|
51
|
+
</body>
|
|
52
|
+
</html>
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
## Shared Styles
|
|
56
|
+
|
|
57
|
+
All examples use `examples.css` which provides:
|
|
58
|
+
|
|
59
|
+
- Consistent header and navigation styling
|
|
60
|
+
- Responsive layout
|
|
61
|
+
- Dark mode support
|
|
62
|
+
- Semantic HTML structure
|
|
63
|
+
- Example containers with descriptions
|
|
64
|
+
|
|
65
|
+
## Adding a New Example
|
|
66
|
+
|
|
67
|
+
1. Copy `_template.html` to `[language].html`
|
|
68
|
+
2. Replace placeholders with your language details
|
|
69
|
+
3. Add code examples in `<div class="example">` blocks
|
|
70
|
+
4. Update the navigation links to related languages
|
|
71
|
+
5. Add a link to your example in `index.html`
|
|
72
|
+
|
|
73
|
+
## Guidelines
|
|
74
|
+
|
|
75
|
+
- **Header**: Use `<header>` with `<h1>` and subtitle
|
|
76
|
+
- **Navigation**: Always include "Back to Examples" as first link
|
|
77
|
+
- **Examples**: Wrap each example in `<div class="example">` with an `<h2>` heading and description
|
|
78
|
+
- **Code**: Use `<syntax-code language="...">` elements
|
|
79
|
+
- **Initialization**: Import and register the language, then call `Syntax.highlight()`
|
|
@@ -0,0 +1,58 @@
|
|
|
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>Ruby Examples - @socketry/syntax</title>
|
|
7
|
+
<link rel="stylesheet" href="examples.css">
|
|
8
|
+
</head>
|
|
9
|
+
<body>
|
|
10
|
+
<header>
|
|
11
|
+
<h1>Ruby Examples</h1>
|
|
12
|
+
<p class="subtitle">Ruby syntax with classes, symbols, and metaprogramming</p>
|
|
13
|
+
</header>
|
|
14
|
+
|
|
15
|
+
<nav>
|
|
16
|
+
<a href="index.html">Back to Examples</a>
|
|
17
|
+
<a href="python.html">Python</a>
|
|
18
|
+
<a href="bash.html">Bash</a>
|
|
19
|
+
</nav>
|
|
20
|
+
|
|
21
|
+
<div class="example">
|
|
22
|
+
<h2>Ruby Class Example</h2>
|
|
23
|
+
<p class="description">Object-oriented programming with Ruby:</p>
|
|
24
|
+
|
|
25
|
+
<syntax-code language="ruby">
|
|
26
|
+
# Simple class
|
|
27
|
+
class Greeter
|
|
28
|
+
def initialize(name)
|
|
29
|
+
@name = name
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def greet
|
|
33
|
+
puts "Hello, #{@name}!"
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
# Usage
|
|
38
|
+
user = Greeter.new('World')
|
|
39
|
+
user.greet
|
|
40
|
+
|
|
41
|
+
# Symbols and regex
|
|
42
|
+
status = :ok
|
|
43
|
+
pattern = /foo.+bar/i
|
|
44
|
+
|
|
45
|
+
# Percent literals
|
|
46
|
+
words = %w{alpha beta gamma}
|
|
47
|
+
|
|
48
|
+
# Command
|
|
49
|
+
output = `uname -a`
|
|
50
|
+
</syntax-code>
|
|
51
|
+
</div>
|
|
52
|
+
|
|
53
|
+
<script type="module">
|
|
54
|
+
import Syntax from '../Syntax.js';
|
|
55
|
+
await Syntax.highlight({ autoUpgrade: true });
|
|
56
|
+
</script>
|
|
57
|
+
</body>
|
|
58
|
+
</html>
|
|
@@ -0,0 +1,41 @@
|
|
|
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>Scala Examples - @socketry/syntax</title>
|
|
7
|
+
<link rel="stylesheet" href="examples.css">
|
|
8
|
+
</head>
|
|
9
|
+
<body>
|
|
10
|
+
<header>
|
|
11
|
+
<h1>Scala Examples</h1>
|
|
12
|
+
<p class="subtitle">Scala syntax highlighting</p>
|
|
13
|
+
</header>
|
|
14
|
+
|
|
15
|
+
<nav>
|
|
16
|
+
<a href="index.html">Back to Examples</a>
|
|
17
|
+
</nav>
|
|
18
|
+
|
|
19
|
+
<h1>Scala Example</h1>
|
|
20
|
+
<p>Minimal sample showing keywords, strings, functions, types, comments, and XML literals.</p>
|
|
21
|
+
|
|
22
|
+
<syntax-code language="scala">
|
|
23
|
+
object App extends App {
|
|
24
|
+
// line comment
|
|
25
|
+
/* block comment */
|
|
26
|
+
|
|
27
|
+
def greet(name: String): String = {
|
|
28
|
+
val msg = "Hello, " + name
|
|
29
|
+
msg
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
val xml = <note>Hi {greet("World")}!</note>
|
|
33
|
+
|
|
34
|
+
val multi = """This is a
|
|
35
|
+
multi-line string"""
|
|
36
|
+
|
|
37
|
+
val value: MyType = MyType(42)
|
|
38
|
+
}
|
|
39
|
+
</syntax-code>
|
|
40
|
+
</body>
|
|
41
|
+
</html>
|
|
@@ -0,0 +1,436 @@
|
|
|
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>Smalltalk Examples - @socketry/syntax</title>
|
|
7
|
+
<link rel="stylesheet" href="examples.css">
|
|
8
|
+
</head>
|
|
9
|
+
<body>
|
|
10
|
+
<header>
|
|
11
|
+
<h1>Smalltalk Examples</h1>
|
|
12
|
+
<p class="subtitle">Smalltalk syntax highlighting</p>
|
|
13
|
+
</header>
|
|
14
|
+
|
|
15
|
+
<nav>
|
|
16
|
+
<a href="index.html">Back to Examples</a>
|
|
17
|
+
</nav>
|
|
18
|
+
|
|
19
|
+
<h1>Smalltalk Code Example</h1>
|
|
20
|
+
|
|
21
|
+
<div class="example">
|
|
22
|
+
<h2>Basic Syntax</h2>
|
|
23
|
+
<p class="description">Example:</p>
|
|
24
|
+
|
|
25
|
+
<pre><code class="language-smalltalk">"This is a comment"
|
|
26
|
+
|
|
27
|
+
"Assignment"
|
|
28
|
+
x := 42.
|
|
29
|
+
name := 'Alice'.
|
|
30
|
+
|
|
31
|
+
"Pseudo-variables"
|
|
32
|
+
self initialize.
|
|
33
|
+
super doSomething.
|
|
34
|
+
result := true.
|
|
35
|
+
value := false.
|
|
36
|
+
object := nil.
|
|
37
|
+
</code></pre>
|
|
38
|
+
|
|
39
|
+
<div class="example">
|
|
40
|
+
<h2>Messages</h2>
|
|
41
|
+
<p class="description">Example:</p>
|
|
42
|
+
|
|
43
|
+
<pre><code class="language-smalltalk">"Unary messages (no arguments)"
|
|
44
|
+
object initialize.
|
|
45
|
+
collection size.
|
|
46
|
+
number squared.
|
|
47
|
+
|
|
48
|
+
"Binary messages (one argument, operator-like)"
|
|
49
|
+
3 + 4.
|
|
50
|
+
10 - 5.
|
|
51
|
+
6 * 7.
|
|
52
|
+
20 / 4.
|
|
53
|
+
x < y.
|
|
54
|
+
a = b.
|
|
55
|
+
|
|
56
|
+
"Keyword messages (one or more arguments with colons)"
|
|
57
|
+
array at: 1.
|
|
58
|
+
dictionary at: key put: value.
|
|
59
|
+
collection do: [:each | each printString].
|
|
60
|
+
</code></pre>
|
|
61
|
+
|
|
62
|
+
<div class="example">
|
|
63
|
+
<h2>Blocks (Closures)</h2>
|
|
64
|
+
<p class="description">Example:</p>
|
|
65
|
+
|
|
66
|
+
<pre><code class="language-smalltalk">"Simple block"
|
|
67
|
+
[3 + 4] value.
|
|
68
|
+
|
|
69
|
+
"Block with arguments"
|
|
70
|
+
[:x | x * 2] value: 5.
|
|
71
|
+
|
|
72
|
+
"Block with multiple arguments"
|
|
73
|
+
[:x :y | x + y] value: 3 value: 4.
|
|
74
|
+
|
|
75
|
+
"Blocks as control structures"
|
|
76
|
+
x > 0 ifTrue: [Transcript show: 'positive'].
|
|
77
|
+
x > 0 ifFalse: [Transcript show: 'not positive'].
|
|
78
|
+
x > 0
|
|
79
|
+
ifTrue: [Transcript show: 'positive']
|
|
80
|
+
ifFalse: [Transcript show: 'not positive'].
|
|
81
|
+
</code></pre>
|
|
82
|
+
|
|
83
|
+
<div class="example">
|
|
84
|
+
<h2>Temporary Variables</h2>
|
|
85
|
+
<p class="description">Example:</p>
|
|
86
|
+
|
|
87
|
+
<pre><code class="language-smalltalk">"Single temporary variable"
|
|
88
|
+
| temp |
|
|
89
|
+
temp := 42.
|
|
90
|
+
|
|
91
|
+
"Multiple temporary variables"
|
|
92
|
+
| x y result |
|
|
93
|
+
x := 10.
|
|
94
|
+
y := 20.
|
|
95
|
+
result := x + y.
|
|
96
|
+
</code></pre>
|
|
97
|
+
|
|
98
|
+
<div class="example">
|
|
99
|
+
<h2>Method Definition</h2>
|
|
100
|
+
<p class="description">Example:</p>
|
|
101
|
+
|
|
102
|
+
<pre><code class="language-smalltalk">"Unary method"
|
|
103
|
+
initialize
|
|
104
|
+
super initialize.
|
|
105
|
+
collection := OrderedCollection new.
|
|
106
|
+
|
|
107
|
+
"Binary method"
|
|
108
|
+
+ aNumber
|
|
109
|
+
"Add two numbers"
|
|
110
|
+
^ value + aNumber value.
|
|
111
|
+
|
|
112
|
+
"Keyword method (one argument)"
|
|
113
|
+
at: index
|
|
114
|
+
"Return the element at the given index"
|
|
115
|
+
^ collection at: index.
|
|
116
|
+
|
|
117
|
+
"Keyword method (multiple arguments)"
|
|
118
|
+
at: index put: anObject
|
|
119
|
+
"Set the element at the given index"
|
|
120
|
+
collection at: index put: anObject.
|
|
121
|
+
^ anObject.
|
|
122
|
+
|
|
123
|
+
"Method with temporary variables"
|
|
124
|
+
factorial: n
|
|
125
|
+
| result |
|
|
126
|
+
result := 1.
|
|
127
|
+
2 to: n do: [:i | result := result * i].
|
|
128
|
+
^ result.
|
|
129
|
+
</code></pre>
|
|
130
|
+
|
|
131
|
+
<div class="example">
|
|
132
|
+
<h2>Collections</h2>
|
|
133
|
+
<p class="description">Example:</p>
|
|
134
|
+
|
|
135
|
+
<pre><code class="language-smalltalk">"Array literals"
|
|
136
|
+
#(1 2 3 4 5).
|
|
137
|
+
#('one' 'two' 'three').
|
|
138
|
+
|
|
139
|
+
"Creating arrays dynamically"
|
|
140
|
+
Array new: 10.
|
|
141
|
+
Array with: 1 with: 2 with: 3.
|
|
142
|
+
|
|
143
|
+
"OrderedCollection"
|
|
144
|
+
| collection |
|
|
145
|
+
collection := OrderedCollection new.
|
|
146
|
+
collection add: 'first'.
|
|
147
|
+
collection add: 'second'.
|
|
148
|
+
collection add: 'third'.
|
|
149
|
+
|
|
150
|
+
"Dictionary"
|
|
151
|
+
| dict |
|
|
152
|
+
dict := Dictionary new.
|
|
153
|
+
dict at: 'name' put: 'Alice'.
|
|
154
|
+
dict at: 'age' put: 30.
|
|
155
|
+
dict at: 'name'.
|
|
156
|
+
|
|
157
|
+
"Set"
|
|
158
|
+
| set |
|
|
159
|
+
set := Set new.
|
|
160
|
+
set add: 1.
|
|
161
|
+
set add: 2.
|
|
162
|
+
set add: 1. "Duplicate ignored"
|
|
163
|
+
</code></pre>
|
|
164
|
+
|
|
165
|
+
<div class="example">
|
|
166
|
+
<h2>Iteration</h2>
|
|
167
|
+
<p class="description">Example:</p>
|
|
168
|
+
|
|
169
|
+
<pre><code class="language-smalltalk">"do: - iterate over elements"
|
|
170
|
+
#(1 2 3 4 5) do: [:each | Transcript show: each printString; cr].
|
|
171
|
+
|
|
172
|
+
"collect: - transform elements"
|
|
173
|
+
#(1 2 3 4 5) collect: [:each | each * 2].
|
|
174
|
+
|
|
175
|
+
"select: - filter elements"
|
|
176
|
+
#(1 2 3 4 5 6) select: [:each | each even].
|
|
177
|
+
|
|
178
|
+
"reject: - inverse filter"
|
|
179
|
+
#(1 2 3 4 5 6) reject: [:each | each odd].
|
|
180
|
+
|
|
181
|
+
"detect: - find first matching element"
|
|
182
|
+
#(1 2 3 4 5) detect: [:each | each > 3].
|
|
183
|
+
|
|
184
|
+
"inject:into: - reduce/fold"
|
|
185
|
+
#(1 2 3 4 5) inject: 0 into: [:sum :each | sum + each].
|
|
186
|
+
</code></pre>
|
|
187
|
+
|
|
188
|
+
<div class="example">
|
|
189
|
+
<h2>Control Structures</h2>
|
|
190
|
+
<p class="description">Example:</p>
|
|
191
|
+
|
|
192
|
+
<pre><code class="language-smalltalk">"Conditionals"
|
|
193
|
+
x > 0 ifTrue: [Transcript show: 'positive'].
|
|
194
|
+
x = 0 ifTrue: [Transcript show: 'zero'].
|
|
195
|
+
x < 0 ifTrue: [Transcript show: 'negative'].
|
|
196
|
+
|
|
197
|
+
x > 0
|
|
198
|
+
ifTrue: [Transcript show: 'positive']
|
|
199
|
+
ifFalse: [Transcript show: 'not positive'].
|
|
200
|
+
|
|
201
|
+
"Loops - timesRepeat:"
|
|
202
|
+
10 timesRepeat: [Transcript show: 'Hello'; cr].
|
|
203
|
+
|
|
204
|
+
"Loops - to:do:"
|
|
205
|
+
1 to: 10 do: [:i | Transcript show: i printString; cr].
|
|
206
|
+
|
|
207
|
+
"Loops - to:by:do:"
|
|
208
|
+
0 to: 100 by: 10 do: [:i | Transcript show: i printString; cr].
|
|
209
|
+
|
|
210
|
+
"Loops - whileTrue:"
|
|
211
|
+
| i |
|
|
212
|
+
i := 1.
|
|
213
|
+
[i <= 10] whileTrue: [
|
|
214
|
+
Transcript show: i printString; cr.
|
|
215
|
+
i := i + 1
|
|
216
|
+
].
|
|
217
|
+
|
|
218
|
+
"Loops - whileFalse:"
|
|
219
|
+
[i > 0] whileFalse: [
|
|
220
|
+
Transcript show: i printString; cr.
|
|
221
|
+
i := i + 1
|
|
222
|
+
].
|
|
223
|
+
</code></pre>
|
|
224
|
+
|
|
225
|
+
<div class="example">
|
|
226
|
+
<h2>Class Definition</h2>
|
|
227
|
+
<p class="description">Example:</p>
|
|
228
|
+
|
|
229
|
+
<pre><code class="language-smalltalk">"Defining a new class"
|
|
230
|
+
Object subclass: #Person
|
|
231
|
+
instanceVariableNames: 'name age'
|
|
232
|
+
classVariableNames: ''
|
|
233
|
+
package: 'MyApp-Model'.
|
|
234
|
+
|
|
235
|
+
"Instance methods"
|
|
236
|
+
Person>>name
|
|
237
|
+
^ name.
|
|
238
|
+
|
|
239
|
+
Person>>name: aString
|
|
240
|
+
name := aString.
|
|
241
|
+
|
|
242
|
+
Person>>age
|
|
243
|
+
^ age.
|
|
244
|
+
|
|
245
|
+
Person>>age: aNumber
|
|
246
|
+
age := aNumber.
|
|
247
|
+
|
|
248
|
+
Person>>initialize
|
|
249
|
+
super initialize.
|
|
250
|
+
name := ''.
|
|
251
|
+
age := 0.
|
|
252
|
+
|
|
253
|
+
Person>>printOn: aStream
|
|
254
|
+
super printOn: aStream.
|
|
255
|
+
aStream
|
|
256
|
+
nextPutAll: ' (';
|
|
257
|
+
nextPutAll: name;
|
|
258
|
+
nextPutAll: ', age ';
|
|
259
|
+
print: age;
|
|
260
|
+
nextPut: $).
|
|
261
|
+
|
|
262
|
+
"Class methods"
|
|
263
|
+
Person class>>named: aString aged: aNumber
|
|
264
|
+
^ self new
|
|
265
|
+
name: aString;
|
|
266
|
+
age: aNumber;
|
|
267
|
+
yourself.
|
|
268
|
+
</code></pre>
|
|
269
|
+
|
|
270
|
+
<div class="example">
|
|
271
|
+
<h2>Cascades</h2>
|
|
272
|
+
<p class="description">Example:</p>
|
|
273
|
+
|
|
274
|
+
<pre><code class="language-smalltalk">"Multiple messages to same receiver"
|
|
275
|
+
Transcript
|
|
276
|
+
show: 'Hello';
|
|
277
|
+
space;
|
|
278
|
+
show: 'World';
|
|
279
|
+
cr.
|
|
280
|
+
|
|
281
|
+
"Creating and initializing objects"
|
|
282
|
+
person := Person new
|
|
283
|
+
name: 'Alice';
|
|
284
|
+
age: 30;
|
|
285
|
+
yourself.
|
|
286
|
+
|
|
287
|
+
"Building complex structures"
|
|
288
|
+
stream := WriteStream on: String new.
|
|
289
|
+
stream
|
|
290
|
+
nextPutAll: 'Name: ';
|
|
291
|
+
nextPutAll: person name;
|
|
292
|
+
nextPutAll: ', Age: ';
|
|
293
|
+
print: person age.
|
|
294
|
+
</code></pre>
|
|
295
|
+
|
|
296
|
+
<div class="example">
|
|
297
|
+
<h2>Exception Handling</h2>
|
|
298
|
+
<p class="description">Example:</p>
|
|
299
|
+
|
|
300
|
+
<pre><code class="language-smalltalk">"Basic exception handling"
|
|
301
|
+
[
|
|
302
|
+
"Code that might fail"
|
|
303
|
+
collection at: index
|
|
304
|
+
] on: Error do: [:ex |
|
|
305
|
+
Transcript show: 'Error: ', ex messageText; cr
|
|
306
|
+
].
|
|
307
|
+
|
|
308
|
+
"Ensure - always execute cleanup"
|
|
309
|
+
[
|
|
310
|
+
file := FileStream fileNamed: 'data.txt'.
|
|
311
|
+
file contents
|
|
312
|
+
] ensure: [
|
|
313
|
+
file ifNotNil: [file close]
|
|
314
|
+
].
|
|
315
|
+
|
|
316
|
+
"ifCurtailed - execute if block exits abnormally"
|
|
317
|
+
[
|
|
318
|
+
"Some operation"
|
|
319
|
+
] ifCurtailed: [
|
|
320
|
+
"Cleanup code"
|
|
321
|
+
].
|
|
322
|
+
</code></pre>
|
|
323
|
+
|
|
324
|
+
<div class="example">
|
|
325
|
+
<h2>Streams</h2>
|
|
326
|
+
<p class="description">Example:</p>
|
|
327
|
+
|
|
328
|
+
<pre><code class="language-smalltalk">"Reading from a stream"
|
|
329
|
+
| stream |
|
|
330
|
+
stream := ReadStream on: 'Hello World'.
|
|
331
|
+
stream next. "Returns $H"
|
|
332
|
+
stream next: 5. "Returns 'Hello'"
|
|
333
|
+
stream upToEnd. "Returns ' World'"
|
|
334
|
+
|
|
335
|
+
"Writing to a stream"
|
|
336
|
+
| stream |
|
|
337
|
+
stream := WriteStream on: String new.
|
|
338
|
+
stream nextPut: $H.
|
|
339
|
+
stream nextPutAll: 'ello'.
|
|
340
|
+
stream space.
|
|
341
|
+
stream nextPutAll: 'World'.
|
|
342
|
+
stream contents. "Returns 'Hello World'"
|
|
343
|
+
|
|
344
|
+
"Building strings"
|
|
345
|
+
String streamContents: [:stream |
|
|
346
|
+
stream
|
|
347
|
+
nextPutAll: 'The answer is ';
|
|
348
|
+
print: 42
|
|
349
|
+
].
|
|
350
|
+
</code></pre>
|
|
351
|
+
|
|
352
|
+
<div class="example">
|
|
353
|
+
<h2>Metaprogramming</h2>
|
|
354
|
+
<p class="description">Example:</p>
|
|
355
|
+
|
|
356
|
+
<pre><code class="language-smalltalk">"Reflection - inspecting objects"
|
|
357
|
+
object class.
|
|
358
|
+
object class name.
|
|
359
|
+
object class superclass.
|
|
360
|
+
object class allInstVarNames.
|
|
361
|
+
object class allSelectors.
|
|
362
|
+
|
|
363
|
+
"Dynamic method invocation"
|
|
364
|
+
object perform: #initialize.
|
|
365
|
+
object perform: #at: with: 1.
|
|
366
|
+
object perform: #at:put: with: 1 with: 'value'.
|
|
367
|
+
|
|
368
|
+
"Testing capabilities"
|
|
369
|
+
object respondsTo: #initialize.
|
|
370
|
+
object class includesSelector: #initialize.
|
|
371
|
+
|
|
372
|
+
"Creating classes dynamically"
|
|
373
|
+
Object subclass: #DynamicClass
|
|
374
|
+
instanceVariableNames: 'slot1 slot2'
|
|
375
|
+
classVariableNames: ''
|
|
376
|
+
package: 'MyPackage'.
|
|
377
|
+
|
|
378
|
+
"Compiling methods at runtime"
|
|
379
|
+
DynamicClass compile: 'slot1 ^ slot1'.
|
|
380
|
+
DynamicClass compile: 'slot1: anObject slot1 := anObject'.
|
|
381
|
+
</code></pre>
|
|
382
|
+
|
|
383
|
+
<div class="example">
|
|
384
|
+
<h2>Advanced Examples</h2>
|
|
385
|
+
<p class="description">Example:</p>
|
|
386
|
+
|
|
387
|
+
<pre><code class="language-smalltalk">"Fibonacci sequence"
|
|
388
|
+
fibonacci: n
|
|
389
|
+
n <= 1 ifTrue: [^ n].
|
|
390
|
+
^ (self fibonacci: n - 1) + (self fibonacci: n - 2).
|
|
391
|
+
|
|
392
|
+
"Quicksort"
|
|
393
|
+
quicksort: aCollection
|
|
394
|
+
| pivot less greater |
|
|
395
|
+
aCollection size <= 1 ifTrue: [^ aCollection].
|
|
396
|
+
pivot := aCollection first.
|
|
397
|
+
less := aCollection allButFirst select: [:each | each <= pivot].
|
|
398
|
+
greater := aCollection allButFirst select: [:each | each > pivot].
|
|
399
|
+
^ (self quicksort: less), (Array with: pivot), (self quicksort: greater).
|
|
400
|
+
|
|
401
|
+
"Binary search"
|
|
402
|
+
binarySearch: anArray for: aValue
|
|
403
|
+
| low high mid |
|
|
404
|
+
low := 1.
|
|
405
|
+
high := anArray size.
|
|
406
|
+
[low <= high] whileTrue: [
|
|
407
|
+
mid := (low + high) // 2.
|
|
408
|
+
(anArray at: mid) = aValue ifTrue: [^ mid].
|
|
409
|
+
(anArray at: mid) < aValue
|
|
410
|
+
ifTrue: [low := mid + 1]
|
|
411
|
+
ifFalse: [high := mid - 1]
|
|
412
|
+
].
|
|
413
|
+
^ nil.
|
|
414
|
+
|
|
415
|
+
"Observer pattern"
|
|
416
|
+
Object subclass: #Subject
|
|
417
|
+
instanceVariableNames: 'observers'
|
|
418
|
+
classVariableNames: ''
|
|
419
|
+
package: 'Patterns'.
|
|
420
|
+
|
|
421
|
+
Subject>>initialize
|
|
422
|
+
super initialize.
|
|
423
|
+
observers := OrderedCollection new.
|
|
424
|
+
|
|
425
|
+
Subject>>addObserver: anObserver
|
|
426
|
+
observers add: anObserver.
|
|
427
|
+
|
|
428
|
+
Subject>>removeObserver: anObserver
|
|
429
|
+
observers remove: anObserver ifAbsent: [].
|
|
430
|
+
|
|
431
|
+
Subject>>notifyObservers
|
|
432
|
+
observers do: [:each | each update: self].
|
|
433
|
+
</code></pre>
|
|
434
|
+
|
|
435
|
+
</body>
|
|
436
|
+
</html>
|