private Slug CreateCustomReplacementSlug() { PatternValueCollection patterns = new PatternValueCollection(); patterns.Clear(); // to remove all those added by constructor patterns.Add(new PatternValueElement("c1", "[@]", "at", true)); NameEditorElement nameEditorElement = new NameEditorElement { // WhitespaceReplacement = '-', Replacements = patterns //, // ToLower = true }; EditSection editSection = new EditSection { NameEditor = nameEditorElement }; ConfigurationManagerWrapper cmw = new ConfigurationManagerWrapper { Sections = new ConfigurationManagerWrapper.ContentSectionTable(null, null, null, editSection) }; return(new Slug(cmw)); }
/// <summary> /// Creates slug from text /// </summary> /// <param name="text"> /// Text to be converted to slug /// </param> /// <param name="whitespaceReplacement"> /// Whitespace replacement character /// </param> /// <param name="replacementPatterns"> /// Set of custom patterns for replacing characters /// </param> /// <param name="toLower"> /// True if produced slug should be lowercase /// </param> /// <returns> /// Slug generated from <see cref="text"/>. /// </returns> private static string Create( string text, char whitespaceReplacement, PatternValueCollection replacementPatterns, bool toLower) { if (string.IsNullOrWhiteSpace(text)) { return(string.Empty); } foreach (PatternValueElement pattern in replacementPatterns) { text = Regex.Replace(text, pattern.Pattern, pattern.Value); } string normalised = text.Normalize(NormalizationForm.FormKD); const int Maxlen = 80; int len = normalised.Length; bool prevDash = false; var sb = new StringBuilder(len); char c; for (int i = 0; i < len; i++) { c = normalised[i]; if ((c >= 'a' && c <= 'z') || (c >= '0' && c <= '9')) { if (prevDash) { sb.Append('-'); prevDash = false; } sb.Append(c); } else if (c >= 'A' && c <= 'Z') { if (prevDash) { sb.Append('-'); prevDash = false; } // tricky way to convert to lowercase if (toLower) { sb.Append((char)(c | 32)); } else { sb.Append(c); } } else if (c == ' ' || c == ',' || c == '.' || c == '/' || c == '\\' || c == '-' || c == '_' || c == '=') { if (!prevDash && sb.Length > 0) { prevDash = true; } } else { string swap = ConvertEdgeCases(c, toLower); if (swap != null) { if (prevDash) { sb.Append('-'); prevDash = false; } sb.Append(swap); } } if (sb.Length == Maxlen) { break; } } string slug = sb.ToString(); if (whitespaceReplacement != '-') { return(slug.Replace('-', whitespaceReplacement)); } else { return(slug); } }
/// <summary> /// Creates slug from text /// </summary> /// <param name="text"> /// Text to be converted to slug /// </param> /// <param name="whitespaceReplacement"> /// Whitespace replacement character /// </param> /// <param name="replacementPatterns"> /// Set of custom patterns for replacing characters /// </param> /// <param name="toLower"> /// True if produced slug should be lowercase /// </param> /// <returns> /// Slug generated from <see cref="text"/>. /// </returns> private static string Create( string text, char whitespaceReplacement, PatternValueCollection replacementPatterns, bool toLower) { if (string.IsNullOrWhiteSpace(text)) { return string.Empty; } foreach (PatternValueElement pattern in replacementPatterns) { text = Regex.Replace(text, pattern.Pattern, pattern.Value); } string normalised = text.Normalize(NormalizationForm.FormKD); const int Maxlen = 80; int len = normalised.Length; bool prevDash = false; var sb = new StringBuilder(len); char c; for (int i = 0; i < len; i++) { c = normalised[i]; if ((c >= 'a' && c <= 'z') || (c >= '0' && c <= '9')) { if (prevDash) { sb.Append('-'); prevDash = false; } sb.Append(c); } else if (c >= 'A' && c <= 'Z') { if (prevDash) { sb.Append('-'); prevDash = false; } // tricky way to convert to lowercase if (toLower) { sb.Append((char)(c | 32)); } else { sb.Append(c); } } else if (c == ' ' || c == ',' || c == '.' || c == '/' || c == '\\' || c == '-' || c == '_' || c == '=') { if (!prevDash && sb.Length > 0) { prevDash = true; } } else { string swap = ConvertEdgeCases(c, toLower); if (swap != null) { if (prevDash) { sb.Append('-'); prevDash = false; } sb.Append(swap); } } if (sb.Length == Maxlen) { break; } } string slug = sb.ToString(); if (whitespaceReplacement != '-') { return slug.Replace('-', whitespaceReplacement); } else { return slug; } }