UNPKG

@gdquest/gd-exercise

Version:

Core package that handles logic for the GDExercise project.

3 lines (2 loc) 3.14 kB
import"./chunk-2YCYAEJC.min.mjs";import{Facet as F}from"@codemirror/state";import{EditorView as b}from"@codemirror/view";import{EditorSelection as z,EditorState as T}from"@codemirror/state";import{syntaxTree as k}from"@codemirror/language";import{EditorSelection as u}from"@codemirror/state";import{RangeSetBuilder as y}from"@codemirror/state";import{Decoration as D,ViewPlugin as E}from"@codemirror/view";var d=F.define({combine:e=>e.length>0?e[e.length-1]:"start-freeze"}),h=F.define({combine:e=>e.length>0?e[e.length-1]:"end-freeze"}),C=b.theme({".cm-frozen":{opacity:.75,fontStyle:"italic"}});function S(e,o,f){let c=k(e).cursor(),n=e.languageDataAt("commentTokens",0),t=[],r=0;do{if(c.name!=="Comment")continue;let i=0,m=0,a=e.sliceDoc(c.from,c.to),g="";for(let l of n)if(l.line!=null){if(!a.startsWith(l.line))continue;i=l.line.length}else if(l.block!=null){if(!(a.startsWith(l.block.open)&&a.endsWith(l.block.close)))continue;i=l.block.open.length,m=-l.block.close.length}g=a.slice(i,a.length+m).trim(),g===o?r=c.from:g===f&&(t.push(u.range(r,c.to)),r=0)}while(c.next());return r>0&&t.push(u.range(r,e.doc.toString().length)),t}function p(e){let o=new Set;for(let f=e.from;f<=e.to;f++)o.add(f);return o}function w(e,o){let f=Array.from(p(e));for(let s of f)o.delete(s)}function x(e){let o=Array.from(e).sort((t,r)=>t-r),f=o.reduce((t,r,i)=>i===0?r:Math.min(t,r),0),s=o.reduce((t,r,i)=>i===0?r:Math.max(t,r),0),c=[],n=null;for(let t=f;t<s;t++){if(o.find(i=>i===t)==null&&n!=null){c.push(n),n=null;continue}n==null?n=u.range(t,t):n=u.range(n.from,t)}return n!=null&&(c.push(n),n=null),c}function v(){return T.transactionFilter.of(e=>{if(!(e.selection!=null||e.docChanged))return e;let o=S(e.startState,e.startState.facet(d),e.startState.facet(h)),f=!1;if(e.docChanged){e.changes.iterChanges((n,t,r,i,m)=>{let a=Math.max(t-n,i-r);for(let g=0;g<o.length;g++){let l=o[g];a>0&&r<l.from&&(l=z.range(l.from+a,l.to+a),o[g]=l)}});for(let n of o){switch(e.changes.desc.touchesRange(n.from,n.to)){case"cover":case!0:f=!0;break;case!1:default:}if(f)break}}let s=[];if(e.selection!=null){let n=e.newSelection;f&&(n=e.startState.selection);for(let i of n.ranges){let m=p(i);for(let a of o)w(a,m);s.push(...x(m))}let t=i=>i.from===0;if(o.find(t)!=null){let i=s.find(t);i!=null&&(s=s.filter(m=>m!==i))}}return{...e,...s.length>0?{selection:z.create(s)}:{},...f?{changes:[],selection:e.startState.selection}:{}}})}var A=D.line({attributes:{class:"cm-frozen"}});function R(e){let o=new y,f=S(e.state,e.state.facet(d),e.state.facet(h));for(let{from:s,to:c}of e.visibleRanges)for(let n=s;n<=c;){let t=e.state.doc.lineAt(n);for(let r of f)(r.from<t.from&&t.from<r.to||r.from<t.to&&t.to<r.to)&&o.add(t.from,t.from,A);n=t.to+1}return o.finish()}var O=class{constructor(e){this.decorations=R(e)}update(e){(e.docChanged||e.viewportChanged)&&(this.decorations=R(e.view))}};function P(){return E.fromClass(O,{decorations:o=>o.decorations})}var Z=d,M=h;function G(e="start-freeze",o="end-freeze"){let f=Z.of(e),s=M.of(o),c=v(),n=P();return[c,n,f,s,C]}export{h as endFreezeComment,G as freeze,d as startFreezeComment}; //# sourceMappingURL=dist-7LWU2OZA.min.mjs.map