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