diff options
Diffstat (limited to 'parser')
-rw-r--r-- | parser/page.go | 23 | ||||
-rw-r--r-- | parser/parse_frontmatter_test.go | 5 |
2 files changed, 14 insertions, 14 deletions
diff --git a/parser/page.go b/parser/page.go index 77d40a602..21014888f 100644 --- a/parser/page.go +++ b/parser/page.go @@ -5,6 +5,7 @@ import ( "bytes" "fmt" "io" + "regexp" "unicode" ) @@ -22,13 +23,9 @@ const ( ) var ( - delims = [][]byte{ - []byte(YAML_DELIM_UNIX), - []byte(YAML_DELIM_DOS), - []byte(TOML_DELIM_UNIX), - []byte(TOML_DELIM_DOS), - []byte(JSON_LEAD), - } + delims = regexp.MustCompile( + "^(" + regexp.QuoteMeta(YAML_DELIM) + `\s*\n|` + regexp.QuoteMeta(TOML_DELIM) + `\s*\n|` + regexp.QuoteMeta(JSON_LEAD) + ")", + ) UnixEnding = []byte("\n") DosEnding = []byte("\r\n") @@ -148,13 +145,7 @@ func shouldRender(lead []byte) (frontmatter bool) { } func isFrontMatterDelim(data []byte) bool { - for _, d := range delims { - if bytes.HasPrefix(data, d) { - return true - } - } - - return false + return delims.Match(data) } func determineDelims(firstLine []byte) (left, right []byte) { @@ -217,6 +208,7 @@ func extractFrontMatterDelims(r *bufio.Reader, left, right []byte) (fm FrontMatt case left[len(left)-1]: if sameDelim { // YAML, TOML case if bytes.HasSuffix(buf.Bytes(), left) { + nextByte: c, err = r.ReadByte() if err != nil { // It is ok that the end delimiter ends with EOF @@ -227,6 +219,9 @@ func extractFrontMatterDelims(r *bufio.Reader, left, right []byte) (fm FrontMatt switch c { case '\n': // ok + case ' ': + // Consume this byte and try to match again + goto nextByte case '\r': if err = buf.WriteByte(c); err != nil { return nil, err diff --git a/parser/parse_frontmatter_test.go b/parser/parse_frontmatter_test.go index deb885f12..9ed2d8e5f 100644 --- a/parser/parse_frontmatter_test.go +++ b/parser/parse_frontmatter_test.go @@ -200,6 +200,8 @@ func TestPageHasFrontMatter(t *testing.T) { {[]byte("---"), false}, {[]byte("---\n"), true}, {[]byte("---\n"), true}, + {[]byte("--- \n"), true}, + {[]byte("--- \n"), true}, {[]byte{'a'}, false}, {[]byte{'{'}, true}, {[]byte("{\n "), true}, @@ -230,7 +232,10 @@ func TestExtractFrontMatter(t *testing.T) { {"---\nblar\n-\n", nil, false}, {"---\nralb\n---\n", []byte("---\nralb\n---\n"), true}, {"---\neof\n---", []byte("---\neof\n---"), true}, + {"--- \neof\n---", []byte("---\neof\n---"), true}, {"---\nminc\n---\ncontent", []byte("---\nminc\n---\n"), true}, + {"---\nminc\n--- \ncontent", []byte("---\nminc\n---\n"), true}, + {"--- \nminc\n--- \ncontent", []byte("---\nminc\n---\n"), true}, {"---\ncnim\n---\ncontent\n", []byte("---\ncnim\n---\n"), true}, {"---\ntitle: slug doc 2\nslug: slug-doc-2\n---\ncontent\n", []byte("---\ntitle: slug doc 2\nslug: slug-doc-2\n---\n"), true}, } |