(* Lens to match the crazy newline-split variables that Gentoo *) (* uses in it's openrc-based /etc/conf.d/net file *) module GentooConf_net= autoload xfm let nl = Util.del_str "\n" let eol = Util.eol let key_re = /[A-Za-z0-9_]+/ let eq = Util.del_str "=" let comment = Util.comment let empty = Util.empty let indent = Util.indent let sqword = /[^'\n]+/ let dqword = /[^"\n]+/ let uqword = /[^"'\n]+/ (* lists values of the form ... val1 val2 val3 ... *) let list(word:regexp) = let list_value = store word in [ label "value" . list_value ] . [ eol . label "value" . list_value ]* (* handle single quoted lists *) let squote_arr = [ label "quote" . store /'/ ] . (list sqword)? . del /'/ "'" (* similarly handle double qouted lists *) let dquote_arr = [ label "quote" . store /"/ ] . (list dqword)? . del /"/ "\"" (* handle unquoted single value *) let unquot_val = [ label "quote" . store "" ] . [label "value" . store uqword+]? (* lens for key value pairs *) let kv = [ key key_re . eq . ( squote_arr | dquote_arr | unquot_val ) . eol ] let lns = ( comment | empty | kv )* let filter = incl "/etc/conf.d/net/" . Util.stdexcl let xfm = transform lns filter (* Local Variables: *) (* mode: caml *) (* End: *)