public void SetUp() { _builder = new TokenBuilder <BlogTemplate>(); _builder.Interpolate("{Content('", ".*", "')}", data => data.ToString()); _builder.Interpolate("{Url('", @"(?<controller>.*)/(?<action>.*)(/(?<id>\d*)){0,1}", "')}", data => data.ToString()); _builder.Tokenize(b => b.BlogTitle, @"{PageTitle}"); _builder.Tokenize(b => b.JavaScriptIncludes, @"{JavaScriptIncludes}"); _builder.TokenizeIf(b => b.Post, @"{Post}", b => b.Post != null, ctx => { ctx.Tokenize(b => b.PostTitle, @"{PostTitle}"); ctx.Tokenize(b => b.PostDescription, @"{PostDescription}"); ctx.Tokenize(b => b.PostBody, @"{PostBody}"); ctx.Block(d => d.Comments, @"{Comments}", commentContext => { commentContext.Tokenize(c => c.Email, @"{Comment.Email}"); commentContext.Tokenize(c => c.Author, @"{Comment.Author}"); commentContext.Tokenize(c => c.Text, @"{Comment.Text}"); }).EndsWith(@"{/Comments}"); }).EndsWith(@"{/Post}"); _builder.Block(b => b.Posts, @"{Posts}", postContext => { postContext.Tokenize(d => d.PostTitle, @"{Post.Title}"); postContext.Tokenize(d => d.PostDescription, @"{Post.Description}"); postContext.Tokenize(d => d.PostBody, @"{Post.Body}"); postContext.Tokenize(d => d.PostedOn.ToShortDateString(), @"{Post.Date}"); postContext.Block(d => d.Comments, @"{Comments}", commentContext => { commentContext.Tokenize(c => c.Email, @"{Comment.Email}"); commentContext.Tokenize(c => c.Author, @"{Comment.Author}"); commentContext.Tokenize(c => c.Text, @"{Comment.Text}"); }).EndsWith(@"{/Comments}"); }).EndsWith(@"{/Posts}"); }
/// <summary> /// Defines a child block of tokens. /// </summary> /// <typeparam name="TChild"></typeparam> /// <param name="children"></param> /// <param name="identifier"></param> /// <param name="context"></param> /// <returns></returns> public ITokenBlock <TModel, TChild> Block <TChild>(Func <TModel, IEnumerable <TChild> > children, string identifier, ITokenRoot <TChild> context) { Ensure.ArgumentNotNull(children, "children"); Ensure.ArgumentNotNullOrEmpty(identifier, "identifier"); Ensure.ArgumentNotNull(context, "context"); var blockToken = new BlockToken <TModel, TChild> { Resolve = p => string.Empty, Identifier = string.Intern(identifier), Items = model => GetEachChild(model, children) }; _currentToken = blockToken; Token.Children.Add(_currentToken); foreach (var token in context.Token.Children) { _currentToken.AddChild(token); } return(new TokenBlockBuilder <TModel, TChild>(_currentToken)); }
public void SetUp() { _builder = new TokenBuilder <BlogTemplate>(); }
/// <summary> /// Defines a child conditional token for replacement. /// </summary> /// <typeparam name="TChild"></typeparam> /// <param name="replacement"></param> /// <param name="identifier"></param> /// <param name="condition"></param> /// <param name="context"></param> /// <returns></returns> public IConditionalToken <TModel, TChild> TokenizeIf <TChild>(Func <TModel, TChild> replacement, string identifier, Func <TModel, bool> condition, ITokenRoot <TChild> context) { Ensure.ArgumentNotNull(replacement, "replacement"); Ensure.ArgumentNotNullOrEmpty(identifier, "identifier"); Ensure.ArgumentNotNull(condition, "condition"); Ensure.ArgumentNotNull(context, "context"); var blockToken = new BlockToken <TModel, TChild> { Child = replacement, Resolve = p => string.Empty, Identifier = string.Intern(identifier), Condition = condition }; _currentToken = blockToken; Token.Children.Add(_currentToken); foreach (var token in context.Token.Children) { _currentToken.AddChild(token); } return(new TokenBlockBuilder <TModel, TChild>(_currentToken)); }