Skip to content

Commit 9fd5679

Browse files
authored
Merge pull request #28 from nickng/nickng-prettyprint-keyorder
Add support to specify key order in prettybib in config file
2 parents 928663e + 4e78a8f commit 9fd5679

File tree

4 files changed

+24
-7
lines changed

4 files changed

+24
-7
lines changed

.github/workflows/test.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ jobs:
44
test:
55
strategy:
66
matrix:
7-
go-version: [1.16.x, 1.17.x]
7+
go-version: [1.22.x]
88
os: [ubuntu-latest, macos-latest, windows-latest]
99
runs-on: ${{ matrix.os }}
1010
steps:

cmd/prettybib/filter.toml

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
# Default filter config
22

33
[bibtype.inproceedings]
4-
required = [ "author", "booktitle", "title", "year", "publisher", "series", "volume" ]
5-
remove = [ "address", "doi", "editor", "file", "isbn", "url" ]
4+
required = [ "author", "booktitle", "title", "year", "publisher", "series", "volume" ]
5+
remove = [ "address", "doi", "editor", "file", "isbn", "url" ]
6+
fields_order = ["year", "author", "title"]
67

78
[bibtype.article]
89
required = [ "author", "journal", "title", "year" ]

cmd/prettybib/main.go

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ package main
44
import (
55
"flag"
66
"fmt"
7+
"io"
78
"log"
89
"os"
910

@@ -23,8 +24,9 @@ var (
2324
// Config holds a configuration for filtering rules.
2425
type Config struct {
2526
BibType map[string]struct {
26-
Required []string
27-
Remove []string
27+
Required []string
28+
Remove []string
29+
FieldsOrder []string `toml:"fields_order"`
2830
}
2931
}
3032

@@ -55,14 +57,18 @@ func main() {
5557
if err != nil {
5658
log.Fatal(err)
5759
}
60+
keyOrderByType := make(map[string][]string)
5861
if *config != "" {
5962
var conf Config
6063
if _, err := toml.DecodeFile(*config, &conf); err != nil {
6164
log.Fatalf("Cannot read config: %s", err)
6265
}
6366
filter(parsed, &conf)
67+
for name, bt := range conf.BibType {
68+
keyOrderByType[name] = bt.FieldsOrder
69+
}
6470
}
65-
fmt.Fprintf(writer, parsed.PrettyString())
71+
prettyPrintOverridingOrder(writer, parsed, keyOrderByType)
6672
}
6773

6874
func filter(bib *bibtex.BibTex, conf *Config) {
@@ -81,3 +87,13 @@ func filter(bib *bibtex.BibTex, conf *Config) {
8187
}
8288
}
8389
}
90+
91+
func prettyPrintOverridingOrder(w io.Writer, parsed *bibtex.BibTex, keyOrderByType map[string][]string) {
92+
for _, entry := range parsed.Entries {
93+
var opts []bibtex.PrettyStringOpt
94+
if order, specified := keyOrderByType[entry.Type]; specified {
95+
opts = append(opts, bibtex.WithKeyOrder(order))
96+
}
97+
fmt.Fprintf(w, entry.PrettyString(opts...))
98+
}
99+
}

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
module github.com/nickng/bibtex
22

3-
go 1.18
3+
go 1.22
44

55
require github.com/BurntSushi/toml v0.3.1

0 commit comments

Comments
 (0)