summaryrefslogtreecommitdiffstats
path: root/cmd/gobtex/main.go
diff options
context:
space:
mode:
authorThibaut Horel <thibaut.horel@gmail.com>2016-03-15 22:12:44 -0400
committerThibaut Horel <thibaut.horel@gmail.com>2016-03-15 22:12:44 -0400
commit58011496071a49e8f5f916a0416c36806ee94614 (patch)
treec32bb04676b54ae0718fb68f97b984b970456628 /cmd/gobtex/main.go
parent9a5261e37badd5422b8c16d93a5b1663c4be602f (diff)
downloadbibtex-58011496071a49e8f5f916a0416c36806ee94614.tar.gz
Add crossref resolution, minor api changes, first template inspired by plain.bst
Diffstat (limited to 'cmd/gobtex/main.go')
-rw-r--r--cmd/gobtex/main.go56
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()