示例#1
0
        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));
        }
示例#2
0
        /// <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);
            }
        }
示例#3
0
		/// <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;
			}
		}