/// <summary>
        ///     Processes link markup into HTML
        /// </summary>
        /// <param name="markup">markup</param>
        /// <returns>markup with [[foo]] translated into &lt;a href&gt;&lt;/a&gt;</returns>
        private string _processLinkCreole(string markup)
        {
            var iPos = _indexOfWithSkip(markup, "[[", 0);

            while (iPos >= 0)
            {
                var iEnd = _indexOfWithSkip(markup, "]]", iPos);
                if (iEnd > iPos)
                {
                    iPos += 2;
                    // get the contents of the cell
                    var cell   = markup.Substring(iPos, iEnd - iPos);
                    var link   = cell;
                    var href   = cell;              //default to assuming it's the href
                    var text   = href;              // as well as the text
                    var iSplit = cell.IndexOf('|'); // unless of course there is a splitter
                    if (iSplit > 0)
                    {
                        // href is the front
                        href = cell.Substring(0, iSplit);
                        link = href;

                        // text is the creole processed fragment left over
                        text = _processCreoleFragment(cell.Substring(iSplit + 1));
                    }

                    // handle interwiki links
                    iSplit = href.IndexOf(':');
                    if (iSplit > 0)
                    {
                        var scheme = href.Substring(0, iSplit);
                        if (InterWiki.ContainsKey(scheme))
                        {
                            href = InterWiki[scheme] + href.Substring(iSplit + 1);
                        }
                    }
                    // default to external
                    var linkEventArgs = new LinkEventArgs(link, href, text, LinkEventArgs.TargetEnum.External);
                    if (OnLink != null)
                    {
                        OnLink(this, linkEventArgs);
                    }

                    markup = markup.Substring(0, iPos - 2)
                             + String.Format("<A href=\"{0}\" {2} {3}>{1}</A>",
                                             linkEventArgs.Href,
                                             linkEventArgs.Text,
                                             (linkEventArgs.Target == LinkEventArgs.TargetEnum.External) ? "target=_blank " : "",
                                             (linkEventArgs.Target == LinkEventArgs.TargetEnum.Unknown)
                                     ? "style='border-bottom:1px dashed #000000; text-decoration:none'"
                                     : "")
                             + markup.Substring(iEnd + 2);
                }
                else
                {
                    break;
                }
                iPos = _indexOfWithSkip(markup, "[[", iPos);
            }
            return(markup);
        }
        /// <summary>
        ///     Processes link markup into HTML
        /// </summary>
        /// <param name="markup">markup</param>
        /// <returns>markup with [[foo]] translated into &lt;a href&gt;&lt;/a&gt;</returns>
        private string _processLinkCreole(string markup)
        {
            var iPos = _indexOfWithSkip(markup, "[[", 0);
            while (iPos >= 0)
            {
                var iEnd = _indexOfWithSkip(markup, "]]", iPos);
                if (iEnd > iPos)
                {
                    iPos += 2;
                    // get the contents of the cell
                    var cell = markup.Substring(iPos, iEnd - iPos);
                    var link = cell;
                    var href = cell; //default to assuming it's the href
                    var text = href; // as well as the text
                    var iSplit = cell.IndexOf('|'); // unless of course there is a splitter
                    if (iSplit > 0)
                    {
                        // href is the front
                        href = cell.Substring(0, iSplit);
                        link = href;

                        // text is the creole processed fragment left over
                        text = _processCreoleFragment(cell.Substring(iSplit + 1));
                    }

                    // handle interwiki links
                    iSplit = href.IndexOf(':');
                    if (iSplit > 0)
                    {
                        var scheme = href.Substring(0, iSplit);
                        if (InterWiki.ContainsKey(scheme))
                        {
                            href = InterWiki[scheme] + href.Substring(iSplit + 1);
                        }
                    }
                    // default to external
                    var linkEventArgs = new LinkEventArgs(link, href, text, LinkEventArgs.TargetEnum.External);
                    if (OnLink != null)
                        OnLink(this, linkEventArgs);

                    markup = markup.Substring(0, iPos - 2)
                             + String.Format("<A href=\"{0}\" {2} {3}>{1}</A>",
                                 linkEventArgs.Href,
                                 linkEventArgs.Text,
                                 (linkEventArgs.Target == LinkEventArgs.TargetEnum.External) ? "target=_blank " : "",
                                 (linkEventArgs.Target == LinkEventArgs.TargetEnum.Unknown)
                                     ? "style='border-bottom:1px dashed #000000; text-decoration:none'"
                                     : "")
                             + markup.Substring(iEnd + 2);
                }
                else
                    break;
                iPos = _indexOfWithSkip(markup, "[[", iPos);
            }
            return markup;
        }