private StringBuffer RenderHeadingToken(IMarkdownRenderer render, MarkdownHeadingBlockToken token, MarkdownBlockContext context)
        {
            var source = token.SourceInfo.Markdown;

            var match = _headingRegex.Match(source);

            if (match.Success)
            {
                var result     = StringBuffer.Empty;
                var whitespace = match.Groups["whitespace"].Value;
                var text       = match.Groups["text"].Value;
                result += match.Groups["pre"].Value;

                if (string.IsNullOrEmpty(whitespace))
                {
                    result += " ";
                }

                if (text.StartsWith("<a "))
                {
                    result += text;
                }
                else
                {
                    result += RenderInlineTokens(token.Content.Tokens, render);
                }
                result += match.Groups["post"].Value;

                return(result);
            }

            return(base.Render(render, token, context));
        }
Esempio n. 2
0
 public virtual StringBuffer Render(IMarkdownRenderer renderer, MarkdownHeadingBlockToken token, MarkdownBlockContext context)
 {
     string level = token.Depth.ToString();
     var childContent = StringBuffer.Empty;
     foreach (var item in token.Content.Tokens)
     {
         childContent += renderer.Render(item);
     }
     return Insert(token, $"{ExposeTokenName(token)}{level}", childContent);
 }
Esempio n. 3
0
        public virtual StringBuffer Render(IMarkdownRenderer renderer, MarkdownHeadingBlockToken token, MarkdownBlockContext context)
        {
            string level        = token.Depth.ToString();
            var    childContent = StringBuffer.Empty;

            foreach (var item in token.Content.Tokens)
            {
                childContent += renderer.Render(item);
            }
            return(Insert(token, $"{ExposeTokenName(token)}{level}", childContent));
        }
Esempio n. 4
0
 public override StringBuffer Render(IMarkdownRenderer render, MarkdownHeadingBlockToken token, MarkdownBlockContext context)
 {
     if (token.Rule is MarkdownLHeadingBlockRule)
     {
         return(RenderLHeadingToken(render, token, context));
     }
     else
     {
         return(RenderHeadingToken(render, token, context));
     }
 }
Esempio n. 5
0
        private StringBuffer RenderLHeadingToken(IMarkdownRenderer render, MarkdownHeadingBlockToken token, MarkdownBlockContext context)
        {
            var source = token.SourceInfo.Markdown;
            var match  = _lheading.Match(source);

            if (match.Success)
            {
                var result = RenderInlineTokens(token.Content.Tokens, render);
                result += match.Groups["post"].Value;

                return(result);
            }

            return(base.Render(render, token, context));
        }
Esempio n. 6
0
 private void IconButton_Click_3(object sender, RoutedEventArgs e)
 {
     try
     {
         var sfd = new SaveFileDialog
         {
             Filter = "Markdown Files (*.md)|*.md"
         };
         if (sfd.ShowDialog() == true)
         {
             //count up null: 25
             //Let's pretend to know a little about markdown 'lite' instead of manipulating string template which will make Team SH real clever
             var result   = StringBuffer.Empty;
             var mdra     = new MarkdownRendererAdapter(null, new InsetSDNSMarkdownRenderer(), null, null);
             var rthToken = new InlineContent(
                 ImmutableArray.Create((IMarkdownToken) new MarkdownTextToken(null, null, null, SourceInfo.Create($"{sfd.SafeFileName} generated by WPF_dnscrypt_proxy_md", null))));
             var rhToken = new MarkdownHeadingBlockToken(null, null, rthToken, null, 1, SourceInfo.Create(null, null));
             result += mdra.Render(rhToken);
             foreach (dynamic item in lv.Items)
             {
                 var thToken = new InlineContent(ImmutableArray.Create((IMarkdownToken) new MarkdownTextToken(null, null, null, SourceInfo.Create(item.Name, null))));
                 var hToken  = new MarkdownHeadingBlockToken(null, null, thToken, null, 2, SourceInfo.Create(null, null));
                 result += mdra.Render(hToken);
                 using (var stamp = GO_WriteStamp(JsonConvert.SerializeObject(item.STAMP)))
                 {
                     var sToken = new SDNSBlockToken(null, null, SourceInfo.Create(null, null), stamp);
                     result += mdra.Render(sToken);
                 }
             }
             File.WriteAllText(sfd.FileName, result);
             if (!GO_CreateSign(sfd.FileName))
             {
                 Xceed.Wpf.Toolkit.MessageBox.Show("Failed to create signature.");
             }
             else
             {
                 Xceed.Wpf.Toolkit.MessageBox.Show("Saved.");
             }
         }
     }
     catch (Exception ex)
     {
         Xceed.Wpf.Toolkit.MessageBox.Show(ex.ToString());
     }
 }
