aboutsummaryrefslogtreecommitdiffstats
path: root/lib/bib2ref.awk
diff options
context:
space:
mode:
Diffstat (limited to 'lib/bib2ref.awk')
-rw-r--r--lib/bib2ref.awk52
1 files changed, 52 insertions, 0 deletions
diff --git a/lib/bib2ref.awk b/lib/bib2ref.awk
new file mode 100644
index 0000000..4d9e595
--- /dev/null
+++ b/lib/bib2ref.awk
@@ -0,0 +1,52 @@
+# bib2ref.awk - convert bibtex entries to refer records
+#
+# Requires bib-parse.awk and bib-canon.awk.
+
+function bib_pass(raw) { }
+
+function r_field(tag, v) {
+ if (v != "") {
+ gsub(/[{}]/, "", v)
+ gsub(/[ \t\r\n]+/, " ", v)
+ printf "%%%s %s\n", tag, bib_trim(v)
+ }
+}
+
+function r_names(tag, v, n, parts, i) {
+ gsub(/[{}]/, "", v)
+ gsub(/[ \t\r\n]+/, " ", v)
+ n = split(v, parts, / +[Aa][Nn][Dd] +/)
+ for (i = 1; i <= n; i++)
+ if (bib_trim(parts[i]) != "")
+ printf "%%%s %s\n", tag, bib_trim(parts[i])
+}
+
+function bib_entry(type, key, d, p, m) {
+ if (bib_out_n++)
+ print ""
+ r_names("A", bib_get("author"))
+ r_names("E", bib_get("editor"))
+ r_field("T", bib_get("title"))
+ r_field("J", bib_get("journal"))
+ r_field("B", bib_get("booktitle"))
+ d = bib_get("year")
+ m = bib_get("month")
+ if (m != "")
+ d = (d != "") ? m " " d : m
+ r_field("D", d)
+ r_field("V", bib_get("volume"))
+ r_field("N", bib_get("number"))
+ p = bib_get("pages")
+ gsub(/--/, "-", p)
+ r_field("P", p)
+ if (bib_get("publisher") != "")
+ r_field("I", bib_get("publisher"))
+ else if (bib_get("institution") != "")
+ r_field("I", bib_get("institution"))
+ else if (bib_get("school") != "")
+ r_field("I", bib_get("school"))
+ r_field("C", bib_get("address"))
+ r_field("K", bib_get("keywords"))
+ r_field("X", bib_get("abstract"))
+ r_field("O", bib_get("note"))
+}