SyntaxHighlighter Evolved - Version 3.6.1

Version Description

Download this release

Release Info

Developer merkushin
Plugin Icon wp plugin SyntaxHighlighter Evolved
Version 3.6.1
Comparing to
See all releases

Code changes from version 3.6.0 to 3.6.1

dist/blocks.build.js CHANGED
@@ -1 +1 @@
1
- !function(e){function t(r){if(n[r])return n[r].exports;var o=n[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,t),o.l=!0,o.exports}var n={};t.m=e,t.c=n,t.d=function(e,n,r){t.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:r})},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,"a",n),n},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="",t(t.s=6)}([function(e,t){e.exports=wp.i18n},function(e,t){e.exports=wp.blocks},function(e,t){e.exports=wp.editor},function(e,t){e.exports=wp.components},function(e,t){e.exports=wp.element},function(e,t,n){"use strict";function r(e){return e.replace(/&(?!([a-z0-9]+|#[0-9]+|#x[a-f0-9]+);)/gi,"&amp;")}function o(e){return e.replace(/</g,"&lt;")}function a(e){return o(r(e))}function l(e){return o(e.replace(/&/g,"&amp;"))}t.b=a,t.a=l;n(16)},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(1),o=(n.n(r),n(7));Object(r.registerBlockType)("syntaxhighlighter/code",o.a)},function(e,t,n){"use strict";var r=n(0),o=(n.n(r),n(8)),a=n(13),l=n(17),i=n(20),c=(n.n(i),n(21)),u=(n.n(c),window.syntaxHighlighterData.settings);t.a={title:Object(r.__)("SyntaxHighlighter Code","syntaxhighlighter"),description:Object(r.__)("Adds syntax highlighting to source code (front end only).","syntaxhighlighter"),icon:"editor-code",category:"formatting",keywords:[Object(r.__)("Source","syntaxhighlighter"),Object(r.__)("Program","syntaxhighlighter"),Object(r.__)("Develop","syntaxhighlighter")],attributes:{content:{type:"string",source:"text",selector:"pre"},language:{type:"string",default:u.language.default},lineNumbers:{type:"boolean",default:u.lineNumbers.default},firstLineNumber:{type:"string",default:u.firstLineNumber.default},highlightLines:{type:"string"},wrapLines:{type:"boolean",default:u.wrapLines.default},makeURLsClickable:{type:"boolean",default:u.makeURLsClickable.default},quickCode:{type:"boolean",default:u.quickCode.default}},supports:{html:!1,align:!0},transforms:l.a,edit:o.a,save:a.a}},function(e,t,n){"use strict";function r(e){var t=e.attributes,n=e.setAttributes,r=e.className,c=t.content,u=window.syntaxHighlighterData.settings.tabSize,s=wp.element.createElement("div",{className:r+" wp-block-code"},wp.element.createElement(o.PlainText,{className:"wp-block-syntaxhighlighter__textarea",style:{tabSize:u,MozTabSize:""+u},value:c,onChange:function(e){return n({content:e})},placeholder:Object(a.__)("Tip: you can choose a code language from the block settings.","syntaxhighlighter"),"aria-label":Object(a.__)("SyntaxHighlighter Code","syntaxhighlighter")}));return wp.element.createElement(i.Fragment,null,Object(l.a)({attributes:t,setAttributes:n}),s)}t.a=r;var o=n(2),a=(n.n(o),n(0)),l=(n.n(a),n(9)),i=n(4);n.n(i)},function(e,t,n){"use strict";var r=n(3),o=(n.n(r),n(4)),a=(n.n(o),n(2)),l=(n.n(a),n(0)),i=(n.n(l),n(10));t.a=function(e){var t=e.attributes,n=e.setAttributes,c=[],u=[],s=t.language,p=t.lineNumbers,h=t.firstLineNumber,g=t.highlightLines,f=t.wrapLines,b=t.makeURLsClickable,m=t.quickCode,d=window.syntaxHighlighterData,y=d.settings,w=d.brushes;if(y.language.supported){var v=[];for(var x in w)v.push({label:w[x],value:x});c.push(wp.element.createElement(r.PanelRow,{key:"code-language"},wp.element.createElement(r.SelectControl,{label:Object(l.__)("Code Language","syntaxhighlighter"),value:s,options:v,onChange:function(e){return n({language:e})}}))),u.push(Object(i.a)({attributes:t,setAttributes:n,options:v}))}return y.lineNumbers.supported&&c.push(wp.element.createElement(r.PanelRow,{key:"show-line-numbers"},wp.element.createElement(r.ToggleControl,{label:Object(l.__)("Show Line Numbers","syntaxhighlighter"),checked:p,onChange:function(e){return n({lineNumbers:e})}}))),p&&y.firstLineNumber.supported&&c.push(wp.element.createElement(r.PanelRow,{key:"first-line-number"},wp.element.createElement(r.TextControl,{label:Object(l.__)("First Line Number","syntaxhighlighter"),type:"number",value:h,onChange:function(e){return n({firstLineNumber:e})},min:"1",max:"100000"}))),y.highlightLines.supported&&c.push(wp.element.createElement(r.PanelRow,{key:"highlight-lines"},wp.element.createElement(r.TextControl,{label:Object(l.__)("Highlight Lines","syntaxhighlighter"),value:g,help:Object(l.__)("A comma-separated list of line numbers to highlight. Can also be a range. Example: 1,5,10-20","syntaxhighlighter"),onChange:function(e){return n({highlightLines:e})}}))),y.wrapLines.supported&&c.push(wp.element.createElement(r.PanelRow,{key:"wrap-long-lines"},wp.element.createElement(r.ToggleControl,{label:Object(l.__)("Wrap Long Lines","syntaxhighlighter"),checked:f,onChange:function(e){return n({wrapLines:e})}}))),y.makeURLsClickable.supported&&c.push(wp.element.createElement(r.PanelRow,{key:"make-urls-clickable"},wp.element.createElement(r.ToggleControl,{label:Object(l.__)("Make URLs Clickable","syntaxhighlighter"),checked:b,onChange:function(e){return n({makeURLsClickable:e})}}))),y.quickCode.supported&&c.push(wp.element.createElement(r.PanelRow,{key:"edit-mode"},wp.element.createElement(r.ToggleControl,{label:Object(l.__)("Enable edit mode on double click","syntaxhighlighter"),checked:m,onChange:function(e){return n({quickCode:e})}}))),wp.element.createElement(o.Fragment,null,wp.element.createElement(a.BlockControls,null,wp.element.createElement(r.ToolbarGroup,null,u)),wp.element.createElement(a.InspectorControls,{key:"syntaxHighlighterInspectorControls"},wp.element.createElement(r.PanelBody,{title:Object(l.__)("Settings","syntaxhighlighter")},c)))}},function(e,t,n){"use strict";var r=n(0),o=(n.n(r),n(11));t.a=function(e){var t=e.attributes,n=e.setAttributes,a=e.options,l=t.language;return wp.element.createElement(o.a,{key:"code-language",options:a,optionsLabel:Object(r.__)("Code Language","syntaxhighlighter"),value:l,onChange:function(e){return n({language:e})}})}},function(e,t,n){"use strict";function r(e,t){var n={};for(var r in e)t.indexOf(r)>=0||Object.prototype.hasOwnProperty.call(e,r)&&(n[r]=e[r]);return n}var o=n(12),a=n.n(o),l=n(3),i=(n.n(l),Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e}),c=function(e){var t=e.options,n=e.optionsLabel,o=e.icon,c=e.value,u=e.onChange,s=r(e,["options","optionsLabel","icon","value","onChange"]),p=t.find(function(e){return c===e.value});return wp.element.createElement(l.Dropdown,i({className:"syntaxhighlighter-toolbar-dropdown",popoverProps:{isAlternate:!0,position:"bottom right left",focusOnMount:!0,className:a()("syntaxhighlighter-toolbar-dropdown__popover")},renderToggle:function(e){var t=e.isOpen,n=e.onToggle;return wp.element.createElement(l.Button,{onClick:n,icon:o,"aria-expanded":t,"aria-haspopup":"true",children:p?p.label:""})},renderContent:function(e){var r=e.onClose;return wp.element.createElement(l.NavigableMenu,{role:"menu",stopNavigationEvents:!0},wp.element.createElement(l.MenuGroup,{label:n},t.map(function(e){var t=e.value===p.value;return wp.element.createElement(l.MenuItem,{key:e.value,role:"menuitemradio",isSelected:t,className:a()("syntaxhighlighter-toolbar-dropdown__option",{"is-selected":t}),onClick:function(){u(e.value),r()},children:e.label})})))}},s))};t.a=c},function(e,t,n){var r,o;!function(){"use strict";function n(){for(var e=[],t=0;t<arguments.length;t++){var r=arguments[t];if(r){var o=typeof r;if("string"===o||"number"===o)e.push(r);else if(Array.isArray(r)&&r.length){var l=n.apply(null,r);l&&e.push(l)}else if("object"===o)for(var i in r)a.call(r,i)&&r[i]&&e.push(i)}}return e.join(" ")}var a={}.hasOwnProperty;"undefined"!==typeof e&&e.exports?(n.default=n,e.exports=n):(r=[],void 0!==(o=function(){return n}.apply(t,r))&&(e.exports=o))}()},function(e,t,n){"use strict";function r(e){var t=e.attributes;return wp.element.createElement("pre",null,Object(o.a)(t.content))}t.a=r;var o=n(14)},function(e,t,n){"use strict";function r(e){return Object(a.flow)(l.a,o)(e||"")}function o(e){return e.replace(/^(\s*https?:)\/\/([^\s<>"]+\s*)$/m,"$1&#47;&#47;$2")}t.a=r;var a=n(15),l=(n.n(a),n(5))},function(e,t){e.exports=lodash},function(e,t,n){"use strict";function r(e){return e.replace(/>/g,"&gt;")}t.a=r},function(e,t,n){"use strict";var r=n(1),o=(n.n(r),n(5)),a=n(18),l=n.n(a),i=function(){function e(e,t){var n=[],_n=!0,r=!1,o=void 0;try{for(var a,l=e[Symbol.iterator]();!(_n=(a=l.next()).done)&&(n.push(a.value),!t||n.length!==t);_n=!0);}catch(e){r=!0,o=e}finally{try{!_n&&l.return&&l.return()}finally{if(r)throw o}}return n}return function(t,n){if(Array.isArray(t))return t;if(Symbol.iterator in Object(t))return e(t,n);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}();t.a={from:[{type:"enter",regExp:/^```\w*$/,transform:function(e){var t=e.content,n=void 0===t?"":t,o=n.match(/^```(\w+)/)||[null,null],a=i(o,2),l=a[1],c=l?{language:l}:void 0;return Object(r.createBlock)("syntaxhighlighter/code",c)}},{type:"raw",isMatch:function(e){return"PRE"===e.nodeName&&1===e.children.length&&"CODE"===e.firstChild.nodeName},schema:{pre:{children:{code:{children:{"#text":{}}}}}}},{type:"block",blocks:["core/code"],transform:function(e){var t=e.content;return Object(r.createBlock)("syntaxhighlighter/code",{content:l()(t)})}}],to:[{type:"block",blocks:["core/code"],transform:function(e){var t=e.content;return Object(r.createBlock)("core/code",{content:Object(o.b)(t)})}}]}},function(e,t,n){(function(t){function n(e){if("string"==typeof e)return e;if(o(e))return v?v.call(e):"";var t=e+"";return"0"==t&&1/e==-i?"-0":t}function r(e){return!!e&&"object"==typeof e}function o(e){return"symbol"==typeof e||r(e)&&d.call(e)==c}function a(e){return null==e?"":n(e)}function l(e){return e=a(e),e&&s.test(e)?e.replace(u,b):e}var i=1/0,c="[object Symbol]",u=/&(?:amp|lt|gt|quot|#39|#96);/g,s=RegExp(u.source),p={"&amp;":"&","&lt;":"<","&gt;":">","&quot;":'"',"&#39;":"'","&#96;":"`"},h="object"==typeof t&&t&&t.Object===Object&&t,g="object"==typeof self&&self&&self.Object===Object&&self,f=h||g||Function("return this")(),b=function(e){return function(t){return null==e?void 0:e[t]}}(p),m=Object.prototype,d=m.toString,y=f.Symbol,w=y?y.prototype:void 0,v=w?w.toString:void 0;e.exports=l}).call(t,n(19))},function(e,t){var n;n=function(){return this}();try{n=n||Function("return this")()||(0,eval)("this")}catch(e){"object"===typeof window&&(n=window)}e.exports=n},function(e,t){},function(e,t){}]);
1
+ !function(e){function t(r){if(n[r])return n[r].exports;var o=n[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,t),o.l=!0,o.exports}var n={};t.m=e,t.c=n,t.d=function(e,n,r){t.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:r})},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,"a",n),n},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="",t(t.s=6)}([function(e,t){e.exports=wp.i18n},function(e,t){e.exports=wp.blocks},function(e,t){e.exports=wp.editor},function(e,t){e.exports=wp.components},function(e,t){e.exports=wp.element},function(e,t,n){"use strict";function r(e){return e.replace(/&(?!([a-z0-9]+|#[0-9]+|#x[a-f0-9]+);)/gi,"&amp;")}function o(e){return e.replace(/</g,"&lt;")}function a(e){return o(r(e))}function l(e){return o(e.replace(/&/g,"&amp;"))}t.b=a,t.a=l;n(16)},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(1),o=(n.n(r),n(7));Object(r.registerBlockType)("syntaxhighlighter/code",o.a)},function(e,t,n){"use strict";var r=n(0),o=(n.n(r),n(8)),a=n(13),l=n(17),i=n(20),c=(n.n(i),n(21)),u=(n.n(c),window.syntaxHighlighterData.settings);t.a={title:Object(r.__)("SyntaxHighlighter Code","syntaxhighlighter"),description:Object(r.__)("Adds syntax highlighting to source code (front end only).","syntaxhighlighter"),icon:"editor-code",category:"formatting",keywords:[Object(r.__)("Source","syntaxhighlighter"),Object(r.__)("Program","syntaxhighlighter"),Object(r.__)("Develop","syntaxhighlighter")],attributes:{content:{type:"string",source:"text",selector:"pre"},language:{type:"string",default:u.language.default},lineNumbers:{type:"boolean",default:u.lineNumbers.default},firstLineNumber:{type:"string",default:u.firstLineNumber.default},highlightLines:{type:"string"},wrapLines:{type:"boolean",default:u.wrapLines.default},makeURLsClickable:{type:"boolean",default:u.makeURLsClickable.default},quickCode:{type:"boolean",default:u.quickCode.default}},supports:{html:!1,align:!0},transforms:l.a,edit:o.a,save:a.a}},function(e,t,n){"use strict";function r(e){var t=e.attributes,n=e.setAttributes,r=e.className,c=t.content,u=window.syntaxHighlighterData.settings.tabSize,s=wp.element.createElement("div",{className:r+" wp-block-code"},wp.element.createElement(o.PlainText,{className:"wp-block-syntaxhighlighter__textarea",style:{tabSize:u,MozTabSize:""+u},value:c,onChange:function(e){return n({content:e})},placeholder:Object(a.__)("Tip: you can choose a code language from the block settings.","syntaxhighlighter"),"aria-label":Object(a.__)("SyntaxHighlighter Code","syntaxhighlighter")}));return wp.element.createElement(i.Fragment,null,Object(l.a)({attributes:t,setAttributes:n}),s)}t.a=r;var o=n(2),a=(n.n(o),n(0)),l=(n.n(a),n(9)),i=n(4);n.n(i)},function(e,t,n){"use strict";var r=n(3),o=(n.n(r),n(4)),a=(n.n(o),n(2)),l=(n.n(a),n(0)),i=(n.n(l),n(10));t.a=function(e){var t=e.attributes,n=e.setAttributes,c=[],u=[],s=t.language,p=t.lineNumbers,h=t.firstLineNumber,g=t.highlightLines,f=t.wrapLines,m=t.makeURLsClickable,b=t.quickCode,d=window.syntaxHighlighterData,y=d.settings,w=d.brushes;if(y.language.supported){var v=[];for(var x in w)v.push({label:w[x],value:x});c.push(wp.element.createElement(r.PanelRow,{key:"code-language"},wp.element.createElement(r.SelectControl,{label:Object(l.__)("Code Language","syntaxhighlighter"),value:s,options:v,onChange:function(e){return n({language:e})}}))),u.push(Object(i.a)({attributes:t,setAttributes:n,options:v}))}return y.lineNumbers.supported&&c.push(wp.element.createElement(r.PanelRow,{key:"show-line-numbers"},wp.element.createElement(r.ToggleControl,{label:Object(l.__)("Show Line Numbers","syntaxhighlighter"),checked:p,onChange:function(e){return n({lineNumbers:e})}}))),p&&y.firstLineNumber.supported&&c.push(wp.element.createElement(r.PanelRow,{key:"first-line-number"},wp.element.createElement(r.TextControl,{label:Object(l.__)("First Line Number","syntaxhighlighter"),type:"number",value:h,onChange:function(e){return n({firstLineNumber:e})},min:"1",max:"100000"}))),y.highlightLines.supported&&c.push(wp.element.createElement(r.PanelRow,{key:"highlight-lines"},wp.element.createElement(r.TextControl,{label:Object(l.__)("Highlight Lines","syntaxhighlighter"),value:g,help:Object(l.__)("A comma-separated list of line numbers to highlight. Can also be a range. Example: 1,5,10-20","syntaxhighlighter"),onChange:function(e){return n({highlightLines:e})}}))),y.wrapLines.supported&&c.push(wp.element.createElement(r.PanelRow,{key:"wrap-long-lines"},wp.element.createElement(r.ToggleControl,{label:Object(l.__)("Wrap Long Lines","syntaxhighlighter"),checked:f,onChange:function(e){return n({wrapLines:e})}}))),y.makeURLsClickable.supported&&c.push(wp.element.createElement(r.PanelRow,{key:"make-urls-clickable"},wp.element.createElement(r.ToggleControl,{label:Object(l.__)("Make URLs Clickable","syntaxhighlighter"),checked:m,onChange:function(e){return n({makeURLsClickable:e})}}))),y.quickCode.supported&&c.push(wp.element.createElement(r.PanelRow,{key:"edit-mode"},wp.element.createElement(r.ToggleControl,{label:Object(l.__)("Enable edit mode on double click","syntaxhighlighter"),checked:b,onChange:function(e){return n({quickCode:e})}}))),wp.element.createElement(o.Fragment,null,wp.element.createElement(a.BlockControls,null,wp.element.createElement(r.ToolbarGroup,null,u)),wp.element.createElement(a.InspectorControls,{key:"syntaxHighlighterInspectorControls"},wp.element.createElement(r.PanelBody,{title:Object(l.__)("Settings","syntaxhighlighter")},c)))}},function(e,t,n){"use strict";var r=n(0),o=(n.n(r),n(11));t.a=function(e){var t=e.attributes,n=e.setAttributes,a=e.options,l=t.language;return wp.element.createElement(o.a,{key:"code-language",options:a,optionsLabel:Object(r.__)("Code Language","syntaxhighlighter"),value:l,onChange:function(e){return n({language:e})}})}},function(e,t,n){"use strict";function r(e,t){var n={};for(var r in e)t.indexOf(r)>=0||Object.prototype.hasOwnProperty.call(e,r)&&(n[r]=e[r]);return n}var o=n(12),a=n.n(o),l=n(3),i=(n.n(l),Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e}),c=function(e){var t=e.options,n=e.optionsLabel,o=e.icon,c=e.value,u=e.onChange,s=r(e,["options","optionsLabel","icon","value","onChange"]),p=t.find(function(e){return c===e.value});return wp.element.createElement(l.Dropdown,i({className:"syntaxhighlighter-toolbar-dropdown",popoverProps:{isAlternate:!0,position:"bottom right left",focusOnMount:!0,className:a()("syntaxhighlighter-toolbar-dropdown__popover")},renderToggle:function(e){var t=e.isOpen,n=e.onToggle;return wp.element.createElement(l.Button,{onClick:n,icon:o,"aria-expanded":t,"aria-haspopup":"true",children:p?p.label:""})},renderContent:function(e){var r=e.onClose;return wp.element.createElement(l.NavigableMenu,{role:"menu",stopNavigationEvents:!0},wp.element.createElement(l.MenuGroup,{label:n},t.map(function(e){var t=e.value===p.value;return wp.element.createElement(l.MenuItem,{key:e.value,role:"menuitemradio",isSelected:t,className:a()("syntaxhighlighter-toolbar-dropdown__option",{"is-selected":t}),onClick:function(){u(e.value),r()},children:e.label})})))}},s))};t.a=c},function(e,t,n){var r,o;!function(){"use strict";function n(){for(var e=[],t=0;t<arguments.length;t++){var r=arguments[t];if(r){var o=typeof r;if("string"===o||"number"===o)e.push(r);else if(Array.isArray(r)&&r.length){var l=n.apply(null,r);l&&e.push(l)}else if("object"===o)for(var i in r)a.call(r,i)&&r[i]&&e.push(i)}}return e.join(" ")}var a={}.hasOwnProperty;"undefined"!==typeof e&&e.exports?(n.default=n,e.exports=n):(r=[],void 0!==(o=function(){return n}.apply(t,r))&&(e.exports=o))}()},function(e,t,n){"use strict";function r(e){var t=e.attributes;return wp.element.createElement("pre",null,Object(o.a)(t.content))}t.a=r;var o=n(14)},function(e,t,n){"use strict";function r(e){return Object(a.flow)(l.a,o)(e||"")}function o(e){return e.replace(/^(\s*https?:)\/\/([^\s<>"]+\s*)$/m,"$1&#47;&#47;$2")}t.a=r;var a=n(15),l=(n.n(a),n(5))},function(e,t){e.exports=lodash},function(e,t,n){"use strict";function r(e){return e.replace(/>/g,"&gt;")}t.a=r},function(e,t,n){"use strict";var r=n(1),o=(n.n(r),n(5)),a=n(18),l=n.n(a),i=function(){function e(e,t){var n=[],_n=!0,r=!1,o=void 0;try{for(var a,l=e[Symbol.iterator]();!(_n=(a=l.next()).done)&&(n.push(a.value),!t||n.length!==t);_n=!0);}catch(e){r=!0,o=e}finally{try{!_n&&l.return&&l.return()}finally{if(r)throw o}}return n}return function(t,n){if(Array.isArray(t))return t;if(Symbol.iterator in Object(t))return e(t,n);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}();t.a={from:[{type:"enter",regExp:/^```\w*$/,transform:function(e){var t=e.content,n=void 0===t?"":t,o=n.match(/^```(\w+)/)||[null,null],a=i(o,2),l=a[1],c=l?{language:l}:void 0;return Object(r.createBlock)("syntaxhighlighter/code",c)}},{type:"raw",isMatch:function(e){return"PRE"===e.nodeName&&1===e.children.length&&"CODE"===e.firstChild.nodeName},transform:function(e){var t=e.firstChild.textContent,n=t.match(/^```(\w+)?\n/)||[null,null],o=i(n,2),a=o[0],l=o[1],c=l?{language:l}:{};return c.content=a?t.replace(a,"").replace(/```\s*$/,""):t,Object(r.createBlock)("syntaxhighlighter/code",c)},schema:{pre:{children:{code:{children:{"#text":{}}}}}}},{type:"block",blocks:["core/code"],transform:function(e){var t=e.content;return Object(r.createBlock)("syntaxhighlighter/code",{content:l()(t)})}}],to:[{type:"block",blocks:["core/code"],transform:function(e){var t=e.content;return Object(r.createBlock)("core/code",{content:Object(o.b)(t)})}}]}},function(e,t,n){(function(t){function n(e){if("string"==typeof e)return e;if(o(e))return v?v.call(e):"";var t=e+"";return"0"==t&&1/e==-i?"-0":t}function r(e){return!!e&&"object"==typeof e}function o(e){return"symbol"==typeof e||r(e)&&d.call(e)==c}function a(e){return null==e?"":n(e)}function l(e){return e=a(e),e&&s.test(e)?e.replace(u,m):e}var i=1/0,c="[object Symbol]",u=/&(?:amp|lt|gt|quot|#39|#96);/g,s=RegExp(u.source),p={"&amp;":"&","&lt;":"<","&gt;":">","&quot;":'"',"&#39;":"'","&#96;":"`"},h="object"==typeof t&&t&&t.Object===Object&&t,g="object"==typeof self&&self&&self.Object===Object&&self,f=h||g||Function("return this")(),m=function(e){return function(t){return null==e?void 0:e[t]}}(p),b=Object.prototype,d=b.toString,y=f.Symbol,w=y?y.prototype:void 0,v=w?w.toString:void 0;e.exports=l}).call(t,n(19))},function(e,t){var n;n=function(){return this}();try{n=n||Function("return this")()||(0,eval)("this")}catch(e){"object"===typeof window&&(n=window)}e.exports=n},function(e,t){},function(e,t){}]);
readme.txt CHANGED
@@ -2,9 +2,9 @@
2
  Contributors: Viper007Bond, automattic, donncha
3
  Donate link: https://alex.blog/2019/03/13/in-memory-of-alex-donation-link-update/
4
  Tags: code, source, sourcecode, php, syntax highlighting, syntax, highlight, highlighting, highlighter, WordPress.com
5
- Requires at least: 5.2
6
- Tested up to: 5.7
7
- Stable tag: 3.6.0
8
 
9
  Easily post syntax-highlighted code to your site without having to modify the code at all. As seen on WordPress.com.
10
 
@@ -40,6 +40,15 @@ Try excluding this plugin's Javascript from any performance optimizations your s
40
 
41
  == ChangeLog ==
42
 
 
 
 
 
 
 
 
 
 
43
  = Version 3.6.0 =
44
 
45
  * New: Add ```language shortcut. #180
2
  Contributors: Viper007Bond, automattic, donncha
3
  Donate link: https://alex.blog/2019/03/13/in-memory-of-alex-donation-link-update/
4
  Tags: code, source, sourcecode, php, syntax highlighting, syntax, highlight, highlighting, highlighter, WordPress.com
5
+ Requires at least: 5.6
6
+ Tested up to: 5.8
7
+ Stable tag: 3.6.1
8
 
9
  Easily post syntax-highlighted code to your site without having to modify the code at all. As seen on WordPress.com.
10
 
40
 
41
  == ChangeLog ==
42
 
43
+ = Version 3.6.1 =
44
+
45
+ * New: Set code block language when pasting into editor. #215
46
+ * New: Add syntax highlight for Haskell. #210
47
+ * New: Display the list of available brushes. #221
48
+ * Fix: Line alignment for bootstrap themes. #222
49
+ * Fix: Add space around code. #223
50
+ * Fix: XML brush - use the last occurrence of the tag. #225
51
+
52
  = Version 3.6.0 =
53
 
54
  * New: Add ```language shortcut. #180
syntaxhighlighter.php CHANGED
@@ -4,33 +4,33 @@
4
 
5
  Plugin Name: SyntaxHighlighter Evolved
6
  Plugin URI: https://alex.blog/wordpress-plugins/syntaxhighlighter/
7
- Version: 3.6.0
8
  Description: Easily post syntax-highlighted code to your site without having to modify the code at all. Uses Alex Gorbatchev's <a href="http://alexgorbatchev.com/SyntaxHighlighter/">SyntaxHighlighter</a>. Includes a new editor block.
9
  Author: Alex Mills (Viper007Bond)
10
  Author URI: https://alex.blog/
11
  Text Domain: syntaxhighlighter
12
  License: GPL2
13
  License URI: https://www.gnu.org/licenses/gpl-2.0.html
14
- Requires at least: 5.2
15
- Tested up to: 5.7
16
  Requires PHP: 7.0
17
 
18
  **************************************************************************/
19
 
20
  class SyntaxHighlighter {
21
  // All of these variables are private. Filters are provided for things that can be modified.
22
- var $pluginver = '3.6.0'; // Plugin version
23
- var $agshver = false; // Alex Gorbatchev's SyntaxHighlighter version (dynamically set below due to v2 vs v3)
24
- var $shfolder = false; // Controls what subfolder to load SyntaxHighlighter from (v2 or v3)
25
- var $settings = array(); // Contains the user's settings
26
- var $defaultsettings = array(); // Contains the default settings
27
- var $brushes = array(); // Array of aliases => brushes
28
- var $shortcodes = array(); // Array of shortcodes to use
29
- var $themes = array(); // Array of themes
30
- var $usedbrushes = array(); // Stores used brushes so we know what to output
31
- var $encoded = false; // Used to mark that a character encode took place
32
- var $codeformat = false; // If set, SyntaxHighlighter::get_code_format() will return this value
33
- var $content_save_pre_ran = false; // It's possible for the "content_save_pre" filter to run multiple times, so keep track
34
 
35
  // Initalize the plugin by registering the hooks
36
  function __construct() {
@@ -123,52 +123,55 @@ class SyntaxHighlighter {
123
  $this->agshver = '3.0.9b';
124
  }
125
 
 
126
  // Register brush scripts
127
- wp_register_script( 'syntaxhighlighter-core', plugins_url( $this->shfolder . '/scripts/shCore.js', __FILE__ ), array(), $this->agshver );
128
- wp_register_script( 'syntaxhighlighter-brush-as3', plugins_url( $this->shfolder . '/scripts/shBrushAS3.js', __FILE__ ), array('syntaxhighlighter-core'), $this->agshver );
129
- wp_register_script( 'syntaxhighlighter-brush-arduino', plugins_url( $this->shfolder . '/scripts/shBrushArduino.js', __FILE__ ), array('syntaxhighlighter-core'), $this->agshver );
130
- wp_register_script( 'syntaxhighlighter-brush-bash', plugins_url( $this->shfolder . '/scripts/shBrushBash.js', __FILE__ ), array('syntaxhighlighter-core'), $this->agshver );
131
- wp_register_script( 'syntaxhighlighter-brush-coldfusion', plugins_url( $this->shfolder . '/scripts/shBrushColdFusion.js', __FILE__ ), array('syntaxhighlighter-core'), $this->agshver );
132
- wp_register_script( 'syntaxhighlighter-brush-cpp', plugins_url( $this->shfolder . '/scripts/shBrushCpp.js', __FILE__ ), array('syntaxhighlighter-core'), $this->agshver );
133
- wp_register_script( 'syntaxhighlighter-brush-csharp', plugins_url( $this->shfolder . '/scripts/shBrushCSharp.js', __FILE__ ), array('syntaxhighlighter-core'), $this->agshver );
134
- wp_register_script( 'syntaxhighlighter-brush-css', plugins_url( $this->shfolder . '/scripts/shBrushCss.js', __FILE__ ), array('syntaxhighlighter-core'), $this->agshver );
135
- wp_register_script( 'syntaxhighlighter-brush-delphi', plugins_url( $this->shfolder . '/scripts/shBrushDelphi.js', __FILE__ ), array('syntaxhighlighter-core'), $this->agshver );
136
- wp_register_script( 'syntaxhighlighter-brush-diff', plugins_url( $this->shfolder . '/scripts/shBrushDiff.js', __FILE__ ), array('syntaxhighlighter-core'), $this->agshver );
137
- wp_register_script( 'syntaxhighlighter-brush-erlang', plugins_url( $this->shfolder . '/scripts/shBrushErlang.js', __FILE__ ), array('syntaxhighlighter-core'), $this->agshver );
138
- wp_register_script( 'syntaxhighlighter-brush-groovy', plugins_url( $this->shfolder . '/scripts/shBrushGroovy.js', __FILE__ ), array('syntaxhighlighter-core'), $this->agshver );
139
- wp_register_script( 'syntaxhighlighter-brush-java', plugins_url( $this->shfolder . '/scripts/shBrushJava.js', __FILE__ ), array('syntaxhighlighter-core'), $this->agshver );
140
- wp_register_script( 'syntaxhighlighter-brush-javafx', plugins_url( $this->shfolder . '/scripts/shBrushJavaFX.js', __FILE__ ), array('syntaxhighlighter-core'), $this->agshver );
141
- wp_register_script( 'syntaxhighlighter-brush-jscript', plugins_url( $this->shfolder . '/scripts/shBrushJScript.js', __FILE__ ), array('syntaxhighlighter-core'), $this->agshver );
142
- wp_register_script( 'syntaxhighlighter-brush-perl', plugins_url( $this->shfolder . '/scripts/shBrushPerl.js', __FILE__ ), array('syntaxhighlighter-core'), $this->agshver );
143
- wp_register_script( 'syntaxhighlighter-brush-php', plugins_url( $this->shfolder . '/scripts/shBrushPhp.js', __FILE__ ), array('syntaxhighlighter-core'), $this->agshver );
144
- wp_register_script( 'syntaxhighlighter-brush-plain', plugins_url( $this->shfolder . '/scripts/shBrushPlain.js', __FILE__ ), array('syntaxhighlighter-core'), $this->agshver );
145
- wp_register_script( 'syntaxhighlighter-brush-powershell', plugins_url( $this->shfolder . '/scripts/shBrushPowerShell.js', __FILE__ ), array('syntaxhighlighter-core'), $this->agshver );
146
- wp_register_script( 'syntaxhighlighter-brush-python', plugins_url( $this->shfolder . '/scripts/shBrushPython.js', __FILE__ ), array('syntaxhighlighter-core'), $this->agshver );
147
- wp_register_script( 'syntaxhighlighter-brush-ruby', plugins_url( $this->shfolder . '/scripts/shBrushRuby.js', __FILE__ ), array('syntaxhighlighter-core'), $this->agshver );
148
- wp_register_script( 'syntaxhighlighter-brush-scala', plugins_url( $this->shfolder . '/scripts/shBrushScala.js', __FILE__ ), array('syntaxhighlighter-core'), $this->agshver );
149
- wp_register_script( 'syntaxhighlighter-brush-sql', plugins_url( $this->shfolder . '/scripts/shBrushSql.js', __FILE__ ), array('syntaxhighlighter-core'), $this->agshver );
150
- wp_register_script( 'syntaxhighlighter-brush-vb', plugins_url( $this->shfolder . '/scripts/shBrushVb.js', __FILE__ ), array('syntaxhighlighter-core'), $this->agshver );
151
- wp_register_script( 'syntaxhighlighter-brush-xml', plugins_url( $this->shfolder . '/scripts/shBrushXml.js', __FILE__ ), array('syntaxhighlighter-core'), $this->agshver );
152
- wp_register_script( 'syntaxhighlighter-brush-yaml', plugins_url( $this->shfolder . '/scripts/shBrushYaml.js', __FILE__ ), array('syntaxhighlighter-core'), $this->agshver );
 
 
153
 
154
  // Register some popular third-party brushes
155
- wp_register_script( 'syntaxhighlighter-brush-clojure', plugins_url( 'third-party-brushes/shBrushClojure.js', __FILE__ ), array('syntaxhighlighter-core'), '20090602' );
156
- wp_register_script( 'syntaxhighlighter-brush-fsharp', plugins_url( 'third-party-brushes/shBrushFSharp.js', __FILE__ ), array('syntaxhighlighter-core'), '20091003' );
157
- wp_register_script( 'syntaxhighlighter-brush-latex', plugins_url( 'third-party-brushes/shBrushLatex.js', __FILE__ ), array('syntaxhighlighter-core'), '20090613' );
158
- wp_register_script( 'syntaxhighlighter-brush-matlabkey', plugins_url( 'third-party-brushes/shBrushMatlabKey.js', __FILE__ ), array('syntaxhighlighter-core'), '20091209' );
159
- wp_register_script( 'syntaxhighlighter-brush-objc', plugins_url( 'third-party-brushes/shBrushObjC.js', __FILE__ ), array('syntaxhighlighter-core'), '20091207' );
160
- wp_register_script( 'syntaxhighlighter-brush-r', plugins_url( 'third-party-brushes/shBrushR.js', __FILE__ ), array('syntaxhighlighter-core'), '20100919' );
161
 
162
  // Register theme stylesheets
163
- wp_register_style( 'syntaxhighlighter-core', plugins_url( $this->shfolder . '/styles/shCore.css', __FILE__ ), array(), $this->agshver );
164
- wp_register_style( 'syntaxhighlighter-theme-default', plugins_url( $this->shfolder . '/styles/shThemeDefault.css', __FILE__ ), array('syntaxhighlighter-core'), $this->agshver );
165
- wp_register_style( 'syntaxhighlighter-theme-django', plugins_url( $this->shfolder . '/styles/shThemeDjango.css', __FILE__ ), array('syntaxhighlighter-core'), $this->agshver );
166
- wp_register_style( 'syntaxhighlighter-theme-eclipse', plugins_url( $this->shfolder . '/styles/shThemeEclipse.css', __FILE__ ), array('syntaxhighlighter-core'), $this->agshver );
167
- wp_register_style( 'syntaxhighlighter-theme-emacs', plugins_url( $this->shfolder . '/styles/shThemeEmacs.css', __FILE__ ), array('syntaxhighlighter-core'), $this->agshver );
168
- wp_register_style( 'syntaxhighlighter-theme-fadetogrey', plugins_url( $this->shfolder . '/styles/shThemeFadeToGrey.css', __FILE__ ), array('syntaxhighlighter-core'), $this->agshver );
169
- wp_register_style( 'syntaxhighlighter-theme-midnight', plugins_url( $this->shfolder . '/styles/shThemeMidnight.css', __FILE__ ), array('syntaxhighlighter-core'), $this->agshver );
170
- wp_register_style( 'syntaxhighlighter-theme-rdark', plugins_url( $this->shfolder . '/styles/shThemeRDark.css', __FILE__ ), array('syntaxhighlighter-core'), $this->agshver );
171
-
172
 
173
  // Create list of brush aliases and map them to their real brushes
174
  // The key is the language alias
@@ -196,7 +199,10 @@ class SyntaxHighlighter {
196
  'erl' => 'erlang',
197
  'erlang' => 'erlang',
198
  'fsharp' => 'fsharp',
 
 
199
  'groovy' => 'groovy',
 
200
  'java' => 'java',
201
  'jfx' => 'javafx',
202
  'javafx' => 'javafx',
@@ -236,6 +242,7 @@ class SyntaxHighlighter {
236
  'yml' => 'yaml',
237
  ) );
238
 
 
239
  $this->brush_names = (array) apply_filters( 'syntaxhighlighter_brush_names', array(
240
  'as3' => __( 'ActionScript', 'syntaxhighlighter' ),
241
  'arduino' => __( 'Arduino', 'syntaxhighlighter' ),
@@ -249,7 +256,9 @@ class SyntaxHighlighter {
249
  'diff' => __( 'diff / patch', 'syntaxhighlighter' ),
250
  'erlang' => __( 'Erlang', 'syntaxhighlighter' ),
251
  'fsharp' => __( 'F#', 'syntaxhighlighter' ),
 
252
  'groovy' => __( 'Groovy', 'syntaxhighlighter' ),
 
253
  'java' => __( 'Java', 'syntaxhighlighter' ),
254
  'javafx' => __( 'JavaFX', 'syntaxhighlighter' ),
255
  'jscript' => __( 'JavaScript', 'syntaxhighlighter' ),
@@ -269,6 +278,7 @@ class SyntaxHighlighter {
269
  'xml' => __( 'HTML / XHTML / XML / XSLT', 'syntaxhighlighter' ),
270
  'yaml' => __( 'YAML', 'syntaxhighlighter' ),
271
  ) );
 
272
 
273
  // Add any custom brushes that aren't making use of the newer "syntaxhighlighter_brush_names" filter.
274
  foreach ( $this->brushes as $slug => $language ) {
@@ -524,9 +534,9 @@ class SyntaxHighlighter {
524
  'makeURLsClickable' => 'autolinks',
525
  'quickCode' => 'quickcode',
526
  );
527
- $classNames = ! empty( $attributes['className'] ) ? [ esc_attr( $attributes['className'] ) ] : [];
528
- if( ! empty( $attributes['align'] ) ) {
529
- $classNames[] = 'align' . esc_attr( $attributes['align'] );
530
  }
531
 
532
  foreach ( $remaps as $from => $to ) {
@@ -545,11 +555,11 @@ class SyntaxHighlighter {
545
 
546
  // Undo escaping done by WordPress
547
  $code = htmlspecialchars_decode( $code );
548
- $code = preg_replace( '/^(\s*https?:)&#0?47;&#0?47;([^\s<>"]+\s*)$/m', '$1//$2', $code );
549
 
550
  $code = $this->shortcode_callback( $attributes, $code, 'code' );
551
 
552
- return '<div class="wp-block-syntaxhighlighter-code ' . esc_attr( join(' ', $classNames ) ) . '">' . $code . '</div>';
553
  }
554
 
555
  // Add the custom TinyMCE plugin which wraps plugin shortcodes in <pre> in TinyMCE
@@ -579,11 +589,13 @@ class SyntaxHighlighter {
579
  function settings_link( $links, $file ) {
580
  static $this_plugin;
581
 
582
- if( empty($this_plugin) )
583
  $this_plugin = plugin_basename(__FILE__);
 
584
 
585
- if ( $file == $this_plugin )
586
  $links[] = '<a href="' . admin_url( 'options-general.php?page=syntaxhighlighter' ) . '">' . __( 'Settings', 'syntaxhighlighter' ) . '</a>';
 
587
 
588
  return $links;
589
  }
@@ -783,7 +795,7 @@ class SyntaxHighlighter {
783
  // The callback function for SyntaxHighlighter::encode_shortcode_contents()
784
  function encode_shortcode_contents_callback( $atts, $code = '', $tag = false ) {
785
  $this->encoded = true;
786
- $code = str_replace( array_keys($this->specialchars), array_values($this->specialchars), htmlspecialchars( $code ) );
787
  return '[' . $tag . $this->atts2string( $atts ) . "]{$code}[/$tag]";
788
  }
789
 
@@ -792,7 +804,7 @@ class SyntaxHighlighter {
792
  // Shortcode attribute values need to not be quoted with TinyMCE disabled for some reason (weird bug)
793
  function decode_shortcode_contents_callback( $atts, $code = '', $tag = false ) {
794
  $quotes = ( user_can_richedit() ) ? true : false;
795
- $code = str_replace( array_values($this->specialchars), array_keys($this->specialchars), htmlspecialchars_decode( $code ) );
796
  return '[' . $tag . $this->atts2string( $atts, $quotes ) . "]{$code}[/$tag]";
797
  }
798
 
@@ -836,7 +848,7 @@ class SyntaxHighlighter {
836
 
837
  // Run SyntaxHighlighter::decode_shortcode_contents_callback() on the contents of the text widget form
838
  function widget_text_form( $instance, $widgetclass ) {
839
- if ( 'text' == $widgetclass->id_base && !empty($instance['syntaxhighlighter_encoded']) ) {
840
  $instance['text'] = $this->shortcode_hack( $instance['text'], array( $this, 'decode_shortcode_contents_callback' ) );
841
  }
842
 
@@ -846,7 +858,7 @@ class SyntaxHighlighter {
846
 
847
  // Run SyntaxHighlighter::parse_shortcodes() on the contents of a text widget
848
  function widget_text_output( $content, $instance = false ) {
849
- $this->codeformat = ( false === $instance || empty($instance['syntaxhighlighter_encoded']) ) ? 1 : 2;
850
  $content = $this->parse_shortcodes( $content );
851
  $this->codeformat = false;
852
 
@@ -867,16 +879,18 @@ class SyntaxHighlighter {
867
  // This function determines what version of SyntaxHighlighter was used when the post was written
868
  // This is because the code was stored differently for different versions of SyntaxHighlighter
869
  function get_code_format( $post ) {
870
- if ( false !== $this->codeformat )
871
  return $this->codeformat;
 
872
 
873
- if ( empty($post) )
874
  $post = new stdClass();
 
875
 
876
  if ( null !== $version = apply_filters( 'syntaxhighlighter_pre_getcodeformat', null, $post ) )
877
  return $version;
878
 
879
- $version = ( empty($post->ID) || get_post_meta( $post->ID, '_syntaxhighlighter_encoded', true ) || get_post_meta( $post->ID, 'syntaxhighlighter_encoded', true ) ) ? 2 : 1;
880
 
881
  return apply_filters( 'syntaxhighlighter_getcodeformat', $version, $post );
882
  }
@@ -894,17 +908,19 @@ class SyntaxHighlighter {
894
 
895
  // Transforms an attributes array into a 'key="value"' format (i.e. reverses the process)
896
  function atts2string( $atts, $quotes = true ) {
897
- if ( empty($atts) )
898
  return '';
 
899
 
900
  $atts = $this->attributefix( $atts );
901
 
902
  // Re-map [code="php"] style tags
903
- if ( isset($atts[0]) ) {
904
- if ( empty($atts['language']) )
905
  $atts['language'] = $atts[0];
 
906
 
907
- unset($atts[0]);
908
  }
909
 
910
  $strings = array();
@@ -925,11 +941,13 @@ class SyntaxHighlighter {
925
  function maybe_output_scripts() {
926
  global $wp_styles;
927
 
928
- if ( 1 == $this->settings['loadallbrushes'] )
929
  $this->usedbrushes = array_flip( array_values( $this->brushes ) );
 
930
 
931
- if ( empty($this->usedbrushes) )
932
  return;
 
933
 
934
  $scripts = array();
935
  foreach ( $this->usedbrushes as $brush => $unused )
@@ -943,22 +961,24 @@ class SyntaxHighlighter {
943
  echo " var corecss = document.createElement('link');\n";
944
  echo " var themecss = document.createElement('link');\n";
945
 
946
- if ( !is_a($wp_styles, 'WP_Styles') )
947
  $wp_styles = new WP_Styles();
 
948
 
949
  $needcore = false;
950
  if ( 'none' == $this->settings['theme'] ) {
951
  $needcore = true;
952
  } else {
953
- $theme = ( !empty($this->themes[$this->settings['theme']]) ) ? strtolower($this->settings['theme']) : $this->defaultsettings['theme'];
954
  $theme = 'syntaxhighlighter-theme-' . $theme;
955
 
956
  // See if the requested theme has been registered
957
- if ( !empty($wp_styles) && !empty($wp_styles->registered) && !empty($wp_styles->registered[$theme]) && !empty($wp_styles->registered[$theme]->src) ) {
958
 
959
  // Users can register their own stylesheet and may opt to not load the core stylesheet if they wish for some reason
960
- if ( is_array($wp_styles->registered[$theme]->deps) && in_array( 'syntaxhighlighter-core', $wp_styles->registered[$theme]->deps ) )
961
  $needcore = true;
 
962
  }
963
 
964
  // Otherwise use the default theme
@@ -968,7 +988,7 @@ class SyntaxHighlighter {
968
  }
969
  }
970
 
971
- if ( $needcore && !empty($wp_styles) && !empty($wp_styles->registered) && !empty($wp_styles->registered['syntaxhighlighter-core']) && !empty($wp_styles->registered['syntaxhighlighter-core']->src) ) :
972
  $corecssurl = add_query_arg( 'ver', $this->agshver, $wp_styles->registered['syntaxhighlighter-core']->src );
973
  $corecssurl = apply_filters( 'syntaxhighlighter_csscoreurl', $corecssurl );
974
  ?>
@@ -986,7 +1006,7 @@ class SyntaxHighlighter {
986
  endif; // Endif $needcore
987
 
988
  if ( 'none' != $this->settings['theme'] ) : ?>
989
- var themecssurl = "<?php echo esc_js( apply_filters( 'syntaxhighlighter_cssthemeurl', add_query_arg( 'ver', $this->agshver, $wp_styles->registered[$theme]->src ) ) ); ?>";
990
  if ( themecss.setAttribute ) {
991
  themecss.setAttribute( "rel", "stylesheet" );
992
  themecss.setAttribute( "type", "text/css" );
@@ -1023,28 +1043,35 @@ class SyntaxHighlighter {
1023
  break;
1024
  }
1025
 
1026
- if ( 1 != $this->settings['autolinks'] )
1027
  echo " SyntaxHighlighter.defaults['auto-links'] = false;\n";
 
1028
 
1029
- if ( !empty($this->settings['classname']) )
1030
  echo " SyntaxHighlighter.defaults['class-name'] = '" . $this->js_escape_singlequotes( $this->settings['classname'] ) . "';\n";
 
1031
 
1032
- if ( 1 == $this->settings['collapse'] )
1033
  echo " SyntaxHighlighter.defaults['collapse'] = true;\n";
 
1034
 
1035
- if ( 1 != $this->settings['firstline'] )
1036
  echo " SyntaxHighlighter.defaults['first-line'] = " . $this->settings['firstline'] . ";\n";
 
1037
 
1038
- if ( 1 != $this->settings['gutter'] )
1039
  echo " SyntaxHighlighter.defaults['gutter'] = false;\n";
 
1040
 
1041
  /*
1042
- if ( 1 == $this->settings['htmlscript'] )
1043
  echo " SyntaxHighlighter.defaults['html-script'] = true;\n";
 
1044
  */
1045
 
1046
- if ( 1 == $this->settings['light'] )
1047
  echo " SyntaxHighlighter.defaults['light'] = true;\n";
 
1048
 
1049
  echo " SyntaxHighlighter.defaults['pad-line-numbers'] = ";
1050
  switch ( $this->settings['padlinenumbers'] ) {
@@ -1069,11 +1096,13 @@ class SyntaxHighlighter {
1069
  echo " SyntaxHighlighter.defaults['toolbar'] = false;\n";
1070
 
1071
  // 2.x only for now
1072
- if ( 1 != $this->settings['wraplines'] )
1073
  echo " SyntaxHighlighter.defaults['wrap-lines'] = false;\n";
 
1074
 
1075
- if ( 1 != $this->settings['quickcode'] )
1076
  echo " SyntaxHighlighter.defaults['quick-code'] = false;\n";
 
1077
 
1078
  ?> SyntaxHighlighter.all();
1079
 
@@ -1095,16 +1124,18 @@ class SyntaxHighlighter {
1095
 
1096
  // No-name attribute fixing
1097
  function attributefix( $atts = array() ) {
1098
- if ( empty($atts[0]) )
1099
  return $atts;
 
1100
 
1101
- // Quoted value
1102
- if ( 0 !== preg_match( '#=("|\')(.*?)\1#', $atts[0], $match ) )
1103
  $atts[0] = $match[2];
1104
 
1105
- // Unquoted value
1106
- elseif ( '=' == substr( $atts[0], 0, 1 ) )
1107
  $atts[0] = substr( $atts[0], 1 );
 
1108
 
1109
  return $atts;
1110
  }
@@ -1114,20 +1145,22 @@ class SyntaxHighlighter {
1114
  function shortcode_callback( $atts, $code = '', $tag = false ) {
1115
  global $post;
1116
 
1117
- if ( false === $tag || empty($code) )
1118
  return $code;
 
1119
 
1120
  // Avoid PHP notices
1121
- if ( !isset($post) )
1122
  $post = null;
 
1123
 
1124
  $code = apply_filters( 'syntaxhighlighter_precode', $code, $atts, $tag );
1125
 
1126
  // Error fixing for [tag="language"]
1127
- if ( isset($atts[0]) ) {
1128
  $atts = $this->attributefix( $atts );
1129
  $atts['language'] = $atts[0];
1130
- unset($atts[0]);
1131
  }
1132
 
1133
  // Default out all of the available parameters to "false" (easy way to check if they're set or not)
@@ -1155,7 +1188,7 @@ class SyntaxHighlighter {
1155
  ), $atts ) );
1156
 
1157
  // Check for language shortcode tag such as [php]code[/php]
1158
- if ( isset($this->brushes[$tag]) ) {
1159
  $lang = $tag;
1160
  }
1161
 
@@ -1179,15 +1212,16 @@ class SyntaxHighlighter {
1179
  $lang = strtolower( $lang );
1180
 
1181
  // Validate passed attribute
1182
- if ( !isset($this->brushes[$lang]) )
1183
  return $code;
 
1184
  }
1185
 
1186
  // Switch from the alias to the real brush name (so custom aliases can be used)
1187
- $lang = $this->brushes[$lang];
1188
 
1189
  // Register this brush as used so it's script will be outputted
1190
- $this->usedbrushes[$lang] = true;
1191
 
1192
  $params = array();
1193
  $params[] = "brush: $lang;";
@@ -1240,15 +1274,17 @@ class SyntaxHighlighter {
1240
  $key = strtolower( $key );
1241
 
1242
  // Put back parameter names that have been renamed for shortcode use
1243
- if ( !empty($rename_map[$key]) )
1244
- $key = $rename_map[$key];
 
1245
 
1246
  // This this parameter if it's unknown, not set, or the language which was already handled
1247
- if ( empty($allowed_atts[$key]) || false === $value || in_array( $key, array( 'language', 'lang' ) ) )
1248
  continue;
 
1249
 
1250
  // Sanitize values
1251
- switch ( $allowed_atts[$key] ) {
1252
  case 'boolean':
1253
  $value = strtolower( $value );
1254
  if ( 'true' === $value || '1' === $value || 'on' == $value )
@@ -1335,7 +1371,7 @@ class SyntaxHighlighter {
1335
  $title = ' title="' . esc_attr( $value ) . '"';
1336
  }
1337
 
1338
- $code = ( false === strpos( $code, '<' ) && false === strpos( $code, '>' ) && 2 == $this->get_code_format($post) ) ? strip_tags( $code ) : htmlspecialchars( $code );
1339
 
1340
  // Escape shortcodes
1341
  $code = preg_replace( '/\[/', '&#91;', $code );
@@ -1353,15 +1389,15 @@ class SyntaxHighlighter {
1353
 
1354
  <script type="text/javascript">
1355
  // <![CDATA[
1356
- jQuery(document).ready(function($) {
1357
  // Confirm pressing of the "Reset to Defaults" button
1358
  $("#syntaxhighlighter-defaults").click(function(){
1359
  var areyousure = confirm("<?php echo esc_js( __( 'Are you sure you want to reset your settings to the defaults?', 'syntaxhighlighter' ) ); ?>");
1360
  if ( true != areyousure ) return false;
1361
  });
1362
- <?php if ( !empty( $_GET['defaults'] ) ) : ?>
1363
  $("#message p strong").text("<?php echo esc_js( __( 'Settings reset to defaults.', 'syntaxhighlighter' ) ); ?>");
1364
- <?php endif; ?>
1365
  });
1366
  // ]]>
1367
  </script>
@@ -1556,15 +1592,15 @@ class SyntaxHighlighter {
1556
  <?php
1557
  echo wp_kses(
1558
  sprintf(
1559
- // translators: %1$s Lang parameter; %2$s Language parameter; %3$s Valid tags link.
1560
  _x(
1561
- '%1$s or %2$s &#8212; The language syntax to highlight with. You can alternately just use that as the tag, such as <code>[php]code[/php]</code>. <a href="%3$s">Click here</a> for a list of valid tags (under &quot;aliases&quot;).',
1562
  'language parameter',
1563
  'syntaxhighlighter'
1564
  ),
1565
  '<code>lang</code>',
1566
  '<code>language</code>',
1567
- 'http://alexgorbatchev.com/SyntaxHighlighter/manual/brushes/'
1568
  ),
1569
  array(
1570
  'a' => array(
@@ -1767,23 +1803,24 @@ class SyntaxHighlighter {
1767
 
1768
  // Validate the settings sent from the settings page
1769
  function validate_settings( $settings ) {
1770
- if ( !empty($_POST['syntaxhighlighter-defaults']) ) {
 
1771
  $settings = $this->defaultsettings;
1772
  $_REQUEST['_wp_http_referer'] = add_query_arg( 'defaults', 'true', $_REQUEST['_wp_http_referer'] );
1773
  } else {
1774
- $settings['shversion'] = ( ! empty($settings['shversion']) && 2 == $settings['shversion'] ) ? 2 : 3;
1775
 
1776
- $settings['theme'] = ( ! empty($settings['theme']) && isset($this->themes[$settings['theme']]) ) ? strtolower($settings['theme']) : $this->defaultsettings['theme'];
1777
 
1778
- $settings['loadallbrushes'] = ( ! empty($settings['loadallbrushes']) ) ? 1 : 0;
1779
- $settings['autolinks'] = ( ! empty($settings['autolinks']) ) ? 1 : 0;
1780
- $settings['collapse'] = ( ! empty($settings['collapse']) ) ? 1 : 0;
1781
- $settings['gutter'] = ( ! empty($settings['gutter']) ) ? 1 : 0;
1782
- $settings['light'] = ( ! empty($settings['light']) ) ? 1 : 0;
1783
- $settings['smarttabs'] = ( ! empty($settings['smarttabs']) ) ? 1 : 0;
1784
- $settings['toolbar'] = ( ! empty($settings['toolbar']) ) ? 1 : 0; // May be overridden below
1785
- $settings['wraplines'] = ( ! empty($settings['wraplines']) ) ? 1 : 0; // 2.x only for now
1786
- $settings['quickcode'] = ( ! empty($settings['quickcode']) ) ? 1 : 0; // 3.x only for now
1787
 
1788
  // If the version changed, then force change the toolbar version setting
1789
  if ( $settings['shversion'] != $this->settings['shversion'] ) {
@@ -1793,9 +1830,9 @@ class SyntaxHighlighter {
1793
  if ( 'true' != $settings['padlinenumbers'] && 'false' != $settings['padlinenumbers'] )
1794
  $settings['padlinenumbers'] = (int) $settings['padlinenumbers'];
1795
 
1796
- $settings['classname'] = ( !empty($settings['classname']) ) ? preg_replace( '/[^ A-Za-z0-9_-]*/', '', $settings['classname'] ) : '';
1797
- $settings['firstline'] = (int) ( ( !empty($settings['firstline']) ) ? $settings['firstline'] : $this->defaultsettings['firstline'] );
1798
- $settings['tabsize'] = (int) ( ( !empty($settings['tabsize']) ) ? $settings['tabsize'] : $this->defaultsettings['tabsize'] );
1799
  }
1800
 
1801
  return $settings;
4
 
5
  Plugin Name: SyntaxHighlighter Evolved
6
  Plugin URI: https://alex.blog/wordpress-plugins/syntaxhighlighter/
7
+ Version: 3.6.1
8
  Description: Easily post syntax-highlighted code to your site without having to modify the code at all. Uses Alex Gorbatchev's <a href="http://alexgorbatchev.com/SyntaxHighlighter/">SyntaxHighlighter</a>. Includes a new editor block.
9
  Author: Alex Mills (Viper007Bond)
10
  Author URI: https://alex.blog/
11
  Text Domain: syntaxhighlighter
12
  License: GPL2
13
  License URI: https://www.gnu.org/licenses/gpl-2.0.html
14
+ Requires at least: 5.6
15
+ Tested up to: 5.8
16
  Requires PHP: 7.0
17
 
18
  **************************************************************************/
19
 
20
  class SyntaxHighlighter {
21
  // All of these variables are private. Filters are provided for things that can be modified.
22
+ public $pluginver = '3.6.1'; // Plugin version
23
+ public $agshver = false; // Alex Gorbatchev's SyntaxHighlighter version (dynamically set below due to v2 vs v3)
24
+ public $shfolder = false; // Controls what subfolder to load SyntaxHighlighter from (v2 or v3)
25
+ public $settings = array(); // Contains the user's settings
26
+ public $defaultsettings = array(); // Contains the default settings
27
+ public $brushes = array(); // Array of aliases => brushes
28
+ public $shortcodes = array(); // Array of shortcodes to use
29
+ public $themes = array(); // Array of themes
30
+ public $usedbrushes = array(); // Stores used brushes so we know what to output
31
+ public $encoded = false; // Used to mark that a character encode took place
32
+ public $codeformat = false; // If set, SyntaxHighlighter::get_code_format() will return this value
33
+ public $content_save_pre_ran = false; // It's possible for the "content_save_pre" filter to run multiple times, so keep track
34
 
35
  // Initalize the plugin by registering the hooks
36
  function __construct() {
123
  $this->agshver = '3.0.9b';
124
  }
125
 
126
+ // phpcs:disable Generic.Functions.FunctionCallArgumentSpacing.TooMuchSpaceAfterComma, PEAR.Functions.FunctionCallSignature.SpaceBeforeCloseBracket
127
  // Register brush scripts
128
+ wp_register_script( 'syntaxhighlighter-core', plugins_url( $this->shfolder . '/scripts/shCore.js', __FILE__ ), array(), $this->agshver );
129
+ wp_register_script( 'syntaxhighlighter-brush-as3', plugins_url( $this->shfolder . '/scripts/shBrushAS3.js', __FILE__ ), array( 'syntaxhighlighter-core' ), $this->agshver );
130
+ wp_register_script( 'syntaxhighlighter-brush-arduino', plugins_url( $this->shfolder . '/scripts/shBrushArduino.js', __FILE__ ), array( 'syntaxhighlighter-core' ), $this->agshver );
131
+ wp_register_script( 'syntaxhighlighter-brush-bash', plugins_url( $this->shfolder . '/scripts/shBrushBash.js', __FILE__ ), array( 'syntaxhighlighter-core' ), $this->agshver );
132
+ wp_register_script( 'syntaxhighlighter-brush-coldfusion', plugins_url( $this->shfolder . '/scripts/shBrushColdFusion.js', __FILE__ ), array( 'syntaxhighlighter-core' ), $this->agshver );
133
+ wp_register_script( 'syntaxhighlighter-brush-cpp', plugins_url( $this->shfolder . '/scripts/shBrushCpp.js', __FILE__ ), array( 'syntaxhighlighter-core' ), $this->agshver );
134
+ wp_register_script( 'syntaxhighlighter-brush-csharp', plugins_url( $this->shfolder . '/scripts/shBrushCSharp.js', __FILE__ ), array( 'syntaxhighlighter-core' ), $this->agshver );
135
+ wp_register_script( 'syntaxhighlighter-brush-css', plugins_url( $this->shfolder . '/scripts/shBrushCss.js', __FILE__ ), array( 'syntaxhighlighter-core' ), $this->agshver );
136
+ wp_register_script( 'syntaxhighlighter-brush-delphi', plugins_url( $this->shfolder . '/scripts/shBrushDelphi.js', __FILE__ ), array( 'syntaxhighlighter-core' ), $this->agshver );
137
+ wp_register_script( 'syntaxhighlighter-brush-diff', plugins_url( $this->shfolder . '/scripts/shBrushDiff.js', __FILE__ ), array( 'syntaxhighlighter-core' ), $this->agshver );
138
+ wp_register_script( 'syntaxhighlighter-brush-erlang', plugins_url( $this->shfolder . '/scripts/shBrushErlang.js', __FILE__ ), array( 'syntaxhighlighter-core' ), $this->agshver );
139
+ wp_register_script( 'syntaxhighlighter-brush-go', plugins_url( $this->shfolder . '/scripts/shBrushGo.js', __FILE__ ), array( 'syntaxhighlighter-core' ), $this->agshver );
140
+ wp_register_script( 'syntaxhighlighter-brush-groovy', plugins_url( $this->shfolder . '/scripts/shBrushGroovy.js', __FILE__ ), array( 'syntaxhighlighter-core' ), $this->agshver );
141
+ wp_register_script( 'syntaxhighlighter-brush-haskell', plugins_url( $this->shfolder . '/scripts/shBrushHaskell.js', __FILE__ ), array( 'syntaxhighlighter-core' ), $this->agshver );
142
+ wp_register_script( 'syntaxhighlighter-brush-java', plugins_url( $this->shfolder . '/scripts/shBrushJava.js', __FILE__ ), array( 'syntaxhighlighter-core' ), $this->agshver );
143
+ wp_register_script( 'syntaxhighlighter-brush-javafx', plugins_url( $this->shfolder . '/scripts/shBrushJavaFX.js', __FILE__ ), array( 'syntaxhighlighter-core' ), $this->agshver );
144
+ wp_register_script( 'syntaxhighlighter-brush-jscript', plugins_url( $this->shfolder . '/scripts/shBrushJScript.js', __FILE__ ), array( 'syntaxhighlighter-core' ), $this->agshver );
145
+ wp_register_script( 'syntaxhighlighter-brush-perl', plugins_url( $this->shfolder . '/scripts/shBrushPerl.js', __FILE__ ), array( 'syntaxhighlighter-core' ), $this->agshver );
146
+ wp_register_script( 'syntaxhighlighter-brush-php', plugins_url( $this->shfolder . '/scripts/shBrushPhp.js', __FILE__ ), array( 'syntaxhighlighter-core' ), $this->agshver );
147
+ wp_register_script( 'syntaxhighlighter-brush-plain', plugins_url( $this->shfolder . '/scripts/shBrushPlain.js', __FILE__ ), array( 'syntaxhighlighter-core' ), $this->agshver );
148
+ wp_register_script( 'syntaxhighlighter-brush-powershell', plugins_url( $this->shfolder . '/scripts/shBrushPowerShell.js', __FILE__ ), array( 'syntaxhighlighter-core' ), $this->agshver );
149
+ wp_register_script( 'syntaxhighlighter-brush-python', plugins_url( $this->shfolder . '/scripts/shBrushPython.js', __FILE__ ), array( 'syntaxhighlighter-core' ), $this->agshver );
150
+ wp_register_script( 'syntaxhighlighter-brush-ruby', plugins_url( $this->shfolder . '/scripts/shBrushRuby.js', __FILE__ ), array( 'syntaxhighlighter-core' ), $this->agshver );
151
+ wp_register_script( 'syntaxhighlighter-brush-scala', plugins_url( $this->shfolder . '/scripts/shBrushScala.js', __FILE__ ), array( 'syntaxhighlighter-core' ), $this->agshver );
152
+ wp_register_script( 'syntaxhighlighter-brush-sql', plugins_url( $this->shfolder . '/scripts/shBrushSql.js', __FILE__ ), array( 'syntaxhighlighter-core' ), $this->agshver );
153
+ wp_register_script( 'syntaxhighlighter-brush-vb', plugins_url( $this->shfolder . '/scripts/shBrushVb.js', __FILE__ ), array( 'syntaxhighlighter-core' ), $this->agshver );
154
+ wp_register_script( 'syntaxhighlighter-brush-xml', plugins_url( $this->shfolder . '/scripts/shBrushXml.js', __FILE__ ), array( 'syntaxhighlighter-core' ), $this->agshver );
155
+ wp_register_script( 'syntaxhighlighter-brush-yaml', plugins_url( $this->shfolder . '/scripts/shBrushYaml.js', __FILE__ ), array( 'syntaxhighlighter-core' ), $this->agshver );
156
 
157
  // Register some popular third-party brushes
158
+ wp_register_script( 'syntaxhighlighter-brush-clojure', plugins_url( 'third-party-brushes/shBrushClojure.js', __FILE__ ), array( 'syntaxhighlighter-core' ), '20090602' );
159
+ wp_register_script( 'syntaxhighlighter-brush-fsharp', plugins_url( 'third-party-brushes/shBrushFSharp.js', __FILE__ ), array( 'syntaxhighlighter-core' ), '20091003' );
160
+ wp_register_script( 'syntaxhighlighter-brush-latex', plugins_url( 'third-party-brushes/shBrushLatex.js', __FILE__ ), array( 'syntaxhighlighter-core' ), '20090613' );
161
+ wp_register_script( 'syntaxhighlighter-brush-matlabkey', plugins_url( 'third-party-brushes/shBrushMatlabKey.js', __FILE__ ), array( 'syntaxhighlighter-core' ), '20091209' );
162
+ wp_register_script( 'syntaxhighlighter-brush-objc', plugins_url( 'third-party-brushes/shBrushObjC.js', __FILE__ ), array( 'syntaxhighlighter-core' ), '20091207' );
163
+ wp_register_script( 'syntaxhighlighter-brush-r', plugins_url( 'third-party-brushes/shBrushR.js', __FILE__ ), array( 'syntaxhighlighter-core' ), '20100919' );
164
 
165
  // Register theme stylesheets
166
+ wp_register_style( 'syntaxhighlighter-core', plugins_url( $this->shfolder . '/styles/shCore.css', __FILE__ ), array(), $this->agshver );
167
+ wp_register_style( 'syntaxhighlighter-theme-default', plugins_url( $this->shfolder . '/styles/shThemeDefault.css', __FILE__ ), array( 'syntaxhighlighter-core' ), $this->agshver );
168
+ wp_register_style( 'syntaxhighlighter-theme-django', plugins_url( $this->shfolder . '/styles/shThemeDjango.css', __FILE__ ), array( 'syntaxhighlighter-core' ), $this->agshver );
169
+ wp_register_style( 'syntaxhighlighter-theme-eclipse', plugins_url( $this->shfolder . '/styles/shThemeEclipse.css', __FILE__ ), array( 'syntaxhighlighter-core' ), $this->agshver );
170
+ wp_register_style( 'syntaxhighlighter-theme-emacs', plugins_url( $this->shfolder . '/styles/shThemeEmacs.css', __FILE__ ), array( 'syntaxhighlighter-core' ), $this->agshver );
171
+ wp_register_style( 'syntaxhighlighter-theme-fadetogrey', plugins_url( $this->shfolder . '/styles/shThemeFadeToGrey.css', __FILE__ ), array( 'syntaxhighlighter-core' ), $this->agshver );
172
+ wp_register_style( 'syntaxhighlighter-theme-midnight', plugins_url( $this->shfolder . '/styles/shThemeMidnight.css', __FILE__ ), array( 'syntaxhighlighter-core' ), $this->agshver );
173
+ wp_register_style( 'syntaxhighlighter-theme-rdark', plugins_url( $this->shfolder . '/styles/shThemeRDark.css', __FILE__ ), array( 'syntaxhighlighter-core' ), $this->agshver );
174
+ // phpcs:enable
175
 
176
  // Create list of brush aliases and map them to their real brushes
177
  // The key is the language alias
199
  'erl' => 'erlang',
200
  'erlang' => 'erlang',
201
  'fsharp' => 'fsharp',
202
+ 'go' => 'go',
203
+ 'golang' => 'go',
204
  'groovy' => 'groovy',
205
+ 'haskell' => 'haskell',
206
  'java' => 'java',
207
  'jfx' => 'javafx',
208
  'javafx' => 'javafx',
242
  'yml' => 'yaml',
243
  ) );
244
 
245
+ // phpcs:disable Generic.Functions.FunctionCallArgumentSpacing.TooMuchSpaceAfterComma
246
  $this->brush_names = (array) apply_filters( 'syntaxhighlighter_brush_names', array(
247
  'as3' => __( 'ActionScript', 'syntaxhighlighter' ),
248
  'arduino' => __( 'Arduino', 'syntaxhighlighter' ),
256
  'diff' => __( 'diff / patch', 'syntaxhighlighter' ),
257
  'erlang' => __( 'Erlang', 'syntaxhighlighter' ),
258
  'fsharp' => __( 'F#', 'syntaxhighlighter' ),
259
+ 'go' => __( 'Go', 'syntaxhighlighter' ),
260
  'groovy' => __( 'Groovy', 'syntaxhighlighter' ),
261
+ 'haskell' => __( 'Haskell', 'syntaxhighlighter' ),
262
  'java' => __( 'Java', 'syntaxhighlighter' ),
263
  'javafx' => __( 'JavaFX', 'syntaxhighlighter' ),
264
  'jscript' => __( 'JavaScript', 'syntaxhighlighter' ),
278
  'xml' => __( 'HTML / XHTML / XML / XSLT', 'syntaxhighlighter' ),
279
  'yaml' => __( 'YAML', 'syntaxhighlighter' ),
280
  ) );
281
+ // phpcs:enable
282
 
283
  // Add any custom brushes that aren't making use of the newer "syntaxhighlighter_brush_names" filter.
284
  foreach ( $this->brushes as $slug => $language ) {
534
  'makeURLsClickable' => 'autolinks',
535
  'quickCode' => 'quickcode',
536
  );
537
+ $classnames = ! empty( $attributes['className'] ) ? [ esc_attr( $attributes['className'] ) ] : [];
538
+ if ( ! empty( $attributes['align'] ) ) {
539
+ $classnames[] = 'align' . esc_attr( $attributes['align'] );
540
  }
541
 
542
  foreach ( $remaps as $from => $to ) {
555
 
556
  // Undo escaping done by WordPress
557
  $code = htmlspecialchars_decode( $code );
558
+ $code = preg_replace( '/^(\s*https?:)&#0?47;&#0?47;([^\s<>"]+\s*)$/m', '$1//$2', $code );
559
 
560
  $code = $this->shortcode_callback( $attributes, $code, 'code' );
561
 
562
+ return '<div class="wp-block-syntaxhighlighter-code ' . esc_attr( join( ' ', $classnames ) ) . '">' . $code . '</div>';
563
  }
564
 
565
  // Add the custom TinyMCE plugin which wraps plugin shortcodes in <pre> in TinyMCE
589
  function settings_link( $links, $file ) {
590
  static $this_plugin;
591
 
592
+ if ( empty( $this_plugin ) ) {
593
  $this_plugin = plugin_basename(__FILE__);
594
+ }
595
 
596
+ if ( $file == $this_plugin ) {
597
  $links[] = '<a href="' . admin_url( 'options-general.php?page=syntaxhighlighter' ) . '">' . __( 'Settings', 'syntaxhighlighter' ) . '</a>';
598
+ }
599
 
600
  return $links;
601
  }
795
  // The callback function for SyntaxHighlighter::encode_shortcode_contents()
796
  function encode_shortcode_contents_callback( $atts, $code = '', $tag = false ) {
797
  $this->encoded = true;
798
+ $code = str_replace( array_keys( $this->specialchars ), array_values( $this->specialchars ), htmlspecialchars( $code ) );
799
  return '[' . $tag . $this->atts2string( $atts ) . "]{$code}[/$tag]";
800
  }
801
 
804
  // Shortcode attribute values need to not be quoted with TinyMCE disabled for some reason (weird bug)
805
  function decode_shortcode_contents_callback( $atts, $code = '', $tag = false ) {
806
  $quotes = ( user_can_richedit() ) ? true : false;
807
+ $code = str_replace( array_values( $this->specialchars ), array_keys( $this->specialchars ), htmlspecialchars_decode( $code ) );
808
  return '[' . $tag . $this->atts2string( $atts, $quotes ) . "]{$code}[/$tag]";
809
  }
810
 
848
 
849
  // Run SyntaxHighlighter::decode_shortcode_contents_callback() on the contents of the text widget form
850
  function widget_text_form( $instance, $widgetclass ) {
851
+ if ( 'text' == $widgetclass->id_base && ! empty( $instance['syntaxhighlighter_encoded'] ) ) {
852
  $instance['text'] = $this->shortcode_hack( $instance['text'], array( $this, 'decode_shortcode_contents_callback' ) );
853
  }
854
 
858
 
859
  // Run SyntaxHighlighter::parse_shortcodes() on the contents of a text widget
860
  function widget_text_output( $content, $instance = false ) {
861
+ $this->codeformat = ( false === $instance || empty( $instance['syntaxhighlighter_encoded'] ) ) ? 1 : 2;
862
  $content = $this->parse_shortcodes( $content );
863
  $this->codeformat = false;
864
 
879
  // This function determines what version of SyntaxHighlighter was used when the post was written
880
  // This is because the code was stored differently for different versions of SyntaxHighlighter
881
  function get_code_format( $post ) {
882
+ if ( false !== $this->codeformat ) {
883
  return $this->codeformat;
884
+ }
885
 
886
+ if ( empty( $post ) ) {
887
  $post = new stdClass();
888
+ }
889
 
890
  if ( null !== $version = apply_filters( 'syntaxhighlighter_pre_getcodeformat', null, $post ) )
891
  return $version;
892
 
893
+ $version = ( empty( $post->ID ) || get_post_meta( $post->ID, '_syntaxhighlighter_encoded', true ) || get_post_meta( $post->ID, 'syntaxhighlighter_encoded', true ) ) ? 2 : 1;
894
 
895
  return apply_filters( 'syntaxhighlighter_getcodeformat', $version, $post );
896
  }
908
 
909
  // Transforms an attributes array into a 'key="value"' format (i.e. reverses the process)
910
  function atts2string( $atts, $quotes = true ) {
911
+ if ( empty( $atts ) ) {
912
  return '';
913
+ }
914
 
915
  $atts = $this->attributefix( $atts );
916
 
917
  // Re-map [code="php"] style tags
918
+ if ( isset( $atts[0] ) ) {
919
+ if ( empty( $atts['language'] ) ) {
920
  $atts['language'] = $atts[0];
921
+ }
922
 
923
+ unset( $atts[0] );
924
  }
925
 
926
  $strings = array();
941
  function maybe_output_scripts() {
942
  global $wp_styles;
943
 
944
+ if ( 1 == $this->settings['loadallbrushes'] ) {
945
  $this->usedbrushes = array_flip( array_values( $this->brushes ) );
946
+ }
947
 
948
+ if ( empty( $this->usedbrushes ) ) {
949
  return;
950
+ }
951
 
952
  $scripts = array();
953
  foreach ( $this->usedbrushes as $brush => $unused )
961
  echo " var corecss = document.createElement('link');\n";
962
  echo " var themecss = document.createElement('link');\n";
963
 
964
+ if ( ! is_a( $wp_styles, 'WP_Styles' ) ) {
965
  $wp_styles = new WP_Styles();
966
+ }
967
 
968
  $needcore = false;
969
  if ( 'none' == $this->settings['theme'] ) {
970
  $needcore = true;
971
  } else {
972
+ $theme = ( ! empty( $this->themes[ $this->settings['theme'] ] ) ) ? strtolower( $this->settings['theme'] ) : $this->defaultsettings['theme'];
973
  $theme = 'syntaxhighlighter-theme-' . $theme;
974
 
975
  // See if the requested theme has been registered
976
+ if ( ! empty( $wp_styles ) && ! empty( $wp_styles->registered ) && ! empty( $wp_styles->registered[ $theme ] ) && ! empty( $wp_styles->registered[ $theme ]->src ) ) {
977
 
978
  // Users can register their own stylesheet and may opt to not load the core stylesheet if they wish for some reason
979
+ if ( is_array( $wp_styles->registered[ $theme ]->deps ) && in_array( 'syntaxhighlighter-core', $wp_styles->registered[ $theme ]->deps ) ) {
980
  $needcore = true;
981
+ }
982
  }
983
 
984
  // Otherwise use the default theme
988
  }
989
  }
990
 
991
+ if ( $needcore && ! empty( $wp_styles ) && ! empty( $wp_styles->registered ) && ! empty( $wp_styles->registered['syntaxhighlighter-core'] ) && ! empty( $wp_styles->registered['syntaxhighlighter-core']->src ) ) :
992
  $corecssurl = add_query_arg( 'ver', $this->agshver, $wp_styles->registered['syntaxhighlighter-core']->src );
993
  $corecssurl = apply_filters( 'syntaxhighlighter_csscoreurl', $corecssurl );
994
  ?>
1006
  endif; // Endif $needcore
1007
 
1008
  if ( 'none' != $this->settings['theme'] ) : ?>
1009
+ var themecssurl = "<?php echo esc_js( apply_filters( 'syntaxhighlighter_cssthemeurl', add_query_arg( 'ver', $this->agshver, $wp_styles->registered[ $theme ]->src ) ) ); ?>";
1010
  if ( themecss.setAttribute ) {
1011
  themecss.setAttribute( "rel", "stylesheet" );
1012
  themecss.setAttribute( "type", "text/css" );
1043
  break;
1044
  }
1045
 
1046
+ if ( 1 != $this->settings['autolinks'] ) {
1047
  echo " SyntaxHighlighter.defaults['auto-links'] = false;\n";
1048
+ }
1049
 
1050
+ if ( ! empty( $this->settings['classname'] ) ) {
1051
  echo " SyntaxHighlighter.defaults['class-name'] = '" . $this->js_escape_singlequotes( $this->settings['classname'] ) . "';\n";
1052
+ }
1053
 
1054
+ if ( 1 == $this->settings['collapse'] ) {
1055
  echo " SyntaxHighlighter.defaults['collapse'] = true;\n";
1056
+ }
1057
 
1058
+ if ( 1 != $this->settings['firstline'] ) {
1059
  echo " SyntaxHighlighter.defaults['first-line'] = " . $this->settings['firstline'] . ";\n";
1060
+ }
1061
 
1062
+ if ( 1 != $this->settings['gutter'] ) {
1063
  echo " SyntaxHighlighter.defaults['gutter'] = false;\n";
1064
+ }
1065
 
1066
  /*
1067
+ if ( 1 == $this->settings['htmlscript'] ) {
1068
  echo " SyntaxHighlighter.defaults['html-script'] = true;\n";
1069
+ }
1070
  */
1071
 
1072
+ if ( 1 == $this->settings['light'] ) {
1073
  echo " SyntaxHighlighter.defaults['light'] = true;\n";
1074
+ }
1075
 
1076
  echo " SyntaxHighlighter.defaults['pad-line-numbers'] = ";
1077
  switch ( $this->settings['padlinenumbers'] ) {
1096
  echo " SyntaxHighlighter.defaults['toolbar'] = false;\n";
1097
 
1098
  // 2.x only for now
1099
+ if ( 1 != $this->settings['wraplines'] ) {
1100
  echo " SyntaxHighlighter.defaults['wrap-lines'] = false;\n";
1101
+ }
1102
 
1103
+ if ( 1 != $this->settings['quickcode'] ) {
1104
  echo " SyntaxHighlighter.defaults['quick-code'] = false;\n";
1105
+ }
1106
 
1107
  ?> SyntaxHighlighter.all();
1108
 
1124
 
1125
  // No-name attribute fixing
1126
  function attributefix( $atts = array() ) {
1127
+ if ( empty( $atts[0] ) ) {
1128
  return $atts;
1129
+ }
1130
 
1131
+ if ( 0 !== preg_match( '#=("|\')(.*?)\1#', $atts[0], $match ) ) {
1132
+ // Quoted value
1133
  $atts[0] = $match[2];
1134
 
1135
+ } elseif ( '=' == substr( $atts[0], 0, 1 ) ) {
1136
+ // Unquoted value
1137
  $atts[0] = substr( $atts[0], 1 );
1138
+ }
1139
 
1140
  return $atts;
1141
  }
1145
  function shortcode_callback( $atts, $code = '', $tag = false ) {
1146
  global $post;
1147
 
1148
+ if ( false === $tag || empty( $code ) ) {
1149
  return $code;
1150
+ }
1151
 
1152
  // Avoid PHP notices
1153
+ if ( ! isset( $post ) ) {
1154
  $post = null;
1155
+ }
1156
 
1157
  $code = apply_filters( 'syntaxhighlighter_precode', $code, $atts, $tag );
1158
 
1159
  // Error fixing for [tag="language"]
1160
+ if ( isset( $atts[0] ) ) {
1161
  $atts = $this->attributefix( $atts );
1162
  $atts['language'] = $atts[0];
1163
+ unset( $atts[0] );
1164
  }
1165
 
1166
  // Default out all of the available parameters to "false" (easy way to check if they're set or not)
1188
  ), $atts ) );
1189
 
1190
  // Check for language shortcode tag such as [php]code[/php]
1191
+ if ( isset( $this->brushes[ $tag ] ) ) {
1192
  $lang = $tag;
1193
  }
1194
 
1212
  $lang = strtolower( $lang );
1213
 
1214
  // Validate passed attribute
1215
+ if ( ! isset( $this->brushes[ $lang ] ) ) {
1216
  return $code;
1217
+ }
1218
  }
1219
 
1220
  // Switch from the alias to the real brush name (so custom aliases can be used)
1221
+ $lang = $this->brushes[ $lang ];
1222
 
1223
  // Register this brush as used so it's script will be outputted
1224
+ $this->usedbrushes[ $lang ] = true;
1225
 
1226
  $params = array();
1227
  $params[] = "brush: $lang;";
1274
  $key = strtolower( $key );
1275
 
1276
  // Put back parameter names that have been renamed for shortcode use
1277
+ if ( ! empty( $rename_map[ $key ] ) ) {
1278
+ $key = $rename_map[ $key ];
1279
+ }
1280
 
1281
  // This this parameter if it's unknown, not set, or the language which was already handled
1282
+ if ( empty( $allowed_atts[ $key ] ) || false === $value || in_array( $key, array( 'language', 'lang' ) ) ) {
1283
  continue;
1284
+ }
1285
 
1286
  // Sanitize values
1287
+ switch ( $allowed_atts[ $key ] ) {
1288
  case 'boolean':
1289
  $value = strtolower( $value );
1290
  if ( 'true' === $value || '1' === $value || 'on' == $value )
1371
  $title = ' title="' . esc_attr( $value ) . '"';
1372
  }
1373
 
1374
+ $code = ( false === strpos( $code, '<' ) && false === strpos( $code, '>' ) && 2 == $this->get_code_format( $post ) ) ? strip_tags( $code ) : htmlspecialchars( $code );
1375
 
1376
  // Escape shortcodes
1377
  $code = preg_replace( '/\[/', '&#91;', $code );
1389
 
1390
  <script type="text/javascript">
1391
  // <![CDATA[
1392
+ jQuery(document).ready(function( $ ) {
1393
  // Confirm pressing of the "Reset to Defaults" button
1394
  $("#syntaxhighlighter-defaults").click(function(){
1395
  var areyousure = confirm("<?php echo esc_js( __( 'Are you sure you want to reset your settings to the defaults?', 'syntaxhighlighter' ) ); ?>");
1396
  if ( true != areyousure ) return false;
1397
  });
1398
+ <?php if ( ! empty( $_GET['defaults'] ) ) : ?>
1399
  $("#message p strong").text("<?php echo esc_js( __( 'Settings reset to defaults.', 'syntaxhighlighter' ) ); ?>");
1400
+ <?php endif; ?>
1401
  });
1402
  // ]]>
1403
  </script>
1592
  <?php
1593
  echo wp_kses(
1594
  sprintf(
1595
+ // translators: %1$s Lang parameter; %2$s Language parameter; %3$s List of brush names.
1596
  _x(
1597
+ '%1$s or %2$s &#8212; The language syntax to highlight with. You can alternately just use that as the tag, such as <code>[php]code[/php]</code>. Available tags: %3$s.',
1598
  'language parameter',
1599
  'syntaxhighlighter'
1600
  ),
1601
  '<code>lang</code>',
1602
  '<code>language</code>',
1603
+ implode( ', ', array_keys( $this->brushes ) )
1604
  ),
1605
  array(
1606
  'a' => array(
1803
 
1804
  // Validate the settings sent from the settings page
1805
  function validate_settings( $settings ) {
1806
+ // phpcs:ignore WordPress.Security.NonceVerification -- Used only for check.
1807
+ if ( ! empty( $_POST['syntaxhighlighter-defaults'] ) ) {
1808
  $settings = $this->defaultsettings;
1809
  $_REQUEST['_wp_http_referer'] = add_query_arg( 'defaults', 'true', $_REQUEST['_wp_http_referer'] );
1810
  } else {
1811
+ $settings['shversion'] = ( ! empty( $settings['shversion'] ) && 2 == $settings['shversion'] ) ? 2 : 3;
1812
 
1813
+ $settings['theme'] = ( ! empty( $settings['theme'] ) && isset( $this->themes[ $settings['theme'] ] ) ) ? strtolower( $settings['theme'] ) : $this->defaultsettings['theme'];
1814
 
1815
+ $settings['loadallbrushes'] = ( ! empty( $settings['loadallbrushes'] ) ) ? 1 : 0;
1816
+ $settings['autolinks'] = ( ! empty( $settings['autolinks'] ) ) ? 1 : 0;
1817
+ $settings['collapse'] = ( ! empty( $settings['collapse'] ) ) ? 1 : 0;
1818
+ $settings['gutter'] = ( ! empty( $settings['gutter'] ) ) ? 1 : 0;
1819
+ $settings['light'] = ( ! empty( $settings['light'] ) ) ? 1 : 0;
1820
+ $settings['smarttabs'] = ( ! empty( $settings['smarttabs'] ) ) ? 1 : 0;
1821
+ $settings['toolbar'] = ( ! empty( $settings['toolbar'] ) ) ? 1 : 0; // May be overridden below
1822
+ $settings['wraplines'] = ( ! empty( $settings['wraplines'] ) ) ? 1 : 0; // 2.x only for now
1823
+ $settings['quickcode'] = ( ! empty( $settings['quickcode'] ) ) ? 1 : 0; // 3.x only for now
1824
 
1825
  // If the version changed, then force change the toolbar version setting
1826
  if ( $settings['shversion'] != $this->settings['shversion'] ) {
1830
  if ( 'true' != $settings['padlinenumbers'] && 'false' != $settings['padlinenumbers'] )
1831
  $settings['padlinenumbers'] = (int) $settings['padlinenumbers'];
1832
 
1833
+ $settings['classname'] = ( ! empty( $settings['classname'] ) ) ? preg_replace( '/[^ A-Za-z0-9_-]*/', '', $settings['classname'] ) : '';
1834
+ $settings['firstline'] = (int) ( ( ! empty( $settings['firstline'] ) ) ? $settings['firstline'] : $this->defaultsettings['firstline'] );
1835
+ $settings['tabsize'] = (int) ( ( ! empty( $settings['tabsize'] ) ) ? $settings['tabsize'] : $this->defaultsettings['tabsize'] );
1836
  }
1837
 
1838
  return $settings;
syntaxhighlighter3/scripts/shBrushGo.js ADDED
@@ -0,0 +1,60 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * SyntaxHighlighter
3
+ * http://alexgorbatchev.com/SyntaxHighlighter
4
+ *
5
+ * SyntaxHighlighter is donationware. If you are using it, please donate.
6
+ * http://alexgorbatchev.com/SyntaxHighlighter/donate.html
7
+ *
8
+ * @version
9
+ * 3.0.83 (Wed, 16 Apr 2014 03:56:09 GMT)
10
+ *
11
+ * @copyright
12
+ * Copyright (C) 2004-2013 Alex Gorbatchev.
13
+ *
14
+ * @license
15
+ * Dual licensed under the MIT and GPL licenses.
16
+ */
17
+ (function () {
18
+ // CommonJS
19
+ SyntaxHighlighter = SyntaxHighlighter || (typeof require !== 'undefined'? require('shCore').SyntaxHighlighter : null);
20
+
21
+ function Brush() {
22
+ var keywords =
23
+ 'bool break byte case chan complex128 complex64 const continue default defer else ' +
24
+ 'fallthrough float32 float64 for func go goto if import int int16 int32 int64 int8 ' +
25
+ 'interface map package range return rune select string struct switch type uint ' +
26
+ 'uint16 uint32 uint64 uint8 uintptr var';
27
+ var funcs =
28
+ 'append cap close complex copy imag len make new panic print println real recover delete';
29
+ var special = 'true false iota nil';
30
+
31
+ this.regexList = [
32
+ {
33
+ regex: SyntaxHighlighter.regexLib.singleLineCComments,
34
+ css: 'comments',
35
+ }, // one line comments
36
+ { regex: /\/\*([^\*][\s\S]*?)?\*\//gm, css: 'comments' }, // multiline comments
37
+ { regex: /\/\*(?!\*\/)\*[\s\S]*?\*\//gm, css: 'preprocessor' }, // documentation comments
38
+ { regex: SyntaxHighlighter.regexLib.doubleQuotedString, css: 'string' }, // strings
39
+ { regex: SyntaxHighlighter.regexLib.singleQuotedString, css: 'string' }, // strings
40
+ { regex: XRegExp('`([^\\\\`]|\\\\.)*`', 'gs'), css: 'string' }, // strings
41
+ { regex: /\b([\d]+(\.[\d]+)?|0x[a-f0-9]+)\b/gi, css: 'value' }, // numbers
42
+ { regex: new RegExp(this.getKeywords(keywords), 'gm'), css: 'keyword' }, // keywords
43
+ { regex: new RegExp(this.getKeywords(funcs), 'gmi'), css: 'functions' }, // built-in functions
44
+ { regex: new RegExp(this.getKeywords(special), 'gm'), css: 'color1' }, // literals
45
+ ];
46
+
47
+ this.forHtmlScript({
48
+ left: /(&lt;|<)%[@!=]?/g,
49
+ right: /%(&gt;|>)/g,
50
+ });
51
+ }
52
+
53
+ Brush.prototype = new SyntaxHighlighter.Highlighter();
54
+ Brush.aliases = ['go', 'golang'];
55
+
56
+ SyntaxHighlighter.brushes.Go = Brush;
57
+
58
+ // CommonJS
59
+ typeof exports != 'undefined' ? (exports.Brush = Brush) : null;
60
+ })();
syntaxhighlighter3/scripts/shBrushHaskell.js ADDED
@@ -0,0 +1,38 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * Haskell Brushes for SyntaxHighlighter 3.0
3
+ */
4
+ (function () {
5
+ // CommonJS
6
+ SyntaxHighlighter = SyntaxHighlighter || (typeof require !== 'undefined'? require('shCore').SyntaxHighlighter : null);
7
+
8
+ function Brush() {
9
+ var keywords = 'as case of class data default deriving do forall foreign hiding ' +
10
+ 'if then else import instance let in mdo module newtype qualified type where';
11
+
12
+ this.regexList = [
13
+ { regex: /{-#[\s\S]*?#-}/g, css: 'preprocessor' },
14
+ { regex: /--.*/g, css: 'comments' }, // one line comments
15
+ { regex: /{-(?!\$)[\s\S]*?-}/gm, css: 'comments' }, // multiline comments
16
+ { regex: /'.'/g, css: 'string' }, // chars
17
+ { regex: SyntaxHighlighter.regexLib.doubleQuotedString, css: 'string' }, // strings
18
+ { regex: /(-|!|#|\$|%|&amp;|\*|\+|\/|&lt;|=|&gt;|\?|@|\^|\||~|:|\.|\\)+/g, css: 'keyword bold' },
19
+ { regex: /`[a-z][a-z0-9_']*`/g, css: 'keyword bold' }, // infix operators
20
+ { regex: /\b(\d+|0x[0-9a-f]+)\b/gi, css: 'value' }, // integer
21
+ { regex: /\b\d+(\.\d*)?([eE][+-]?\d+)?\b/gi, css: 'value' }, // floating number
22
+ { regex: new RegExp(this.getKeywords(keywords), 'gm'), css: 'keyword bold' }
23
+ ];
24
+
25
+ this.forHtmlScript({
26
+ left : /(&lt;|<)%[@!=]?/g,
27
+ right : /%(&gt;|>)/g
28
+ });
29
+ }
30
+
31
+ Brush.prototype = new SyntaxHighlighter.Highlighter();
32
+ Brush.aliases = ['haskell'];
33
+
34
+ SyntaxHighlighter.brushes.Haskell = Brush;
35
+
36
+ // CommonJS
37
+ typeof exports != 'undefined' ? (exports.Brush = Brush) : null;
38
+ })();
syntaxhighlighter3/scripts/shBrushXml.js CHANGED
@@ -48,7 +48,7 @@
48
 
49
  if (tag != null)
50
  result.push(
51
- new constructor(tag.name, match.index + tag[0].indexOf(tag.name), 'keyword')
52
  );
53
 
54
  return result;
48
 
49
  if (tag != null)
50
  result.push(
51
+ new constructor(tag.name, match.index + tag[0].lastIndexOf(tag.name), 'keyword')
52
  );
53
 
54
  return result;
syntaxhighlighter3/styles/shCore.css CHANGED
@@ -7,7 +7,7 @@
7
  *
8
  * @version
9
  * 3.0.83 (July 02 2010)
10
- *
11
  * @copyright
12
  * Copyright (C) 2004-2010 Alex Gorbatchev.
13
  *
@@ -65,6 +65,7 @@
65
  overflow: auto !important;
66
  overflow-y: hidden !important;
67
  font-size: 1em !important;
 
68
  }
69
  .syntaxhighlighter code {
70
  display: inline !important;
@@ -87,7 +88,7 @@
87
  }
88
  .syntaxhighlighter table caption {
89
  text-align: left !important;
90
- padding: .5em 0 0.5em 1em !important;
91
  }
92
  .syntaxhighlighter table td.code {
93
  width: 100% !important;
@@ -95,6 +96,14 @@
95
  .syntaxhighlighter table td.code .container {
96
  position: relative !important;
97
  }
 
 
 
 
 
 
 
 
98
  .syntaxhighlighter table td.code .container textarea {
99
  box-sizing: border-box !important;
100
  position: absolute !important;
@@ -110,10 +119,11 @@
110
  }
111
  .syntaxhighlighter table td.gutter .line {
112
  text-align: right !important;
113
- padding: 0 0.5em 0 1em !important;
 
114
  }
115
  .syntaxhighlighter table td.code .line {
116
- padding: 0 1em !important;
117
  }
118
  .syntaxhighlighter.nogutter td.code .container textarea, .syntaxhighlighter.nogutter td.code .line {
119
  padding-left: 0em !important;
7
  *
8
  * @version
9
  * 3.0.83 (July 02 2010)
10
+ *
11
  * @copyright
12
  * Copyright (C) 2004-2010 Alex Gorbatchev.
13
  *
65
  overflow: auto !important;
66
  overflow-y: hidden !important;
67
  font-size: 1em !important;
68
+ padding: 0.5em 1em !important;
69
  }
70
  .syntaxhighlighter code {
71
  display: inline !important;
88
  }
89
  .syntaxhighlighter table caption {
90
  text-align: left !important;
91
+ padding: 0 0 0.5em 0 !important;
92
  }
93
  .syntaxhighlighter table td.code {
94
  width: 100% !important;
96
  .syntaxhighlighter table td.code .container {
97
  position: relative !important;
98
  }
99
+ /**
100
+ * Resolve conflict with Bootstrap CSS-based themes.
101
+ */
102
+ .syntaxhighlighter table td.code .container:after,
103
+ .syntaxhighlighter table td.code .container:before {
104
+ display: block !important;
105
+ content: "";
106
+ }
107
  .syntaxhighlighter table td.code .container textarea {
108
  box-sizing: border-box !important;
109
  position: absolute !important;
119
  }
120
  .syntaxhighlighter table td.gutter .line {
121
  text-align: right !important;
122
+ padding: 0 0.5em 0 0 !important;
123
+ margin-right: 1em !important;
124
  }
125
  .syntaxhighlighter table td.code .line {
126
+ padding: 0 !important;
127
  }
128
  .syntaxhighlighter.nogutter td.code .container textarea, .syntaxhighlighter.nogutter td.code .line {
129
  padding-left: 0em !important;