diff --git a/browser/components/MarkdownEditor.js b/browser/components/MarkdownEditor.js index 4c195797..70df16a0 100644 --- a/browser/components/MarkdownEditor.js +++ b/browser/components/MarkdownEditor.js @@ -250,7 +250,7 @@ class MarkdownEditor extends React.Component { : 'codeEditor--hide' } ref='code' - mode='GitHub Flavored Markdown' + mode='Boost Flavored Markdown' value={value} theme={config.editor.theme} keyMap={config.editor.keyMap} diff --git a/browser/components/MarkdownSplitEditor.js b/browser/components/MarkdownSplitEditor.js index ddc9d7e0..d714125a 100644 --- a/browser/components/MarkdownSplitEditor.js +++ b/browser/components/MarkdownSplitEditor.js @@ -145,7 +145,7 @@ class MarkdownSplitEditor extends React.Component { styleName='codeEditor' ref='code' width={this.state.codeEditorWidthInPercent + '%'} - mode='GitHub Flavored Markdown' + mode='Boost Flavored Markdown' value={value} theme={config.editor.theme} keyMap={config.editor.keyMap} diff --git a/extra_scripts/codemirror/mode/bfm/bfm.css b/extra_scripts/codemirror/mode/bfm/bfm.css new file mode 100644 index 00000000..ef488cbf --- /dev/null +++ b/extra_scripts/codemirror/mode/bfm/bfm.css @@ -0,0 +1,42 @@ +.cm-table-row-even { background-color: rgb(242, 242, 242); } +.cm-s-3024-day.CodeMirror .cm-table-row-even { background-color: rgb(235, 235, 235); } +.cm-s-3024-night.CodeMirror .cm-table-row-even { background-color: rgb(12, 4, 0); } +.cm-s-abcdef.CodeMirror .cm-table-row-even { background-color: rgb(20, 20, 20); } +.cm-s-base16-dark.CodeMirror .cm-table-row-even { background-color: rgb(28, 28, 28); } +.cm-s-base16-light.CodeMirror .cm-table-row-even { background-color: rgb(233, 233, 233); } +.cm-s-bespin.CodeMirror .cm-table-row-even { background-color: rgb(54, 45, 38); } +.cm-s-blackboard.CodeMirror .cm-table-row-even { background-color: rgb(16, 22, 45); } +.cm-s-cobalt.CodeMirror .cm-table-row-even { background-color: rgb(0, 46, 86); } +.cm-s-colorforth.CodeMirror .cm-table-row-even { background-color: rgb(0, 0, 0); } +.cm-s-darcula.CodeMirror .cm-table-row-even { background-color: rgb(58, 58, 58); } +.cm-s-dracula.CodeMirror .cm-table-row-even { background-color: rgb(54, 57, 73); } +.cm-s-duotone-dark.CodeMirror .cm-table-row-even { background-color: rgb(57, 53, 70); } +.cm-s-duotone-light.CodeMirror .cm-table-row-even { background-color: rgb(242, 236, 229); } +.cm-s-erlang-dark.CodeMirror .cm-table-row-even { background-color: rgb(0, 46, 86); } +.cm-s-gruvbox-dark.CodeMirror .cm-table-row-even { background-color: rgb(54, 54, 54); } +.cm-s-hopscotch.CodeMirror .cm-table-row-even { background-color: rgb(68, 55, 66); } +.cm-s-isotope.CodeMirror .cm-table-row-even { background-color: rgb(0, 0, 0); } +.cm-s-lesser-dark.CodeMirror .cm-table-row-even { background-color: rgb(51, 51, 51); } +.cm-s-liquibyte.CodeMirror .cm-table-row-even { background-color: rgb(0, 0, 0); } +.cm-s-lucario.CodeMirror .cm-table-row-even { background-color: rgb(58, 84, 108); } +.cm-s-material.CodeMirror .cm-table-row-even { background-color: rgb(51, 68, 76); } +.cm-s-mbo.CodeMirror .cm-table-row-even { background-color: rgb(59, 59, 59); } +.cm-s-midnight.CodeMirror .cm-table-row-even { background-color: rgb(20, 34, 57); } +.cm-s-monokai.CodeMirror .cm-table-row-even { background-color: rgb(53, 54, 46); } +.cm-s-neo.CodeMirror .cm-table-row-even { background-color: rgb(242, 242, 242); } +.cm-s-night.CodeMirror .cm-table-row-even { background-color: rgb(14, 0, 42); } +.cm-s-oceanic-next.CodeMirror .cm-table-row-even { background-color: rgb(65, 88, 97); } +.cm-s-paraiso-dark.CodeMirror .cm-table-row-even { background-color: rgb(63, 41, 62); } +.cm-s-paraiso-light.CodeMirror .cm-table-row-even { background-color: rgb(222, 224, 205); } +.cm-s-pastel-on-dark.CodeMirror .cm-table-row-even { background-color: rgb(59, 54, 53); } +.cm-s-railscasts.CodeMirror .cm-table-row-even { background-color: rgb(58, 58, 58); } +.cm-s-rubyblue.CodeMirror .cm-table-row-even { background-color: rgb(23, 49, 72); } +.cm-s-seti.CodeMirror .cm-table-row-even { background-color: rgb(28, 31, 32); } +.cm-s-shadowfox.CodeMirror .cm-table-row-even { background-color: rgb(57, 57, 62); } +.cm-s-the-matrix.CodeMirror .cm-table-row-even { background-color: rgb(0, 0, 0); } +.cm-s-tomorrow-night-bright.CodeMirror .cm-table-row-even { background-color: rgb(0, 0, 0); } +.cm-s-tomorrow-night-eighties.CodeMirror .cm-table-row-even { background-color: rgb(0, 0, 0); } +.cm-s-twilight.CodeMirror .cm-table-row-even { background-color: rgb(27, 27, 27); } +.cm-s-vibrant-ink.CodeMirror .cm-table-row-even { background-color: rgb(0, 0, 0); } +.cm-s-xq-dark.CodeMirror .cm-table-row-even { background-color: rgb(14, 0, 42); } +.cm-s-yeti.CodeMirror .cm-table-row-even { background-color: rgb(225, 222, 219); } \ No newline at end of file diff --git a/extra_scripts/codemirror/mode/bfm/bfm.js b/extra_scripts/codemirror/mode/bfm/bfm.js new file mode 100644 index 00000000..1cd9e87c --- /dev/null +++ b/extra_scripts/codemirror/mode/bfm/bfm.js @@ -0,0 +1,71 @@ +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../codemirror/lib/codemirror"), require("../codemirror/mode/gfm/gfm")) + else if (typeof define == "function" && define.amd) // AMD + define(["../codemirror/lib/codemirror", "../codemirror/mode/gfm/gfm"], mod) + else // Plain browser env + mod(CodeMirror) +})(function(CodeMirror) { + 'use strict' + + CodeMirror.defineMode('bfm', function(config, gfmConfig) { + const bfmOverlay = { + startState() { + return { + inTable: false, + rowIndex: 0 + } + }, + copyState(s) { + return { + inTable: s.inTable, + rowIndex: s.rowIndex + } + }, + token(stream, state) { + state.combineTokens = true + + if (state.inTable) { + if (stream.match(/^\|/)) { + ++state.rowIndex + + stream.skipToEnd() + + if (state.rowIndex === 1) { + return 'table table-separator' + } else if (state.rowIndex % 2 === 0) { + return 'table table-row table-row-even' + } else { + return 'table table-row table-row-odd' + } + } else { + state.inTable = false + + stream.skipToEnd() + return null + } + } else if (stream.match(/^\|/)) { + state.inTable = true + state.rowIndex = 0 + + stream.skipToEnd() + return 'table table-header' + } + + stream.skipToEnd() + return null + } + } + + gfmConfig.name = 'gfm' + return CodeMirror.overlayMode(CodeMirror.getMode(config, gfmConfig), bfmOverlay) + }) + + CodeMirror.defineMIME('text/x-bfm', 'bfm') + + CodeMirror.modeInfo.push({ + name: "Boost Flavored Markdown", + mime: "text/x-bfm", + mode: "bfm" + }) +}) \ No newline at end of file diff --git a/gruntfile.js b/gruntfile.js index 5683adda..50881e8a 100644 --- a/gruntfile.js +++ b/gruntfile.js @@ -1,3 +1,4 @@ +const fs = require('fs') const path = require('path') const ChildProcess = require('child_process') const packager = require('electron-packager') @@ -284,5 +285,31 @@ module.exports = function (grunt) { } }) + grunt.registerTask('bfm', function () { + const done = this.async() + const root = path.join(__dirname, 'node_modules/codemirror/theme/') + + const colors = fs.readdirSync(root).map(file => { + const css = require('css').parse(fs.readFileSync(path.join(root, file), 'utf8')) + + const rules = css.stylesheet.rules.filter(rule => rule.selectors && /\b\.CodeMirror$/.test(rule.selectors[0])) + if (rules.length === 1) { + const declarations = rules[0].declarations.filter(declaration => declaration.property === 'background-color' || declaration.property === 'background') + if (declarations.length === 1) { + let bgColor = require('color')(declarations[0].value.split(' ')[0]) + if (bgColor.isLight()) { + bgColor = bgColor.darken(0.05) + } else { + bgColor = bgColor.lighten(0.35) + } + + return `${rules[0].selectors[0]} .cm-table-row-even { background-color: ${bgColor.rgb().string()}; }` + } + } + }).filter(value => !!value) + + fs.writeFileSync(path.join(__dirname, 'extra_scripts/codemirror/mode/bfm/bfm.css'), ['.cm-table-row-even { background-color: rgb(242, 242, 242); }', ...colors].join('\n'), 'utf8') + }) + grunt.registerTask('default', ['build']) } diff --git a/lib/main.html b/lib/main.html index 663c1d23..65c540a3 100644 --- a/lib/main.html +++ b/lib/main.html @@ -10,6 +10,7 @@ +