Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
Например, в XML текст не должен содержать знаков "<" и ">" — они должны быть заменены на "<" и ">" соответственно.
level_2+ for_level_1+ & a+ : 1 : 2 ^ b+ : 3 : 4 ^ & ^
level2 на первом ^, а дочитывает до конца?Вы про CDATA не слышали?
<![CDATA[]]]]><![CDATA[>]]>
CDATA — хорошее решение, но все же, если текст будет содержать в себе закрывающую комбинацию
А идея использования завершающих строк как раз в том, чтобы можно было подобрать такую завершающую строку, которая в тексте не встретится, например «abc end zzz ///». А если встретится, то назначить другую для этого поля.
В структуре (блоке данных) «level_2» указано только одно поле — «for_level_1», [...] Все, что находится между «for_level_1+ &» и "&"
level_2 — поле, но внутри for_level_1 — текст?На мой взгляд, человеку будет неудобно каждый раз подсчитывать длину исходного текста и/или подгонять в рамки размера блока, особенно при частом редактировании.
Какова вероятность этого для обычного человеко-читаемого текста?
А человеку обычно и не надо руками запихивать в поле человекочитаемого документа существенный кусок документа на другом (или том же) языке
Первое, что пришло в голову — человек хочет написать пример использования формата FORMAT и поместить этот пример в текстовое поле в том же самом формате FORMAT. Он использует обычный текстовый редактор, чтобы редактировать все это.
Задачи бывают разные. И такие тоже встречаются.
Я предложил вариант решения подобных задач с полным сохранением исходного текста.
Для этого нужно решить задачу подбора символа, не встречающегося в исходном тексте. Как именно вы планируете это делать?
У вас явно смешаны две разных задачи.
Как парсер понимает, что внутри level_2 — поле, но внутри for_level_1 — текст?
Типизация и все проверки на соответствие осуществляются в обработчике HV — ему известно заранее, какие имена полей могут встретится и значения какого типа и формата они должны содержать.
Как парсер понимает, что внутри level_2 — поле, но внутри for_level_1 — текст?
переопределение завершающего символа допускается только для текста, но не для структуры
Почему парсер не прекращает чтение level2 на первом ^, а дочитывает до конца?
и оно называется «length-prefixed»
Много вариантов записи многострочного текста и каждый со своими ограничениями
Нужно внимательно следить, чтобы в многострочном тексте не было завершающей конструкции.
Возможность записи без отступов — скорее вредная (человеку сложно воспринимать), чем полезная (экономия на спичках)
Если надо сохранить в поле весь текст этой статьи с комментариями, какой разделитель выбрать? Получается, нужен какой-то редактор, который будет назначать разделители или хотя бы просто проверять валидность разметки.
Если надо в одном поле сохранить завершающий перевод строки, а в другом нет, какая у них должна быть разметка?
text% .string 1 .string 2 . ^
Вариант Б. Начинать учитывать отступы от первого непробельного символа в каждой строке, причем сам этот первый символ учитываться не будет:
Это чтобы часть пробелов не учитывать, а часть учитывать? В каком сценарии такое может быть нужно?
level1+
level2+
level3+
level4+
text%
> Это красная строка.
>А это обычная строка.
> Это еще одна красная строка.
> Это цитата, которая имеет свое количество отступов.
> И эти отступы легче посчитать от первого символа, чем от левого края.
^
^
^
^
^
Формат хранения данных HV как попытка решения проблемы наглядного хранения текстовых полей