| 1 |
"use strict";import{createScanner}from"./scanner";export function format(e,t,n){let r,s,i,a,c;if(t){for(a=t.offset,c=a+t.length,i=a;i>0&&!isEOL(e,i-1);)i--;let f=c;for(;f<e.length&&!isEOL(e,f);)f++;s=e.substring(i,f),r=computeIndentLevel(s,n)}else s=e,r=0,i=0,a=0,c=e.length;const f=getEOL(n,e);let o,k=0,l=0;o=n.insertSpaces?repeat(" ",n.tabSize||4):"\t";let p=createScanner(s,!1),L=!1;function u(){return k>1?repeat(f,k)+repeat(o,r+l):f+repeat(o,r+l)}function g(){let e=p.scan();for(k=0;15===e||14===e;)14===e&&n.keepLines?k+=1:14===e&&(k=1),e=p.scan();return L=16===e||0!==p.getTokenError(),e}const h=[];function b(n,r,s){L||t&&!(r<c&&s>a)||e.substring(r,s)===n||h.push({offset:r,length:s-r,content:n})}let O=g();if(n.keepLines&&k>0&&b(repeat(f,k),0,0),17!==O){let e=p.getTokenOffset()+i;b(repeat(o,r),i,e)}for(;17!==O;){let e=p.getTokenOffset()+p.getTokenLength()+i,t=g(),r="",s=!1;for(;0===k&&(12===t||13===t);)b(" ",e,p.getTokenOffset()+i),e=p.getTokenOffset()+p.getTokenLength()+i,s=12===t,r=s?u():"",t=g();if(2===t)1!==O&&l--,n.keepLines&&k>0||!n.keepLines&&1!==O?r=u():n.keepLines&&(r=" ");else if(4===t)3!==O&&l--,n.keepLines&&k>0||!n.keepLines&&3!==O?r=u():n.keepLines&&(r=" ");else{switch(O){case 3:case 1:l++,r=n.keepLines&&k>0||!n.keepLines?u():" ";break;case 5:r=n.keepLines&&k>0||!n.keepLines?u():" ";break;case 12:r=u();break;case 13:k>0?r=u():s||(r=" ");break;case 6:n.keepLines&&k>0?r=u():s||(r=" ");break;case 10:n.keepLines&&k>0?r=u():6!==t||s||(r="");break;case 7:case 8:case 9:case 11:case 2:case 4:n.keepLines&&k>0?r=u():12!==t&&13!==t||s?5!==t&&17!==t&&(L=!0):r=" ";break;case 16:L=!0}k>0&&(12===t||13===t)&&(r=u())}17===t&&(r=n.keepLines&&k>0?u():n.insertFinalNewline?f:""),b(r,e,p.getTokenOffset()+i),O=t}return h}function repeat(e,t){let n="";for(let r=0;r<t;r++)n+=e;return n}function computeIndentLevel(e,t){let n=0,r=0;const s=t.tabSize||4;for(;n<e.length;){let t=e.charAt(n);if(" "===t)r++;else{if("\t"!==t)break;r+=s}n++}return Math.floor(r/s)}function getEOL(e,t){for(let e=0;e<t.length;e++){const n=t.charAt(e);if("\r"===n)return e+1<t.length&&"\n"===t.charAt(e+1)?"\r\n":"\r";if("\n"===n)return"\n"}return e&&e.eol||"\n"}export function isEOL(e,t){return-1!=="\r\n".indexOf(e.charAt(t))} |