@ryusei/code
Version:
<div align="center"> <a href="https://code.ryuseijs.com"> <img alt="RyuseiCode" src="https://code.ryuseijs.com/images/svg/logo.svg" width="70"> </a>
14 lines (13 loc) • 4.27 kB
JavaScript
!function(t,i){"function"==typeof define&&define.amd?define([],i):"undefined"!=typeof exports?i():(i(),t.unknown={})}("undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:this,function(){"use strict";function r(t,i){return(r=Object.setPrototypeOf||function(t,i){return t.__proto__=i,t})(t,i)}
/*!
* RyuseiCode.js
* Version : 0.1.17
* License : MIT
* Copyright: 2021 Naotoshi Fujita
*/
/*!
* RyuseiLight.js
* Version : 1.2.0
* License : MIT
* Copyright: 2020 Naotoshi Fujita
*/var i="keyword",n="prop",e="string",o="number",s="boolean",f="operator",u="bracket",a="delimiter",h="space",v="text";function c(t,i){if(t)for(var n=Object.keys(t),e=0;e<n.length;e++)i(t[n[e]],n[e])}function d(t,i){if(void 0===i&&(i=""),!t)throw new Error(i)}function l(t,i){return t.charAt(0)===i}var g=!(void 0===/x/.sticky),b=/\b(?:true|false)\b/,p=/[ \t]+/,m=/"(?:\\"|.)*?"/;var w=function(t){var i,n;function e(){return t.apply(this,arguments)||this}return n=t,(i=e).prototype=Object.create(n.prototype),r(i.prototype.constructor=i,n),e.prototype.run=function(t,i){for(var n=this.tokenize(t,i),e=0;e<n.length;e++)for(var r=n[e],o=0,s=0;s<r.length;s++){var f=r[s],u=f[1].length,a=f[2],h="rc__token rc__"+f[0].split(".")[0],c=f[1].replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">");f[2]={category:f[0],code:f[1],html:'<code class="'+h+'">'+c+"</code>",from:o,to:o+u,index:s,state:a.state,depth:a.depth,head:a.head,tail:a.tail,distance:a.distance,language:a.language,split:a.split},o+=u}return n},e}(function(){function t(t){this.language=t,this.init(t)}var i=t.prototype;return i.init=function(n){var e=this;c(n.grammar,function(t,i){n.grammar[i]=e.merge(n,t)}),c(n.use,this.init.bind(this))},i.merge=function(i,t){for(var e=[],n=0;n<t.length;n++){var r=t[n],o=t[n],s=o[0],f=o[1];l(s,"#")&&!f?e.push.apply(e,this.merge(i,i.grammar[s.slice(1)])):function(){var t=f.toString().match(/[gimsy]*$/)[0].replace(/[gy]/g,""),n=f.source+(g?"":"|()");c(i.source,function(t,i){n=n.replace(new RegExp("%"+i,"g"),t.source)}),r[1]=new RegExp(n,(g?"y":"g")+t),e.push(r)}()}return e},i.parse=function(t,i,n,e){var r=0,o=0;this.depth++;t:for(;r<t.length&&!this.aborted;){for(var s=0;s<n.length;s++){var f=n[s],u=f[1],a=f[2];u.lastIndex=r;u=u.exec(t);if(u&&u[0]){if(o<r&&this.push([v,t.slice(o,r)],i,e),"@back"===a){o=r;break t}o=r+=this.handle(u,i,f,e)||1;if("@break"===a)break t;continue t}}r++}return o<r&&this.push([v,t.slice(o)],i,e),this.depth--,r},i.push=function(t,i,n){for(var e=this.depth,r=t[0],o=t[1],s=this.index,f=0,u=0;-1<f&&!this.aborted;){var f=o.indexOf("\n",u),a=this.lines[this.index],h=u===f&&!a.length,c=h?"\n":o.slice(u,f<0?void 0:f),d={depth:e,language:i.id,state:n};c&&(r!==v&&(d.head=-1<f&&!u,d.tail=f<0&&!!u,d.split=-1<f||!!u,d.distance=this.index-s),a.push([r===v&&h?"lb":r,c,d])),-1<f&&(this.index++,this.aborted=this.limit&&this.index>=this.limit,this.aborted||(u=f+1,this.lines[this.index]=[]))}},i.handle=function(t,i,n,e){var r=n[0];if(!r)return 0;var o=t[0];if("@debug"===n[3]&&console.log(o,n),l(r,"@")){d(i.use);var s=i.use[r.slice(1)];return d(s),this.parse(o,s,s.grammar.main,r)}if(l(r,"#")){s=i.grammar[r.slice(1)];return d(s),"@rest"===n[2]&&(o=t.input.slice(t.index)),this.parse(o,i,s,r)}return this.push([r,o],i,e),o.length},i.tokenize=function(t,i){return this.lines=[[]],this.index=0,this.depth=-1,this.limit=i||0,this.aborted=!1,this.parse(t,this.language,this.language.grammar.main,"#main"),this.lines},t}());function y(e){for(var t=arguments.length,i=new Array(1<t?t-1:0),n=1;n<t;n++)i[n-1]=arguments[n];return i.forEach(function(n){var t;null!==(t=n)&&"object"==typeof t&&function(t,i){if(t)for(var n=Object.keys(t),e=0;e<n.length&&!1!==i(t[n[e]],n[e]);e++);}(n,function(t,i){void 0!==n[i]&&(e[i]=n[i])})}),e}function t(){var t={id:"json",name:"JSON",grammar:{main:[[n,/".*?[^\\]"(?=:)/],[e,m],[i,/\bnull\b/],[o,/[+-]?(\d+\.?\d*)([eE][+-]?\d+)?/],[u,/[{}[\]]/],[s,b],[f,/:/],[a,/,/],[h,p]]}};return y({id:t.id,language:t,lexer:new w(t)},{indent:[[/{$/,/^}/,t=["!string"]],[/\[$/,/^]/,t]],autoClose:[["[","]",t={close:t,skip:t,remove:t}],["{","}",t],['"','"',{close:"@quotes",skip:"@quotes",remove:"@quotes"}]]})}"undefined"!=typeof window&&window.RyuseiCode&&window.RyuseiCode.register(t())});