From 97e3a9aab41ab49dbe6e87036e6ae8ff3d7e363e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Mart=C3=AD?= Date: Mon, 13 Sep 2021 15:55:58 +0200 Subject: [PATCH] fix parsing CRLF files, part 2 I hadn't noticed we also used len(line) to work out offsets. Since those are offsets into the input file, they must use the original line length before trimming. --- read.go | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/read.go b/read.go index b20244c..c9a2a2f 100644 --- a/read.go +++ b/read.go @@ -51,9 +51,9 @@ func Parse(data []byte) (*Document, error) { var expectCodeBlock bool var codeBlockOffset int hunkInProgress := DocHunk{LineStart: -1} - for i, line := range doc.Lines { + for i, origLine := range doc.Lines { // Support CRLF line endings, for Windows. - line = bytes.TrimSuffix(line, sigilCarriageReturn) + line := bytes.TrimSuffix(origLine, sigilCarriageReturn) // Check for transition in or out of codeblock. if bytes.HasPrefix(line, sigilCodeBlock) { @@ -61,7 +61,7 @@ func Parse(data []byte) (*Document, error) { case false: // starting a block if expectCodeBlock { hunkInProgress.BlockTag = string(line[len(sigilCodeBlock):]) - codeBlockOffset = offset + len(line) + 1 + codeBlockOffset = offset + len(origLine) + 1 } expectCodeBlock = false case true: // ending a block @@ -120,7 +120,7 @@ func Parse(data []byte) (*Document, error) { next: // Track total offset, so we can use it to subslice out document hunks. // Mind: this is going to be off by one at the very end of the file... but that turns out never to matter to us. - offset += len(line) + 1 + offset += len(origLine) + 1 } return &doc, nil }