Merge pull request #3 from mvdan/crlf
commit d583ad61f3ab768fe29764a71c3a9bc709222734 · parent 53baa42029 · parent b3427823eb
· browse this tree
Eric Myhre, 2021-09-08 12:00:37 UTC
add support for parsing CRLF line endings
diff --git a/read.go b/read.go index 3e84482..b20244c 100644 --- a/read.go +++ b/read.go @@ -27,9 +27,10 @@ func ReadFile(name string) (*Document, error) { } var ( - sigilLineBreak = []byte{'\n'} - sigilCodeBlock = []byte("```") - sigilTestmark = []byte("[testmark]:# ") + sigilLineBreak = []byte{'\n'} + sigilCarriageReturn = []byte{'\r'} + sigilCodeBlock = []byte("```") + sigilTestmark = []byte("[testmark]:# ") ) func Parse(data []byte) (*Document, error) { @@ -51,6 +52,9 @@ func Parse(data []byte) (*Document, error) { var codeBlockOffset int hunkInProgress := DocHunk{LineStart: -1} for i, line := range doc.Lines { + // Support CRLF line endings, for Windows. + line = bytes.TrimSuffix(line, sigilCarriageReturn) + // Check for transition in or out of codeblock. if bytes.HasPrefix(line, sigilCodeBlock) { switch inCodeBlock { diff --git a/read_test.go b/read_test.go index 961b611..f8c862e 100644 --- a/read_test.go +++ b/read_test.go @@ -1,7 +1,8 @@ package testmark import ( - "fmt" + "bytes" + "io/ioutil" "path/filepath" "testing" ) @@ -9,11 +10,28 @@ import ( func TestRead(t *testing.T) { testdata, err := filepath.Abs("testdata") if err != nil { - panic(err) + t.Fatal(err) } doc, err := ReadFile(filepath.Join(testdata, "example.md")) - fmt.Printf("err: %v\n", err) + if err != nil { + t.Fatal(err) + } + for _, hunk := range doc.DataHunks { + t.Logf("hunk %q is on lines %d:%d, has body %q\n", hunk.Name, hunk.LineStart+1, hunk.LineEnd+1, string(hunk.Body)) + } +} + +func TestParseCRLF(t *testing.T) { + input, err := ioutil.ReadFile(filepath.Join("testdata", "example.md")) + if err != nil { + t.Fatal(err) + } + input = bytes.ReplaceAll(input, []byte("\n"), []byte("\r\n")) + doc, err := Parse(input) + if err != nil { + t.Fatal(err) + } for _, hunk := range doc.DataHunks { - fmt.Printf("hunk %q is on lines %d:%d, has body %q\n", hunk.Name, hunk.LineStart+1, hunk.LineEnd+1, string(hunk.Body)) + t.Logf("hunk %q is on lines %d:%d, has body %q\n", hunk.Name, hunk.LineStart+1, hunk.LineEnd+1, string(hunk.Body)) } }