Example #1
0
        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);
                }
            }
        }
Example #2
0
        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);
                }
            }
        }
Example #3
0
        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);
        }
Example #5
0
        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 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 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 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 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 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 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);
        }
Example #17
0
        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 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);
        }
 public void MissingTrailingCurly()
 {
     var parser = new ExpressionStringParser("#{b ");
     parser.Parse();
 }
        public void Temp()
        {
            var parser = new ExpressionStringParser("#{string.Join(\"-\", new string[]{\"1\",\"2\",\"3\"\\})}");

            parser.Parse();

            Assert.AreEqual(1, parser.ExpressionStringTokens.Count);
        }
Example #21
0
        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 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);
    		}
    	}
Example #23
0
        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();
        }