Exemplo n.º 1
0
        public string GetHtmlTextFromMdText()
        {
            UpdateStringByShieldedUnderline();
            UpdateStringByDoubleUnderline();
            UpdateStringBySingleUnderline();

            var parseLine = new StringBuilder();
            var index     = new Dictionary <TypeOfTag, int>
            {
                { TypeOfTag.Em, 0 },
                { TypeOfTag.ShieldedBlock, 0 },
                { TypeOfTag.Strong, 0 }
            };

            var isStartSingleTags = false;
            var isTagOpenOrClose  = false;

            for (var i = 0; i < line.Length; i++)
            {
                foreach (var tag in Enum.GetNames(typeof(TypeOfTag)))
                {
                    isTagOpenOrClose = false;
                    if (Enum.TryParse(tag, out TypeOfTag tagEnum))
                    {
                        if (ValidatorForTags.IsGoodTag(index, tagEnum,
                                                       isStartSingleTags, segmentOfTags))
                        {
                            continue;
                        }

                        if (segmentOfTags[tagEnum][index[tagEnum]].BeginIndex == i)
                        {
                            isTagOpenOrClose = IsTagOpenForCreateString(index, tagEnum,
                                                                        ref isStartSingleTags,
                                                                        ref i, parseLine);
                            break;
                        }
                        if (segmentOfTags[tagEnum][index[tagEnum]].EndIndex == i)
                        {
                            isTagOpenOrClose = IsTagCloseForCreateString(index, tagEnum,
                                                                         ref isStartSingleTags,
                                                                         ref i, parseLine);
                            break;
                        }
                    }
                }
                if (!isTagOpenOrClose)
                {
                    parseLine.Append(line[i]);
                }
            }
            return(parseLine.ToString());
        }
Exemplo n.º 2
0
 private void UpdateStringByShieldedUnderline()
 {
     for (var i = 0; i < line.Length; i++)
     {
         if (line[i] != '_' || !ValidatorForTags.IsEscaped(line, i))
         {
             continue;
         }
         segmentOfTags[TypeOfTag.ShieldedBlock].
         Add(new Segment(i - 1, i - 1));
         usedChar[i] = true;
     }
 }
Exemplo n.º 3
0
        private void UpdateStringByDoubleUnderline()
        {
            for (var i = 0; i < line.Length; i++)
            {
                if (ValidatorForTags.EndOfDoubleUnderline(line, i, usedChar, currentOpenTags, segmentOfTags))
                {
                    i++;
                    continue;
                }

                if (ValidatorForTags.IsBeginDoubleUnderline(line, i, usedChar) &&
                    currentOpenTags[TypeOfTag.Strong] == -1)
                {
                    currentOpenTags[TypeOfTag.Strong] = i;
                    i++;
                }
            }
        }
Exemplo n.º 4
0
 private bool IsTagOpenForCreateString(Dictionary <TypeOfTag, int> index, TypeOfTag tagEnum,
                                       ref bool isStartSingleTags, ref int i, StringBuilder parseLine)
 {
     if (ValidatorForTags.IsTagContainDigit(line,
                                            segmentOfTags[tagEnum][index[tagEnum]]))
     {
         index[tagEnum]++;
         return(false);
     }
     if (tags[tagEnum].IsSingle)
     {
         isStartSingleTags = true;
     }
     if (tagEnum == TypeOfTag.ShieldedBlock)
     {
         index[tagEnum]++;
     }
     i += tags[tagEnum].LenMd;
     parseLine.Append(tags[tagEnum].OpenTag);
     return(true);
 }
Exemplo n.º 5
0
        private void UpdateStringBySingleUnderline()
        {
            for (var i = 0; i < line.Length; i++)
            {
                if (ValidatorForTags.IsOnlyDoubleUnderline(line, i, usedChar))
                {
                    continue;
                }

                if (!usedChar[i] && ValidatorForTags.EndSingleUnderline(line, i, usedChar, currentOpenTags, segmentOfTags))
                {
                    usedChar[i] = true;
                }

                if (!usedChar[i] &&
                    ValidatorForTags.IsStartSingleUnderlineBlock(line, i, usedChar) &&
                    currentOpenTags[TypeOfTag.Em] == -1)
                {
                    usedChar[i] = true;
                    currentOpenTags[TypeOfTag.Em] = i;
                }
            }
        }