hugo

Unnamed repository; edit this file 'description' to name the repository.

git clone git://git.shimmy1996.com/hugo.git
commit b725253f9e3033e18bd45096c0622e6fb7b1ff79
parent 35dedf15c04a605df4d4a09263b0b299e5161f86
Author: Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Date:   Sat, 20 Mar 2021 16:36:30 +0100

Attributes for code fences should be placed after the lang indicator only

Fixes #8313

Diffstat:
Mdocs/content/en/getting-started/configuration-markup.md | 8++++++++
Mmarkup/goldmark/convert_test.go | 12+++++++++++-
Mmarkup/goldmark/internal/extensions/attributes/attributes.go | 12+++++++++---
3 files changed, 28 insertions(+), 4 deletions(-)
diff --git a/docs/content/en/getting-started/configuration-markup.md b/docs/content/en/getting-started/configuration-markup.md
@@ -68,6 +68,14 @@ There are some current limitations: For tables you can currently only apply it t
 {.list}
 ```
 
+Note that attributes in [code fences](/content-management/syntax-highlighting/#highlighting-in-code-fences) must come after the opening tag, with any other highlighting processing instruction, e.g.:
+
+````
+```go {.myclass linenos=table,hl_lines=[8,"15-17"],linenostart=199}
+// ... code
+```
+````
+
 autoHeadingIDType ("github") {{< new-in "0.62.2" >}}
 : The strategy used for creating auto IDs (anchor names). Available types are `github`, `github-ascii` and `blackfriday`. `github` produces GitHub-compatible IDs, `github-ascii` will drop any non-Ascii characters after accent normalization, and `blackfriday` will make the IDs work as with [Blackfriday](#blackfriday), the default Markdown engine before Hugo 0.60. Note that if Goldmark is your default Markdown engine, this is also the strategy used in the [anchorize](/functions/anchorize/) template func.
 
diff --git a/markup/goldmark/convert_test.go b/markup/goldmark/convert_test.go
@@ -242,10 +242,20 @@ func TestConvertAttributes(t *testing.T) {
 				withBlockAttributes(conf)
 				conf.Highlight.CodeFences = true
 			},
-			"```bash\necho 'foo';\n````\n{.myclass id=\"myid\"}",
+			"```bash {.myclass id=\"myid\"}\necho 'foo';\n````\n",
 			"<div class=\"highlight myclass\" id=\"myid\"><pre style",
 		},
 		{
+			"Code block, CodeFences=true,linenos=table",
+			func(conf *markup_config.Config) {
+				withBlockAttributes(conf)
+				conf.Highlight.CodeFences = true
+			},
+			"```bash {linenos=table .myclass id=\"myid\"}\necho 'foo';\n````\n{ .adfadf }",
+			[]string{"div class=\"highlight myclass\" id=\"myid\"><div s",
+				"table style"},
+		},
+		{
 			"Paragraph",
 			withBlockAttributes,
 			"\nHi there.\n{.myclass }",
diff --git a/markup/goldmark/internal/extensions/attributes/attributes.go b/markup/goldmark/internal/extensions/attributes/attributes.go
@@ -97,10 +97,16 @@ type transformer struct{}
 func (a *transformer) Transform(node *ast.Document, reader text.Reader, pc parser.Context) {
 	var attributes = make([]ast.Node, 0, 500)
 	ast.Walk(node, func(node ast.Node, entering bool) (ast.WalkStatus, error) {
-		if entering && node.Kind() == kindAttributesBlock && !node.HasBlankPreviousLines() {
-			attributes = append(attributes, node)
-			return ast.WalkSkipChildren, nil
+		if entering && node.Kind() == kindAttributesBlock {
+			// Attributes for fenced code blocks are handled in their own extension,
+			// but note that we currently only support code block attributes when
+			// CodeFences=true.
+			if node.PreviousSibling().Kind() != ast.KindFencedCodeBlock && !node.HasBlankPreviousLines() {
+				attributes = append(attributes, node)
+				return ast.WalkSkipChildren, nil
+			}
 		}
+
 		return ast.WalkContinue, nil
 	})