Skip to content

Commit 980077b

Browse files
committed
Support for unquoted values, Fixes #6
1 parent 11ac4d1 commit 980077b

File tree

2 files changed

+34
-5
lines changed

2 files changed

+34
-5
lines changed

link.go

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ var (
1212
equalRegexp = regexp.MustCompile(` *= *`)
1313
keyRegexp = regexp.MustCompile(`[a-z*]+`)
1414
linkRegexp = regexp.MustCompile(`\A<(.+)>;(.+)\z`)
15-
semiRegexp = regexp.MustCompile(`; +`)
15+
semiRegexp = regexp.MustCompile(`;\s{0,}`)
1616
valRegexp = regexp.MustCompile(`"+([^"]+)"+`)
1717
)
1818

@@ -86,15 +86,14 @@ func Parse(s string) Group {
8686
continue
8787
}
8888

89+
val := strings.TrimSpace(vals[1])
8990
key := keyRegexp.FindString(vals[0])
9091
vsm := valRegexp.FindStringSubmatch(vals[1])
9192

92-
if len(vsm) != 2 {
93-
continue
93+
if len(vsm) == 2 {
94+
val = vsm[1]
9495
}
9596

96-
val := vsm[1]
97-
9897
if key == "rel" {
9998
vals := strings.Split(val, " ")
10099
rels := []string{vals[0]}

link_test.go

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -301,6 +301,36 @@ func TestParse_rfc5988Example4(t *testing.T) {
301301
}
302302
}
303303

304+
func TestParse_noQuotesExample(t *testing.T) {
305+
g := Parse(`</example.png>;rel=preload;as=image`)
306+
307+
if got, want := len(g), 1; got != want {
308+
t.Fatalf(`len(g) = %d, want %d`, got, want)
309+
}
310+
311+
if g["preload"] == nil {
312+
t.Fatalf(`g["preload"] == nil`)
313+
}
314+
315+
l := *g["preload"]
316+
317+
if got, want := l.URI, "/example.png"; got != want {
318+
t.Fatalf("l.URI = %q, want = %q", got, want)
319+
}
320+
321+
if got, want := l.Rel, "preload"; got != want {
322+
t.Fatalf("l.Rel = %q, want = %q", got, want)
323+
}
324+
325+
if l.Extra == nil {
326+
t.Fatalf("l.Extra == nil")
327+
}
328+
329+
if got, want := l.Extra["as"], "image"; got != want {
330+
t.Fatalf("l.Extra[\"as\"] = %q, want %q", got, want)
331+
}
332+
}
333+
304334
func TestParse_fuzzCrashers(t *testing.T) {
305335
t.Parallel()
306336

0 commit comments

Comments
 (0)