fix: Properly handle macro when extracting Metadata

When a macro is set in the header, only the first line will be read and then
discarded. This makes sure we keep the macro in and stop processing metadata
when we hit a macro.

Co-authored-by: Manuel Rüger <manuel@rueg.eu>
This commit is contained in:
Guillaume Hérail
2023-01-25 13:08:08 +01:00
parent 667e7be221
commit 1b3c7b4127
2 changed files with 12 additions and 2 deletions

View File

@@ -34,8 +34,9 @@ type Meta struct {
}
var (
reHeaderPatternV1 = regexp.MustCompile(`\[\]:\s*#\s*\(([^:]+):\s*(.*)\)`)
reHeaderPatternV2 = regexp.MustCompile(`<!--\s*([^:]+):\s*(.*)\s*-->`)
reHeaderPatternV1 = regexp.MustCompile(`\[\]:\s*#\s*\(([^:]+):\s*(.*)\)`)
reHeaderPatternV2 = regexp.MustCompile(`<!--\s*([^:]+):\s*(.*)\s*-->`)
reHeaderPatternMacro = regexp.MustCompile(`<!-- Macro: .*`)
)
func ExtractMeta(data []byte) (*Meta, []byte, error) {
@@ -58,6 +59,12 @@ func ExtractMeta(data []byte) (*Meta, []byte, error) {
if matches == nil {
matches = reHeaderPatternV1.FindStringSubmatch(line)
if matches == nil {
matches = reHeaderPatternMacro.FindStringSubmatch(line)
// If we have a match, then we started reading a macro.
// We want to keep it in the document for it to be read by ExtractMacros
if matches != nil {
offset -= len(line) + 1
}
break
}