Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        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);
        }