105 lines
3.1 KiB
C#
105 lines
3.1 KiB
C#
// /**
|
|
// * File: TemplateReader.cs
|
|
// * Author: haraldwolff
|
|
// *
|
|
// * This file and it's content is copyrighted by the Author and / or copyright holder.
|
|
// * Any use wihtout proper permission is illegal and may lead to legal actions.
|
|
// *
|
|
// *
|
|
// **/
|
|
using System;
|
|
using System.IO;
|
|
using System.Net;
|
|
using ln.templates.html;
|
|
|
|
namespace ln.templates
|
|
{
|
|
public class TemplateReader : ElementReader
|
|
{
|
|
|
|
public virtual TemplateDocument TemplateDocument => Document as TemplateDocument;
|
|
|
|
protected TemplateReader()
|
|
{
|
|
}
|
|
|
|
public override DocumentElement CreateDocument() => new TemplateDocument();
|
|
public override Element CreateElement(string tagName) => TemplateElement.Create(tagName);
|
|
|
|
public override void CloseTag(string tagName)
|
|
{
|
|
Element saveCurrentElement = CurrentElement;
|
|
base.CloseTag(tagName);
|
|
|
|
if (saveCurrentElement.HasAttribute("v-slot") && (saveCurrentElement.Parent is TemplateElement parentElement))
|
|
{
|
|
parentElement.SetSlot(saveCurrentElement.GetAttribute("v-slot"), saveCurrentElement);
|
|
parentElement.RemoveChild(saveCurrentElement);
|
|
saveCurrentElement.RemoveAttribute("v-slot");
|
|
}
|
|
}
|
|
|
|
public override void Text(string text)
|
|
{
|
|
if (text.Contains("{{"))
|
|
{
|
|
int pOpen = 0;
|
|
int pClose = 0;
|
|
|
|
while (pOpen < text.Length)
|
|
{
|
|
pOpen = text.IndexOf("{{", pClose);
|
|
if (pOpen == -1)
|
|
pOpen = text.Length;
|
|
|
|
string preText = text.Substring(pClose, pOpen - pClose);
|
|
if (preText.Length > 0)
|
|
{
|
|
CurrentElement.AppendChild(CreateTextElement(preText));
|
|
}
|
|
|
|
if (pOpen == text.Length)
|
|
break;
|
|
|
|
pOpen += 2;
|
|
|
|
pClose = text.IndexOf("}}", pOpen);
|
|
if (pClose == -1)
|
|
throw new FormatException("missing }}");
|
|
|
|
string expr = text.Substring(pOpen, pClose - pOpen);
|
|
|
|
pClose += 2;
|
|
|
|
CurrentElement.AppendChild(new ExpressionElement(expr));
|
|
}
|
|
|
|
} else
|
|
{
|
|
CurrentElement.AppendChild(
|
|
CreateTextElement(text)
|
|
);
|
|
}
|
|
}
|
|
|
|
|
|
public static TemplateDocument Parse(string source)
|
|
{
|
|
using (StringReader reader = new StringReader(source))
|
|
return ReadTemplate(reader);
|
|
}
|
|
public static TemplateDocument ReadTemplate(string filename)
|
|
{
|
|
using (StreamReader reader = new StreamReader(filename))
|
|
return ReadTemplate(reader);
|
|
}
|
|
public static TemplateDocument ReadTemplate(TextReader reader)
|
|
{
|
|
var templateReader = new TemplateReader();
|
|
templateReader.Read(reader);
|
|
return templateReader.TemplateDocument;
|
|
}
|
|
|
|
}
|
|
}
|