public override TemplMatchTable Handler(DocX doc, object model, TemplMatchTable m)
{
m.Validate();
var e = TemplModelEntry.Get(model, m.Fields.First());
var maxCells = TemplConst.MaxMatchesPerScope;
if (m.Fields.Length == 2)
{
if (!uint.TryParse(m.Fields[1], out maxCells))
{
throw new ArgumentException($"Templ: Dynamic Cell Module '{m.Placeholder}' has invalid maximum cells: '{m.Fields[1]}'");
}
}
var keys = e.ToStringKeys().Take((int)maxCells).ToList();
var columnDiff = keys.Count() - m.Table.ColumnCount + m.CellIndex;
for (int i = 0; i < columnDiff; i++)
{
m.Table.InsertColumn();
}
for (int i = 0; i < keys.Count(); i++)
{
var s = $"{TemplConst.MatchOpen}{TemplConst.Prefix.Text}{TemplConst.FieldSep}{m.Fields[0]}[{keys[i]}]{TemplConst.MatchClose}";
var p = m.Row.Cells[i + m.CellIndex].Paragraphs.Last();
p.InsertParagraphAfterSelf(m.Paragraph).ReplaceText(m.Paragraph.Text, s);
p.Remove(trackChanges: false);
TemplDoc.CellCopyProperties(m.Cell, m.Row.Cells[i + m.CellIndex]);
}
m.RemovePlaceholder();
m.Removed = true;
return(m);
}