summaryrefslogtreecommitdiffstats
path: root/markup
diff options
context:
space:
mode:
authorBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>2022-03-09 10:45:02 +0100
committerBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>2022-03-09 11:33:13 +0100
commita360cab75a073c2a8d47dcd27f52a6847e8d8d13 (patch)
tree46d139073a7e77950698f8dcd1172201b31e1ee1 /markup
parentc97fed08f90b3758c85d3f67f038cd1f794d16fc (diff)
markup/highlight: Add hl_inline option
If set to true, the highlighted code will not be wrapped in any div. Closes #9442
Diffstat (limited to 'markup')
-rw-r--r--markup/highlight/config.go3
-rw-r--r--markup/highlight/highlight.go17
-rw-r--r--markup/highlight/integration_test.go53
-rw-r--r--markup/internal/attributes/attributes.go1
4 files changed, 72 insertions, 2 deletions
diff --git a/markup/highlight/config.go b/markup/highlight/config.go
index 1142c5e11..46ef79071 100644
--- a/markup/highlight/config.go
+++ b/markup/highlight/config.go
@@ -72,6 +72,9 @@ type Config struct {
// A space separated list of line numbers, e.g. “3-8 10-20”.
Hl_Lines string
+ // If set, the markup will not be wrapped in any container.
+ Hl_inline bool
+
// A parsed and ready to use list of line ranges.
HL_lines_parsed [][2]int `json:"-"`
diff --git a/markup/highlight/highlight.go b/markup/highlight/highlight.go
index 892cb72ee..7d108ebe1 100644
--- a/markup/highlight/highlight.go
+++ b/markup/highlight/highlight.go
@@ -75,11 +75,24 @@ func (h chromaHighlighter) Highlight(code, lang string, opts interface{}) (strin
}
var b strings.Builder
- if _, _, err := highlight(&b, code, lang, nil, cfg); err != nil {
+ low, high, err := highlight(&b, code, lang, nil, cfg)
+
+ if err != nil {
return "", err
}
- return b.String(), nil
+ if !cfg.Hl_inline {
+ return b.String(), nil
+ }
+
+ hr := HightlightResult{
+ highlighted: template.HTML(b.String()),
+ innerLow: low,
+ innerHigh: high,
+ }
+
+ return string(hr.Inner()), nil
+
}
func (h chromaHighlighter) HighlightCodeBlock(ctx hooks.CodeblockContext, opts interface{}) (HightlightResult, error) {
diff --git a/markup/highlight/integration_test.go b/markup/highlight/integration_test.go
new file mode 100644
index 000000000..93d9a1db0
--- /dev/null
+++ b/markup/highlight/integration_test.go
@@ -0,0 +1,53 @@
+// Copyright 2022 The Hugo Authors. All rights reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package highlight_test
+
+import (
+ "testing"
+
+ "github.com/gohugoio/hugo/hugolib"
+)
+
+func TestHighlightInline(t *testing.T) {
+ t.Parallel()
+
+ files := `
+-- config.toml --
+[markup]
+[markup.highlight]
+codeFences = true
+noClasses = false
+-- content/p1.md --
+---
+title: "p1"
+---
+
+Inline:{{< highlight emacs "hl_inline=true" >}}(message "this highlight shortcode"){{< /highlight >}}:End.
+
+-- layouts/_default/single.html --
+{{ .Content }}
+`
+
+ b := hugolib.NewIntegrationTestBuilder(
+ hugolib.IntegrationTestConfig{
+ T: t,
+ TxtarString: files,
+ NeedsOsFS: false,
+ },
+ ).Build()
+
+ b.AssertFileContent("public/p1/index.html", `
+ <p>Inline:<span class="line"><span class="cl"><span class="p">(</span><span class="nf">message</span> <span class="s">&#34;this highlight shortcode&#34;</span><span class="p">)</span></span></span>:End.</p>
+ `)
+}
diff --git a/markup/internal/attributes/attributes.go b/markup/internal/attributes/attributes.go
index a20690c4c..0351bb54c 100644
--- a/markup/internal/attributes/attributes.go
+++ b/markup/internal/attributes/attributes.go
@@ -38,6 +38,7 @@ var chromaHightlightProcessingAttributes = map[string]bool{
"nohl": true,
"style": true,
"tabWidth": true,
+ "hl_inline": true, // New in 0.94.0.
}
func init() {