Last active
February 19, 2020 16:08
-
-
Save xorel/7a960d39ef2e8bdfd2340861b5c9b404 to your computer and use it in GitHub Desktop.
Augeas lens for oned.conf
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
module Oned = | |
autoload xfm | |
(* primitives *) | |
let sep = del /[ \t]*=[ \t]*/ " = " | |
let eol = del /\n/ "\n" | |
let opt_space = del /[ \t]*/ "" | |
let opt_space_nl = del /[ \t\n]*/ "\n" | |
let comma = del /,/ "," | |
let left_br = del /\[/ "[" | |
let right_br = del /\]/ "]" | |
(* Regexes *) | |
(* Match everyhting within quotes *) | |
let re_quoted_str = /"[^\"]*"/ | |
(* Match everything except spaces, quote("), l-bracket([) and num-sign(#) *) | |
let re_value_str = /[^ \t\n"\[#]+/ | |
(* Match everything except spaces, quote("), num-sign(#) and comma(,) *) | |
let re_section_value_str = /[^ \t\n"#,]+/ | |
(* Store either after-value comment or full-line comment *) | |
let comment (l:string) = [ label l . store /#[^\n]*/ ] | |
let tail_comment = comment "tail_comment" | |
let line_comment = comment "line_comment" . eol | |
(* Simple words *) | |
let name = key /[A-Za-z_0-9]+/ | |
let re_simple_value = re_quoted_str | re_value_str | |
(* Top level entry like `PORT = 2633` *) | |
let top_level_entry = [ name . sep . store re_simple_value ] | |
let top_level_line = opt_space | |
. top_level_entry | |
. opt_space . (tail_comment)? | |
. eol | |
(* Section lens for section like `LOG = [ ... ]` *) | |
let section_value = re_quoted_str | re_section_value_str | |
let section_entry = [ name . sep . store section_value ] | |
let section_entry_list = | |
( section_entry . opt_space . comma . opt_space_nl | |
| line_comment . opt_space )* | |
. section_entry . opt_space_nl | |
. ( line_comment )* | |
let section = opt_space | |
. [ name . sep | |
. left_br | |
. opt_space_nl | |
. section_entry_list | |
. right_br ] | |
. eol | |
let empty_line = [ del /[ \t]*\n/ "\n" ] | |
(* Main lens *) | |
let lns = ( top_level_line | line_comment | section | empty_line )* | |
(* Variable: filter *) | |
let filter = incl "/etc/one/oned.conf" | |
. incl "/etc/one/sched.conf" | |
. incl "/etc/one/vmm_exec/vmm_exec_kvm.conf" | |
let xfm = transform lns filter |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment