presently 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (215) hide show
  1. checksums.yaml +7 -0
  2. data/bin/presently +13 -0
  3. data/lib/presently/application.rb +104 -0
  4. data/lib/presently/clock.rb +77 -0
  5. data/lib/presently/display_view.rb +73 -0
  6. data/lib/presently/environment/application.rb +62 -0
  7. data/lib/presently/page.rb +38 -0
  8. data/lib/presently/page.xrb +31 -0
  9. data/lib/presently/presentation.rb +72 -0
  10. data/lib/presently/presentation_controller.rb +181 -0
  11. data/lib/presently/presenter_view.rb +264 -0
  12. data/lib/presently/slide.rb +148 -0
  13. data/lib/presently/slide_view.rb +92 -0
  14. data/lib/presently/state.rb +66 -0
  15. data/lib/presently/version.rb +9 -0
  16. data/lib/presently.rb +9 -0
  17. data/license.md +21 -0
  18. data/public/_components/@socketry/syntax/Syntax/CodeElement.js +337 -0
  19. data/public/_components/@socketry/syntax/Syntax/Errors.js +52 -0
  20. data/public/_components/@socketry/syntax/Syntax/Language/apache.js +49 -0
  21. data/public/_components/@socketry/syntax/Syntax/Language/applescript.js +157 -0
  22. data/public/_components/@socketry/syntax/Syntax/Language/assembly.js +42 -0
  23. data/public/_components/@socketry/syntax/Syntax/Language/bash-script.js +108 -0
  24. data/public/_components/@socketry/syntax/Syntax/Language/bash.js +32 -0
  25. data/public/_components/@socketry/syntax/Syntax/Language/basic.js +232 -0
  26. data/public/_components/@socketry/syntax/Syntax/Language/c++.js +1 -0
  27. data/public/_components/@socketry/syntax/Syntax/Language/c.js +1 -0
  28. data/public/_components/@socketry/syntax/Syntax/Language/clang.js +201 -0
  29. data/public/_components/@socketry/syntax/Syntax/Language/cpp.js +1 -0
  30. data/public/_components/@socketry/syntax/Syntax/Language/csharp.js +166 -0
  31. data/public/_components/@socketry/syntax/Syntax/Language/css.js +244 -0
  32. data/public/_components/@socketry/syntax/Syntax/Language/diff.js +24 -0
  33. data/public/_components/@socketry/syntax/Syntax/Language/go.js +135 -0
  34. data/public/_components/@socketry/syntax/Syntax/Language/haskell.js +110 -0
  35. data/public/_components/@socketry/syntax/Syntax/Language/html.js +69 -0
  36. data/public/_components/@socketry/syntax/Syntax/Language/io.js +68 -0
  37. data/public/_components/@socketry/syntax/Syntax/Language/java.js +134 -0
  38. data/public/_components/@socketry/syntax/Syntax/Language/javascript.js +89 -0
  39. data/public/_components/@socketry/syntax/Syntax/Language/json.js +36 -0
  40. data/public/_components/@socketry/syntax/Syntax/Language/lisp.js +38 -0
  41. data/public/_components/@socketry/syntax/Syntax/Language/lua.js +87 -0
  42. data/public/_components/@socketry/syntax/Syntax/Language/markdown.js +112 -0
  43. data/public/_components/@socketry/syntax/Syntax/Language/nginx.js +37 -0
  44. data/public/_components/@socketry/syntax/Syntax/Language/objective-c.js +1 -0
  45. data/public/_components/@socketry/syntax/Syntax/Language/ocaml.js +225 -0
  46. data/public/_components/@socketry/syntax/Syntax/Language/pascal.js +166 -0
  47. data/public/_components/@socketry/syntax/Syntax/Language/patch.js +2 -0
  48. data/public/_components/@socketry/syntax/Syntax/Language/perl5.js +317 -0
  49. data/public/_components/@socketry/syntax/Syntax/Language/php-script.js +112 -0
  50. data/public/_components/@socketry/syntax/Syntax/Language/php.js +18 -0
  51. data/public/_components/@socketry/syntax/Syntax/Language/plain.js +20 -0
  52. data/public/_components/@socketry/syntax/Syntax/Language/protobuf.js +77 -0
  53. data/public/_components/@socketry/syntax/Syntax/Language/python.js +208 -0
  54. data/public/_components/@socketry/syntax/Syntax/Language/ruby.js +124 -0
  55. data/public/_components/@socketry/syntax/Syntax/Language/scala.js +81 -0
  56. data/public/_components/@socketry/syntax/Syntax/Language/smalltalk.js +30 -0
  57. data/public/_components/@socketry/syntax/Syntax/Language/sql.js +865 -0
  58. data/public/_components/@socketry/syntax/Syntax/Language/super-collider.js +70 -0
  59. data/public/_components/@socketry/syntax/Syntax/Language/swift.js +176 -0
  60. data/public/_components/@socketry/syntax/Syntax/Language/xml.js +76 -0
  61. data/public/_components/@socketry/syntax/Syntax/Language/xrb.js +33 -0
  62. data/public/_components/@socketry/syntax/Syntax/Language/yaml.js +29 -0
  63. data/public/_components/@socketry/syntax/Syntax/Language.js +276 -0
  64. data/public/_components/@socketry/syntax/Syntax/Loader.js +78 -0
  65. data/public/_components/@socketry/syntax/Syntax/Match.js +546 -0
  66. data/public/_components/@socketry/syntax/Syntax/Rule.js +306 -0
  67. data/public/_components/@socketry/syntax/Syntax.js +356 -0
  68. data/public/_components/@socketry/syntax/bin/syntax-ast.js +42 -0
  69. data/public/_components/@socketry/syntax/examples/_template.html +53 -0
  70. data/public/_components/@socketry/syntax/examples/apache.html +72 -0
  71. data/public/_components/@socketry/syntax/examples/applescript.html +72 -0
  72. data/public/_components/@socketry/syntax/examples/assembly.html +74 -0
  73. data/public/_components/@socketry/syntax/examples/bash.html +90 -0
  74. data/public/_components/@socketry/syntax/examples/basic.html +87 -0
  75. data/public/_components/@socketry/syntax/examples/c.html +141 -0
  76. data/public/_components/@socketry/syntax/examples/clang.html +202 -0
  77. data/public/_components/@socketry/syntax/examples/csharp.html +110 -0
  78. data/public/_components/@socketry/syntax/examples/css-colors.html +179 -0
  79. data/public/_components/@socketry/syntax/examples/custom-theme.html +155 -0
  80. data/public/_components/@socketry/syntax/examples/diff.html +142 -0
  81. data/public/_components/@socketry/syntax/examples/examples.css +216 -0
  82. data/public/_components/@socketry/syntax/examples/go.html +413 -0
  83. data/public/_components/@socketry/syntax/examples/haskell.html +373 -0
  84. data/public/_components/@socketry/syntax/examples/html.html +316 -0
  85. data/public/_components/@socketry/syntax/examples/index.html +97 -0
  86. data/public/_components/@socketry/syntax/examples/io.html +552 -0
  87. data/public/_components/@socketry/syntax/examples/java.html +786 -0
  88. data/public/_components/@socketry/syntax/examples/javascript.html +199 -0
  89. data/public/_components/@socketry/syntax/examples/json.html +150 -0
  90. data/public/_components/@socketry/syntax/examples/lisp.html +476 -0
  91. data/public/_components/@socketry/syntax/examples/lua.html +737 -0
  92. data/public/_components/@socketry/syntax/examples/markdown.html +121 -0
  93. data/public/_components/@socketry/syntax/examples/mixed.html +306 -0
  94. data/public/_components/@socketry/syntax/examples/nginx.html +554 -0
  95. data/public/_components/@socketry/syntax/examples/ocaml.html +596 -0
  96. data/public/_components/@socketry/syntax/examples/pascal.html +762 -0
  97. data/public/_components/@socketry/syntax/examples/perl5.html +488 -0
  98. data/public/_components/@socketry/syntax/examples/php-script.html +142 -0
  99. data/public/_components/@socketry/syntax/examples/php.html +95 -0
  100. data/public/_components/@socketry/syntax/examples/plain.html +222 -0
  101. data/public/_components/@socketry/syntax/examples/protobuf.html +405 -0
  102. data/public/_components/@socketry/syntax/examples/python.html +82 -0
  103. data/public/_components/@socketry/syntax/examples/readme.md +79 -0
  104. data/public/_components/@socketry/syntax/examples/ruby.html +58 -0
  105. data/public/_components/@socketry/syntax/examples/scala.html +41 -0
  106. data/public/_components/@socketry/syntax/examples/smalltalk.html +436 -0
  107. data/public/_components/@socketry/syntax/examples/sql.html +373 -0
  108. data/public/_components/@socketry/syntax/examples/super-collider.html +55 -0
  109. data/public/_components/@socketry/syntax/examples/swift.html +176 -0
  110. data/public/_components/@socketry/syntax/examples/wrap-demo.html +103 -0
  111. data/public/_components/@socketry/syntax/examples/xml.html +112 -0
  112. data/public/_components/@socketry/syntax/examples/xrb.html +37 -0
  113. data/public/_components/@socketry/syntax/examples/yaml.html +72 -0
  114. data/public/_components/@socketry/syntax/license.md +21 -0
  115. data/public/_components/@socketry/syntax/package-lock.json +834 -0
  116. data/public/_components/@socketry/syntax/package.json +43 -0
  117. data/public/_components/@socketry/syntax/readme.md +162 -0
  118. data/public/_components/@socketry/syntax/test/Syntax/CodeElement.js +306 -0
  119. data/public/_components/@socketry/syntax/test/Syntax/ErrorHandling.js +85 -0
  120. data/public/_components/@socketry/syntax/test/Syntax/Language/apache.js +153 -0
  121. data/public/_components/@socketry/syntax/test/Syntax/Language/applescript.js +198 -0
  122. data/public/_components/@socketry/syntax/test/Syntax/Language/assembly.js +209 -0
  123. data/public/_components/@socketry/syntax/test/Syntax/Language/bash-script.js +225 -0
  124. data/public/_components/@socketry/syntax/test/Syntax/Language/bash.js +162 -0
  125. data/public/_components/@socketry/syntax/test/Syntax/Language/basic.js +265 -0
  126. data/public/_components/@socketry/syntax/test/Syntax/Language/clang.js +390 -0
  127. data/public/_components/@socketry/syntax/test/Syntax/Language/csharp.js +436 -0
  128. data/public/_components/@socketry/syntax/test/Syntax/Language/css.js +431 -0
  129. data/public/_components/@socketry/syntax/test/Syntax/Language/diff.js +206 -0
  130. data/public/_components/@socketry/syntax/test/Syntax/Language/go.js +386 -0
  131. data/public/_components/@socketry/syntax/test/Syntax/Language/haskell.js +454 -0
  132. data/public/_components/@socketry/syntax/test/Syntax/Language/html.js +111 -0
  133. data/public/_components/@socketry/syntax/test/Syntax/Language/io.js +229 -0
  134. data/public/_components/@socketry/syntax/test/Syntax/Language/java.js +362 -0
  135. data/public/_components/@socketry/syntax/test/Syntax/Language/javascript.js +101 -0
  136. data/public/_components/@socketry/syntax/test/Syntax/Language/json.js +101 -0
  137. data/public/_components/@socketry/syntax/test/Syntax/Language/lisp.js +224 -0
  138. data/public/_components/@socketry/syntax/test/Syntax/Language/lua.js +307 -0
  139. data/public/_components/@socketry/syntax/test/Syntax/Language/markdown.js +163 -0
  140. data/public/_components/@socketry/syntax/test/Syntax/Language/nginx.js +267 -0
  141. data/public/_components/@socketry/syntax/test/Syntax/Language/ocaml.js +299 -0
  142. data/public/_components/@socketry/syntax/test/Syntax/Language/pascal.js +311 -0
  143. data/public/_components/@socketry/syntax/test/Syntax/Language/perl5.js +333 -0
  144. data/public/_components/@socketry/syntax/test/Syntax/Language/php-script.js +197 -0
  145. data/public/_components/@socketry/syntax/test/Syntax/Language/php.js +92 -0
  146. data/public/_components/@socketry/syntax/test/Syntax/Language/plain.js +327 -0
  147. data/public/_components/@socketry/syntax/test/Syntax/Language/protobuf.js +294 -0
  148. data/public/_components/@socketry/syntax/test/Syntax/Language/python.js +213 -0
  149. data/public/_components/@socketry/syntax/test/Syntax/Language/ruby.js +70 -0
  150. data/public/_components/@socketry/syntax/test/Syntax/Language/scala.js +75 -0
  151. data/public/_components/@socketry/syntax/test/Syntax/Language/smalltalk.js +223 -0
  152. data/public/_components/@socketry/syntax/test/Syntax/Language/sql.js +281 -0
  153. data/public/_components/@socketry/syntax/test/Syntax/Language/super-collider.js +66 -0
  154. data/public/_components/@socketry/syntax/test/Syntax/Language/swift.js +71 -0
  155. data/public/_components/@socketry/syntax/test/Syntax/Language/xml.js +170 -0
  156. data/public/_components/@socketry/syntax/test/Syntax/Language/xrb.js +57 -0
  157. data/public/_components/@socketry/syntax/test/Syntax/Language/yaml.js +123 -0
  158. data/public/_components/@socketry/syntax/test/Syntax/Language.js +62 -0
  159. data/public/_components/@socketry/syntax/test/Syntax/Match.js +40 -0
  160. data/public/_components/@socketry/syntax/test/Syntax/Rule.js +251 -0
  161. data/public/_components/@socketry/syntax/test/Syntax.js +38 -0
  162. data/public/_components/@socketry/syntax/test/helpers/ast-matcher.js +90 -0
  163. data/public/_components/@socketry/syntax/themes/base/apache.css +1 -0
  164. data/public/_components/@socketry/syntax/themes/base/applescript.css +1 -0
  165. data/public/_components/@socketry/syntax/themes/base/assembly.css +1 -0
  166. data/public/_components/@socketry/syntax/themes/base/bash.css +1 -0
  167. data/public/_components/@socketry/syntax/themes/base/basic.css +1 -0
  168. data/public/_components/@socketry/syntax/themes/base/c.css +1 -0
  169. data/public/_components/@socketry/syntax/themes/base/clang.css +0 -0
  170. data/public/_components/@socketry/syntax/themes/base/csharp.css +1 -0
  171. data/public/_components/@socketry/syntax/themes/base/css.css +22 -0
  172. data/public/_components/@socketry/syntax/themes/base/diff.css +48 -0
  173. data/public/_components/@socketry/syntax/themes/base/go.css +1 -0
  174. data/public/_components/@socketry/syntax/themes/base/haskell.css +1 -0
  175. data/public/_components/@socketry/syntax/themes/base/html.css +1 -0
  176. data/public/_components/@socketry/syntax/themes/base/io.css +1 -0
  177. data/public/_components/@socketry/syntax/themes/base/java.css +1 -0
  178. data/public/_components/@socketry/syntax/themes/base/javascript.css +1 -0
  179. data/public/_components/@socketry/syntax/themes/base/json.css +41 -0
  180. data/public/_components/@socketry/syntax/themes/base/lisp.css +1 -0
  181. data/public/_components/@socketry/syntax/themes/base/lua.css +1 -0
  182. data/public/_components/@socketry/syntax/themes/base/markdown.css +16 -0
  183. data/public/_components/@socketry/syntax/themes/base/nginx.css +1 -0
  184. data/public/_components/@socketry/syntax/themes/base/ocaml.css +1 -0
  185. data/public/_components/@socketry/syntax/themes/base/pascal.css +1 -0
  186. data/public/_components/@socketry/syntax/themes/base/perl5.css +1 -0
  187. data/public/_components/@socketry/syntax/themes/base/php-script.css +1 -0
  188. data/public/_components/@socketry/syntax/themes/base/php.css +1 -0
  189. data/public/_components/@socketry/syntax/themes/base/plain.css +1 -0
  190. data/public/_components/@socketry/syntax/themes/base/protobuf.css +1 -0
  191. data/public/_components/@socketry/syntax/themes/base/python.css +1 -0
  192. data/public/_components/@socketry/syntax/themes/base/ruby.css +23 -0
  193. data/public/_components/@socketry/syntax/themes/base/scala.css +3 -0
  194. data/public/_components/@socketry/syntax/themes/base/smalltalk.css +1 -0
  195. data/public/_components/@socketry/syntax/themes/base/sql.css +1 -0
  196. data/public/_components/@socketry/syntax/themes/base/super-collider.css +33 -0
  197. data/public/_components/@socketry/syntax/themes/base/swift.css +1 -0
  198. data/public/_components/@socketry/syntax/themes/base/syntax.css +63 -0
  199. data/public/_components/@socketry/syntax/themes/base/xml.css +1 -0
  200. data/public/_components/@socketry/syntax/themes/base/xrb.css +29 -0
  201. data/public/_components/@socketry/syntax/themes/base/yaml.css +1 -0
  202. data/public/_components/@socketry/syntax/themes/theming.md +233 -0
  203. data/public/_components/@socketry/syntax/update-examples.js +135 -0
  204. data/public/_static/index.css +593 -0
  205. data/public/application.js +147 -0
  206. data/readme.md +69 -0
  207. data/releases.md +3 -0
  208. data/templates/code.xrb +12 -0
  209. data/templates/default.xrb +5 -0
  210. data/templates/image.xrb +8 -0
  211. data/templates/section.xrb +5 -0
  212. data/templates/title.xrb +8 -0
  213. data/templates/translation.xrb +8 -0
  214. data/templates/two_column.xrb +8 -0
  215. metadata +280 -0
@@ -0,0 +1,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
+ &lt;!DOCTYPE html&gt;
28
+ &lt;html lang="en"&gt;
29
+ &lt;head&gt;
30
+ &lt;meta charset="UTF-8"&gt;
31
+ &lt;meta name="viewport" content="width=device-width, initial-scale=1.0"&gt;
32
+ &lt;meta name="description" content="A sample page"&gt;
33
+ &lt;title&gt;My Awesome Website&lt;/title&gt;
34
+ &lt;link rel="stylesheet" href="styles.css"&gt;
35
+ &lt;/head&gt;
36
+ &lt;body&gt;
37
+ &lt;header&gt;
38
+ &lt;h1&gt;Welcome&lt;/h1&gt;
39
+ &lt;nav&gt;
40
+ &lt;a href="/"&gt;Home&lt;/a&gt;
41
+ &lt;a href="/about"&gt;About&lt;/a&gt;
42
+ &lt;a href="/contact"&gt;Contact&lt;/a&gt;
43
+ &lt;/nav&gt;
44
+ &lt;/header&gt;
45
+
46
+ &lt;main&gt;
47
+ &lt;article&gt;
48
+ &lt;h2&gt;Article Title&lt;/h2&gt;
49
+ &lt;p&gt;This is a paragraph.&lt;/p&gt;
50
+ &lt;/article&gt;
51
+ &lt;/main&gt;
52
+
53
+ &lt;footer&gt;
54
+ &lt;p&gt;&amp;copy; 2025 My Website&lt;/p&gt;
55
+ &lt;/footer&gt;
56
+ &lt;/body&gt;
57
+ &lt;/html&gt;
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
+ &lt;!-- Different attribute formats --&gt;
67
+ &lt;input type="text" name="username" required&gt;
68
+ &lt;input type='email' value='user@example.com'&gt;
69
+ &lt;input type=checkbox checked disabled&gt;
70
+
71
+ &lt;!-- Data attributes --&gt;
72
+ &lt;div data-user-id="123" data-role="admin"&gt;&lt;/div&gt;
73
+
74
+ &lt;!-- Boolean attributes --&gt;
75
+ &lt;button disabled&gt;Click Me&lt;/button&gt;
76
+ &lt;video controls autoplay muted&gt;&lt;/video&gt;
77
+
78
+ &lt;!-- Custom attributes and ARIA --&gt;
79
+ &lt;div
80
+ class="container"
81
+ id="main-content"
82
+ aria-label="Main content area"
83
+ role="main"
84
+ data-component="layout"&gt;
85
+ Content here
86
+ &lt;/div&gt;
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
+ &lt;!-- Named entities --&gt;
96
+ &lt;p&gt;Copyright &amp;copy; 2025&lt;/p&gt;
97
+ &lt;p&gt;Less than &amp;lt; and greater than &amp;gt;&lt;/p&gt;
98
+ &lt;p&gt;Ampersand &amp;amp; and quotes &amp;quot;&lt;/p&gt;
99
+ &lt;p&gt;Non-breaking &amp;nbsp; space&lt;/p&gt;
100
+
101
+ &lt;!-- Numeric entities --&gt;
102
+ &lt;p&gt;Em dash &amp;#8212; (decimal)&lt;/p&gt;
103
+ &lt;p&gt;Euro sign &amp;#x20AC; (hexadecimal)&lt;/p&gt;
104
+ &lt;p&gt;Emoji &amp;#128512; (smiley face)&lt;/p&gt;
105
+
106
+ &lt;!-- Special characters --&gt;
107
+ &lt;p&gt;Math: &amp;times; &amp;divide; &amp;plusmn; &amp;ne;&lt;/p&gt;
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
+ &lt;form action="/submit" method="post" enctype="multipart/form-data"&gt;
117
+ &lt;fieldset&gt;
118
+ &lt;legend&gt;Personal Information&lt;/legend&gt;
119
+
120
+ &lt;label for="name"&gt;Name:&lt;/label&gt;
121
+ &lt;input type="text" id="name" name="name" required&gt;
122
+
123
+ &lt;label for="email"&gt;Email:&lt;/label&gt;
124
+ &lt;input type="email" id="email" name="email" required&gt;
125
+
126
+ &lt;label for="age"&gt;Age:&lt;/label&gt;
127
+ &lt;input type="number" id="age" name="age" min="0" max="120"&gt;
128
+
129
+ &lt;label for="country"&gt;Country:&lt;/label&gt;
130
+ &lt;select id="country" name="country"&gt;
131
+ &lt;option value=""&gt;Select...&lt;/option&gt;
132
+ &lt;option value="us"&gt;United States&lt;/option&gt;
133
+ &lt;option value="uk"&gt;United Kingdom&lt;/option&gt;
134
+ &lt;option value="ca"&gt;Canada&lt;/option&gt;
135
+ &lt;/select&gt;
136
+
137
+ &lt;label&gt;
138
+ &lt;input type="checkbox" name="subscribe"&gt;
139
+ Subscribe to newsletter
140
+ &lt;/label&gt;
141
+ &lt;/fieldset&gt;
142
+
143
+ &lt;button type="submit"&gt;Submit&lt;/button&gt;
144
+ &lt;button type="reset"&gt;Reset&lt;/button&gt;
145
+ &lt;/form&gt;
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
+ &lt;article&gt;
155
+ &lt;header&gt;
156
+ &lt;h1&gt;Article Heading&lt;/h1&gt;
157
+ &lt;time datetime="2025-10-26"&gt;October 26, 2025&lt;/time&gt;
158
+ &lt;address&gt;By &lt;a href="/author"&gt;John Doe&lt;/a&gt;&lt;/address&gt;
159
+ &lt;/header&gt;
160
+
161
+ &lt;section&gt;
162
+ &lt;h2&gt;Introduction&lt;/h2&gt;
163
+ &lt;p&gt;Article content...&lt;/p&gt;
164
+ &lt;/section&gt;
165
+
166
+ &lt;aside&gt;
167
+ &lt;h3&gt;Related Links&lt;/h3&gt;
168
+ &lt;nav&gt;
169
+ &lt;ul&gt;
170
+ &lt;li&gt;&lt;a href="#"&gt;Link 1&lt;/a&gt;&lt;/li&gt;
171
+ &lt;li&gt;&lt;a href="#"&gt;Link 2&lt;/a&gt;&lt;/li&gt;
172
+ &lt;/ul&gt;
173
+ &lt;/nav&gt;
174
+ &lt;/aside&gt;
175
+
176
+ &lt;footer&gt;
177
+ &lt;p&gt;Published under &lt;a href="/license"&gt;CC BY&lt;/a&gt;&lt;/p&gt;
178
+ &lt;/footer&gt;
179
+ &lt;/article&gt;
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
+ &lt;!-- This is a single-line comment --&gt;
189
+
190
+ &lt;!--
191
+ Multi-line comment
192
+ spanning multiple lines
193
+ with various content
194
+ --&gt;
195
+
196
+ &lt;!-- Nested tags in comments: &lt;div&gt;&lt;/div&gt; --&gt;
197
+
198
+ &lt;script&gt;
199
+ // &lt;![CDATA[
200
+ // CDATA wrapped in JavaScript comments (legacy technique)
201
+ // JavaScript comments should be highlighted
202
+ var x = 1 &lt; 2 &amp;&amp; 3 &gt; 2;
203
+ console.log("No need to escape &lt; &gt; &amp;");
204
+ /* Multi-line comment
205
+ inside CDATA */
206
+ // ]]&gt;
207
+ &lt;/script&gt;
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
+ &lt;!-- Images --&gt;
217
+ &lt;img src="photo.jpg" alt="Description" width="800" height="600"&gt;
218
+ &lt;picture&gt;
219
+ &lt;source srcset="image.webp" type="image/webp"&gt;
220
+ &lt;source srcset="image.jpg" type="image/jpeg"&gt;
221
+ &lt;img src="fallback.jpg" alt="Responsive image"&gt;
222
+ &lt;/picture&gt;
223
+
224
+ &lt;!-- Video --&gt;
225
+ &lt;video controls width="640" height="360" poster="preview.jpg"&gt;
226
+ &lt;source src="video.mp4" type="video/mp4"&gt;
227
+ &lt;source src="video.webm" type="video/webm"&gt;
228
+ &lt;track src="subtitles.vtt" kind="subtitles" srclang="en" label="English"&gt;
229
+ Your browser doesn't support video.
230
+ &lt;/video&gt;
231
+
232
+ &lt;!-- Audio --&gt;
233
+ &lt;audio controls&gt;
234
+ &lt;source src="audio.mp3" type="audio/mpeg"&gt;
235
+ &lt;source src="audio.ogg" type="audio/ogg"&gt;
236
+ Your browser doesn't support audio.
237
+ &lt;/audio&gt;
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
+ &lt;!-- Default script tag (JavaScript) --&gt;
247
+ &lt;script&gt;
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 =&gt; n * 2);
260
+
261
+ // Async/await
262
+ async function fetchData() {
263
+ const response = await fetch('/api/data');
264
+ return response.json();
265
+ }
266
+ &lt;/script&gt;
267
+
268
+ &lt;!-- Explicit JavaScript type --&gt;
269
+ &lt;script type="text/javascript"&gt;
270
+ // Traditional inline script
271
+ document.addEventListener('DOMContentLoaded', function() {
272
+ // Event handler code
273
+ console.log('Page loaded');
274
+ });
275
+ &lt;/script&gt;
276
+
277
+ &lt;!-- Import map (JSON syntax) --&gt;
278
+ &lt;script type="importmap"&gt;
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
+ &lt;/script&gt;
286
+
287
+ &lt;!-- ES Module --&gt;
288
+ &lt;script type="module"&gt;
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 `&lt;div&gt;${this.name}&lt;/div&gt;`;
300
+ }
301
+ }
302
+ &lt;/script&gt;
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>