Представление многострочного значения в 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 ответ

Решение

Ваш объектив не написан для многострочных записей. Если вы хотите поддерживать многострочные записи, вам нужно использовать 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*

значит "один record_anonс последующим нулем, одним или несколькими records", хотя я думаю, вы, вероятно, имеете в виду" ноль, один или несколько record_anonс последующим нулем, одним или несколькими records", что:

let lns       = record_anon* . record*
Другие вопросы по тегам