diff options
| author | 2025-08-12 22:33:41 +0700 | |
|---|---|---|
| committer | 2025-08-12 22:33:41 +0700 | |
| commit | 73d4a3658ca14527e8a749bb8850a2c8e4bfac88 (patch) | |
| tree | 19fb6b4ff9bdb50f39ffcbf13a0f0a4698166ed0 /internal/frontmatter/parser.go | |
| parent | 140dd55ae162c3fd3337ab5ad96d418acab10deb (diff) | |
| download | articlator-73d4a3658ca14527e8a749bb8850a2c8e4bfac88.tar.gz articlator-73d4a3658ca14527e8a749bb8850a2c8e4bfac88.zip | |
feat: integrate parallel execution
refactor: simplify frontmatter parser
feat: always check for '.md' extension
feat: new timezone field
Diffstat (limited to 'internal/frontmatter/parser.go')
| -rw-r--r-- | internal/frontmatter/parser.go | 15 |
1 files changed, 9 insertions, 6 deletions
diff --git a/internal/frontmatter/parser.go b/internal/frontmatter/parser.go index 1a521c0..20512d9 100644 --- a/internal/frontmatter/parser.go +++ b/internal/frontmatter/parser.go @@ -1,8 +1,8 @@ package frontmatter import ( + "bytes" "fmt" - "regexp" "time" "gopkg.in/yaml.v3" @@ -16,18 +16,21 @@ type Metadata struct { Thumbnail string `yaml:"thumbnail"` Tags []string `yaml:"tags"` Geolocation string `yaml:"geolocation"` + Timezone string `yaml:"timezone"` } func ParseFrontmatter(content []byte) (metadata *Metadata, markdown []byte, err error) { - frontmatterRegex := regexp.MustCompile(`^---\s*\r?\n([\s\S]*?)\r?\n---\s*\r?\n([\s\S]*)$`) - matches := frontmatterRegex.FindSubmatch(content) + if !bytes.HasPrefix(content, []byte("---\n")) { + return nil, content, nil + } - if len(matches) != 3 { + end := bytes.Index(content[4:], []byte("\n---\n")) + if end == -1 { return nil, content, nil } - yamlContent := matches[1] - markdownContent := matches[2] + yamlContent := content[4 : end+4] + markdownContent := content[end+9:] metadata = &Metadata{} if err := yaml.Unmarshal([]byte(yamlContent), &metadata); err != nil { |