Существует один флаг новой строки для каждой ячейки в массивах ("any-block!"), Который указывает, должен ли процесс формования выводить новую строку перед этим значением.
Отступзапускается только из этих флагов. Отступ начинается с первого флага новой строки, и каждая новая строка будет выравниваться по этому уровню, с отступом в конце блока, если произошли какие-либо новые строки / отступы.
>> data: [a b c]
>> new-line next data true
>> data
== [a
b c
]
Обратите внимание, что в блоке [a b c]
есть 4 "позиции кандидата" для новых строк (например, позиции [* a * b * c *]
).Тем не менее, есть только три ячейки значения, с маркером новой строки, указывающим на желание вывести новую строку до этой ячейки.Не имея возможности поместить четвертый сигнал новой строки, в Rebol2 и Red принято неявно ставить закрывающую скобку на своей собственной строке, если были обработаны какие-либо маркеры новой строки.
Я уже упоминал что не совсем очевидно, как именно такая «внеполосная» информация управляется перед лицом серийных модификаций.Это помогает оправдать ваши ожидания.Даже если беспокоиться только о одном бите , есть много нюансов, например, когда вы говорите:
compose [
1 + (block1)
(block2)
]
Как следует объединять маркеры новой строки, между тем, что находится в COMPOSE, и тем, что находится всклеены сами данные?Это просто логика, связанная с один бит .Ввод «подсчета отступов» привел бы к еще большему количеству вопросов.Кроме того, для этого подсчета осталось не так много битов: одно из «правил игры» состоит в том, чтобы сократить до 4 указателей платформы на ячейку значения.
Расширение возможностей форматирования не являетсяслишком вероятноОдна особенность запроса, чтобы хвост получал свой собственный маркер новой строки, была принята для открытого исходного кода Rebol3 , но отклонена Red .Я не ожидал бы увидеть намного больше сделанного в этой области.