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); } }