我最近在 Augeas 中组装了一个镜头,但现在它的功能不太理想。
我的文件包含一些具有以下语法的参考:
Value1 = KEY 32 OR\
KEY 33 OR\
....
我如何表示反斜杠换行符组合并将其视为同一值的一部分?
编辑-我正在运行版本 .10.0
...
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.indented_title_label "target" IniFile.record_label_re
let entry = [ key IniFile.entry_re . sep . IniFile.sto_to_comment . (comment|IniFile.eol) ] |
[ key IniFile.entry_re . store // . (comment|IniFile.eol) ] |
[ key /\![A-Za-z][A-Za-z0-9\._-]+/ . del / / " " . store /\/[A-Za-z0-9\.\/_-]+/ . (comment|IniFile.eol) ] |
comment
let record = IniFile.record title entry
let record_anon = [ label ".anon" . ( entry | empty )+ ]
let lns = record_anon | record*
...
答案1
您的镜头不是为多行条目编写的。如果您想支持多行条目,您需要使用IniFile.entry_multiline
:
let entry_multiline (kw:regexp) (sep:lens) (comment:lens)
= [ key kw . sep . sto_multiline? . (comment|eol) ] | comment
但是,这个定义不能识别\
为行继续符,因为至今我从未见过 IniFile 使用它。虽然\
它通常用作各种键/值格式的行继续符,但 IniFile 通常只是使用缩进来确定一行是否是上一行的延续。
需要注意的是,我认为您的定义并不是lns
您真正想要的:
let lns = record_anon | record*
意思是“一个record_anon
,后跟零个、一个或多个record
”,而我猜你的意思是“零个、一个或多个record_anon
,后跟零个、一个或多个record
”,也就是:
let lns = record_anon* . record*