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