public override BlockClosingAction Render(ViewSourceReader viewSourceReader, TemplateOptions options, TemplateClassBuilder builder) { builder.AppendOutput(viewSourceReader.CurrentInputLine.Indent); builder.AppendOutput(viewSourceReader.CurrentInputLine.NormalizedText); builder.AppendOutputLine(); return(EmptyClosingAction); }
public override BlockClosingAction Render(ViewSourceReader viewSourceReader, TemplateOptions options, TemplateClassBuilder builder) { var currentInputLine = viewSourceReader.CurrentInputLine; var content = currentInputLine.NormalizedText.Trim().ToLowerInvariant(); if (string.IsNullOrEmpty(content)) { builder.AppendOutput(@"<!DOCTYPE html PUBLIC ""-//W3C//DTD XHTML 1.0 Transitional//EN"" ""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"">"); } else if (string.Equals(content, "1.1")) { builder.AppendOutput(@"<!DOCTYPE html PUBLIC ""-//W3C//DTD XHTML 1.1//EN"" ""http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"">"); } else if (string.Equals(content, "strict")) { builder.AppendOutput(@"<!DOCTYPE html PUBLIC ""-//W3C//DTD XHTML 1.0 Strict//EN"" ""http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"">"); } else if (string.Equals(content, "frameset")) { builder.AppendOutput(@"<!DOCTYPE html PUBLIC ""-//W3C//DTD XHTML 1.0 Frameset//EN"" ""http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd"">"); } else if (string.Equals(content, "html")) { builder.AppendOutput(@"<!DOCTYPE HTML PUBLIC ""-//W3C//DTD HTML 4.01 Transitional//EN"" ""http://www.w3.org/TR/html4/loose.dtd"">"); } else if (string.Equals(content, "html strict")) { builder.AppendOutput(@"<!DOCTYPE HTML PUBLIC ""-//W3C//DTD HTML 4.01//EN"" ""http://www.w3.org/TR/html4/strict.dtd"">"); } else if (string.Equals(content, "html frameset")) { builder.AppendOutput(@"<!DOCTYPE HTML PUBLIC ""-//W3C//DTD HTML 4.01 Frameset//EN"" ""http://www.w3.org/TR/html4/frameset.dtd"">"); } else { var parts = content.Split(' '); if (string.Equals(parts[0], "xml")) { var encoding = "utf-8"; if (parts.Length == 2) { encoding = parts[1]; } var invariant = Utility.FormatInvariant(@"<?xml version=""1.0"" encoding=""{0}"" ?>", encoding); builder.AppendOutput(invariant); } else { SyntaxException.Throw(currentInputLine, ErrorParsingTag, currentInputLine); } } builder.AppendOutputLine(); return(EmptyClosingAction); }
protected static void AppendText(string text, TemplateClassBuilder builder, TemplateOptions options) { var encodeHtml = options.EncodeHtml; if (text.StartsWith("!")) { text = text.Substring(1, text.Length - 1); text.TrimStart(' '); encodeHtml = false; } if (text.StartsWith("&")) { text = text.Substring(1, text.Length - 1); text.TrimStart(' '); encodeHtml = true; } var parser = new ExpressionStringParser(text); parser.Parse(); foreach (var expressionStringToken in parser.ExpressionStringTokens) { if (expressionStringToken.IsExpression) { builder.AppendCode(expressionStringToken.Value, encodeHtml); } else { builder.AppendOutput(expressionStringToken.Value); } } }
public override BlockClosingAction Render(ViewSourceReader viewSourceReader, TemplateOptions options, TemplateClassBuilder builder) { var inputLine = viewSourceReader.CurrentInputLine; builder.AppendOutput(inputLine.Indent); builder.AppendCode(inputLine.NormalizedText.Trim(), options.EncodeHtml); builder.AppendOutputLine(); return(EmptyClosingAction); }
public override BlockClosingAction Render(ViewSourceReader viewSourceReader, TemplateOptions options, TemplateClassBuilder builder) { var currentInputLine = viewSourceReader.CurrentInputLine; var match = _commentRegex.Match(currentInputLine.NormalizedText); if (!match.Success) { SyntaxException.Throw(currentInputLine, ErrorParsingTag, currentInputLine); } var ieBlock = match.Groups[1].Value; var content = match.Groups[2].Value; var openingTag = new StringBuilder(currentInputLine.Indent); openingTag.Append("<!--"); var closingTag = new StringBuilder("-->"); if (!string.IsNullOrEmpty(ieBlock)) { openingTag.AppendFormat("{0}>", ieBlock); closingTag.Insert(0, "<![endif]"); } if (string.IsNullOrEmpty(content)) { builder.AppendOutput(openingTag.ToString()); builder.AppendOutputLine(); closingTag.Insert(0, currentInputLine.Indent); } else { if (content.Length > 50) { builder.AppendOutput(openingTag.ToString()); builder.AppendOutputLine(); builder.AppendOutput(viewSourceReader.NextIndent); builder.AppendOutput(content); builder.AppendOutputLine(); } else { builder.AppendOutput(openingTag.ToString()); builder.AppendOutput(content); closingTag.Insert(0, ' '); } } return(() => { builder.AppendOutput(closingTag.ToString()); builder.AppendOutputLine(); }); }
public override BlockClosingAction Render(ViewSourceReader viewSourceReader, TemplateOptions options, TemplateClassBuilder builder) { var currentInputLine = viewSourceReader.CurrentInputLine; var input = PreprocessLine(currentInputLine); var match = _tagRegex.Match(input); if (!match.Success) { SyntaxException.Throw(currentInputLine, ErrorParsingTag, currentInputLine); } var groups = match.Groups; var tagName = groups[1].Value.Replace("\\", string.Empty); var isWhitespaceSensitive = _whitespaceSensitiveTags.Contains(tagName); var openingTag = string.Format("{0}<{1}", currentInputLine.Indent, tagName); var closingTag = string.Format("</{0}>", tagName); builder.AppendOutput(openingTag); ParseAndRenderAttributes(builder, match); var action = groups[6].Value.Trim(); if (string.Equals("/", action) || options.IsAutoClosingTag(tagName)) { builder.AppendOutput(" />"); builder.AppendOutputLine(); return(EmptyClosingAction); } var content = groups[7].Value.Trim(); if (string.IsNullOrEmpty(content)) { builder.AppendOutput(">"); builder.AppendOutputLine(); closingTag = currentInputLine.Indent + closingTag; } else { if ((content.Length > 50) || ("=" == action) || ("&=" == action) || ("!=" == action)) { builder.AppendOutput(">"); if (!isWhitespaceSensitive) { builder.AppendOutputLine(); builder.AppendOutput(viewSourceReader.NextIndent); } if (string.Equals("=", action)) { builder.AppendCode(content, options.EncodeHtml); } else if (string.Equals("&=", action)) { builder.AppendCode(content, true); } else if (string.Equals("!=", action)) { builder.AppendCode(content, false); } else { AppendText(content, builder, options); } if (!isWhitespaceSensitive) { builder.AppendOutputLine(); closingTag = currentInputLine.Indent + closingTag; } } else { builder.AppendOutput(">"); AppendText(content, builder, options); if ((currentInputLine.IndentCount + 1) == viewSourceReader.NextInputLine.IndentCount) { builder.AppendOutputLine(); closingTag = currentInputLine.Indent + closingTag; } } } return(() => { builder.AppendOutput(closingTag); builder.AppendOutputLine(); }); }