private string SplitIntoClassAndNumber(string name, SingletonSet <string> classNameSet, string term, out string classNameSoFarOrNull) { string numbersSoFarX; classNameSoFarOrNull = CanonalizeClassOrNull(term, name, out numbersSoFarX); if (null != classNameSoFarOrNull) { classNameSet.Add(classNameSoFarOrNull); } SpecialFunctions.CheckCondition(!classNameSet.IsEmpty, "Class name required. " + name); return(numbersSoFarX); }
private List <KeyValuePair <string, string> > CreateCanonicalTermList(string soFar, string name, ref HashSet <string> warningSet) { List <KeyValuePair <string, string> > termList = new List <KeyValuePair <string, string> >(); SingletonSet <string> classNameSet = SingletonSet <string> .GetInstance("All terms must have the same class. " + name); int previousNumberLength = 0; foreach (string term in soFar.Split('/')) { string classNameSoFarOrNull; string numbersSoFarX = SplitIntoClassAndNumber(name, classNameSet, term, out classNameSoFarOrNull); var numbersSoFarAndInParen = CanonalizeNumbers(numbersSoFarX, classNameSet.First(), warningSet); SpecialFunctions.CheckCondition((null != classNameSoFarOrNull) || previousNumberLength <= numbersSoFarAndInParen.Key.Length, "When a class name is left off after a slash, the number have at least as many digits as the previous number. " + name); termList.Add(new KeyValuePair <string, string>(classNameSet.First() + numbersSoFarAndInParen.Key, numbersSoFarAndInParen.Value)); previousNumberLength = numbersSoFarAndInParen.Key.Length; } return(termList); }