Добавление клонирования шаблонов
This commit is contained in:
@@ -23,5 +23,10 @@ namespace mROA.CodegenTools
|
||||
{
|
||||
return StoredText;
|
||||
}
|
||||
|
||||
public object Clone()
|
||||
{
|
||||
return new DefineTemplateSection(StoredText, _tag, Context);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,6 +1,8 @@
|
||||
using System;
|
||||
|
||||
namespace mROA.CodegenTools
|
||||
{
|
||||
public interface ITemplateSection
|
||||
public interface ITemplateSection : ICloneable
|
||||
{
|
||||
TemplateDocument Context { get; set; }
|
||||
int TargetLength { get; }
|
||||
|
||||
@@ -16,5 +16,10 @@ namespace mROA.CodegenTools
|
||||
Context = context;
|
||||
InnerTemplate = innerTemplate;
|
||||
}
|
||||
|
||||
public object Clone()
|
||||
{
|
||||
return new InnerTemplateSection(_tag, InnerTemplate, Context);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -65,5 +65,10 @@ namespace mROA.CodegenTools
|
||||
return ((ITemplateSection)_insertedValue).ToString();
|
||||
}
|
||||
}
|
||||
|
||||
public object Clone()
|
||||
{
|
||||
return new InsertTemplatePart(_tag, Context, Parameters.ToArray());
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -34,5 +34,10 @@ namespace mROA.CodegenTools
|
||||
{
|
||||
return $"{nameof(LinkedTag)}: {_linkedTag}";
|
||||
}
|
||||
|
||||
public object Clone()
|
||||
{
|
||||
return new LinkTemplateSection(_linkedTag, Context);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -22,5 +22,10 @@ namespace mROA.CodegenTools
|
||||
{
|
||||
return _internalText;
|
||||
}
|
||||
|
||||
public object Clone()
|
||||
{
|
||||
return new LiteralTemplateSection(_internalText, Context);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -20,5 +20,10 @@ namespace mROA.CodegenTools
|
||||
{
|
||||
return _bakeFunc(Context.AdditionalContext);
|
||||
}
|
||||
|
||||
public object Clone()
|
||||
{
|
||||
return new ProgrammableTextSection(_bakeFunc, Context);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,14 +1,16 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
|
||||
namespace mROA.CodegenTools
|
||||
{
|
||||
public class TemplateDocument
|
||||
public class TemplateDocument : ICloneable
|
||||
{
|
||||
public List<ITemplateSection> Parts { get; set; } = new List<ITemplateSection>();
|
||||
public object AdditionalContext { get; set; }
|
||||
public ITagged this[string tag] => Parts.OfType<ITagged>().FirstOrDefault(i => i.Tag == tag);
|
||||
|
||||
public void Insert(string tag, object value)
|
||||
{
|
||||
var selectedPart = this[tag];
|
||||
@@ -22,7 +24,7 @@ namespace mROA.CodegenTools
|
||||
{
|
||||
var approximatelyLength = Parts.Sum(i => i.TargetLength);
|
||||
var stringBuilder = new StringBuilder(approximatelyLength);
|
||||
|
||||
|
||||
foreach (var part in Parts.OfType<IBaking>())
|
||||
{
|
||||
var baked = part.Bake();
|
||||
@@ -31,5 +33,20 @@ namespace mROA.CodegenTools
|
||||
|
||||
return stringBuilder.ToString();
|
||||
}
|
||||
|
||||
public object Clone()
|
||||
{
|
||||
var cloneDoc = new TemplateDocument();
|
||||
cloneDoc.AdditionalContext = AdditionalContext is ICloneable c ? c.Clone() : AdditionalContext;
|
||||
|
||||
cloneDoc.Parts = Parts.Select(i =>
|
||||
{
|
||||
var clone = i.Clone() as ITemplateSection;
|
||||
clone.Context = cloneDoc;
|
||||
return clone;
|
||||
}).ToList();
|
||||
|
||||
return cloneDoc;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user