最近、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*
.。
あなたのレンズは複数行のエントリ用に書かれていません。複数行のエントリをサポートする場合は、IniFile.entry_multiline
を使用する必要があります。
let entry_multiline (kw:regexp) (sep:lens) (comment:lens)
= [ key kw . sep . sto_multiline? . (comment|eol) ] | comment
ただし、この定義では、\
が行継続記号として認識されません。これは、IniFileがこれを今日まで使用しているのを見たことがないためです。 \
は通常、さまざまなキー/値形式の行継続記号として使用されますが、IniFilesは通常、単にインデントを使用して、行が前の行の継続であるかどうかを判別します。
注意として、lns
の定義は、実際には意図したものではないと思います。
let lns = record_anon | record*
「1つのrecord_anon
、その後にゼロ、1つ以上のrecord
s」を意味しますが、おそらく「ゼロ、1つ以上のrecord_anon
、その後にゼロ、1つ以上」を意味すると思いますrecord
s "、つまり:
let lns = record_anon* . record*