1(* 2Module: Aptsources 3 Parsing /etc/apt/sources.list 4*) 5 6module Aptsources = 7 autoload xfm 8 9(************************************************************************ 10 * Group: Utility variables/functions 11 ************************************************************************) 12 (* View: sep_ws *) 13 let sep_ws = Sep.space 14 15 (* View: eol *) 16 let eol = Util.del_str "\n" 17 18 (* View: comment *) 19 let comment = Util.comment 20 (* View: empty *) 21 let empty = Util.empty 22 23 (* View: word *) 24 let word = /[^][# \n\t]+/ 25 26 (* View: uri *) 27 let uri = 28 let protocol = /[a-z+]+:/ 29 in let path = /\/[^] \t]*/ 30 in let path_brack = /\[[^]]+\]\/?/ 31 in protocol? . path 32 | protocol . path_brack 33 34(************************************************************************ 35 * Group: Keywords 36 ************************************************************************) 37 (* View: record *) 38 let record = 39 let option_sep = [ label "operation" . store /[+-]/]? . Sep.equal 40 in let option = Build.key_value /arch|trusted/ option_sep (store Rx.word) 41 in let options = [ label "options" 42 . Util.del_str "[" . Sep.opt_space 43 . Build.opt_list option Sep.space 44 . Sep.opt_space . Util.del_str "]" 45 . sep_ws ] 46 in [ Util.indent . seq "source" 47 . [ label "type" . store word ] . sep_ws 48 . options? 49 . [ label "uri" . store uri ] . sep_ws 50 . [ label "distribution" . store word ] 51 . [ label "component" . sep_ws . store word ]* 52 . del /[ \t]*(#.*)?/ "" 53 . eol ] 54 55(************************************************************************ 56 * Group: Lens 57 ************************************************************************) 58 (* View: lns *) 59 let lns = ( comment | empty | record ) * 60 61 (* View: filter *) 62 let filter = (incl "/etc/apt/sources.list") 63 . (incl "/etc/apt/sources.list.d/*") 64 . Util.stdexcl 65 66 let xfm = transform lns filter 67 68(* Local Variables: *) 69(* mode: caml *) 70(* End: *) 71