Example #1
0
        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());
        }
Example #2
0
        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);
            }
        }
Example #3
0
        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);
        }
Example #4
0
 /// <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);
 }