Exemplo n.º 1
0
        public void Repeat_variables()
        {
            var c  = 1;
            var ts = new TemplatedString("repeat {c}{c} {c}", c);

            Assert.AreEqual("repeat 11 1", ts.ToString());
        }
Exemplo n.º 2
0
        public void Simple_temlate()
        {
            var count = 3;
            var ts    = new TemplatedString("count: {count}", count);

            Assert.AreEqual("count: 3", ts.ToString());
        }
Exemplo n.º 3
0
        public void Several_variables()
        {
            var c  = 1;
            var s  = "two";
            var ts = new TemplatedString("vars {first}, {second}", c, s);

            Assert.AreEqual("vars 1, two", ts.ToString());
        }
Exemplo n.º 4
0
        public void Simple_string()
        {
            var ts = new TemplatedString("simple");

            Assert.AreEqual("simple", ts.ToString());
        }
Exemplo n.º 5
0
        public static TemplatedString TemplatizeByNumbers(this string str, TemplatedString existingTemplatedString = null)
        {
            var offset = 0;

            if (existingTemplatedString != null)
            {
                offset = existingTemplatedString.Arguments.Count;
                str    = existingTemplatedString.Template;
            }

            var  dict = new Dictionary <string, string>();
            bool isHandlingPotentialVariable = false;
            //bool hasNumberInVariable = false;
            StringBuilder carg = null;
            char          arg  = (char)('A' + offset);
            int           sidx = -1;
            int           lidx = -1;

            // if it has ANY numbers of in the range, it's fine.

            // must start and end with number!

            for (int i = 0; i < str.Length; i++)
            {
                var c = str[i];
                if (isHandlingPotentialVariable)
                {
                    if (IsNumber(c))
                    {
                        lidx = i;
                    }
                    //hasNumberInVariable = hasNumberInVariable || IsNumber( c );

                    if (IsNumberOrDotOrControl(c))
                    {
                        carg.Append(c);
                    }
                    else// if( hasNumberInVariable )
                    {
                        var diff = i - lidx - 1;
                        carg.Remove(carg.Length - diff, diff);

                        // end current number
                        var variable = carg.ToString();
                        var argName  = "{{" + arg + "}}";
                        dict.Add(argName, variable);
                        arg++;

                        carg = null;
                        isHandlingPotentialVariable = false;

                        str = str.Remove(sidx, lidx - sidx + 1).Insert(sidx, argName);
                        i  += argName.Length - variable.Length;
                    }
                    //else
                    //{
                    //   carg = null;
                    //   isHandlingPotentialVariable = false;
                    //}
                }
                else if (IsNumber(c))
                {
                    isHandlingPotentialVariable = true;
                    //hasNumberInVariable = true;
                    carg = new StringBuilder();
                    carg.Append(c);
                    sidx = i;
                    lidx = i;
                }
            }

            if (carg != null)
            {
                var diff = str.Length - lidx - 1;
                carg.Remove(carg.Length - diff, diff);

                // end current number
                var variable = carg.ToString();
                var argName  = "{{" + arg + "}}";
                dict.Add(argName, variable);

                str = str.Remove(sidx, str.Length - sidx - diff).Insert(sidx, argName);
            }

            if (dict.Count > 0)
            {
                var resultDictionary = existingTemplatedString?.Arguments ?? dict;

                if (dict != resultDictionary)
                {
                    foreach (var kvp in dict)
                    {
                        resultDictionary.Add(kvp.Key, kvp.Value);
                    }
                }

                return(new TemplatedString(str, resultDictionary));
            }
            else
            {
                return(existingTemplatedString);
            }
        }