UNPKG

unified-doc-util-mark

Version:
3 lines (2 loc) 1.77 kB
import t from"unified-doc-util-text-offsets";import e from"unist-util-visit";import n from"hastscript";export default function(s,a=[]){if(0===a.length)return s;const r=t(s),o=function(t){const e=new Set;let n=!1;return t.forEach(t=>{const{id:s,start:a,end:r}=t;s&&e.add(s),a>r&&(n=!0)}),e.size!==t.length&&console.warn('Marks must contain unique "id" fields'),n&&console.warn('Marks should have "start" < "end"'),t.slice().sort((t,e)=>t.start<e.start?-1:t.start>e.start||t.end<e.end?1:t.end>e.end?-1:0)}(a);return e(r,"text",(t,s,a)=>{if(!t.data||!t.data.textOffset)return e.CONTINUE;const r=function(t,e){const{start:n,end:s}=t.data.textOffset,a=[];for(const t of e){const{start:e,end:r}=t;if(e>=s)break;r<=n||a.push({...t,start:Math.max(e,n),end:Math.min(r,s)})}return a}(t,o);if(0===r.length)return e.CONTINUE;const c=new Set,d=function(t,e=new Set){return t.map(t=>{const{marks:s,value:a}=t;let r={type:"text",value:a};return s.slice().reverse().forEach(t=>{const{id:s,classNames:a,dataset:o={},style:c}=t,d={};Object.keys(o).forEach(t=>{const e=`data${t[0].toUpperCase()}${t.slice(1)}`;d[e]=o[t]}),d.className=a,d.dataMarkId=s,d.style=c,e.has(s)||(d.id=s,e.add(s)),r=n("mark",d,r)}),r})}(function(t,e){const{start:n,end:s}=t.data.textOffset,a=new Set;a.add(n),a.add(s),e.forEach(t=>{a.add(t.start),a.add(t.end)});const r=Array.from(a).sort((t,e)=>t-e),o=[];for(let t=0;t<r.length-1;t++)o.push([r[t],r[t+1]]);const c=[];return o.forEach(([s,a])=>{const r=s-n,o=a-n,d=t.value.slice(r,o);if(d&&r>=0&&o>r){const t={marks:e.filter(t=>t.end>s&&t.start<a||t.start<a&&t.end>s),textOffset:[s,a],value:d};c.push(t)}}),c}(t,r),c),i=a.children,f=i.indexOf(t);return a.children=i.slice(0,f).concat(d).concat(i.slice(f+1)),e.CONTINUE}),r} //# sourceMappingURL=index.modern.js.map