From c8b089f7fb8a04b9a95d55f494a634e089f6531f Mon Sep 17 00:00:00 2001 From: Scott Tolksdorf Date: Thu, 12 Jan 2017 01:19:08 -0500 Subject: [PATCH] Added new lexer for handling the new block syntax --- shared/homebrewery/brew.store.js | 3 +- .../homebrewery/brewRenderer/brewRenderer.jsx | 2 +- shared/homebrewery/markdown.new.js | 59 ++++++++++++++++--- shared/naturalcrit/codeEditor/codeEditor.jsx | 2 +- 4 files changed, 53 insertions(+), 13 deletions(-) diff --git a/shared/homebrewery/brew.store.js b/shared/homebrewery/brew.store.js index 5b74495..483eba5 100644 --- a/shared/homebrewery/brew.store.js +++ b/shared/homebrewery/brew.store.js @@ -1,7 +1,7 @@ const _ = require('lodash'); const flux = require('pico-flux'); -const Markdown = require('homebrewery/markdown.js'); +const Markdown = require('homebrewery/markdown.new.js'); let State = { version : '0.0.0', @@ -30,7 +30,6 @@ const Store = flux.createStore({ State.brew = brew; }, UPDATE_BREW_TEXT : (brewText) => { - console.log(State); State.brew.text = brewText; State.errors = Markdown.validate(brewText); }, diff --git a/shared/homebrewery/brewRenderer/brewRenderer.jsx b/shared/homebrewery/brewRenderer/brewRenderer.jsx index 82dab8f..2b3c893 100644 --- a/shared/homebrewery/brewRenderer/brewRenderer.jsx +++ b/shared/homebrewery/brewRenderer/brewRenderer.jsx @@ -2,7 +2,7 @@ const React = require('react'); const _ = require('lodash'); const cx = require('classnames'); -const Markdown = require('homebrewery/markdown.js'); +const Markdown = require('homebrewery/markdown.new.js'); const ErrorBar = require('./errorBar/errorBar.jsx'); const RenderWarnings = require('homebrewery/renderWarnings/renderWarnings.jsx') diff --git a/shared/homebrewery/markdown.new.js b/shared/homebrewery/markdown.new.js index fcb8d6e..a155e23 100644 --- a/shared/homebrewery/markdown.new.js +++ b/shared/homebrewery/markdown.new.js @@ -1,9 +1,12 @@ -var _ = require('lodash'); -var Markdown = require('marked'); -var renderer = new Markdown.Renderer(); +const _ = require('lodash'); +const Markdown = require('marked'); + + +/* //Processes the markdown within an HTML block if it's just a class-wrapper renderer.html = function (html) { + console.log(html); if(_.startsWith(_.trim(html), '')){ var openTag = html.substring(0, html.indexOf('>')+1); html = html.substring(html.indexOf('>')+1); @@ -12,22 +15,59 @@ renderer.html = function (html) { } return html; }; +*/ -const tagTypes = ['div', 'span', 'a']; -const tagRegex = new RegExp('(' + - _.map(tagTypes, (type)=>{ - return `\\<${type}|\\`; - }).join('|') + ')', 'g'); module.exports = { marked : Markdown, render : (rawBrewText)=>{ - return Markdown(rawBrewText, {renderer : renderer}) + //Adds in the new div block syntax + let count = 0; + let blockReg = /{{\w+|}}/g; + const renderer = new Markdown.Renderer(); + renderer.paragraph = function (text) { + const matches = text.match(blockReg); + if(!matches) return `

${text}

\n`; + let matchIndex = 0; + const res = _.reduce(text.split(blockReg), (r, text) => { + if(text) r.push(`

${text}

\n`); + const block = matches[matchIndex]; + if(block && _.startsWith(block, '{{')){ + r.push(`
`); + count++; + } + if(block == '}}' && count !== 0){ + r.push('
'); + count--; + } + matchIndex++; + return r; + }, []).join('\n'); + return res; + }; + let html = Markdown(rawBrewText, {renderer : renderer, sanitize: true}); + html += _.times(count, ()=>{return ''}).join('\n'); + return html; }, + + + + + + + + + + + + + validate : (rawBrewText) => { + return []; + /* var errors = []; var leftovers = _.reduce(rawBrewText.split('\n'), (acc, line, _lineNumber) => { var lineNumber = _lineNumber + 1; @@ -77,6 +117,7 @@ module.exports = { }); return errors; + */ }, }; diff --git a/shared/naturalcrit/codeEditor/codeEditor.jsx b/shared/naturalcrit/codeEditor/codeEditor.jsx index c090757..c03c7ad 100644 --- a/shared/naturalcrit/codeEditor/codeEditor.jsx +++ b/shared/naturalcrit/codeEditor/codeEditor.jsx @@ -29,7 +29,7 @@ var CodeEditor = React.createClass({ value : this.props.value, lineNumbers: true, lineWrapping : this.props.wrap, - mode : this.props.language + mode : this.props.language, }); this.codeMirror.on('change', this.handleChange);