Skip to content

Commit

Permalink
Add R Markdown support
Browse files Browse the repository at this point in the history
- Strip YAML front matter
- Parse and convert remaining Markdown document using Blackfriday

Code chunk delimiters like "```{r}" and chunk options are ignored by Blackfriday, so syntax highlighting will not be applied.
  • Loading branch information
samuelmeuli committed Apr 28, 2020
1 parent 7bb6fa4 commit 46bc931
Show file tree
Hide file tree
Showing 7 changed files with 26 additions and 3 deletions.
2 changes: 1 addition & 1 deletion Glance/SupportedFilesWC.xib
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@
</fragment>
<fragment>
<string key="content">
.md, .markdown, .mdown, .mkdn, .mkd
.md, .markdown, .mdown, .mkdn, .mkd, .Rmd

</string>
<attributes>
Expand Down
Binary file modified HTMLConverter/htmlconverter.a
Binary file not shown.
8 changes: 8 additions & 0 deletions HTMLConverter/htmlconverter.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,12 @@ import (
"github.com/microcosm-cc/bluemonday"
"github.com/samuelmeuli/nbtohtml"
"gopkg.in/russross/blackfriday.v2"
"regexp"
)

// Regex for YAML front matter in a Markdown document
var markdownFrontMatterRegex = regexp.MustCompile(`---\n[\s\S]*?\n---\n`)

// Functions for conversion between C and Go strings. Required here because cgo cannot be used in
// tests.

Expand Down Expand Up @@ -81,6 +85,10 @@ func convertMarkdownToHTML(source *C.char) *C.char {
bfchroma.ChromaOptions(htmlFormatter.WithClasses(true)),
)

// Strip YAML front matter
sourceString = markdownFrontMatterRegex.ReplaceAllString(sourceString, "")

// Convert Markdown to HTML
html := blackfriday.Run([]byte(sourceString), blackfriday.WithRenderer(renderer))
htmlString := string(html)
htmlStringSanitized := policy.Sanitize(htmlString)
Expand Down
14 changes: 14 additions & 0 deletions HTMLConverter/htmlconverter_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,20 @@ Text`
assert.Equal(t, expected, minifyHTML(actual))
}

func TestConvertMarkdownToHTMLWithFrontMatter(t *testing.T) {
source := `---
key: Value
key2: Another value
---
# Heading
Text`
expected := "<h1>Heading</h1><p>Text</p>"
actual := convertToGoString(convertMarkdownToHTML(convertToCString(source)))
assert.Equal(t, expected, minifyHTML(actual))
}

func TestConvertNotebookToHTML(t *testing.T) {
source := `{"cells":[{"cell_type":"code","execution_count":1,"metadata":{},"outputs":[{"name":"stdout","output_type":"stream","text":["Hello world\n"]}],"source":["print(\"Hello world\")"]}],"metadata":{"kernelspec":{"display_name":"Python 3","language":"python","name":"python3"},"language_info":{"codemirror_mode":{"name":"ipython","version":3},"file_extension":".py","mimetype":"text/x-python","name":"python","nbconvert_exporter":"python","pygments_lexer":"ipython3","version":"3.8.2"}},"nbformat":4,"nbformat_minor":4}`
actual := convertToGoString(convertNotebookToHTML(convertToCString(source)))
Expand Down
1 change: 1 addition & 0 deletions QLPlugin/Info.plist
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,7 @@
<string>dyn.ah62d4rv4ge80w6d3r3va</string> <!-- .ipynb -->

<!-- Markdown -->
<string>dyn.ah62d4rv4ge81e5pe</string> <!-- .Rmd -->
<string>io.caret.markdown</string> <!-- .markdown, .md, .mdown, .mkd, .mkdn -->
<string>net.daringfireball.markdown</string> <!-- .markdown, .md, .mdown, .mkd, .mkdn -->

Expand Down
2 changes: 1 addition & 1 deletion QLPlugin/Views/PreviewVCFactory.swift
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ class PreviewVCFactory {
case "gz":
// `gzip` is only supported for tarballs
return fileURL.path.hasSuffix(".tar.gz") ? TARPreview.self : nil
case "md", "markdown", "mdown", "mkdn", "mkd":
case "md", "markdown", "mdown", "mkdn", "mkd", "rmd":
return MarkdownPreview.self
case "ipynb":
return JupyterPreview.self
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ TODO: Main app screenshot

TODO: Add screenshot

- **Markdown** (rendered using [Blackfriday](https://github.com/russross/blackfriday)): `.md`, `.markdown`, `.mdown`, `.mkdn`, `.mkd`
- **Markdown** (rendered using [Blackfriday](https://github.com/russross/blackfriday)): `.md`, `.markdown`, `.mdown`, `.mkdn`, `.mkd`, `.Rmd`

TODO: Add screenshot

Expand Down

0 comments on commit 46bc931

Please sign in to comment.