@ryusei/light
Version:
<div align="center"> <a href="https://light.ryuseijs.com"> <img alt="RyuseiLight" src="https://light.ryuseijs.com/images/svg/logo.svg" width="70"> </a>
9 lines (8 loc) • 9.67 kB
JavaScript
/*!
* RyuseiLight.js
* Version : 1.2.0
* License : MIT
* Copyright: 2020 Naotoshi Fujita
*/
!function(t,n){"object"==typeof exports&&"undefined"!=typeof module?module.exports=n():"function"==typeof define&&define.amd?define(n):(t="undefined"!=typeof globalThis?globalThis:t||self).RyuseiLight=n()}(this,(function(){"use strict";var t="keyword",n="comment",i="selector",r="prop",e="prolog",s="string",o="number",a="function",c="operator",u="bracket",f="delimiter",l="space",h="text";function d(t){return null!==t&&"object"==typeof t}function p(t){return"string"==typeof t}function m(t){return void 0===t}function v(t){return n=t,Array.isArray(n)?t:[t];var n}function b(t,n){v(n).forEach((function(n){n&&t.classList.add(n)}))}function g(t,n){if(t)for(var i=Object.keys(t),r=0;r<i.length;r++)n(t[i[r]],i[r])}function y(t){for(var n=arguments.length,i=new Array(n>1?n-1:0),r=1;r<n;r++)i[r-1]=arguments[r];return i.forEach((function(n){d(n)&&g(n,(function(i,r){m(n[r])||(t[r]=n[r])}))})),t}function S(t,n){if(p(n))return t.getAttribute(n)||"";d(n)&&g(n,(function(n,i){t.setAttribute(i,String(n))}))}function k(t,n){return"<"+(n||"div")+' class="'+t.join(" ")+'">'}function w(t,n){if(m(n))return t.textContent;t.textContent=n}function x(t,n){if(void 0===n&&(n=""),!t)throw new Error(n)}function _(t,n){return t.charAt(0)===n}var A=!m(/x/.sticky),F=function(){function t(t){this.language=t,this.t(t)}var n=t.prototype;return n.t=function(t){var n=this;g(t.grammar,(function(i,r){t.grammar[r]=n.i(t,i)})),g(t.use,this.t.bind(this))},n.i=function(t,n){for(var i=[],r=0;r<n.length;r++){var e=n[r],s=n[r],o=s[0],a=s[1];_(o,"#")&&!a?i.push.apply(i,this.i(t,t.grammar[o.slice(1)])):function(){var n=a.toString().match(/[gimsy]*$/)[0].replace(/[gy]/g,""),r=a.source+(A?"":"|()");g(t.source,(function(t,n){r=r.replace(new RegExp("%"+n,"g"),t.source)})),e[1]=new RegExp(r,(A?"y":"g")+n),i.push(e)}()}return i},n.o=function(t,n,i,r){var e=0,s=0;this.u++;t:for(;e<t.length&&!this.l;){for(var o=0;o<i.length;o++){var a=i[o],c=a[1],u=a[2];c.lastIndex=e;var f=c.exec(t);if(f&&f[0]){if(s<e&&this.h([h,t.slice(s,e)],n,r),"@back"===u){s=e;break t}if(s=e+=this.p(f,n,a,r)||1,"@break"===u)break t;continue t}}e++}return s<e&&this.h([h,t.slice(s)],n,r),this.u--,e},n.h=function(t,n,i){for(var r=this.u,e=t[0],s=t[1],o=this.m,a=0,c=0;a>-1&&!this.l;){a=s.indexOf("\n",c);var u=this.v[this.m],f=c===a&&!u.length,l=f?"\n":s.slice(c,a<0?void 0:a),d={depth:r,language:n.id,state:i};l&&(e!==h&&(d.head=a>-1&&!c,d.tail=a<0&&!!c,d.split=a>-1||!!c,d.distance=this.m-o),u.push([e===h&&f?"lb":e,l,d])),a>-1&&(this.m++,this.l=this.g&&this.m>=this.g,this.l||(c=a+1,this.v[this.m]=[]))}},n.p=function(t,n,i,r){var e=i[0];if(!e)return 0;var s=t[0];if("@debug"===i[3]&&console.log(s,i),_(e,"@")){x(n.use);var o=n.use[e.slice(1)];return x(o),this.o(s,o,o.grammar.main,e)}if(_(e,"#")){var a=n.grammar[e.slice(1)];return x(a),"@rest"===i[2]&&(s=t.input.slice(t.index)),this.o(s,n,a,e)}return this.h([e,s],n,r),s.length},n.tokenize=function(t,n){return this.v=[[]],this.m=0,this.u=-1,this.g=n||0,this.l=!1,this.o(t,this.language,this.language.grammar.main,"#main"),this.v},t}(),$="ryuseilight",T="rl__body",z="rl__token",E=function(){function t(){this.handlers={}}var n=t.prototype;return n.on=function(t,n,i){void 0===i&&(i=10);var r=this.handlers[t]=this.handlers[t]||[];r.push({callback:n,priority:i}),r.sort((function(t,n){return t.priority-n.priority}))},n.emit=function(t){for(var n=arguments.length,i=new Array(n>1?n-1:0),r=1;r<n;r++)i[r-1]=arguments[r];(this.handlers[t]||[]).forEach((function(t){t.callback.apply(t,i)}))},n.destroy=function(){this.handlers={}},t}(),C={},D=function(){function t(t,n,i,r){void 0===r&&(r={}),this.lines=[],this.event=new E,this.lines=t,this.info=n,this.root=i,this.options=r,this.t()}t.compose=function(t){g(t,(function(t,n){C[n]=t}))};var n=t.prototype;return n.t=function(){var t=this,n=this.lines;if(n.length){var i=n[n.length-1];i.length&&(1!==i.length||i[0][1].trim())||n.pop()}g(C,(function(n){n(t)})),this.event.emit("mounted")},n.S=function(t){for(var n=this.event,i=this.options.span?"span":"code",r=0;r<this.lines.length;r++){var e=this.lines[r],s=["rl__line"];n.emit("line:open",t,s,r),t(k(s));for(var o=function(r){var s=e[r],o=s[0].split("."),a="rl__"+o[0],c=o.slice(1).map((function(t){return a+"--"+t})),u=[z,a].concat(c);n.emit("token",s,u),t(""+k(u,i)+(s[1].replace(/&/g,"&").replace(/</g,"<")+"</")+i+">")},a=0;a<e.length;a++)o(a);t("</div>"),n.emit("line:closed",t,r)}},n.html=function(t){var n=this.event,i="</div>",r="",e=function(t){r+=t};t&&(r+=k([$+" "+$+"--"+this.info.id],"pre"));var s=["rl__container"];n.emit("open",e,s),r+=k(s);var o=[T+(this.options.wrap?" rl__body--wrap":"")];return n.emit("body:open",e,o),r+=k(o),n.emit("code:open",e),r+=k(["rl__code"]),this.S(e),r+=i,n.emit("body:close",e),r+=i,n.emit("close",e),r+=i,n.emit("closed",e),t&&(r+="</pre>"),r},n.destroy=function(){this.event.emit("destroy"),this.event.destroy()},t}(),j=/[+-]?(\d+\.?\d*|\d*\.?\d+)([eE][+-]?\d+)?/,L=/\b(?:true|false)\b/,M=/[[\]{}()]/,B=/[ \t]+/,H=/'(?:\\'|.)*?'/,O=/"(?:\\"|.)*?"/,P=/\/\*[\s\S]*?(\*\/|$)/,R=/\/\/.*/,I=/\b(?:break|catch|class|continue|do|else|extends|finally|for|function|if|implements|in|instanceof|interface|new|null|return|throw|try|while)\b/;function J(){return{id:"css",name:"CSS",grammar:{main:[["#common"],["#findSingleAtrule"],["#findBlock"]],findBlock:[["#block",/(?:(?![\t\n\r ;\{\}])[\s\S])(?:(?![;\{\}])[\s\S])*\{[\s\S]*?\}/,"@rest"]],findSingleAtrule:[["#atrule",/@(?:(?![;\{])[\s\S])+?;/]],findAtrule:[["#atrule",/@(?:(?![;\{])[\s\S])*?(?=[;\{])/]],findSelector:[["#selector",/(?:(?![\t\n\r ;\{\}])[\s\S])[\s\S]*?(?=\{)/]],common:[[s,/(["'])[\s\S]*?(?:(?!\\)[\s\S])\1/],[n,P],[l,B]],block:[["#inner",/{/,"@rest"],[u,/}/,"@break"],["#findAtrule"],["#findSelector"],[l,B]],inner:[[u,/{/],["#common"],["#findBlock"],["#props"],["#findAtrule"],["",/}/,"@back"]],atrule:[["#common"],["#url",/\burl\(/,"@rest"],[l,B],["atrule",/[^\s();]+/],[f,/[:;,]/],["#paren",/\(/,"@rest"]],paren:[[u,/^\(/],["#common"],["#paren",/\(/,"@rest"],[u,/\)/,"@break"],["#props"]],selector:[["#common"],[c,/[>+~]/],[u,/[[\]()]/],[f,/=/],[i,/::?\S+/],[i,/[\W\d]\S+/],["tag",/\b[a-z]+|\*/i],[i,/\S+/]],url:[["#common"],[a,/^url/],[u,/\(/],[s,/[^)]+/],[u,/\)/,"@break"]],props:[[r,/[a-z0-9-_\xA0-\uFFFF]+(?=:)/i],["#url",/\burl\(/,"@rest"],[a,/\b[\w-]+(?=\()\b/],[t,/!important|\b(?:initial|inherit|unset)/],[r,/[a-z0-9-]+(?=:)/],[o,/#([0-9a-f]{6}|[0-9a-f]{3})/i],[o,/\bU\+[0-9a-f?-]+/i],[o,/[+-]?(\d+\.?\d*|\d*\.?\d+)/],[f,/[:;,]/],["#paren",/\(/,"@rest"],[u,/[[\])]/],[l,B]]}}}function U(){return{id:"javascript",name:"JavaScript",alias:["js"],source:{func:/[_$a-z\xA0-\uFFFF][_$a-z0-9\xA0-\uFFFF]*/},grammar:{main:[[s,H],[s,O],["#backtick",/`/,"@rest"],[n,P],[n,R],["regexp",/\/(\[.*?]|\\\/|.)+?\/[gimsuy]*/],[t,I],[t,/\b(?:as|async|await|case|catch|const|debugger|default|delete|enum|export|from|import|let|package|private|protected|public|super|switch|static|this|typeof|undefined|var|void|with|yield)\b/],[t,/\b((get|set)(?=\s+%func))/i],["class",/\b[A-Z][\w$]*\b/],[a,/%func(?=\s*\()/i],["boolean",L],["decorator",/@[^\s(@]+/],["identifier",/\b[a-z_$][\w$]*\b/],[o,j],[c,/=>/],[c,/\+[+=]?|-[-=]?|\*\*?=?|[/%^]=?|&&?=?|\|\|?=?|\?\??=?|<<?=?|>>>=?|>>?=?|[!=]=?=?|[~:^]/],[u,M],[f,/[;.,]+/],[l,B]],backtick:[[s,/^`/],[s,/(\$[^{]|\\[$`]|[^`$])+/],["#expression",/\${/,"@rest"],[s,/`/,"@break"]],expression:[[f,/^\${/],[f,/}/,"@break"],["#main"]]}}}function W(t){void 0===t&&(t={});var i=(t.script||U)(),r=(t.style||J)(),s=["cdata",/<!\[CDATA\[[\s\S]*\]\]>/i];return i.grammar.main.unshift(s),r.grammar.main.unshift(s),{id:"html",alias:["markup"],name:"HTML",use:{script:i,style:r},grammar:{main:[[n,/<!\x2D\x2D[\s\S]*?\x2D\x2D>/],[e,/<!DOCTYPE[\s\S]*?>/i],s,["#script",/<script[\s\S]*?>[\s\S]*?<\/script>/],["#style",/<style[\s\S]*?>[\s\S]*?<\/style>/],["#tag",/<[\s\S]*?>/],["entity",/&[\da-z]+;|&#\d+;/i],[l,B]],script:[["#tag",/^<script[\s\S]*?>/],s,["@script",/[\s\S]+(?=<\/script>)/],["#tag",/<\/script>/]],style:[["#tag",/^<style[\s\S]*?>/],["@style",/[\s\S]+(?=<\/style>)/],["#tag",/<\/style>/]],tag:[["#closeTag",/<\/.+>/],["#tagContent"]],closeTag:[["tag.close",/[^\s/<>"'=]+/],["#tagContent"]],tagContent:[["#attr",/[\t\n\r ]+[\s\S]+(?=[\t\n\r \/>])/],["tag",/[^\s/<>"'=]+/],[u,/[<>]/],[f,/[/]/]],attr:[[l,B],["value",/(['"])(\\\1|.)*?\1/],[f,/[/=]/],["attr",/[^\s/>"'=]+/]]}}}var X,Y={},Z=function(){function t(t){this.k=[],this._=y({},t)}t.register=function(t){v(t).forEach((function(t){var n=t.id;n&&!Y[n]&&(t.alias||[]).concat(n).forEach((function(n){Y[n]=new F(t)}))}))},t.tokenize=function(n,i,r){return t.A(i).tokenize(n,r)},t.has=function(t){return!!Y[t]},t.A=function(n){return Y.none||t.register({id:"none",name:"",grammar:{main:[]}}),Y[n]||Y.none};var n=t.prototype;return n.F=function(n,i,r){var e=(r=y({},this._,r)).language,s=t.A(e).language,o=s.name,a=s.id;return new D(t.tokenize(n,e),{name:o,id:a},i,r)},n.apply=function(t,n){for(var i=p(t)?document.querySelectorAll(t):[t],r=0;r<i.length;r++){var e=i[r];if(e instanceof HTMLElement){var s=y({},n,{language:S(e,"data-rl-language")||void 0}),o=this.F(w(e),e,s),a=e instanceof HTMLPreElement;a&&b(e,[$,$+"--"+o.info.id]),e.innerHTML=o.html(!a),o.event.emit("applied",e),this.k.push(o)}}},n.html=function(t,n){return x(p(t),"Invalid code."),this.F(t,null,n).html(!0)},n.destroy=function(){this.k.forEach((function(t){t.destroy()}))},t}();return Z.compose=D.compose,Z.register([{id:"none",name:"",grammar:{main:[]}},U(),W(),J(),(X=y(W(),{id:"xml",name:"XML",alias:[]}),X.grammar.main.unshift([e,/<\?[\s\S]*?\?>/]),X)]),Z}));
//# sourceMappingURL=ryuseilight.min.js.map