Parses Erlang configuration files
Author: Raphael Pinson raphael@camptoc amp.com .pinson
Erlang | Parses Erlang configuration files |
Reference | This lens tries to keep as close as possible to `http://www.erlang.org/doc/man/config.html` where possible. |
License | This file is licenced under the LGPL v2+, like the rest of Augeas. |
Lens Usage | To be documented |
Configuration files | This lens applies to Erlang configuration files. |
Examples | The Test_Erlang file contains various examples and tests. |
Spacing Functions | |
space | |
lspace | Add spaces to the left of char |
rspace | Add spaces to the right of char |
lrspace | Add spaces to the left or right of char |
Separators | |
lbrace | Left square bracket |
rbrace | Right square bracket |
lbrack | Left curly brackets |
rbrack | Right curly brackets |
lglob | Left glob separator |
rglob | Right glob separator |
comma | |
Value types | |
opt_list | An optional list of elements, in square brackets |
integer | Store a Rx.integer |
decimal | Store a decimal value |
quoted | Store a quoted value |
bare | Store a bare Rx.word |
boolean | Store a boolean value |
path | Store a path (quoted) |
glob | Store a glob |
make_value | Make a “value” subnode for arrays/tuples |
Store types | |
value | A single value |
tuple | A tuple of values |
tuple3 | A tuple of 3 values |
list | A list of lenses |
value_list | A list of seq entries |
application | |
kernel_parameters | Config parameters accepted for kernel app |
kernel | Core Erlang kernel app configuration |
comment | |
config | A top-level config |
This lens tries to keep as close as possible to `http://www.erlang.org/doc/man/config.html` where possible.
This lens applies to Erlang configuration files. See filter.
The Test_Erlang file contains various examples and tests.
let integer = store Rx.integer
Store a Rx.integer
let bare = store Rx.word
Store a bare Rx.word
let path = quoted
Store a path (quoted)
let value_list (kw:regexp) (sto:lens) = list kw (make_value sto)
A list of seq entries
let kernel_parameters = value "browser_cmd" path | value "dist_auto_connect" (store /never|once/) | value "error_logger" (store /tty|false|silent/) | value "net_setuptime" integer | value "net_ticktime" integer | value "shutdown_timeout" integer | value "sync_nodes_timeout" integer | value "start_dist_ac" boolean | value "start_boot_server" boolean | value "start_disk_log" boolean | value "start_pg2" boolean | value "start_timer" boolean
Config parameters accepted for kernel app
let space = del /[ \t\n]*/ ""
Add spaces to the left of char
let lspace (char:string) = del (/[ \t\n]*/ . char) char
Add spaces to the right of char
let rspace (char:string) = del (char . /[ \t\n]*/ ) char
Add spaces to the left or right of char
let lrspace (char:string) = del (/[ \t\n]*/ . char . /[ \t\n]*/ ) char
Right square bracket
let rbrace = "}"
Right curly brackets
let rbrack = "]"
Right glob separator
let rglob = "\">>"
let comma = ","
An optional list of elements, in square brackets
let opt_list (lns:lens) = rspace lbrack . (Build.opt_list lns (lrspace comma) . space)? . Util.del_str rbrack
Store a Rx.integer
let integer = store Rx.integer
One or more digits
let integer = /[0-9]+/
Store a decimal value
let decimal = store /[0-9]+(.[0-9]+)?/
Store a bare Rx.word
let bare = store Rx.word
An alphanumeric string
let word = /[A-Za-z0-9_.-]+/
Store a boolean value
let boolean = store /true|false/
Store a path (quoted)
let path = quoted
Store a glob
let glob = Util.del_str lglob . store /[^\n"]+/ . Util.del_str rglob
Make a “value” subnode for arrays/tuples
let make_value (lns:lens) = [ label "value" . lns ]
A single value
let value (kw:regexp) (sto:lens) = [ rspace lbrace . key kw . lrspace comma . sto . lspace rbrace ]
A tuple of values
let tuple (one:lens) (two:lens) = [ rspace lbrace . label "tuple" . [ label "value" . one ] . lrspace comma . [ label "value" . two ] . lspace rbrace ]
A tuple of 3 values
let tuple3 (one:lens) (two:lens) (three:lens) = [ rspace lbrace . label "tuple" . [ label "value" . one ] . lrspace comma . [ label "value" . two ] . lrspace comma . [ label "value" . three ] . lspace rbrace ]
A list of lenses
let list (kw:regexp) (lns:lens) = [ rspace lbrace . key kw . lrspace comma . opt_list lns . lspace rbrace ]
A list of seq entries
let value_list (kw:regexp) (sto:lens) = list kw (make_value sto)
let application (name:regexp) (parameter:lens) = list name parameter
Config parameters accepted for kernel app
let kernel_parameters = value "browser_cmd" path | value "dist_auto_connect" (store /never|once/) | value "error_logger" (store /tty|false|silent/) | value "net_setuptime" integer | value "net_ticktime" integer | value "shutdown_timeout" integer | value "sync_nodes_timeout" integer | value "start_dist_ac" boolean | value "start_boot_server" boolean | value "start_disk_log" boolean | value "start_pg2" boolean | value "start_timer" boolean
Core Erlang kernel app configuration
let kernel = application "kernel" kernel_parameters
let comment = Util.comment_generic /%[ \t]*/ "% "
A top-level config
let config (app:lens) = (Util.empty | comment)* . rspace lbrack . Build.opt_list (kernel | app) (lrspace comma) . lrspace rbrack . Util.del_str "." . Util.eol . (Util.empty | comment)*