Repository navigation
Expand file tree
/
Copy pathemmet.es.js
More file actions
1 lines (1 loc) · 101 KB
/
Copy pathemmet.es.js
File metadata and controls
1 lines (1 loc) · 101 KB
1
function isNumber$1(code){return code>47&&code<58}function isAlpha$1(code,from,to){return to=to||90,(code&=-33)>=(from=from||65)&&code<=to}function isAlphaNumericWord(code){return isNumber$1(code)||isAlphaWord(code)}function isAlphaWord(code){return 95===code||isAlpha$1(code)}function isUmlaut(code){return 196===code||214==code||220===code||228===code||246===code||252===code}function isWhiteSpace$3(code){return 32===code||9===code||160===code}function isSpace(code){return isWhiteSpace$3(code)||10===code||13===code}function isQuote$2(code){return 39===code||34===code}class Scanner{constructor(str,start,end){null==end&&"string"==typeof str&&(end=str.length),this.string=str,this.pos=this.start=start||0,this.end=end||0}eof(){return this.pos>=this.end}limit(start,end){return new Scanner(this.string,start,end)}peek(){return this.string.charCodeAt(this.pos)}next(){if(this.pos<this.string.length)return this.string.charCodeAt(this.pos++)}eat(match){const ch=this.peek(),ok="function"==typeof match?match(ch):ch===match;return ok&&this.next(),ok}eatWhile(match){const start=this.pos;for(;!this.eof()&&this.eat(match););return this.pos!==start}backUp(n){this.pos-=n||1}current(){return this.substring(this.start,this.pos)}substring(start,end){return this.string.slice(start,end)}error(message,pos=this.pos){return new ScannerError(`${message} at ${pos+1}`,pos,this.string)}}class ScannerError extends Error{constructor(message,pos,str){super(message),this.pos=pos,this.string=str}}function tokenScanner$1(tokens){return{tokens:tokens,start:0,pos:0,size:tokens.length}}function peek$3(scanner){return scanner.tokens[scanner.pos]}function next(scanner){return scanner.tokens[scanner.pos++]}function slice(scanner,from=scanner.start,to=scanner.pos){return scanner.tokens.slice(from,to)}function readable$1(scanner){return scanner.pos<scanner.size}function consume$2(scanner,test){const token=peek$3(scanner);return!(!token||!test(token))&&(scanner.pos++,!0)}function error$1(scanner,message,token=peek$3(scanner)){token&&null!=token.start&&(message+=` at ${token.start}`);const err=new Error(message);return err.pos=token&&token.start,err}function abbreviation(abbr,options={}){const scanner=tokenScanner$1(abbr),result=statements(scanner,options);if(readable$1(scanner))throw error$1(scanner,"Unexpected character");return result}function statements(scanner,options){const result={type:"TokenGroup",elements:[]};let ctx=result,node;const stack=[];for(;readable$1(scanner)&&(node=element$2(scanner,options)||group(scanner,options));)if(ctx.elements.push(node),consume$2(scanner,isChildOperator))stack.push(ctx),ctx=node;else{if(consume$2(scanner,isSiblingOperator$1))continue;if(consume$2(scanner,isClimbOperator))do{stack.length&&(ctx=stack.pop())}while(consume$2(scanner,isClimbOperator))}return result}function group(scanner,options){if(consume$2(scanner,isGroupStart)){const result=statements(scanner,options),token=next(scanner);return isBracket$2(token,"group",!1)&&(result.repeat=repeater$1(scanner)),result}}function element$2(scanner,options){let attr;const elem={type:"TokenElement",name:void 0,attributes:void 0,value:void 0,repeat:void 0,selfClose:!1,elements:[]};for(elementName(scanner,options)&&(elem.name=slice(scanner));readable$1(scanner);)if(scanner.start=scanner.pos,elem.repeat||isEmpty(elem)||!consume$2(scanner,isRepeater))if(!elem.value&&text(scanner))elem.value=getText(scanner);else{if(!(attr=shortAttribute(scanner,"id",options)||shortAttribute(scanner,"class",options)||attributeSet(scanner))){!isEmpty(elem)&&consume$2(scanner,isCloseOperator)&&(elem.selfClose=!0,!elem.repeat&&consume$2(scanner,isRepeater)&&(elem.repeat=scanner.tokens[scanner.pos-1]));break}elem.attributes?elem.attributes=elem.attributes.concat(attr):elem.attributes=Array.isArray(attr)?attr.slice():[attr]}else elem.repeat=scanner.tokens[scanner.pos-1];return isEmpty(elem)?void 0:elem}function attributeSet(scanner){if(consume$2(scanner,isAttributeSetStart)){const attributes=[];let attr;for(;readable$1(scanner);)if(attr=attribute(scanner))attributes.push(attr);else{if(consume$2(scanner,isAttributeSetEnd))break;if(!consume$2(scanner,isWhiteSpace$2))throw error$1(scanner,`Unexpected "${peek$3(scanner).type}" token`)}return attributes}}function shortAttribute(scanner,type,options){if(isOperator$1(peek$3(scanner),type)){scanner.pos++;let count=1;for(;isOperator$1(peek$3(scanner),type);)scanner.pos++,count++;const attr={name:[createLiteral$1(type)]};return count>1&&(attr.multiple=!0),options.jsx&&text(scanner)?(attr.value=getText(scanner),attr.expression=!0):attr.value=literal$1$1(scanner)?slice(scanner):void 0,attr}}function attribute(scanner){if(quoted(scanner))return{value:slice(scanner)};if(literal$1$1(scanner,!0)){const name=slice(scanner);let value;return consume$2(scanner,isEquals)&&(quoted(scanner)||literal$1$1(scanner,!0))&&(value=slice(scanner)),{name:name,value:value}}}function repeater$1(scanner){return isRepeater(peek$3(scanner))?scanner.tokens[scanner.pos++]:void 0}function quoted(scanner){const start=scanner.pos,quote=peek$3(scanner);if(isQuote$1(quote)){for(scanner.pos++;readable$1(scanner);)if(isQuote$1(next(scanner),quote.single))return scanner.start=start,!0;throw error$1(scanner,"Unclosed quote",quote)}return!1}function literal$1$1(scanner,allowBrackets){const start=scanner.pos,brackets={attribute:0,expression:0,group:0};for(;readable$1(scanner);){const token=peek$3(scanner);if(brackets.expression)isBracket$2(token,"expression")&&(brackets[token.context]+=token.open?1:-1);else{if(isQuote$1(token)||isOperator$1(token)||isWhiteSpace$2(token)||isRepeater(token))break;if(isBracket$2(token)){if(!allowBrackets)break;if(token.open)brackets[token.context]++;else{if(!brackets[token.context])break;brackets[token.context]--}}}scanner.pos++}return start!==scanner.pos&&(scanner.start=start,!0)}function elementName(scanner,options){const start=scanner.pos;if(options.jsx&&consume$2(scanner,isCapitalizedLiteral))for(;readable$1(scanner);){const{pos:pos}=scanner;if(!consume$2(scanner,isClassNameOperator)||!consume$2(scanner,isCapitalizedLiteral)){scanner.pos=pos;break}}for(;readable$1(scanner)&&consume$2(scanner,isElementName$1););return scanner.pos!==start&&(scanner.start=start,!0)}function text(scanner){const start=scanner.pos;if(consume$2(scanner,isTextStart)){let brackets=0;for(;readable$1(scanner);){const token=next(scanner);if(isBracket$2(token,"expression"))if(token.open)brackets++;else{if(!brackets)break;brackets--}}return scanner.start=start,!0}return!1}function getText(scanner){let from=scanner.start,to=scanner.pos;return isBracket$2(scanner.tokens[from],"expression",!0)&&from++,isBracket$2(scanner.tokens[to-1],"expression",!1)&&to--,slice(scanner,from,to)}function isBracket$2(token,context,isOpen){return Boolean(token&&"Bracket"===token.type&&(!context||token.context===context)&&(null==isOpen||token.open===isOpen))}function isOperator$1(token,type){return Boolean(token&&"Operator"===token.type&&(!type||token.operator===type))}function isQuote$1(token,isSingle){return Boolean(token&&"Quote"===token.type&&(null==isSingle||token.single===isSingle))}function isWhiteSpace$2(token){return Boolean(token&&"WhiteSpace"===token.type)}function isEquals(token){return isOperator$1(token,"equal")}function isRepeater(token){return Boolean(token&&"Repeater"===token.type)}function isLiteral$2(token){return"Literal"===token.type}function isCapitalizedLiteral(token){if(isLiteral$2(token)){const ch=token.value.charCodeAt(0);return ch>=65&&ch<=90}return!1}function isElementName$1(token){return"Literal"===token.type||"RepeaterNumber"===token.type||"RepeaterPlaceholder"===token.type}function isClassNameOperator(token){return isOperator$1(token,"class")}function isAttributeSetStart(token){return isBracket$2(token,"attribute",!0)}function isAttributeSetEnd(token){return isBracket$2(token,"attribute",!1)}function isTextStart(token){return isBracket$2(token,"expression",!0)}function isGroupStart(token){return isBracket$2(token,"group",!0)}function createLiteral$1(value){return{type:"Literal",value:value}}function isEmpty(elem){return!elem.name&&!elem.value&&!elem.attributes}function isChildOperator(token){return isOperator$1(token,"child")}function isSiblingOperator$1(token){return isOperator$1(token,"sibling")}function isClimbOperator(token){return isOperator$1(token,"climb")}function isCloseOperator(token){return isOperator$1(token,"close")}var Chars$3;function escaped(scanner){return!!scanner.eat(Chars$3.Escape)&&(scanner.start=scanner.pos,scanner.eof()||scanner.pos++,!0)}function tokenize$1(source){const scanner=new Scanner(source),result=[],ctx={group:0,attribute:0,expression:0,quote:0};let ch=0,token;for(;!scanner.eof();){if(ch=scanner.peek(),!(token=getToken$1(scanner,ctx)))throw scanner.error("Unexpected character");result.push(token),"Quote"===token.type?ctx.quote=ch===ctx.quote?0:ch:"Bracket"===token.type&&(ctx[token.context]+=token.open?1:-1)}return result}function getToken$1(scanner,ctx){return field$2(scanner,ctx)||repeaterPlaceholder(scanner)||repeaterNumber(scanner)||repeater(scanner)||whiteSpace$1(scanner)||literal$2(scanner,ctx)||operator$1(scanner)||quote(scanner)||bracket$1(scanner)}function literal$2(scanner,ctx){const start=scanner.pos,expressionStart=ctx.expression;let value="";for(;!scanner.eof();){if(escaped(scanner)){value+=scanner.current();continue}const ch=scanner.peek();if(ch===Chars$3.Slash&&!ctx.quote&&!ctx.expression&&!ctx.attribute){const prev=scanner.string.charCodeAt(scanner.pos-1),next=scanner.string.charCodeAt(scanner.pos+1);if(isNumber$1(prev)&&isNumber$1(next)){value+=scanner.string[scanner.pos++];continue}}if(ch===ctx.quote||ch===Chars$3.Dollar||isAllowedOperator(ch,ctx))break;if(expressionStart){if(ch===Chars$3.CurlyBracketOpen)ctx.expression++;else if(ch===Chars$3.CurlyBracketClose){if(!(ctx.expression>expressionStart))break;ctx.expression--}}else if(!ctx.quote){if(!ctx.attribute&&!isElementName(ch))break;if(isAllowedSpace(ch,ctx)||isAllowedRepeater(ch,ctx)||isQuote$2(ch)||bracketType(ch))break}value+=scanner.string[scanner.pos++]}if(start!==scanner.pos)return scanner.start=start,{type:"Literal",value:value,start:start,end:scanner.pos}}function whiteSpace$1(scanner){const start=scanner.pos;if(scanner.eatWhile(isSpace))return{type:"WhiteSpace",start:start,end:scanner.pos,value:scanner.substring(start,scanner.pos)}}function quote(scanner){const ch=scanner.peek();if(isQuote$2(ch))return{type:"Quote",single:ch===Chars$3.SingleQuote,start:scanner.pos++,end:scanner.pos}}function bracket$1(scanner){const ch=scanner.peek(),context=bracketType(ch);if(context)return{type:"Bracket",open:isOpenBracket$2(ch),context:context,start:scanner.pos++,end:scanner.pos}}function operator$1(scanner){const op=operatorType$1(scanner.peek());if(op)return{type:"Operator",operator:op,start:scanner.pos++,end:scanner.pos}}function repeater(scanner){const start=scanner.pos;if(scanner.eat(Chars$3.Asterisk)){scanner.start=scanner.pos;let count=1,implicit=!1;return scanner.eatWhile(isNumber$1)?count=Number(scanner.current()):implicit=!0,{type:"Repeater",count:count,value:0,implicit:implicit,start:start,end:scanner.pos}}}function repeaterPlaceholder(scanner){const start=scanner.pos;if(scanner.eat(Chars$3.Dollar)&&scanner.eat(Chars$3.Hash))return{type:"RepeaterPlaceholder",value:void 0,start:start,end:scanner.pos};scanner.pos=start}function repeaterNumber(scanner){const start=scanner.pos;if(scanner.eatWhile(Chars$3.Dollar)){const size=scanner.pos-start;let reverse=!1,base=1,parent=0;if(scanner.eat(Chars$3.At)){for(;scanner.eat(Chars$3.Climb);)parent++;reverse=scanner.eat(Chars$3.Dash),scanner.start=scanner.pos,scanner.eatWhile(isNumber$1)&&(base=Number(scanner.current()))}return scanner.start=start,{type:"RepeaterNumber",size:size,reverse:reverse,base:base,parent:parent,start:start,end:scanner.pos}}}function field$2(scanner,ctx){const start=scanner.pos;if((ctx.expression||ctx.attribute)&&scanner.eat(Chars$3.Dollar)&&scanner.eat(Chars$3.CurlyBracketOpen)){let index;scanner.start=scanner.pos;let name="";if(scanner.eatWhile(isNumber$1)?(index=Number(scanner.current()),name=scanner.eat(Chars$3.Colon)?consumePlaceholder$2(scanner):""):isAlpha$1(scanner.peek())&&(name=consumePlaceholder$2(scanner)),scanner.eat(Chars$3.CurlyBracketClose))return{type:"Field",index:index,name:name,start:start,end:scanner.pos};throw scanner.error("Expecting }")}scanner.pos=start}function consumePlaceholder$2(stream){const stack=[];for(stream.start=stream.pos;!stream.eof();)if(stream.eat(Chars$3.CurlyBracketOpen))stack.push(stream.pos);else if(stream.eat(Chars$3.CurlyBracketClose)){if(!stack.length){stream.pos--;break}stack.pop()}else stream.pos++;if(stack.length)throw stream.pos=stack.pop(),stream.error("Expecting }");return stream.current()}function isAllowedOperator(ch,ctx){const op=operatorType$1(ch);return!(!op||ctx.quote||ctx.expression)&&(!ctx.attribute||"equal"===op)}function isAllowedSpace(ch,ctx){return isSpace(ch)&&!ctx.expression}function isAllowedRepeater(ch,ctx){return ch===Chars$3.Asterisk&&!ctx.attribute&&!ctx.expression}function bracketType(ch){return ch===Chars$3.RoundBracketOpen||ch===Chars$3.RoundBracketClose?"group":ch===Chars$3.SquareBracketOpen||ch===Chars$3.SquareBracketClose?"attribute":ch===Chars$3.CurlyBracketOpen||ch===Chars$3.CurlyBracketClose?"expression":void 0}function operatorType$1(ch){return(ch===Chars$3.Child?"child":ch===Chars$3.Sibling&&"sibling")||ch===Chars$3.Climb&&"climb"||ch===Chars$3.Dot&&"class"||ch===Chars$3.Hash&&"id"||ch===Chars$3.Slash&&"close"||ch===Chars$3.Equals&&"equal"||void 0}function isOpenBracket$2(ch){return ch===Chars$3.CurlyBracketOpen||ch===Chars$3.SquareBracketOpen||ch===Chars$3.RoundBracketOpen}function isElementName(ch){return isAlphaNumericWord(ch)||isUmlaut(ch)||ch===Chars$3.Dash||ch===Chars$3.Colon||ch===Chars$3.Excl}!function(Chars){Chars[Chars.CurlyBracketOpen=123]="CurlyBracketOpen",Chars[Chars.CurlyBracketClose=125]="CurlyBracketClose",Chars[Chars.Escape=92]="Escape",Chars[Chars.Equals=61]="Equals",Chars[Chars.SquareBracketOpen=91]="SquareBracketOpen",Chars[Chars.SquareBracketClose=93]="SquareBracketClose",Chars[Chars.Asterisk=42]="Asterisk",Chars[Chars.Hash=35]="Hash",Chars[Chars.Dollar=36]="Dollar",Chars[Chars.Dash=45]="Dash",Chars[Chars.Dot=46]="Dot",Chars[Chars.Slash=47]="Slash",Chars[Chars.Colon=58]="Colon",Chars[Chars.Excl=33]="Excl",Chars[Chars.At=64]="At",Chars[Chars.Underscore=95]="Underscore",Chars[Chars.RoundBracketOpen=40]="RoundBracketOpen",Chars[Chars.RoundBracketClose=41]="RoundBracketClose",Chars[Chars.Sibling=43]="Sibling",Chars[Chars.Child=62]="Child",Chars[Chars.Climb=94]="Climb",Chars[Chars.SingleQuote=39]="SingleQuote",Chars[Chars.DoubleQuote=34]="DoubleQuote"}(Chars$3||(Chars$3={}));const operators={child:">",class:".",climb:"^",id:"#",equal:"=",close:"/",sibling:"+"},tokenVisitor={Literal:token=>token.value,Quote:token=>token.single?"'":'"',Bracket:token=>"attribute"===token.context?token.open?"[":"]":"expression"===token.context?token.open?"{":"}":token.open?"(":"}",Operator:token=>operators[token.operator],Field:(token,state)=>null!=token.index?token.name?`\${${token.index}:${token.name}}`:`\${${token.index}`:token.name?state.getVariable(token.name):"",RepeaterPlaceholder(token,state){let repeater;for(let i=state.repeaters.length-1;i>=0;i--)if(state.repeaters[i].implicit){repeater=state.repeaters[i];break}return state.inserted=!0,state.getText(repeater&&repeater.value)},RepeaterNumber(token,state){let value=1;const lastIx=state.repeaters.length-1,repeater=state.repeaters[lastIx];if(repeater&&(value=token.reverse?token.base+repeater.count-repeater.value-1:token.base+repeater.value,token.parent)){const parentIx=Math.max(0,lastIx-token.parent);if(parentIx!==lastIx){const parentRepeater=state.repeaters[parentIx];value+=repeater.count*parentRepeater.value}}let result=String(value);for(;result.length<token.size;)result="0"+result;return result},WhiteSpace:token=>token.value};function stringify$1(token,state){if(!tokenVisitor[token.type])throw new Error(`Unknown token ${token.type}`);return tokenVisitor[token.type](token,state)}const urlRegex=/^((https?:|ftp:|file:)?\/\/|(www|ftp)\.)[^ ]*$/,emailRegex=/^[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,5}$/;function convert(abbr,options={}){let textInserted=!1,cleanText;options.text&&(cleanText=Array.isArray(options.text)?options.text.filter(s=>s.trim()):options.text);const result={type:"Abbreviation",children:convertGroup(abbr,{inserted:!1,repeaters:[],text:options.text,cleanText:cleanText,repeatGuard:options.maxRepeat||Number.POSITIVE_INFINITY,getText(pos){var _a;let value;if(textInserted=!0,Array.isArray(options.text)){if(void 0!==pos&&pos>=0&&pos<cleanText.length)return cleanText[pos];value=void 0!==pos?options.text[pos]:options.text.join("\n")}else value=null!==(_a=options.text)&&void 0!==_a?_a:"";return value},getVariable(name){const varValue=options.variables&&options.variables[name];return null!=varValue?varValue:name}})};if(null!=options.text&&!textInserted){const deepest=deepestNode(last$1(result.children));if(deepest){const text=Array.isArray(options.text)?options.text.join("\n"):options.text;insertText(deepest,text),"a"===deepest.name&&options.href&&insertHref(deepest,text)}}return result}function convertStatement(node,state){let result=[];if(node.repeat){const original=node.repeat,repeat=Object.assign({},original);let items;repeat.count=repeat.implicit&&Array.isArray(state.text)?state.cleanText.length:repeat.count||1,state.repeaters.push(repeat);for(let i=0;i<repeat.count;i++){if(repeat.value=i,node.repeat=repeat,items=isGroup(node)?convertGroup(node,state):convertElement(node,state),repeat.implicit&&!state.inserted){const target=last$1(items),deepest=target&&deepestNode(target);deepest&&insertText(deepest,state.getText(repeat.value))}if(result=result.concat(items),--state.repeatGuard<=0)break}state.repeaters.pop(),node.repeat=original,repeat.implicit&&(state.inserted=!0)}else result=result.concat(isGroup(node)?convertGroup(node,state):convertElement(node,state));return result}function convertElement(node,state){let children=[];const elem={type:"AbbreviationNode",name:node.name&&stringifyName(node.name,state),value:node.value&&stringifyValue$1(node.value,state),attributes:void 0,children:children,repeat:node.repeat&&Object.assign({},node.repeat),selfClosing:node.selfClose};let result=[elem];for(const child of node.elements)children=children.concat(convertStatement(child,state));if(node.attributes){elem.attributes=[];for(const attr of node.attributes)elem.attributes.push(convertAttribute(attr,state))}return elem.name||elem.attributes||!elem.value||elem.value.some(isField$1)?elem.children=children:result=result.concat(children),result}function convertGroup(node,state){let result=[];for(const child of node.elements)result=result.concat(convertStatement(child,state));return node.repeat&&(result=attachRepeater(result,node.repeat)),result}function convertAttribute(node,state){let implied=!1,isBoolean=!1,valueType=node.expression?"expression":"raw",value;const name=node.name&&stringifyName(node.name,state);if(name&&"!"===name[0]&&(implied=!0),name&&"."===name[name.length-1]&&(isBoolean=!0),node.value){const tokens=node.value.slice();if(isQuote$1(tokens[0])){const quote=tokens.shift();tokens.length&&last$1(tokens).type===quote.type&&tokens.pop(),valueType=quote.single?"singleQuote":"doubleQuote"}else isBracket$2(tokens[0],"expression",!0)&&(valueType="expression",tokens.shift(),isBracket$2(last$1(tokens),"expression",!1)&&tokens.pop());value=stringifyValue$1(tokens,state)}return{name:isBoolean||implied?name.slice(implied?1:0,isBoolean?-1:void 0):name,value:value,boolean:isBoolean,implied:implied,valueType:valueType,multiple:node.multiple}}function stringifyName(tokens,state){let str="";for(let i=0;i<tokens.length;i++)str+=stringify$1(tokens[i],state);return str}function stringifyValue$1(tokens,state){const result=[];let str="";for(let i=0,token;i<tokens.length;i++)isField$1(token=tokens[i])?(str&&(result.push(str),str=""),result.push(token)):str+=stringify$1(token,state);return str&&result.push(str),result}function isGroup(node){return"TokenGroup"===node.type}function isField$1(token){return"object"==typeof token&&"Field"===token.type&&null!=token.index}function last$1(arr){return arr[arr.length-1]}function deepestNode(node){return node.children.length?deepestNode(last$1(node.children)):node}function insertText(node,text){if(node.value){const lastToken=last$1(node.value);"string"==typeof lastToken?node.value[node.value.length-1]+=text:node.value.push(text)}else node.value=[text]}function insertHref(node,text){var _a;let href="";urlRegex.test(text)?/\w+:/.test(href=text)||href.startsWith("//")||(href=`http://${href}`):emailRegex.test(text)&&(href=`mailto:${text}`);const hrefAttribute=null===(_a=node.attributes)||void 0===_a?void 0:_a.find(attr=>"href"===attr.name);hrefAttribute?hrefAttribute.value||(hrefAttribute.value=[href]):(node.attributes||(node.attributes=[]),node.attributes.push({name:"href",value:[href],valueType:"doubleQuote"}))}function attachRepeater(items,repeater){for(const item of items)item.repeat||(item.repeat=Object.assign({},repeater));return items}function parseAbbreviation(abbr,options){try{const tokens="string"==typeof abbr?tokenize$1(abbr):abbr;return convert(abbreviation(tokens,options),options)}catch(err){throw err instanceof ScannerError&&"string"==typeof abbr&&(err.message+=`\n${abbr}\n${"-".repeat(err.pos)}^`),err}}var OperatorType,Chars$2;function tokenize(abbr,isValue){let brackets=0,token;const scanner=new Scanner(abbr),tokens=[];for(;!scanner.eof();){if(!(token=getToken(scanner,0===brackets&&!isValue)))throw scanner.error("Unexpected character");if("Bracket"===token.type&&(!brackets&&token.open&&mergeTokens(scanner,tokens),(brackets+=token.open?1:-1)<0))throw scanner.error("Unexpected bracket",token.start);tokens.push(token),shouldConsumeDashAfter(token)&&(token=operator(scanner))&&tokens.push(token)}return tokens}function getToken(scanner,short){return field$1(scanner)||customProperty(scanner)||numberValue(scanner)||colorValue(scanner)||stringValue(scanner)||bracket(scanner)||operator(scanner)||whiteSpace(scanner)||literal$1(scanner,short)}function field$1(scanner){const start=scanner.pos;if(scanner.eat(Chars$2.Dollar)&&scanner.eat(Chars$2.CurlyBracketOpen)){let index;scanner.start=scanner.pos;let name="";if(scanner.eatWhile(isNumber$1)?(index=Number(scanner.current()),name=scanner.eat(Chars$2.Colon)?consumePlaceholder$1(scanner):""):isAlpha$1(scanner.peek())&&(name=consumePlaceholder$1(scanner)),scanner.eat(Chars$2.CurlyBracketClose))return{type:"Field",index:index,name:name,start:start,end:scanner.pos};throw scanner.error("Expecting }")}scanner.pos=start}function consumePlaceholder$1(stream){const stack=[];for(stream.start=stream.pos;!stream.eof();)if(stream.eat(Chars$2.CurlyBracketOpen))stack.push(stream.pos);else if(stream.eat(Chars$2.CurlyBracketClose)){if(!stack.length){stream.pos--;break}stack.pop()}else stream.pos++;if(stack.length)throw stream.pos=stack.pop(),stream.error("Expecting }");return stream.current()}function literal$1(scanner,short){const start=scanner.pos;if(scanner.eat(isIdentPrefix)?scanner.eatWhile(start?isKeyword:isLiteral$1):scanner.eat(isAlphaWord)?scanner.eatWhile(short?isLiteral$1:isKeyword):(scanner.eat(Chars$2.Dot),scanner.eatWhile(isLiteral$1)),start!==scanner.pos)return scanner.start=start,createLiteral(scanner,scanner.start=start)}function createLiteral(scanner,start=scanner.start,end=scanner.pos){return{type:"Literal",value:scanner.substring(start,end),start:start,end:end}}function numberValue(scanner){const start=scanner.pos;if(consumeNumber(scanner)){scanner.start=start;const rawValue=scanner.current();return scanner.start=scanner.pos,scanner.eat(Chars$2.Percent)||scanner.eatWhile(isAlphaWord),{type:"NumberValue",value:Number(rawValue),rawValue:rawValue,unit:scanner.current(),start:start,end:scanner.pos}}}function stringValue(scanner){const ch=scanner.peek(),start=scanner.pos;let finished=!1;if(isQuote$2(ch)){for(scanner.pos++;!scanner.eof();){if(scanner.eat(ch)){finished=!0;break}scanner.pos++}return scanner.start=start,{type:"StringValue",value:scanner.substring(start+1,scanner.pos-(finished?1:0)),quote:ch===Chars$2.SingleQuote?"single":"double",start:start,end:scanner.pos}}}function colorValue(scanner){const start=scanner.pos;if(scanner.eat(Chars$2.Hash)){const valueStart=scanner.pos;let color="",alpha="";if(scanner.eatWhile(isHex)?(color=scanner.substring(valueStart,scanner.pos),alpha=colorAlpha(scanner)):scanner.eat(Chars$2.Transparent)?(color="0",alpha=colorAlpha(scanner)||"0"):alpha=colorAlpha(scanner),color||alpha||scanner.eof()){const{r:r,g:g,b:b,a:a}=parseColor(color,alpha);return{type:"ColorValue",r:r,g:g,b:b,a:a,raw:scanner.substring(start+1,scanner.pos),start:start,end:scanner.pos}}return createLiteral(scanner,start)}scanner.pos=start}function colorAlpha(scanner){const start=scanner.pos;return scanner.eat(Chars$2.Dot)?(scanner.start=start,scanner.eatWhile(isNumber$1)?scanner.current():"1"):""}function whiteSpace(scanner){const start=scanner.pos;if(scanner.eatWhile(isSpace))return{type:"WhiteSpace",start:start,end:scanner.pos}}function customProperty(scanner){const start=scanner.pos;if(scanner.eat(Chars$2.Dash)&&scanner.eat(Chars$2.Dash))return scanner.start=start,scanner.eatWhile(isKeyword),{type:"CustomProperty",value:scanner.current(),start:start,end:scanner.pos};scanner.pos=start}function bracket(scanner){const ch=scanner.peek();if(isBracket$1(ch))return{type:"Bracket",open:ch===Chars$2.RoundBracketOpen,start:scanner.pos++,end:scanner.pos}}function operator(scanner){const op=operatorType(scanner.peek());if(op)return{type:"Operator",operator:op,start:scanner.pos++,end:scanner.pos}}function consumeNumber(stream){const start=stream.pos;stream.eat(Chars$2.Dash);const afterNegative=stream.pos,hasDecimal=stream.eatWhile(isNumber$1),prevPos=stream.pos;if(stream.eat(Chars$2.Dot)){const hasFloat=stream.eatWhile(isNumber$1);hasDecimal||hasFloat||(stream.pos=prevPos)}return stream.pos===afterNegative&&(stream.pos=start),stream.pos!==start}function isIdentPrefix(code){return code===Chars$2.At||code===Chars$2.Dollar}function operatorType(ch){return ch===Chars$2.Sibling&&OperatorType.Sibling||ch===Chars$2.Excl&&OperatorType.Important||ch===Chars$2.Comma&&OperatorType.ArgumentDelimiter||ch===Chars$2.Colon&&OperatorType.PropertyDelimiter||ch===Chars$2.Dash&&OperatorType.ValueDelimiter||void 0}function isHex(code){return isNumber$1(code)||isAlpha$1(code,65,70)}function isKeyword(code){return isAlphaNumericWord(code)||code===Chars$2.Dash}function isBracket$1(code){return code===Chars$2.RoundBracketOpen||code===Chars$2.RoundBracketClose}function isLiteral$1(code){return isAlphaWord(code)||code===Chars$2.Percent||code===Chars$2.Slash}function parseColor(value,alpha){let r="0",g="0",b="0",a=Number(null!=alpha&&""!==alpha?alpha:1);if("t"===value)a=0;else switch(value.length){case 0:break;case 1:r=g=b=value+value;break;case 2:r=g=b=value;break;case 3:r=value[0]+value[0],g=value[1]+value[1],b=value[2]+value[2];break;default:r=(value+=value).slice(0,2),g=value.slice(2,4),b=value.slice(4,6)}return{r:parseInt(r,16),g:parseInt(g,16),b:parseInt(b,16),a:a}}function shouldConsumeDashAfter(token){return"ColorValue"===token.type||"NumberValue"===token.type&&!token.unit}function mergeTokens(scanner,tokens){let start=0,end=0;for(;tokens.length;){const token=last(tokens);if("Literal"!==token.type&&"NumberValue"!==token.type)break;start=token.start,end||(end=token.end),tokens.pop()}start!==end&&tokens.push(createLiteral(scanner,start,end))}function last(arr){return arr[arr.length-1]}function tokenScanner(tokens){return{tokens:tokens,start:0,pos:0,size:tokens.length}}function peek$2(scanner){return scanner.tokens[scanner.pos]}function readable(scanner){return scanner.pos<scanner.size}function consume$1(scanner,test){return!!test(peek$2(scanner))&&(scanner.pos++,!0)}function error(scanner,message,token=peek$2(scanner)){token&&null!=token.start&&(message+=` at ${token.start}`);const err=new Error(message);return err.pos=token&&token.start,err}function parser(tokens,options={}){const scanner=tokenScanner(tokens),result=[];let property;for(;readable(scanner);)if(property=consumeProperty(scanner,options))result.push(property);else if(!consume$1(scanner,isSiblingOperator))throw error(scanner,"Unexpected token");return result}function consumeProperty(scanner,options){let name,important=!1,valueFragment;const value=[],token=peek$2(scanner),valueMode=!!options.value;for(valueMode||!isLiteral(token)||isFunctionStart(scanner)||(scanner.pos++,name=token.value,consume$1(scanner,isValueDelimiter)),valueMode&&consume$1(scanner,isWhiteSpace$1);readable(scanner);)if(consume$1(scanner,isImportant))important=!0;else if(valueFragment=consumeValue(scanner,valueMode))value.push(valueFragment);else if(!consume$1(scanner,isFragmentDelimiter))break;if(name||value.length||important)return{name:name,value:value,important:important}}function consumeValue(scanner,inArgument){const result=[];let token,args;for(;readable(scanner);)if(isValue(token=peek$2(scanner)))scanner.pos++,isLiteral(token)&&(args=consumeArguments(scanner))?result.push({type:"FunctionCall",name:token.value,arguments:args}):result.push(token);else{if(!(isValueDelimiter(token)||inArgument&&isWhiteSpace$1(token)))break;scanner.pos++}return result.length?{type:"CSSValue",value:result}:void 0}function consumeArguments(scanner){const start=scanner.pos;if(consume$1(scanner,isOpenBracket$1)){const args=[];let value;for(;readable(scanner)&&!consume$1(scanner,isCloseBracket$1);)if(value=consumeValue(scanner,!0))args.push(value);else if(!consume$1(scanner,isWhiteSpace$1)&&!consume$1(scanner,isArgumentDelimiter))throw error(scanner,"Unexpected token");return scanner.start=start,args}}function isLiteral(token){return token&&"Literal"===token.type}function isBracket(token,open){return token&&"Bracket"===token.type&&(null==open||token.open===open)}function isOpenBracket$1(token){return isBracket(token,!0)}function isCloseBracket$1(token){return isBracket(token,!1)}function isWhiteSpace$1(token){return token&&"WhiteSpace"===token.type}function isOperator(token,operator){return token&&"Operator"===token.type&&(!operator||token.operator===operator)}function isSiblingOperator(token){return isOperator(token,OperatorType.Sibling)}function isArgumentDelimiter(token){return isOperator(token,OperatorType.ArgumentDelimiter)}function isFragmentDelimiter(token){return isArgumentDelimiter(token)}function isImportant(token){return isOperator(token,OperatorType.Important)}function isValue(token){return"StringValue"===token.type||"ColorValue"===token.type||"NumberValue"===token.type||"Literal"===token.type||"Field"===token.type||"CustomProperty"===token.type}function isValueDelimiter(token){return isOperator(token,OperatorType.PropertyDelimiter)||isOperator(token,OperatorType.ValueDelimiter)}function isFunctionStart(scanner){const t1=scanner.tokens[scanner.pos],t2=scanner.tokens[scanner.pos+1];return t1&&t2&&isLiteral(t1)&&"Bracket"===t2.type}function parse$2(abbr,options){try{const tokens="string"==typeof abbr?tokenize(abbr,options&&options.value):abbr;return parser(tokens,options)}catch(err){throw err instanceof ScannerError&&"string"==typeof abbr&&(err.message+=`\n${abbr}\n${"-".repeat(err.pos)}^`),err}}function mergeAttributes(node,config){if(!node.attributes)return;const attributes=[],lookup={};for(const attr of node.attributes)if(attr.name){const attrName=attr.name;if(attrName in lookup){const prev=lookup[attrName];"class"===attrName?prev.value=mergeValue(prev.value,attr.value," "):mergeDeclarations(prev,attr,config)}else attributes.push(lookup[attrName]=Object.assign({},attr))}else attributes.push(attr);node.attributes=attributes}function mergeValue(prev,next,glue){if(prev&&next){prev.length&&glue&&append(prev,glue);for(const t of next)append(prev,t);return prev}const result=prev||next;return result&&result.slice()}function mergeDeclarations(dest,src,config){return dest.name=src.name,config.options["output.reverseAttributes"]||(dest.value=src.value),dest.implied||(dest.implied=src.implied),dest.boolean||(dest.boolean=src.boolean),"expression"!==dest.valueType&&(dest.valueType=src.valueType),dest}function append(tokens,value){const lastIx=tokens.length-1;"string"==typeof tokens[lastIx]&&"string"==typeof value?tokens[lastIx]+=value:tokens.push(value)}function walk$1(node,fn,state){const ancestors=[node],callback=ctx=>{fn(ctx,ancestors,state),ancestors.push(ctx),ctx.children.forEach(callback),ancestors.pop()};node.children.forEach(callback)}function find$1(node,callback){for(let i=0;i<node.children.length;i++){const child=node.children[i];if(callback(child))return child;const result=find$1(child,callback);if(result)return result}}function findDeepest(node){let parent;for(;node.children.length;)parent=node,node=node.children[node.children.length-1];return{parent:parent,node:node}}function isNode(node){return"AbbreviationNode"===node.type}function resolveSnippets(abbr,config){const stack=[],reversed=config.options["output.reverseAttributes"],{warn:warn}=config,resolve=child=>{const snippet=child.name&&config.snippets[child.name];if(!snippet||stack.includes(snippet))return null;let snippetAbbr;try{snippetAbbr=parseAbbreviation(snippet,config)}catch(err){return null==warn||warn(`Unable to parse "${snippet}" snippet`,err),null}stack.push(snippet),walkResolve(snippetAbbr,resolve),stack.pop();for(const topNode of snippetAbbr.children){if(child.attributes){const from=topNode.attributes||[],to=child.attributes||[];topNode.attributes=reversed?to.concat(from):from.concat(to)}mergeNodes(child,topNode)}return snippetAbbr};return walkResolve(abbr,resolve),abbr}function walkResolve(node,resolve,config){let children=[];for(const child of node.children){const resolved=resolve(child);if(resolved){children=children.concat(resolved.children);const deepest=findDeepest(resolved);isNode(deepest.node)&&(deepest.node.children=deepest.node.children.concat(walkResolve(child,resolve)))}else children.push(child),child.children=walkResolve(child,resolve)}return node.children=children}function mergeNodes(from,to){from.selfClosing&&(to.selfClosing=!0),null!=from.value&&(to.value=from.value),from.repeat&&(to.repeat=from.repeat)}!function(OperatorType){OperatorType.Sibling="+",OperatorType.Important="!",OperatorType.ArgumentDelimiter=",",OperatorType.ValueDelimiter="-",OperatorType.PropertyDelimiter=":"}(OperatorType||(OperatorType={})),function(Chars){Chars[Chars.Hash=35]="Hash",Chars[Chars.Dollar=36]="Dollar",Chars[Chars.Dash=45]="Dash",Chars[Chars.Dot=46]="Dot",Chars[Chars.Colon=58]="Colon",Chars[Chars.Comma=44]="Comma",Chars[Chars.Excl=33]="Excl",Chars[Chars.At=64]="At",Chars[Chars.Percent=37]="Percent",Chars[Chars.Underscore=95]="Underscore",Chars[Chars.RoundBracketOpen=40]="RoundBracketOpen",Chars[Chars.RoundBracketClose=41]="RoundBracketClose",Chars[Chars.CurlyBracketOpen=123]="CurlyBracketOpen",Chars[Chars.CurlyBracketClose=125]="CurlyBracketClose",Chars[Chars.Sibling=43]="Sibling",Chars[Chars.SingleQuote=39]="SingleQuote",Chars[Chars.DoubleQuote=34]="DoubleQuote",Chars[Chars.Transparent=116]="Transparent",Chars[Chars.Slash=47]="Slash"}(Chars$2||(Chars$2={}));const expressionStart="{",expressionEnd="}";function createOutputStream(options,level=0){return{options:options,value:"",level:level,offset:0,line:0,column:0}}function push(stream,text){const processText=stream.options["output.text"];_push(stream,processText(text,stream.offset,stream.line,stream.column))}function pushString(stream,value){const lines=splitByLines$1(value);for(let i=0,il=lines.length-1;i<=il;i++)push(stream,lines[i]),i!==il&&pushNewline(stream,!0)}function pushNewline(stream,indent){const baseIndent=stream.options["output.baseIndent"],newline=stream.options["output.newline"];push(stream,newline+baseIndent),stream.line++,stream.column=baseIndent.length,indent&&pushIndent(stream,!0===indent?stream.level:indent)}function pushIndent(stream,size=stream.level){const indent=stream.options["output.indent"];push(stream,indent.repeat(Math.max(size,0)))}function pushField(stream,index,placeholder){const field=stream.options["output.field"];_push(stream,field(index,placeholder,stream.offset,stream.line,stream.column))}function tagName(name,config){return strCase(name,config.options["output.tagCase"])}function attrName(name,config){return strCase(name,config.options["output.attributeCase"])}function attrQuote(attr,config,isOpen){return"expression"===attr.valueType?isOpen?expressionStart:expressionEnd:"single"===config.options["output.attributeQuotes"]?"'":'"'}function isBooleanAttribute(attr,config){return attr.boolean||config.options["output.booleanAttributes"].includes((attr.name||"").toLowerCase())}function selfClose(config){switch(config.options["output.selfClosingStyle"]){case"xhtml":return" /";case"xml":return"/";default:return""}}function isInline(node,config){return"string"==typeof node?config.options.inlineElements.includes(node.toLowerCase()):node.name?isInline(node.name,config):Boolean(node.value&&!node.attributes)}function splitByLines$1(text){return text.split(/\r\n|\r|\n/g)}function _push(stream,text){stream.value+=text,stream.offset+=text.length,stream.column+=text.length}function strCase(str,type){return type?"upper"===type?str.toUpperCase():str.toLowerCase():str}const elementMap={p:"span",ul:"li",ol:"li",table:"tr",tr:"td",tbody:"tr",thead:"tr",tfoot:"tr",colgroup:"col",select:"option",optgroup:"option",audio:"source",video:"source",object:"param",map:"area"};function implicitTag(node,ancestors,config){!node.name&&node.attributes&&resolveImplicitTag(node,ancestors,config)}function resolveImplicitTag(node,ancestors,config){const parent=getParentElement(ancestors),contextName=config.context?config.context.name:"",parentName=lowercase(parent?parent.name:contextName);node.name=elementMap[parentName]||(isInline(parentName,config)?"span":"div")}function lowercase(str){return(str||"").toLowerCase()}function getParentElement(ancestors){for(let i=ancestors.length-1;i>=0;i--){const elem=ancestors[i];if(isNode(elem))return elem}}var latin={common:["lorem","ipsum","dolor","sit","amet","consectetur","adipisicing","elit"],words:["exercitationem","perferendis","perspiciatis","laborum","eveniet","sunt","iure","nam","nobis","eum","cum","officiis","excepturi","odio","consectetur","quasi","aut","quisquam","vel","eligendi","itaque","non","odit","tempore","quaerat","dignissimos","facilis","neque","nihil","expedita","vitae","vero","ipsum","nisi","animi","cumque","pariatur","velit","modi","natus","iusto","eaque","sequi","illo","sed","ex","et","voluptatibus","tempora","veritatis","ratione","assumenda","incidunt","nostrum","placeat","aliquid","fuga","provident","praesentium","rem","necessitatibus","suscipit","adipisci","quidem","possimus","voluptas","debitis","sint","accusantium","unde","sapiente","voluptate","qui","aspernatur","laudantium","soluta","amet","quo","aliquam","saepe","culpa","libero","ipsa","dicta","reiciendis","nesciunt","doloribus","autem","impedit","minima","maiores","repudiandae","ipsam","obcaecati","ullam","enim","totam","delectus","ducimus","quis","voluptates","dolores","molestiae","harum","dolorem","quia","voluptatem","molestias","magni","distinctio","omnis","illum","dolorum","voluptatum","ea","quas","quam","corporis","quae","blanditiis","atque","deserunt","laboriosam","earum","consequuntur","hic","cupiditate","quibusdam","accusamus","ut","rerum","error","minus","eius","ab","ad","nemo","fugit","officia","at","in","id","quos","reprehenderit","numquam","iste","fugiat","sit","inventore","beatae","repellendus","magnam","recusandae","quod","explicabo","doloremque","aperiam","consequatur","asperiores","commodi","optio","dolor","labore","temporibus","repellat","veniam","architecto","est","esse","mollitia","nulla","a","similique","eos","alias","dolore","tenetur","deleniti","porro","facere","maxime","corrupti"]},ru={common:["далеко-далеко","за","словесными","горами","в стране","гласных","и согласных","живут","рыбные","тексты"],words:["вдали","от всех","они","буквенных","домах","на берегу","семантика","большого","языкового","океана","маленький","ручеек","даль","журчит","по всей","обеспечивает","ее","всеми","необходимыми","правилами","эта","парадигматическая","страна","которой","жаренные","предложения","залетают","прямо","рот","даже","всемогущая","пунктуация","не","имеет","власти","над","рыбными","текстами","ведущими","безорфографичный","образ","жизни","однажды","одна","маленькая","строчка","рыбного","текста","имени","lorem","ipsum","решила","выйти","большой","мир","грамматики","великий","оксмокс","предупреждал","о","злых","запятых","диких","знаках","вопроса","коварных","точках","запятой","но","текст","дал","сбить","себя","толку","он","собрал","семь","своих","заглавных","букв","подпоясал","инициал","за","пояс","пустился","дорогу","взобравшись","первую","вершину","курсивных","гор","бросил","последний","взгляд","назад","силуэт","своего","родного","города","буквоград","заголовок","деревни","алфавит","подзаголовок","своего","переулка","грустный","реторический","вопрос","скатился","его","щеке","продолжил","свой","путь","дороге","встретил","рукопись","она","предупредила","моей","все","переписывается","несколько","раз","единственное","что","меня","осталось","это","приставка","возвращайся","ты","лучше","свою","безопасную","страну","послушавшись","рукописи","наш","продолжил","свой","путь","вскоре","ему","повстречался","коварный","составитель","рекламных","текстов","напоивший","языком","речью","заманивший","свое","агентство","которое","использовало","снова","снова","своих","проектах","если","переписали","то","живет","там","до","сих","пор"]},sp={common:["mujer","uno","dolor","más","de","poder","mismo","si"],words:["ejercicio","preferencia","perspicacia","laboral","paño","suntuoso","molde","namibia","planeador","mirar","demás","oficinista","excepción","odio","consecuencia","casi","auto","chicharra","velo","elixir","ataque","no","odio","temporal","cuórum","dignísimo","facilismo","letra","nihilista","expedición","alma","alveolar","aparte","león","animal","como","paria","belleza","modo","natividad","justo","ataque","séquito","pillo","sed","ex","y","voluminoso","temporalidad","verdades","racional","asunción","incidente","marejada","placenta","amanecer","fuga","previsor","presentación","lejos","necesariamente","sospechoso","adiposidad","quindío","pócima","voluble","débito","sintió","accesorio","falda","sapiencia","volutas","queso","permacultura","laudo","soluciones","entero","pan","litro","tonelada","culpa","libertario","mosca","dictado","reincidente","nascimiento","dolor","escolar","impedimento","mínima","mayores","repugnante","dulce","obcecado","montaña","enigma","total","deletéreo","décima","cábala","fotografía","dolores","molesto","olvido","paciencia","resiliencia","voluntad","molestias","magnífico","distinción","ovni","marejada","cerro","torre","y","abogada","manantial","corporal","agua","crepúsculo","ataque","desierto","laboriosamente","angustia","afortunado","alma","encefalograma","materialidad","cosas","o","renuncia","error","menos","conejo","abadía","analfabeto","remo","fugacidad","oficio","en","almácigo","vos","pan","represión","números","triste","refugiado","trote","inventor","corchea","repelente","magma","recusado","patrón","explícito","paloma","síndrome","inmune","autoinmune","comodidad","ley","vietnamita","demonio","tasmania","repeler","apéndice","arquitecto","columna","yugo","computador","mula","a","propósito","fantasía","alias","rayo","tenedor","deleznable","ventana","cara","anemia","corrupto"]};const vocabularies={ru:ru,sp:sp,latin:latin},reLorem=/^lorem([a-z]*)(\d*)(-\d*)?$/i;function lorem(node,ancestors,config){let m;if(node.name&&(m=node.name.match(reLorem))){const db=vocabularies[m[1]]||vocabularies.latin,minWordCount=m[2]?Math.max(1,Number(m[2])):30,maxWordCount=m[3]?Math.max(minWordCount,Number(m[3].slice(1))):minWordCount,wordCount=rand(minWordCount,maxWordCount),repeat=node.repeat||findRepeater(ancestors);node.name=node.attributes=void 0,node.value=[paragraph(db,wordCount,!repeat||0===repeat.value)],node.repeat&&ancestors.length>1&&resolveImplicitTag(node,ancestors,config)}}function rand(from,to){return Math.floor(Math.random()*(to-from)+from)}function sample(arr,count){const len=arr.length,iterations=Math.min(len,count),result=[];for(;result.length<iterations;){const str=arr[rand(0,len)];result.includes(str)||result.push(str)}return result}function choice(val){return val[rand(0,val.length-1)]}function sentence(words,end){return words.length&&(words=[capitalize(words[0])].concat(words.slice(1))),words.join(" ")+(end||choice("?!..."))}function capitalize(word){return word[0].toUpperCase()+word.slice(1)}function insertCommas(words){if(words.length<2)return words;const len=(words=words.slice()).length,hasComma=/,$/;let totalCommas=0;totalCommas=len>3&&len<=6?rand(0,1):len>6&&len<=12?rand(0,2):rand(1,4);for(let i=0,pos;i<totalCommas;i++)pos=rand(0,len-2),hasComma.test(words[pos])||(words[pos]+=",");return words}function paragraph(dict,wordCount,startWithCommon){const result=[];let totalWords=0,words;for(startWithCommon&&dict.common&&(totalWords+=(words=dict.common.slice(0,wordCount)).length,result.push(sentence(insertCommas(words),".")));totalWords<wordCount;)totalWords+=(words=sample(dict.words,Math.min(rand(2,30),wordCount-totalWords))).length,result.push(sentence(insertCommas(words)));return result.join(" ")}function findRepeater(ancestors){for(let i=ancestors.length-1;i>=0;i--){const element=ancestors[i];if("AbbreviationNode"===element.type&&element.repeat)return element.repeat}}function xsl(node){matchesName(node.name)&&node.attributes&&(node.children.length||node.value)&&(node.attributes=node.attributes.filter(isAllowed))}function isAllowed(attr){return"select"!==attr.name}function matchesName(name){return"xsl:variable"===name||"xsl:with-param"===name}const reElement=/^(-+)([a-z0-9]+[a-z0-9-]*)/i,reModifier=/^(_+)([a-z0-9]+[a-z0-9-_]*)/i,blockCandidates1=className=>/^[a-z]\-/i.test(className),blockCandidates2=className=>/^[a-z]/i.test(className);function bem(node,ancestors,config){expandClassNames(node),expandShortNotation(node,ancestors,config)}function expandClassNames(node){const data=getBEMData(node),classNames=[];for(const cl of data.classNames){const ix=cl.indexOf("_");ix>0&&!cl.startsWith("-")?(classNames.push(cl.slice(0,ix)),classNames.push(cl.slice(ix))):classNames.push(cl)}classNames.length&&(data.classNames=classNames.filter(uniqueClass),data.block=findBlockName(data.classNames),updateClass(node,data.classNames.join(" ")))}function expandShortNotation(node,ancestors,config){const data=getBEMData(node),classNames=[],{options:options}=config,path=ancestors.slice(1).concat(node);for(let cl of data.classNames){let prefix="",m;const originalClass=cl;(m=cl.match(reElement))&&(prefix=getBlockName(path,m[1].length,config.context)+options["bem.element"]+m[2],classNames.push(prefix),cl=cl.slice(m[0].length)),(m=cl.match(reModifier))&&(prefix||(prefix=getBlockName(path,m[1].length),classNames.push(prefix)),classNames.push(`${prefix}${options["bem.modifier"]}${m[2]}`),cl=cl.slice(m[0].length)),cl===originalClass&&classNames.push(originalClass)}const arrClassNames=classNames.filter(uniqueClass);arrClassNames.length&&updateClass(node,arrClassNames.join(" "))}function getBEMData(node){if(!node._bem){let classValue="";if(node.attributes)for(const attr of node.attributes)if("class"===attr.name&&attr.value){classValue=stringifyValue(attr.value);break}node._bem=parseBEM(classValue)}return node._bem}function getBEMDataFromContext(context){return context._bem||(context._bem=parseBEM(context.attributes&&context.attributes.class||"")),context._bem}function parseBEM(classValue){const classNames=classValue?classValue.split(/\s+/):[];return{classNames:classNames,block:findBlockName(classNames)}}function getBlockName(ancestors,depth=0,context){const maxParentIx=0;let parentIx=Math.max(ancestors.length-depth,0);do{const parent=ancestors[parentIx];if(parent){const data=getBEMData(parent);if(data.block)return data.block}}while(0<parentIx--);if(context){const data=getBEMDataFromContext(context);if(data.block)return data.block}return""}function findBlockName(classNames){return find(classNames,blockCandidates1)||find(classNames,blockCandidates2)||void 0}function find(classNames,filter){for(const cl of classNames){if(reElement.test(cl)||reModifier.test(cl))break;if(filter(cl))return cl}}function updateClass(node,value){for(const attr of node.attributes)if("class"===attr.name){attr.value=[value];break}}function stringifyValue(value){let result="";for(const t of value)result+="string"==typeof t?t:t.name;return result}function uniqueClass(item,ix,arr){return!!item&&arr.indexOf(item)===ix}function label(node){if("label"===node.name){const input=find$1(node,n=>"input"===n.name||"textarea"===n.name);input&&(node.attributes&&(node.attributes=node.attributes.filter(attr=>!("for"===attr.name&&isEmptyAttribute(attr)))),input.attributes&&(input.attributes=input.attributes.filter(attr=>!("id"===attr.name&&isEmptyAttribute(attr)))))}}function isEmptyAttribute(attr){if(!attr.value)return!0;if(1===attr.value.length){const token=attr.value[0];if(token&&"string"!=typeof token&&!token.name)return!0}return!1}function walk(abbr,visitor,state){const callback=(ctx,index,items)=>{const{parent:parent,current:current}=state;state.parent=current,state.current=ctx,visitor(ctx,index,items,state,next),state.current=current,state.parent=parent},next=(node,index,items)=>{state.ancestors.push(state.current),callback(node,index,items),state.ancestors.pop()};abbr.children.forEach(callback)}function createWalkState(config){return{current:null,parent:void 0,ancestors:[],config:config,field:1,out:createOutputStream(config.options)}}const caret=[{type:"Field",index:0,name:""}];function isSnippet(node){return!!node&&(!node.name&&!node.attributes)}function isInlineElement(node,config){return!!node&&isInline(node,config)}function isField(token){return"object"==typeof token&&"Field"===token.type}function pushTokens(tokens,state){const{out:out}=state;let largestIndex=-1;for(const t of tokens)"string"==typeof t?pushString(out,t):(pushField(out,state.field+t.index,t.name),t.index>largestIndex&&(largestIndex=t.index));-1!==largestIndex&&(state.field+=largestIndex+1)}function splitByLines(tokens){const result=[];let line=[];for(const t of tokens)if("string"==typeof t){const lines=t.split(/\r\n?|\n/g);for(line.push(lines.shift()||"");lines.length;)result.push(line),line=[lines.shift()||""]}else line.push(t);return line.length&&result.push(line),result}function shouldOutputAttribute(attr){return!attr.implied||"raw"!==attr.valueType||!!attr.value&&attr.value.length>0}var TemplateChars;function template(text){const tokens=[],scanner={pos:0,text:text};let placeholder,offset=scanner.pos,pos=scanner.pos;for(;scanner.pos<scanner.text.length;)pos=scanner.pos,(placeholder=consumePlaceholder(scanner))?(offset!==scanner.pos&&tokens.push(text.slice(offset,pos)),tokens.push(placeholder),offset=scanner.pos):scanner.pos++;return offset!==scanner.pos&&tokens.push(text.slice(offset)),tokens}function consumePlaceholder(scanner){if(peek$1(scanner)===TemplateChars.Start){const start=++scanner.pos;let namePos=start,afterPos=start,stack=1;for(;scanner.pos<scanner.text.length;){const code=peek$1(scanner);if(isTokenStart(code)){for(namePos=scanner.pos;isToken(peek$1(scanner));)scanner.pos++;afterPos=scanner.pos}else{if(code===TemplateChars.Start)stack++;else if(code===TemplateChars.End&&0==--stack)return{before:scanner.text.slice(start,namePos),after:scanner.text.slice(afterPos,scanner.pos++),name:scanner.text.slice(namePos,afterPos)};scanner.pos++}}}}function peek$1(scanner,pos=scanner.pos){return scanner.text.charCodeAt(pos)}function isTokenStart(code){return code>=65&&code<=90}function isToken(code){return isTokenStart(code)||code>47&&code<58||code===TemplateChars.Underscore||code===TemplateChars.Dash}function createCommentState(config){const{options:options}=config;return{enabled:options["comment.enabled"],trigger:options["comment.trigger"],before:options["comment.before"]?template(options["comment.before"]):void 0,after:options["comment.after"]?template(options["comment.after"]):void 0}}function commentNodeBefore(node,state){shouldComment(node,state)&&state.comment.before&&output(node,state.comment.before,state)}function commentNodeAfter(node,state){shouldComment(node,state)&&state.comment.after&&output(node,state.comment.after,state)}function shouldComment(node,state){const{comment:comment}=state;if(!(comment.enabled&&comment.trigger&&node.name&&node.attributes))return!1;for(const attr of node.attributes)if(attr.name&&comment.trigger.includes(attr.name))return!0;return!1}function output(node,tokens,state){const attrs={},{out:out}=state;for(const attr of node.attributes)attr.name&&attr.value&&(attrs[attr.name.toUpperCase()]=attr.value);for(const token of tokens)"string"==typeof token?pushString(out,token):attrs[token.name]&&(pushString(out,token.before),pushTokens(attrs[token.name],state),pushString(out,token.after))}!function(TemplateChars){TemplateChars[TemplateChars.Start=91]="Start",TemplateChars[TemplateChars.End=93]="End",TemplateChars[TemplateChars.Underscore=95]="Underscore",TemplateChars[TemplateChars.Dash=45]="Dash"}(TemplateChars||(TemplateChars={}));const htmlTagRegex=/^<([\w\-:]+)[\s>]/,reservedKeywords=new Set(["for","while","of","async","await","const","let","var","continue","break","debugger","do","export","import","in","instanceof","new","return","switch","this","throw","try","catch","typeof","void","with","yield"]);function html(abbr,config){const state=createWalkState(config);return state.comment=createCommentState(config),walk(abbr,element$1,state),state.out.value}function element$1(node,index,items,state,next){const{out:out,config:config}=state,format=shouldFormat$1(node,index,items,state),level=getIndent(state);if(out.level+=level,format&&pushNewline(out,!0),node.name){const name=tagName(node.name,config);if(commentNodeBefore(node,state),pushString(out,`<${name}`),node.attributes)for(const attr of node.attributes)shouldOutputAttribute(attr)&&pushAttribute(attr,state);if(!node.selfClosing||node.children.length||node.value){if(pushString(out,">"),!pushSnippet(node,state,next)){if(node.value){const innerFormat=node.value.some(hasNewline)||startsWithBlockTag(node.value,config);innerFormat&&pushNewline(state.out,++out.level),pushTokens(node.value,state),innerFormat&&pushNewline(state.out,--out.level)}if(node.children.forEach(next),!node.value&&!node.children.length){const innerFormat=config.options["output.formatLeafNode"]||config.options["output.formatForce"].includes(node.name);innerFormat&&pushNewline(state.out,++out.level),pushTokens(caret,state),innerFormat&&pushNewline(state.out,--out.level)}}pushString(out,`</${name}>`),commentNodeAfter(node,state)}else pushString(out,`${selfClose(config)}>`)}else!pushSnippet(node,state,next)&&node.value&&(pushTokens(node.value,state),node.children.forEach(next));if(format&&index===items.length-1&&state.parent){const offset=isSnippet(state.parent)?0:1;pushNewline(out,out.level-offset)}out.level-=level}function pushAttribute(attr,state){const{out:out,config:config}=state;if(attr.name){const attributes=config.options["markup.attributes"],valuePrefix=config.options["markup.valuePrefix"];let{name:name,value:value}=attr,lQuote=attrQuote(attr,config,!0),rQuote=attrQuote(attr,config);attributes&&(name=getMultiValue(name,attributes,attr.multiple)||name),name=attrName(name,config),config.options["jsx.enabled"]&&attr.multiple&&(lQuote=expressionStart,rQuote=expressionEnd);const prefix=valuePrefix?getMultiValue(attr.name,valuePrefix,attr.multiple):null;if(prefix&&1===(null==value?void 0:value.length)&&"string"==typeof value[0]){const val=value[0];value=[isPropKey(val)?`${prefix}.${val}`:`${prefix}['${val}']`],config.options["jsx.enabled"]&&(lQuote=expressionStart,rQuote=expressionEnd)}isBooleanAttribute(attr,config)&&!value?config.options["output.compactBoolean"]||(value=[name]):value||(value=caret),pushString(out," "+name),value?(pushString(out,"="+lQuote),pushTokens(value,state),pushString(out,rQuote)):"html"!==config.options["output.selfClosingStyle"]&&pushString(out,"="+lQuote+rQuote)}}function pushSnippet(node,state,next){if(node.value&&node.children.length){const fieldIx=node.value.findIndex(isField);if(-1!==fieldIx){pushTokens(node.value.slice(0,fieldIx),state);const line=state.out.line;let pos=fieldIx+1;return node.children.forEach(next),state.out.line!==line&&"string"==typeof node.value[pos]&&pushString(state.out,node.value[pos++].trimLeft()),pushTokens(node.value.slice(pos),state),!0}}return!1}function shouldFormat$1(node,index,items,state){const{config:config,parent:parent}=state;if(!config.options["output.format"])return!1;if(0===index&&!parent)return!1;if(parent&&isSnippet(parent)&&1===items.length)return!1;if(isSnippet(node)){const format=isSnippet(items[index-1])||isSnippet(items[index+1])||node.value.some(hasNewline)||node.value.some(isField)&&node.children.length;if(format)return!0}if(isInline(node,config)){if(0===index){for(let i=0;i<items.length;i++)if(!isInline(items[i],config))return!0}else if(!isInline(items[index-1],config))return!0;if(config.options["output.inlineBreak"]){let adjacentInline=1,before=index,after=index;for(;isInlineElement(items[--before],config);)adjacentInline++;for(;isInlineElement(items[++after],config);)adjacentInline++;if(adjacentInline>=config.options["output.inlineBreak"])return!0}for(let i=0,il=node.children.length;i<il;i++)if(shouldFormat$1(node.children[i],i,node.children,state))return!0;return!1}return!0}function getIndent(state){const{config:config,parent:parent}=state;return!parent||isSnippet(parent)||parent.name&&config.options["output.formatSkip"].includes(parent.name)?0:1}function hasNewline(value){return"string"==typeof value&&/\r|\n/.test(value)}function startsWithBlockTag(value,config){if(value.length&&"string"==typeof value[0]){const matches=htmlTagRegex.exec(value[0]);if((null==matches?void 0:matches.length)&&!config.options.inlineElements.includes(matches[1].toLowerCase()))return!0}return!1}function getMultiValue(key,data,multiple){return multiple&&data[`${key}*`]||data[key]}function isPropKey(name){return!reservedKeywords.has(name)&&/^[a-zA-Z_$][\w_$]*$/.test(name)}function indentFormat(abbr,config,options){const state=createWalkState(config);return state.options=options||{},walk(abbr,element,state),state.out.value}function element(node,index,items,state,next){const{out:out,options:options}=state,{primary:primary,secondary:secondary}=collectAttributes(node),level=state.parent?1:0;out.level+=level,shouldFormat(node,index,items,state)&&pushNewline(out,!0),!node.name||"div"===node.name&&primary.length||pushString(out,(options.beforeName||"")+node.name+(options.afterName||"")),pushPrimaryAttributes(primary,state),pushSecondaryAttributes(secondary.filter(shouldOutputAttribute),state),!node.selfClosing||node.value||node.children.length?(pushValue(node,state),node.children.forEach(next)):state.options.selfClose&&pushString(out,state.options.selfClose),out.level-=level}function collectAttributes(node){const primary=[],secondary=[];if(node.attributes)for(const attr of node.attributes)isPrimaryAttribute(attr)?primary.push(attr):secondary.push(attr);return{primary:primary,secondary:secondary}}function pushPrimaryAttributes(attrs,state){for(const attr of attrs)if(attr.value)if("class"===attr.name){pushString(state.out,".");const tokens=attr.value.map(t=>"string"==typeof t?t.replace(/\s+/g,"."):t);pushTokens(tokens,state)}else pushString(state.out,"#"),pushTokens(attr.value,state)}function pushSecondaryAttributes(attrs,state){if(attrs.length){const{out:out,config:config,options:options}=state;options.beforeAttribute&&pushString(out,options.beforeAttribute);for(let i=0;i<attrs.length;i++){const attr=attrs[i];pushString(out,attrName(attr.name||"",config)),isBooleanAttribute(attr,config)&&!attr.value?!config.options["output.compactBoolean"]&&options.booleanValue&&pushString(out,"="+options.booleanValue):(pushString(out,"="+attrQuote(attr,config,!0)),pushTokens(attr.value||caret,state),pushString(out,attrQuote(attr,config))),i!==attrs.length-1&&options.glueAttribute&&pushString(out,options.glueAttribute)}options.afterAttribute&&pushString(out,options.afterAttribute)}}function pushValue(node,state){if(!node.value&&node.children.length)return;const value=node.value||caret,lines=splitByLines(value),{out:out,options:options}=state;if(1===lines.length)(node.name||node.attributes)&&push(out," "),pushTokens(value,state);else{const lineLengths=[];let maxLength=0;for(const line of lines){const len=valueLength(line);lineLengths.push(len),len>maxLength&&(maxLength=len)}out.level++;for(let i=0;i<lines.length;i++)pushNewline(out,!0),options.beforeTextLine&&push(out,options.beforeTextLine),pushTokens(lines[i],state),options.afterTextLine&&(push(out," ".repeat(maxLength-lineLengths[i])),push(out,options.afterTextLine));out.level--}}function isPrimaryAttribute(attr){return"class"===attr.name||"id"===attr.name}function valueLength(tokens){let len=0;for(const token of tokens)len+="string"==typeof token?token.length:token.name.length;return len}function shouldFormat(node,index,items,state){return!(!state.parent&&0===index)&&!isSnippet(node)}function haml(abbr,config){return indentFormat(abbr,config,{beforeName:"%",beforeAttribute:"(",afterAttribute:")",glueAttribute:" ",afterTextLine:" |",booleanValue:"true",selfClose:"/"})}function slim(abbr,config){return indentFormat(abbr,config,{beforeAttribute:" ",glueAttribute:" ",beforeTextLine:"| ",selfClose:"/"})}function pug(abbr,config){return indentFormat(abbr,config,{beforeAttribute:"(",afterAttribute:")",glueAttribute:", ",beforeTextLine:"| ",selfClose:"xml"===config.options["output.selfClosingStyle"]?"/":""})}const formatters={html:html,haml:haml,slim:slim,pug:pug};function parse$1(abbr,config){let oldTextValue;if("string"==typeof abbr){const parseOpt=Object.assign({},config);config.options["jsx.enabled"]&&(parseOpt.jsx=!0),config.options["markup.href"]&&(parseOpt.href=!0),abbr=parseAbbreviation(abbr,parseOpt),oldTextValue=config.text,config.text=void 0}return walk$1(abbr=resolveSnippets(abbr,config),transform,config),config.text=null!=oldTextValue?oldTextValue:config.text,abbr}function stringify(abbr,config){const formatter=formatters[config.syntax]||html;return formatter(abbr,config)}function transform(node,ancestors,config){implicitTag(node,ancestors,config),mergeAttributes(node,config),lorem(node,ancestors,config),"xsl"===config.syntax&&xsl(node),"markup"===config.type&&label(node),config.options["bem.enabled"]&&bem(node,ancestors,config)}var CSSSnippetType;!function(CSSSnippetType){CSSSnippetType.Raw="Raw",CSSSnippetType.Property="Property"}(CSSSnippetType||(CSSSnippetType={}));const reProperty=/^([a-z-]+)(?:\s*:\s*([^\n\r;]+?);*)?$/,opt={value:!0};function createSnippet(key,value){const m=value.match(reProperty);if(m){const keywords={},parsed=m[2]?m[2].split("|").map(parseValue):[];for(const item of parsed)for(const cssVal of item)collectKeywords(cssVal,keywords);return{type:CSSSnippetType.Property,key:key,property:m[1],value:parsed,keywords:keywords,dependencies:[]}}return{type:CSSSnippetType.Raw,key:key,value:value}}function nest(snippets){snippets=snippets.slice().sort(snippetsSort);const stack=[];let prev;for(const cur of snippets.filter(isProperty)){for(;stack.length;){if(prev=stack[stack.length-1],cur.property.startsWith(prev.property)&&45===cur.property.charCodeAt(prev.property.length)){prev.dependencies.push(cur),stack.push(cur);break}stack.pop()}stack.length||stack.push(cur)}return snippets}function snippetsSort(a,b){return a.key===b.key?0:a.key<b.key?-1:1}function parseValue(value){return parse$2(value.trim(),opt)[0].value}function isProperty(snippet){return snippet.type===CSSSnippetType.Property}function collectKeywords(cssVal,dest){for(const v of cssVal.value)if("Literal"===v.type)dest[v.value]=v;else if("FunctionCall"===v.type)dest[v.name]=v;else if("Field"===v.type){const value=v.name.trim();value&&(dest[value]={type:"Literal",value:value})}}function scoreMatch(str1,str2,partialMatch=!1){if((str1=str1.toLowerCase())===(str2=str2.toLowerCase()))return 1;if(!str1||!str2||str1.charCodeAt(0)!==str2.charCodeAt(0))return 0;const str1Len=str1.length,str2Len=str2.length;if(!partialMatch&&str1Len>str2Len)return 0;const minLength=Math.min(str1Len,str2Len),maxLength=Math.max(str1Len,str2Len);let i=1,j=1,score=maxLength,ch1=0,ch2=0,found=!1,acronym=!1;for(;i<str1Len;){for(ch1=str1.charCodeAt(i),found=!1,acronym=!1;j<str2Len;){if(ch1===(ch2=str2.charCodeAt(j))){found=!0,score+=maxLength-(acronym?i:j);break}acronym=45===ch2,j++}if(!found){if(!partialMatch)return 0;break}i++}const matchRatio=i/maxLength,delta=maxLength-minLength,maxScore=sum(maxLength)-sum(delta);return score*matchRatio/maxScore}function sum(n){return n*(n+1)/2}function color(token,shortHex){return token.r||token.g||token.b||token.a?1===token.a?asHex(token,shortHex):asRGB(token):"transparent"}function asHex(token,short){const fn=short&&isShortHex(token.r)&&isShortHex(token.g)&&isShortHex(token.b)?toShortHex:toHex;return"#"+fn(token.r)+fn(token.g)+fn(token.b)}function asRGB(token){const values=[token.r,token.g,token.b];return 1!==token.a&&values.push(frac(token.a,8)),`${3===values.length?"rgb":"rgba"}(${values.join(", ")})`}function frac(num,digits=4){return num.toFixed(digits).replace(/\.?0+$/,"")}function isShortHex(hex){return!(hex%17)}function toShortHex(num){return(num>>4).toString(16)}function toHex(num){return pad(num.toString(16),2)}function pad(value,len){for(;value.length<len;)value="0"+value;return value}const CSSAbbreviationScope={Global:"@@global",Section:"@@section",Property:"@@property",Value:"@@value"};function css(abbr,config){var _a;const out=createOutputStream(config.options),format=config.options["output.format"];(null===(_a=config.context)||void 0===_a?void 0:_a.name)===CSSAbbreviationScope.Section&&(abbr=abbr.filter(node=>node.snippet));for(let i=0;i<abbr.length;i++)format&&0!==i&&pushNewline(out,!0),property(abbr[i],out,config);return out.value}function property(node,out,config){const isJSON=config.options["stylesheet.json"];if(node.name){const name=isJSON?toCamelCase(node.name):node.name;pushString(out,name+config.options["stylesheet.between"]),node.value.length?propertyValue(node,out,config):pushField(out,0,""),isJSON?push(out,","):(outputImportant(node,out,!0),push(out,config.options["stylesheet.after"]))}else{for(const cssVal of node.value)for(const v of cssVal.value)outputToken(v,out,config);outputImportant(node,out,node.value.length>0)}}function propertyValue(node,out,config){const isJSON=config.options["stylesheet.json"],num=isJSON?getSingleNumeric(node):null;if(!num||num.unit&&"px"!==num.unit){const quote=getQuote(config);isJSON&&push(out,quote);for(let i=0;i<node.value.length;i++)0!==i&&push(out,", "),outputValue(node.value[i],out,config);isJSON&&push(out,quote)}else push(out,String(num.value))}function outputImportant(node,out,separator){node.important&&(separator&&push(out," "),push(out,"!important"))}function outputValue(value,out,config){for(let i=0,prevEnd=-1;i<value.value.length;i++){const token=value.value[i];0===i||"Field"===token.type&&token.start===prevEnd||push(out," "),outputToken(token,out,config),prevEnd=token.end}}function outputToken(token,out,config){if("ColorValue"===token.type)push(out,color(token,config.options["stylesheet.shortHex"]));else if("Literal"===token.type||"CustomProperty"===token.type)pushString(out,token.value);else if("NumberValue"===token.type)pushString(out,frac(token.value,4)+token.unit);else if("StringValue"===token.type){const quote="double"===token.quote?'"':"'";pushString(out,quote+token.value+quote)}else if("Field"===token.type)pushField(out,token.index,token.name);else if("FunctionCall"===token.type){push(out,token.name+"(");for(let i=0;i<token.arguments.length;i++)i&&push(out,", "),outputValue(token.arguments[i],out,config);push(out,")")}}function getSingleNumeric(node){if(1===node.value.length){const cssVal=node.value[0];if(1===cssVal.value.length&&"NumberValue"===cssVal.value[0].type)return cssVal.value[0]}}function toCamelCase(str){return str.replace(/\-(\w)/g,(_,letter)=>letter.toUpperCase())}function getQuote(config){return config.options["stylesheet.jsonDoubleQuotes"]?'"':"'"}const gradientName="lg";function parse(abbr,config){var _a;const snippets=(null===(_a=config.cache)||void 0===_a?void 0:_a.stylesheetSnippets)||convertSnippets(config.snippets),result=[];config.cache&&(config.cache.stylesheetSnippets=snippets),"string"==typeof abbr&&(abbr=parse$2(abbr,{value:isValueScope(config)}));const filteredSnippets=getSnippetsForScope(snippets,config);for(const node of abbr){const resolved=resolveNode(node,filteredSnippets,config);resolved&&result.push(resolved)}return result}function convertSnippets(snippets){const result=[];for(const key of Object.keys(snippets))result.push(createSnippet(key,snippets[key]));return nest(result)}function resolveNode(node,snippets,config){if(!resolveGradient(node,config)){const score=config.options["stylesheet.fuzzySearchMinScore"];if(isValueScope(config)){const propName=config.context.name,snippet=snippets.find(s=>s.type===CSSSnippetType.Property&&s.property===propName);resolveValueKeywords(node,config,snippet,score),node.snippet=snippet}else if(node.name){const snippet=findBestMatch(node.name,snippets,score,!0);if(node.snippet=snippet,snippet){const resolved=snippet.type===CSSSnippetType.Property?resolveAsProperty(node,snippet,config):resolveAsSnippet(node,snippet);if(resolved)node=resolved;else if(config.options["stylesheet.strictMatch"])return null}}}return(node.name||config.context)&&resolveNumericValue(node,config),node}function resolveGradient(node,config){let gradientFn=null;const cssVal=1===node.value.length?node.value[0]:null;if(cssVal&&1===cssVal.value.length){const v=cssVal.value[0];"FunctionCall"===v.type&&v.name===gradientName&&(gradientFn=v)}return!(!gradientFn&&node.name!==gradientName)&&(gradientFn=gradientFn?Object.assign(Object.assign({},gradientFn),{name:"linear-gradient"}):{type:"FunctionCall",name:"linear-gradient",arguments:[cssValue(field(0,""))]},config.context||(node.name="background-image"),node.value=[cssValue(gradientFn)],!0)}function resolveAsProperty(node,snippet,config){const abbr=node.name,inlineValue=getUnmatchedPart(abbr,snippet.key);if(inlineValue){if(node.value.length)return null;const kw=resolveKeyword(inlineValue,config,snippet);if(!kw)return null;node.value.push(cssValue(kw))}if(node.name=snippet.property,node.value.length)resolveValueKeywords(node,config,snippet);else if(snippet.value.length){const defaultValue=snippet.value[0];node.value=1===snippet.value.length||defaultValue.some(hasField)?defaultValue:defaultValue.map(n=>wrapWithField(n,config))}return node}function resolveValueKeywords(node,config,snippet,minScore){for(const cssVal of node.value){const value=[];for(const token of cssVal.value)if("Literal"===token.type)value.push(resolveKeyword(token.value,config,snippet,minScore)||token);else if("FunctionCall"===token.type){const match=resolveKeyword(token.name,config,snippet,minScore);match&&"FunctionCall"===match.type?value.push(Object.assign(Object.assign({},match),{arguments:token.arguments.concat(match.arguments.slice(token.arguments.length))})):value.push(token)}else value.push(token);cssVal.value=value}}function resolveAsSnippet(node,snippet){let offset=0,m;const reField=/\$\{(\d+)(:[^}]+)?\}/g,inputValue=node.value[0],outputValue=[];for(;m=reField.exec(snippet.value);)offset!==m.index&&outputValue.push(literal(snippet.value.slice(offset,m.index))),offset=m.index+m[0].length,inputValue&&inputValue.value.length?outputValue.push(inputValue.value.shift()):outputValue.push(field(Number(m[1]),m[2]?m[2].slice(1):""));const tail=snippet.value.slice(offset);return tail&&outputValue.push(literal(tail)),node.name=void 0,node.value=[cssValue(...outputValue)],node}function findBestMatch(abbr,items,minScore=0,partialMatch=!1){let matchedItem=null,maxScore=0;for(const item of items){const score=scoreMatch(abbr,getScoringPart(item),partialMatch);if(1===score)return item;score&&score>=maxScore&&(maxScore=score,matchedItem=item)}return maxScore>=minScore?matchedItem:null}function getScoringPart(item){return"string"==typeof item?item:item.key}function getUnmatchedPart(abbr,str){for(let i=0,lastPos=0;i<abbr.length;i++){if(-1===(lastPos=str.indexOf(abbr[i],lastPos)))return abbr.slice(i);lastPos++}return""}function resolveKeyword(kw,config,snippet,minScore){let ref;if(snippet){if(ref=findBestMatch(kw,Object.keys(snippet.keywords),minScore))return snippet.keywords[ref];for(const dep of snippet.dependencies)if(ref=findBestMatch(kw,Object.keys(dep.keywords),minScore))return dep.keywords[ref]}return(ref=findBestMatch(kw,config.options["stylesheet.keywords"],minScore))?literal(ref):null}function resolveNumericValue(node,config){const aliases=config.options["stylesheet.unitAliases"],unitless=config.options["stylesheet.unitless"];for(const v of node.value)for(const t of v.value)"NumberValue"===t.type&&(t.unit?t.unit=aliases[t.unit]||t.unit:0===t.value||unitless.includes(node.name)||(t.unit=t.rawValue.includes(".")?config.options["stylesheet.floatUnit"]:config.options["stylesheet.intUnit"]))}function cssValue(...args){return{type:"CSSValue",value:args}}function literal(value){return{type:"Literal",value:value}}function field(index,name){return{type:"Field",index:index,name:name}}function hasField(value){for(const v of value.value)if("Field"===v.type||"FunctionCall"===v.type&&v.arguments.some(hasField))return!0;return!1}function wrapWithField(node,config,state={index:1}){let value=[];for(const v of node.value)switch(v.type){case"ColorValue":value.push(field(state.index++,color(v,config.options["stylesheet.shortHex"])));break;case"Literal":value.push(field(state.index++,v.value));break;case"NumberValue":value.push(field(state.index++,`${v.value}${v.unit}`));break;case"StringValue":const q="single"===v.quote?"'":'"';value.push(field(state.index++,q+v.value+q));break;case"FunctionCall":value.push(field(state.index++,v.name),literal("("));for(let i=0,il=v.arguments.length;i<il;i++)value=value.concat(wrapWithField(v.arguments[i],config,state).value),i!==il-1&&value.push(literal(", "));value.push(literal(")"));break;default:value.push(v)}return Object.assign(Object.assign({},node),{value:value})}function isValueScope(config){return!!config.context&&(config.context.name===CSSAbbreviationScope.Value||!config.context.name.startsWith("@@"))}function getSnippetsForScope(snippets,config){if(config.context){if(config.context.name===CSSAbbreviationScope.Section)return snippets.filter(s=>s.type===CSSSnippetType.Raw);if(config.context.name===CSSAbbreviationScope.Property)return snippets.filter(s=>s.type===CSSSnippetType.Property)}return snippets}var markupSnippets={a:"a[href]","a:blank":"a[href='http://${0}' target='_blank' rel='noopener noreferrer']","a:link":"a[href='http://${0}']","a:mail":"a[href='mailto:${0}']","a:tel":"a[href='tel:+${0}']",abbr:"abbr[title]","acr|acronym":"acronym[title]",base:"base[href]/",basefont:"basefont/",br:"br/",frame:"frame/",hr:"hr/",bdo:"bdo[dir]","bdo:r":"bdo[dir=rtl]","bdo:l":"bdo[dir=ltr]",col:"col/",link:"link[rel=stylesheet href]/","link:css":"link[href='${1:style}.css']","link:print":"link[href='${1:print}.css' media=print]","link:favicon":"link[rel='shortcut icon' type=image/x-icon href='${1:favicon.ico}']","link:mf|link:manifest":"link[rel='manifest' href='${1:manifest.json}']","link:touch":"link[rel=apple-touch-icon href='${1:favicon.png}']","link:rss":"link[rel=alternate type=application/rss+xml title=RSS href='${1:rss.xml}']","link:atom":"link[rel=alternate type=application/atom+xml title=Atom href='${1:atom.xml}']","link:im|link:import":"link[rel=import href='${1:component}.html']",meta:"meta/","meta:utf":"meta[http-equiv=Content-Type content='text/html;charset=UTF-8']","meta:vp":"meta[name=viewport content='width=${1:device-width}, initial-scale=${2:1.0}']","meta:compat":"meta[http-equiv=X-UA-Compatible content='${1:IE=7}']","meta:edge":"meta:compat[content='${1:ie=edge}']","meta:redirect":"meta[http-equiv=refresh content='0; url=${1:http://example.com}']","meta:refresh":"meta[http-equiv=refresh content='${1:5}']","meta:kw":"meta[name=keywords content]","meta:desc":"meta[name=description content]",style:"style",script:"script","script:src":"script[src]","script:module":"script[type=module src]",img:"img[src alt]/","img:s|img:srcset":"img[srcset src alt]","img:z|img:sizes":"img[sizes srcset src alt]",picture:"picture","src|source":"source/","src:sc|source:src":"source[src type]","src:s|source:srcset":"source[srcset]","src:t|source:type":"source[srcset type='${1:image/}']","src:z|source:sizes":"source[sizes srcset]","src:m|source:media":"source[media='(${1:min-width: })' srcset]","src:mt|source:media:type":"source:media[type='${2:image/}']","src:mz|source:media:sizes":"source:media[sizes srcset]","src:zt|source:sizes:type":"source[sizes srcset type='${1:image/}']",iframe:"iframe[src frameborder=0]",embed:"embed[src type]/",object:"object[data type]",param:"param[name value]/",map:"map[name]",area:"area[shape coords href alt]/","area:d":"area[shape=default]","area:c":"area[shape=circle]","area:r":"area[shape=rect]","area:p":"area[shape=poly]",form:"form[action]","form:get":"form[method=get]","form:post":"form[method=post]",label:"label[for]",input:"input[type=${1:text}]/",inp:"input[name=${1} id=${1}]","input:h|input:hidden":"input[type=hidden name]","input:t|input:text":"inp[type=text]","input:search":"inp[type=search]","input:email":"inp[type=email]","input:url":"inp[type=url]","input:p|input:password":"inp[type=password]","input:datetime":"inp[type=datetime]","input:date":"inp[type=date]","input:datetime-local":"inp[type=datetime-local]","input:month":"inp[type=month]","input:week":"inp[type=week]","input:time":"inp[type=time]","input:tel":"inp[type=tel]","input:number":"inp[type=number]","input:color":"inp[type=color]","input:c|input:checkbox":"inp[type=checkbox]","input:r|input:radio":"inp[type=radio]","input:range":"inp[type=range]","input:f|input:file":"inp[type=file]","input:s|input:submit":"input[type=submit value]","input:i|input:image":"input[type=image src alt]","input:b|input:btn|input:button":"input[type=button value]","input:reset":"input:button[type=reset]",isindex:"isindex/",select:"select[name=${1} id=${1}]","select:d|select:disabled":"select[disabled.]","opt|option":"option[value]",textarea:"textarea[name=${1} id=${1}]","tarea:c|textarea:cols":"textarea[name=${1} id=${1} cols=${2:30}]","tarea:r|textarea:rows":"textarea[name=${1} id=${1} rows=${3:10}]","tarea:cr|textarea:cols:rows":"textarea[name=${1} id=${1} cols=${2:30} rows=${3:10}]",marquee:"marquee[behavior direction]","menu:c|menu:context":"menu[type=context]","menu:t|menu:toolbar":"menu[type=toolbar]",video:"video[src]",audio:"audio[src]","html:xml":"html[xmlns=http://www.w3.org/1999/xhtml]",keygen:"keygen/",command:"command/","btn:s|button:s|button:submit":"button[type=submit]","btn:r|button:r|button:reset":"button[type=reset]","btn:b|button:b|button:button":"button[type=button]","btn:d|button:d|button:disabled":"button[disabled.]","fst:d|fset:d|fieldset:d|fieldset:disabled":"fieldset[disabled.]",bq:"blockquote",fig:"figure",figc:"figcaption",pic:"picture",ifr:"iframe",emb:"embed",obj:"object",cap:"caption",colg:"colgroup",fst:"fieldset",btn:"button",optg:"optgroup",tarea:"textarea",leg:"legend",sect:"section",art:"article",hdr:"header",ftr:"footer",adr:"address",dlg:"dialog",str:"strong",prog:"progress",mn:"main",tem:"template",fset:"fieldset",datal:"datalist",kg:"keygen",out:"output",det:"details",sum:"summary",cmd:"command",data:"data[value]",meter:"meter[value]",time:"time[datetime]","ri:d|ri:dpr":"img:s","ri:v|ri:viewport":"img:z","ri:a|ri:art":"pic>src:m+img","ri:t|ri:type":"pic>src:t+img","!!!":"{<!DOCTYPE html>}",doc:"html[lang=${lang}]>(head>meta[charset=${charset}]+meta:vp+title{${1:Document}})+body","!|html:5":"!!!+doc",c:"{\x3c!-- ${0} --\x3e}","cc:ie":"{\x3c!--[if IE]>${0}<![endif]--\x3e}","cc:noie":"{\x3c!--[if !IE]>\x3c!--\x3e${0}\x3c!--<![endif]--\x3e}"},stylesheetSnippets={"@f":"@font-face {\n\tfont-family: ${1};\n\tsrc: url(${2});\n}","@ff":"@font-face {\n\tfont-family: '${1:FontName}';\n\tsrc: url('${2:FileName}.eot');\n\tsrc: url('${2:FileName}.eot?#iefix') format('embedded-opentype'),\n\t\t url('${2:FileName}.woff') format('woff'),\n\t\t url('${2:FileName}.ttf') format('truetype'),\n\t\t url('${2:FileName}.svg#${1:FontName}') format('svg');\n\tfont-style: ${3:normal};\n\tfont-weight: ${4:normal};\n}","@i|@import":"@import url(${0});","@kf":"@keyframes ${1:identifier} {\n\t${2}\n}","@m|@media":"@media ${1:screen} {\n\t${0}\n}",ac:"align-content:start|end|flex-start|flex-end|center|space-between|space-around|stretch|space-evenly",ai:"align-items:start|end|flex-start|flex-end|center|baseline|stretch",anim:"animation:${1:name} ${2:duration} ${3:timing-function} ${4:delay} ${5:iteration-count} ${6:direction} ${7:fill-mode}",animdel:"animation-delay:time",animdir:"animation-direction:normal|reverse|alternate|alternate-reverse",animdur:"animation-duration:${1:0}s",animfm:"animation-fill-mode:both|forwards|backwards",animic:"animation-iteration-count:1|infinite",animn:"animation-name",animps:"animation-play-state:running|paused",animtf:"animation-timing-function:linear|ease|ease-in|ease-out|ease-in-out|cubic-bezier(${1:0.1}, ${2:0.7}, ${3:1.0}, ${3:0.1})",ap:"appearance:none",as:"align-self:start|end|auto|flex-start|flex-end|center|baseline|stretch",b:"bottom",bd:"border:${1:1px} ${2:solid} ${3:#000}",bdb:"border-bottom:${1:1px} ${2:solid} ${3:#000}",bdbc:"border-bottom-color:${1:#000}",bdbi:"border-bottom-image:url(${0})",bdbk:"border-break:close",bdbli:"border-bottom-left-image:url(${0})|continue",bdblrs:"border-bottom-left-radius",bdbri:"border-bottom-right-image:url(${0})|continue",bdbrrs:"border-bottom-right-radius",bdbs:"border-bottom-style",bdbw:"border-bottom-width",bdc:"border-color:${1:#000}",bdci:"border-corner-image:url(${0})|continue",bdcl:"border-collapse:collapse|separate",bdf:"border-fit:repeat|clip|scale|stretch|overwrite|overflow|space",bdi:"border-image:url(${0})",bdl:"border-left:${1:1px} ${2:solid} ${3:#000}",bdlc:"border-left-color:${1:#000}",bdlen:"border-length",bdli:"border-left-image:url(${0})",bdls:"border-left-style",bdlw:"border-left-width",bdr:"border-right:${1:1px} ${2:solid} ${3:#000}",bdrc:"border-right-color:${1:#000}",bdri:"border-right-image:url(${0})",bdrs:"border-radius",bdrst:"border-right-style",bdrw:"border-right-width",bds:"border-style:none|hidden|dotted|dashed|solid|double|dot-dash|dot-dot-dash|wave|groove|ridge|inset|outset",bdsp:"border-spacing",bdt:"border-top:${1:1px} ${2:solid} ${3:#000}",bdtc:"border-top-color:${1:#000}",bdti:"border-top-image:url(${0})",bdtli:"border-top-left-image:url(${0})|continue",bdtlrs:"border-top-left-radius",bdtri:"border-top-right-image:url(${0})|continue",bdtrrs:"border-top-right-radius",bdts:"border-top-style",bdtw:"border-top-width",bdw:"border-width",bbs:"border-block-start",bbe:"border-block-end",bis:"border-inline-start",bie:"border-inline-end",bfv:"backface-visibility:hidden|visible",bg:"background:${1:#000}","bg:n":"background: none",bga:"background-attachment:fixed|scroll",bgbk:"background-break:bounding-box|each-box|continuous",bgc:"background-color:${1:#fff}",bgcp:"background-clip:padding-box|border-box|content-box|no-clip",bgi:"background-image:url(${0})",bgo:"background-origin:padding-box|border-box|content-box",bgp:"background-position:${1:0} ${2:0}",bgpx:"background-position-x",bgpy:"background-position-y",bgr:"background-repeat:no-repeat|repeat-x|repeat-y|space|round",bgsz:"background-size:contain|cover",bs:"block-size",bxsh:"box-shadow:${1:inset }${2:hoff} ${3:voff} ${4:blur} ${5:#000}|none",bxsz:"box-sizing:border-box|content-box|border-box",c:"color:${1:#000}",cg:"column-gap",cr:"color:rgb(${1:0}, ${2:0}, ${3:0})",cra:"color:rgba(${1:0}, ${2:0}, ${3:0}, ${4:.5})",cl:"clear:both|left|right|none",cm:"/* ${0} */",cnt:"content:'${0}'|normal|open-quote|no-open-quote|close-quote|no-close-quote|attr(${0})|counter(${0})|counters(${0})",coi:"counter-increment",colm:"columns",colmc:"column-count",colmf:"column-fill",colmg:"column-gap",colmr:"column-rule",colmrc:"column-rule-color",colmrs:"column-rule-style",colmrw:"column-rule-width",colms:"column-span",colmw:"column-width",cor:"counter-reset",cp:"clip:auto|rect(${1:top} ${2:right} ${3:bottom} ${4:left})",cps:"caption-side:top|bottom",cur:"cursor:pointer|auto|default|crosshair|hand|help|move|pointer|text",d:"display:block|none|flex|inline-flex|inline|inline-block|grid|inline-grid|subgrid|list-item|run-in|contents|table|inline-table|table-caption|table-column|table-column-group|table-header-group|table-footer-group|table-row|table-row-group|table-cell|ruby|ruby-base|ruby-base-group|ruby-text|ruby-text-group",ec:"empty-cells:show|hide",f:"font:${1:1em} ${2:sans-serif}",fd:"font-display:auto|block|swap|fallback|optional",fef:"font-effect:none|engrave|emboss|outline",fem:"font-emphasize",femp:"font-emphasize-position:before|after",fems:"font-emphasize-style:none|accent|dot|circle|disc",ff:"font-family:serif|sans-serif|cursive|fantasy|monospace",fft:'font-family:"Times New Roman", Times, Baskerville, Georgia, serif',ffa:'font-family:Arial, "Helvetica Neue", Helvetica, sans-serif',ffv:"font-family:Verdana, Geneva, sans-serif",fl:"float:left|right|none",fs:"font-style:italic|normal|oblique",fsm:"font-smoothing:antialiased|subpixel-antialiased|none",fst:"font-stretch:normal|ultra-condensed|extra-condensed|condensed|semi-condensed|semi-expanded|expanded|extra-expanded|ultra-expanded",fv:"font-variant:normal|small-caps",fvs:"font-variation-settings:normal|inherit|initial|unset",fw:"font-weight:normal|bold|bolder|lighter",fx:"flex",fxb:"flex-basis:fill|max-content|min-content|fit-content|content",fxd:"flex-direction:row|row-reverse|column|column-reverse",fxf:"flex-flow",fxg:"flex-grow",fxsh:"flex-shrink",fxw:"flex-wrap:nowrap|wrap|wrap-reverse",fsz:"font-size",fsza:"font-size-adjust",g:"gap",gtc:"grid-template-columns:repeat(${0})|minmax()",gtr:"grid-template-rows:repeat(${0})|minmax()",gta:"grid-template-areas",gt:"grid-template",gg:"grid-gap",gcg:"grid-column-gap",grg:"grid-row-gap",gac:"grid-auto-columns:auto|minmax()",gar:"grid-auto-rows:auto|minmax()",gaf:"grid-auto-flow:row|column|dense|inherit|initial|unset",gd:"grid",gc:"grid-column",gcs:"grid-column-start",gce:"grid-column-end",gr:"grid-row",grs:"grid-row-start",gre:"grid-row-end",ga:"grid-area",h:"height",is:"inline-size",jc:"justify-content:start|end|stretch|flex-start|flex-end|center|space-between|space-around|space-evenly",ji:"justify-items:start|end|center|stretch",js:"justify-self:start|end|center|stretch",l:"left",lg:"background-image:linear-gradient(${1})",lh:"line-height",lis:"list-style",lisi:"list-style-image",lisp:"list-style-position:inside|outside",list:"list-style-type:disc|circle|square|decimal|decimal-leading-zero|lower-roman|upper-roman",lts:"letter-spacing:normal",m:"margin",mah:"max-height",mar:"max-resolution",maw:"max-width",mb:"margin-bottom",mih:"min-height",mir:"min-resolution",miw:"min-width",ml:"margin-left",mr:"margin-right",mt:"margin-top",mbs:"margin-block-start",mbe:"margin-block-end",mis:"margin-inline-start",mie:"margin-inline-end",ol:"outline",olc:"outline-color:${1:#000}|invert",olo:"outline-offset",ols:"outline-style:none|dotted|dashed|solid|double|groove|ridge|inset|outset",olw:"outline-width:thin|medium|thick","op|opa":"opacity",ord:"order",ori:"orientation:landscape|portrait",orp:"orphans",ov:"overflow:hidden|visible|hidden|scroll|auto",ovs:"overflow-style:scrollbar|auto|scrollbar|panner|move|marquee",ovx:"overflow-x:hidden|visible|hidden|scroll|auto",ovy:"overflow-y:hidden|visible|hidden|scroll|auto",p:"padding",pb:"padding-bottom",pgba:"page-break-after:auto|always|left|right",pgbb:"page-break-before:auto|always|left|right",pgbi:"page-break-inside:auto|avoid",pl:"padding-left",pos:"position:relative|absolute|relative|fixed|static",pr:"padding-right",pt:"padding-top",pbs:"padding-block-start",pbe:"padding-block-end",pis:"padding-inline-start",pie:"padding-inline-end",spbs:"scroll-padding-block-start",spbe:"scroll-padding-block-end",spis:"scroll-padding-inline-start",spie:"scroll-padding-inline-end",q:"quotes",qen:"quotes:'\\201C' '\\201D' '\\2018' '\\2019'",qru:"quotes:'\\00AB' '\\00BB' '\\201E' '\\201C'",r:"right",rg:"row-gap",rsz:"resize:none|both|horizontal|vertical",t:"top",ta:"text-align:left|center|right|justify",tal:"text-align-last:left|center|right",tbl:"table-layout:fixed",td:"text-decoration:none|underline|overline|line-through",te:"text-emphasis:none|accent|dot|circle|disc|before|after",th:"text-height:auto|font-size|text-size|max-size",ti:"text-indent",tj:"text-justify:auto|inter-word|inter-ideograph|inter-cluster|distribute|kashida|tibetan",to:"text-outline:${1:0} ${2:0} ${3:#000}",tov:"text-overflow:ellipsis|clip",tr:"text-replace",trf:"transform:${1}|skewX(${1:angle})|skewY(${1:angle})|scale(${1:x}, ${2:y})|scaleX(${1:x})|scaleY(${1:y})|scaleZ(${1:z})|scale3d(${1:x}, ${2:y}, ${3:z})|rotate(${1:angle})|rotateX(${1:angle})|rotateY(${1:angle})|rotateZ(${1:angle})|translate(${1:x}, ${2:y})|translateX(${1:x})|translateY(${1:y})|translateZ(${1:z})|translate3d(${1:tx}, ${2:ty}, ${3:tz})",trfo:"transform-origin",trfs:"transform-style:preserve-3d",trs:"transition:${1:prop} ${2:time}",trsde:"transition-delay:${1:time}",trsdu:"transition-duration:${1:time}",trsp:"transition-property:${1:prop}",trstf:"transition-timing-function:${1:fn}",tsh:"text-shadow:${1:hoff} ${2:voff} ${3:blur} ${4:#000}",tt:"text-transform:uppercase|lowercase|capitalize|none",tw:"text-wrap:none|normal|unrestricted|suppress",us:"user-select:none",v:"visibility:hidden|visible|collapse",va:"vertical-align:top|super|text-top|middle|baseline|bottom|text-bottom|sub","w|wid":"width",whs:"white-space:nowrap|pre|pre-wrap|pre-line|normal",whsc:"white-space-collapse:normal|keep-all|loose|break-strict|break-all",wido:"widows",wm:"writing-mode:lr-tb|lr-tb|lr-bt|rl-tb|rl-bt|tb-rl|tb-lr|bt-lr|bt-rl",wob:"word-break:normal|keep-all|break-all",wos:"word-spacing",wow:"word-wrap:none|unrestricted|suppress|break-word|normal",z:"z-index",zom:"zoom:1"},xslSnippets={"tm|tmatch":"xsl:template[match mode]","tn|tname":"xsl:template[name]",call:"xsl:call-template[name]",ap:"xsl:apply-templates[select mode]",api:"xsl:apply-imports",imp:"xsl:import[href]",inc:"xsl:include[href]",ch:"xsl:choose","wh|xsl:when":"xsl:when[test]",ot:"xsl:otherwise",if:"xsl:if[test]",par:"xsl:param[name]",pare:"xsl:param[name select]",var:"xsl:variable[name]",vare:"xsl:variable[name select]",wp:"xsl:with-param[name select]",key:"xsl:key[name match use]",elem:"xsl:element[name]",attr:"xsl:attribute[name]",attrs:"xsl:attribute-set[name]",cp:"xsl:copy[select]",co:"xsl:copy-of[select]",val:"xsl:value-of[select]","for|each":"xsl:for-each[select]",tex:"xsl:text",com:"xsl:comment",msg:"xsl:message[terminate=no]",fall:"xsl:fallback",num:"xsl:number[value]",nam:"namespace-alias[stylesheet-prefix result-prefix]",pres:"xsl:preserve-space[elements]",strip:"xsl:strip-space[elements]",proc:"xsl:processing-instruction[name]",sort:"xsl:sort[select order]",choose:"xsl:choose>xsl:when+xsl:otherwise",xsl:"!!!+xsl:stylesheet[version=1.0 xmlns:xsl=http://www.w3.org/1999/XSL/Transform]>{\n|}","!!!":'{<?xml version="1.0" encoding="UTF-8"?>}'},pugSnippets={"!!!":"{doctype html}"},variables={lang:"en",locale:"en-US",charset:"UTF-8",indentation:"\t",newline:"\n"};const defaultSyntaxes={markup:"html",stylesheet:"css"},defaultOptions$1={inlineElements:["a","abbr","acronym","applet","b","basefont","bdo","big","br","button","cite","code","del","dfn","em","font","i","iframe","img","input","ins","kbd","label","map","object","q","s","samp","select","small","span","strike","strong","sub","sup","textarea","tt","u","var"],"output.indent":"\t","output.baseIndent":"","output.newline":"\n","output.tagCase":"","output.attributeCase":"","output.attributeQuotes":"double","output.format":!0,"output.formatLeafNode":!1,"output.formatSkip":["html"],"output.formatForce":["body"],"output.inlineBreak":3,"output.compactBoolean":!1,"output.booleanAttributes":["contenteditable","seamless","async","autofocus","autoplay","checked","controls","defer","disabled","formnovalidate","hidden","ismap","loop","multiple","muted","novalidate","readonly","required","reversed","selected","typemustmatch"],"output.reverseAttributes":!1,"output.selfClosingStyle":"html","output.field":(index,placeholder)=>placeholder,"output.text":text=>text,"markup.href":!0,"comment.enabled":!1,"comment.trigger":["id","class"],"comment.before":"","comment.after":"\n\x3c!-- /[#ID][.CLASS] --\x3e","bem.enabled":!1,"bem.element":"__","bem.modifier":"_","jsx.enabled":!1,"stylesheet.keywords":["auto","inherit","unset","none"],"stylesheet.unitless":["z-index","line-height","opacity","font-weight","zoom","flex","flex-grow","flex-shrink"],"stylesheet.shortHex":!0,"stylesheet.between":": ","stylesheet.after":";","stylesheet.intUnit":"px","stylesheet.floatUnit":"em","stylesheet.unitAliases":{e:"em",p:"%",x:"ex",r:"rem"},"stylesheet.json":!1,"stylesheet.jsonDoubleQuotes":!1,"stylesheet.fuzzySearchMinScore":0,"stylesheet.strictMatch":!1},defaultConfig={type:"markup",syntax:"html",variables:variables,snippets:{},options:defaultOptions$1},syntaxConfig={markup:{snippets:parseSnippets(markupSnippets)},xhtml:{options:{"output.selfClosingStyle":"xhtml"}},xml:{options:{"output.selfClosingStyle":"xml"}},xsl:{snippets:parseSnippets(xslSnippets),options:{"output.selfClosingStyle":"xml"}},jsx:{options:{"jsx.enabled":!0,"markup.attributes":{class:"className","class*":"styleName",for:"htmlFor"},"markup.valuePrefix":{"class*":"styles"}}},vue:{options:{"markup.attributes":{"class*":":class"}}},svelte:{options:{"jsx.enabled":!0}},pug:{snippets:parseSnippets(pugSnippets)},stylesheet:{snippets:parseSnippets(stylesheetSnippets)},sass:{options:{"stylesheet.after":""}},stylus:{options:{"stylesheet.between":" ","stylesheet.after":""}}};function parseSnippets(snippets){const result={};return Object.keys(snippets).forEach(k=>{for(const name of k.split("|"))result[name]=snippets[k]}),result}function resolveConfig(config={},globals={}){const type=config.type||"markup",syntax=config.syntax||defaultSyntaxes[type];return Object.assign(Object.assign(Object.assign({},defaultConfig),config),{type:type,syntax:syntax,variables:mergedData(type,syntax,"variables",config,globals),snippets:mergedData(type,syntax,"snippets",config,globals),options:mergedData(type,syntax,"options",config,globals)})}function mergedData(type,syntax,key,config,globals={}){const typeDefaults=syntaxConfig[type],typeOverride=globals[type],syntaxDefaults=syntaxConfig[syntax],syntaxOverride=globals[syntax];return Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({},defaultConfig[key]),typeDefaults&&typeDefaults[key]),syntaxDefaults&&syntaxDefaults[key]),typeOverride&&typeOverride[key]),syntaxOverride&&syntaxOverride[key]),config[key])}function backwardScanner(text,start=0){return{text:text,start:start,pos:text.length}}function sol(scanner){return scanner.pos===scanner.start}function peek(scanner,offset=0){return scanner.text.charCodeAt(scanner.pos-1+offset)}function previous(scanner){if(!sol(scanner))return scanner.text.charCodeAt(--scanner.pos)}function consume(scanner,match){if(sol(scanner))return!1;const ok="function"==typeof match?match(peek(scanner)):match===peek(scanner);return ok&&scanner.pos--,!!ok}function consumeWhile(scanner,match){const start=scanner.pos;for(;consume(scanner,match););return scanner.pos<start}var Chars$1,Brackets;function isQuote(c){return c===Chars$1.SingleQuote||c===Chars$1.DoubleQuote}function consumeQuoted(scanner){const start=scanner.pos,quote=previous(scanner);if(isQuote(quote))for(;!sol(scanner);)if(previous(scanner)===quote&&peek(scanner)!==Chars$1.Escape)return!0;return scanner.pos=start,!1}!function(Chars){Chars[Chars.SingleQuote=39]="SingleQuote",Chars[Chars.DoubleQuote=34]="DoubleQuote",Chars[Chars.Escape=92]="Escape"}(Chars$1||(Chars$1={})),function(Brackets){Brackets[Brackets.SquareL=91]="SquareL",Brackets[Brackets.SquareR=93]="SquareR",Brackets[Brackets.RoundL=40]="RoundL",Brackets[Brackets.RoundR=41]="RoundR",Brackets[Brackets.CurlyL=123]="CurlyL",Brackets[Brackets.CurlyR=125]="CurlyR"}(Brackets||(Brackets={}));const bracePairs={[Brackets.SquareL]:Brackets.SquareR,[Brackets.RoundL]:Brackets.RoundR,[Brackets.CurlyL]:Brackets.CurlyR};var Chars;function isHtml(scanner){const start=scanner.pos;if(!consume(scanner,Chars.AngleRight))return!1;let ok=!1;for(consume(scanner,Chars.Slash);!sol(scanner);){if(consumeWhile(scanner,isWhiteSpace),consumeIdent(scanner)){if(consume(scanner,Chars.Slash)){ok=consume(scanner,Chars.AngleLeft);break}if(consume(scanner,Chars.AngleLeft)){ok=!0;break}if(consume(scanner,isWhiteSpace))continue;if(consume(scanner,Chars.Equals)){if(consumeIdent(scanner))continue;break}if(consumeAttributeWithUnquotedValue(scanner)){ok=!0;break}break}if(!consumeAttribute(scanner))break}return scanner.pos=start,ok}function consumeAttribute(scanner){return consumeAttributeWithQuotedValue(scanner)||consumeAttributeWithUnquotedValue(scanner)}function consumeAttributeWithQuotedValue(scanner){const start=scanner.pos;return!!(consumeQuoted(scanner)&&consume(scanner,Chars.Equals)&&consumeIdent(scanner))||(scanner.pos=start,!1)}function consumeAttributeWithUnquotedValue(scanner){const start=scanner.pos,stack=[];for(;!sol(scanner);){const ch=peek(scanner);if(isCloseBracket(ch))stack.push(ch);else if(isOpenBracket(ch)){if(stack.pop()!==bracePairs[ch])break}else if(!isUnquotedValue(ch))break;scanner.pos--}return!(start===scanner.pos||!consume(scanner,Chars.Equals)||!consumeIdent(scanner))||(scanner.pos=start,!1)}function consumeIdent(scanner){return consumeWhile(scanner,isIdent)}function isIdent(ch){return ch===Chars.Colon||ch===Chars.Dash||isAlpha(ch)||isNumber(ch)}function isAlpha(ch){return(ch&=-33)>=65&&ch<=90}function isNumber(ch){return ch>47&&ch<58}function isWhiteSpace(ch){return ch===Chars.Space||ch===Chars.Tab}function isUnquotedValue(ch){return!isNaN(ch)&&ch!==Chars.Equals&&!isWhiteSpace(ch)&&!isQuote(ch)}function isOpenBracket(ch){return ch===Brackets.CurlyL||ch===Brackets.RoundL||ch===Brackets.SquareL}function isCloseBracket(ch){return ch===Brackets.CurlyR||ch===Brackets.RoundR||ch===Brackets.SquareR}!function(Chars){Chars[Chars.Tab=9]="Tab",Chars[Chars.Space=32]="Space",Chars[Chars.Dash=45]="Dash",Chars[Chars.Slash=47]="Slash",Chars[Chars.Colon=58]="Colon",Chars[Chars.Equals=61]="Equals",Chars[Chars.AngleLeft=60]="AngleLeft",Chars[Chars.AngleRight=62]="AngleRight"}(Chars||(Chars={}));const code=ch=>ch.charCodeAt(0),specialChars="#.*:$-_!@%^+>/".split("").map(code),defaultOptions={type:"markup",lookAhead:!0,prefix:""};function extractAbbreviation(line,pos=line.length,options={}){const opt=Object.assign(Object.assign({},defaultOptions),options);let ch;pos=Math.min(line.length,Math.max(0,null==pos?line.length:pos)),opt.lookAhead&&(pos=offsetPastAutoClosed(line,pos,opt));const start=getStartOffset(line,pos,opt.prefix||"");if(-1===start)return;const scanner=backwardScanner(line,start);scanner.pos=pos;const stack=[];for(;!sol(scanner);){if(ch=peek(scanner),stack.includes(Brackets.CurlyR)){if(ch===Brackets.CurlyR){stack.push(ch),scanner.pos--;continue}if(ch!==Brackets.CurlyL){scanner.pos--;continue}}if(isCloseBrace(ch,opt.type))stack.push(ch);else if(isOpenBrace(ch,opt.type)){if(stack.pop()!==bracePairs[ch])break}else{if(stack.includes(Brackets.SquareR)||stack.includes(Brackets.CurlyR)){scanner.pos--;continue}if(isHtml(scanner)||!isAbbreviation(ch))break}scanner.pos--}if(!stack.length&&scanner.pos!==pos){const abbreviation=line.slice(scanner.pos,pos).replace(/^[*+>^]+/,"");return{abbreviation:abbreviation,location:pos-abbreviation.length,start:options.prefix?start-options.prefix.length:pos-abbreviation.length,end:pos}}}function offsetPastAutoClosed(line,pos,options){for(isQuote(line.charCodeAt(pos))&&pos++;isCloseBrace(line.charCodeAt(pos),options.type);)pos++;return pos}function getStartOffset(line,pos,prefix){if(!prefix)return 0;const scanner=backwardScanner(line),compiledPrefix=prefix.split("").map(code);let result;for(scanner.pos=pos;!sol(scanner);)if(!consumePair(scanner,Brackets.SquareR,Brackets.SquareL)&&!consumePair(scanner,Brackets.CurlyR,Brackets.CurlyL)){if(result=scanner.pos,consumeArray(scanner,compiledPrefix))return result;scanner.pos--}return-1}function consumePair(scanner,close,open){const start=scanner.pos;if(consume(scanner,close))for(;!sol(scanner);){if(consume(scanner,open))return!0;scanner.pos--}return scanner.pos=start,!1}function consumeArray(scanner,arr){const start=scanner.pos;let consumed=!1;for(let i=arr.length-1;i>=0&&!sol(scanner)&&consume(scanner,arr[i]);i--)consumed=0===i;return consumed||(scanner.pos=start),consumed}function isAbbreviation(ch){return ch>64&&ch<91||ch>96&&ch<123||ch>47&&ch<58||specialChars.includes(ch)}function isOpenBrace(ch,syntax){return ch===Brackets.RoundL||"markup"===syntax&&(ch===Brackets.SquareL||ch===Brackets.CurlyL)}function isCloseBrace(ch,syntax){return ch===Brackets.RoundR||"markup"===syntax&&(ch===Brackets.SquareR||ch===Brackets.CurlyR)}function expandAbbreviation(abbr,config){const resolvedConfig=resolveConfig(config);return"stylesheet"===resolvedConfig.type?stylesheet(abbr,resolvedConfig):markup(abbr,resolvedConfig)}function markup(abbr,config){return stringify(parse$1(abbr,config),config)}function stylesheet(abbr,config){return css(parse(abbr,config),config)}export{CSSAbbreviationScope,expandAbbreviation as default,extractAbbreviation as extract,markup,parseAbbreviation as markupAbbreviation,parse$1 as parseMarkup,parse as parseStylesheet,convertSnippets as parseStylesheetSnippets,resolveConfig,stringify as stringifyMarkup,css as stringifyStylesheet,stylesheet,parse$2 as stylesheetAbbreviation};