From af67c32e25ac28dbbc52f30ddd483b7c59e18ef0 Mon Sep 17 00:00:00 2001 From: Michael Schmidt Date: Sun, 10 Mar 2019 18:44:30 +0100 Subject: [PATCH] Markup `addInline` improvements (#1798) This makes some minor improvements to the new `addInline` function of markup. --- components/prism-markup.js | 30 +++++++++---------- components/prism-markup.min.js | 2 +- prism.js | 30 +++++++++---------- .../languages/markup!+css/css_inclusion.test | 18 +++++------ .../javascript_inclusion.test | 14 ++++----- 5 files changed, 45 insertions(+), 49 deletions(-) diff --git a/components/prism-markup.js b/components/prism-markup.js index ca365e2786..c288778fd2 100644 --- a/components/prism-markup.js +++ b/components/prism-markup.js @@ -63,7 +63,20 @@ Object.defineProperty(Prism.languages.markup.tag, 'addInlined', { * addInlined('style', 'css'); */ value: function addInlined(tagName, lang) { - var inside = {}; + var includedCdataInside = {}; + includedCdataInside['language-' + lang] = { + pattern: /(^$)/i, + lookbehind: true, + inside: Prism.languages[lang] + }; + includedCdataInside['cdata'] = /^$/i; + + var inside = { + 'included-cdata': { + pattern: //i, + inside: includedCdataInside + } + }; inside['language-' + lang] = { pattern: /[\s\S]+/, inside: Prism.languages[lang] @@ -74,20 +87,7 @@ Object.defineProperty(Prism.languages.markup.tag, 'addInlined', { pattern: RegExp(/(<__[\s\S]*?>)(?:\s*|[\s\S])*?(?=<\/__>)/.source.replace(/__/g, tagName), 'i'), lookbehind: true, greedy: true, - inside: { - 'included-cdata': { - pattern: //i, - inside: { - 'content': { - pattern: /(^$)/i, - lookbehind: true, - inside: inside - }, - 'cdata': /^$/i - } - }, - rest: inside - } + inside: inside }; Prism.languages.insertBefore('markup', 'cdata', def); diff --git a/components/prism-markup.min.js b/components/prism-markup.min.js index 0a72db1221..925bc87b27 100644 --- a/components/prism-markup.min.js +++ b/components/prism-markup.min.js @@ -1 +1 @@ -Prism.languages.markup={comment://,prolog:/<\?[\s\S]+?\?>/,doctype://i,cdata://i,tag:{pattern:/<\/?(?!\d)[^\s>\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/i,greedy:!0,inside:{tag:{pattern:/^<\/?[^\s>\/]+/i,inside:{punctuation:/^<\/?/,namespace:/^[^\s>\/:]+:/}},"attr-value":{pattern:/=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+)/i,inside:{punctuation:[/^=/,{pattern:/^(\s*)["']|["']$/,lookbehind:!0}]}},punctuation:/\/?>/,"attr-name":{pattern:/[^\s>\/]+/,inside:{namespace:/^[^\s>\/:]+:/}}}},entity:/&#?[\da-z]{1,8};/i},Prism.languages.markup.tag.inside["attr-value"].inside.entity=Prism.languages.markup.entity,Prism.hooks.add("wrap",function(a){"entity"===a.type&&(a.attributes.title=a.content.replace(/&/,"&"))}),Object.defineProperty(Prism.languages.markup.tag,"addInlined",{value:function(a,e){var s={};s["language-"+e]={pattern:/[\s\S]+/,inside:Prism.languages[e]};var t={};t[a]={pattern:RegExp("(<__[\\s\\S]*?>)(?:\\s*|[\\s\\S])*?(?=<\\/__>)".replace(/__/g,a),"i"),lookbehind:!0,greedy:!0,inside:{"included-cdata":{pattern://i,inside:{content:{pattern:/(^$)/i,lookbehind:!0,inside:s},cdata:/^$/i}},rest:s}},Prism.languages.insertBefore("markup","cdata",t)}}),Prism.languages.xml=Prism.languages.extend("markup",{}),Prism.languages.html=Prism.languages.markup,Prism.languages.mathml=Prism.languages.markup,Prism.languages.svg=Prism.languages.markup; \ No newline at end of file +Prism.languages.markup={comment://,prolog:/<\?[\s\S]+?\?>/,doctype://i,cdata://i,tag:{pattern:/<\/?(?!\d)[^\s>\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/i,greedy:!0,inside:{tag:{pattern:/^<\/?[^\s>\/]+/i,inside:{punctuation:/^<\/?/,namespace:/^[^\s>\/:]+:/}},"attr-value":{pattern:/=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+)/i,inside:{punctuation:[/^=/,{pattern:/^(\s*)["']|["']$/,lookbehind:!0}]}},punctuation:/\/?>/,"attr-name":{pattern:/[^\s>\/]+/,inside:{namespace:/^[^\s>\/:]+:/}}}},entity:/&#?[\da-z]{1,8};/i},Prism.languages.markup.tag.inside["attr-value"].inside.entity=Prism.languages.markup.entity,Prism.hooks.add("wrap",function(a){"entity"===a.type&&(a.attributes.title=a.content.replace(/&/,"&"))}),Object.defineProperty(Prism.languages.markup.tag,"addInlined",{value:function(a,e){var s={};s["language-"+e]={pattern:/(^$)/i,lookbehind:!0,inside:Prism.languages[e]},s.cdata=/^$/i;var n={"included-cdata":{pattern://i,inside:s}};n["language-"+e]={pattern:/[\s\S]+/,inside:Prism.languages[e]};var i={};i[a]={pattern:RegExp("(<__[\\s\\S]*?>)(?:\\s*|[\\s\\S])*?(?=<\\/__>)".replace(/__/g,a),"i"),lookbehind:!0,greedy:!0,inside:n},Prism.languages.insertBefore("markup","cdata",i)}}),Prism.languages.xml=Prism.languages.extend("markup",{}),Prism.languages.html=Prism.languages.markup,Prism.languages.mathml=Prism.languages.markup,Prism.languages.svg=Prism.languages.markup; \ No newline at end of file diff --git a/prism.js b/prism.js index d96b24990c..78d014a92f 100644 --- a/prism.js +++ b/prism.js @@ -627,7 +627,20 @@ Object.defineProperty(Prism.languages.markup.tag, 'addInlined', { * addInlined('style', 'css'); */ value: function addInlined(tagName, lang) { - var inside = {}; + var includedCdataInside = {}; + includedCdataInside['language-' + lang] = { + pattern: /(^$)/i, + lookbehind: true, + inside: Prism.languages[lang] + }; + includedCdataInside['cdata'] = /^$/i; + + var inside = { + 'included-cdata': { + pattern: //i, + inside: includedCdataInside + } + }; inside['language-' + lang] = { pattern: /[\s\S]+/, inside: Prism.languages[lang] @@ -638,20 +651,7 @@ Object.defineProperty(Prism.languages.markup.tag, 'addInlined', { pattern: RegExp(/(<__[\s\S]*?>)(?:\s*|[\s\S])*?(?=<\/__>)/.source.replace(/__/g, tagName), 'i'), lookbehind: true, greedy: true, - inside: { - 'included-cdata': { - pattern: //i, - inside: { - 'content': { - pattern: /(^$)/i, - lookbehind: true, - inside: inside - }, - 'cdata': /^$/i - } - }, - rest: inside - } + inside: inside }; Prism.languages.insertBefore('markup', 'cdata', def); diff --git a/tests/languages/markup!+css/css_inclusion.test b/tests/languages/markup!+css/css_inclusion.test index b47556716d..69264dbc4e 100644 --- a/tests/languages/markup!+css/css_inclusion.test +++ b/tests/languages/markup!+css/css_inclusion.test @@ -67,16 +67,14 @@ foo { ]], ["included-cdata", [ ["cdata", ""] ]], diff --git a/tests/languages/markup!+javascript/javascript_inclusion.test b/tests/languages/markup!+javascript/javascript_inclusion.test index ab674390a9..098e8c1e61 100644 --- a/tests/languages/markup!+javascript/javascript_inclusion.test +++ b/tests/languages/markup!+javascript/javascript_inclusion.test @@ -88,14 +88,12 @@ let foo = ''; ]], ["included-cdata", [ ["cdata", "'"], - ["punctuation", ";"] - ]] + ["language-javascript", [ + ["keyword", "let"], + " foo ", + ["operator", "="], + ["string", "''"], + ["punctuation", ";"] ]], ["cdata", "]]>"] ]],