private static ContentOptions GetContentOptions(string characters, ref int index, string openingContainerChar, string closingContainerChar, Random random)
        {
            var result = new ContentOptions();

            result.Content = GetContent(characters, ref index, openingContainerChar, closingContainerChar);

            result.ContainsAlternation = ContainsAlternations(result.Content);

            if (result.Content[0].Equals(_Negation))
            {
                result.IsNegated = true;
                result.Content   = result.Content.Replace("^", "");
            }

            if (characters.Length <= index || !characters[index].Equals(_Quantifier_Start))
            {
                return(result);
            }

            result.QuantifierContent = GetContent(characters, ref index, _Quantifier_Start.ToString(CultureInfo.InvariantCulture), _Quantifier_End.ToString(CultureInfo.InvariantCulture));

            // check for special functions
            if (result.QuantifierContent.Contains(":"))
            {
                result.IsAnagram = ContainsAnagram(result.QuantifierContent);
            }
            else
            {
                result.Repeat = GetRepeatValueFromRepeatExpression(result.QuantifierContent, random);
            }

            return(result);
        }
 private static void GenerateFromAnagramPattern(StringBuilder sb, string exp, ContentOptions contentOptions, Random random)
 {
     for (int x = 0; x < contentOptions.Repeat; x++)
     {
         var arr = exp.ToCharArray();
         arr = arr.OrderBy(r => random.Next()).ToArray();
         foreach (var ch in arr)
         {
             AppendCharacterDerivedFromSymbol(sb, ch, false, random);
         }
     }
 }
        private static void GenerateFromAlternatedPattern(StringBuilder sb, NamedPatterns namedPatterns, string exp, ContentOptions contentOptions, Random random)
        {
            var alternates = exp.Split(_Alternation);

            for (int x = 0; x < contentOptions.Repeat; x++)
            {
                exp = alternates[random.Next(0, alternates.Length)];
                GenerateFromPattern(sb, exp, namedPatterns, null, random);
            }
        }
        private static void GenerateFromAlternatedPattern(StringBuilder sb, string exp, ContentOptions contentOptions, GenerationConfig config)
        {
            var alternates = exp.Split(_Alternation);

            for (int x = 0; x < contentOptions.Repeat; x++)
            {
                exp = alternates[config.Random.Next(0, alternates.Length)];
                GenerateFromPattern(sb, exp, config);
            }
        }