web-dev-qa-db-ja.com

'\'を使用してAugeasで複数行の値を表す

最近、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
Tim Brigham

あなたのレンズは複数行のエントリ用に書かれていません。複数行のエントリをサポートする場合は、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つ以上のrecords」を意味しますが、おそらく「ゼロ、1つ以上のrecord_anon、その後にゼロ、1つ以上」を意味すると思いますrecords "、つまり:

let lns       = record_anon* . record*
1
ℝaphink