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,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
|
+
<!DOCTYPE html>
|
|
23
|
+
<html>
|
|
24
|
+
<head>
|
|
25
|
+
<title><?php echo $pageTitle; ?></title>
|
|
26
|
+
</head>
|
|
27
|
+
<body>
|
|
28
|
+
<h1>Welcome to My Site</h1>
|
|
29
|
+
|
|
30
|
+
<?php
|
|
31
|
+
// User information
|
|
32
|
+
$userName = "John Doe";
|
|
33
|
+
$userAge = 30;
|
|
34
|
+
|
|
35
|
+
function greetUser($name) {
|
|
36
|
+
return "Hello, " . $name . "!";
|
|
37
|
+
}
|
|
38
|
+
?>
|
|
39
|
+
|
|
40
|
+
<div class="user-info">
|
|
41
|
+
<p><?php echo greetUser($userName); ?></p>
|
|
42
|
+
<p>Age: <?php echo $userAge; ?></p>
|
|
43
|
+
</div>
|
|
44
|
+
|
|
45
|
+
<ul>
|
|
46
|
+
<?php
|
|
47
|
+
$items = array("Apple", "Banana", "Orange");
|
|
48
|
+
foreach ($items as $item) {
|
|
49
|
+
echo "<li>$item</li>\n";
|
|
50
|
+
}
|
|
51
|
+
?>
|
|
52
|
+
</ul>
|
|
53
|
+
|
|
54
|
+
<?php if ($userAge >= 18): ?>
|
|
55
|
+
<p>You are an adult.</p>
|
|
56
|
+
<?php else: ?>
|
|
57
|
+
<p>You are a minor.</p>
|
|
58
|
+
<?php endif; ?>
|
|
59
|
+
|
|
60
|
+
<table>
|
|
61
|
+
<tr>
|
|
62
|
+
<th>Name</th>
|
|
63
|
+
<th>Value</th>
|
|
64
|
+
</tr>
|
|
65
|
+
<?php
|
|
66
|
+
for ($i = 1; $i <= 5; $i++) {
|
|
67
|
+
echo "<tr>";
|
|
68
|
+
echo "<td>Item $i</td>";
|
|
69
|
+
echo "<td>" . ($i * 10) . "</td>";
|
|
70
|
+
echo "</tr>";
|
|
71
|
+
}
|
|
72
|
+
?>
|
|
73
|
+
</table>
|
|
74
|
+
|
|
75
|
+
<?
|
|
76
|
+
// Short PHP tags
|
|
77
|
+
$shortTag = "This uses short tags";
|
|
78
|
+
echo $shortTag;
|
|
79
|
+
?>
|
|
80
|
+
|
|
81
|
+
<footer>
|
|
82
|
+
<p>Copyright <?php echo date('Y'); ?></p>
|
|
83
|
+
</footer>
|
|
84
|
+
</body>
|
|
85
|
+
</html>
|
|
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>
|