Hi,
I store bibliographic references in .bib files (BibTeX file format) within page bundles.
I use Hugo to concatenate them all in a single file (for the whole website with a template in a custom .bib output format) which I later reformat manually to CSL-JSON with pandoc and copy to assets/.
Then with Hugo getJSON I can parse the CSL-JSON file to display proper in-text references and bibliographies across the website.
That works pretty well.
Now what I’m trying to do is to automate the transformation of the bibtex files to CSL-JSON with Hugo.
So I created a custom output format for CSL-JSON and a template (index.csljon.json) which basically ranges over all the pages and retrieves the content of all the .bib files like this:
{{ range site.Pages }}
{{ with .Resources.GetMatch "*.bib" }}
{{ $bib := `^@(.*?){(.*?),((.|\n)*?)+(}}|\n})+$` }}
{{ $csl := `{\"id\":\"${2}\",\"type\":${1},\"content\":[{${3}}]}` }}
{{ .Content | replaceRE $bib $csl }}
{{ end }}
{{ end }}
The idea being that, by rendering CSL-JSON before HTML, I should be able to query the CSL-JSON while rendering the HTML.
I’m not really familiar with regex but I came up with the above pattern which should more or less do the job (with further processing) or so according to regex101 but actually it’s not in Hugo (content is rendered as is)… Am I missing something?
Here’s the basic structure of a .bib file:
@type{id,
key = {value}
}
And the desired output:
{
"id": "id",
"type": "type",
"key": "value"
}
Any help much appreciated