3 lines
8.2 KiB
JavaScript
3 lines
8.2 KiB
JavaScript
var m={};m.getAttrs=function(t,r,e){const n=/[^\t\n\f />"'=]/,s=" ",l="=",i=".",a="#",c=[];let o="",h="",u=!0,y=!1;for(let d=r+e.leftDelimiter.length;d<t.length;d++){if(t.slice(d,d+e.rightDelimiter.length)===e.rightDelimiter){o!==""&&c.push([o,h]);break}const g=t.charAt(d);if(g===l&&u){u=!1;continue}if(g===i&&o===""){t.charAt(d+1)===i?(o="css-module",d+=1):o="class",u=!1;continue}if(g===a&&o===""){o="id",u=!1;continue}if(g==='"'&&h===""){y=!0;continue}if(g==='"'&&y){y=!1;continue}if(g===s&&!y){if(o==="")continue;c.push([o,h]),o="",h="",u=!0;continue}if(!(u&&g.search(n)===-1)){if(u){o+=g;continue}h+=g}}if(e.allowedAttributes&&e.allowedAttributes.length){const d=e.allowedAttributes;return c.filter(function(g){const A=g[0];function x(p){return A===p||p instanceof RegExp&&p.test(A)}return d.some(x)})}return c};m.addAttrs=function(t,r){for(let e=0,n=t.length;e<n;++e){const s=t[e][0];s==="class"?r.attrJoin("class",t[e][1]):s==="css-module"?r.attrJoin("css-module",t[e][1]):r.attrPush(t[e])}return r};m.hasDelimiters=function(t,r){if(!t)throw new Error('Parameter `where` not passed. Should be "start", "end" or "only".');return function(e){const n=r.leftDelimiter.length+1+r.rightDelimiter.length;if(!e||typeof e!="string"||e.length<n)return!1;function s(h){const u=h.charAt(r.leftDelimiter.length)===".",y=h.charAt(r.leftDelimiter.length)==="#";return u||y?h.length>=n+1:h.length>=n}let l,i,a,c;const o=n-r.rightDelimiter.length;switch(t){case"start":a=e.slice(0,r.leftDelimiter.length),l=a===r.leftDelimiter?0:-1,i=l===-1?-1:e.indexOf(r.rightDelimiter,o),c=e.charAt(i+r.rightDelimiter.length),c&&r.rightDelimiter.indexOf(c)!==-1&&(i=-1);break;case"end":l=e.lastIndexOf(r.leftDelimiter),i=l===-1?-1:e.indexOf(r.rightDelimiter,l+o),i=i===e.length-r.rightDelimiter.length?i:-1;break;case"only":a=e.slice(0,r.leftDelimiter.length),l=a===r.leftDelimiter?0:-1,a=e.slice(e.length-r.rightDelimiter.length),i=a===r.rightDelimiter?e.length-r.rightDelimiter.length:-1;break;default:throw new Error(`Unexpected case ${t}, expected 'start', 'end' or 'only'`)}return l!==-1&&i!==-1&&s(e.substring(l,i+r.rightDelimiter.length))}};m.removeDelimiter=function(t,r){const e=D(r.leftDelimiter),n=D(r.rightDelimiter),s=new RegExp("[ \\n]?"+e+"[^"+e+n+"]+"+n+"$"),l=t.search(s);return l!==-1?t.slice(0,l):t};function D(t){return t.replace(/[-/\\^$*+?.()|[\]{}]/g,"\\$&")}m.escapeRegExp=D;m.getMatchingOpeningToken=function(t,r){if(t[r].type==="softbreak")return!1;if(t[r].nesting===0)return t[r];const e=t[r].level,n=t[r].type.replace("_close","_open");for(;r>=0;--r)if(t[r].type===n&&t[r].level===e)return t[r];return!1};const O=/[&<>"]/,E=/[&<>"]/g,k={"&":"&","<":"<",">":">",'"':"""};function w(t){return k[t]}m.escapeHtml=function(t){return O.test(t)?t.replace(E,w):t};const f=m;var T=t=>{const r=new RegExp("^ {0,3}[-*_]{3,} ?"+f.escapeRegExp(t.leftDelimiter)+"[^"+f.escapeRegExp(t.rightDelimiter)+"]");return[{name:"fenced code blocks",tests:[{shift:0,block:!0,info:f.hasDelimiters("end",t)}],transform:(e,n)=>{const s=e[n],l=s.info.lastIndexOf(t.leftDelimiter),i=f.getAttrs(s.info,l,t);f.addAttrs(i,s),s.info=f.removeDelimiter(s.info,t)}},{name:"inline nesting 0",tests:[{shift:0,type:"inline",children:[{shift:-1,type:e=>e==="image"||e==="code_inline"},{shift:0,type:"text",content:f.hasDelimiters("start",t)}]}],transform:(e,n,s)=>{const l=e[n].children[s],i=l.content.indexOf(t.rightDelimiter),a=e[n].children[s-1],c=f.getAttrs(l.content,0,t);f.addAttrs(c,a),l.content.length===i+t.rightDelimiter.length?e[n].children.splice(s,1):l.content=l.content.slice(i+t.rightDelimiter.length)}},{name:"tables",tests:[{shift:0,type:"table_close"},{shift:1,type:"paragraph_open"},{shift:2,type:"inline",content:f.hasDelimiters("only",t)}],transform:(e,n)=>{const s=e[n+2],l=f.getMatchingOpeningToken(e,n),i=f.getAttrs(s.content,0,t);f.addAttrs(i,l),e.splice(n+1,3)}},{name:"inline attributes",tests:[{shift:0,type:"inline",children:[{shift:-1,nesting:-1},{shift:0,type:"text",content:f.hasDelimiters("start",t)}]}],transform:(e,n,s)=>{const l=e[n].children[s],i=l.content,a=f.getAttrs(i,0,t),c=f.getMatchingOpeningToken(e[n].children,s-1);f.addAttrs(a,c),l.content=i.slice(i.indexOf(t.rightDelimiter)+t.rightDelimiter.length)}},{name:"list softbreak",tests:[{shift:-2,type:"list_item_open"},{shift:0,type:"inline",children:[{position:-2,type:"softbreak"},{position:-1,type:"text",content:f.hasDelimiters("only",t)}]}],transform:(e,n,s)=>{const i=e[n].children[s].content,a=f.getAttrs(i,0,t);let c=n-2;for(;e[c-1]&&e[c-1].type!=="ordered_list_open"&&e[c-1].type!=="bullet_list_open";)c--;f.addAttrs(a,e[c-1]),e[n].children=e[n].children.slice(0,-2)}},{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:f.hasDelimiters("only",t),children:e=>e.length===1},{shift:3,type:"paragraph_close"}],transform:(e,n)=>{const l=e[n+2].content,i=f.getAttrs(l,0,t),a=f.getMatchingOpeningToken(e,n);f.addAttrs(i,a),e.splice(n+1,3)}},{name:"list item end",tests:[{shift:-2,type:"list_item_open"},{shift:0,type:"inline",children:[{position:-1,type:"text",content:f.hasDelimiters("end",t)}]}],transform:(e,n,s)=>{const l=e[n].children[s],i=l.content,a=f.getAttrs(i,i.lastIndexOf(t.leftDelimiter),t);f.addAttrs(a,e[n-2]);const c=i.slice(0,i.lastIndexOf(t.leftDelimiter));l.content=_(c)!==" "?c:c.slice(0,-1)}},{name:`
|
|
{.a} softbreak then curly in start`,tests:[{shift:0,type:"inline",children:[{position:-2,type:"softbreak"},{position:-1,type:"text",content:f.hasDelimiters("only",t)}]}],transform:(e,n,s)=>{const l=e[n].children[s],i=f.getAttrs(l.content,0,t);let a=n+1;for(;e[a+1]&&e[a+1].nesting===-1;)a++;const c=f.getMatchingOpeningToken(e,a);f.addAttrs(i,c),e[n].children=e[n].children.slice(0,-2)}},{name:"horizontal rule",tests:[{shift:0,type:"paragraph_open"},{shift:1,type:"inline",children:e=>e.length===1,content:e=>e.match(r)!==null},{shift:2,type:"paragraph_close"}],transform:(e,n)=>{const s=e[n];s.type="hr",s.tag="hr",s.nesting=0;const l=e[n+1].content,i=l.lastIndexOf(t.leftDelimiter),a=f.getAttrs(l,i,t);f.addAttrs(a,s),s.markup=l,e.splice(n+1,2)}},{name:"end of block",tests:[{shift:0,type:"inline",children:[{position:-1,content:f.hasDelimiters("end",t),type:e=>e!=="code_inline"&&e!=="math_inline"}]}],transform:(e,n,s)=>{const l=e[n].children[s],i=l.content,a=f.getAttrs(i,i.lastIndexOf(t.leftDelimiter),t);let c=n+1;for(;e[c+1]&&e[c+1].nesting===-1;)c++;const o=f.getMatchingOpeningToken(e,c);f.addAttrs(a,o);const h=i.slice(0,i.lastIndexOf(t.leftDelimiter));l.content=_(h)!==" "?h:h.slice(0,-1)}}]};function _(t){return t.slice(-1)[0]}const v=T,C={leftDelimiter:"{",rightDelimiter:"}",allowedAttributes:[]};var S=function(r,e){let n=Object.assign({},C);n=Object.assign(n,e);const s=v(n);function l(i){const a=i.tokens;for(let c=0;c<a.length;c++)for(let o=0;o<s.length;o++){const h=s[o];let u=null;h.tests.every(d=>{const g=b(a,c,d);return g.j!==null&&(u=g.j),g.match})&&(h.transform(a,c,u),(h.name==="inline attributes"||h.name==="inline nesting 0")&&o--)}}r.core.ruler.before("linkify","curly_attributes",l)};function b(t,r,e){const n={match:!1,j:null},s=e.shift!==void 0?r+e.shift:e.position;if(e.shift!==void 0&&s<0)return n;const l=R(t,s);if(l===void 0)return n;for(const i of Object.keys(e))if(!(i==="shift"||i==="position")){if(l[i]===void 0)return n;if(i==="children"&&j(e.children)){if(l.children.length===0)return n;let a;const c=e.children,o=l.children;if(c.every(h=>h.position!==void 0)){if(a=c.every(h=>b(o,h.position,h).match),a){const h=I(c).position;n.j=h>=0?h:o.length+h}}else for(let h=0;h<o.length;h++)if(a=c.every(u=>b(o,h,u).match),a){n.j=h;break}if(a===!1)return n;continue}switch(typeof e[i]){case"boolean":case"number":case"string":if(l[i]!==e[i])return n;break;case"function":if(!e[i](l[i]))return n;break;case"object":if(M(e[i])){if(e[i].every(c=>c(l[i]))===!1)return n;break}default:throw new Error(`Unknown type of pattern test (key: ${i}). Test should be of type boolean, number, string, function or array of functions.`)}}return n.match=!0,n}function j(t){return Array.isArray(t)&&t.length&&t.every(r=>typeof r=="object")}function M(t){return Array.isArray(t)&&t.length&&t.every(r=>typeof r=="function")}function R(t,r){return r>=0?t[r]:t[t.length+r]}function I(t){return t.slice(-1)[0]||{}}export{S as m};
|