(* Parsing /etc/portage/package.mask *) (* It is still far from perfect, but at least it doesn't give "ambiguous concat" anymore and work for packages without digits in package name. *) module Packagemask = autoload xfm let sep_spc = Util.del_ws_spc let sep_tab = Util.del_ws_tab let eol = del /[ \t]*\n/ "\n" let indent = del /[ \t]*/ "" let comment = Util.comment let empty = [ del /[ \t]*#?[ \t]*\n/ "\n" ] let operator = /[<>]?=?/ let package = /[a-z_\/-]+([a-z0-9_\/-]*[a-z_-])?/ let version = /[0-9]+(\.[0-9]+)*(-r[0-9]+)?/ let sep_version = del /-/ "-" let word = /[^#<>= \n\t]+/ let record = [ seq "packagemask" . indent . [ label "operator" . store operator ] . [ label "package" . store package ] . [ sep_version . label "version" . store version ]? . (comment|eol) ] let lns = ( empty | comment | record ) * let filter = (incl "/etc/portage/package.mask") . (incl "/etc/portage/package.mask/*") let xfm = transform lns filter