Можно ли добавить дополнительный отступ к строке в складываемом текстовом блоке Yaml, не нарушая сворачивания? - PullRequest
0 голосов
/ 29 мая 2020

Рассмотрим следующий Yaml, который определяет фиксированный отступ из двух пробелов:

yaml: >-2
  First line
  will fold.

  Second line
  should fold
  as well.

Который десериализуется в:

{
  "yaml": "First line will fold.\nSecond line should fold as well."
}

Текст результата складывается должным образом. Есть только две отдельные строки (символ новой строки можно найти между словами «fold.» И «Second»).

Теперь, если перед словом «Second» добавлены дополнительные пробелы, складной лог c ломается. Предположим, что это дополнительное пространство является частью самого текста, а не частью отступа Yaml (поскольку последнее было зафиксировано на двух пробелах):

yaml: >-2
  First line
  will fold.

       Second line
  should fold
  as well.

Это десериализуется в:

{
  "yaml": "First line will fold.\n\n     Second line\nshould fold as well."
}

Теперь генерируются три отдельные строки, и первая содержит два последовательных символа новой строки, что является неожиданным.

Можно ли добавить некоторый дополнительный отступ в текстовые блоки Yaml (отступ, который является частью текстовых данных, не являющихся частью отступа Ямла), не нарушая сворачивания логи c?

1 Ответ

1 голос
/ 30 мая 2020

YAML ведет себя как указано :

Свернутые символы новой строки сохраняются для «более смещенных» и пустых строк

Вы можете использовать скаляр в кавычках вместо этого, который также выполняет перенос строк, но обрабатывает отступы по-другому:

yaml:
 "First line
  will fold.

  \     Second line
  should fold
  as well."

Здесь вы избегаете первого пробела, который должен быть содержимым, поскольку ведущий пробел полностью удаляется. Это оценивается как

%YAML 1.2
--- 
!!map {
  ? !!str "yaml"
  : !!str "First line will fold.\n     Second line should fold as well."
}
...