Skip to content

Instantly share code, notes, and snippets.

@Galadirith
Last active October 5, 2015 21:56
Show Gist options
  • Save Galadirith/b4ed187d59c9e6d7cde0 to your computer and use it in GitHub Desktop.
Save Galadirith/b4ed187d59c9e6d7cde0 to your computer and use it in GitHub Desktop.
Custom maths block parsing
markdownIt = null
markdownItOptions = null
renderLaTeX = null
math = null
lazyHeaders = null
mathInline = (string) -> "<span class='math'><script type='math/tex'>#{string}</script></span>"
mathBlock = (string) ->
env = string.split /^([a-zA-Z]*?)}{/
if env.length is 1
then "<span class='math'><script type='math/tex; mode=display'>#{string}</script></span>"
else "<span class='math'><script type='math/tex; mode=display'>\\begin{#{env[1]}}#{env[2]}\\end{#{env[1]}}</script></span>"
mathDollars =
inlineOpen: '$'
inlineClose: '$'
blockOpen: '$$'
blockClose: '$$'
inlineRenderer: mathInline
blockRenderer: mathBlock
mathBrackets =
inlineOpen: '\\('
inlineClose: '\\)'
blockOpen: '\\['
blockClose: '\\]'
inlineRenderer: mathInline
blockRenderer: mathBlock
mathEnv =
inlineOpen: '\\f$'
inlineClose: '\\f$'
blockOpen: '\\f{'
blockClose: '\\f}'
inlineRenderer: mathInline
blockRenderer: mathBlock
getOptions = ->
html: true
xhtmlOut: false
breaks: atom.config.get('markdown-preview-plus.breakOnSingleNewline')
langPrefix: 'lang-'
linkify: true
typographer: true
init = (rL) ->
renderLaTeX = rL
markdownItOptions = getOptions()
markdownIt = require('markdown-it')(markdownItOptions)
if renderLaTeX
math ?= require('markdown-it-math')
markdownIt.use math, mathDollars
markdownIt.use math, mathBrackets
markdownIt.use math, mathEnv
lazyHeaders = atom.config.get('markdown-preview-plus.useLazyHeaders')
if lazyHeaders
markdownIt.use require('markdown-it-lazy-headers')
needsInit = (rL) ->
not markdownIt? or
markdownItOptions.breaks isnt atom.config.get('markdown-preview-plus.breakOnSingleNewline') or
lazyHeaders isnt atom.config.get('markdown-preview-plus.useLazyHeaders') or
rL isnt renderLaTeX
exports.render = (text, rL) ->
init(rL) if needsInit(rL)
markdownIt.render text
exports.decode = (url) ->
markdownIt.normalizeLinkText url
exports.getTokens = (text, rL) ->
init(rL) if needsInit(rL)
markdownIt.parse text, {}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment