3 lines
8.8 KiB
JavaScript
3 lines
8.8 KiB
JavaScript
const e=e=>!(e===9||e===10||e===12||e===32||e===47||e===62||e===34||e===39||e===61),t=(t,n,r)=>{let i=``,a=``,o=!0,s=!1,c=[];for(let r=n[0];r<n[1];r++){let n=t.charCodeAt(r);if(n===61&&o){o=!1;continue}if(n===46&&i===``){t.charCodeAt(r+1)===46?(i=`css-module`,r++):i=`class`,o=!1;continue}if(n===35&&i===``){i=`id`,o=!1;continue}if(n===34&&a===``&&!s){s=!0;continue}if(n===34&&s){s=!1;continue}if(n===32&&!s){if(i===``)continue;c.push([i,a]),i=``,a=``,o=!0;continue}if(!(o&&!e(n))){if(o){i+=String.fromCharCode(n);continue}a+=String.fromCharCode(n)}}return i!==``&&c.push([i,a]),r.length>0?c.filter(([e])=>r.some(t=>t instanceof RegExp?t.test(e):t===e)):c},n=(e,n,r,i)=>{e&&t(n,r,i).forEach(([t,n])=>{switch(t){case`class`:e.attrJoin(`class`,n);break;case`css-module`:e.attrJoin(`css-module`,n);break;default:e.attrPush([t,n])}})},r=(e,t)=>{if(![`start`,`end`,`only`].includes(t))throw Error(`Invalid 'where' parameter: ${t}. Expected 'start', 'end', or 'only'.`);let n=e.left,r=e.right,i=n.length,a=r.length,o=i+1+a;return e=>{if(typeof e!=`string`||e.length<o)return!1;let s,c;if(t===`start`){if(!e.startsWith(n)||(s=i,c=e.indexOf(r,i+1),c===-1))return!1;let t=c+a;if(t<e.length&&r.includes(e.charAt(t)))return!1}else if(t===`end`){if(s=e.lastIndexOf(n),s===-1||(c=e.indexOf(r,s+i+1),s+=i,c===-1||c+a!==e.length))return!1}else{if(!e.startsWith(n)||!e.endsWith(r))return!1;s=i,c=e.length-a}let l=e.charCodeAt(s),u=c-s;return(l===46||l===35?u>=2:u>=1)?[s,c]:!1}},i=(e,t)=>{let n=e[t];if(n.type===`softbreak`)return null;if(n.nesting===0)return n;let r=n.level,i=n.type.replace(`_close`,`_open`);for(;t>=0;){let n=e[t];if(n.type===i&&n.level===r)return n;t--}return null},a=(e,t)=>t>=0?e[t]:e[e.length+t],o=(e,t,n)=>{let r={match:!1,position:null,range:null},i=typeof n.shift==`number`,s=i?t+n.shift:n.position;if(i&&s<0)return r;let c=a(e,s);if(!c)return r;let l=Object.keys(n),u=l.length;for(let e=0;e<u;e++){let t=l[e];if(t===`shift`||t===`position`)continue;if(c[t]==null)return r;if(t===`children`&&Array.isArray(n.children)){if(!c.children?.length)return r;let e=n.children,t=c.children,i,a=null;if(e.every(e=>typeof e.position==`number`)){if(i=e.every(e=>{let n=o(t,e.position,e);return n.match?(n.range&&(a=n.range),!0):!1}),i){let{position:n}=e[e.length-1];r.position=n>=0?n:t.length+n,r.range=a}}else for(let n=0;n<t.length;n++)if(i=e.every(e=>{let r=o(t,n,e);return r.match?(r.range&&(a=r.range),!0):!1}),i){r.position=n,a&&(r.range=a);break}if(i===!1)return r;continue}let i=n[t];switch(typeof i){case`boolean`:case`number`:case`string`:if(c[t]!==i)return r;break;case`function`:{let e=i(c[t]);if(!e)return r;Array.isArray(e)&&(r.range=e);break}default:throw Error(`Unknown type of pattern test (key: ${t}). Test should be of type boolean, number, string or function.`)}}return r.match=!0,r},s=e=>e,c=(e,t)=>{let a=e.utils.isSpace;return s({name:`end of block`,tests:[{shift:0,type:`inline`,children:[{position:-1,content:r(t,`end`),type:e=>e!==`code_inline`&&e!==`math_inline`}]}],transform:(e,r,o,s)=>{let c=s[0]-t.left.length,l=e[r].children[o],{content:u}=l,d=a(u.charCodeAt(c-1)),f=r+1;for(;e[f+1]?.nesting===-1;)f++;n(i(e,f),u,s,t.allowed),l.content=u.slice(0,d?c-1:c)}})},l=(e,t)=>{let i=e.utils.isSpace;return s({name:`code-block`,tests:[{shift:0,block:!0,info:r(t,`end`)}],transform:(e,r,a,o)=>{let s=o[0]-t.left.length,c=e[r],{info:l}=c,u=i(l.charCodeAt(s-1));n(c,l,o,t.allowed),c.info=l.slice(0,u?s-1:s)}})},u=(e,t)=>{let a=e.utils.isSpace;return s({name:`end of block`,tests:[{shift:-1,type:`heading_open`},{shift:0,type:`inline`,children:[{position:-1,content:r(t,`end`),type:e=>e!==`code_inline`&&e!==`math_inline`}]}],transform:(e,r,o,s)=>{let c=s[0]-t.left.length,l=e[r].children[o],{content:u}=l,d=a(u.charCodeAt(c-1));n(i(e,r+1),u,s,t.allowed),l.content=u.slice(0,d?c-1:c)}})},d=e=>[s({name:`inline nesting self-close`,tests:[{shift:0,type:`inline`,children:[{shift:-1,type:e=>e===`image`||e===`code_inline`},{shift:0,type:`text`,content:r(e,`start`)}]}],transform:(t,r,i,a)=>{let o=t[r].children,s=o[i],c=o[i-1],l=e.right.length+a[1];n(c,s.content,a,e.allowed),s.content.length===l?o.splice(i,1):s.content=s.content.slice(l)}}),s({name:`inline attributes`,tests:[{shift:0,type:`inline`,children:[{shift:-1,nesting:-1},{shift:0,type:`text`,content:r(e,`start`)}]}],transform:(t,r,a,o)=>{let s=t[r].children,c=s[a],{content:l}=c,u=e.right.length+o[1];n(i(s,a-1),l,o,e.allowed),c.content=l.slice(u)}})],f=(e,t)=>{let a=e.utils.isSpace,o=t.allowed;return[s({name:`list softbreak`,tests:[{shift:-2,type:`list_item_open`},{shift:0,type:`inline`,children:[{position:-2,type:`softbreak`},{position:-1,type:`text`,content:r(t,`only`)}]}],transform:(e,t,r,i)=>{let a=e[t].children,s=a[r],c=t-2;for(;e[c-1]?.type!==`ordered_list_open`&&e[c-1].type!==`bullet_list_open`;)c--;n(e[c-1],s.content,i,o),e[t].children=a.slice(0,-2)}}),s({name:`list double softbreak`,tests:[{shift:0,type:e=>e===`bullet_list_close`||e===`ordered_list_close`},{shift:1,type:`paragraph_open`},{shift:2,type:`inline`,content:r(t,`only`),children:e=>e.length===1},{shift:3,type:`paragraph_close`}],transform:(e,t,r,a)=>{let s=e[t+2];n(i(e,t),s.content,a,o),e.splice(t+1,3)}}),s({name:`list item end`,tests:[{shift:-2,type:`list_item_open`},{shift:0,type:`inline`,children:[{position:-1,type:`text`,content:r(t,`end`)}]}],transform:(e,r,i,s)=>{let c=e[r].children[i],l=c.content,u=s[0]-t.left.length,d=a(l.charCodeAt(u-1));n(e[r-2],l,s,o),c.content=l.slice(0,d?u-1:u)}})]},p=e=>s({name:`
|
|
{.a} softbreak then curly in start`,tests:[{shift:0,type:`inline`,children:[{position:-2,type:`softbreak`},{position:-1,type:`text`,content:r(e,`only`)}]}],transform:(t,r,a,o)=>{let s=t[r].children,c=s[a],l=r+1;for(;t[l+1]?.nesting===-1;)l++;n(i(t,l),c.content,o,e.allowed),t[r].children=s.slice(0,-2)}}),m=(e,t)=>{let i=e.utils.isSpace;return s({name:`horizontal rule`,tests:[{shift:0,type:`paragraph_open`},{shift:1,type:`inline`,children:e=>e.length===1,content:e=>{let n=0,a,o=e.charCodeAt(n++);if(o!==45&&o!==42&&o!==95)return!1;let s=1;for(;n<e.length&&(a=e.charCodeAt(n++),a===o);)s++;return s<3?!1:(i(e.charCodeAt(n-1))||n--,r(t,`end`)(e))}},{shift:2,type:`paragraph_close`}],transform:(e,r,i,a)=>{let o=e[r],{content:s}=e[r+1];o.type=`hr`,o.tag=`hr`,o.nesting=0,n(o,s,a,t.allowed),o.markup=s,e.splice(r+1,2)}})},h=(e,t)=>{let a=e.utils.isSpace,o=t.allowed;return[s({name:`table`,tests:[{shift:0,type:`table_close`},{shift:1,type:`paragraph_open`},{shift:2,type:`inline`,content:r(t,`only`)}],transform:(e,t,r,a)=>{let s=e[t+2];n(i(e,t),s.content,a,o),e.splice(t+1,3)}}),s({name:`table cell attributes`,tests:[{shift:-1,type:e=>e===`td_open`||e===`th_open`},{shift:0,type:`inline`,children:[{shift:0,type:`text`,content:r(t,`end`)}]}],transform:(e,r,i,s)=>{let c=s[0]-t.left.length,l=e[r].children[i],u=e[r-1],{content:d}=l,f=a(d.charCodeAt(c-1));n(u,d,s,o),l.content=d.slice(0,f?c-1:c)}}),s({name:`table thead metadata`,tests:[{shift:0,type:`tr_close`},{shift:1,type:`thead_close`},{shift:2,type:`tbody_open`}],transform:(e,t)=>{let n=i(e,t),r=e[t-1],a=0,o=t-1;for(;o>0;){let t=e[o];if(t===n){let t=e[o-1];t.meta={...t.meta,columnCount:a};break}t.level===r.level&&t.type===r.type&&a++,o--}let s=e[t+2];s.meta={...s.meta,columnCount:a}}}),s({name:`table tbody calculate`,tests:[{shift:0,type:`tbody_close`,hidden:!1}],transform:(e,t)=>{let n=t-2;for(;n>=0&&e[n].type!==`tbody_open`;)n--;let r=e[n].meta.columnCount;if(r<2)return;let i=Array.from({length:r}).fill(0),a=[],o=n+1;for(;o<t;){let n=o,s=n+1;for(;s<t&&e[s].type!==`tr_close`;)s++;let c=[],l=n+1;for(;l<s;){let t=l+1;for(;t<s&&e[t].type!==`td_close`&&e[t].type!==`th_close`;)t++;c.push([l,t]),l=t+1}let u=0,d=0;for(;d<r;){if(i[d]>0){i[d]--,a.push(c[u]),u++,d++;continue}let t=e[c[u][0]],n=Number(t.attrGet(`colspan`))||1,o=Number(t.attrGet(`rowspan`))||1;u++;let s=0;for(let e=0;e<n;e++)if(d+e<r)if(i[d+e]===0)s++;else break;n>1&&s<n&&t.attrSet(`colspan`,String(s));for(let e=0;e<s;e++)i[d+e]=o-1;let l=s-1;if(l>0)for(let e=0;e<l;e++)a.push(c[u]),u++;d+=s}o=s+1}a.sort((e,t)=>t[0]-e[0]);for(let[t,n]of a)e.splice(t,n-t+1)}})]},g=[`fence`,`inline`,`table`,`list`,`heading`,`hr`,`softbreak`,`block`],_=(e,t)=>{let n=t.rule===!1?[]:Array.isArray(t.rule)?t.rule.filter(e=>g.includes(e)):g,r=[];return n.includes(`fence`)&&r.push(l(e,t)),n.includes(`inline`)&&r.push(...d(t)),n.includes(`table`)&&r.push(...h(e,t)),n.includes(`list`)&&r.push(...f(e,t)),n.includes(`softbreak`)&&r.push(p(t)),n.includes(`hr`)&&r.push(m(e,t)),n.includes(`block`)?r.push(c(e,t)):n.includes(`heading`)&&r.push(u(e,t)),r},v=(e,{left:t=`{`,right:n=`}`,allowed:r=[],rule:i=`all`}={})=>{let a=_(e,{left:t,right:n,allowed:r,rule:i});e.core.ruler.before(`linkify`,`attrs`,e=>{let t=e.tokens;for(let e=0;e<t.length;e++)for(let n=0;n<a.length;n++){let r=a[n],i=null,s=null;r.tests.every(n=>{let r=o(t,e,n);return r.position!=null&&({position:i}=r),r.range&&(s=r.range),r.match})&&(r.transform(t,e,i,s),(r.name===`inline attributes`||r.name===`inline nesting self-close`)&&n--)}})};export{v as attrs};
|
|
//# sourceMappingURL=index.js.map
|