From 15560a3bce84185e69a14db75db8969a8fda7703 Mon Sep 17 00:00:00 2001 From: Rokt33r Date: Tue, 5 Jan 2016 04:53:40 +0900 Subject: [PATCH] render LaTeX --- browser/components/MarkdownPreview.js | 23 ++++++++++++++++++ browser/lib/markdown.js | 9 +++++++ browser/styles/mixins/marked.styl | 8 ++++++ katex.min.css | 0 lib/finder.html | 6 ++--- lib/main.html | 9 ++++--- package.json | 1 + resources/Lato-Regular.ttf | Bin 607720 -> 0 bytes resources/Lato-Regular.woff | Bin 309192 -> 0 bytes resources/Lato-Regular.woff2 | Bin 182708 -> 0 bytes resources/fonts/KaTeX_AMS-Regular.eot | Bin 0 -> 71656 bytes resources/fonts/KaTeX_AMS-Regular.ttf | Bin 0 -> 71428 bytes resources/fonts/KaTeX_AMS-Regular.woff | Bin 0 -> 40200 bytes resources/fonts/KaTeX_AMS-Regular.woff2 | Bin 0 -> 33188 bytes resources/fonts/KaTeX_Caligraphic-Bold.eot | Bin 0 -> 19836 bytes resources/fonts/KaTeX_Caligraphic-Bold.ttf | Bin 0 -> 19588 bytes resources/fonts/KaTeX_Caligraphic-Bold.woff | Bin 0 -> 12136 bytes resources/fonts/KaTeX_Caligraphic-Bold.woff2 | Bin 0 -> 10604 bytes resources/fonts/KaTeX_Caligraphic-Regular.eot | Bin 0 -> 19220 bytes resources/fonts/KaTeX_Caligraphic-Regular.ttf | Bin 0 -> 18960 bytes .../fonts/KaTeX_Caligraphic-Regular.woff | Bin 0 -> 11868 bytes .../fonts/KaTeX_Caligraphic-Regular.woff2 | Bin 0 -> 10396 bytes resources/fonts/KaTeX_Fraktur-Bold.eot | Bin 0 -> 36200 bytes resources/fonts/KaTeX_Fraktur-Bold.ttf | Bin 0 -> 35968 bytes resources/fonts/KaTeX_Fraktur-Bold.woff | Bin 0 -> 23388 bytes resources/fonts/KaTeX_Fraktur-Bold.woff2 | Bin 0 -> 20476 bytes resources/fonts/KaTeX_Fraktur-Regular.eot | Bin 0 -> 34896 bytes resources/fonts/KaTeX_Fraktur-Regular.ttf | Bin 0 -> 34652 bytes resources/fonts/KaTeX_Fraktur-Regular.woff | Bin 0 -> 22844 bytes resources/fonts/KaTeX_Fraktur-Regular.woff2 | Bin 0 -> 19868 bytes resources/fonts/KaTeX_Main-Bold.eot | Bin 0 -> 60688 bytes resources/fonts/KaTeX_Main-Bold.ttf | Bin 0 -> 60468 bytes resources/fonts/KaTeX_Main-Bold.woff | Bin 0 -> 35480 bytes resources/fonts/KaTeX_Main-Bold.woff2 | Bin 0 -> 29492 bytes resources/fonts/KaTeX_Main-Italic.eot | Bin 0 -> 44132 bytes resources/fonts/KaTeX_Main-Italic.ttf | Bin 0 -> 43904 bytes resources/fonts/KaTeX_Main-Italic.woff | Bin 0 -> 24880 bytes resources/fonts/KaTeX_Main-Italic.woff2 | Bin 0 -> 21032 bytes resources/fonts/KaTeX_Main-Regular.eot | Bin 0 -> 68228 bytes resources/fonts/KaTeX_Main-Regular.ttf | Bin 0 -> 67996 bytes resources/fonts/KaTeX_Main-Regular.woff | Bin 0 -> 37620 bytes resources/fonts/KaTeX_Main-Regular.woff2 | Bin 0 -> 31220 bytes resources/fonts/KaTeX_Math-BoldItalic.eot | Bin 0 -> 39990 bytes resources/fonts/KaTeX_Math-BoldItalic.ttf | Bin 0 -> 39744 bytes resources/fonts/KaTeX_Math-BoldItalic.woff | Bin 0 -> 23192 bytes resources/fonts/KaTeX_Math-BoldItalic.woff2 | Bin 0 -> 20036 bytes resources/fonts/KaTeX_Math-Italic.eot | Bin 0 -> 41676 bytes resources/fonts/KaTeX_Math-Italic.ttf | Bin 0 -> 41448 bytes resources/fonts/KaTeX_Math-Italic.woff | Bin 0 -> 23820 bytes resources/fonts/KaTeX_Math-Italic.woff2 | Bin 0 -> 20432 bytes resources/fonts/KaTeX_Math-Regular.eot | Bin 0 -> 41536 bytes resources/fonts/KaTeX_Math-Regular.ttf | Bin 0 -> 41304 bytes resources/fonts/KaTeX_Math-Regular.woff | Bin 0 -> 23712 bytes resources/fonts/KaTeX_Math-Regular.woff2 | Bin 0 -> 20344 bytes resources/fonts/KaTeX_SansSerif-Bold.eot | Bin 0 -> 34204 bytes resources/fonts/KaTeX_SansSerif-Bold.ttf | Bin 0 -> 33964 bytes resources/fonts/KaTeX_SansSerif-Bold.woff | Bin 0 -> 19196 bytes resources/fonts/KaTeX_SansSerif-Bold.woff2 | Bin 0 -> 16020 bytes resources/fonts/KaTeX_SansSerif-Italic.eot | Bin 0 -> 31320 bytes resources/fonts/KaTeX_SansSerif-Italic.ttf | Bin 0 -> 31072 bytes resources/fonts/KaTeX_SansSerif-Italic.woff | Bin 0 -> 18080 bytes resources/fonts/KaTeX_SansSerif-Italic.woff2 | Bin 0 -> 15152 bytes resources/fonts/KaTeX_SansSerif-Regular.eot | Bin 0 -> 30212 bytes resources/fonts/KaTeX_SansSerif-Regular.ttf | Bin 0 -> 29960 bytes resources/fonts/KaTeX_SansSerif-Regular.woff | Bin 0 -> 16744 bytes resources/fonts/KaTeX_SansSerif-Regular.woff2 | Bin 0 -> 13908 bytes resources/fonts/KaTeX_Script-Regular.eot | Bin 0 -> 25104 bytes resources/fonts/KaTeX_Script-Regular.ttf | Bin 0 -> 24864 bytes resources/fonts/KaTeX_Script-Regular.woff | Bin 0 -> 13856 bytes resources/fonts/KaTeX_Script-Regular.woff2 | Bin 0 -> 12276 bytes resources/fonts/KaTeX_Size1-Regular.eot | Bin 0 -> 13408 bytes resources/fonts/KaTeX_Size1-Regular.ttf | Bin 0 -> 13172 bytes resources/fonts/KaTeX_Size1-Regular.woff | Bin 0 -> 6980 bytes resources/fonts/KaTeX_Size1-Regular.woff2 | Bin 0 -> 5820 bytes resources/fonts/KaTeX_Size2-Regular.eot | Bin 0 -> 12648 bytes resources/fonts/KaTeX_Size2-Regular.ttf | Bin 0 -> 12412 bytes resources/fonts/KaTeX_Size2-Regular.woff | Bin 0 -> 6684 bytes resources/fonts/KaTeX_Size2-Regular.woff2 | Bin 0 -> 5560 bytes resources/fonts/KaTeX_Size3-Regular.eot | Bin 0 -> 8596 bytes resources/fonts/KaTeX_Size3-Regular.ttf | Bin 0 -> 8360 bytes resources/fonts/KaTeX_Size3-Regular.woff | Bin 0 -> 4776 bytes resources/fonts/KaTeX_Size3-Regular.woff2 | Bin 0 -> 3856 bytes resources/fonts/KaTeX_Size4-Regular.eot | Bin 0 -> 11520 bytes resources/fonts/KaTeX_Size4-Regular.ttf | Bin 0 -> 11284 bytes resources/fonts/KaTeX_Size4-Regular.woff | Bin 0 -> 6456 bytes resources/fonts/KaTeX_Size4-Regular.woff2 | Bin 0 -> 5172 bytes resources/fonts/KaTeX_Typewriter-Regular.eot | Bin 0 -> 35784 bytes resources/fonts/KaTeX_Typewriter-Regular.ttf | Bin 0 -> 35528 bytes resources/fonts/KaTeX_Typewriter-Regular.woff | Bin 0 -> 20712 bytes .../fonts/KaTeX_Typewriter-Regular.woff2 | Bin 0 -> 17344 bytes resources/katex.min.css | 1 + resources/katex.min.js | 6 +++++ webpack-skeleton.js | 3 ++- 93 files changed, 59 insertions(+), 7 deletions(-) create mode 100644 katex.min.css delete mode 100644 resources/Lato-Regular.ttf delete mode 100644 resources/Lato-Regular.woff delete mode 100644 resources/Lato-Regular.woff2 create mode 100644 resources/fonts/KaTeX_AMS-Regular.eot create mode 100644 resources/fonts/KaTeX_AMS-Regular.ttf create mode 100644 resources/fonts/KaTeX_AMS-Regular.woff create mode 100644 resources/fonts/KaTeX_AMS-Regular.woff2 create mode 100644 resources/fonts/KaTeX_Caligraphic-Bold.eot create mode 100644 resources/fonts/KaTeX_Caligraphic-Bold.ttf create mode 100644 resources/fonts/KaTeX_Caligraphic-Bold.woff create mode 100644 resources/fonts/KaTeX_Caligraphic-Bold.woff2 create mode 100644 resources/fonts/KaTeX_Caligraphic-Regular.eot create mode 100644 resources/fonts/KaTeX_Caligraphic-Regular.ttf create mode 100644 resources/fonts/KaTeX_Caligraphic-Regular.woff create mode 100644 resources/fonts/KaTeX_Caligraphic-Regular.woff2 create mode 100644 resources/fonts/KaTeX_Fraktur-Bold.eot create mode 100644 resources/fonts/KaTeX_Fraktur-Bold.ttf create mode 100644 resources/fonts/KaTeX_Fraktur-Bold.woff create mode 100644 resources/fonts/KaTeX_Fraktur-Bold.woff2 create mode 100644 resources/fonts/KaTeX_Fraktur-Regular.eot create mode 100644 resources/fonts/KaTeX_Fraktur-Regular.ttf create mode 100644 resources/fonts/KaTeX_Fraktur-Regular.woff create mode 100644 resources/fonts/KaTeX_Fraktur-Regular.woff2 create mode 100644 resources/fonts/KaTeX_Main-Bold.eot create mode 100644 resources/fonts/KaTeX_Main-Bold.ttf create mode 100644 resources/fonts/KaTeX_Main-Bold.woff create mode 100644 resources/fonts/KaTeX_Main-Bold.woff2 create mode 100644 resources/fonts/KaTeX_Main-Italic.eot create mode 100644 resources/fonts/KaTeX_Main-Italic.ttf create mode 100644 resources/fonts/KaTeX_Main-Italic.woff create mode 100644 resources/fonts/KaTeX_Main-Italic.woff2 create mode 100644 resources/fonts/KaTeX_Main-Regular.eot create mode 100644 resources/fonts/KaTeX_Main-Regular.ttf create mode 100644 resources/fonts/KaTeX_Main-Regular.woff create mode 100644 resources/fonts/KaTeX_Main-Regular.woff2 create mode 100644 resources/fonts/KaTeX_Math-BoldItalic.eot create mode 100644 resources/fonts/KaTeX_Math-BoldItalic.ttf create mode 100644 resources/fonts/KaTeX_Math-BoldItalic.woff create mode 100644 resources/fonts/KaTeX_Math-BoldItalic.woff2 create mode 100644 resources/fonts/KaTeX_Math-Italic.eot create mode 100644 resources/fonts/KaTeX_Math-Italic.ttf create mode 100644 resources/fonts/KaTeX_Math-Italic.woff create mode 100644 resources/fonts/KaTeX_Math-Italic.woff2 create mode 100644 resources/fonts/KaTeX_Math-Regular.eot create mode 100644 resources/fonts/KaTeX_Math-Regular.ttf create mode 100644 resources/fonts/KaTeX_Math-Regular.woff create mode 100644 resources/fonts/KaTeX_Math-Regular.woff2 create mode 100644 resources/fonts/KaTeX_SansSerif-Bold.eot create mode 100644 resources/fonts/KaTeX_SansSerif-Bold.ttf create mode 100644 resources/fonts/KaTeX_SansSerif-Bold.woff create mode 100644 resources/fonts/KaTeX_SansSerif-Bold.woff2 create mode 100644 resources/fonts/KaTeX_SansSerif-Italic.eot create mode 100644 resources/fonts/KaTeX_SansSerif-Italic.ttf create mode 100644 resources/fonts/KaTeX_SansSerif-Italic.woff create mode 100644 resources/fonts/KaTeX_SansSerif-Italic.woff2 create mode 100644 resources/fonts/KaTeX_SansSerif-Regular.eot create mode 100644 resources/fonts/KaTeX_SansSerif-Regular.ttf create mode 100644 resources/fonts/KaTeX_SansSerif-Regular.woff create mode 100644 resources/fonts/KaTeX_SansSerif-Regular.woff2 create mode 100644 resources/fonts/KaTeX_Script-Regular.eot create mode 100644 resources/fonts/KaTeX_Script-Regular.ttf create mode 100644 resources/fonts/KaTeX_Script-Regular.woff create mode 100644 resources/fonts/KaTeX_Script-Regular.woff2 create mode 100644 resources/fonts/KaTeX_Size1-Regular.eot create mode 100644 resources/fonts/KaTeX_Size1-Regular.ttf create mode 100644 resources/fonts/KaTeX_Size1-Regular.woff create mode 100644 resources/fonts/KaTeX_Size1-Regular.woff2 create mode 100644 resources/fonts/KaTeX_Size2-Regular.eot create mode 100644 resources/fonts/KaTeX_Size2-Regular.ttf create mode 100644 resources/fonts/KaTeX_Size2-Regular.woff create mode 100644 resources/fonts/KaTeX_Size2-Regular.woff2 create mode 100644 resources/fonts/KaTeX_Size3-Regular.eot create mode 100644 resources/fonts/KaTeX_Size3-Regular.ttf create mode 100644 resources/fonts/KaTeX_Size3-Regular.woff create mode 100644 resources/fonts/KaTeX_Size3-Regular.woff2 create mode 100644 resources/fonts/KaTeX_Size4-Regular.eot create mode 100644 resources/fonts/KaTeX_Size4-Regular.ttf create mode 100644 resources/fonts/KaTeX_Size4-Regular.woff create mode 100644 resources/fonts/KaTeX_Size4-Regular.woff2 create mode 100644 resources/fonts/KaTeX_Typewriter-Regular.eot create mode 100644 resources/fonts/KaTeX_Typewriter-Regular.ttf create mode 100644 resources/fonts/KaTeX_Typewriter-Regular.woff create mode 100644 resources/fonts/KaTeX_Typewriter-Regular.woff2 create mode 100644 resources/katex.min.css create mode 100644 resources/katex.min.js diff --git a/browser/components/MarkdownPreview.js b/browser/components/MarkdownPreview.js index 1b503bac..bee629f6 100644 --- a/browser/components/MarkdownPreview.js +++ b/browser/components/MarkdownPreview.js @@ -6,6 +6,8 @@ var ReactDOM = require('react-dom') const electron = require('electron') const shell = electron.shell +const katex = window.katex + function handleAnchorClick (e) { e.preventDefault() e.stopPropagation() @@ -17,13 +19,27 @@ function stopPropagation (e) { e.stopPropagation() } +function math2Katex (display) { + return function (el) { + try { + katex.render(el.innerHTML, el, {display: display}) + el.className = 'math-rendered' + } catch (e) { + el.innerHTML = e.message + el.className = 'math-failed' + } + } +} + export default class MarkdownPreview extends React.Component { componentDidMount () { this.addListener() + this.renderMath() } componentDidUpdate () { this.addListener() + this.renderMath() } componentWillUnmount () { @@ -34,6 +50,13 @@ export default class MarkdownPreview extends React.Component { this.removeListener() } + renderMath () { + let inline = ReactDOM.findDOMNode(this).querySelectorAll('span.math') + Array.prototype.forEach.call(inline, math2Katex(false)) + let block = ReactDOM.findDOMNode(this).querySelectorAll('div.math') + Array.prototype.forEach.call(block, math2Katex(true)) + } + addListener () { var anchors = ReactDOM.findDOMNode(this).querySelectorAll('a:not(.lineAnchor)') diff --git a/browser/lib/markdown.js b/browser/lib/markdown.js index 619b9655..e3192fa5 100644 --- a/browser/lib/markdown.js +++ b/browser/lib/markdown.js @@ -1,6 +1,7 @@ import markdownit from 'markdown-it' import hljs from 'highlight.js' import emoji from 'markdown-it-emoji' +import math from 'markdown-it-math' var md = markdownit({ typographer: true, @@ -20,6 +21,14 @@ var md = markdownit({ } }) md.use(emoji) +md.use(math, { + inlineRenderer: function (str) { + return `${str}` + }, + blockRenderer: function (str) { + return `
${str}
` + } +}) let originalRenderToken = md.renderer.renderToken md.renderer.renderToken = function renderToken (tokens, idx, options) { diff --git a/browser/styles/mixins/marked.styl b/browser/styles/mixins/marked.styl index db7aa1e3..afbfe684 100644 --- a/browser/styles/mixins/marked.styl +++ b/browser/styles/mixins/marked.styl @@ -1,5 +1,13 @@ marked() font-size 14px + div.math-rendered + text-align center + .math-failed + background-color alpha(red, 0.1) + color darken(red, 15%) + padding 5px + margin -5px + border-radius 5px a color brandColor text-decoration none diff --git a/katex.min.css b/katex.min.css new file mode 100644 index 00000000..e69de29b diff --git a/lib/finder.html b/lib/finder.html index 0593c2c8..1af7e95c 100644 --- a/lib/finder.html +++ b/lib/finder.html @@ -15,9 +15,9 @@