private void ProcessMasterTag(string tag, BlockResult result) { var valueStart = tag.IndexOf(' '); if (valueStart < 0) { throw new RenderingException("Master view path is undefined!"); } result.MasterView = tag.Substring(valueStart + 1).Trim(); }
private void ProcessUrlTag(string tag, BlockResult result) { var valueStart = tag.IndexOf(' '); if (valueStart < 0) { throw new RenderingException("Url path is undefined!"); } var url = tag.Substring(valueStart + 1).Trim(); url = NetPath.Combine(UrlRoot, url); result.Builder.Append(url); }
public BlockResult ProcessBlock(string text, VariableCollection valueCollection) { var result = new BlockResult(); if (string.IsNullOrEmpty(text)) { return(result); } if (RemoveComments) { text = RemoveTextComments(text); } var read_pos = 0; while (read_pos < text.Length) { if (!FindAnyTag(text, "{{", "}}", read_pos, out var tagStart, out var tagEnd, out var tag)) { break; } result.Builder.Append(text, read_pos, tagStart - read_pos); read_pos = tagEnd; if (tag.StartsWith("#")) { if (tag.StartsWith("#if ", StringComparison.OrdinalIgnoreCase)) { conditionalBlock.Process(text, tag, valueCollection, result, ref read_pos); } else if (tag.StartsWith("#master ", StringComparison.OrdinalIgnoreCase)) { ProcessMasterTag(tag, result); } else if (tag.StartsWith("#url ", StringComparison.OrdinalIgnoreCase)) { ProcessUrlTag(tag, result); } else if (string.Equals(tag, "#script", StringComparison.OrdinalIgnoreCase)) { ProcessScriptBlock(text, valueCollection, result, ref read_pos); } else if (string.Equals(tag, "#style", StringComparison.OrdinalIgnoreCase)) { ProcessStyleBlock(text, valueCollection, result, ref read_pos); } else if (tag.StartsWith("#each ", StringComparison.OrdinalIgnoreCase)) { eachBlock.Process(text, tag, valueCollection, result, ref read_pos); } else { result.Builder.Append(text.Substring(tagStart, tagEnd - tagStart)); } } else { // Process Variable Tag if (valueCollection != null && valueCollection.TryGetFormattedValue(tag, out var item_value)) { result.Builder.Append(item_value); continue; } var sourceText = text.Substring(tagStart, tagEnd - tagStart); var varResult = OnVariableNotFound(tag, sourceText); if (!string.IsNullOrEmpty(varResult)) { result.Builder.Append(varResult); } } } if (read_pos < text.Length) { result.Builder.Append(text, read_pos, text.Length - read_pos); } return(result); }
private void ProcessStyleBlock(string text, VariableCollection valueCollection, BlockResult result, ref int readPos) { var endTag = "{{#endstyle}}"; var blockEndStart = text.IndexOf(endTag, readPos, StringComparison.OrdinalIgnoreCase); if (blockEndStart < 0) { throw new RenderingException("No #EndStyle tag was found!"); } var blockText = text.Substring(readPos, blockEndStart - readPos); readPos = blockEndStart + endTag.Length; var blockResult = ProcessBlock(blockText, valueCollection); result.Styles.Add(blockResult.Text); }