Representando um valor multilinha em Augeas usando '\'

1

Eu recentemente montei uma lente em Augeas e agora ela não está funcionando como desejado.

Meu arquivo contém algumas referências com a seguinte sintaxe:

Value1 = KEY 32 OR\
   KEY 33 OR\
   ....

Como eu represento a combinação de nova linha da barra invertida e a trato como parte do mesmo valor?

EDIT - Estou executando a versão .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*

...

    
por Tim Brigham 15.10.2012 / 19:36

1 resposta

1

Sua lente não está escrita para entradas de múltiplas linhas. Se você quiser dar suporte a entradas de várias linhas, será necessário usar IniFile.entry_multiline :

let entry_multiline (kw:regexp) (sep:lens) (comment:lens)
                       = [ key kw . sep . sto_multiline? . (comment|eol) ] | comment

No entanto, essa definição não reconhece \ como um símbolo de continuação de linha porque eu nunca vi um IniFile usá-lo até hoje. Enquanto \ é comumente usado como um símbolo de continuação de linha para vários formatos de chave / valor, a IniFiles geralmente usa o recuo para determinar se uma linha é uma continuação da anterior.

Como nota, não acho que sua definição de lns seja realmente o que você pretende que seja:

let lns       = record_anon | record*

significa "um record_anon , seguido por zero, um ou mais record s", embora você provavelmente queira dizer "zero, um ou mais record_anon , seguido por zero, um ou mais record s ", que é:

let lns       = record_anon* . record*
    
por 15.10.2012 / 22:00

Tags