aboutsummaryrefslogtreecommitdiffstats
path: root/lib/bib-select.awk
blob: 9aa5a378a7fcd8b888e00ac1091c2455761527da (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# bib-select.awk - emit entries selected by key, canonically
#
# Requires bib-parse.awk and bib-canon.awk. Variables (set with -v):
#   keys   - comma-separated list of entry keys; a key of "*" selects
#            every entry (as produced by \nocite{*})
#   invert - 0: emit entries whose key is in the list
#            1: emit entries whose key is NOT in the list
#
# With keys="" and invert=1 this acts as a canonicalizing filter for
# everything. @string and @preamble blocks always pass through.

BEGIN {
  bib_sel_n = split(keys, bib_sel_k, ",")
  for (bib_sel_i = 1; bib_sel_i <= bib_sel_n; bib_sel_i++) {
    if (bib_sel_k[bib_sel_i] == "*")
      BIB_SEL_ALL = 1
    else
      BIB_SEL[bib_sel_k[bib_sel_i]] = 1
  }
}

function bib_pass(raw) {
  bib_sep()
  print raw
}

function bib_entry(type, key) {
  if (BIB_SEL_ALL || (key in BIB_SEL) != invert + 0) {
    bib_sep()
    bib_emit(type, key)
  }
}