A lente PHP fornece funcionalidade semelhante, suportando configurações em um arquivo INI antes das seções definidas. Eu adaptei isso em sua lente e consertei a lente "setting" que deveria ter usado IniFile.entry_re
para evitar ambiguidades.
module Splunk =
autoload xfm
let comment = IniFile.comment IniFile.comment_re IniFile.comment_default
let sep = IniFile.sep IniFile.sep_re IniFile.sep_default
let empty = IniFile.empty
let setting = IniFile.entry_re
let title = IniFile.title ( IniFile.record_re - ".anon" )
let entry = IniFile.entry setting sep comment
let record = IniFile.record title entry
let record_anon = [ label ".anon" . ( entry | empty )+ ]
let lns = record_anon | record*
let filter = incl "/etc/splunk/*.conf"
let xfm = transform lns filter
test lns get "[section]\ntest-value=yes\n" = ?
test lns get "test=yes\n" = ?
A árvore que será gerada é semelhante a essa, com todas as configurações fora da seção que estão no nó ".anon":
Test result: splunk.aug:20.2-.31:
{ ".anon"
{ "test" = "yes" }
}
Este nó é necessário para evitar ambiguidades na direção de entrada. Tomando um exemplo, se você foi encarregado de escrever esta árvore de volta em um arquivo:
{ "foo" }
Pode ser escrito como [foo]
(um nome de seção) ou foo=
(uma configuração fora de uma seção). A subárvore ".anon" garante que essa transformação esteja livre de ambigüidade. Para removê-lo e ter uma estrutura plana, você precisaria criar um segundo módulo / lente para cada tipo de arquivo, o que eu acho que seria uma solução mais natural. O nó ".anon" faz mais sentido no caso do PHP, onde há um mix no mesmo arquivo.
Por favor submeta sua (s) lente (s) ao projeto Augeas quando terminar e tiver adicionado testes, gostaríamos de incluí-la. Envie via trac ou envie para o list .