diff --git a/mROA.CodegenTools/InsertTemplatePart.cs b/mROA.CodegenTools/InsertTemplatePart.cs index fd9ac4d..26ead20 100644 --- a/mROA.CodegenTools/InsertTemplatePart.cs +++ b/mROA.CodegenTools/InsertTemplatePart.cs @@ -3,7 +3,7 @@ using System.Collections.Generic; namespace mROA.CodegenTools { - public class InsertTemplatePart : ITemplatePart, ITagged + public class InsertTemplatePart : ITagged { private object _insertedValue; private string _tag; diff --git a/mROA.CodegenTools/ProgrammableTextPart.cs b/mROA.CodegenTools/ProgrammableTextPart.cs new file mode 100644 index 0000000..132bbcf --- /dev/null +++ b/mROA.CodegenTools/ProgrammableTextPart.cs @@ -0,0 +1,24 @@ +using System; + +namespace mROA.CodegenTools +{ + public class ProgrammableTextPart : ITemplatePart + { + public TemplateDocument Context { get; set; } + public int TargetLength => 0; + + private Func _bakeFunc; + + public ProgrammableTextPart(Func bakeFunc, TemplateDocument context) + { + _bakeFunc = bakeFunc; + Context = context; + } + + + public string Bake() + { + return _bakeFunc(Context.AdditionalContext); + } + } +} \ No newline at end of file diff --git a/mROA.CodegenTools/TemplateDocument.cs b/mROA.CodegenTools/TemplateDocument.cs index 85b006f..0f73749 100644 --- a/mROA.CodegenTools/TemplateDocument.cs +++ b/mROA.CodegenTools/TemplateDocument.cs @@ -7,6 +7,7 @@ namespace mROA.CodegenTools public class TemplateDocument { public List Parts { get; } + public object AdditionalContext { get; set; } public ITagged this[string tag] => Parts.OfType().FirstOrDefault(i => i.Tag == tag); public void Insert(string tag, object value) {