From 9e22bd6e2fc5145bfa364ce3aa523455df2d0e13 Mon Sep 17 00:00:00 2001 From: Pablo Santiago Blum de Aguiar <scorphus@gmail.com> Date: Thu, 9 Jan 2020 19:35:46 +0100 Subject: [PATCH] Consider baseLineNumber when calculating the column width --- formatters/html/html.go | 2 +- formatters/html/html_test.go | 45 ++++++++++++++++++++++++++++++++++++ 2 files changed, 46 insertions(+), 1 deletion(-) diff --git a/formatters/html/html.go b/formatters/html/html.go index d3fef2e..f0ef44a 100644 --- a/formatters/html/html.go +++ b/formatters/html/html.go @@ -188,7 +188,7 @@ func (f *Formatter) writeHTML(w io.Writer, style *chroma.Style, tokens []chroma. wrapInTable := f.lineNumbers && f.lineNumbersInTable lines := chroma.SplitTokensIntoLines(tokens) - lineDigits := len(fmt.Sprintf("%d", len(lines))) + lineDigits := len(fmt.Sprintf("%d", f.baseLineNumber+len(lines)-1)) highlightIndex := 0 if wrapInTable { diff --git a/formatters/html/html_test.go b/formatters/html/html_test.go index 5558b33..cd9ea98 100644 --- a/formatters/html/html_test.go +++ b/formatters/html/html_test.go @@ -108,6 +108,51 @@ func TestTableLineNumberNewlines(t *testing.T) { </span>`) } +func TestTableLineNumberSpacing(t *testing.T) { + testCases := []struct { + baseLineNumber int + expectedBuf string + }{{ + 7, + `<span class="lnt"> 7 +</span><span class="lnt"> 8 +</span><span class="lnt"> 9 +</span><span class="lnt">10 +</span><span class="lnt">11 +</span>`, + }, { + 6, + `<span class="lnt"> 6 +</span><span class="lnt"> 7 +</span><span class="lnt"> 8 +</span><span class="lnt"> 9 +</span><span class="lnt">10 +</span>`, + }, { + 5, + `<span class="lnt">5 +</span><span class="lnt">6 +</span><span class="lnt">7 +</span><span class="lnt">8 +</span><span class="lnt">9 +</span>`, + }} + for i, testCase := range testCases { + f := New( + WithClasses(true), + WithLineNumbers(true), + LineNumbersInTable(true), + BaseLineNumber(testCase.baseLineNumber), + ) + it, err := lexers.Get("go").Tokenise(nil, "package main\nfunc main()\n{\nprintln(`hello world`)\n}\n") + assert.NoError(t, err) + var buf bytes.Buffer + err = f.Format(&buf, styles.Fallback, it) + assert.NoError(t, err, "Test Case %d", i) + assert.Contains(t, buf.String(), testCase.expectedBuf, "Test Case %d", i) + } +} + func TestWithPreWrapper(t *testing.T) { wrapper := preWrapper{ start: func(code bool, styleAttr string) string {