summaryrefslogtreecommitdiffstats
path: root/cmd
diff options
context:
space:
mode:
Diffstat (limited to 'cmd')
-rw-r--r--cmd/gobtex/main.go64
1 files changed, 64 insertions, 0 deletions
diff --git a/cmd/gobtex/main.go b/cmd/gobtex/main.go
new file mode 100644
index 0000000..4bbd5b3
--- /dev/null
+++ b/cmd/gobtex/main.go
@@ -0,0 +1,64 @@
+package main
+
+import (
+ "bytes"
+ "encoding/json"
+ "fmt"
+ "log"
+ "os"
+ "strings"
+
+ "github.com/Thibauth/bibtex"
+)
+
+func main() {
+ fname := os.Args[1]
+ f, err := os.Open(fname)
+ if err != nil {
+ 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")
+ }
+
+ for i, field := range e.FNames {
+ temp[i] = field + " = " + e.Fields[field].Marshal()
+ }
+ buf.WriteString(strings.Join(temp, ",\n\t"))
+ buf.WriteString("\n" + close)
+ return buf.String()
+}
+
+func Marshal(db *bibtex.Database) string {
+ var buf bytes.Buffer
+ for _, id := range db.SNames {
+ buf.WriteString("@string{" + id + " = " +
+ db.Strings[id].Marshal() + "}\n\n")
+
+ }
+ if db.Preamble != nil {
+ buf.WriteString("@preamble{" + db.Preamble.Marshal() + "}\n\n")
+ }
+ res := make([]string, len(db.EKeys))
+ for i, key := range db.EKeys {
+ res[i] = MarshalEntry(db.Entries[key])
+ }
+ buf.WriteString(strings.Join(res, "\n\n"))
+ return buf.String()
+}