From fb0f2cc718a54fd0774a0367e0a60718b5731de5 Mon Sep 17 00:00:00 2001 From: Fernando Jorge Mota Date: Sun, 13 Sep 2020 06:00:16 -0300 Subject: [PATCH] markup/highlight: Add support to linkable line anchors on Chroma Fixes #7622 --- .../en/content-management/syntax-highlighting.md | 2 ++ markup/highlight/config.go | 9 +++++++++ markup/highlight/highlight_test.go | 15 +++++++++++++++ 3 files changed, 26 insertions(+) diff --git a/docs/content/en/content-management/syntax-highlighting.md b/docs/content/en/content-management/syntax-highlighting.md index 0e5107f36a0..a518935b1d2 100644 --- a/docs/content/en/content-management/syntax-highlighting.md +++ b/docs/content/en/content-management/syntax-highlighting.md @@ -43,6 +43,8 @@ Options: * `linenos`: configure line numbers. Valid values are `true`, `false`, `table`, or `inline`. `false` will turn off line numbers if it's configured to be on in site config. {{< new-in "0.60.0" >}} `table` will give copy-and-paste friendly code blocks. * `hl_lines`: lists a set of line numbers or line number ranges to be highlighted. * `linenostart=199`: starts the line number count from 199. +* `anchorlinenos`: Configure anchors on line numbers. Valid values are `true` or `false`; +* `lineanchors`: Configure a prefix for the anchors on line numbers. Will be suffixed with `-`, so linking to the line number 1 with the option `lineanchors=prefix` adds the anchor `prefix-1` to the page. ### Example: Highlight Shortcode diff --git a/markup/highlight/config.go b/markup/highlight/config.go index 3f31e65eab6..a7c5ab4cb02 100644 --- a/markup/highlight/config.go +++ b/markup/highlight/config.go @@ -50,6 +50,10 @@ type Config struct { LineNos bool LineNumbersInTable bool + // When set, add links to line numbers + AnchorLineNos bool + LineAnchors string + // Start the line numbers from this value (default is 1). LineNoStart int @@ -63,12 +67,17 @@ type Config struct { } func (cfg Config) ToHTMLOptions() []html.Option { + var lineAnchors string + if cfg.LineAnchors != "" { + lineAnchors = cfg.LineAnchors + "-" + } var options = []html.Option{ html.TabWidth(cfg.TabWidth), html.WithLineNumbers(cfg.LineNos), html.BaseLineNumber(cfg.LineNoStart), html.LineNumbersInTable(cfg.LineNumbersInTable), html.WithClasses(!cfg.NoClasses), + html.LinkableLineNumbers(cfg.AnchorLineNos, lineAnchors), } if cfg.Hl_Lines != "" { diff --git a/markup/highlight/highlight_test.go b/markup/highlight/highlight_test.go index 3086792639d..f5992a5122a 100644 --- a/markup/highlight/highlight_test.go +++ b/markup/highlight/highlight_test.go @@ -79,6 +79,21 @@ User-Agent: foo c.Assert(result, qt.Not(qt.Contains), "class=\"lnt\"") }) + c.Run("Highlight lines, linenumbers default on, anchorlinenumbers default on", func(c *qt.C) { + cfg := DefaultConfig + cfg.NoClasses = false + cfg.LineNos = true + cfg.AnchorLineNos = true + h := New(cfg) + + result, _ := h.Highlight(lines, "bash", "") + c.Assert(result, qt.Contains, "2\n") + result, _ = h.Highlight(lines, "bash", "lineanchors=test") + c.Assert(result, qt.Contains, "2\n") + result, _ = h.Highlight(lines, "bash", "anchorlinenos=false,hl_lines=2") + c.Assert(result, qt.Not(qt.Contains), "id=\"2\"") + }) + c.Run("Highlight lines, linenumbers default on, linenumbers in table default off", func(c *qt.C) { cfg := DefaultConfig cfg.NoClasses = false