Esempio n. 7
0
        private void IconButton_Click_1(object sender, RoutedEventArgs e)
        {
            var ofd = new OpenFileDialog
            {
                Filter = "Markdown Files (*.md)|*.md"
            };

            if (ofd.ShowDialog() == true)
            {
                this.FileName.Text = ofd.FileName;
                var meb = new MarkdownEngineBuilder(new Options
                {
                });
                // BELOW essential codes copy from Microsoft Team SH(MingHang) ZI-ZHU, not so good, but works
                var builder = ImmutableList.CreateBuilder <IMarkdownRule>();
                builder.Add(new MarkdownNewLineBlockRule());
                builder.Add(new MarkdownHeadingBlockRule());
                builder.Add(new MarkdownLHeadingBlockRule());
                builder.Add(new MarkdownDefBlockRule());
                builder.Add(new SDNSBlockRule());
                builder.Add(new MarkdownTextBlockRule());
                meb.BlockRules = builder.ToImmutable();
                builder        = ImmutableList.CreateBuilder <IMarkdownRule>();
                builder.Add(new MarkdownEscapeInlineRule());
                builder.Add(new MarkdownTagInlineRule());
                builder.Add(new MarkdownLinkInlineRule());
                builder.Add(new MarkdownStrongInlineRule());
                builder.Add(new MarkdownEmInlineRule());
                builder.Add(new MarkdownBrInlineRule());
                builder.Add(new MarkdownEscapedTextInlineRule());
                builder.Add(new MarkdownTextInlineRule());
                meb.InlineRules = builder.ToImmutable();
                // End
                var me = meb.CreateEngine(null);
                try
                {
                    var tokens = me.Parser.Tokenize(SourceInfo.Create(File.ReadAllText(ofd.FileName), null));
                    MarkdownHeadingBlockToken hToken = null;
                    IMarkdownToken convert(IMarkdownToken t) =>
                    t is TwoPhaseBlockToken tpbt?tpbt.Extract(me.Parser) as MarkdownHeadingBlockToken : t;
                    MarkdownHeadingBlockToken pop(IMarkdownToken t) => t is MarkdownHeadingBlockToken mdh ? hToken = mdh : hToken;

                    var q = from item in tokens
                            let header = pop(convert(item))
                                         group item by header into g
                                         select new { g.Key, Subs = g };
                    string strSdns = null;
                    string popSub(IMarkdownToken t) => t is SDNSBlockToken sdn ? strSdns = sdn.Text : null;
                    string reset() => strSdns = null;

                    //fidelity test
                    //bool? test(string j) { using (var json = GO_ReadStamp(j)) { using (var rt = GO_WriteStamp((string)json)) { using (var h = GO_ReadStamp((string)rt)) { return h.IsInvalid; } } } }
                    dynamic stamp(string j)
                    {
                        using (var json = GO_ReadStamp(j)) { return(json.IsInvalid ? null : JsonConvert.DeserializeObject((string)json)); }
                    }
                    var refined = from item in q
                                  let text                 = ((MarkdownTextToken)item.Key.Content.Tokens[0]).Content
                                                     let n = reset()
                                                             let description = string.Concat(from sub in item.Subs
                                                                                             let t = popSub(sub)
                                                                                                     let content = sub is MarkdownTextToken mtt ? mtt.Content : "\r\n"
                                                                                                                   select content)
                                                                               let ostamp = strSdns == null ? null : stamp(strSdns)
                                                                                            //let T = strSdns == null ? null : test(strSdns)
                                                                                            select new { Name = text, Description = description, STAMP = ostamp };
                    App.GridShow       = refined.ToList();
                    MyGrid.ItemsSource = App.GridShow;
                }
                catch (Exception ex)
                {
                    Xceed.Wpf.Toolkit.MessageBox.Show(ex.ToString());
                }
            }
        }