Ожидаемый результат этого что-то вроде:
Это заголовок
Здравствуйте, меня зовут Дэвид
This is the content ...
My name is Heino.
My name is Sebastian.
Это нижний колонтитул
Как вы управляете отношением вложенных массивов в хэш-карте к повторяемым разделам в шаблоне? Каково реальное поведение шаблона должно быть? Если для несекционного элемента предоставляется массив, что он будет делать? Если элементу раздела предоставлено одно значение, будет ли он обрабатываться так же, как массив с единственным элементом (я так полагаю)?
Во всяком случае, что касается парсера для шаблона (независимо от того, что вы в конечном итоге делаете с отображением данных) ... Что я хотел бы сделать, так это создать класс для каждого типа токена, включая универсальный для не содержание. Они наследуются от общего базового класса токенов с переопределяемыми методами Parse, Render и Map.
Составьте схему своей диаграммы состояний и выясните, каковы ваши точки входа и выхода для каждого состояния, затем закодируйте это в структуру вызова между токенами. В конце вы хотите получить перечисляемую коллекцию токенов, которая описывает ваш шаблон.
Если у вас есть это в абстрактной форме, вы можете перебрать коллекцию, вызывая Map для токенов, чтобы назначить данные из хэш-карты токенам, а затем вызвать Render, чтобы преобразовать шаблон в окончательную форму.
Надеюсь, это поможет.