예제 #1
0
 //インライン表示には対応してません。
 protected override void Write(MarkdownRenderer renderer, TaskList obj)
 {
     renderer?.AppendBlock(new CheckBox()
     {
         IsChecked = obj?.Checked ?? false
     });
 }
예제 #2
0
        private MarkdownMigrateTool(string rendererName)
        {
            var option = DocfxFlavoredMarked.CreateDefaultOptions();

            option.LegacyMode = true;
            _builder          = new DfmEngineBuilder(option);
            _render           = InitRenderer(rendererName);
        }
예제 #3
0
 protected override void Write(MarkdownRenderer renderer, CodeInline obj)
 {
     if (obj == null)
     {
         return;
     }
     renderer?.AppendInline(obj.Content, Theme.StyleId.Code);
 }
예제 #4
0
 protected override void Write(MarkdownRenderer renderer, DelimiterInline obj)
 {
     //なにこれ?
     if (obj == null)
     {
         return;
     }
     renderer?.AppendInline(obj.ToLiteral(), Theme.StyleId.None);
 }
예제 #5
0
 /// <summary>
 /// Initialises a new <see cref="MarkdownCanvasControl"/>.
 /// </summary>
 public MarkdownCanvasControl()
 {
     InitializeComponent();
     this.Renderer = new MarkdownRenderer()
     {
         BaseFontSize = this.FontSize, Margins = new Margins(10, 10, 10, 10), ImageUriResolver = ImageCache.ImageUriResolver
     };
     this.initialized = true;
     ImageCache.SetExitEventHandler();
 }
예제 #6
0
 protected override void Write(MarkdownRenderer renderer, ParagraphBlock obj)
 {
     if (renderer == null)
     {
         return;
     }
     //renderer.AppendStack(Themes.Theme.StyleId.Paragraph);
     renderer.AppendLeafInline(obj, Themes.Theme.StyleId.Paragraph);
     //renderer.CloseLayout();
 }
예제 #7
0
 protected override void Write(MarkdownRenderer renderer, QuoteBlock obj)
 {
     if (renderer == null)
     {
         return;
     }
     renderer.AppendQuote(Themes.Theme.StyleId.QuoteBlock, Themes.Theme.StyleId.QuoteBlock);
     renderer.WriteChildren(obj);
     renderer.CloseLayout();
 }
예제 #8
0
        protected override void Write(MarkdownRenderer renderer, AutolinkInline obj)
        {
            if (obj == null)
            {
                return;
            }
            var address = (obj.IsEmail ? "mailto:" : "") + obj.Url;

            renderer?.AppendHyperlink(obj.Url, Theme.StyleId.Hyperlink, new Uri(address));
        }
        public void TestExtractPropertyNames(string input, string[] expected)
        {
            var s = new MockCharacter { Name = "Foo", PlayerName = "Bar" };

            var renderer = new MarkdownRenderer<MockCharacter>(s, new RenderingConfiguration());

            var actual = renderer.ExtractPropertyNames(input);

            Assert.That(actual, Is.EquivalentTo(expected));
        }
        public void TestGetProperty()
        {
            var s = new MockCharacter { Name = "Foo" };

            var renderer = new MarkdownRenderer<MockCharacter>(s, new RenderingConfiguration());

            var actual = renderer.GetProperty("Name", s);

            Assert.That(actual, Is.EqualTo(s.Name));
        }
        public void TestFormat(string input, string expected)
        {
            var s = new MockCharacter { Name = "Foo", PlayerName = "Bar" };

            var renderer = new MarkdownRenderer<MockCharacter>(s, new RenderingConfiguration());

            var actual = renderer.Format(input, s);

            Assert.That(actual, Is.EqualTo(expected));
        }
예제 #12
0
        protected override void Write(MarkdownRenderer renderer, HeadingBlock obj)
        {
            if (obj == null)
            {
                return;
            }
            int level = Math.Max(0, Math.Min(5, obj.Level - 1));

            renderer?.AppendLeafInline(obj, StyleIds[level], true);
            renderer?.AppendHorizontalLine(StyleIds[level]);
        }
예제 #13
0
        protected override void Write(MarkdownRenderer renderer, MathBlock obj)
        {
            if (renderer == null)
            {
                return;
            }

            renderer.AppendFrame(Themes.Theme.StyleId.MathBlock);
            renderer.AppendLeafRawLines(obj, Themes.Theme.StyleId.None);
            renderer.CloseLayout();
        }
