Skip to content

Commit

Permalink
fix parsing CRLF files, part 2
Browse files Browse the repository at this point in the history
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.
  • Loading branch information
mvdan committed Sep 20, 2021
1 parent b64e21b commit 97e3a9a
Showing 1 changed file with 4 additions and 4 deletions.
8 changes: 4 additions & 4 deletions read.go
Original file line number Diff line number Diff line change
Expand Up @@ -51,17 +51,17 @@ 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) {
switch inCodeBlock {
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
Expand Down Expand Up @@ -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
}

0 comments on commit 97e3a9a

Please sign in to comment.