Exemple #1
0
        private static ulong BuiltCharacterPosition(ILinks <ulong> links, AddressToRawNumberConverter <ulong> addressToRawNumberConverter, Platform.Data.Doublets.Unicode.CharToUnicodeSymbolConverter <ulong> charToUnicodeSymbolConverter, char c, int i)
        {
            var source = addressToRawNumberConverter.Convert((ulong)(i + 10));
            var target = charToUnicodeSymbolConverter.Convert(c);
            var result = links.GetOrCreate(source, target);

            return(result);
        }
Exemple #2
0
        static void Main(string[] args)
        {
            var constants = new LinksConstants <ulong>((1, long.MaxValue), (long.MaxValue + 1UL, ulong.MaxValue));

            using var memory = new UInt64ResizableDirectMemoryLinks(new HeapResizableDirectMemory());
            var links = memory.DecorateWithAutomaticUniquenessAndUsagesResolution();

            var addressToRawNumberConverter = new AddressToRawNumberConverter <ulong>();
            var rawNumberToAddressConverter = new RawNumberToAddressConverter <ulong>();

            var root = links.GetOrCreate(1UL, 1UL);
            var unicodeSymbolMarker = links.GetOrCreate(root, addressToRawNumberConverter.Convert(1));
            var patternRootMarker   = links.GetOrCreate(root, addressToRawNumberConverter.Convert(2));

            var charToUnicodeSymbolConverter = new Platform.Data.Doublets.Unicode.CharToUnicodeSymbolConverter <ulong>(links, addressToRawNumberConverter, unicodeSymbolMarker);

            var strings = new[] { "href", "target", "rel", "media", "hreflang", "type", "sizes", "content", "name", "src", "charset", "text", "cite", "ping", "alt", "sandbox", "width", "height", "data", "value", "poster", "coords", "shape", "scope", "action", "enctype", "method", "accept", "max", "min", "pattern", "placeholder", "step", "label", "wrap", "icon", "radiogroup" };

            var patternRootMarkerArray = new[] { patternRootMarker };

            var sequences = strings.Select((s, i) => patternRootMarkerArray.Concat(BuildSequence(s, i, links, addressToRawNumberConverter, charToUnicodeSymbolConverter)).Concat(patternRootMarkerArray).ToArray()).ToArray();

            var index = new SequenceIndex <ulong>(links);

            var any       = links.Constants.Any;
            var @continue = links.Constants.Continue;

            for (int i = 0; i < sequences.Length; i++)
            {
                index.Add(sequences[i]);
            }

            var chars = new Dictionary <ulong, char>();

            links.Each(linkParts =>
            {
                var link = new UInt64Link(linkParts);

                if (link.Target == unicodeSymbolMarker)
                {
                    var symbol = (char)rawNumberToAddressConverter.Convert(link.Source);
                    chars.Add(link.Index, symbol);
                    Console.WriteLine($"({link.Index}: '{symbol}'->{link.Target})");
                }
                else
                {
                    var sourceString = LinkToString(links, constants, link.Source, chars, rawNumberToAddressConverter);
                    var targetString = LinkToString(links, constants, link.Target, chars, rawNumberToAddressConverter);
                    Console.WriteLine($"({link.Index}: {sourceString}->{targetString})");
                }
                return(@continue);
            }, new UInt64Link(any, any, any));

            StringBuilder sb = new StringBuilder();

            sb.Append('^');
            AppendPattern(links, constants, patternRootMarker, patternRootMarker, chars, any, @continue, sb, 0UL, rawNumberToAddressConverter);
            sb.Append('$');
            var result = sb.ToString();

            var simplificationRegex = new Regex(@"\(([a-z\?]*)\)", RegexOptions.Compiled);

            while (simplificationRegex.IsMatch(result))
            {
                result = simplificationRegex.Replace(result, "$1");
            }

            // (|t)
            // t?
            var simplificationRegex2 = new Regex(@"\(\|([a-z])\)", RegexOptions.Compiled);

            while (simplificationRegex2.IsMatch(result))
            {
                result = simplificationRegex2.Replace(result, "$1?");
            }

            // Repeat
            while (simplificationRegex.IsMatch(result))
            {
                result = simplificationRegex.Replace(result, "$1");
            }

            var regex = new Regex(result);

            for (int i = 0; i < strings.Length; i++)
            {
                if (!regex.IsMatch(strings[i]))
                {
                    Console.WriteLine($"Error: {strings[i]} does not match the pattern.");
                }
            }

            Console.WriteLine(result);

            Console.WriteLine(links.Count());
            Console.WriteLine("Hello World!");
        }
Exemple #3
0
        private static ulong[] BuildSequence(string s, int i, ILinks <ulong> links, AddressToRawNumberConverter <ulong> addressToRawNumberConverter, Platform.Data.Doublets.Unicode.CharToUnicodeSymbolConverter <ulong> charToUnicodeSymbolConverter)
        {
            var result = s.Select((c, i) => BuiltCharacterPosition(links, addressToRawNumberConverter, charToUnicodeSymbolConverter, c, i)).ToArray();

            return(result);
        }