Files
satbd-explorer/bd.go

91 lines
2.0 KiB
Go

package main
import (
"regexp"
"strings"
"time"
"golang.org/x/text/transform"
"golang.org/x/text/unicode/norm"
)
// An AlbumState describe the state of an Album
type AlbumState int
const (
NEW AlbumState = iota // 0
MINT // 1
GOOD // 2
AVERAGE // 3
BAD // 4
)
// An Album is the core object in our system
//
// This is basically the data we store on bdgest.com, and that we want
// in our system to be retrieve from
type Album struct {
ID uint64
ISBN string
Series string
Title string
Num int
NumA string
State AlbumState
Author string
Editor string
Collection string
SatID string
LegalDeposit time.Time
PrintDate time.Time
}
var endDelim = regexp.MustCompile(` \(.*\)\z`)
var wordBoundaries = regexp.MustCompile(`[^[:alnum:]]+`)
var punctuation = regexp.MustCompile(`[!?\.:;,]`)
func sanitizeTitleString(title string, removeEndParent bool) string {
// first sanitize accuented characters.
isOk := func(r rune) bool {
return r < 32 || r >= 127
}
// The isOk filter is such that there is no need to chain to norm.NFC
t := transform.Chain(norm.NFKD, transform.RemoveFunc(isOk))
// This Transformer could also trivially be applied as an io.Reader
// or io.Writer filter to automatically do such filtering when reading
// or writing data anywhere.
title, _, _ = transform.String(t, title)
//Now we remove all punctuation
if removeEndParent == true {
title = endDelim.ReplaceAllString(title, "")
}
return strings.Trim(wordBoundaries.ReplaceAllString(punctuation.ReplaceAllString(title, ""), "-"), "-")
}
func (*Album) GetBedethequeComURI() string {
return ""
}
// An AlbumDescription is a more complete BD description
//
// It holds data that can be fetched from bedetheque.com
type AlbumDescription struct {
Album *Album
HasCover bool
Description string
Note float64
Scenarist string
Designer string
Colorist string
Cycle string
Format string
Pages int32
Created time.Time
}