diff --git a/src/code/colorful.js b/src/code/colorful.js index a11e646..f60bb95 100644 --- a/src/code/colorful.js +++ b/src/code/colorful.js @@ -19,8 +19,9 @@ const FN = /([\.\s])([a-zA-Z$][\da-zA-Z_]*)(\(.*?\))/g const CM = /(?=\s)([ ]*\/\/.*)|(^\/\/.*)/g const INLINE = { code: /`([^`]*?[^`\\\s])`/g, + codeBlock: /^```(.*?)$/gm, strong: [/__([\s\S]*?[^\s\\])__(?!_)/g, /\*\*([\s\S]*?[^\s\\])\*\*(?!\*)/g], - em: [/_([\s\S]*?[^\s\\])_(?!_)/g, /\*([\s\S]*?[^\s\\*])\*(?!\*)/g], + em: [/_([\s\S]*?[^\s\\_])_(?!_)/g, /\*([\s\S]*?[^\s\\*])\*(?!\*)/g], del: /~~([\s\S]*?[^\s\\~])~~/g, qlinkVar: /^\[(\d+)\]: ([\S]+)\s*?((['"])[\s\S]*?\4)?\s*?$/gm, // 引用声明 qlink: /\[([^\]]*?)\]\[(\d*?)\]/g, // 引用链接 @@ -29,7 +30,8 @@ const INLINE = { head: /^(#{1,6} )(.*)$/gm, quote: /^(>{1,} )(.*)$/gm, task: /^([\-\+\*]) \[( |x)\] (.*)$/gm, - list: /^([ \t]*?([\-\+\*]|\d+\.) )(.*)$/gm + list: /^([ \t]*?([\-\+\*]|\d+\.) )(.*)$/gm, + br: /^([\-\*_=]{3})(.*?)$/gm } function parseJs(code) { @@ -62,12 +64,15 @@ function rebuild(code) { export function colorMd(code) { code = code .replace(INLINE.head, '[cm]$1[/cm][tag]$2[/tag]') + .replace(INLINE.br, '[cm]$1[/cm][tag]$2[/tag]') .replace(INLINE.quote, '[cm]$1[/cm]$2') .replace( INLINE.task, '[cm]$1 [[/cm][attr]$2[/attr][cm]][/cm] $3' ) .replace(INLINE.list, '[cm]$1[/cm]$3') + .replace(INLINE.code, '[cm]`[/cm][tag]$1[/tag][cm]`[/cm]') + .replace(INLINE.codeBlock, '[cm]```[/cm][tag]$1[/tag]') .replace(INLINE.strong[0], '[cm]__[/cm]$1[cm]__[/cm]') .replace(INLINE.strong[1], '[cm]**[/cm]$1[cm]**[/cm]') .replace(INLINE.em[0], '[cm]_[/cm]$1[cm]_[/cm]') diff --git a/src/code/index.wc b/src/code/index.wc index e710298..8cc8bab 100644 --- a/src/code/index.wc +++ b/src/code/index.wc @@ -8,7 +8,7 @@ - + @@ -77,7 +77,7 @@ } } - .scoll { + .scroll { flex: 1; padding: 5px 0 0; line-height: 20px; @@ -163,10 +163,10 @@ background: var(--color-dark-1); color: var(--color-plain-3); - .code { + .scroll { color: var(--color-plain-2); - p::before { + code::before { color: var(--color-grey-3); } } diff --git a/src/markd/core.js b/src/markd/core.js index 36c88e5..a67feb8 100644 --- a/src/markd/core.js +++ b/src/markd/core.js @@ -177,7 +177,7 @@ function fixed(str) { }) .replace(BLOCK_RE, (m, tag, attr, txt) => { return `<${tag + attr.replace(/(⨨☇)+/g, ' ')}>${txt - .replace(/⨨⤶/g, ' ') + .replace(/⨨⤶/g, '\n') .replace(/(⨨☇)+/g, ' ')}` }) } @@ -212,17 +212,6 @@ class Tool { list.push(tmp.replace(/^```([\w\#\-]*?)$/, '')) } isCodeBlock = !isCodeBlock - } else if (Helper.isTable(tmp) && !isTable) { - var thead = tmp.split('|') - // 去头去尾 - thead.shift() - thead.pop() - list.push( - `${thead - .map(_ => ``) - .join('')}` - ) - isTable = true } else { var qlink if (isCodeBlock) { @@ -231,22 +220,38 @@ class Tool { .replace(/>/g, '>') .replace('\\`\\`\\`', '```') } else { - it = it - // 非代码块进行xss过滤 - .replace(INLINE.code, (m, txt) => { - return `\`${txt.replace(//g, '>')}\`` - }) - .replace(/<(\/?)script[^>]*?>/g, '<$1script>') - .replace(TAG_RE, (m, name, attr = '') => { - // 过滤所有onXX=""事件属性 - attr = attr.replace(ATTR_RE, ' ').trim() - if (attr) { - attr = ' ' + attr - } - return `<${name}${attr}>` - }) - // 不在代码块中, 才判断引用声明 - qlink = Helper.isQLink(it) + if (Helper.isTable(tmp) && !isTable) { + var thead = tmp.split('|') + // 去头去尾 + thead.shift() + thead.pop() + list.push( + `
${_}
${thead + .map(_ => ``) + .join('')}` + ) + isTable = true + continue + } else { + it = it + // 非代码块进行xss过滤 + .replace(INLINE.code, (m, txt) => { + return `\`${txt + .replace(//g, '>')}\`` + }) + .replace(/<(\/?)script[^>]*?>/g, '<$1script>') + .replace(TAG_RE, (m, name, attr = '') => { + // 过滤所有onXX=""事件属性 + attr = attr.replace(ATTR_RE, ' ').trim() + if (attr) { + attr = ' ' + attr + } + return `<${name}${attr}>` + }) + // 不在代码块中, 才判断引用声明 + qlink = Helper.isQLink(it) + } } if (qlink) { @@ -300,7 +305,7 @@ class Tool { } if (isTable) { - var tmp = it.split('|').map(_ => _.trim()) + let tmp = it.split('|').map(_ => _.trim()) tmp.shift() tmp.pop() @@ -327,8 +332,9 @@ class Tool { continue } - // wc-code标签直接拼接 - if (~it.indexOf('wc-code')) { + // wc-code标签直接拼接, 判断时多拼一个 < 和 >, + // 是为了避免在 wc-markd嵌入代码块示例时, 将其内容编译为html + if (~it.indexOf('')) { html += it isCodeBlock = !isCodeBlock continue diff --git a/src/meditor/index.wc b/src/meditor/index.wc index eecad33..d1aaf66 100644 --- a/src/meditor/index.wc +++ b/src/meditor/index.wc @@ -423,8 +423,10 @@ export default class Meditor { } if (isToolbarShow) { this.__TOOLBAR__.classList.toggle('active', isToolbarShow) - this.__TOOLBAR__.lastElementChild.classList.toggle('active', preview) - this.__VIEW__.classList.toggle('active', preview) + if (toolbar === null || toolbar.includes('preview')) { + this.__TOOLBAR__.lastElementChild.classList.toggle('active', preview) + this.__VIEW__.classList.toggle('active', preview) + } } } @@ -763,7 +765,7 @@ export default class Meditor { set value(val) { this.__EDITOR__.value = val if (this.state.preview) { - this.__VIEW__.value = val + this.__VIEW__.md = val } } @@ -821,7 +823,7 @@ export default class Meditor { if (this.state.preview) { var txt = this.__EDITOR__.value.trim() if (txt) { - this.__VIEW__.value = txt + this.__VIEW__.md = txt } else { this.__VIEW__.clear() }
${_}