public void Repeat_variables() { var c = 1; var ts = new TemplatedString("repeat {c}{c} {c}", c); Assert.AreEqual("repeat 11 1", ts.ToString()); }
public void Simple_temlate() { var count = 3; var ts = new TemplatedString("count: {count}", count); Assert.AreEqual("count: 3", ts.ToString()); }
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()); }
public void Simple_string() { var ts = new TemplatedString("simple"); Assert.AreEqual("simple", ts.ToString()); }
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); } }