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,373 @@
|
|
|
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>Haskell Examples - @socketry/syntax</title>
|
|
7
|
+
<link rel="stylesheet" href="examples.css">
|
|
8
|
+
</head>
|
|
9
|
+
<body>
|
|
10
|
+
<header>
|
|
11
|
+
<h1>Haskell Examples</h1>
|
|
12
|
+
<p class="subtitle">Haskell syntax highlighting</p>
|
|
13
|
+
</header>
|
|
14
|
+
|
|
15
|
+
<nav>
|
|
16
|
+
<a href="index.html">Back to Examples</a>
|
|
17
|
+
</nav>
|
|
18
|
+
|
|
19
|
+
<h1>Haskell Syntax Highlighting</h1>
|
|
20
|
+
|
|
21
|
+
<div class="example">
|
|
22
|
+
<h2>Hello World</h2>
|
|
23
|
+
<p class="description">Example:</p>
|
|
24
|
+
|
|
25
|
+
<syntax-code language="haskell">
|
|
26
|
+
module Main where
|
|
27
|
+
|
|
28
|
+
main :: IO ()
|
|
29
|
+
main = putStrLn "Hello, World!"
|
|
30
|
+
</syntax-code>
|
|
31
|
+
|
|
32
|
+
<div class="example">
|
|
33
|
+
<h2>Functions and Pattern Matching</h2>
|
|
34
|
+
<p class="description">Example:</p>
|
|
35
|
+
|
|
36
|
+
<syntax-code language="haskell">
|
|
37
|
+
module Factorial where
|
|
38
|
+
|
|
39
|
+
-- Recursive factorial with pattern matching
|
|
40
|
+
factorial :: Integer -> Integer
|
|
41
|
+
factorial 0 = 1
|
|
42
|
+
factorial n = n * factorial (n - 1)
|
|
43
|
+
|
|
44
|
+
-- Using guards
|
|
45
|
+
absoluteValue :: Int -> Int
|
|
46
|
+
absoluteValue x
|
|
47
|
+
| x < 0 = -x
|
|
48
|
+
| otherwise = x
|
|
49
|
+
|
|
50
|
+
-- Case expression
|
|
51
|
+
describeNumber :: Int -> String
|
|
52
|
+
describeNumber n = case n of
|
|
53
|
+
0 -> "zero"
|
|
54
|
+
1 -> "one"
|
|
55
|
+
_ -> "many"
|
|
56
|
+
</syntax-code>
|
|
57
|
+
|
|
58
|
+
<div class="example">
|
|
59
|
+
<h2>Data Types and Type Classes</h2>
|
|
60
|
+
<p class="description">Example:</p>
|
|
61
|
+
|
|
62
|
+
<syntax-code language="haskell">
|
|
63
|
+
module Types where
|
|
64
|
+
|
|
65
|
+
-- Algebraic data types
|
|
66
|
+
data Maybe a = Just a | Nothing
|
|
67
|
+
deriving (Show, Eq)
|
|
68
|
+
|
|
69
|
+
data Either a b = Left a | Right b
|
|
70
|
+
deriving (Show, Eq)
|
|
71
|
+
|
|
72
|
+
-- Record syntax
|
|
73
|
+
data Person = Person
|
|
74
|
+
{ name :: String
|
|
75
|
+
, age :: Int
|
|
76
|
+
, email :: String
|
|
77
|
+
} deriving (Show, Eq)
|
|
78
|
+
|
|
79
|
+
-- Type synonym
|
|
80
|
+
type Name = String
|
|
81
|
+
type Age = Int
|
|
82
|
+
|
|
83
|
+
-- Newtype wrapper
|
|
84
|
+
newtype Email = Email String
|
|
85
|
+
deriving (Show, Eq)
|
|
86
|
+
|
|
87
|
+
-- Type class definition
|
|
88
|
+
class Describable a where
|
|
89
|
+
describe :: a -> String
|
|
90
|
+
|
|
91
|
+
-- Type class instance
|
|
92
|
+
instance Describable Person where
|
|
93
|
+
describe p = name p ++ " is " ++ show (age p) ++ " years old"
|
|
94
|
+
</syntax-code>
|
|
95
|
+
|
|
96
|
+
<div class="example">
|
|
97
|
+
<h2>Higher-Order Functions and Lambdas</h2>
|
|
98
|
+
<p class="description">Example:</p>
|
|
99
|
+
|
|
100
|
+
<syntax-code language="haskell">
|
|
101
|
+
module HigherOrder where
|
|
102
|
+
|
|
103
|
+
-- Map, filter, and fold
|
|
104
|
+
doubleList :: [Int] -> [Int]
|
|
105
|
+
doubleList xs = map (*2) xs
|
|
106
|
+
|
|
107
|
+
evenNumbers :: [Int] -> [Int]
|
|
108
|
+
evenNumbers xs = filter even xs
|
|
109
|
+
|
|
110
|
+
sumList :: [Int] -> Int
|
|
111
|
+
sumList xs = foldl (+) 0 xs
|
|
112
|
+
|
|
113
|
+
-- Lambda functions
|
|
114
|
+
addOne :: [Int] -> [Int]
|
|
115
|
+
addOne = map (\x -> x + 1)
|
|
116
|
+
|
|
117
|
+
-- Function composition
|
|
118
|
+
processData :: [Int] -> Int
|
|
119
|
+
processData = sum . filter even . map (*2)
|
|
120
|
+
|
|
121
|
+
-- Partial application
|
|
122
|
+
add :: Int -> Int -> Int
|
|
123
|
+
add x y = x + y
|
|
124
|
+
|
|
125
|
+
addFive :: Int -> Int
|
|
126
|
+
addFive = add 5
|
|
127
|
+
|
|
128
|
+
-- Using backticks for infix
|
|
129
|
+
divBy :: Int -> Int -> Int
|
|
130
|
+
divBy x y = x `div` y
|
|
131
|
+
</syntax-code>
|
|
132
|
+
|
|
133
|
+
<div class="example">
|
|
134
|
+
<h2>List Comprehensions</h2>
|
|
135
|
+
<p class="description">Example:</p>
|
|
136
|
+
|
|
137
|
+
<syntax-code language="haskell">
|
|
138
|
+
module Lists where
|
|
139
|
+
|
|
140
|
+
-- Basic list comprehension
|
|
141
|
+
squares :: [Int]
|
|
142
|
+
squares = [x^2 | x <- [1..10]]
|
|
143
|
+
|
|
144
|
+
-- With filters
|
|
145
|
+
evenSquares :: [Int]
|
|
146
|
+
evenSquares = [x^2 | x <- [1..10], even x]
|
|
147
|
+
|
|
148
|
+
-- Multiple generators
|
|
149
|
+
pairs :: [(Int, Int)]
|
|
150
|
+
pairs = [(x, y) | x <- [1..3], y <- [1..3], x /= y]
|
|
151
|
+
|
|
152
|
+
-- Pythagorean triples
|
|
153
|
+
pythagorean :: Int -> [(Int, Int, Int)]
|
|
154
|
+
pythagorean n = [(a, b, c) | a <- [1..n],
|
|
155
|
+
b <- [a..n],
|
|
156
|
+
c <- [b..n],
|
|
157
|
+
a^2 + b^2 == c^2]
|
|
158
|
+
|
|
159
|
+
-- String processing
|
|
160
|
+
uppercase :: String -> String
|
|
161
|
+
uppercase str = [toUpper c | c <- str]
|
|
162
|
+
where
|
|
163
|
+
toUpper c = if c >= 'a' && c <= 'z'
|
|
164
|
+
then toEnum (fromEnum c - 32)
|
|
165
|
+
else c
|
|
166
|
+
</syntax-code>
|
|
167
|
+
|
|
168
|
+
<div class="example">
|
|
169
|
+
<h2>Monads and Do Notation</h2>
|
|
170
|
+
<p class="description">Example:</p>
|
|
171
|
+
|
|
172
|
+
<syntax-code language="haskell">
|
|
173
|
+
module Monads where
|
|
174
|
+
|
|
175
|
+
import Control.Monad (when, unless)
|
|
176
|
+
|
|
177
|
+
-- Maybe monad
|
|
178
|
+
safeDivide :: Double -> Double -> Maybe Double
|
|
179
|
+
safeDivide _ 0 = Nothing
|
|
180
|
+
safeDivide x y = Just (x / y)
|
|
181
|
+
|
|
182
|
+
calculateRatio :: Double -> Double -> Maybe Double
|
|
183
|
+
calculateRatio a b = do
|
|
184
|
+
x <- safeDivide a b
|
|
185
|
+
y <- safeDivide x 2
|
|
186
|
+
return (y + 1)
|
|
187
|
+
|
|
188
|
+
-- IO monad
|
|
189
|
+
greetUser :: IO ()
|
|
190
|
+
greetUser = do
|
|
191
|
+
putStrLn "What's your name?"
|
|
192
|
+
name <- getLine
|
|
193
|
+
putStrLn ("Hello, " ++ name ++ "!")
|
|
194
|
+
|
|
195
|
+
-- List monad
|
|
196
|
+
pairs :: [Int] -> [Int] -> [(Int, Int)]
|
|
197
|
+
pairs xs ys = do
|
|
198
|
+
x <- xs
|
|
199
|
+
y <- ys
|
|
200
|
+
return (x, y)
|
|
201
|
+
|
|
202
|
+
-- Guard in do notation
|
|
203
|
+
positiveProducts :: [Int] -> [Int] -> [Int]
|
|
204
|
+
positiveProducts xs ys = do
|
|
205
|
+
x <- xs
|
|
206
|
+
y <- ys
|
|
207
|
+
let product = x * y
|
|
208
|
+
if product > 0
|
|
209
|
+
then return product
|
|
210
|
+
else []
|
|
211
|
+
</syntax-code>
|
|
212
|
+
|
|
213
|
+
<div class="example">
|
|
214
|
+
<h2>Functors, Applicatives, and Monads</h2>
|
|
215
|
+
<p class="description">Example:</p>
|
|
216
|
+
|
|
217
|
+
<syntax-code language="haskell">
|
|
218
|
+
module Abstractions where
|
|
219
|
+
|
|
220
|
+
-- Functor instance for custom type
|
|
221
|
+
data Box a = Box a deriving (Show, Eq)
|
|
222
|
+
|
|
223
|
+
instance Functor Box where
|
|
224
|
+
fmap f (Box x) = Box (f x)
|
|
225
|
+
|
|
226
|
+
-- Applicative instance
|
|
227
|
+
instance Applicative Box where
|
|
228
|
+
pure = Box
|
|
229
|
+
(Box f) <*> (Box x) = Box (f x)
|
|
230
|
+
|
|
231
|
+
-- Monad instance
|
|
232
|
+
instance Monad Box where
|
|
233
|
+
return = pure
|
|
234
|
+
(Box x) >>= f = f x
|
|
235
|
+
|
|
236
|
+
-- Using functor
|
|
237
|
+
doubleInBox :: Box Int -> Box Int
|
|
238
|
+
doubleInBox = fmap (*2)
|
|
239
|
+
|
|
240
|
+
-- Using applicative
|
|
241
|
+
applyInBox :: Box (Int -> Int) -> Box Int -> Box Int
|
|
242
|
+
applyInBox f x = f <*> x
|
|
243
|
+
|
|
244
|
+
-- Using monad
|
|
245
|
+
chainBox :: Box Int -> Box Int
|
|
246
|
+
chainBox x = x >>= \n -> Box (n + 1)
|
|
247
|
+
</syntax-code>
|
|
248
|
+
|
|
249
|
+
<div class="example">
|
|
250
|
+
<h2>Type Families and GADTs</h2>
|
|
251
|
+
<p class="description">Example:</p>
|
|
252
|
+
|
|
253
|
+
<syntax-code language="haskell">
|
|
254
|
+
{-# LANGUAGE TypeFamilies #-}
|
|
255
|
+
{-# LANGUAGE GADTs #-}
|
|
256
|
+
|
|
257
|
+
module Advanced where
|
|
258
|
+
|
|
259
|
+
-- Type families
|
|
260
|
+
type family Element c where
|
|
261
|
+
Element [a] = a
|
|
262
|
+
Element (Maybe a) = a
|
|
263
|
+
|
|
264
|
+
headElement :: [a] -> Element [a]
|
|
265
|
+
headElement (x:_) = x
|
|
266
|
+
headElement [] = error "empty list"
|
|
267
|
+
|
|
268
|
+
-- Data families
|
|
269
|
+
data family Array e
|
|
270
|
+
|
|
271
|
+
data instance Array Int = IntArray [Int]
|
|
272
|
+
data instance Array Bool = BoolArray [Bool]
|
|
273
|
+
|
|
274
|
+
-- GADTs (Generalized Algebraic Data Types)
|
|
275
|
+
data Expr a where
|
|
276
|
+
IntLit :: Int -> Expr Int
|
|
277
|
+
BoolLit :: Bool -> Expr Bool
|
|
278
|
+
Add :: Expr Int -> Expr Int -> Expr Int
|
|
279
|
+
Equals :: Expr Int -> Expr Int -> Expr Bool
|
|
280
|
+
If :: Expr Bool -> Expr a -> Expr a -> Expr a
|
|
281
|
+
|
|
282
|
+
eval :: Expr a -> a
|
|
283
|
+
eval (IntLit n) = n
|
|
284
|
+
eval (BoolLit b) = b
|
|
285
|
+
eval (Add x y) = eval x + eval y
|
|
286
|
+
eval (Equals x y) = eval x == eval y
|
|
287
|
+
eval (If cond t e) = if eval cond then eval t else eval e
|
|
288
|
+
</syntax-code>
|
|
289
|
+
|
|
290
|
+
<div class="example">
|
|
291
|
+
<h2>Recursive Data Structures</h2>
|
|
292
|
+
<p class="description">Example:</p>
|
|
293
|
+
|
|
294
|
+
<syntax-code language="haskell">
|
|
295
|
+
module Recursion where
|
|
296
|
+
|
|
297
|
+
-- Binary tree
|
|
298
|
+
data Tree a = Empty
|
|
299
|
+
| Node a (Tree a) (Tree a)
|
|
300
|
+
deriving (Show, Eq)
|
|
301
|
+
|
|
302
|
+
-- Insert into binary search tree
|
|
303
|
+
insert :: Ord a => a -> Tree a -> Tree a
|
|
304
|
+
insert x Empty = Node x Empty Empty
|
|
305
|
+
insert x (Node y left right)
|
|
306
|
+
| x < y = Node y (insert x left) right
|
|
307
|
+
| x > y = Node y left (insert x right)
|
|
308
|
+
| otherwise = Node y left right
|
|
309
|
+
|
|
310
|
+
-- Tree traversal
|
|
311
|
+
inorder :: Tree a -> [a]
|
|
312
|
+
inorder Empty = []
|
|
313
|
+
inorder (Node x left right) = inorder left ++ [x] ++ inorder right
|
|
314
|
+
|
|
315
|
+
-- Find in tree
|
|
316
|
+
findTree :: Ord a => a -> Tree a -> Bool
|
|
317
|
+
findTree _ Empty = False
|
|
318
|
+
findTree x (Node y left right)
|
|
319
|
+
| x == y = True
|
|
320
|
+
| x < y = findTree x left
|
|
321
|
+
| otherwise = findTree x right
|
|
322
|
+
|
|
323
|
+
-- Linked list (redundant with built-in lists, but for demonstration)
|
|
324
|
+
data List a = Nil | Cons a (List a)
|
|
325
|
+
deriving (Show, Eq)
|
|
326
|
+
|
|
327
|
+
listMap :: (a -> b) -> List a -> List b
|
|
328
|
+
listMap _ Nil = Nil
|
|
329
|
+
listMap f (Cons x xs) = Cons (f x) (listMap f xs)
|
|
330
|
+
</syntax-code>
|
|
331
|
+
|
|
332
|
+
<div class="example">
|
|
333
|
+
<h2>Lazy Evaluation and Infinite Lists</h2>
|
|
334
|
+
<p class="description">Example:</p>
|
|
335
|
+
|
|
336
|
+
<syntax-code language="haskell">
|
|
337
|
+
module Lazy where
|
|
338
|
+
|
|
339
|
+
-- Infinite list of natural numbers
|
|
340
|
+
naturals :: [Integer]
|
|
341
|
+
naturals = [0..]
|
|
342
|
+
|
|
343
|
+
-- Fibonacci sequence (infinite)
|
|
344
|
+
fibs :: [Integer]
|
|
345
|
+
fibs = 0 : 1 : zipWith (+) fibs (tail fibs)
|
|
346
|
+
|
|
347
|
+
-- Prime numbers (Sieve of Eratosthenes)
|
|
348
|
+
primes :: [Integer]
|
|
349
|
+
primes = sieve [2..]
|
|
350
|
+
where
|
|
351
|
+
sieve (p:xs) = p : sieve [x | x <- xs, x `mod` p /= 0]
|
|
352
|
+
|
|
353
|
+
-- Take first n primes
|
|
354
|
+
firstNPrimes :: Int -> [Integer]
|
|
355
|
+
firstNPrimes n = take n primes
|
|
356
|
+
|
|
357
|
+
-- Cycle and repeat
|
|
358
|
+
repeatedPattern :: [Int]
|
|
359
|
+
repeatedPattern = cycle [1, 2, 3]
|
|
360
|
+
|
|
361
|
+
constantList :: Int -> [Int]
|
|
362
|
+
constantList x = repeat x
|
|
363
|
+
|
|
364
|
+
-- Lazy evaluation in action
|
|
365
|
+
ones :: [Integer]
|
|
366
|
+
ones = 1 : ones
|
|
367
|
+
|
|
368
|
+
-- Take elements while condition holds
|
|
369
|
+
takeWhileLessThan :: Int -> [Int] -> [Int]
|
|
370
|
+
takeWhileLessThan n = takeWhile (< n)
|
|
371
|
+
</syntax-code>
|
|
372
|
+
</body>
|
|
373
|
+
</html>
|
|
@@ -0,0 +1,316 @@
|
|
|
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>HTML Examples - @socketry/syntax</title>
|
|
7
|
+
<link rel="stylesheet" href="examples.css">
|
|
8
|
+
</head>
|
|
9
|
+
<body>
|
|
10
|
+
<header>
|
|
11
|
+
<h1>HTML Examples</h1>
|
|
12
|
+
<p class="subtitle">Semantic HTML5 with embedded JavaScript and CSS</p>
|
|
13
|
+
</header>
|
|
14
|
+
|
|
15
|
+
<nav>
|
|
16
|
+
<a href="index.html">Back to Examples</a>
|
|
17
|
+
<a href="javascript.html">JavaScript</a>
|
|
18
|
+
<a href="css-colors.html">CSS</a>
|
|
19
|
+
<a href="mixed.html">Mixed Content</a>
|
|
20
|
+
</nav>
|
|
21
|
+
|
|
22
|
+
<div class="example">
|
|
23
|
+
<h2>Basic HTML Document</h2>
|
|
24
|
+
<p class="description">A complete HTML5 document with common elements:</p>
|
|
25
|
+
|
|
26
|
+
<syntax-code language="html">
|
|
27
|
+
<!DOCTYPE html>
|
|
28
|
+
<html lang="en">
|
|
29
|
+
<head>
|
|
30
|
+
<meta charset="UTF-8">
|
|
31
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
32
|
+
<meta name="description" content="A sample page">
|
|
33
|
+
<title>My Awesome Website</title>
|
|
34
|
+
<link rel="stylesheet" href="styles.css">
|
|
35
|
+
</head>
|
|
36
|
+
<body>
|
|
37
|
+
<header>
|
|
38
|
+
<h1>Welcome</h1>
|
|
39
|
+
<nav>
|
|
40
|
+
<a href="/">Home</a>
|
|
41
|
+
<a href="/about">About</a>
|
|
42
|
+
<a href="/contact">Contact</a>
|
|
43
|
+
</nav>
|
|
44
|
+
</header>
|
|
45
|
+
|
|
46
|
+
<main>
|
|
47
|
+
<article>
|
|
48
|
+
<h2>Article Title</h2>
|
|
49
|
+
<p>This is a paragraph.</p>
|
|
50
|
+
</article>
|
|
51
|
+
</main>
|
|
52
|
+
|
|
53
|
+
<footer>
|
|
54
|
+
<p>&copy; 2025 My Website</p>
|
|
55
|
+
</footer>
|
|
56
|
+
</body>
|
|
57
|
+
</html>
|
|
58
|
+
</syntax-code>
|
|
59
|
+
</div>
|
|
60
|
+
|
|
61
|
+
<div class="example">
|
|
62
|
+
<h2>Attributes</h2>
|
|
63
|
+
<p class="description">Various attribute types:</p>
|
|
64
|
+
|
|
65
|
+
<syntax-code language="html">
|
|
66
|
+
<!-- Different attribute formats -->
|
|
67
|
+
<input type="text" name="username" required>
|
|
68
|
+
<input type='email' value='user@example.com'>
|
|
69
|
+
<input type=checkbox checked disabled>
|
|
70
|
+
|
|
71
|
+
<!-- Data attributes -->
|
|
72
|
+
<div data-user-id="123" data-role="admin"></div>
|
|
73
|
+
|
|
74
|
+
<!-- Boolean attributes -->
|
|
75
|
+
<button disabled>Click Me</button>
|
|
76
|
+
<video controls autoplay muted></video>
|
|
77
|
+
|
|
78
|
+
<!-- Custom attributes and ARIA -->
|
|
79
|
+
<div
|
|
80
|
+
class="container"
|
|
81
|
+
id="main-content"
|
|
82
|
+
aria-label="Main content area"
|
|
83
|
+
role="main"
|
|
84
|
+
data-component="layout">
|
|
85
|
+
Content here
|
|
86
|
+
</div>
|
|
87
|
+
</syntax-code>
|
|
88
|
+
</div>
|
|
89
|
+
|
|
90
|
+
<div class="example">
|
|
91
|
+
<h2>HTML Entities</h2>
|
|
92
|
+
<p class="description">Named and numeric character references:</p>
|
|
93
|
+
|
|
94
|
+
<syntax-code language="html">
|
|
95
|
+
<!-- Named entities -->
|
|
96
|
+
<p>Copyright &copy; 2025</p>
|
|
97
|
+
<p>Less than &lt; and greater than &gt;</p>
|
|
98
|
+
<p>Ampersand &amp; and quotes &quot;</p>
|
|
99
|
+
<p>Non-breaking &nbsp; space</p>
|
|
100
|
+
|
|
101
|
+
<!-- Numeric entities -->
|
|
102
|
+
<p>Em dash &#8212; (decimal)</p>
|
|
103
|
+
<p>Euro sign &#x20AC; (hexadecimal)</p>
|
|
104
|
+
<p>Emoji &#128512; (smiley face)</p>
|
|
105
|
+
|
|
106
|
+
<!-- Special characters -->
|
|
107
|
+
<p>Math: &times; &divide; &plusmn; &ne;</p>
|
|
108
|
+
</syntax-code>
|
|
109
|
+
</div>
|
|
110
|
+
|
|
111
|
+
<div class="example">
|
|
112
|
+
<h2>Forms</h2>
|
|
113
|
+
<p class="description">Form elements and input types:</p>
|
|
114
|
+
|
|
115
|
+
<syntax-code language="html">
|
|
116
|
+
<form action="/submit" method="post" enctype="multipart/form-data">
|
|
117
|
+
<fieldset>
|
|
118
|
+
<legend>Personal Information</legend>
|
|
119
|
+
|
|
120
|
+
<label for="name">Name:</label>
|
|
121
|
+
<input type="text" id="name" name="name" required>
|
|
122
|
+
|
|
123
|
+
<label for="email">Email:</label>
|
|
124
|
+
<input type="email" id="email" name="email" required>
|
|
125
|
+
|
|
126
|
+
<label for="age">Age:</label>
|
|
127
|
+
<input type="number" id="age" name="age" min="0" max="120">
|
|
128
|
+
|
|
129
|
+
<label for="country">Country:</label>
|
|
130
|
+
<select id="country" name="country">
|
|
131
|
+
<option value="">Select...</option>
|
|
132
|
+
<option value="us">United States</option>
|
|
133
|
+
<option value="uk">United Kingdom</option>
|
|
134
|
+
<option value="ca">Canada</option>
|
|
135
|
+
</select>
|
|
136
|
+
|
|
137
|
+
<label>
|
|
138
|
+
<input type="checkbox" name="subscribe">
|
|
139
|
+
Subscribe to newsletter
|
|
140
|
+
</label>
|
|
141
|
+
</fieldset>
|
|
142
|
+
|
|
143
|
+
<button type="submit">Submit</button>
|
|
144
|
+
<button type="reset">Reset</button>
|
|
145
|
+
</form>
|
|
146
|
+
</syntax-code>
|
|
147
|
+
</div>
|
|
148
|
+
|
|
149
|
+
<div class="example">
|
|
150
|
+
<h2>Semantic HTML5</h2>
|
|
151
|
+
<p class="description">Modern semantic elements:</p>
|
|
152
|
+
|
|
153
|
+
<syntax-code language="html">
|
|
154
|
+
<article>
|
|
155
|
+
<header>
|
|
156
|
+
<h1>Article Heading</h1>
|
|
157
|
+
<time datetime="2025-10-26">October 26, 2025</time>
|
|
158
|
+
<address>By <a href="/author">John Doe</a></address>
|
|
159
|
+
</header>
|
|
160
|
+
|
|
161
|
+
<section>
|
|
162
|
+
<h2>Introduction</h2>
|
|
163
|
+
<p>Article content...</p>
|
|
164
|
+
</section>
|
|
165
|
+
|
|
166
|
+
<aside>
|
|
167
|
+
<h3>Related Links</h3>
|
|
168
|
+
<nav>
|
|
169
|
+
<ul>
|
|
170
|
+
<li><a href="#">Link 1</a></li>
|
|
171
|
+
<li><a href="#">Link 2</a></li>
|
|
172
|
+
</ul>
|
|
173
|
+
</nav>
|
|
174
|
+
</aside>
|
|
175
|
+
|
|
176
|
+
<footer>
|
|
177
|
+
<p>Published under <a href="/license">CC BY</a></p>
|
|
178
|
+
</footer>
|
|
179
|
+
</article>
|
|
180
|
+
</syntax-code>
|
|
181
|
+
</div>
|
|
182
|
+
|
|
183
|
+
<div class="example">
|
|
184
|
+
<h2>Comments and CDATA</h2>
|
|
185
|
+
<p class="description">HTML comments and CDATA sections:</p>
|
|
186
|
+
|
|
187
|
+
<syntax-code language="html">
|
|
188
|
+
<!-- This is a single-line comment -->
|
|
189
|
+
|
|
190
|
+
<!--
|
|
191
|
+
Multi-line comment
|
|
192
|
+
spanning multiple lines
|
|
193
|
+
with various content
|
|
194
|
+
-->
|
|
195
|
+
|
|
196
|
+
<!-- Nested tags in comments: <div></div> -->
|
|
197
|
+
|
|
198
|
+
<script>
|
|
199
|
+
// <![CDATA[
|
|
200
|
+
// CDATA wrapped in JavaScript comments (legacy technique)
|
|
201
|
+
// JavaScript comments should be highlighted
|
|
202
|
+
var x = 1 < 2 && 3 > 2;
|
|
203
|
+
console.log("No need to escape < > &");
|
|
204
|
+
/* Multi-line comment
|
|
205
|
+
inside CDATA */
|
|
206
|
+
// ]]>
|
|
207
|
+
</script>
|
|
208
|
+
</syntax-code>
|
|
209
|
+
</div>
|
|
210
|
+
|
|
211
|
+
<div class="example">
|
|
212
|
+
<h2>Media Elements</h2>
|
|
213
|
+
<p class="description">Images, video, and audio:</p>
|
|
214
|
+
|
|
215
|
+
<syntax-code language="html">
|
|
216
|
+
<!-- Images -->
|
|
217
|
+
<img src="photo.jpg" alt="Description" width="800" height="600">
|
|
218
|
+
<picture>
|
|
219
|
+
<source srcset="image.webp" type="image/webp">
|
|
220
|
+
<source srcset="image.jpg" type="image/jpeg">
|
|
221
|
+
<img src="fallback.jpg" alt="Responsive image">
|
|
222
|
+
</picture>
|
|
223
|
+
|
|
224
|
+
<!-- Video -->
|
|
225
|
+
<video controls width="640" height="360" poster="preview.jpg">
|
|
226
|
+
<source src="video.mp4" type="video/mp4">
|
|
227
|
+
<source src="video.webm" type="video/webm">
|
|
228
|
+
<track src="subtitles.vtt" kind="subtitles" srclang="en" label="English">
|
|
229
|
+
Your browser doesn't support video.
|
|
230
|
+
</video>
|
|
231
|
+
|
|
232
|
+
<!-- Audio -->
|
|
233
|
+
<audio controls>
|
|
234
|
+
<source src="audio.mp3" type="audio/mpeg">
|
|
235
|
+
<source src="audio.ogg" type="audio/ogg">
|
|
236
|
+
Your browser doesn't support audio.
|
|
237
|
+
</audio>
|
|
238
|
+
</syntax-code>
|
|
239
|
+
</div>
|
|
240
|
+
|
|
241
|
+
<div class="example">
|
|
242
|
+
<h2>Embedded JavaScript</h2>
|
|
243
|
+
<p class="description">JavaScript in script tags with proper syntax highlighting:</p>
|
|
244
|
+
|
|
245
|
+
<syntax-code language="html">
|
|
246
|
+
<!-- Default script tag (JavaScript) -->
|
|
247
|
+
<script>
|
|
248
|
+
// Single-line comment
|
|
249
|
+
const greeting = "Hello, World!";
|
|
250
|
+
|
|
251
|
+
/* Multi-line comment
|
|
252
|
+
explaining the code */
|
|
253
|
+
function sayHello(name) {
|
|
254
|
+
console.log(`Hello, ${name}!`);
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
// Modern JavaScript features
|
|
258
|
+
const numbers = [1, 2, 3, 4, 5];
|
|
259
|
+
const doubled = numbers.map(n => n * 2);
|
|
260
|
+
|
|
261
|
+
// Async/await
|
|
262
|
+
async function fetchData() {
|
|
263
|
+
const response = await fetch('/api/data');
|
|
264
|
+
return response.json();
|
|
265
|
+
}
|
|
266
|
+
</script>
|
|
267
|
+
|
|
268
|
+
<!-- Explicit JavaScript type -->
|
|
269
|
+
<script type="text/javascript">
|
|
270
|
+
// Traditional inline script
|
|
271
|
+
document.addEventListener('DOMContentLoaded', function() {
|
|
272
|
+
// Event handler code
|
|
273
|
+
console.log('Page loaded');
|
|
274
|
+
});
|
|
275
|
+
</script>
|
|
276
|
+
|
|
277
|
+
<!-- Import map (JSON syntax) -->
|
|
278
|
+
<script type="importmap">
|
|
279
|
+
{
|
|
280
|
+
"imports": {
|
|
281
|
+
"vue": "https://cdn.jsdelivr.net/npm/vue@3/dist/vue.esm-browser.js",
|
|
282
|
+
"lodash": "/node_modules/lodash-es/lodash.js"
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
</script>
|
|
286
|
+
|
|
287
|
+
<!-- ES Module -->
|
|
288
|
+
<script type="module">
|
|
289
|
+
// Module-scoped code
|
|
290
|
+
import { helper } from './utils.js';
|
|
291
|
+
|
|
292
|
+
class MyComponent {
|
|
293
|
+
constructor() {
|
|
294
|
+
this.name = 'Component';
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
render() {
|
|
298
|
+
// Rendering logic
|
|
299
|
+
return `<div>${this.name}</div>`;
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
</script>
|
|
303
|
+
</syntax-code>
|
|
304
|
+
</div>
|
|
305
|
+
|
|
306
|
+
<script type="module">
|
|
307
|
+
import Syntax from '../Syntax.js';
|
|
308
|
+
|
|
309
|
+
// Initialize highlighting
|
|
310
|
+
await Syntax.highlight({
|
|
311
|
+
autoUpgrade: true,
|
|
312
|
+
syntax: Syntax.default
|
|
313
|
+
});
|
|
314
|
+
</script>
|
|
315
|
+
</body>
|
|
316
|
+
</html>
|