packages feed

jacinda-3.3.0.1: examples/pubmed2tex.jac

{. ja run pubmed2tex.jac -i citation.nbib
:set rs:=/\r\n/;

{. 10.1016/j.tig.2011.10.004 [doi]
fn doi(record) :=
  record ~* 1 /([^ ]*) \[doi/;

fn year(dd) :=
  dd ~* 1 /(\d{4})/;

fn pfield(label,r) :=
  '    ' + label + '={' + r + '},';

fn collateAu(r) :=
  r ~* 1 /^FAU - (.*)$/;

fn bind(f,x) :=
  option None f x;

fn texpaginate() := sub1 /-/ '--';

fn field(r) :=
  let 
    val key := r ~* 1 /^([A-Z ]{4})-/
    val value := r ~* 2 /^([A-Z ]{4})-\s*(.*)/
  in
     ?key=Some 'TI  ';(pfield 'title')¨value
    ;?key=Some 'AID ';(pfield 'doi')¨bind doi value
    ;?key=Some 'DP  ';(pfield 'year')¨bind year value
    ;?key=Some 'JT  ';(pfield 'journal')¨value
    ;?key=Some 'VI  ';(pfield 'volume')¨value
    ;?key=Some 'IP  ';(pfield 'number')¨value
    ;?key=Some 'PG  ';(λr. pfield 'pages' (texpaginate r))¨value
    ;None
  end;

let
  val au := ',\n    author={'+([x+' and '+y]|>(collateAu:?$0))+'},\n'
  val rec := [x+'\n'+y]|>(field:?$0)
in '@article{pubmed'+au+rec+'\n}' end