| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135 | 
							- namespace Caliburn.Micro.Core {
 
-     using System;
 
-     using System.Collections.Generic;
 
-     using System.Linq;
 
-     using System.Text.RegularExpressions;
 
-     /// <summary>
 
-     ///  Class for managing the list of rules for doing name transformation.
 
-     /// </summary>
 
-     public class NameTransformer : BindableCollection<NameTransformer.Rule> {
 
- #if NET
 
-         private const RegexOptions options = RegexOptions.Compiled;
 
- #else
 
-         private const RegexOptions options = RegexOptions.None;
 
- #endif
 
-         bool useEagerRuleSelection = true;
 
-         /// <summary>
 
-         /// Flag to indicate if transformations from all matched rules are returned. Otherwise, transformations from only the first matched rule are returned.
 
-         /// </summary>
 
-         public bool UseEagerRuleSelection {
 
-             get { return useEagerRuleSelection; }
 
-             set { useEagerRuleSelection = value; }
 
-         }
 
-         /// <summary>
 
-         ///  Adds a transform using a single replacement value and a global filter pattern.
 
-         /// </summary>
 
-         /// <param name = "replacePattern">Regular expression pattern for replacing text</param>
 
-         /// <param name = "replaceValue">The replacement value.</param>
 
-         /// <param name = "globalFilterPattern">Regular expression pattern for global filtering</param>
 
-         public void AddRule(string replacePattern, string replaceValue, string globalFilterPattern = null) {
 
-             AddRule(replacePattern, new[] { replaceValue }, globalFilterPattern);
 
-         }
 
-         /// <summary>
 
-         ///  Adds a transform using a list of replacement values and a global filter pattern.
 
-         /// </summary>
 
-         /// <param name = "replacePattern">Regular expression pattern for replacing text</param>
 
-         /// <param name = "replaceValueList">The list of replacement values</param>
 
-         /// <param name = "globalFilterPattern">Regular expression pattern for global filtering</param>
 
-         public void AddRule(string replacePattern, IEnumerable<string> replaceValueList, string globalFilterPattern = null) {
 
-             Add(new Rule {
 
-                 ReplacePattern = replacePattern,
 
-                 ReplacementValues = replaceValueList,
 
-                 GlobalFilterPattern = globalFilterPattern
 
-             });
 
-         }
 
-         /// <summary>
 
-         /// Gets the list of transformations for a given name.
 
-         /// </summary>
 
-         /// <param name = "source">The name to transform into the resolved name list</param>
 
-         /// <returns>The transformed names.</returns>
 
-         public IEnumerable<string> Transform(string source) {
 
-             return Transform(source, r => r);
 
-         }
 
-         /// <summary>
 
-         /// Gets the list of transformations for a given name.
 
-         /// </summary>
 
-         /// <param name = "source">The name to transform into the resolved name list</param>
 
-         /// <param name = "getReplaceString">A function to do a transform on each item in the ReplaceValueList prior to applying the regular expression transform</param>
 
-         /// <returns>The transformed names.</returns>
 
-         public IEnumerable<string> Transform(string source, Func<string, string> getReplaceString) {
 
-             var nameList = new List<string>();
 
-             var rules = this.Reverse();
 
-             foreach(var rule in rules) {
 
-                 if(!string.IsNullOrEmpty(rule.GlobalFilterPattern) && !rule.GlobalFilterPatternRegex.IsMatch(source)) {
 
-                     continue;
 
-                 }
 
-                 if(!rule.ReplacePatternRegex.IsMatch(source)) {
 
-                     continue;
 
-                 }
 
-                 nameList.AddRange(
 
-                     rule.ReplacementValues
 
-                         .Select(getReplaceString)
 
-                         .Select(repString => rule.ReplacePatternRegex.Replace(source, repString))
 
-                     );
 
-                 if (!useEagerRuleSelection) {
 
-                     break;
 
-                 }
 
-             }
 
-             return nameList;
 
-         }
 
-         ///<summary>
 
-         /// A rule that describes a name transform.
 
-         ///</summary>
 
-         public class Rule {
 
-             private Regex replacePatternRegex;
 
-             private Regex globalFilterPatternRegex;
 
-             /// <summary>
 
-             /// Regular expression pattern for global filtering
 
-             /// </summary>
 
-             public string GlobalFilterPattern;
 
-             /// <summary>
 
-             /// Regular expression pattern for replacing text
 
-             /// </summary>
 
-             public string ReplacePattern;
 
-             /// <summary>
 
-             /// The list of replacement values
 
-             /// </summary>
 
-             public IEnumerable<string> ReplacementValues;
 
-             /// <summary>
 
-             /// Regular expression for global filtering
 
-             /// </summary>
 
-             public Regex GlobalFilterPatternRegex {
 
-                 get {
 
-                     return globalFilterPatternRegex ?? (globalFilterPatternRegex = new Regex(GlobalFilterPattern, options));
 
-                 }
 
-             }
 
-             /// <summary>
 
-             /// Regular expression for replacing text
 
-             /// </summary>
 
-             public Regex ReplacePatternRegex {
 
-                 get {
 
-                     return replacePatternRegex ?? (replacePatternRegex = new Regex(ReplacePattern, options));
 
-                 }
 
-             }
 
-         }
 
-     }
 
- }
 
 
  |