diff options
| author | Thibaut Horel <thibaut.horel@gmail.com> | 2016-02-28 11:26:53 -0500 |
|---|---|---|
| committer | Thibaut Horel <thibaut.horel@gmail.com> | 2016-02-28 11:26:53 -0500 |
| commit | 9a5261e37badd5422b8c16d93a5b1663c4be602f (patch) | |
| tree | 5c2b09eb8662eaeeb2c15599bea11e4548e234de /cmd | |
| parent | c8e8372be6937bd2b6fd37bc753e8e8808ebb6f9 (diff) | |
| download | bibtex-9a5261e37badd5422b8c16d93a5b1663c4be602f.tar.gz | |
First example using the parsing library as a black box
Diffstat (limited to 'cmd')
| -rw-r--r-- | cmd/gobtex/main.go | 64 |
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() +} |
