Недавно я собрал объектив в 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*
означает "один record_anon
, за которым следует ноль, один или несколько record
s ", хотя я думаю, вы, вероятно, имеете в виду" ноль, один или несколько record_anon
, за которым следует ноль, один или несколько record
s ", то есть:
let lns = record_anon* . record*