blob: 797745caed40d347a70dc74913531a3d3ab12c0f (
plain)
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
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
|
{{- $Content := .Content -}}
{{- .Scratch.Set "Content" $Content -}}
<!-- Link Headings to TOC -->
{{- $Content := .Scratch.Get "Content" -}}
{{- $enableTOC := .Params.toc | default .Site.Params.enableTOC -}}
{{- if and $enableTOC .Site.Params.linkHeadingsToTOC -}}
{{- $regexPatternLinkHeadings := `(<h[1-6] id="([^"]+)">)(.+)?(</h[1-6]+>)` -}}
{{- $regexReplacementLinkHeadings := `$1<a href="#contents:$2" class="headings">$3</a>$4` -}}
{{- $Content := $Content | replaceRE $regexPatternLinkHeadings $regexReplacementLinkHeadings | safeHTML -}}
{{- .Scratch.Set "Content" $Content -}}
{{- end -}}
<!-- Headings Anchor -->
{{- $Content := .Scratch.Get "Content" -}}
{{- if .Site.Params.enableHeadingsAnchor -}}
{{- with .Site.Params.headingsOpt -}}
{{- $headings := . -}}
{{- $.Scratch.Set "headings" $headings -}}
{{- end -}}
{{- $headings := .Scratch.Get "headings" -}}
{{- $headings := $headings | default "1-6" -}}
{{- with .Site.Params.anchorIcon -}}
{{- $icon := (replace (index $.Site.Data.SVG .) "icon" "icon anchor-icon") -}}
{{- $.Scratch.Set "icon" $icon -}}
{{- end -}}
{{- $icon := .Scratch.Get "icon" -}}
{{- $anchor := $icon | default .Site.Params.anchorSymbol | default "§" -}}
{{- if .Site.Params.enableAnchorLink -}}
{{- $replacement := (printf `$1<a href="#$2" class="anchor-link">%s</a>$3$4` $anchor) -}}
{{- $.Scratch.Set "replacement" $replacement -}}
{{- else -}}
{{- $replacement := (printf `$1<span class="anchor-link">%s</span>$3$4` $anchor) -}}
{{- $.Scratch.Set "replacement" $replacement -}}
{{- end -}}
{{- $replacement := .Scratch.Get "replacement" -}}
{{- $regexPatternHeadingsAnchor := (printf `(<h[%s] id="([^"]+)">)(.+)?(</h[%s]+>)` $headings $headings) -}}
{{- $regexReplacementHeadingsAnchor := $replacement -}}
{{- $Content := $Content | replaceRE $regexPatternHeadingsAnchor $regexReplacementHeadingsAnchor | safeHTML -}}
{{- .Scratch.Set "Content" $Content -}}
{{- end -}}
<!-- Drop Cap -->
{{- $Content := .Scratch.Get "Content" -}}
{{- if eq .Type "poetry" -}}
{{- $enableDropCap := .Params.dropCap | default false -}}
{{- .Scratch.Set "enableDropCap" $enableDropCap -}}
{{- else -}}
{{- $enableDropCap := .Params.dropCap | default .Site.Params.enableDropCap -}}
{{- .Scratch.Set "enableDropCap" $enableDropCap -}}
{{- end -}}
{{- $enableDropCap := .Scratch.Get "enableDropCap" -}}
{{- if $enableDropCap -}}
{{- $regexPatternDropCap := `(<p)(>)([^<])(.+(</p>|\n))` -}}
{{- $regexReplacementDropCap := `$1 style="text-indent:0"$2<span class="drop-cap">$3</span>$4` -}}
{{- $firstParagraphOld := (delimit (findRE $regexPatternDropCap .Content 1) " ") -}}
{{- $firstParagraphNew := (replaceRE $regexPatternDropCap $regexReplacementDropCap $firstParagraphOld) -}}
{{- $Content := replace $Content $firstParagraphOld $firstParagraphNew | safeHTML -}}
{{- .Scratch.Set "Content" $Content -}}
{{- end -}}
<!-- Drop Cap After `<hr />` -->
{{- $Content := .Scratch.Get "Content" -}}
{{- if ne .Type "poetry" -}}
{{- if and .Site.Params.enableDropCap (.Params.dropCapAfterHr | default .Site.Params.enableDropCapAfterHr) -}}
{{- if .Params.deleteHrBeforeDropCap | default .Site.Params.deleteHrBeforeDropCap -}}
{{- $replacement := `$2 style="text-indent:0"$3<span class="drop-cap">$4</span>$5` -}}
{{- $.Scratch.Set "replacement" $replacement -}}
{{- else -}}
{{- $replacement := `$1$2 style="text-indent:0"$3<span class="drop-cap">$4</span>$5` -}}
{{- $.Scratch.Set "replacement" $replacement -}}
{{- end -}}
{{- $replacement := .Scratch.Get "replacement" -}}
{{- $regexPatternDropCapAfterHr := `(\n<hr />\n)(\n<p)(>)([^<])(.+(</p>|\n))` -}}
{{- $regexReplacementDropCapAfterHr := $replacement -}}
{{- $Content := $Content | replaceRE $regexPatternDropCapAfterHr $regexReplacementDropCapAfterHr | safeHTML -}}
{{- .Scratch.Set "Content" $Content -}}
{{- end -}}
{{- end -}}
<!-- New Markdown Syntax: Emphasis Point `..text..` -->
{{- $Content := .Scratch.Get "Content" -}}
{{- if .Site.Params.enableEmphasisPoint -}}
{{- $regexPatternEmphasisPoint := `([^\.\x60])\.\.([^\.\s\n\/\\]+)\.\.([^\.\x60])` -}}
{{- $regexReplacementEmphasisPoint := `$1<strong class="emphasis-point">$2</strong>$3` -}}
{{- $Content := $Content | replaceRE $regexPatternEmphasisPoint $regexReplacementEmphasisPoint | safeHTML -}}
{{- .Scratch.Set "Content" $Content -}}
{{- end -}}
<!-- Footnote Ref with Square Brackets `[]` -->
{{- $Content := .Scratch.Get "Content" -}}
{{- if .Site.Params.squareBrackets -}}
{{- $regexPatternFootnoteRef := `(<sup class="footnote-ref" id="fnref:\d+"><a href="#fn:\d+">)(\d+)(</a></sup>)` -}}
{{- $regexReplacementFootnoteRef := `$1[$2]$3` -}}
{{- $Content := $Content | replaceRE $regexPatternFootnoteRef $regexReplacementFootnoteRef | safeHTML -}}
{{- .Scratch.Set "Content" $Content -}}
{{- end -}}
<!-- Image & Video Footnote -->
{{- $Content := .Scratch.Get "Content" -}}
{{- $regexPatternFootnoteImage := `(<sup)(.+</sup><(img|video))` -}}
{{- $regexReplacementFootnoteImage := `$1 style="float:right"$2` -}}
{{- $Content := $Content | replaceRE $regexPatternFootnoteImage $regexReplacementFootnoteImage | safeHTML -}}
{{- .Scratch.Set "Content" $Content -}}
<!-- Delete Footnote `<hr />` -->
{{- $Content := .Scratch.Get "Content" -}}
{{- if .Site.Params.insertHrBySelf -}}
{{- $regexPatternDeleteHr := `<hr />\n(<div class="footnotes">)` -}}
{{- $regexReplacementDeleteHr := `$1` -}}
{{- $Content := $Content | replaceRE $regexPatternDeleteHr $regexReplacementDeleteHr | safeHTML -}}
{{- .Scratch.Set "Content" $Content -}}
{{- end -}}
<!-- Replace `footnoteReturnLinkContents` with icon -->
{{- $Content := .Scratch.Get "Content" -}}
{{- with .Site.Params.footnoteReturnLinkIcon -}}
{{- $icon := (replace (index $.Site.Data.SVG .) "icon" "icon footnote-icon") -}}
{{- $replacement := (printf `${1}%v</$3` $icon) | safeHTML -}}
{{- $regexPatternfootnoteReturnLinkIcon := `(href="#fnref[^>]+>)([^a]+)(.+)` -}}
{{- $regexReplacementfootnoteReturnLinkIcon := $replacement -}}
{{- $Content := $Content | replaceRE $regexPatternfootnoteReturnLinkIcon $regexReplacementfootnoteReturnLinkIcon | safeHTML -}}
{{- $.Scratch.Set "Content" $Content -}}
{{- end -}}
<!-- Video -->
{{- $Content := .Scratch.Get "Content" -}}
{{- $regexPatternVideo := `(<img)( src="[^"]+\.(mp4|webm|ogg)")( alt="[^"]+.)?(.+)?( />)` -}}
{{- $regexReplacementVideo := `<video$2$5 controls></video>` -}}
{{- $Content := $Content | replaceRE $regexPatternVideo $regexReplacementVideo | safeHTML -}}
{{- .Scratch.Set "Content" $Content -}}
<!-- Image & Video Caption -->
{{- $Content := .Scratch.Get "Content" -}}
{{- if .Site.Params.enableCaption -}}
{{- $captionPrefix := .Site.Params.captionPrefix -}}
{{- $regexPatternCaption := `(<(img|video).+) title="([^"]+)"( controls)?( />|>)(</video>)?` -}}
{{- $regexReplacementCaption := (printf `$1$4$5$6<span class="caption">%s$3</span>` $captionPrefix) -}}
{{- $Content := $Content | replaceRE $regexPatternCaption $regexReplacementCaption | safeHTML -}}
{{- .Scratch.Set "Content" $Content -}}
{{- end -}}
<!-- Image Hosting -->
{{- $Content := .Scratch.Get "Content" -}}
{{- if and .Site.Params.enableImageHost (eq hugo.Environment "production") -}}
{{- $hostURL := .Site.Params.imageHostURL -}}
{{- $temps := findRE `<(img) src="/?([^":]+)` $Content -}}
{{- with $temps -}}
{{- range . -}}
{{- if not (in (slice "http" "ttps") (substr . -1 4)) -}}
{{- $url := replaceRE `<(img) src="/?([^":]+)` `$2` . -}}
{{- $prefix := replaceRE `(<(img) src=")/?([^":]+)` `$1` . -}}
{{- $replacement := (printf `%s%s%s` $prefix $hostURL $url) -}}
{{- $Content := ($.Scratch.Get "Content") | replaceRE . $replacement | safeHTML -}}
{{- $.Scratch.Set "Content" $Content -}}
{{- end -}}
{{- end -}}
{{- end -}}
{{- end -}}
<!-- Video Hosting -->
{{- $Content := .Scratch.Get "Content" -}}
{{- if and .Site.Params.enableVideoHost (eq hugo.Environment "production") -}}
{{- $hostURL := .Site.Params.videoHostURL -}}
{{- $temps := findRE `<(video) src="/?([^":]+)` $Content -}}
{{- with $temps -}}
{{- range . -}}
{{- if not (in (slice "http" "ttps") (substr . -1 4)) -}}
{{- $url := replaceRE `<(video) src="/?([^":]+)` `$2` . -}}
{{- $prefix := replaceRE `(<(video) src=")/?([^":]+)` `$1` . -}}
{{- $replacement := (printf `%s%s%s` $prefix $hostURL $url) -}}
{{- $Content := ($.Scratch.Get "Content") | replaceRE . $replacement | safeHTML -}}
{{- $.Scratch.Set "Content" $Content -}}
{{- end -}}
{{- end -}}
{{- end -}}
{{- end -}}
<!-- Task List -->
{{- $Content := .Scratch.Get "Content" -}}
{{- $regexPatternTaskList := `(<ol |<ul )(class="task-list">\n<li><label>)` -}}
{{- $regexReplacementTaskList := `${1}style="list-style:none" $2` -}}
{{- $Content := $Content | replaceRE $regexPatternTaskList $regexReplacementTaskList | safeHTML -}}
{{- .Scratch.Set "Content" $Content -}}
<!-- Paragraph Indent -->
{{- $Content := .Scratch.Get "Content" -}}
{{- if ne .Type "poetry" -}}
{{- if (and .Site.Params.enableParagraphIndent .Params.indent) | default (and .Site.Params.enableParagraphIndent (eq .Site.Params.paragraphStyle "indent")) -}}
{{- $regexPatternIndent := `(<p)(>)(.+<br />)` -}}
{{- $regexReplacementIndent := `$1 style="text-indent:0;padding-left:2em;margin:1em 0"$2$3` -}}
{{- $Content := $Content | replaceRE $regexPatternIndent $regexReplacementIndent | safeHTML -}}
{{- .Scratch.Set "Content" $Content -}}
{{- end -}}
{{- end -}}
<!-- Dark Mode -->
{{- if .Site.Params.enableHighlight -}}
{{- if and .Site.Params.enableDarkMode (eq .Site.Params.defaultTheme "dark") -}}
{{- $Content := .Scratch.Get "Content" -}}
{{- $regexPatternDarkmode := `(<pre class=")(chroma)(">)` -}}
{{- $regexReplacementDarkmode := `${1}chroma-dark${3}` -}}
{{- $Content := $Content | replaceRE $regexPatternDarkmode $regexReplacementDarkmode | safeHTML -}}
{{- .Scratch.Set "Content" $Content -}}
{{- end -}}
{{- end -}}
<!-- Medium Zoom -->
{{- $Content := .Scratch.Get "Content" -}}
{{- if .Site.Params.enableMediumZoom -}}
{{- $regexPatternMediumZoom := `(<img)(.+)( />)` -}}
{{- $regexReplacementMediumZoom := `$1$2 data-zoomable$3` -}}
{{- $Content := $Content | replaceRE $regexPatternMediumZoom $regexReplacementMediumZoom | safeHTML -}}
{{- .Scratch.Set "Content" $Content -}}
{{- end -}}
<!-- Custom -->
{{- partial "custom/content.html" . -}}
<!-- Final Content -->
{{- $Content := .Scratch.Get "Content" -}}
{{- .Scratch.Set "Content" $Content -}}
|