[augeas-devel] Rewriting inifile.aug
Raphaël Pinson
raphink at gmail.com
Thu Aug 14 09:56:34 UTC 2008
Hi there,
As I'm playing with inifile.aug and applying it to php.aug, mysql.aug and
dput.aug, I find so many different configurations that inifile.aug gets very
complicated to my taste. Since functions in lenses cannot take defaults, I
end up defining lots of them to set more or less variables. I would like to
really simplify inifile.aug. This might mean making the lenses that use it a
bit more complicated, but also clearer.
Here is my proposal. Comments are very welcome:
Writing a generic INI file using inifile.aug would look like this :
=========================================================
let comment_re = /[;#]/
let comment_default = ";"
let comment = IniFile.comment comment_re comment_default
let empty = IniFile.empty comment_re
let sep_re = /[:=]/
let sep_default = "="
let sep = IniFile.sep sep_re sep_default
(* IniFile.entry_re = ( /[A-Za-z][A-Za-z0-9\._-]+/ - /#comment/ ) *)
let entry_re = IniFile.entry_re
let entry = IniFile.entry entry_re sep comment
(* IniFile.record_re = ( /[^]\n\/]+/ - /#comment/ ) *)
let record_re = IniFile.record_re
let record = IniFile.record record_re entry comment empty
let lns = IniFile.lns record comment
=========================================================
This would be a bit longer than it is currently, but much clearer, too.
The values taken by the setting fields would be:
comment_re := ";"| "#" | /[;#]/
comment_default := ";" | "#"
sep_re := ":" | "=" | /[:=]/
sep_default := ";" | "="
entry_re := IniFile.entry_re | your_own_re
record_re := IniFile.record_re | your_own_re
Other values for these fields could not be certified to work properly.
Default values provided:
IniFile.comment_re = /[;#]/
IniFile.comment_default = ";"
IniFile.sep_re = /[:=]/
IniFile.sep_default = "="
IniFile.entry_re = ( /[A-Za-z][A-Za-z0-9\._-]+/ - /#comment/ )
IniFile.record_re = ( /[^]\n\/]+/ - /#comment/ )
Additionally, IniFile.record_noempty and IniFile.lns_noempty would be
provided, since I don't know how to deal with these.
Another example, with dput.aug :
=========================================================
let comment = IniFile.comment IniFile.comment_re IniFile.comment_default
let empty = IniFile.empty IniFile.comment_re
let sep = IniFile.sep IniFile.sep_re IniFile.set_default
let setting = "allow_non-us_software"
| "allow_unsigned_uploads"
| "check_version"
| "default_host_main"
| "default_host_non-us"
| "fqdn"
| "hash"
| "incoming"
| "login"
| "method"
| "passive_ftp"
| "post_upload_command"
| "pre_upload_command"
| "progress_indicator"
| "run_dinstall"
| "run_lintian"
| "scp_compress"
| "ssh_config_options"
let entry = IniFile.entry setting sep comment
let record = IniFile.record IniFile.record_re entry comment empty
let lns = IniFile.lns record comment
=========================================================
It is obviously longer than the current format, but also much clearer on
what is accepted and what is not. Alternatively, this is php.aug:
=========================================================
let comment = IniFile.comment IniFile.comment_re IniFile.comment_default
let empty = IniFile.empty IniFile.comment_re
let eol = IniFile.eol
let sep = IniFile.sep IniFile.sep_re IniFile.set_default
(*
We have to remove the keyword "section" from possible entry keywords
otherwise it would lead to an ambiguity with the "section" label
since PHP allows entries outside of sections.
*)
let entry_re = ( /[A-Za-z][A-Za-z0-9\._-]+/ - /#comment/ - /section/ )
let entry = IniFile.entry entry_re sep comment
let title
= label "section"
.Util.del_str "[" . store /[^]]+/
. Util.del_str "]". eol
let record = [ title_label
. (entry | comment | empty)* ]
let lns = ( comment | empty | entry )* . record*
=========================================================
Any thoughts on this ?
Raphaël
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://listman.redhat.com/archives/augeas-devel/attachments/20080814/b443d49b/attachment.htm>
More information about the augeas-devel
mailing list