MarkdownDeep.SpanFormatter.MakeID C# (CSharp) Méthode

MakeID() private méthode

private MakeID ( string str, int start, int len ) : string
str string
start int
len int
Résultat string
        internal string MakeID(string str, int start, int len)
        {
            // Parse the string into a list of tokens
            Tokenize(str, start, len);

            StringBuilder sb = new StringBuilder();

            foreach (var t in m_Tokens)
            {
                switch (t.type)
                {
                    case TokenType.Text:
                        sb.Append(str, t.startOffset, t.length);
                        break;

                    case TokenType.link:
                        LinkInfo li = (LinkInfo)t.data;
                        sb.Append(li.LinkText);
                        break;
                }

                FreeToken(t);
            }

            // Now clean it using the same rules as pandoc
            base.Reset(sb.ToString());

            // Skip everything up to the first letter
            while (!Eof)
            {
                if (Char.IsLetter(Current))
                    break;
                SkipForward(1);
            }

            // Process all characters
            sb.Length = 0;
            while (!Eof)
            {
                char ch = Current;
                if (char.IsLetterOrDigit(ch) || ch=='_' || ch=='-' || ch=='.')
                    sb.Append(Char.ToLower(ch));
                else if (ch == ' ')
                    sb.Append("-");
                else if (IsLineEnd(ch))
                {
                    sb.Append("-");
                    SkipEol();
                    continue;
                }

                SkipForward(1);
            }

            return sb.ToString();
        }

Same methods

SpanFormatter::MakeID ( string str ) : string

Usage Example

Exemple #1
0
        internal string MakeUniqueHeaderID(string strHeaderText, int startOffset, int length)
        {
            if (!AutoHeadingIDs)
            {
                return(null);
            }

            // Extract a pandoc style cleaned header id from the header text
            string strBase = m_SpanFormatter.MakeID(strHeaderText, startOffset, length);

            // If nothing left, use "section"
            if (String.IsNullOrEmpty(strBase))
            {
                strBase = "section";
            }

            // Make sure it's unique by append -n counter
            string strWithSuffix = strBase;
            int    counter       = 1;

            while (m_UsedHeaderIDs.ContainsKey(strWithSuffix))
            {
                strWithSuffix = strBase + "-" + counter.ToString();
                counter++;
            }

            // Store it
            m_UsedHeaderIDs.Add(strWithSuffix, true);

            // Return it
            return(strWithSuffix);
        }