-
-
Notifications
You must be signed in to change notification settings - Fork 8
Expand file tree
/
Copy pathHTML-Language.ps1
More file actions
95 lines (86 loc) · 2.71 KB
/
HTML-Language.ps1
File metadata and controls
95 lines (86 loc) · 2.71 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
function Language.HTML {
<#
.SYNOPSIS
HTML PipeScript Transpiler.
.DESCRIPTION
Allows PipeScript to generate HTML.
Multiline comments blocks like this ```<!--{}-->``` will be treated as blocks of PipeScript.
JavaScript/CSS comment blocks like ```/*{}*/``` will also be treated as blocks of PipeScript.
.Example
.> {
$HtmlWithInlinePipeScript = @'
<html>
<head>
<title>
Joke of the Day
</title>
<style>
.Joke {
font-size: 1.5em;
width: 100%;
}
.JokeSetup {
font-size: 1.1em;
text-align: center;
}
.JokePunchLine {
font-size: 1.25em;
text-align: center;
}
.Datestamp {
position:fixed;
bottom: 0;
left: 0;
}
</style>
</head>
<body>
<!--{
"<div class='Joke'>" + $(
Invoke-RestMethod -Uri 'https://v2.jokeapi.dev/joke/Any' |
Foreach-Object {
if ($_.Joke) { $_.Joke}
elseif ($_.Setup -and $_.Delivery) {
"<div class='JokeSetup'>" + $_.Setup + "</div>"
"<div class='JokePunchline'>" + $_.Delivery + "</div>"
}
}
) + "</div>"
"<div class='Datestamp'>" +
"Last Updated:" +
(Get-Date | Out-String) +
"</div>"
}-->
</body>
</html>
'@
[OutputFile(".\Index.ps.html")]$HtmlWithInlinePipeScript
}
$htmlFile = .> .\Index.ps.html
#>
[ValidatePattern('\.htm{0,1}')]
param()
$this = $myInvocation.MyCommand
if (-not $this.Self) {
$languageDefinition = New-Module {
param(
)
$FilePattern = '\.htm{0,1}'
# We start off by declaring a number of regular expressions:
$startComment = '(?><\!--|/\*)' # * Start Comments ```<!--```
$endComment = '(?>-->|\*/)' # * End Comments ```-->```
$Whitespace = '[\s\n\r]{0,}'
# * StartRegex ```$StartComment + '{' + $Whitespace```
$StartPattern = "(?<PSStart>${startComment}\{$Whitespace)"
# * EndRegex ```$whitespace + '}' + $EndComment```
$EndPattern = "(?<PSEnd>$Whitespace\}${endComment}\s{0,})"
$LanguageName = 'HTML'
Export-ModuleMember -Variable * -Function * -Alias *
} -AsCustomObject
$languageDefinition.pstypenames.clear()
$languageDefinition.pstypenames.add("Language")
$languageDefinition.pstypenames.add("Language.HTML")
$this.psobject.properties.add([PSNoteProperty]::new('Self',$languageDefinition))
}
$this.Self
}