summaryrefslogtreecommitdiffstats
path: root/hugolib/shortcode.go
diff options
context:
space:
mode:
authorBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>2022-05-28 13:18:50 +0200
committerBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>2022-05-30 11:32:55 +0200
commitd2cfaede5be420c7d8b701d97b98bc61b87e46d5 (patch)
treedb0926a42c3b53df10b87671d1733391b831b517 /hugolib/shortcode.go
parent322d19a81fedbf423a047bdf286499d2e25d14be (diff)
Improve shortcode indentation handling
* Record the leading whitespace (tabs, spaces) before the shortcode when parsing the page. * Apply that indentation to the rendered result of shortcodes without inner content (where the user will apply indentation). Fixes #9946
Diffstat (limited to 'hugolib/shortcode.go')
-rw-r--r--hugolib/shortcode.go27
1 files changed, 27 insertions, 0 deletions
diff --git a/hugolib/shortcode.go b/hugolib/shortcode.go
index e718d861a..b822ecfe3 100644
--- a/hugolib/shortcode.go
+++ b/hugolib/shortcode.go
@@ -170,6 +170,8 @@ type shortcode struct {
ordinal int
err error
+ indentation string // indentation from source.
+
info tpl.Info // One of the output formats (arbitrary)
templs []tpl.Template // All output formats
@@ -398,6 +400,22 @@ func renderShortcode(
return "", false, fe
}
+ if len(sc.inner) == 0 && len(sc.indentation) > 0 {
+ b := bp.GetBuffer()
+ i := 0
+ text.VisitLinesAfter(result, func(line string) {
+ // The first line is correctly indented.
+ if i > 0 {
+ b.WriteString(sc.indentation)
+ }
+ i++
+ b.WriteString(line)
+ })
+
+ result = b.String()
+ bp.PutBuffer(b)
+ }
+
return result, hasVariants, err
}
@@ -447,6 +465,15 @@ func (s *shortcodeHandler) extractShortcode(ordinal, level int, pt *pageparser.I
}
sc := &shortcode{ordinal: ordinal}
+ // Back up one to identify any indentation.
+ if pt.Pos() > 0 {
+ pt.Backup()
+ item := pt.Next()
+ if item.IsIndentation() {
+ sc.indentation = string(item.Val)
+ }
+ }
+
cnt := 0
nestedOrdinal := 0
nextLevel := level + 1