98 lines
2.6 KiB
C#
98 lines
2.6 KiB
C#
using System;
|
|
using System.IO;
|
|
using System.Collections.Generic;
|
|
|
|
namespace ln.templates.elements
|
|
{
|
|
public abstract class Element
|
|
{
|
|
public ContainerElement Container { get; internal set; }
|
|
|
|
protected Element(ContainerElement container)
|
|
{
|
|
Container = container;
|
|
if (Container != null)
|
|
Container.children.Add(this);
|
|
}
|
|
|
|
public abstract void Generate(TextWriter writer, Template.Context context);
|
|
}
|
|
|
|
public class ContainerElement : Element
|
|
{
|
|
internal List<Element> children { get; } = new List<Element>();
|
|
|
|
public ContainerElement(ContainerElement container)
|
|
:base(container)
|
|
{
|
|
}
|
|
|
|
public void GenerateChildren(TextWriter writer, Template.Context context)
|
|
{
|
|
foreach (Element c in children)
|
|
c.Generate(writer, context);
|
|
}
|
|
|
|
public override void Generate(TextWriter writer, Template.Context context)
|
|
{
|
|
GenerateChildren(writer, context);
|
|
}
|
|
|
|
public Element[] Children
|
|
{
|
|
get => children.ToArray();
|
|
}
|
|
}
|
|
|
|
public class TextElement : Element
|
|
{
|
|
public String Text { get; }
|
|
public TextElement(ContainerElement container,String text)
|
|
:base(container)
|
|
{
|
|
Text = text;
|
|
}
|
|
|
|
public override void Generate(TextWriter writer, Template.Context context)
|
|
{
|
|
writer.Write(Text);
|
|
}
|
|
}
|
|
|
|
public class ExpressionElement : Element
|
|
{
|
|
public Expression Expression { get; }
|
|
|
|
public ExpressionElement(ContainerElement container,Expression expression)
|
|
:base(container)
|
|
{
|
|
Expression = expression;
|
|
}
|
|
|
|
public override void Generate(TextWriter writer, Template.Context context)
|
|
{
|
|
object v = Expression.Evaluate(context.ExpressionContext);
|
|
if (v != null)
|
|
writer.Write(v.ToString());
|
|
}
|
|
}
|
|
public class SetElement : Element
|
|
{
|
|
public String SetName { get; }
|
|
public Expression Expression { get; }
|
|
|
|
public SetElement(ContainerElement container, String setName,Expression expression)
|
|
: base(container)
|
|
{
|
|
SetName = setName;
|
|
Expression = expression;
|
|
}
|
|
|
|
public override void Generate(TextWriter writer, Template.Context context)
|
|
{
|
|
object v = Expression.Evaluate(context.ExpressionContext);
|
|
context.ExpressionContext.SetMappedValue(SetName, v);
|
|
}
|
|
}
|
|
}
|