blob: 3d1cd09a5d49cbf884894d2dab4abe051f3ec555 (
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
|
{{- /*
Usage: `scss-docs name="name" file="file/_location.scss"`
Prints everything between `// scss-docs-start "name"` and `// scss-docs-end "name"`
comments in the docs.
Optional parameters:
* strip-default: Remove the ` !default` flag from variable assignments - default: `true`
*/ -}}
{{- $name := .Get "name" -}}
{{- $file := .Get "file" -}}
{{- $strip_default := .Get "strip-default" | default "true" -}}
{{- /* If any parameters are missing, print an error and exit */ -}}
{{- if or (not $name) (not $file) -}}
{{- errorf "%s: %q: Missing required parameters! Got: name=%q file=%q!" .Position .Name $name $file -}}
{{- else -}}
{{- $capture_start := printf "// scss-docs-start %s\n" $name -}}
{{- $capture_end := printf "// scss-docs-end %s" $name -}}
{{- $regex := printf `%s((?:.|\n)*)%s` $capture_start $capture_end -}}
{{- /*
TODO: figure out why we can't do the following and get the first group (the only capturing one)...
$regex := printf `(?:// scss-docs-start %s\n)((?:.|\n)*)(?:\n// scss-docs-end %s)` $name $name
*/ -}}
{{- $match := findRE $regex (readFile $file) -}}
{{- $match = index $match 0 -}}
{{- if not $match -}}
{{- errorf "%s: %q: Got no matches for name=%q in file=%q!" .Position .Name $name $file -}}
{{- end -}}
{{- $match = replace $match $capture_start "" -}}
{{- $match = replace $match $capture_end "" -}}
{{- if (ne $strip_default "false") -}}
{{- $match = replace $match " !default" "" -}}
{{- end -}}
{{- highlight $match "scss" "" -}}
{{- end -}}
|