aboutsummaryrefslogtreecommitdiffstats
path: root/skate
diff options
context:
space:
mode:
authorMartin Czygan <martin.czygan@gmail.com>2021-07-26 21:11:14 +0200
committerMartin Czygan <martin.czygan@gmail.com>2021-07-26 21:11:14 +0200
commita23c2cee4fe5bccabbf30392d670a380ef80b82b (patch)
tree57a9b08077069f0497d10b01ca29133ef3a9fbc0 /skate
parent63346653420a687c7b10bea0e0becf73996f6c5e (diff)
downloadrefcat-a23c2cee4fe5bccabbf30392d670a380ef80b82b.tar.gz
refcat-a23c2cee4fe5bccabbf30392d670a380ef80b82b.zip
switch to sligthly more performance string builder
Diffstat (limited to 'skate')
-rw-r--r--skate/schema.go64
-rw-r--r--skate/slugify.go7
-rw-r--r--skate/verify.go13
3 files changed, 41 insertions, 43 deletions
diff --git a/skate/schema.go b/skate/schema.go
index d6b4ded..b69f206 100644
--- a/skate/schema.go
+++ b/skate/schema.go
@@ -128,75 +128,75 @@ func RefToRelease(ref *Ref) (*Release, error) {
// try to be readable.
func ReleaseToUnstructured(r *Release) string {
var (
- buf bytes.Buffer
+ sb strings.Builder
names = make([]string, len(r.Contribs))
)
for i := 0; i < len(r.Contribs); i++ {
names[i] = r.Contribs[i].RawName
}
- fmt.Fprintf(&buf, "%s", strings.Join(names, ", "))
+ fmt.Fprintf(&sb, "%s", strings.Join(names, ", "))
if r.Title != "" {
- if buf.Len() > 0 {
- fmt.Fprintf(&buf, ". ")
+ if sb.Len() > 0 {
+ fmt.Fprintf(&sb, ". ")
}
- fmt.Fprintf(&buf, `%s`, r.Title)
+ fmt.Fprintf(&sb, `%s`, r.Title)
}
if len(r.Subtitle()) > 0 {
- fmt.Fprintf(&buf, ": %s", strings.Join(r.Subtitle(), " "))
+ fmt.Fprintf(&sb, ": %s", strings.Join(r.Subtitle(), " "))
}
if r.ContainerName != "" {
- if buf.Len() > 0 {
- fmt.Fprintf(&buf, ". ")
+ if sb.Len() > 0 {
+ fmt.Fprintf(&sb, ". ")
}
- fmt.Fprintf(&buf, `%s`, r.ContainerName)
+ fmt.Fprintf(&sb, `%s`, r.ContainerName)
}
if r.Volume != "" {
- if buf.Len() > 0 {
- fmt.Fprintf(&buf, ", ")
+ if sb.Len() > 0 {
+ fmt.Fprintf(&sb, ", ")
}
- fmt.Fprintf(&buf, `vol. %s`, r.Volume)
+ fmt.Fprintf(&sb, `vol. %s`, r.Volume)
}
if r.Issue != "" {
- if buf.Len() > 0 {
- fmt.Fprintf(&buf, ", ")
+ if sb.Len() > 0 {
+ fmt.Fprintf(&sb, ", ")
}
- fmt.Fprintf(&buf, `no. %s`, r.Issue)
+ fmt.Fprintf(&sb, `no. %s`, r.Issue)
}
if r.ReleaseYear() > 0 {
- if buf.Len() > 0 {
- fmt.Fprintf(&buf, ", ")
+ if sb.Len() > 0 {
+ fmt.Fprintf(&sb, ", ")
}
- fmt.Fprintf(&buf, `%s`, r.ReleaseYearString())
+ fmt.Fprintf(&sb, `%s`, r.ReleaseYearString())
}
if r.Pages != "" {
- if buf.Len() > 0 {
- fmt.Fprintf(&buf, ", ")
+ if sb.Len() > 0 {
+ fmt.Fprintf(&sb, ", ")
}
- fmt.Fprintf(&buf, `pp. %s`, r.Pages)
+ fmt.Fprintf(&sb, `pp. %s`, r.Pages)
}
if r.Publisher != "" {
- if buf.Len() > 0 {
- fmt.Fprintf(&buf, ", ")
+ if sb.Len() > 0 {
+ fmt.Fprintf(&sb, ", ")
}
- fmt.Fprintf(&buf, `%s`, r.Publisher)
+ fmt.Fprintf(&sb, `%s`, r.Publisher)
}
switch {
case r.ExtIDs.DOI != "":
- if buf.Len() > 0 {
- fmt.Fprintf(&buf, ", ")
+ if sb.Len() > 0 {
+ fmt.Fprintf(&sb, ", ")
}
- fmt.Fprintf(&buf, `%s`, r.ExtIDs.DOI)
+ fmt.Fprintf(&sb, `%s`, r.ExtIDs.DOI)
case len(r.ExtIDs.ISBN) > 0:
- if buf.Len() > 0 {
- fmt.Fprintf(&buf, ", ")
+ if sb.Len() > 0 {
+ fmt.Fprintf(&sb, ", ")
}
if isbn13, err := isbn.To13(r.ExtIDs.ISBN[0]); err == nil {
- fmt.Fprintf(&buf, `%s`, isbn13)
+ fmt.Fprintf(&sb, `%s`, isbn13)
} else {
- fmt.Fprintf(&buf, `%s`, r.ExtIDs.ISBN[0])
+ fmt.Fprintf(&sb, `%s`, r.ExtIDs.ISBN[0])
}
}
- return buf.String()
+ return sb.String()
}
// ParseIsbn tries to find and validate ISBN from unstructured data. Returns a
diff --git a/skate/slugify.go b/skate/slugify.go
index e8fa8bf..5cdc838 100644
--- a/skate/slugify.go
+++ b/skate/slugify.go
@@ -1,18 +1,17 @@
package skate
import (
- "bytes"
"fmt"
"strings"
)
// slugifyString is a basic string slugifier.
func slugifyString(s string) string {
- var buf bytes.Buffer
+ var sb strings.Builder
for _, c := range strings.TrimSpace(strings.ToLower(s)) {
if (c > 96 && c < 123) || (c > 47 && c < 58) || (c == 32) || (c == 9) || (c == 10) {
- fmt.Fprintf(&buf, "%c", c)
+ fmt.Fprintf(&sb, "%c", c)
}
}
- return strings.Join(strings.Fields(buf.String()), " ")
+ return strings.Join(strings.Fields(sb.String()), " ")
}
diff --git a/skate/verify.go b/skate/verify.go
index 22f0a0d..5df0a7e 100644
--- a/skate/verify.go
+++ b/skate/verify.go
@@ -8,7 +8,6 @@
package skate
import (
- "bytes"
"fmt"
"regexp"
"strconv"
@@ -501,17 +500,17 @@ func authorSimilarityScore(s, t string) float64 {
// tokenNgrams are groups of n char-tokens per word-token in string, e.g. for
// n=2 and string "Anne K Lam", we would get ["an", "ne", "k", "la", "m"].
func tokenNgrams(s string, n int) (result []string) {
- var buf bytes.Buffer
+ var sb strings.Builder
for _, token := range tokenizeString(s) {
- buf.Reset()
+ sb.Reset()
for i, c := range token {
if i > 0 && i%n == 0 {
- result = append(result, buf.String())
- buf.Reset()
+ result = append(result, sb.String())
+ sb.Reset()
}
- buf.WriteRune(c) // XXX: skipping error handling
+ sb.WriteRune(c) // XXX: skipping error handling
}
- result = append(result, buf.String())
+ result = append(result, sb.String())
}
return
}