|
|
|
|
using DOM.DSL.Contracts;
|
|
|
|
|
using DOM.DSL.Services;
|
|
|
|
|
using DOM.DSL.Tokens;
|
|
|
|
|
|
|
|
|
|
namespace DOM.DSL.Model
|
|
|
|
|
{
|
|
|
|
|
internal sealed class TFlowRules
|
|
|
|
|
{
|
|
|
|
|
#region Rules
|
|
|
|
|
|
|
|
|
|
public TBlockToken ListPrefix;
|
|
|
|
|
public TBlockToken ListPostfix;
|
|
|
|
|
public TBlockToken ListItemPrefix;
|
|
|
|
|
public TBlockToken ListItemPostfix;
|
|
|
|
|
public TBlockToken TextPrefix;
|
|
|
|
|
public TBlockToken TextTemplate;
|
|
|
|
|
public TBlockToken TextPostfix;
|
|
|
|
|
public TBlockToken LinkPrefix;
|
|
|
|
|
public TBlockToken LinkTemplate;
|
|
|
|
|
public TBlockToken LinkPostfix;
|
|
|
|
|
public TBlockToken ImagePrefix;
|
|
|
|
|
public TBlockToken ImageTemplate;
|
|
|
|
|
public TBlockToken ImagePostfix;
|
|
|
|
|
public TBlockToken QuotePrefix;
|
|
|
|
|
public TBlockToken QuoteTemplate;
|
|
|
|
|
public TBlockToken QuotePostfix;
|
|
|
|
|
public TBlockToken VideoPrefix;
|
|
|
|
|
public TBlockToken VideoTemplate;
|
|
|
|
|
public TBlockToken VideoPostfix;
|
|
|
|
|
public TBlockToken AudioPrefix;
|
|
|
|
|
public TBlockToken AudioTemplate;
|
|
|
|
|
public TBlockToken AudioPostfix;
|
|
|
|
|
public TBlockToken TablePrefix;
|
|
|
|
|
public TBlockToken TablePostfix;
|
|
|
|
|
public TBlockToken SectionPrefix;
|
|
|
|
|
public TBlockToken SectionPostfix;
|
|
|
|
|
public TBlockToken ParagraphPrefix;
|
|
|
|
|
public TBlockToken ParagraphPostfix;
|
|
|
|
|
public TBlockToken ColumnsPrefix;
|
|
|
|
|
public TBlockToken ColumnsPostfix;
|
|
|
|
|
public TBlockToken ColumnPrefix;
|
|
|
|
|
public TBlockToken ColumnTemplate;
|
|
|
|
|
public TBlockToken ColumnPostfix;
|
|
|
|
|
public TBlockToken RowPrefix;
|
|
|
|
|
public TBlockToken RowPostfix;
|
|
|
|
|
public TBlockToken FirstRowCellPrefix;
|
|
|
|
|
public TBlockToken FirstRowCellPostfix;
|
|
|
|
|
public TBlockToken CellPrefix;
|
|
|
|
|
public TBlockToken CellPostfix;
|
|
|
|
|
public TBlockToken FormPrefix;
|
|
|
|
|
public TBlockToken FormTemplate;
|
|
|
|
|
public TBlockToken FormPostfix;
|
|
|
|
|
public TBlockToken AudioplayerPrefix;
|
|
|
|
|
public TBlockToken AudioplayerPostfix;
|
|
|
|
|
public TBlockToken VideoplayerPrefix;
|
|
|
|
|
public TBlockToken VideoplayerPostfix;
|
|
|
|
|
public TBlockToken GalleryPrefix;
|
|
|
|
|
public TBlockToken GalleryPostfix;
|
|
|
|
|
|
|
|
|
|
#endregion Rules
|
|
|
|
|
|
|
|
|
|
#region Special table builder
|
|
|
|
|
|
|
|
|
|
public bool UseSpecialTableBuilder = false;
|
|
|
|
|
public ISpecialTableBuilder SpecialTableBuilder;
|
|
|
|
|
|
|
|
|
|
#endregion Special table builder
|
|
|
|
|
|
|
|
|
|
public void Bootstrap()
|
|
|
|
|
{
|
|
|
|
|
if (null == SectionPrefix) SectionPrefix = null;
|
|
|
|
|
if (null == SectionPostfix) SectionPostfix = null;
|
|
|
|
|
if (null == ParagraphPrefix) ParagraphPrefix = null;
|
|
|
|
|
if (null == ParagraphPostfix) ParagraphPostfix = null;
|
|
|
|
|
if (null == ListPrefix) ListPrefix = null;
|
|
|
|
|
if (null == ListPostfix) ListPostfix = null;
|
|
|
|
|
if (null == ListItemPrefix) ListItemPrefix = null;
|
|
|
|
|
if (null == ListItemPostfix) ListItemPostfix = null;
|
|
|
|
|
if (null == TablePrefix) TablePrefix = null;
|
|
|
|
|
if (null == TablePostfix) TablePostfix = null;
|
|
|
|
|
if (null == ColumnsPrefix) ColumnsPrefix = null;
|
|
|
|
|
if (null == ColumnsPostfix) ColumnsPostfix = null;
|
|
|
|
|
if (null == ColumnPrefix) ColumnPrefix = null;
|
|
|
|
|
if (null == ColumnTemplate) ColumnTemplate = null;
|
|
|
|
|
if (null == ColumnPostfix) ColumnPostfix = null;
|
|
|
|
|
if (null == RowPrefix) RowPrefix = null;
|
|
|
|
|
if (null == RowPostfix) RowPostfix = null;
|
|
|
|
|
if (null == CellPrefix) CellPrefix = null;
|
|
|
|
|
if (null == CellPostfix) CellPostfix = null;
|
|
|
|
|
if (null == FirstRowCellPrefix) FirstRowCellPrefix = null;
|
|
|
|
|
if (null == FirstRowCellPostfix) FirstRowCellPostfix = null;
|
|
|
|
|
if (null == AudioplayerPrefix) AudioplayerPrefix = null;
|
|
|
|
|
if (null == AudioplayerPostfix) AudioplayerPostfix = null;
|
|
|
|
|
if (null == VideoplayerPrefix) VideoplayerPrefix = null;
|
|
|
|
|
if (null == VideoplayerPostfix) VideoplayerPostfix = null;
|
|
|
|
|
if (null == GalleryPrefix) GalleryPrefix = null;
|
|
|
|
|
if (null == GalleryPostfix) GalleryPostfix = null;
|
|
|
|
|
if (null == FormPrefix) FormPrefix = null;
|
|
|
|
|
if (null == FormTemplate) FormTemplate = null;
|
|
|
|
|
if (null == FormPostfix) FormPostfix = null;
|
|
|
|
|
if (null == VideoPrefix) VideoPrefix = null;
|
|
|
|
|
if (null == VideoTemplate) VideoTemplate = null;
|
|
|
|
|
if (null == VideoPostfix) VideoPostfix = null;
|
|
|
|
|
if (null == AudioPrefix) AudioPrefix = null;
|
|
|
|
|
if (null == AudioTemplate) AudioTemplate = null;
|
|
|
|
|
if (null == AudioPostfix) AudioPostfix = null;
|
|
|
|
|
if (null == ImagePrefix) ImagePrefix = null;
|
|
|
|
|
if (null == ImageTemplate) ImageTemplate = null;
|
|
|
|
|
if (null == ImagePostfix) ImagePostfix = null;
|
|
|
|
|
if (null == LinkPrefix) LinkPrefix = null;
|
|
|
|
|
if (null == LinkTemplate) LinkTemplate = null;
|
|
|
|
|
if (null == LinkPostfix) LinkPostfix = null;
|
|
|
|
|
if (null == QuotePrefix) QuotePrefix = null;
|
|
|
|
|
if (null == QuoteTemplate) QuoteTemplate = new TBlockToken(new[] { new TElementToken { ElementName = "self" } });
|
|
|
|
|
if (null == QuotePostfix) QuotePostfix = null;
|
|
|
|
|
if (null == TextPrefix) TextPrefix = null;
|
|
|
|
|
if (null == TextTemplate) TextTemplate = new TBlockToken(new[] { new TElementToken { ElementName = "self" } });
|
|
|
|
|
if (null == TextPostfix) TextPostfix = null;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void UpdateRule(string elementName, string functionName, TBlockToken rule_token, string special)
|
|
|
|
|
{
|
|
|
|
|
switch (elementName)
|
|
|
|
|
{
|
|
|
|
|
case "list":
|
|
|
|
|
switch (functionName)
|
|
|
|
|
{
|
|
|
|
|
case "prefix":
|
|
|
|
|
ListPrefix = rule_token;
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case "postfix":
|
|
|
|
|
ListPostfix = rule_token;
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case "ignore":
|
|
|
|
|
ListPostfix = ListPrefix = null;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case "listitem":
|
|
|
|
|
switch (functionName)
|
|
|
|
|
{
|
|
|
|
|
case "prefix":
|
|
|
|
|
ListItemPrefix = rule_token;
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case "postfix":
|
|
|
|
|
ListItemPostfix = rule_token;
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case "ignore":
|
|
|
|
|
ListItemPrefix = ListItemPostfix = null;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case "text":
|
|
|
|
|
switch (functionName)
|
|
|
|
|
{
|
|
|
|
|
case "prefix":
|
|
|
|
|
TextPrefix = rule_token;
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case "template":
|
|
|
|
|
TextTemplate = rule_token;
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case "postfix":
|
|
|
|
|
TextPostfix = rule_token;
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case "ignore":
|
|
|
|
|
TextPrefix = TextTemplate = TextPostfix = null;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case "link":
|
|
|
|
|
switch (functionName)
|
|
|
|
|
{
|
|
|
|
|
case "prefix":
|
|
|
|
|
LinkPrefix = rule_token;
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case "template":
|
|
|
|
|
LinkTemplate = rule_token;
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case "postfix":
|
|
|
|
|
LinkPostfix = rule_token;
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case "ignore":
|
|
|
|
|
LinkPrefix = LinkTemplate = LinkPostfix = null;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case "image":
|
|
|
|
|
switch (functionName)
|
|
|
|
|
{
|
|
|
|
|
case "prefix":
|
|
|
|
|
ImagePrefix = rule_token;
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case "template":
|
|
|
|
|
ImageTemplate = rule_token;
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case "postfix":
|
|
|
|
|
ImagePostfix = rule_token;
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case "ignore":
|
|
|
|
|
ImagePrefix = ImageTemplate = ImagePostfix = null;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case "quote":
|
|
|
|
|
switch (functionName)
|
|
|
|
|
{
|
|
|
|
|
case "prefix":
|
|
|
|
|
QuotePrefix = rule_token;
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case "template":
|
|
|
|
|
QuoteTemplate = rule_token;
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case "postfix":
|
|
|
|
|
QuotePostfix = rule_token;
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case "ignore":
|
|
|
|
|
QuotePrefix = QuoteTemplate = QuotePostfix = null;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case "form":
|
|
|
|
|
switch (functionName)
|
|
|
|
|
{
|
|
|
|
|
case "prefix":
|
|
|
|
|
FormPrefix = rule_token;
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case "template":
|
|
|
|
|
FormTemplate = rule_token;
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case "postfix":
|
|
|
|
|
FormPostfix = rule_token;
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case "ignore":
|
|
|
|
|
FormPrefix = FormTemplate = FormPostfix = null;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case "video":
|
|
|
|
|
switch (functionName)
|
|
|
|
|
{
|
|
|
|
|
case "prefix":
|
|
|
|
|
VideoPrefix = rule_token;
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case "template":
|
|
|
|
|
VideoTemplate = rule_token;
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case "postfix":
|
|
|
|
|
VideoPostfix = rule_token;
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case "ignore":
|
|
|
|
|
VideoPrefix = VideoTemplate = VideoPostfix = null;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case "audio":
|
|
|
|
|
switch (functionName)
|
|
|
|
|
{
|
|
|
|
|
case "prefix":
|
|
|
|
|
AudioPrefix = rule_token;
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case "template":
|
|
|
|
|
AudioTemplate = rule_token;
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case "postfix":
|
|
|
|
|
AudioPostfix = rule_token;
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case "ignore":
|
|
|
|
|
AudioPrefix = AudioTemplate = AudioPostfix = null;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case "section":
|
|
|
|
|
switch (functionName)
|
|
|
|
|
{
|
|
|
|
|
case "prefix":
|
|
|
|
|
SectionPrefix = rule_token;
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case "postfix":
|
|
|
|
|
SectionPostfix = rule_token;
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case "ignore":
|
|
|
|
|
SectionPrefix = SectionPostfix = null;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case "paragraph":
|
|
|
|
|
switch (functionName)
|
|
|
|
|
{
|
|
|
|
|
case "prefix":
|
|
|
|
|
ParagraphPrefix = rule_token;
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case "postfix":
|
|
|
|
|
ParagraphPostfix = rule_token;
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case "ignore":
|
|
|
|
|
ParagraphPrefix = ParagraphPostfix = null;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case "table":
|
|
|
|
|
switch (functionName)
|
|
|
|
|
{
|
|
|
|
|
case "prefix":
|
|
|
|
|
TablePrefix = rule_token;
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case "postfix":
|
|
|
|
|
TablePostfix = rule_token;
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case "ignore":
|
|
|
|
|
TablePrefix = TablePostfix = null;
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case "special": // Using a hardcoded table conversion
|
|
|
|
|
//TablePrefix = TablePostfix = null;
|
|
|
|
|
ColumnsPrefix = ColumnsPostfix = null;
|
|
|
|
|
ColumnPrefix = ColumnTemplate = ColumnPostfix = null;
|
|
|
|
|
RowPrefix = RowPostfix = null;
|
|
|
|
|
CellPrefix = CellPostfix = null;
|
|
|
|
|
// Args: (style, paddings l-t-r-b, maxcellwidth, maxtablewidth)
|
|
|
|
|
UseSpecialTableBuilder = true;
|
|
|
|
|
SpecialTableBuilder = SpecialTableBuilderFactory.CreateSpecialTableBuilder(special);
|
|
|
|
|
if (SpecialTableBuilder == null) UseSpecialTableBuilder = false;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case "columns":
|
|
|
|
|
switch (functionName)
|
|
|
|
|
{
|
|
|
|
|
case "prefix":
|
|
|
|
|
ColumnsPrefix = rule_token;
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case "postfix":
|
|
|
|
|
ColumnsPostfix = rule_token;
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case "ignore":
|
|
|
|
|
ColumnsPrefix = ColumnsPostfix = null;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case "column":
|
|
|
|
|
switch (functionName)
|
|
|
|
|
{
|
|
|
|
|
case "prefix":
|
|
|
|
|
ColumnPrefix = rule_token;
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case "template":
|
|
|
|
|
ColumnTemplate = rule_token;
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case "postfix":
|
|
|
|
|
ColumnPostfix = rule_token;
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case "ignore":
|
|
|
|
|
ColumnPrefix = ColumnTemplate = ColumnPostfix = null;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case "tablerow":
|
|
|
|
|
switch (functionName)
|
|
|
|
|
{
|
|
|
|
|
case "prefix":
|
|
|
|
|
RowPrefix = rule_token;
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case "postfix":
|
|
|
|
|
RowPostfix = rule_token;
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case "ignore":
|
|
|
|
|
RowPrefix = RowPostfix = null;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case "tablecell":
|
|
|
|
|
switch (functionName)
|
|
|
|
|
{
|
|
|
|
|
case "prefix":
|
|
|
|
|
CellPrefix = rule_token;
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case "postfix":
|
|
|
|
|
CellPostfix = rule_token;
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case "ignore":
|
|
|
|
|
CellPrefix = CellPostfix = null;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case "videoplayer":
|
|
|
|
|
switch (functionName)
|
|
|
|
|
{
|
|
|
|
|
case "prefix":
|
|
|
|
|
VideoplayerPrefix = rule_token;
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case "postfix":
|
|
|
|
|
VideoplayerPostfix = rule_token;
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case "ignore":
|
|
|
|
|
VideoplayerPrefix = VideoplayerPostfix = null;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case "audioplayer":
|
|
|
|
|
switch (functionName)
|
|
|
|
|
{
|
|
|
|
|
case "prefix":
|
|
|
|
|
AudioplayerPrefix = rule_token;
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case "postfix":
|
|
|
|
|
AudioplayerPostfix = rule_token;
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case "ignore":
|
|
|
|
|
AudioplayerPrefix = AudioplayerPostfix = null;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case "gallery":
|
|
|
|
|
switch (functionName)
|
|
|
|
|
{
|
|
|
|
|
case "prefix":
|
|
|
|
|
GalleryPrefix = rule_token;
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case "postfix":
|
|
|
|
|
GalleryPostfix = rule_token;
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
case "ignore":
|
|
|
|
|
GalleryPrefix = GalleryPostfix = null;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|