Add new build tool.

bibliogra.py requires Python 2, which is a pain to deal with.  This
commit adds a Go tool that compiles CensorBib from BibTeX to HTML.  The
tool does the bare minimum and is quite strict in the BibTeX format it
expects.
This commit is contained in:
Philipp Winter 2024-03-09 16:28:23 -06:00
parent d432134ed4
commit 4be5f7bfb2
21 changed files with 2381 additions and 0 deletions

81
src/decode_test.go Normal file
View file

@ -0,0 +1,81 @@
package main
import (
"testing"
)
func TestToString(t *testing.T) {
testCases := []conversion{
{
from: "Title",
to: "Title",
},
{
from: "This is a {Title}",
to: "This is a Title",
},
{
from: "This is a {Title}",
to: "This is a Title",
},
{
from: `{\#h00t}: Censorship Resistant Microblogging`,
to: `#h00t: Censorship Resistant Microblogging`,
},
{
from: "``Good'' Worms and Human Rights",
to: "“Good” Worms and Human Rights",
},
{
from: "An Analysis of {China}'s ``{Great Cannon}''",
to: "An Analysis of Chinas “Great Cannon”",
},
{
from: `lib$\cdot$erate, (n):`,
to: `lib·erate, (n):`,
},
{
from: "Well -- Exploring the {Great} {Firewall}'s Poisoned {DNS}",
to: "Well Exploring the Great Firewalls Poisoned DNS",
},
}
for _, test := range testCases {
to := decodeTitle(test.from)
if to != test.to {
t.Errorf("Expected\n%s\ngot\n%s", test.to, to)
}
}
}
func TestDecodeAuthors(t *testing.T) {
testCases := []conversion{
{ // Multiple authors should be separated by commas.
from: "John Doe and Jane Doe",
to: "John Doe, Jane Doe",
},
{ // Single authors should remain as-is.
from: "John Doe",
to: "John Doe",
},
{ // Single-name authors should remain as-is.
from: "John and Jane",
to: "John, Jane",
},
{ // Non-ASCII characters should be unaffected.
from: "Jóhn Doe",
to: "Jóhn Doe",
},
{ // Apostrophes should be replaced with the right single quote.
from: "John O'Brian",
to: "John OBrian",
},
}
for _, test := range testCases {
to := decodeAuthors(test.from)
if to != test.to {
t.Errorf("Expected\n%s\ngot\n%s", test.to, to)
}
}
}