예제 #14
0
 protected override void Write(MarkdownRenderer renderer, LineBreakInline obj)
 {
     if (obj == null)
     {
         return;
     }
     if (obj.IsHard)
     {
         renderer?.AppendInline("\n", Theme.StyleId.None);
         //renderer?.CloseLabel();
     }
 }
예제 #15
0
 protected override void Write(MarkdownRenderer renderer, EmphasisInline obj)
 {
     if (obj?.Span == null)
     {
         return;
     }
     if (renderer == null)
     {
         return;
     }
     renderer?.WriteChildrenWithStyle(obj, GetStyleIdByDelim(obj));
 }
예제 #16
0
        public async Task <IActionResult> OnGetAsync([FromRoute] string slug)
        {
            var query = new GetPostQuery(_db);

            Post = await query.ExecuteAsync(slug);

            if (Post == null)
            {
                return(NotFound());
            }

            Body = MarkdownRenderer.RenderMarkdown(Post.Body);

            return(Page());
        }
예제 #17
0
        protected override void Write(MarkdownRenderer renderer, CodeBlock obj)
        {
            if (renderer == null)
            {
                return;
            }

            var fencedCodeBlock = obj as FencedCodeBlock;

            if (fencedCodeBlock?.Info != null)
            {
            }
            renderer.AppendFrame(Themes.Theme.StyleId.CodeBlock);
            renderer.AppendLeafRawLines(obj, Themes.Theme.StyleId.None);
            renderer.CloseLayout();
        }
예제 #18
0
        public string RenderPage(GenericPage page)
        {
            switch (page.ContentType.MimeType)
            {
            case "text/markdown":
                var renderer = new MarkdownRenderer(_markdig);
                return(renderer.RenderToHtml(page.Content));

            case "text/html":
                return(page.Content);

            case "text/plain":
                return($"<pre>{page.Content}</pre>");

            default:
                return(page.Content);
            }
        }
예제 #19
0
        protected override void Write(MarkdownRenderer renderer, Table obj)
        {
            if (obj == null || renderer == null)
            {
                return;
            }

            var  result         = new Grid();
            bool hasColumnWidth = obj.ColumnDefinitions?.Any(a => a.Width != 0.0f && a.Width != 1.0f) ?? false;

            if (hasColumnWidth)
            {
                result.ColumnDefinitions = new ColumnDefinitionCollection();
                foreach (var item in obj.ColumnDefinitions)
                {
                    result.ColumnDefinitions.Add(new ColumnDefinition()
                    {
                        Width = item.Width
                    });
                }
            }

            int rowCount = 0;

            foreach (var item in obj)
            {
                var row = (TableRow)item;
                for (int columnCount = 0; columnCount < row.Count; columnCount++)
                {
                    var cell = row[columnCount] as TableCell;

                    var stack = new StackLayout();
                    renderer.TemporaryTargetLayout = stack;
                    renderer.AddLayout(stack, renderer.Theme.GetStyleFromStyleId(
                                           row.IsHeader ? Themes.Theme.StyleId.TableCellHeader : Themes.Theme.StyleId.TableCellBody));
                    renderer.Write(cell);
                    renderer.CloseLayout();
                    result.Children.Add(stack, columnCount, rowCount);
                }
                rowCount++;
            }
        }
예제 #20
0
        public void RenderFast_TenBigHighlights()
        {
            var charsCount      = (int)1e5;
            var partsCount      = 10;
            var markdownBuilder = new StringBuilder(charsCount + 1);

            for (int i = 0; i < charsCount; ++i)
            {
                if (charsCount % (charsCount / partsCount) == 0 && i != 0)
                {
                    markdownBuilder.Append("_ _");
                }
                else
                {
                    markdownBuilder.Append('a');
                }
            }

            MarkdownRenderer.RenderToHtml(markdownBuilder.ToString());
        }
