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); } } }
private static void AppendStringDictValue(ParsedAttribute attribute, CodeObjectCreateExpression newKeyValueExpression) { var expressionStringParser = new ExpressionStringParser(attribute.Value); expressionStringParser.Parse(); var values = expressionStringParser.ExpressionStringTokens; if (values.Count == 1) { var expressionStringToken = values[0]; if (expressionStringToken.IsExpression) { newKeyValueExpression.Parameters.Add(new CodeSnippetExpression { Value = expressionStringToken.Value }); } else { newKeyValueExpression.Parameters.Add(new CodePrimitiveExpression { Value = expressionStringToken.Value }); } } else { var concatExpression = CodeDomClassBuilder.GetConcatExpression(values); newKeyValueExpression.Parameters.Add(concatExpression); } }
public void Temp() { var parser = new ExpressionStringParser("#{string.Join(\"-\", new string[]{\"1\",\"2\",\"3\"\\})}"); parser.Parse(); Assert.AreEqual(1, parser.ExpressionStringTokens.Count); }
private static void ParseAndRenderAttributes(TemplateClassBuilder builder, Match tagMatch) { var idAndClasses = tagMatch.Groups[2].Value; var attributesHash = tagMatch.Groups[4].Value.Trim(); var match = _idClassesRegex.Match(idAndClasses); var classes = new List <string>(); foreach (Capture capture in match.Groups[2].Captures) { classes.Add(capture.Value); } if (classes.Count > 0) { attributesHash = PrependAttribute(attributesHash, Class, string.Join(" ", classes.ToArray())); } string id = null; foreach (Capture capture in match.Groups[1].Captures) { id = capture.Value; break; } if (!string.IsNullOrEmpty(id)) { attributesHash = PrependAttribute(attributesHash, Id, id); } if (string.IsNullOrEmpty(attributesHash)) { return; } var attributeParser = new AttributeParser(attributesHash); attributeParser.Parse(); foreach (var attribute in attributeParser.Attributes) { if (attribute.Type == ParsedAttributeType.String) { var expressionStringParser = new ExpressionStringParser(attribute.Value); expressionStringParser.Parse(); builder.AppendAttributeTokens(attribute.Schema, attribute.Name, expressionStringParser.ExpressionStringTokens); } else { var token = new ExpressionStringToken(attribute.Value, true); builder.AppendAttributeTokens(attribute.Schema, attribute.Name, new[] { token }); } } }
public void Empty() { var parser = new ExpressionStringParser(""); parser.Parse(); Assert.AreEqual(1, parser.ExpressionStringTokens.Count); Assert.AreEqual("", parser.ExpressionStringTokens[0].Value); Assert.IsFalse(parser.ExpressionStringTokens[0].IsExpression); }
public void OneExpression() { var parser = new ExpressionStringParser("#{test}"); parser.Parse(); Assert.AreEqual(1, parser.ExpressionStringTokens.Count); Assert.AreEqual("test", parser.ExpressionStringTokens[0].Value); Assert.IsTrue(parser.ExpressionStringTokens[0].IsExpression); }
public void EscapedExpression() { var parser = new ExpressionStringParser(@"#{abc\}\{\}}"); parser.Parse(); Assert.AreEqual(1, parser.ExpressionStringTokens.Count); Assert.AreEqual("abc}{}", parser.ExpressionStringTokens[0].Value); Assert.IsTrue(parser.ExpressionStringTokens[0].IsExpression); }
public void OnlyStrings() { var parser = new ExpressionStringParser("test string"); parser.Parse(); Assert.AreEqual(1, parser.ExpressionStringTokens.Count); Assert.AreEqual("test string", parser.ExpressionStringTokens[0].Value); Assert.IsFalse(parser.ExpressionStringTokens[0].IsExpression); }
public void Mixed() { var parser = new ExpressionStringParser("string #{test} abc {} #{cba}#{bca}#{ y}"); parser.Parse(); Assert.AreEqual(6, parser.ExpressionStringTokens.Count); Assert.AreEqual("string ", parser.ExpressionStringTokens[0].Value); Assert.IsFalse(parser.ExpressionStringTokens[0].IsExpression); Assert.AreEqual("test", parser.ExpressionStringTokens[1].Value); Assert.IsTrue(parser.ExpressionStringTokens[1].IsExpression); Assert.AreEqual(" abc {} ", parser.ExpressionStringTokens[2].Value); Assert.IsFalse(parser.ExpressionStringTokens[2].IsExpression); Assert.AreEqual("cba", parser.ExpressionStringTokens[3].Value); Assert.IsTrue(parser.ExpressionStringTokens[3].IsExpression); Assert.AreEqual("bca", parser.ExpressionStringTokens[4].Value); Assert.IsTrue(parser.ExpressionStringTokens[4].IsExpression); Assert.AreEqual(" y", parser.ExpressionStringTokens[5].Value); Assert.IsTrue(parser.ExpressionStringTokens[5].IsExpression); }
public void SimpleMixed() { var parser = new ExpressionStringParser(" a #{b } "); parser.Parse(); Assert.AreEqual(3, parser.ExpressionStringTokens.Count); var token = parser.ExpressionStringTokens[0]; Assert.AreEqual(" a ", token.Value); Assert.IsFalse(token.IsExpression); token = parser.ExpressionStringTokens[1]; Assert.AreEqual("b ", token.Value); Assert.IsTrue(token.IsExpression); token = parser.ExpressionStringTokens[2]; Assert.AreEqual(" ", token.Value); Assert.IsFalse(token.IsExpression); }
private static string AppendCreateDictionaryLocalVariable(string dictionary, CodeDomClassBuilder builder) { var parser = new AttributeParser(dictionary); parser.Parse(); var keyValuePairType = new CodeTypeReference(typeof(KeyValuePair <string, object>)); var createDictionaryMethod = new CodeMethodInvokeExpression(); foreach (var attribute in parser.Attributes) { var newKeyValueExpression = new CodeObjectCreateExpression { CreateType = keyValuePairType }; var keyExpression = new CodePrimitiveExpression { Value = attribute.Name }; newKeyValueExpression.Parameters.Add(keyExpression); if (attribute.Type == ParsedAttributeType.String) { var expressionStringParser = new ExpressionStringParser(attribute.Value); expressionStringParser.Parse(); var values = expressionStringParser.Tokens; if (values.Count == 1) { var expressionStringToken = values[0]; if (expressionStringToken.IsExpression) { newKeyValueExpression.Parameters.Add(new CodeSnippetExpression { Value = expressionStringToken.Value }); } else { newKeyValueExpression.Parameters.Add(new CodePrimitiveExpression { Value = expressionStringToken.Value }); } } else { var concatExpression = CodeDomClassBuilder.GetConcatExpression(values); newKeyValueExpression.Parameters.Add(concatExpression); } } else { newKeyValueExpression.Parameters.Add(new CodeSnippetExpression { Value = attribute.Value }); } createDictionaryMethod.Parameters.Add(newKeyValueExpression); } var getDictionaryMethod = new CodeMethodReferenceExpression { MethodName = "GetDictionaryFromKeyValue", TargetObject = new CodeVariableReferenceExpression { VariableName = "NHamlMonoRailView" } }; createDictionaryMethod.Method = getDictionaryMethod; var variableName = "nhamlTempDictionary" + tempDictionaryCount; tempDictionaryCount++; var _decl1 = new CodeVariableDeclarationStatement { InitExpression = createDictionaryMethod, Name = variableName, Type = new CodeTypeReference(typeof(IDictionary <string, object>)) }; builder.RenderMethod.Statements.Add(_decl1); return(variableName); }
public void MissingTrailingCurly() { var parser = new ExpressionStringParser("#{b "); parser.Parse(); }
private static void ParseAndRenderAttributes(TemplateClassBuilder builder, Match tagMatch) { var idAndClasses = tagMatch.Groups[2].Value; var attributesHash = tagMatch.Groups[4].Value.Trim(); var match = _idClassesRegex.Match(idAndClasses); var classes = new List<string>(); foreach (Capture capture in match.Groups[2].Captures) { classes.Add(capture.Value); } if (classes.Count > 0) { attributesHash = PrependAttribute(attributesHash, Class, string.Join(" ", classes.ToArray())); } string id = null; foreach (Capture capture in match.Groups[1].Captures) { id = capture.Value; break; } if (!string.IsNullOrEmpty(id)) { attributesHash = PrependAttribute(attributesHash, Id, id); } if (string.IsNullOrEmpty(attributesHash)) { return; } var attributeParser = new AttributeParser(attributesHash); attributeParser.Parse(); foreach (var attribute in attributeParser.Attributes) { if (attribute.Type == ParsedAttributeType.String) { var expressionStringParser = new ExpressionStringParser(attribute.Value); expressionStringParser.Parse(); builder.AppendAttributeTokens(attribute.Schema, attribute.Name, expressionStringParser.ExpressionStringTokens); } else { var token = new ExpressionStringToken(attribute.Value, true); builder.AppendAttributeTokens(attribute.Schema, attribute.Name, new[] { token }); } } }
private static string AppendCreateDictionaryLocalVariable(string dictionary, CodeDomClassBuilder builder) { var parser = new AttributeParser(dictionary); parser.Parse(); var keyValuePairType = new CodeTypeReference(typeof(KeyValuePair<string,object>)); var createDictionaryMethod = new CodeMethodInvokeExpression(); foreach (var attribute in parser.Attributes) { var newKeyValueExpression = new CodeObjectCreateExpression {CreateType = keyValuePairType}; var keyExpression = new CodePrimitiveExpression {Value = attribute.Name}; newKeyValueExpression.Parameters.Add(keyExpression); if (attribute.Type == ParsedAttributeType.String) { var expressionStringParser = new ExpressionStringParser(attribute.Value); expressionStringParser.Parse(); var values = expressionStringParser.Tokens; if (values.Count == 1) { var expressionStringToken = values[0]; if (expressionStringToken.IsExpression) { newKeyValueExpression.Parameters.Add(new CodeSnippetExpression { Value = expressionStringToken.Value }); } else { newKeyValueExpression.Parameters.Add(new CodePrimitiveExpression { Value = expressionStringToken.Value }); } } else { var concatExpression = CodeDomClassBuilder.GetConcatExpression(values); newKeyValueExpression.Parameters.Add(concatExpression); } } else { newKeyValueExpression.Parameters.Add(new CodeSnippetExpression { Value = attribute.Value }); } createDictionaryMethod.Parameters.Add(newKeyValueExpression); } var getDictionaryMethod = new CodeMethodReferenceExpression { MethodName = "GetDictionaryFromKeyValue", TargetObject = new CodeVariableReferenceExpression { VariableName = "NHamlMonoRailView" } }; createDictionaryMethod.Method = getDictionaryMethod; var variableName = "nhamlTempDictionary" + tempDictionaryCount; tempDictionaryCount++; var _decl1 = new CodeVariableDeclarationStatement { InitExpression = createDictionaryMethod, Name = variableName, Type = new CodeTypeReference(typeof (IDictionary<string, object>)) }; builder.RenderMethod.Statements.Add(_decl1); return variableName; }