diff options
Diffstat (limited to 'cmd/gobtex/main.go')
| -rw-r--r-- | cmd/gobtex/main.go | 56 |
1 files changed, 31 insertions, 25 deletions
diff --git a/cmd/gobtex/main.go b/cmd/gobtex/main.go index 4bbd5b3..30d9628 100644 --- a/cmd/gobtex/main.go +++ b/cmd/gobtex/main.go @@ -2,8 +2,8 @@ package main import ( "bytes" - "encoding/json" "fmt" + "html/template" "log" "os" "strings" @@ -11,6 +11,18 @@ import ( "github.com/Thibauth/bibtex" ) +func printfne(format string, a ...interface{}) string { + if fmt.Sprint(a...) == "" { + return "" + } else { + return fmt.Sprintf(format, a...) + } +} + +func dashify(s string) string { + return strings.Replace(s, "-", "–", -1) +} + func main() { fname := os.Args[1] f, err := os.Open(fname) @@ -18,31 +30,25 @@ func main() { log.Fatal(err) } db, err := bibtex.Parse(f, false) - res, _ := json.MarshalIndent(db, "", " ") - fmt.Println(string(res)) -} - -func MarshalEntry(e bibtex.Entry) string { - var buf bytes.Buffer - temp := make([]string, len(e.FNames)) - open, close := "{", "}" - if strings.Contains(e.Key, "}") { - open, close = "(", ")" - } - buf.WriteString("@" + e.Type + open + e.Key + ",") - if len(e.FNames) == 0 { - buf.WriteString(close) - return buf.String() - } else { - buf.WriteString("\n\t") + db.Flatten() + db.Resolve() + db.SplitNames() + db.UnTex() + tmpl := template.New("test.tmpl").Funcs(template.FuncMap{ + "untex": bibtex.UnTex, + "add": func(a, b int) int { return a + b }, + "ne": printfne, + "dashify": dashify, + "contains": strings.ContainsAny, + }) + tmpl, err = tmpl.ParseFiles("test.tmpl") + if err != nil { + log.Fatal(err) } - - for i, field := range e.FNames { - temp[i] = field + " = " + e.Fields[field].Marshal() + err = tmpl.Execute(os.Stdout, db) + if err != nil { + log.Fatal(err) } - buf.WriteString(strings.Join(temp, ",\n\t")) - buf.WriteString("\n" + close) - return buf.String() } func Marshal(db *bibtex.Database) string { @@ -57,7 +63,7 @@ func Marshal(db *bibtex.Database) string { } res := make([]string, len(db.EKeys)) for i, key := range db.EKeys { - res[i] = MarshalEntry(db.Entries[key]) + res[i] = db.Entries[key].Marshal() } buf.WriteString(strings.Join(res, "\n\n")) return buf.String() |