예제 #21
0
        protected override void Write(MarkdownRenderer renderer, MathBlock obj)
        {
            if (renderer == null)
            {
                return;
            }

            var webview = new WebView();
            var source  = new HtmlWebViewSource();

            source.Html = @"<html><head><script src=""" + MathJaxPath + @""" type=""text/javascript""></script></head><body>" +
                          "\\[" + Helper.LeafToString(obj) + "\\]" + @"</body></html>";
            webview.Source          = source;
            webview.VerticalOptions = LayoutOptions.StartAndExpand;

            renderer.AppendBlock(new Frame()
            {
                Style   = renderer.Theme.GetStyleFromStyleId(Themes.Theme.StyleId.MathBlock).ToStyleFrame(),
                Content = webview
            });
        }
예제 #22
0
        public Task <string> RenderContentAsync(string content, ContentType contentType)
        {
            return(Task.Run(async() =>
            {
                switch (contentType.MimeType)
                {
                case "text/markdown":
                    var renderer = new MarkdownRenderer(_markdig);
                    return await renderer.RenderToHtmlAsync(content);

                case "text/html":
                    return content;

                case "text/plain":
                    return $"<pre>{content}</pre>";

                default:
                    return content;
                }
            }));
        }
        public void TestBlockquote()
        {
            var text    = @"> ⚠️ When `component=""img""`, CardMedia relies on `object-fit` for centering the image. It's not supported by IE 11.

## UI Controls

Supplemental actions within the card are explicitly called out using icons, text, and UI controls, typically placed at the bottom of the card.

Here's an example of a media control card.
";
            var options = new Options();

            var renderer = new MarkdownRenderer();

            options.Renderer = renderer;

            var parser = new MarkdownParser(options);

            var tokensResult = Lexer.Lex(text, options);

            parser.Parse(tokensResult);
        }
예제 #24
0
        protected override void Write(MarkdownRenderer renderer, LinkInline obj)
        {
            if (obj == null)
            {
                return;
            }
            if (renderer == null)
            {
                return;
            }

            var url = obj.GetDynamicUrl?.Invoke() ?? obj.Url;
            Uri?uri = MarkdownRenderer.GetAbsoluteUri(renderer.BasePath, url);

            if (uri == null)
            {
                renderer.WriteChildren(obj);
                return;
            }

            var title = string.IsNullOrEmpty(obj.Title) ? obj.Url : obj.Title;

            if (obj.IsImage)
            {
                renderer.AppendBlock(new Image()
                {
                    Source            = ImageSource.FromUri(uri),
                    HorizontalOptions = LayoutOptions.FillAndExpand,
                });
            }
            else
            {
                var restore = renderer.CurrentHyperlink;
                renderer.CurrentHyperlink = uri;
                renderer.HyperlinkStyleId = Theme.StyleId.Hyperlink;
                renderer.WriteChildren(obj);
                renderer.CurrentHyperlink = restore;
            }
        }
예제 #25
0
        public override void TryRender(string text, MarkdownRenderer renderer, RenderStrategyChain strategyChain)
        {
            int level;

            if (renderer.PropertyChain.TryGetProperty(RenderSettingField.HEADING_LEVEL, out level))
            {
                if (1 <= level && level <= 4)
                {
                    increament(level);

                    string lab = "";
                    for (int i = 0; i < level; i++)
                    {
                        renderer.RenderOut.Append("#");
                        lab += $"{numbering[i]}.";
                    }
                    renderer.RenderOut.Append($" {lab} {text}");
                    return;
                }
            }
            strategyChain.TryNextStrategy(text, renderer);
        }
예제 #26
0
 private void btnGneegrate_Click(object sender, EventArgs e)
 {
     try
     {
         if (string.IsNullOrEmpty(ofdInputFile.FileName))
         {
             MessageBox.Show(this, "Please select a documentaion file");
             return;
         }
         if (_documentationModel == null)
         {
             MessageBox.Show(this, "Please select a valid documentaion file");
             return;
         }
         if (clbTypes.CheckedItems.Count == 0)
         {
             MessageBox.Show(this, "Please select at least one type to generate documentation for");
             return;
         }
         if (string.IsNullOrEmpty(fbdOutputPath.SelectedPath))
         {
             MessageBox.Show(this, "Please select the output folder");
             return;
         }
         if (string.IsNullOrEmpty(txtGitHubRepositoryRootURL.Text))
         {
             MessageBox.Show(this, "Please enter the GitHub repository root URL");
             return;
         }
         var markdownRenderer = new MarkdownRenderer(_documentationModel, fbdOutputPath.SelectedPath, txtGitHubRepositoryRootURL.Text);
         markdownRenderer.RenderSelectedTypes(clbTypes.CheckedItems.Cast <Model.Type>());
         MessageBox.Show(this, "Markdown files generated successfully!");
         System.Diagnostics.Process.Start(fbdOutputPath.SelectedPath);
     }
     catch (Exception exp)
     {
         MessageBox.Show(this, exp.Message);
     }
 }
예제 #27
0
        public void TestEvalution2()
        {
            string        docPath  = @"E:\桌面工作目录\正在进行的\Projects\PonyText\README_PonyText.pony";
            ErrorListener listener = new ErrorListener();
            PonyLexer     lexer    = new PonyLexer();
            PonyParser    parser   = new PonyParser(lexer);

            lexer.errorListener  = listener;
            parser.errorListener = listener;

            PonyTextStructureBase    structureBase    = parser.Parse(File.ReadAllText(docPath));
            AssemblyInjectionManager injectionManager = new AssemblyInjectionManager();

            injectionManager.RegisterAssembly("PonyTextRenderer.Markdown", Assembly.GetAssembly(typeof(MarkdownRenderer)));
            injectionManager.RegisterAssembly("PonyText.Processor", Assembly.GetAssembly(typeof(PonyParser)));

            IProcessorFactory processor         = new ProcessorFactory(new ProcessorExperience(), injectionManager);
            SimpleTextContext simpleTextContext = new SimpleTextContext(processor, new TextElementFactory());

            processor.LoadProcessorFrom("PonyText.Processor");

            Assert.DoesNotThrow(() => {
                structureBase.Evaluate(simpleTextContext);
            });

            using (FileStream fs = new FileStream("dump.json", FileMode.Create)) {
                using (StreamWriter sw = new StreamWriter(fs)) {
                    sw.Write(simpleTextContext.GetCurrentContext().ToString());
                }
            }

            MarkdownRenderer stringRenderer = new MarkdownRenderer();

            simpleTextContext.GetCurrentContext().Render(stringRenderer, simpleTextContext);

            using (FileStream fs = new FileStream("out.md", FileMode.Create)) {
                stringRenderer.RenderContentTo(fs);
            }
        }
예제 #28
0
        public override void TryRender(string text, MarkdownRenderer renderer, RenderStrategyChain strategyChain)
        {
            string type;

            if (renderer.PropertyChain.TryGetProperty(RenderSettingField.TEXT_STYLE, out type))
            {
                switch (type)
                {
                case RenderSettingField.TEXT_STYLE_BOLD:
                    renderer.RenderOut.Append($" **{text}** ");
                    break;

                case RenderSettingField.TEXT_STYLE_ITALIC:
                    renderer.RenderOut.Append($" *{text}* ");
                    break;

                case RenderSettingField.TEXT_STYLE_DELETELINE:
                    renderer.RenderOut.Append($" ~~{text}~~ ");
                    break;

                default:
                    renderer.RenderOut.Append(text);
                    break;
                }
                return;
            }
            else if (renderer.PropertyChain.TryGetProperty(MarkdownRenderSetting.MD_REGION_INLINE, out type))
            {
                switch (type)
                {
                case MarkdownRenderSetting.MD_REGION_CODE:
                    renderer.RenderOut.Append($" `{text}` ");
                    break;
                }
                return;
            }
            strategyChain.TryNextStrategy(text, renderer);
        }
예제 #29
0
        public Task <string> RenderPageAsync(GenericPage page)
        {
            return(Task.Run(async() =>
            {
                Debug.Assert(page != null, nameof(page) + " != null");

                switch (page.ContentType.MimeType)
                {
                case "text/markdown":
                    var renderer = new MarkdownRenderer(_markdig);
                    return await renderer.RenderToHtmlAsync(page.Content);

                case "text/html":
                    return page.Content;

                case "text/plain":
                    return $"<pre>{page.Content}</pre>";

                default:
                    return page.Content;
                }
            }));
        }
예제 #30
0
        public void DeletePost_MoveToTrash()
        {
            IFileSystem fakeFileSystem   = new FakeFileSystem();
            var         testDataStore    = new BlogDataStore(fakeFileSystem);
            var         markdownRenderer = new MarkdownRenderer();
            var         testPostModel    = new PostModel(testDataStore, markdownRenderer);

            testPostModel.PageContext = new PageContext();

            var post = new Post
            {
                Title     = "Title",
                Body      = "This is the body of my post",
                IsDeleted = false,
            };

            testDataStore.SavePost(post);

            testPostModel.OnPostDeletePost(post.Id.ToString("N"));
            var result = testDataStore.GetPost(post.Id.ToString("N"));

            Assert.True(result.IsDeleted);
        }
예제 #31
0
        public void UnDeletePost_MoveToIndex()
        {
            IFileSystem      fakeFileSystem   = new FakeFileSystem();
            BlogDataStore    testDataStore    = new BlogDataStore(fakeFileSystem);
            MarkdownRenderer markdownRenderer = new MarkdownRenderer();
            PostModel        testPostModel    = new PostModel(testDataStore, markdownRenderer);

            testPostModel.PageContext = new PageContext();

            Post post = new Post
            {
                Title     = "Title",
                Body      = "This is the body of my post",
                IsDeleted = true,
            };

            testDataStore.SavePost(post);

            testPostModel.OnPostUnDeletePost(post.Id.ToString("N"));
            Post result = testDataStore.GetPost(post.Id.ToString("N"));

            Assert.False(result.IsDeleted);
        }
예제 #32
0
        public void RenderFast_RandomString()
        {
            var charsCount      = (int)1e5;
            var random          = new Random(0);
            var markdownBuilder = new StringBuilder(charsCount + 1);

            for (int i = 0; i < charsCount; ++i)
            {
                if (random.Next() % 10 == 0)
                {
                    markdownBuilder.Append('_');
                }
                else if (random.Next() % 5 == 1)
                {
                    markdownBuilder.Append(' ');
                }
                else
                {
                    markdownBuilder.Append('a');
                }
            }

            MarkdownRenderer.RenderToHtml(markdownBuilder.ToString());
        }
예제 #33
0
        /// <summary>
        /// Sends an activation request
        /// </summary>
        /// <param name="name">The recipient name</param>
        /// <param name="email">The recipient email</param>
        /// <param name="activationcode">The activation code</param>
        /// <param name="language">The language the message is sent in</param>
        /// <param name="requestIP">The IP requesting the signup email</param>
        /// <returns>An awaitable task</returns>
        public static async Task SendAsync(string name, string email, string activationcode, string language, string requestIP)
        {
            if (DatabaseInstance.Current != null)
            {
                throw new InvalidOperationException("Cannot send email from within a transaction scope");
            }

            var logEntry = new Database.SentEmailLog()
            {
                From      = EmailSignupSettings.FromEmail,
                To        = email,
                When      = DateTime.Now,
                Type      = Database.EmailType.ActivationEmail,
                Delivered = false,
                RequestIP = requestIP
            };

            var markdown = string.Empty;
            var subject  = string.Empty;

            // Insert the email log record
            await DatabaseInstance.GetInstance().RunInTransactionAsync(db =>
            {
                // Grab the subject and body at the same time
                markdown = Services.TextHelper.GetTextFromDb(db, TextConstants.ChangeEmailRequestBody, language);
                subject  = Services.TextHelper.GetTextFromDb(db, TextConstants.ChangeEmailRequestSubject, language);

                if (string.IsNullOrWhiteSpace(markdown))
                {
                    throw new DataException("Database is missing a template for the email body");
                }
                if (string.IsNullOrWhiteSpace(subject))
                {
                    throw new DataException("Database is missing a template for the email subject");
                }

                markdown = BasicTemplating.ReplaceInTemplate(markdown, new {
                    activationcode,
                    username = name
                });

                subject = BasicTemplating.ReplaceInTemplate(subject, new {
                    activationcode,
                    username = name
                });

                logEntry.Subject = subject;
                db.InsertItem(logEntry);
            });

            var text = MarkdownRenderer.RenderAsText(markdown);

            markdown = MarkdownRenderer.RenderAsHtml(markdown);

            // Deliver the email to the server
            await SparkPost.SendEmailAsync(SparkPost.Transmission.Create(
                                               EmailSignupSettings.FromName,
                                               EmailSignupSettings.FromEmail,
                                               name,
                                               email,
                                               subject,
                                               markdown,
                                               text,
                                               true
                                               ));

            // Record that we succeeded delivering the email to the server
            logEntry.Delivered = true;
            await DatabaseInstance.GetInstance().RunInTransactionAsync(db => db.UpdateItem(logEntry));
        }