/// <summary> /// Adds a standard type mapping by substituting one subnamespace for another /// </summary> /// <param name="nsSource">Subnamespace of source type</param> /// <param name="nsTargets">Subnamespaces of target type as an array</param> /// <param name="viewSuffix">Suffix for type name. Should be "View" or synonym of "View". (Optional)</param> public static void AddSubNamespaceMapping(string nsSource, string[] nsTargets, string viewSuffix = DefaultViewSuffix) { //need to terminate with "." in order to concatenate with type name later var nsencoded = RegExHelper.NamespaceToRegEx(nsSource + "."); string rxbeforetgt, rxaftersrc, rxaftertgt; string rxbeforesrc = rxbeforetgt = rxaftersrc = rxaftertgt = String.Empty; if (!String.IsNullOrEmpty(nsSource)) { if (!nsSource.StartsWith("*")) { rxbeforesrc = RegExHelper.GetNamespaceCaptureGroup("nsbefore"); rxbeforetgt = @"${nsbefore}"; } if (!nsSource.EndsWith("*")) { rxaftersrc = RegExHelper.GetNamespaceCaptureGroup("nsafter"); rxaftertgt = "${nsafter}"; } } var rxmid = RegExHelper.GetCaptureGroup("subns", nsencoded); var nsreplace = String.Concat(rxbeforesrc, rxmid, rxaftersrc); var nsTargetsRegEx = nsTargets.Select(t => String.Concat(rxbeforetgt, t, ".", rxaftertgt)).ToArray(); AddTypeMapping(nsreplace, null, nsTargetsRegEx, viewSuffix); }
public void ShouldEscapeDotsInNamespace() { var ns = "Caliburn.Micro.WPF.Tests"; var result = RegExHelper.NamespaceToRegEx(ns); Assert.Equal(@"Caliburn\.Micro\.WPF\.Tests", result); }
public void ShouldInsertRegexWhenNamespaceHasAsterix() { var ns = "Caliburn.*.WPF.Tests"; var result = RegExHelper.NamespaceToRegEx(ns); Assert.Equal(@"Caliburn\.([\p{Lu}\p{Ll}\p{Lt}\p{Lm}\p{Lo}\p{Nl}_][\p{Lu}\p{Ll}\p{Lt}\p{Lm}\p{Lo}\p{Nl}\p{Mn}\p{Mc}\p{Nd}\p{Pc}\p{Cf}_]*\.)*WPF\.Tests", result); }
public void ShouldInsertRegexWhenNamespaceHasAsterix() { var ns = "Caliburn.*.WPF.Tests"; var result = RegExHelper.NamespaceToRegEx(ns); Assert.Equal(@"Caliburn\.([A-Za-z_]\w*\.)*WPF\.Tests", result); }
/// <summary> /// Adds a standard type mapping based on simple namespace mapping /// </summary> /// <param name="nsSource">Namespace of source type</param> /// <param name="nsTargets">Namespaces of target type as an array</param> /// <param name="viewSuffix">Suffix for type name. Should be "View" or synonym of "View". (Optional)</param> public static void AddNamespaceMapping(string nsSource, string[] nsTargets, string viewSuffix = DefaultViewSuffix) { //need to terminate with "." in order to concatenate with type name later var nsencoded = RegExHelper.NamespaceToRegEx(nsSource + "."); //Start pattern search from beginning of string ("^") //unless original string was blank (i.e. special case to indicate "append target to source") if (!String.IsNullOrEmpty(nsSource)) { nsencoded = "^" + nsencoded; } //Capture namespace as "origns" in case we need to use it in the output in the future var nsreplace = RegExHelper.GetCaptureGroup("origns", nsencoded); var nsTargetsRegEx = nsTargets.Select(t => t + ".").ToArray(); AddTypeMapping(nsreplace, null, nsTargetsRegEx, viewSuffix); }