91 lines
2.0 KiB
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
|
|
}
|