Exemple #1
0
        /// <summary>
        /// Get string lines
        /// </summary>
        /// <param name="filterKey">(optional) filter key</param>
        /// <returns>lines or null</returns>
        public IEnumerable <KeyValuePair <string, IString> > GetStringLines(ILine filterKey = null)
        {
            // Return all
            if (filterKey == null)
            {
                return(StringLines.Select(kv => new KeyValuePair <string, IString>(kv.Key, kv.Value.GetString())));
            }
            // Create filter.
            LineQualifier filter = new LineQualifier().Rule(filterKey) as LineQualifier;
            // Apply filter
            List <KeyValuePair <string, IString> > result = null;

            foreach (var collectionLine in collections.ToArray())
            {
                // Source is of string lines
                if (collectionLine.Value.Type == CollectionType.StringLines && collectionLine.Value.lineFormat is ILineFormatPrinter nameProvider_ && collectionLine.Value.lineFormat is ILineFormatParser nameParser_)
                {
                    // Parse to keys and then qualify
                    var __stringLines = collectionLine.Value.KeyLines.Where(line => filter.Qualify(line)).Select(line => new KeyValuePair <string, IString>(nameProvider_.Print(line), line.GetString()));
                    if (result == null)
                    {
                        result = new List <KeyValuePair <string, IString> >();
                    }
                    result.AddRange(__stringLines);
                }
        /// <summary>
        /// Get resource names
        /// </summary>
        /// <param name="filterKey"></param>
        /// <returns></returns>
        public IEnumerable <string> GetResourceNames(ILine filterKey)
        {
            // Return all
            if (filterKey == null)
            {
                return(dictionary.Keys.ToList());
            }
            // Create filter.
            LineQualifier filter = new LineQualifier().Rule(filterKey) as LineQualifier;

            // There are no rules
            if (!filter.HasRules)
            {
                return(dictionary.Keys.ToList());
            }
            // Filter with pattern
            if (lineFormat is ILinePattern pattern_)
            {
                return(Filter1(pattern_).ToList());
            }
            // Filter with parser
            if (lineFormat is ILineFormatParser parser_)
            {
                return(Filter2(parser_).ToList());
            }
            // Return nothing
            return(null);

            IEnumerable <string> Filter1(ILinePattern pattern)
            {
                foreach (var line in dictionary)
                {
                    ILinePatternMatch match = pattern.Match(line.Key);
                    if (!match.Success || !filter.Qualify(match))
                    {
                        continue;
                    }
                    yield return(line.Key);
                }
            }

            IEnumerable <string> Filter2(ILineFormatParser parser)
            {
                foreach (var line in dictionary)
                {
                    ILine key;
                    if (!parser.TryParse(line.Key, out key))
                    {
                        continue;
                    }
                    if (!filter.Qualify(key))
                    {
                        continue;
                    }
                    yield return(line.Key);
                }
            }
        }
        /// <summary>
        /// Get keys
        /// </summary>
        /// <param name="filterKey"></param>
        /// <returns></returns>
        public IEnumerable <ILine> GetResourceKeys(ILine filterKey)
        {
            // Return all
            if (filterKey == null)
            {
                return(dictionary.Keys.ToList());
            }
            // Create filter.
            LineQualifier filter = new LineQualifier().Rule(filterKey) as LineQualifier;

            // Return keys as list
            return(filter.Qualify(dictionary.Keys).ToList());
        }
Exemple #4
0
        /// <summary>
        /// Get a snapshot of key-lines in this asset.
        /// </summary>
        /// <param name="filterKey">(optional) filter key</param>
        /// <returns>list of key-lines, or null if could not be provided</returns>
        public IEnumerable <ILine> GetLines(ILine filterKey = null)
        {
            // Get snapshot
            var _lines = KeyLines;

            // Return all
            if (filterKey == null)
            {
                return(_lines.Values);
            }
            // Create filter
            LineQualifier qualifier = new LineQualifier().Rule(filterKey) as LineQualifier;

            // Apply filter
            return(_lines.Where(line => qualifier.Qualify(line.Key)).Select(kv => kv.Value));
        }