diff options
author | hmhealey <harrisonmhealey@gmail.com> | 2015-10-08 18:18:51 -0400 |
---|---|---|
committer | hmhealey <harrisonmhealey@gmail.com> | 2015-10-09 16:30:57 -0400 |
commit | 787d2ef7bca7f411b18d1d13561d61d7e95c81a7 (patch) | |
tree | 27c3678c6f00ec557304250cbc392343883bed49 /web/react/utils/markdown.jsx | |
parent | a0febe2f3156ceb02635d9ecd5124da49c494161 (diff) | |
download | chat-787d2ef7bca7f411b18d1d13561d61d7e95c81a7.tar.gz chat-787d2ef7bca7f411b18d1d13561d61d7e95c81a7.tar.bz2 chat-787d2ef7bca7f411b18d1d13561d61d7e95c81a7.zip |
Modified markdown lexer to not break up words written in snake_case
Diffstat (limited to 'web/react/utils/markdown.jsx')
-rw-r--r-- | web/react/utils/markdown.jsx | 38 |
1 files changed, 37 insertions, 1 deletions
diff --git a/web/react/utils/markdown.jsx b/web/react/utils/markdown.jsx index 12d6dd424..848b1ea75 100644 --- a/web/react/utils/markdown.jsx +++ b/web/react/utils/markdown.jsx @@ -6,7 +6,31 @@ const Utils = require('./utils.jsx'); const marked = require('marked'); -export class MattermostMarkdownRenderer extends marked.Renderer { +class MattermostInlineLexer extends marked.InlineLexer { + constructor(links, options) { + super(links, options); + + // modified version of the regex that doesn't break up words in snake_case + // the original is /^[\s\S]+?(?=[\\<!\[_*`]| {2,}\n|$)/ + this.rules.text = /^[\s\S]+?(?=__|\b_|[\\<!\[*`]| {2,}\n|$)/; + } +} + +class MattermostParser extends marked.Parser { + parse(src) { + this.inline = new MattermostInlineLexer(src.links, this.options, this.renderer); + this.tokens = src.reverse(); + + var out = ''; + while (this.next()) { + out += this.tok(); + } + + return out; + } +} + +class MattermostMarkdownRenderer extends marked.Renderer { constructor(options, formattingOptions = {}) { super(options); @@ -68,3 +92,15 @@ export class MattermostMarkdownRenderer extends marked.Renderer { return TextFormatting.doFormatText(text, this.formattingOptions); } } + +export function format(text, options) { + const markdownOptions = { + renderer: new MattermostMarkdownRenderer(null, options), + sanitize: true + }; + + const tokens = marked.lexer(text, markdownOptions); + + return new MattermostParser(markdownOptions).parse(tokens); +} + |