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,488 @@
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>Perl 5 Examples - @socketry/syntax</title>
7
+ <link rel="stylesheet" href="examples.css">
8
+ </head>
9
+ <body>
10
+ <header>
11
+ <h1>Perl 5 Examples</h1>
12
+ <p class="subtitle">Perl 5 syntax highlighting</p>
13
+ </header>
14
+
15
+ <nav>
16
+ <a href="index.html">Back to Examples</a>
17
+ </nav>
18
+
19
+ <h1>Perl 5 Syntax Examples</h1>
20
+
21
+ <div class="example">
22
+ <h2>Hello World</h2>
23
+ <p class="description">Example:</p>
24
+
25
+ <syntax-code language="perl5">#!/usr/bin/perl
26
+ use strict;
27
+ use warnings;
28
+
29
+ print "Hello, World!\n";</syntax-code>
30
+
31
+ <div class="example">
32
+ <h2>Variables</h2>
33
+ <p class="description">Example:</p>
34
+
35
+ <syntax-code language="perl5"># Scalar variables (single values)
36
+ my $name = "Alice";
37
+ my $age = 30;
38
+ my $pi = 3.14159;
39
+
40
+ # Array variables (ordered lists)
41
+ my @colors = ("red", "green", "blue");
42
+ my @numbers = (1, 2, 3, 4, 5);
43
+
44
+ # Hash variables (key-value pairs)
45
+ my %person = (
46
+ name => "Bob",
47
+ age => 25,
48
+ city => "New York"
49
+ );
50
+
51
+ # Special variables
52
+ print $_ for @colors; # $_ is the default variable
53
+ my $args = @ARGV; # @ARGV contains command-line arguments</syntax-code>
54
+
55
+ <div class="example">
56
+ <h2>Control Flow</h2>
57
+ <p class="description">Example:</p>
58
+
59
+ <syntax-code language="perl5"># If-elsif-else
60
+ my $score = 85;
61
+ if ($score >= 90) {
62
+ print "A grade\n";
63
+ } elsif ($score >= 80) {
64
+ print "B grade\n";
65
+ } elsif ($score >= 70) {
66
+ print "C grade\n";
67
+ } else {
68
+ print "Need improvement\n";
69
+ }
70
+
71
+ # Unless (opposite of if)
72
+ unless ($score < 60) {
73
+ print "Passed!\n";
74
+ }
75
+
76
+ # Postfix conditionals
77
+ print "High score\n" if $score > 90;
78
+ print "Low score\n" unless $score > 50;</syntax-code>
79
+
80
+ <div class="example">
81
+ <h2>Loops</h2>
82
+ <p class="description">Example:</p>
83
+
84
+ <syntax-code language="perl5"># For loop
85
+ for (my $i = 0; $i < 5; $i++) {
86
+ print "$i ";
87
+ }
88
+
89
+ # Foreach loop
90
+ my @fruits = ("apple", "banana", "cherry");
91
+ foreach my $fruit (@fruits) {
92
+ print "$fruit\n";
93
+ }
94
+
95
+ # While loop
96
+ my $count = 0;
97
+ while ($count < 5) {
98
+ print "$count ";
99
+ $count++;
100
+ }
101
+
102
+ # Until loop (opposite of while)
103
+ my $n = 0;
104
+ until ($n >= 5) {
105
+ print "$n ";
106
+ $n++;
107
+ }
108
+
109
+ # Loop control
110
+ foreach my $num (1..10) {
111
+ last if $num > 5; # Exit loop
112
+ next if $num % 2 == 0; # Skip to next iteration
113
+ print "$num ";
114
+ }</syntax-code>
115
+
116
+ <div class="example">
117
+ <h2>Subroutines</h2>
118
+ <p class="description">Example:</p>
119
+
120
+ <syntax-code language="perl5"># Basic subroutine
121
+ sub greet {
122
+ my ($name) = @_;
123
+ print "Hello, $name!\n";
124
+ }
125
+
126
+ greet("Alice");
127
+
128
+ # Multiple parameters
129
+ sub add {
130
+ my ($a, $b) = @_;
131
+ return $a + $b;
132
+ }
133
+
134
+ my $sum = add(5, 3);
135
+
136
+ # Default parameters (using // operator)
137
+ sub greet_with_title {
138
+ my ($name, $title) = @_;
139
+ $title //= "Mr./Ms."; # Default value
140
+ print "$title $name\n";
141
+ }
142
+
143
+ # Return multiple values
144
+ sub get_stats {
145
+ my @numbers = @_;
146
+ my $sum = 0;
147
+ $sum += $_ for @numbers;
148
+ my $count = scalar @numbers;
149
+ my $avg = $sum / $count;
150
+ return ($sum, $avg);
151
+ }
152
+
153
+ my ($total, $average) = get_stats(1, 2, 3, 4, 5);</syntax-code>
154
+
155
+ <div class="example">
156
+ <h2>Arrays</h2>
157
+ <p class="description">Example:</p>
158
+
159
+ <syntax-code language="perl5">my @array = (1, 2, 3, 4, 5);
160
+
161
+ # Array operations
162
+ push @array, 6; # Add to end
163
+ my $last = pop @array; # Remove from end
164
+ unshift @array, 0; # Add to beginning
165
+ my $first = shift @array; # Remove from beginning
166
+
167
+ # Array slicing
168
+ my @slice = @array[1..3];
169
+
170
+ # Array length
171
+ my $length = scalar @array;
172
+ my $last_index = $#array;
173
+
174
+ # Iterate with index
175
+ for my $i (0..$#array) {
176
+ print "$i: $array[$i]\n";
177
+ }
178
+
179
+ # Join and split
180
+ my $str = join(", ", @array);
181
+ my @words = split(/\s+/, "hello world from perl");</syntax-code>
182
+
183
+ <div class="example">
184
+ <h2>Hashes</h2>
185
+ <p class="description">Example:</p>
186
+
187
+ <syntax-code language="perl5">my %hash = (
188
+ name => "Alice",
189
+ age => 30,
190
+ city => "London"
191
+ );
192
+
193
+ # Access values
194
+ my $name = $hash{name};
195
+
196
+ # Add/modify entries
197
+ $hash{country} = "UK";
198
+ $hash{age} = 31;
199
+
200
+ # Delete entries
201
+ delete $hash{city};
202
+
203
+ # Check if key exists
204
+ if (exists $hash{name}) {
205
+ print "Name exists\n";
206
+ }
207
+
208
+ # Iterate over hash
209
+ foreach my $key (keys %hash) {
210
+ my $value = $hash{$key};
211
+ print "$key: $value\n";
212
+ }
213
+
214
+ # Hash slicing
215
+ my @values = @hash{qw(name age)};</syntax-code>
216
+
217
+ <div class="example">
218
+ <h2>Regular Expressions</h2>
219
+ <p class="description">Example:</p>
220
+
221
+ <syntax-code language="perl5">my $text = "The quick brown fox";
222
+
223
+ # Matching
224
+ if ($text =~ /quick/) {
225
+ print "Found 'quick'\n";
226
+ }
227
+
228
+ # Case-insensitive matching
229
+ if ($text =~ /QUICK/i) {
230
+ print "Found 'quick' (case-insensitive)\n";
231
+ }
232
+
233
+ # Substitution
234
+ $text =~ s/brown/red/; # Replace first occurrence
235
+ $text =~ s/fox/dog/g; # Replace all occurrences
236
+
237
+ # Capture groups
238
+ if ($text =~ /(\w+) (\w+)/) {
239
+ print "First word: $1\n";
240
+ print "Second word: $2\n";
241
+ }
242
+
243
+ # Split with regex
244
+ my @words = split(/\s+/, $text);
245
+
246
+ # Match operator variations
247
+ my $count = ($text =~ tr/a-z/A-Z/); # Transliterate</syntax-code>
248
+
249
+ <div class="example">
250
+ <h2>File I/O</h2>
251
+ <p class="description">Example:</p>
252
+
253
+ <syntax-code language="perl5"># Open file for reading
254
+ open my $fh, "<", "input.txt" or die "Cannot open: $!";
255
+ while (my $line = <$fh>) {
256
+ chomp $line; # Remove newline
257
+ print "$line\n";
258
+ }
259
+ close $fh;
260
+
261
+ # Open file for writing
262
+ open my $out, ">", "output.txt" or die "Cannot write: $!";
263
+ print $out "Hello, file!\n";
264
+ close $out;
265
+
266
+ # Open file for appending
267
+ open my $append, ">>", "log.txt" or die "Cannot append: $!";
268
+ print $append "Log entry\n";
269
+ close $append;
270
+
271
+ # Read entire file
272
+ open my $fh2, "<", "file.txt" or die $!;
273
+ my @lines = <$fh2>;
274
+ close $fh2;
275
+
276
+ # One-liner file reading
277
+ my @content = do {
278
+ open my $f, "<", "file.txt" or die $!;
279
+ <$f>;
280
+ };</syntax-code>
281
+
282
+ <div class="example">
283
+ <h2>References</h2>
284
+ <p class="description">Example:</p>
285
+
286
+ <syntax-code language="perl5"># Array reference
287
+ my @array = (1, 2, 3);
288
+ my $arrayref = \@array;
289
+ print $arrayref->[0]; # Access element
290
+ print @{$arrayref}; # Dereference
291
+
292
+ # Hash reference
293
+ my %hash = (a => 1, b => 2);
294
+ my $hashref = \%hash;
295
+ print $hashref->{a}; # Access value
296
+ print %{$hashref}; # Dereference
297
+
298
+ # Anonymous array
299
+ my $anonarray = [1, 2, 3];
300
+
301
+ # Anonymous hash
302
+ my $anonhash = {a => 1, b => 2};
303
+
304
+ # Reference to subroutine
305
+ my $subref = \&greet;
306
+ $subref->("Alice"); # Call through reference</syntax-code>
307
+
308
+ <div class="example">
309
+ <h2>Object-Oriented Programming</h2>
310
+ <p class="description">Example:</p>
311
+
312
+ <syntax-code language="perl5">package Person;
313
+
314
+ sub new {
315
+ my ($class, %args) = @_;
316
+ my $self = {
317
+ name => $args{name},
318
+ age => $args{age}
319
+ };
320
+ return bless $self, $class;
321
+ }
322
+
323
+ sub get_name {
324
+ my ($self) = @_;
325
+ return $self->{name};
326
+ }
327
+
328
+ sub set_age {
329
+ my ($self, $age) = @_;
330
+ $self->{age} = $age;
331
+ }
332
+
333
+ sub greet {
334
+ my ($self) = @_;
335
+ print "Hello, I'm ", $self->{name}, "\n";
336
+ }
337
+
338
+ package main;
339
+
340
+ my $person = Person->new(name => "Alice", age => 30);
341
+ $person->greet();
342
+ $person->set_age(31);</syntax-code>
343
+
344
+ <div class="example">
345
+ <h2>Map and Grep</h2>
346
+ <p class="description">Example:</p>
347
+
348
+ <syntax-code language="perl5">my @numbers = (1, 2, 3, 4, 5);
349
+
350
+ # Map: transform each element
351
+ my @doubled = map { $_ * 2 } @numbers;
352
+ my @squared = map { $_ ** 2 } @numbers;
353
+
354
+ # Grep: filter elements
355
+ my @evens = grep { $_ % 2 == 0 } @numbers;
356
+ my @large = grep { $_ > 3 } @numbers;
357
+
358
+ # Combine map and grep
359
+ my @result = map { $_ * 10 }
360
+ grep { $_ % 2 == 0 }
361
+ (1..10);</syntax-code>
362
+
363
+ <div class="example">
364
+ <h2>Error Handling</h2>
365
+ <p class="description">Example:</p>
366
+
367
+ <syntax-code language="perl5"># Die for fatal errors
368
+ die "Fatal error!" unless $condition;
369
+ die "Cannot open file: $!" unless open my $fh, "<", "file.txt";
370
+
371
+ # Warn for non-fatal warnings
372
+ warn "This is a warning\n" if $debug;
373
+
374
+ # Eval for exception handling
375
+ eval {
376
+ # Code that might die
377
+ die "Something went wrong";
378
+ };
379
+ if ($@) {
380
+ print "Caught error: $@\n";
381
+ }
382
+
383
+ # Try-catch pattern
384
+ eval {
385
+ risky_operation();
386
+ 1; # Return true if successful
387
+ } or do {
388
+ my $error = $@;
389
+ handle_error($error);
390
+ };</syntax-code>
391
+
392
+ <div class="example">
393
+ <h2>Special Operators</h2>
394
+ <p class="description">Example:</p>
395
+
396
+ <syntax-code language="perl5"># Spaceship operator (three-way comparison)
397
+ my $cmp = $a <=> $b; # Returns -1, 0, or 1
398
+
399
+ # String comparison
400
+ my $strcmp = $str1 cmp $str2;
401
+
402
+ # String concatenation
403
+ my $full = $first . " " . $last;
404
+
405
+ # String repetition
406
+ my $line = "-" x 40;
407
+
408
+ # Range operator
409
+ my @range = (1..10);
410
+ my @letters = ('a'..'z');
411
+
412
+ # Fat comma (auto-quotes left side)
413
+ my %hash = (
414
+ name => "Alice",
415
+ age => 30
416
+ );
417
+
418
+ # Defined-or operator
419
+ my $value = $input // "default";
420
+
421
+ # Smart match (Perl 5.10+)
422
+ if ($value ~~ @array) {
423
+ print "Value is in array\n";
424
+ }</syntax-code>
425
+
426
+ <div class="example">
427
+ <h2>Modules and Packages</h2>
428
+ <p class="description">Example:</p>
429
+
430
+ <syntax-code language="perl5">package MyModule;
431
+ use strict;
432
+ use warnings;
433
+
434
+ # Export functionality
435
+ require Exporter;
436
+ our @ISA = qw(Exporter);
437
+ our @EXPORT = qw(function1 function2);
438
+
439
+ sub function1 {
440
+ print "Function 1\n";
441
+ }
442
+
443
+ sub function2 {
444
+ print "Function 2\n";
445
+ }
446
+
447
+ 1; # Module must return true
448
+
449
+ package main;
450
+ use MyModule;
451
+ function1();</syntax-code>
452
+
453
+ <div class="example">
454
+ <h2>Built-in Functions</h2>
455
+ <p class="description">Example:</p>
456
+
457
+ <syntax-code language="perl5"># String functions
458
+ my $upper = uc("hello"); # Uppercase
459
+ my $lower = lc("HELLO"); # Lowercase
460
+ my $len = length("hello"); # String length
461
+ my $sub = substr("hello", 1, 3); # Substring
462
+ my $idx = index("hello", "ll"); # Find substring
463
+ my $rev = reverse("hello"); # Reverse string
464
+
465
+ # Array functions
466
+ my @sorted = sort @array;
467
+ my @reversed = reverse @array;
468
+ my $joined = join(",", @array);
469
+
470
+ # Math functions
471
+ my $abs = abs(-5);
472
+ my $sqrt = sqrt(16);
473
+ my $int = int(3.7);
474
+ my $rand = rand(10); # Random 0 to 10
475
+ my $sin = sin(3.14159);
476
+
477
+ # Type checking
478
+ my $isdef = defined $var;
479
+ my $exists = exists $hash{key};
480
+ my $type = ref $var; # Returns type of reference</syntax-code>
481
+ </div>
482
+
483
+ <script type="module">
484
+ import Syntax from '../Syntax.js';
485
+ await Syntax.highlight({ autoUpgrade: true });
486
+ </script>
487
+ </body>
488
+ </html>
@@ -0,0 +1,142 @@
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>PHP Script Examples - @socketry/syntax</title>
7
+ <link rel="stylesheet" href="examples.css">
8
+ </head>
9
+ <body>
10
+ <header>
11
+ <h1>PHP Script Examples</h1>
12
+ <p class="subtitle">PHP Script syntax highlighting</p>
13
+ </header>
14
+
15
+ <nav>
16
+ <a href="index.html">Back to Examples</a>
17
+ </nav>
18
+
19
+ <h1>PHP-Script Syntax Highlighting</h1>
20
+
21
+ <syntax-code language="php-script">
22
+ // Simple function
23
+ function fibonacci($n) {
24
+ $a = 0;
25
+ $b = 1;
26
+ $result = array();
27
+
28
+ for ($i = 0; $i < $n; $i++) {
29
+ $result[] = $a;
30
+ $temp = $a;
31
+ $a = $b;
32
+ $b = $temp + $b;
33
+ }
34
+
35
+ return $result;
36
+ }
37
+
38
+ /**
39
+ * A simple calculator class
40
+ */
41
+ class Calculator {
42
+ private $name;
43
+ protected $_history;
44
+ public $version = "1.0";
45
+
46
+ public function __construct($name) {
47
+ $this->name = $name;
48
+ $this->_history = array();
49
+ }
50
+
51
+ public function add($x, $y) {
52
+ $result = $x + $y;
53
+ $this->_history[] = "$x + $y = $result";
54
+ return $result;
55
+ }
56
+
57
+ public function multiply() {
58
+ $args = func_get_args();
59
+ $result = 1;
60
+ foreach ($args as $num) {
61
+ $result *= $num;
62
+ }
63
+ return $result;
64
+ }
65
+
66
+ static function create($name) {
67
+ return new Calculator($name);
68
+ }
69
+ }
70
+
71
+ # Example usage
72
+ $calc = new Calculator("MyCalc");
73
+ echo $calc->add(5, 3);
74
+ echo $calc->multiply(2, 3, 4);
75
+
76
+ // Control structures
77
+ if ($calc->version == "1.0") {
78
+ echo "Version 1.0";
79
+ } elseif ($calc->version > "1.0") {
80
+ echo "Newer version";
81
+ } else {
82
+ echo "Old version";
83
+ }
84
+
85
+ // Switch statement
86
+ switch ($calc->version) {
87
+ case "1.0":
88
+ echo "Version 1.0";
89
+ break;
90
+ default:
91
+ echo "Unknown version";
92
+ break;
93
+ }
94
+
95
+ // While loop
96
+ $i = 0;
97
+ while ($i < 10) {
98
+ $i++;
99
+ }
100
+
101
+ // Do-while loop
102
+ do {
103
+ $i--;
104
+ } while ($i > 0);
105
+
106
+ // String operations
107
+ $greeting = 'Hello';
108
+ $name = "World";
109
+ echo "$greeting, $name!";
110
+
111
+ // Array operations
112
+ $numbers = array(1, 2, 3, 4, 5);
113
+ $assoc = array(
114
+ 'key1' => 'value1',
115
+ 'key2' => 'value2'
116
+ );
117
+
118
+ // Operators and constants
119
+ $a = 1 + 2 * 3 / 4 - 5 % 2;
120
+ $b = $a & 0xFF | 0x10;
121
+ $c = ~$b;
122
+ $d = $a < $b ? true : false;
123
+ $e = !$d;
124
+
125
+ // Access modifiers in interfaces
126
+ interface Drawable {
127
+ public function draw();
128
+ }
129
+
130
+ abstract class Shape implements Drawable {
131
+ abstract protected function calculateArea();
132
+ }
133
+ </syntax-code>
134
+ </div>
135
+
136
+ <script type="module">
137
+ import Syntax from '../Syntax.js';
138
+
139
+ await Syntax.highlight({ autoUpgrade: true });
140
+ </script>
141
+ </body>
142
+ </html>
@@ -0,0 +1,95 @@
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>PHP Examples - @socketry/syntax</title>
7
+ <link rel="stylesheet" href="examples.css">
8
+ </head>
9
+ <body>
10
+ <header>
11
+ <h1>PHP Examples</h1>
12
+ <p class="subtitle">PHP syntax highlighting</p>
13
+ </header>
14
+
15
+ <nav>
16
+ <a href="index.html">Back to Examples</a>
17
+ </nav>
18
+
19
+ <h1>PHP Syntax Highlighting</h1>
20
+
21
+ <syntax-code language="php">
22
+ &lt;!DOCTYPE html&gt;
23
+ &lt;html&gt;
24
+ &lt;head&gt;
25
+ &lt;title&gt;&lt;?php echo $pageTitle; ?&gt;&lt;/title&gt;
26
+ &lt;/head&gt;
27
+ &lt;body&gt;
28
+ &lt;h1&gt;Welcome to My Site&lt;/h1&gt;
29
+
30
+ &lt;?php
31
+ // User information
32
+ $userName = "John Doe";
33
+ $userAge = 30;
34
+
35
+ function greetUser($name) {
36
+ return "Hello, " . $name . "!";
37
+ }
38
+ ?&gt;
39
+
40
+ &lt;div class="user-info"&gt;
41
+ &lt;p&gt;&lt;?php echo greetUser($userName); ?&gt;&lt;/p&gt;
42
+ &lt;p&gt;Age: &lt;?php echo $userAge; ?&gt;&lt;/p&gt;
43
+ &lt;/div&gt;
44
+
45
+ &lt;ul&gt;
46
+ &lt;?php
47
+ $items = array("Apple", "Banana", "Orange");
48
+ foreach ($items as $item) {
49
+ echo "&lt;li&gt;$item&lt;/li&gt;\n";
50
+ }
51
+ ?&gt;
52
+ &lt;/ul&gt;
53
+
54
+ &lt;?php if ($userAge &gt;= 18): ?&gt;
55
+ &lt;p&gt;You are an adult.&lt;/p&gt;
56
+ &lt;?php else: ?&gt;
57
+ &lt;p&gt;You are a minor.&lt;/p&gt;
58
+ &lt;?php endif; ?&gt;
59
+
60
+ &lt;table&gt;
61
+ &lt;tr&gt;
62
+ &lt;th&gt;Name&lt;/th&gt;
63
+ &lt;th&gt;Value&lt;/th&gt;
64
+ &lt;/tr&gt;
65
+ &lt;?php
66
+ for ($i = 1; $i &lt;= 5; $i++) {
67
+ echo "&lt;tr&gt;";
68
+ echo "&lt;td&gt;Item $i&lt;/td&gt;";
69
+ echo "&lt;td&gt;" . ($i * 10) . "&lt;/td&gt;";
70
+ echo "&lt;/tr&gt;";
71
+ }
72
+ ?&gt;
73
+ &lt;/table&gt;
74
+
75
+ &lt;?
76
+ // Short PHP tags
77
+ $shortTag = "This uses short tags";
78
+ echo $shortTag;
79
+ ?&gt;
80
+
81
+ &lt;footer&gt;
82
+ &lt;p&gt;Copyright &lt;?php echo date('Y'); ?&gt;&lt;/p&gt;
83
+ &lt;/footer&gt;
84
+ &lt;/body&gt;
85
+ &lt;/html&gt;
86
+ </syntax-code>
87
+ </div>
88
+
89
+ <script type="module">
90
+ import Syntax from '../Syntax.js';
91
+
92
+ await Syntax.highlight({ autoUpgrade: true });
93
+ </script>
94
+ </body>
95
+ </html>