public static string ExpandString(this KeywordExpander keywordExpander, IEnumerable <char> input) { var sb = new StringBuilder(); foreach (var c in keywordExpander.Expand(input)) { sb.Append(c); } return(sb.ToString()); }
public static void Expand(this KeywordExpander keywordExpander, TextReader input, TextWriter output) { var _input = Read(input); var _output = keywordExpander.Expand(_input); foreach (var c in _output) { output.Write(c); } }
public override IEnumerable <char> ExpandKeyword(string keyword) { KeywordExpander expander = null; var seperator = keyword.IndexOf('.'); string prefix = null; if (seperator != -1) { prefix = keyword.Substring(0, seperator); keyword = keyword.Substring(seperator + 1); } // First, see if we have a hard override for a particular keyword to come from // a particular expander if (keywordToExpanderMapping != null) { keywordToExpanderMapping.TryGetValue(keyword, out expander); } // Then, see if we have a prefix to specify a particular expander i.e. [prefix].[keyword] if (prefix != null) { expander = expanders[prefix]; } // Finally, if no expander has been found, then iterate through each in order of Add-ition // looking for the specified keyword if (expander == null) { foreach (var e in expanders.Values) { if (e.CanExpandKeyword(keyword)) { return(e.ExpandKeyword(keyword)); } } } else { // Alternatively, if we did find an appropriate expander candidate, then // expand using it here return(expander.ExpandKeyword(keyword)); } throw new KeyNotFoundException("Cannot expand keyword: " + keyword); }
/// <summary> /// Add a sub-keyword expander to this aggregate keyword expander, qualified by a keyword prefix /// </summary> /// <param name="e">Expander to additionally add to this aggregator</param> /// <param name="prefix">prefix to qualify this particular expander by</param> public void Add(KeywordExpander e, string prefix) { expanders.Add(prefix, e); }