var _=(function(){var root=this;var previousUnderscore=root._;var breaker={};var ArrayProto=Array.prototype,ObjProto=Object.prototype,FuncProto=Function.prototype;var slice=ArrayProto.slice,unshift=ArrayProto.unshift,toString=ObjProto.toString,hasOwnProperty=ObjProto.hasOwnProperty;var nativeForEach=ArrayProto.forEach,nativeMap=ArrayProto.map,nativeReduce=ArrayProto.reduce,nativeReduceRight=ArrayProto.reduceRight,nativeFilter=ArrayProto.filter,nativeEvery=ArrayProto.every,nativeSome=ArrayProto.some,nativeIndexOf=ArrayProto.indexOf,nativeLastIndexOf=ArrayProto.lastIndexOf,nativeIsArray=Array.isArray,nativeKeys=Object.keys,nativeBind=FuncProto.bind;var _=function(obj){return new wrapper(obj)};if(typeof exports!=="undefined"){if(typeof module!=="undefined"&&module.exports){exports=module.exports=_}exports._=_}else{root["_"]=_}_.VERSION="1.3.3";var each=_.each=_.forEach=function(obj,iterator,context){if(obj==null){return}if(nativeForEach&&obj.forEach===nativeForEach){obj.forEach(iterator,context)}else{if(obj.length===+obj.length){for(var i=0,l=obj.length;i2;if(obj==null){obj=[]}if(nativeReduce&&obj.reduce===nativeReduce){if(context){iterator=_.bind(iterator,context)}return initial?obj.reduce(iterator,memo):obj.reduce(iterator)}each(obj,function(value,index,list){if(!initial){memo=value;initial=true}else{memo=iterator.call(context,memo,value,index,list)}});if(!initial){throw new TypeError("Reduce of empty array with no initial value")}return memo};_.reduceRight=_.foldr=function(obj,iterator,memo,context){var initial=arguments.length>2;if(obj==null){obj=[]}if(nativeReduceRight&&obj.reduceRight===nativeReduceRight){if(context){iterator=_.bind(iterator,context)}return initial?obj.reduceRight(iterator,memo):obj.reduceRight(iterator)}var reversed=_.toArray(obj).reverse();if(context&&!initial){iterator=_.bind(iterator,context)}return initial?_.reduce(reversed,iterator,memo,context):_.reduce(reversed,iterator)};_.find=_.detect=function(obj,iterator,context){var result;any(obj,function(value,index,list){if(iterator.call(context,value,index,list)){result=value;return true}});return result};_.filter=_.select=function(obj,iterator,context){var results=[];if(obj==null){return results}if(nativeFilter&&obj.filter===nativeFilter){return obj.filter(iterator,context)}each(obj,function(value,index,list){if(iterator.call(context,value,index,list)){results[results.length]=value}});return results};_.reject=function(obj,iterator,context){var results=[];if(obj==null){return results}each(obj,function(value,index,list){if(!iterator.call(context,value,index,list)){results[results.length]=value}});return results};_.every=_.all=function(obj,iterator,context){var result=true;if(obj==null){return result}if(nativeEvery&&obj.every===nativeEvery){return obj.every(iterator,context)}each(obj,function(value,index,list){if(!(result=result&&iterator.call(context,value,index,list))){return breaker}});return !!result};var any=_.some=_.any=function(obj,iterator,context){iterator||(iterator=_.identity);var result=false;if(obj==null){return result}if(nativeSome&&obj.some===nativeSome){return obj.some(iterator,context)}each(obj,function(value,index,list){if(result||(result=iterator.call(context,value,index,list))){return breaker}});return !!result};_.include=_.contains=function(obj,target){var found=false;if(obj==null){return found}if(nativeIndexOf&&obj.indexOf===nativeIndexOf){return obj.indexOf(target)!=-1}found=any(obj,function(value){return value===target});return found};_.invoke=function(obj,method){var args=slice.call(arguments,2);return _.map(obj,function(value){return(_.isFunction(method)?method||value:value[method]).apply(value,args)})};_.pluck=function(obj,key){return _.map(obj,function(value){return value[key]})};_.max=function(obj,iterator,context){if(!iterator&&_.isArray(obj)&&obj[0]===+obj[0]){return Math.max.apply(Math,obj)}if(!iterator&&_.isEmpty(obj)){return -Infinity}var result={computed:-Infinity};each(obj,function(value,index,list){var computed=iterator?iterator.call(context,value,index,list):value;computed>=result.computed&&(result={value:value,computed:computed})});return result.value};_.min=function(obj,iterator,context){if(!iterator&&_.isArray(obj)&&obj[0]===+obj[0]){return Math.min.apply(Math,obj)}if(!iterator&&_.isEmpty(obj)){return Infinity}var result={computed:Infinity};each(obj,function(value,index,list){var computed=iterator?iterator.call(context,value,index,list):value; computedb?1:0}),"value")};_.groupBy=function(obj,val){var result={};var iterator=_.isFunction(val)?val:function(obj){return obj[val]};each(obj,function(value,index){var key=iterator(value,index);(result[key]||(result[key]=[])).push(value)});return result};_.sortedIndex=function(array,obj,iterator){iterator||(iterator=_.identity);var low=0,high=array.length;while(low>1;iterator(array[mid])=0})})};_.difference=function(array){var rest=_.flatten(slice.call(arguments,1),true);return _.filter(array,function(value){return !_.include(rest,value)})};_.zip=function(){var args=slice.call(arguments);var length=_.max(_.pluck(args,"length"));var results=new Array(length);for(var i=0;i=0;i--){args=[funcs[i].apply(this,args)]}return args[0]}};_.after=function(times,func){if(times<=0){return func()}return function(){if(--times<1){return func.apply(this,arguments)}}};_.keys=nativeKeys||function(obj){if(obj!==Object(obj)){throw new TypeError("Invalid object")}var keys=[];for(var key in obj){if(_.has(obj,key)){keys[keys.length]=key}}return keys};_.values=function(obj){return _.map(obj,_.identity)};_.functions=_.methods=function(obj){var names=[];for(var key in obj){if(_.isFunction(obj[key])){names.push(key)}}return names.sort()};_.extend=function(obj){each(slice.call(arguments,1),function(source){for(var prop in source){obj[prop]=source[prop]}});return obj};_.pick=function(obj){var result={};each(_.flatten(slice.call(arguments,1)),function(key){if(key in obj){result[key]=obj[key]}});return result};_.defaults=function(obj){each(slice.call(arguments,1),function(source){for(var prop in source){if(obj[prop]==null){obj[prop]=source[prop]}}});return obj};_.clone=function(obj){if(!_.isObject(obj)){return obj}return _.isArray(obj)?obj.slice():_.extend({},obj)};_.tap=function(obj,interceptor){interceptor(obj);return obj};function eq(a,b,stack){if(a===b){return a!==0||1/a==1/b}if(a==null||b==null){return a===b}if(a._chain){a=a._wrapped}if(b._chain){b=b._wrapped}if(a.isEqual&&_.isFunction(a.isEqual)){return a.isEqual(b)}if(b.isEqual&&_.isFunction(b.isEqual)){return b.isEqual(a)}var className=toString.call(a);if(className!=toString.call(b)){return false}switch(className){case"[object String]":return a==String(b);case"[object Number]":return a!=+a?b!=+b:(a==0?1/a==1/b:a==+b);case"[object Date]":case"[object Boolean]":return +a==+b;case"[object RegExp]":return a.source==b.source&&a.global==b.global&&a.multiline==b.multiline&&a.ignoreCase==b.ignoreCase}if(typeof a!="object"||typeof b!="object"){return false}var length=stack.length;while(length--){if(stack[length]==a){return true}}stack.push(a);var size=0,result=true;if(className=="[object Array]"){size=a.length;result=size==b.length;if(result){while(size--){if(!(result=size in a==size in b&&eq(a[size],b[size],stack))){break}}}}else{if("constructor" in a!="constructor" in b||a.constructor!=b.constructor){return false}for(var key in a){if(_.has(a,key)){size++;if(!(result=_.has(b,key)&&eq(a[key],b[key],stack))){break}}}if(result){for(key in b){if(_.has(b,key)&&!(size--)){break}}result=!size}}stack.pop();return result}_.isEqual=function(a,b){return eq(a,b,[])};_.isEmpty=function(obj){if(obj==null){return true}if(_.isArray(obj)||_.isString(obj)){return obj.length===0}for(var key in obj){if(_.has(obj,key)){return false}}return true};_.isElement=function(obj){return !!(obj&&obj.nodeType==1)};_.isArray=nativeIsArray||function(obj){return toString.call(obj)=="[object Array]"};_.isObject=function(obj){return obj===Object(obj)};_.isArguments=function(obj){return toString.call(obj)=="[object Arguments]"};if(!_.isArguments(arguments)){_.isArguments=function(obj){return !!(obj&&_.has(obj,"callee"))}}_.isFunction=function(obj){return toString.call(obj)=="[object Function]"};_.isString=function(obj){return toString.call(obj)=="[object String]"};_.isNumber=function(obj){return toString.call(obj)=="[object Number]"};_.isFinite=function(obj){return _.isNumber(obj)&&isFinite(obj)};_.isNaN=function(obj){return obj!==obj};_.isBoolean=function(obj){return obj===true||obj===false||toString.call(obj)=="[object Boolean]"};_.isDate=function(obj){return toString.call(obj)=="[object Date]"};_.isRegExp=function(obj){return toString.call(obj)=="[object RegExp]"};_.isNull=function(obj){return obj===null};_.isUndefined=function(obj){return obj===void 0};_.has=function(obj,key){return hasOwnProperty.call(obj,key)};_.noConflict=function(){root._=previousUnderscore;return this};_.identity=function(value){return value};_.times=function(n,iterator,context){for(var i=0;i/g,">").replace(/"/g,""").replace(/'/g,"'").replace(/\//g,"/") };_.result=function(object,property){if(object==null){return null}var value=object[property];return _.isFunction(value)?value.call(object):value};_.mixin=function(obj){each(_.functions(obj),function(name){addToWrapper(name,_[name]=obj[name])})};var idCounter=0;_.uniqueId=function(prefix){var id=idCounter++;return prefix?prefix+id:id};_.templateSettings={evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g,escape:/<%-([\s\S]+?)%>/g};var noMatch=/.^/;var escapes={"\\":"\\","'":"'","r":"\r","n":"\n","t":"\t","u2028":"\u2028","u2029":"\u2029"};for(var p in escapes){escapes[escapes[p]]=p}var escaper=/\\|'|\r|\n|\t|\u2028|\u2029/g;var unescaper=/\\(\\|'|r|n|t|u2028|u2029)/g;var unescape=function(code){return code.replace(unescaper,function(match,escape){return escapes[escape]})};_.template=function(text,data,settings){settings=_.defaults(settings||{},_.templateSettings);var source="__p+='"+text.replace(escaper,function(match){return"\\"+escapes[match]}).replace(settings.escape||noMatch,function(match,code){return"'+\n_.escape("+unescape(code)+")+\n'"}).replace(settings.interpolate||noMatch,function(match,code){return"'+\n("+unescape(code)+")+\n'"}).replace(settings.evaluate||noMatch,function(match,code){return"';\n"+unescape(code)+"\n;__p+='"})+"';\n";if(!settings.variable){source="with(obj||{}){\n"+source+"}\n"}source="var __p='';"+"var print=function(){__p+=Array.prototype.join.call(arguments, '')};\n"+source+"return __p;\n";var render=new Function(settings.variable||"obj","_",source);if(data){return render(data,_)}var template=function(data){return render.call(this,data,_)};template.source="function("+(settings.variable||"obj")+"){\n"+source+"}";return template};_.chain=function(obj){return _(obj).chain()};var wrapper=function(obj){this._wrapped=obj};_.prototype=wrapper.prototype;var result=function(obj,chain){return chain?_(obj).chain():obj};var addToWrapper=function(name,func){wrapper.prototype[name]=function(){var args=slice.call(arguments);unshift.call(args,this._wrapped);return result(func.apply(_,args),this._chain)}};_.mixin(_);each(["pop","push","reverse","shift","sort","splice","unshift"],function(name){var method=ArrayProto[name];wrapper.prototype[name]=function(){var wrapped=this._wrapped;method.apply(wrapped,arguments);var length=wrapped.length;if((name=="shift"||name=="splice")&&length===0){delete wrapped[0]}return result(wrapped,this._chain)}});each(["concat","join","slice"],function(name){var method=ArrayProto[name];wrapper.prototype[name]=function(){return result(method.apply(this._wrapped,arguments),this._chain)}});wrapper.prototype.chain=function(){this._chain=true;return this};wrapper.prototype.value=function(){return this._wrapped};return _}).call({});var emmet=(function(global){var defaultSyntax="html";var defaultProfile="plain";if(typeof _=="undefined"){try{_=global[["require"][0]]("underscore")}catch(e){}}if(typeof _=="undefined"){throw"Cannot access to Underscore.js lib"}var modules={_:_};var ctor=function(){};function inherits(parent,protoProps,staticProps){var child;if(protoProps&&protoProps.hasOwnProperty("constructor")){child=protoProps.constructor}else{child=function(){parent.apply(this,arguments)}}_.extend(child,parent);ctor.prototype=parent.prototype;child.prototype=new ctor();if(protoProps){_.extend(child.prototype,protoProps)}if(staticProps){_.extend(child,staticProps)}child.prototype.constructor=child;child.__super__=parent.prototype;return child}var moduleLoader=null;function r(name){if(!(name in modules)&&moduleLoader){moduleLoader(name)}return modules[name]}return{define:function(name,factory){if(!(name in modules)){modules[name]=_.isFunction(factory)?this.exec(factory):factory}},require:r,exec:function(fn,context){return fn.call(context||global,_.bind(r,this),_,this)},extend:function(protoProps,classProps){var child=inherits(this,protoProps,classProps);child.extend=this.extend;if(protoProps.hasOwnProperty("toString")){child.prototype.toString=protoProps.toString}return child},expandAbbreviation:function(abbr,syntax,profile,contextNode){if(!abbr){return""}syntax=syntax||defaultSyntax;var filters=r("filters");var parser=r("abbreviationParser");profile=r("profile").get(profile,syntax);r("tabStops").resetTabstopIndex();var data=filters.extractFromAbbreviation(abbr);var outputTree=parser.parse(data[0],{syntax:syntax,contextNode:contextNode});var filtersList=filters.composeList(syntax,profile,data[1]);filters.apply(outputTree,filtersList,profile);return outputTree.toString()},defaultSyntax:function(){return defaultSyntax},defaultProfile:function(){return defaultProfile},log:function(){if(global.console&&global.console.log){global.console.log.apply(global.console,arguments)}},setModuleLoader:function(fn){moduleLoader=fn}}})(this);if(typeof exports!=="undefined"){if(typeof module!=="undefined"&&module.exports){exports=module.exports=emmet}exports.emmet=emmet}if(typeof define!=="undefined"){define("emmet",[],emmet)}emmet.define("abbreviationParser",function(require,_){var reValidName=/^[\w\-\$\:@\!%]+\+?$/i; var reWord=/[\w\-:\$@]/;var pairs={"[":"]","(":")","{":"}"};var spliceFn=Array.prototype.splice;var preprocessors=[];var postprocessors=[];var outputProcessors=[];function AbbreviationNode(parent){this.parent=null;this.children=[];this._attributes=[];this.abbreviation="";this.counter=1;this._name=null;this._text="";this.repeatCount=1;this.hasImplicitRepeat=false;this._data={};this.start="";this.end="";this.content="";this.padding=""}AbbreviationNode.prototype={addChild:function(child,position){child=child||new AbbreviationNode;child.parent=this;if(_.isUndefined(position)){this.children.push(child)}else{this.children.splice(position,0,child)}return child},clone:function(){var node=new AbbreviationNode();var attrs=["abbreviation","counter","_name","_text","repeatCount","hasImplicitRepeat","start","end","content","padding"];_.each(attrs,function(a){node[a]=this[a]},this);node._attributes=_.map(this._attributes,function(attr){return _.clone(attr)});node._data=_.clone(this._data);node.children=_.map(this.children,function(child){child=child.clone();child.parent=node;return child});return node},remove:function(){if(this.parent){this.parent.children=_.without(this.parent.children,this)}return this},replace:function(){var parent=this.parent;var ix=_.indexOf(parent.children,this);var items=_.flatten(arguments);spliceFn.apply(parent.children,[ix,1].concat(items));_.each(items,function(item){item.parent=parent})},updateProperty:function(name,value){this[name]=value;_.each(this.children,function(child){child.updateProperty(name,value)});return this},find:function(fn){return this.findAll(fn)[0]},findAll:function(fn){if(!_.isFunction(fn)){var elemName=fn.toLowerCase();fn=function(item){return item.name().toLowerCase()==elemName}}var result=[];_.each(this.children,function(child){if(fn(child)){result.push(child)}result=result.concat(child.findAll(fn))});return _.compact(result)},data:function(name,value){if(arguments.length==2){this._data[name]=value;if(name=="resource"&&require("elements").is(value,"snippet")){this.content=value.data;if(this._text){this.content=require("abbreviationUtils").insertChildContent(value.data,this._text)}}}return this._data[name]},name:function(){var res=this.matchedResource();if(require("elements").is(res,"element")){return res.name}return this._name},attributeList:function(){var attrs=[];var res=this.matchedResource();if(require("elements").is(res,"element")&&_.isArray(res.attributes)){attrs=attrs.concat(res.attributes)}return optimizeAttributes(attrs.concat(this._attributes))},attribute:function(name,value){if(arguments.length==2){var ix=_.indexOf(_.pluck(this._attributes,"name"),name.toLowerCase());if(~ix){this._attributes[ix].value=value}else{this._attributes.push({name:name,value:value})}}return(_.find(this.attributeList(),function(attr){return attr.name==name})||{}).value},matchedResource:function(){return this.data("resource")},index:function(){return this.parent?_.indexOf(this.parent.children,this):-1},_setRepeat:function(count){if(count){this.repeatCount=parseInt(count,10)||1}else{this.hasImplicitRepeat=true}},setAbbreviation:function(abbr){abbr=abbr||"";var that=this;abbr=abbr.replace(/\*(\d+)?$/,function(str,repeatCount){that._setRepeat(repeatCount);return""});this.abbreviation=abbr;var abbrText=extractText(abbr);if(abbrText){abbr=abbrText.element;this.content=this._text=abbrText.text}var abbrAttrs=parseAttributes(abbr);if(abbrAttrs){abbr=abbrAttrs.element;this._attributes=abbrAttrs.attributes}this._name=abbr;if(this._name&&!reValidName.test(this._name)){throw"Invalid abbreviation"}},toString:function(){var utils=require("utils");var start=this.start;var end=this.end;var content=this.content;var node=this;_.each(outputProcessors,function(fn){start=fn(start,node,"start");content=fn(content,node,"content");end=fn(end,node,"end")});var innerContent=_.map(this.children,function(child){return child.toString()}).join("");content=require("abbreviationUtils").insertChildContent(content,innerContent,{keepVariable:false});return start+utils.padString(content,this.padding)+end},hasEmptyChildren:function(){return !!_.find(this.children,function(child){return child.isEmpty()})},hasImplicitName:function(){return !this._name&&!this.isTextNode()},isGroup:function(){return !this.abbreviation},isEmpty:function(){return !this.abbreviation&&!this.children.length},isRepeating:function(){return this.repeatCount>1||this.hasImplicitRepeat},isTextNode:function(){return !this.name()&&!this.attributeList().length},isElement:function(){return !this.isEmpty()&&!this.isTextNode()},deepestChild:function(){if(!this.children.length){return null}var deepestChild=this;while(deepestChild.children.length){deepestChild=_.last(deepestChild.children)}return deepestChild}};function stripped(str){return str.substring(1,str.length-1)}function consumeQuotedValue(stream,quote){var ch;while(ch=stream.next()){if(ch===quote){return true}if(ch=="\\"){continue}}return false}function parseAbbreviation(abbr){abbr=require("utils").trim(abbr); var root=new AbbreviationNode;var context=root.addChild(),ch;var stream=require("stringStream").create(abbr);var loopProtector=1000,multiplier;while(!stream.eol()&&--loopProtector>0){ch=stream.peek();switch(ch){case"(":stream.start=stream.pos;if(stream.skipToPair("(",")")){var inner=parseAbbreviation(stripped(stream.current()));if(multiplier=stream.match(/^\*(\d+)?/,true)){context._setRepeat(multiplier[1])}_.each(inner.children,function(child){context.addChild(child)})}else{throw'Invalid abbreviation: mo matching ")" found for character at '+stream.pos}break;case">":context=context.addChild();stream.next();break;case"+":context=context.parent.addChild();stream.next();break;case"^":var parent=context.parent||context;context=(parent.parent||parent).addChild();stream.next();break;default:stream.start=stream.pos;stream.eatWhile(function(c){if(c=="["||c=="{"){if(stream.skipToPair(c,pairs[c])){stream.backUp(1);return true}throw'Invalid abbreviation: mo matching "'+pairs[c]+'" found for character at '+stream.pos}if(c=="+"){stream.next();var isMarker=stream.eol()||~"+>^*".indexOf(stream.peek());stream.backUp(1);return isMarker}return c!="("&&isAllowedChar(c)});context.setAbbreviation(stream.current());stream.start=stream.pos}}if(loopProtector<1){throw"Endless loop detected"}return root}function extractAttributes(attrSet,attrs){attrSet=require("utils").trim(attrSet);var result=[];var stream=require("stringStream").create(attrSet);stream.eatSpace();while(!stream.eol()){stream.start=stream.pos;if(stream.eatWhile(reWord)){var attrName=stream.current();var attrValue="";if(stream.peek()=="="){stream.next();stream.start=stream.pos;var quote=stream.peek();if(quote=='"'||quote=="'"){stream.next();if(consumeQuotedValue(stream,quote)){attrValue=stream.current();attrValue=attrValue.substring(1,attrValue.length-1)}else{throw"Invalid attribute value"}}else{if(stream.eatWhile(/[^\s\]]/)){attrValue=stream.current()}else{throw"Invalid attribute value"}}}result.push({name:attrName,value:attrValue});stream.eatSpace()}else{break}}return result}function parseAttributes(abbr){var result=[];var attrMap={"#":"id",".":"class"};var nameEnd=null;var stream=require("stringStream").create(abbr);while(!stream.eol()){switch(stream.peek()){case"#":case".":if(nameEnd===null){nameEnd=stream.pos}var attrName=attrMap[stream.peek()];stream.next();stream.start=stream.pos;stream.eatWhile(reWord);result.push({name:attrName,value:stream.current()});break;case"[":if(nameEnd===null){nameEnd=stream.pos}stream.start=stream.pos;if(!stream.skipToPair("[","]")){throw"Invalid attribute set definition"}result=result.concat(extractAttributes(stripped(stream.current())));break;default:stream.next()}}if(!result.length){return null}return{element:abbr.substring(0,nameEnd),attributes:optimizeAttributes(result)}}function optimizeAttributes(attrs){attrs=_.map(attrs,function(attr){return _.clone(attr)});var lookup={};return _.filter(attrs,function(attr){if(!(attr.name in lookup)){return lookup[attr.name]=attr}var la=lookup[attr.name];if(attr.name.toLowerCase()=="class"){la.value+=(la.value.length?" ":"")+attr.value}else{la.value=attr.value}return false})}function extractText(abbr){if(!~abbr.indexOf("{")){return null}var stream=require("stringStream").create(abbr);while(!stream.eol()){switch(stream.peek()){case"[":case"(":stream.skipToPair(stream.peek(),pairs[stream.peek()]);break;case"{":stream.start=stream.pos;stream.skipToPair("{","}");return{element:abbr.substring(0,stream.start),text:stripped(stream.current())};default:stream.next()}}}function unroll(node){for(var i=node.children.length-1,j,child,maxCount;i>=0;i--){child=node.children[i];if(child.isRepeating()){maxCount=j=child.repeatCount;child.repeatCount=1;child.updateProperty("counter",1);child.updateProperty("maxCount",maxCount);while(--j>0){child.parent.addChild(child.clone(),i+1).updateProperty("counter",j+1).updateProperty("maxCount",maxCount)}}}_.each(node.children,unroll);return node}function squash(node){for(var i=node.children.length-1;i>=0;i--){var n=node.children[i];if(n.isGroup()){n.replace(squash(n).children)}else{if(n.isEmpty()){n.remove()}}}_.each(node.children,squash);return node}function isAllowedChar(ch){var charCode=ch.charCodeAt(0);var specialChars="#.*:$-_!@|%";return(charCode>64&&charCode<91)||(charCode>96&&charCode<123)||(charCode>47&&charCode<58)||specialChars.indexOf(ch)!=-1}outputProcessors.push(function(text,node){return require("utils").replaceCounter(text,node.counter,node.maxCount)});return{parse:function(abbr,options){options=options||{};var tree=parseAbbreviation(abbr);if(options.contextNode){tree._name=options.contextNode.name;var attrLookup={};_.each(tree._attributes,function(attr){attrLookup[attr.name]=attr});_.each(options.contextNode.attributes,function(attr){if(attr.name in attrLookup){attrLookup[attr.name].value=attr.value}else{attr=_.clone(attr);tree._attributes.push(attr);attrLookup[attr.name]=attr}})}_.each(preprocessors,function(fn){fn(tree,options)});tree=squash(unroll(tree)); _.each(postprocessors,function(fn){fn(tree,options)});return tree},AbbreviationNode:AbbreviationNode,addPreprocessor:function(fn){if(!_.include(preprocessors,fn)){preprocessors.push(fn)}},removeFilter:function(fn){preprocessor=_.without(preprocessors,fn)},addPostprocessor:function(fn){if(!_.include(postprocessors,fn)){postprocessors.push(fn)}},removePostprocessor:function(fn){postprocessors=_.without(postprocessors,fn)},addOutputProcessor:function(fn){if(!_.include(outputProcessors,fn)){outputProcessors.push(fn)}},removeOutputProcessor:function(fn){outputProcessors=_.without(outputProcessors,fn)},isAllowedChar:function(ch){ch=String(ch);return isAllowedChar(ch)||~">+^[](){}".indexOf(ch)}}});emmet.exec(function(require,_){function matchResources(node,syntax){var resources=require("resources");var elements=require("elements");var parser=require("abbreviationParser");_.each(_.clone(node.children),function(child){var r=resources.getMatchedResource(child,syntax);if(_.isString(r)){child.data("resource",elements.create("snippet",r))}else{if(elements.is(r,"reference")){var subtree=parser.parse(r.data,{syntax:syntax});if(child.repeatCount>1){var repeatedChildren=subtree.findAll(function(node){return node.hasImplicitRepeat});_.each(repeatedChildren,function(node){node.repeatCount=child.repeatCount;node.hasImplicitRepeat=false})}var deepestChild=subtree.deepestChild();if(deepestChild){_.each(child.children,function(c){deepestChild.addChild(c)})}_.each(subtree.children,function(node){_.each(child.attributeList(),function(attr){node.attribute(attr.name,attr.value)})});child.replace(subtree.children)}else{child.data("resource",r)}}matchResources(child,syntax)})}require("abbreviationParser").addPreprocessor(function(tree,options){var syntax=options.syntax||emmet.defaultSyntax();matchResources(tree,syntax)})});emmet.exec(function(require,_){var parser=require("abbreviationParser");var outputPlaceholder="$#";function locateOutputPlaceholder(text){var range=require("range");var result=[];var stream=require("stringStream").create(text);while(!stream.eol()){if(stream.peek()=="\\"){stream.next()}else{stream.start=stream.pos;if(stream.match(outputPlaceholder,true)){result.push(range.create(stream.start,outputPlaceholder));continue}}stream.next()}return result}function replaceOutputPlaceholders(source,value){var utils=require("utils");var ranges=locateOutputPlaceholder(source);ranges.reverse();_.each(ranges,function(r){source=utils.replaceSubstring(source,value,r)});return source}function hasOutputPlaceholder(node){if(locateOutputPlaceholder(node.content).length){return true}return !!_.find(node.attributeList(),function(attr){return !!locateOutputPlaceholder(attr.value).length})}function insertPastedContent(node,content,overwrite){var nodesWithPlaceholders=node.findAll(function(item){return hasOutputPlaceholder(item)});if(hasOutputPlaceholder(node)){nodesWithPlaceholders.unshift(node)}if(nodesWithPlaceholders.length){_.each(nodesWithPlaceholders,function(item){item.content=replaceOutputPlaceholders(item.content,content);_.each(item._attributes,function(attr){attr.value=replaceOutputPlaceholders(attr.value,content)})})}else{var deepest=node.deepestChild()||node;if(overwrite){deepest.content=content}else{deepest.content=require("abbreviationUtils").insertChildContent(deepest.content,content)}}}parser.addPreprocessor(function(tree,options){if(options.pastedContent){var utils=require("utils");var lines=_.map(utils.splitByLines(options.pastedContent,true),utils.trim);tree.findAll(function(item){if(item.hasImplicitRepeat){item.data("paste",lines);return item.repeatCount=lines.length}})}});parser.addPostprocessor(function(tree,options){var targets=tree.findAll(function(item){var pastedContentObj=item.data("paste");var pastedContent="";if(_.isArray(pastedContentObj)){pastedContent=pastedContentObj[item.counter-1]}else{if(_.isFunction(pastedContentObj)){pastedContent=pastedContentObj(item.counter-1,item.content)}else{if(pastedContentObj){pastedContent=pastedContentObj}}}if(pastedContent){insertPastedContent(item,pastedContent,!!item.data("pasteOverwrites"))}item.data("paste",null);return !!pastedContentObj});if(!targets.length&&options.pastedContent){insertPastedContent(tree,options.pastedContent)}})});emmet.exec(function(require,_){function resolveNodeNames(tree){var tagName=require("tagName");_.each(tree.children,function(node){if(node.hasImplicitName()||node.data("forceNameResolving")){node._name=tagName.resolve(node.parent.name())}resolveNodeNames(node)});return tree}require("abbreviationParser").addPostprocessor(resolveNodeNames)});emmet.define("cssParser",function(require,_){var walker,tokens=[],isOp,isNameChar,isDigit;walker={lines:null,total_lines:0,linenum:-1,line:"",ch:"",chnum:-1,init:function(source){var me=walker;me.lines=source.replace(/\r\n/g,"\n").replace(/\r/g,"\n").split("\n");me.total_lines=me.lines.length;me.chnum=-1;me.linenum=-1;me.ch="";me.line="";me.nextLine();me.nextChar()},nextLine:function(){var me=this;me.linenum+=1; if(me.total_lines<=me.linenum){me.line=false}else{me.line=me.lines[me.linenum]}if(me.chnum!==-1){me.chnum=0}return me.line},nextChar:function(){var me=this;me.chnum+=1;while(me.line.charAt(me.chnum)===""){if(this.nextLine()===false){me.ch=false;return false}me.chnum=-1;me.ch="\n";return"\n"}me.ch=me.line.charAt(me.chnum);return me.ch},peek:function(){return this.line.charAt(this.chnum+1)}};isNameChar=function(c){return(c=="&"||c==="_"||c==="-"||(c>="a"&&c<="z")||(c>="A"&&c<="Z"))};isDigit=function(ch){return(ch!==false&&ch>="0"&&ch<="9")};isOp=(function(){var opsa="{}[]()+*=.,;:>~|\\%$#@^!".split(""),opsmatcha="*^|$~".split(""),ops={},opsmatch={},i=0;for(;i"))}else{return null}}else{if(stream.match("--")){return chain(inBlock("comment","-->"))}else{if(stream.match("DOCTYPE",true,true)){stream.eatWhile(/[\w\._\-]/); return chain(doctype(1))}else{return null}}}}else{if(stream.eat("?")){stream.eatWhile(/[\w\._\-]/);state.tokenize=inBlock("meta","?>");return"meta"}else{type=stream.eat("/")?"closeTag":"openTag";stream.eatSpace();tagName="";var c;while((c=stream.eat(/[^\s\u00a0=<>\"\'\/?]/))){tagName+=c}state.tokenize=inTag;return"tag"}}}else{if(ch=="&"){var ok;if(stream.eat("#")){if(stream.eat("x")){ok=stream.eatWhile(/[a-fA-F\d]/)&&stream.eat(";")}else{ok=stream.eatWhile(/[\d]/)&&stream.eat(";")}}else{ok=stream.eatWhile(/[\w\.\-:]/)&&stream.eat(";")}return ok?"atom":"error"}else{stream.eatWhile(/[^&<]/);return"text"}}}function inTag(stream,state){var ch=stream.next();if(ch==">"||(ch=="/"&&stream.eat(">"))){state.tokenize=inText;type=ch==">"?"endTag":"selfcloseTag";return"tag"}else{if(ch=="="){type="equals";return null}else{if(/[\'\"]/.test(ch)){state.tokenize=inAttribute(ch);return state.tokenize(stream,state)}else{stream.eatWhile(/[^\s\u00a0=<>\"\'\/?]/);return"word"}}}}function inAttribute(quote){return function(stream,state){while(!stream.eol()){if(stream.next()==quote){state.tokenize=inTag;break}}return"string"}}function inBlock(style,terminator){return function(stream,state){while(!stream.eol()){if(stream.match(terminator)){state.tokenize=inText;break}stream.next()}return style}}function doctype(depth){return function(stream,state){var ch;while((ch=stream.next())!=null){if(ch=="<"){state.tokenize=doctype(depth+1);return state.tokenize(stream,state)}else{if(ch==">"){if(depth==1){state.tokenize=inText;break}else{state.tokenize=doctype(depth-1);return state.tokenize(stream,state)}}}}return"meta"}}var curState=null,setStyle;function pass(){for(var i=arguments.length-1;i>=0;i--){curState.cc.push(arguments[i])}}function cont(){pass.apply(null,arguments);return true}function pushContext(tagName,startOfLine){var noIndent=Kludges.doNotIndent.hasOwnProperty(tagName)||(curState.context&&curState.context.noIndent);curState.context={prev:curState.context,tagName:tagName,indent:curState.indented,startOfLine:startOfLine,noIndent:noIndent}}function popContext(){if(curState.context){curState.context=curState.context.prev}}function element(type){if(type=="openTag"){curState.tagName=tagName;return cont(attributes,endtag(curState.startOfLine))}else{if(type=="closeTag"){var err=false;if(curState.context){if(curState.context.tagName!=tagName){if(Kludges.implicitlyClosed.hasOwnProperty(curState.context.tagName.toLowerCase())){popContext()}err=!curState.context||curState.context.tagName!=tagName}}else{err=true}if(err){setStyle="error"}return cont(endclosetag(err))}}return cont()}function endtag(startOfLine){return function(type){if(type=="selfcloseTag"||(type=="endTag"&&Kludges.autoSelfClosers.hasOwnProperty(curState.tagName.toLowerCase()))){maybePopContext(curState.tagName.toLowerCase());return cont()}if(type=="endTag"){maybePopContext(curState.tagName.toLowerCase());pushContext(curState.tagName,startOfLine);return cont()}return cont()}}function endclosetag(err){return function(type){if(err){setStyle="error"}if(type=="endTag"){popContext();return cont()}setStyle="error";return cont(arguments.callee)}}function maybePopContext(nextTagName){var parentTagName;while(true){if(!curState.context){return}parentTagName=curState.context.tagName.toLowerCase();if(!Kludges.contextGrabbers.hasOwnProperty(parentTagName)||!Kludges.contextGrabbers[parentTagName].hasOwnProperty(nextTagName)){return}popContext()}}function attributes(type){if(type=="word"){setStyle="attribute";return cont(attribute,attributes)}if(type=="endTag"||type=="selfcloseTag"){return pass()}setStyle="error";return cont(attributes)}function attribute(type){if(type=="equals"){return cont(attvalue,attributes)}if(!Kludges.allowMissing){setStyle="error"}return(type=="endTag"||type=="selfcloseTag")?pass():cont()}function attvalue(type){if(type=="string"){return cont(attvaluemaybe)}if(type=="word"&&Kludges.allowUnquoted){setStyle="string";return cont()}setStyle="error";return(type=="endTag"||type=="selfCloseTag")?pass():cont()}function attvaluemaybe(type){if(type=="string"){return cont(attvaluemaybe)}else{return pass()}}function startState(){return{tokenize:inText,cc:[],indented:0,startOfLine:true,tagName:null,context:null}}function token(stream,state){if(stream.sol()){state.startOfLine=true;state.indented=0}if(stream.eatSpace()){return null}setStyle=type=tagName=null;var style=state.tokenize(stream,state);state.type=type;if((style||type)&&style!="comment"){curState=state;while(true){var comb=state.cc.pop()||element;if(comb(type||style)){break}}}state.startOfLine=false;return setStyle||style}return{parse:function(data,offset){offset=offset||0;var state=startState();var stream=require("stringStream").create(data);var tokens=[];while(!stream.eol()){tokens.push({type:token(stream,state),start:stream.start+offset,end:stream.pos+offset});stream.start=stream.pos}return tokens}}}); /*! * string_score.js: String Scoring Algorithm 0.1.10 * * http://joshaven.com/string_score * https://github.com/joshaven/string_score * * Copyright (C) 2009-2011 Joshaven Potter * Special thanks to all of the contributors listed here https://github.com/joshaven/string_score * MIT license: http://www.opensource.org/licenses/mit-license.php * * Date: Tue Mar 1 2011 */ emmet.define("string-score",function(require,_){return{score:function(string,abbreviation,fuzziness){if(string==abbreviation){return 1 }if(abbreviation==""){return 0}var total_character_score=0,abbreviation_length=abbreviation.length,string_length=string.length,start_of_string_bonus,abbreviation_score,fuzzies=1,final_score;for(var i=0,character_score,index_in_string,c,index_c_lowercase,index_c_uppercase,min_index;i-1)?min_index:Math.max(index_c_lowercase,index_c_uppercase);if(index_in_string===-1){if(fuzziness){fuzzies+=1-fuzziness;continue}else{return 0}}else{character_score=0.1}if(string[index_in_string]===c){character_score+=0.1}if(index_in_string===0){character_score+=0.6;if(i===0){start_of_string_bonus=1}}else{if(string.charAt(index_in_string-1)===" "){character_score+=0.8}}string=string.substring(index_in_string+1,string_length);total_character_score+=character_score}abbreviation_score=total_character_score/abbreviation_length;final_score=((abbreviation_score*(abbreviation_length/string_length))+abbreviation_score)/2;final_score=final_score/fuzzies;if(start_of_string_bonus&&(final_score+0.15<1)){final_score+=0.15}return final_score}}});emmet.define("utils",function(require,_){var caretPlaceholder="${0}";function StringBuilder(value){this._data=[];this.length=0;if(value){this.append(value)}}StringBuilder.prototype={append:function(text){this._data.push(text);this.length+=text.length},toString:function(){return this._data.join("")},valueOf:function(){return this.toString()}};return{reTag:/<\/?[\w:\-]+(?:\s+[\w\-:]+(?:\s*=\s*(?:(?:"[^"]*")|(?:'[^']*')|[^>\s]+))?)*\s*(\/?)>$/,endsWithTag:function(str){return this.reTag.test(str)},isNumeric:function(ch){if(typeof(ch)=="string"){ch=ch.charCodeAt(0)}return(ch&&ch>47&&ch<58)},trim:function(text){return(text||"").replace(/^\s+|\s+$/g,"")},getNewline:function(){var res=require("resources");if(!res){return"\n"}var nl=res.getVariable("newline");return _.isString(nl)?nl:"\n"},setNewline:function(str){var res=require("resources");res.setVariable("newline",str);res.setVariable("nl",str)},splitByLines:function(text,removeEmpty){var nl=this.getNewline();var lines=(text||"").replace(/\r\n/g,"\n").replace(/\n\r/g,"\n").replace(/\r/g,"\n").replace(/\n/g,nl).split(nl);if(removeEmpty){lines=_.filter(lines,function(line){return line.length&&!!this.trim(line)},this)}return lines},normalizeNewline:function(text){return this.splitByLines(text).join(this.getNewline())},repeatString:function(str,howMany){var result=[];for(var i=0;iil++){padding+="0"}return padding+str},unindentString:function(text,pad){var lines=this.splitByLines(text);for(var i=0;istr.length){return str}return str.substring(0,start)+value+str.substring(end)},narrowToNonSpace:function(text,start,end){var range=require("range").create(start,end);var reSpace=/[\s\n\r\u00a0]/;while(range.startrange.start){range.end--;if(!reSpace.test(text.charAt(range.end))){range.end++;break}}return range},findNewlineBounds:function(text,from){var len=text.length,start=0,end=len-1;for(var i=from-1;i>0;i--){var ch=text.charAt(i);if(ch=="\n"||ch=="\r"){start=i+1;break}}for(var j=from;j":return a>b;case"gte":case">=":return a>=b}}function Range(start,len){if(_.isObject(start)&&"start" in start){this.start=Math.min(start.start,start.end);this.end=Math.max(start.start,start.end)}else{if(_.isArray(start)){this.start=start[0];this.end=start[1]}else{len=_.isString(len)?len.length:+len;this.start=start;this.end=start+len}}}Range.prototype={length:function(){return Math.abs(this.end-this.start)},equal:function(range){return this.cmp(range,"eq","eq")},shift:function(delta){this.start+=delta;this.end+=delta;return this},overlap:function(range){return range.start<=this.end&&range.end>=this.start},intersection:function(range){if(this.overlap(range)){var start=Math.max(range.start,this.start);var end=Math.min(range.end,this.end);return new Range(start,end-start)}return null},union:function(range){if(this.overlap(range)){var start=Math.min(range.start,this.start);var end=Math.max(range.end,this.end);return new Range(start,end-start)}return null},inside:function(loc){return this.cmp(loc,"lte","gt")},contains:function(loc){return this.cmp(loc,"lt","gt")},include:function(r){return this.cmp(loc,"lte","gte")},cmp:function(loc,left,right){var a,b;if(loc instanceof Range){a=loc.start;b=loc.end}else{a=b=loc}return cmp(this.start,a,left||"<=")&&cmp(this.end,b,right||">")},substring:function(str){return this.length()>0?str.substring(this.start,this.end):""},clone:function(){return new Range(this.start,this.length())},toArray:function(){return[this.start,this.end]},toString:function(){return"{"+this.start+", "+this.length()+"}"}};return{create:function(start,len){if(_.isUndefined(start)||start===null){return null}if(start instanceof Range){return start}if(_.isObject(start)&&"start" in start&&"end" in start){len=start.end-start.start;start=start.start}return new Range(start,len)},create2:function(start,end){if(_.isNumber(start)&&_.isNumber(end)){end-=start}return this.create(start,end)}}});emmet.define("handlerList",function(require,_){function HandlerList(){this._list=[]}HandlerList.prototype={add:function(fn,options){this._list.push(_.extend({order:0},options||{},{fn:fn}))},remove:function(fn){this._list=_.without(this._list,_.find(this._list,function(item){return item.fn===fn}))},list:function(){return _.sortBy(this._list,"order").reverse()},listFn:function(){return _.pluck(this.list(),"fn") },exec:function(skipValue,args){args=args||[];var result=null;_.find(this.list(),function(h){result=h.fn.apply(h,args);if(result!==skipValue){return true}});return result}};return{create:function(){return new HandlerList()}}});emmet.define("tokenIterator",function(require,_){function TokenIterator(tokens){this.tokens=tokens;this._position=0;this.reset()}TokenIterator.prototype={next:function(){if(this.hasNext()){var token=this.tokens[++this._i];this._position=token.start;return token}return null},current:function(){return this.tokens[this._i]},position:function(){return this._position},hasNext:function(){return this._i=this.string.length},sol:function(){return this.pos==0},peek:function(){return this.string.charAt(this.pos)},next:function(){if(this.posstart},eatSpace:function(){var start=this.pos;while(/[\s\u00a0]/.test(this.string.charAt(this.pos))){++this.pos}return this.pos>start},skipToEnd:function(){this.pos=this.string.length},skipTo:function(ch){var found=this.string.indexOf(ch,this.pos);if(found>-1){this.pos=found;return true}},skipToPair:function(open,close){var braceCount=0,ch;var pos=this.pos,len=this.string.length;while(pos/;var systemSettings={};var userSettings={};var resolvers=require("handlerList").create();function normalizeCaretPlaceholder(text){var utils=require("utils");return utils.replaceUnescapedSymbol(text,"|",utils.getCaretPlaceholder())}function parseItem(name,value,type){value=normalizeCaretPlaceholder(value);if(type=="snippets"){return require("elements").create("snippet",value)}if(type=="abbreviations"){return parseAbbreviation(name,value)}}function parseAbbreviation(key,value){key=require("utils").trim(key);var elements=require("elements");var m;if(m=reTag.exec(value)){return elements.create("element",m[1],m[2],m[4]=="/")}else{return elements.create("reference",value)}}function normalizeName(str){return str.replace(/:$/,"").replace(/:/g,"-")}return{setVocabulary:function(data,type){cache={};if(type==VOC_SYSTEM){systemSettings=data}else{userSettings=data}},getVocabulary:function(name){return name==VOC_SYSTEM?systemSettings:userSettings},getMatchedResource:function(node,syntax){return resolvers.exec(null,_.toArray(arguments))||this.findSnippet(syntax,node.name())},getVariable:function(name){return(this.getSection("variables")||{})[name]},setVariable:function(name,value){var voc=this.getVocabulary("user")||{};if(!("variables" in voc)){voc.variables={}}voc.variables[name]=value;this.setVocabulary(voc,"user")},hasSyntax:function(syntax){return syntax in this.getVocabulary(VOC_USER)||syntax in this.getVocabulary(VOC_SYSTEM)},addResolver:function(fn,options){resolvers.add(fn,options)},removeResolver:function(fn){resolvers.remove(fn)},getSection:function(name){if(!name){return null}if(!(name in cache)){cache[name]=require("utils").deepMerge({},systemSettings[name],userSettings[name])}var data=cache[name],subsections=_.rest(arguments),key;while(data&&(key=subsections.shift())){if(key in data){data=data[key]}else{return null}}return data},findItem:function(topSection,subsection){var data=this.getSection(topSection);while(data){if(subsection in data){return data[subsection] }data=this.getSection(data["extends"])}},findSnippet:function(syntax,name,memo){if(!syntax||!name){return null}memo=memo||[];var names=[name];if(~name.indexOf("-")){names.push(name.replace(/\-/g,":"))}var data=this.getSection(syntax),matchedItem=null;_.find(["snippets","abbreviations"],function(sectionName){var data=this.getSection(syntax,sectionName);if(data){return _.find(names,function(n){if(data[n]){return matchedItem=parseItem(n,data[n],sectionName)}})}},this);memo.push(syntax);if(!matchedItem&&data["extends"]&&!_.include(memo,data["extends"])){return this.findSnippet(data["extends"],name,memo)}return matchedItem},fuzzyFindSnippet:function(syntax,name,minScore){minScore=minScore||0.3;var payload=this.getAllSnippets(syntax);var sc=require("string-score");name=normalizeName(name);var scores=_.map(payload,function(value,key){return{key:key,score:sc.score(value.nk,name,0.1)}});var result=_.last(_.sortBy(scores,"score"));if(result&&result.score>=minScore){var k=result.key;return payload[k].parsedValue}},getAllSnippets:function(syntax){var cacheKey="all-"+syntax;if(!cache[cacheKey]){var stack=[],sectionKey=syntax;var memo=[];do{var section=this.getSection(sectionKey);if(!section){break}_.each(["snippets","abbreviations"],function(sectionName){var stackItem={};_.each(section[sectionName]||null,function(v,k){stackItem[k]={nk:normalizeName(k),value:v,parsedValue:parseItem(k,v,sectionName),type:sectionName}});stack.push(stackItem)});memo.push(sectionKey);sectionKey=section["extends"]}while(sectionKey&&!_.include(memo,sectionKey));cache[cacheKey]=_.extend.apply(_,stack.reverse())}return cache[cacheKey]}}});emmet.define("actions",function(require,_,zc){var actions={};function humanizeActionName(name){return require("utils").trim(name.charAt(0).toUpperCase()+name.substring(1).replace(/_[a-z]/g,function(str){return" "+str.charAt(1).toUpperCase()}))}return{add:function(name,fn,options){name=name.toLowerCase();options=options||{};if(!options.label){options.label=humanizeActionName(name)}actions[name]={name:name,fn:fn,options:options}},get:function(name){return actions[name.toLowerCase()]},run:function(name,args){if(!_.isArray(args)){args=_.rest(arguments)}var action=this.get(name);if(action){return action.fn.apply(emmet,args)}else{emmet.log('Action "%s" is not defined',name);return false}},getAll:function(){return actions},getList:function(){return _.values(this.getAll())},getMenu:function(skipActions){var result=[];skipActions=skipActions||[];_.each(this.getList(),function(action){if(action.options.hidden||_.include(skipActions,action.name)){return}var actionName=humanizeActionName(action.name);var ctx=result;if(action.options.label){var parts=action.options.label.split("/");actionName=parts.pop();var menuName,submenu;while(menuName=parts.shift()){submenu=_.find(ctx,function(item){return item.type=="submenu"&&item.name==menuName});if(!submenu){submenu={name:menuName,type:"submenu",items:[]};ctx.push(submenu)}ctx=submenu.items}}ctx.push({type:"action",name:action.name,label:actionName})});return result},getActionNameForMenuTitle:function(title,menu){var item=null;_.find(menu||this.getMenu(),function(val){if(val.type=="action"){if(val.label==title||val.name==title){return item=val.name}}else{return item=this.getActionNameForMenuTitle(title,val.items)}},this);return item||null}}});emmet.define("profile",function(require,_){var profiles={};var defaultProfile={tag_case:"asis",attr_case:"asis",attr_quotes:"double",tag_nl:"decide",tag_nl_leaf:false,place_cursor:true,indent:true,inline_break:3,self_closing_tag:"xhtml",filters:"",extraFilters:""};function OutputProfile(options){_.extend(this,defaultProfile,options)}OutputProfile.prototype={tagName:function(name){return stringCase(name,this.tag_case)},attributeName:function(name){return stringCase(name,this.attr_case)},attributeQuote:function(){return this.attr_quotes=="single"?"'":'"'},selfClosing:function(param){if(this.self_closing_tag=="xhtml"){return" /"}if(this.self_closing_tag===true){return"/"}return""},cursor:function(){return this.place_cursor?require("utils").getCaretPlaceholder():""}};function stringCase(str,caseValue){switch(String(caseValue||"").toLowerCase()){case"lower":return str.toLowerCase();case"upper":return str.toUpperCase()}return str}function createProfile(name,options){return profiles[name.toLowerCase()]=new OutputProfile(options)}function createDefaultProfiles(){createProfile("xhtml");createProfile("html",{self_closing_tag:false});createProfile("xml",{self_closing_tag:true,tag_nl:true});createProfile("plain",{tag_nl:false,indent:false,place_cursor:false});createProfile("line",{tag_nl:false,indent:false,extraFilters:"s"})}createDefaultProfiles();return{create:function(name,options){if(arguments.length==2){return createProfile(name,options)}else{return new OutputProfile(_.defaults(name||{},defaultProfile))}},get:function(name,syntax){if(!name&&syntax){var profile=require("resources").findItem(syntax,"profile");if(profile){name=profile}}if(!name){return profiles.plain }if(name instanceof OutputProfile){return name}if(_.isString(name)&&name.toLowerCase() in profiles){return profiles[name.toLowerCase()]}return this.create(name)},remove:function(name){name=(name||"").toLowerCase();if(name in profiles){delete profiles[name]}},reset:function(){profiles={};createDefaultProfiles()},stringCase:stringCase}});emmet.define("editorUtils",function(require,_){return{isInsideTag:function(html,caretPos){var reTag=/^<\/?\w[\w\:\-]*.*?>/;var pos=caretPos;while(pos>-1){if(html.charAt(pos)=="<"){break}pos--}if(pos!=-1){var m=reTag.exec(html.substring(pos));if(m&&caretPos>pos&&caretPos"&&utils.endsWithTag(str.substring(0,curOffset+1)))){startIndex=curOffset+1;break}}}}}}}}}if(startIndex!=-1&&!textCount&&!braceCount&&!groupCount){return str.substring(startIndex).replace(/^[\*\+\>\^]+/,"")}else{return""}},getImageSize:function(stream){var pngMagicNum="\211PNG\r\n\032\n",jpgMagicNum="\377\330",gifMagicNum="GIF8",nextByte=function(){return stream.charCodeAt(pos++)};if(stream.substr(0,8)===pngMagicNum){var pos=stream.indexOf("IHDR")+4;return{width:(nextByte()<<24)|(nextByte()<<16)|(nextByte()<<8)|nextByte(),height:(nextByte()<<24)|(nextByte()<<16)|(nextByte()<<8)|nextByte()}}else{if(stream.substr(0,4)===gifMagicNum){pos=6;return{width:nextByte()|(nextByte()<<8),height:nextByte()|(nextByte()<<8)}}else{if(stream.substr(0,2)===jpgMagicNum){pos=2;var l=stream.length;while(pos=192&&marker<=207&&!(marker&4)&&!(marker&8)){pos+=1;return{height:(nextByte()<<8)|nextByte(),width:(nextByte()<<8)|nextByte()}}else{pos+=size-2}}}}}},captureContext:function(editor){var allowedSyntaxes={"html":1,"xml":1,"xsl":1};var syntax=String(editor.getSyntax());if(syntax in allowedSyntaxes){var content=String(editor.getContent());var tag=require("htmlMatcher").find(content,editor.getCaretPos());if(tag&&tag.type=="tag"){var startTag=tag.open;var contextNode={name:startTag.name,attributes:[]};var tagTree=require("xmlEditTree").parse(startTag.range.substring(content));if(tagTree){contextNode.attributes=_.map(tagTree.getAll(),function(item){return{name:item.name(),value:item.value()}})}return contextNode}}return null},findExpressionBounds:function(editor,fn){var content=String(editor.getContent());var il=content.length;var exprStart=editor.getCaretPos()-1;var exprEnd=exprStart+1;while(exprStart>=0&&fn(content.charAt(exprStart),exprStart,content)){exprStart--}while(exprEndexprStart){return require("range").create([++exprStart,exprEnd])}},compoundUpdate:function(editor,data){if(data){var sel=editor.getSelectionRange();editor.replaceContent(data.data,data.start,data.end,true);editor.createSelection(data.caret,data.caret+sel.end-sel.start);return true}return false},detectSyntax:function(editor,hint){var syntax=hint||"html";if(!require("resources").hasSyntax(syntax)){syntax="html"}if(syntax=="html"&&(this.isStyle(editor)||this.isInlineCSS(editor))){syntax="css"}return syntax},detectProfile:function(editor){var syntax=editor.getSyntax();var profile=require("resources").findItem(syntax,"profile");if(profile){return profile}switch(syntax){case"xml":case"xsl":return"xml";case"css":if(this.isInlineCSS(editor)){return"line"}break;case"html":var profile=require("resources").getVariable("profile");if(!profile){profile=this.isXHTML(editor)?"xhtml":"html"}return profile}return"xhtml"},isXHTML:function(editor){return editor.getContent().search(/]+XHTML/i)!=-1},isStyle:function(editor){var content=String(editor.getContent());var caretPos=editor.getCaretPos(); var tag=require("htmlMatcher").tag(content,caretPos);return tag&&tag.open.name.toLowerCase()=="style"&&tag.innerRange.cmp(caretPos,"lte","gte")},isInlineCSS:function(editor){var content=String(editor.getContent());var caretPos=editor.getCaretPos();var tree=require("xmlEditTree").parseFromPosition(content,caretPos,true);if(tree){var attr=tree.itemFromPosition(caretPos,true);return attr&&attr.name().toLowerCase()=="style"&&attr.valueRange(true).cmp(caretPos,"lte","gte")}return false}}});emmet.define("abbreviationUtils",function(require,_){return{isSnippet:function(node){return require("elements").is(node.matchedResource(),"snippet")},isUnary:function(node){if(node.children.length||node._text||this.isSnippet(node)){return false}var r=node.matchedResource();return r&&r.is_empty},isInline:function(node){return node.isTextNode()||!node.name()||require("tagName").isInlineLevel(node.name())},isBlock:function(node){return this.isSnippet(node)||!this.isInline(node)},isSnippet:function(node){return require("elements").is(node.matchedResource(),"snippet")},hasTagsInContent:function(node){return require("utils").matchesTag(node.content)},hasBlockChildren:function(node){return(this.hasTagsInContent(node)&&this.isBlock(node))||_.any(node.children,function(child){return this.isBlock(child)},this)},insertChildContent:function(text,childContent,options){options=_.extend({keepVariable:true,appendIfNoChild:true},options||{});var childVariableReplaced=false;var utils=require("utils");text=utils.replaceVariables(text,function(variable,name,data){var output=variable;if(name=="child"){output=utils.padString(childContent,utils.getLinePaddingFromPosition(text,data.start));childVariableReplaced=true;if(options.keepVariable){output+=variable}}return output});if(!childVariableReplaced&&options.appendIfNoChild){text+=childContent}return text}}});emmet.define("base64",function(require,_){var chars="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";return{encode:function(input){var output=[];var chr1,chr2,chr3,enc1,enc2,enc3,enc4,cdp1,cdp2,cdp3;var i=0,il=input.length,b64=chars;while(i>2;enc2=((chr1&3)<<4)|(chr2>>4);enc3=((chr2&15)<<2)|(chr3>>6);enc4=chr3&63;if(isNaN(cdp2)){enc3=enc4=64}else{if(isNaN(cdp3)){enc4=64}}output.push(b64.charAt(enc1)+b64.charAt(enc2)+b64.charAt(enc3)+b64.charAt(enc4))}return output.join("")},decode:function(data){var o1,o2,o3,h1,h2,h3,h4,bits,i=0,ac=0,tmpArr=[];var b64=chars,il=data.length;if(!data){return data}data+="";do{h1=b64.indexOf(data.charAt(i++));h2=b64.indexOf(data.charAt(i++));h3=b64.indexOf(data.charAt(i++));h4=b64.indexOf(data.charAt(i++));bits=h1<<18|h2<<12|h3<<6|h4;o1=bits>>16&255;o2=bits>>8&255;o3=bits&255;if(h3==64){tmpArr[ac++]=String.fromCharCode(o1)}else{if(h4==64){tmpArr[ac++]=String.fromCharCode(o1,o2)}else{tmpArr[ac++]=String.fromCharCode(o1,o2,o3)}}}while(i\s]+))?)*)\s*(\/?)>/;var reCloseTag=/^<\/([\w\:\-]+)[^>]*>/;function openTag(i,match){return{name:match[1],selfClose:!!match[3],range:require("range").create(i,match[0]),type:"open"}}function closeTag(i,match){return{name:match[1],range:require("range").create(i,match[0]),type:"close"}}function comment(i,match){return{range:require("range").create(i,_.isNumber(match)?match-i:match[0]),type:"comment"}}function createMatcher(text){var memo={},m;return{open:function(i){var m=this.matches(i);return m&&m.type=="open"?m:null},close:function(i){var m=this.matches(i);return m&&m.type=="close"?m:null},matches:function(i){var key="p"+i;if(!(key in memo)){if(text.charAt(i)=="<"){var substr=text.slice(i);if(m=substr.match(reOpenTag)){memo[key]=openTag(i,m)}else{if(m=substr.match(reCloseTag)){memo[key]=closeTag(i,m)}else{memo[key]=false}}}}return memo[key]},text:function(){return text}}}function matches(text,pos,pattern){return text.substring(pos,pos+pattern.length)==pattern}function findClosingPair(open,matcher){var stack=[],tag=null;var text=matcher.text();for(var pos=open.range.end,len=text.length;pos")){pos=j+3;break}}}if(tag=matcher.matches(pos)){if(tag.type=="open"&&!tag.selfClose){stack.push(tag.name)}else{if(tag.type=="close"){if(!stack.length){return tag.name==open.name?tag:null}if(_.last(stack)==tag.name){stack.pop()}else{var found=false;while(stack.length&&!found){var last=stack.pop();if(last==tag.name){found=true}}if(!stack.length&&!found){return tag.name==open.name?tag:null}}}}}}}return{find:function(text,pos){var range=require("range");var matcher=createMatcher(text);var open=null,close=null;for(var i=pos;i>=0;i--){if(open=matcher.open(i)){if(open.selfClose){if(open.range.cmp(pos,"lt","gt")){break}continue}close=findClosingPair(open,matcher); if(close){var r=range.create2(open.range.start,close.range.end);if(r.contains(pos)){break}}else{if(open.range.contains(pos)){break}}open=null}else{if(matches(text,i,"-->")){for(var j=i-1;j>=0;j--){if(matches(text,j,"-->")){break}else{if(matches(text,j,"")){j+=3;break}}open=comment(i,j);break}}}}if(open){var outerRange=null;var innerRange=null;if(close){outerRange=range.create2(open.range.start,close.range.end);innerRange=range.create2(open.range.end,close.range.start)}else{outerRange=innerRange=range.create2(open.range.start,open.range.end)}if(open.type=="comment"){var _c=outerRange.substring(text);innerRange.start+=_c.length-_c.replace(/^<\!--\s*/,"").length;innerRange.end-=_c.length-_c.replace(/\s*-->$/,"").length}return{open:open,close:close,type:open.type=="comment"?"comment":"tag",innerRange:innerRange,innerContent:function(){return this.innerRange.substring(text)},outerRange:outerRange,outerContent:function(){return this.outerRange.substring(text)},range:!innerRange.length()||!innerRange.cmp(pos,"lte","gte")?outerRange:innerRange,content:function(){return this.range.substring(text)},source:text}}},tag:function(text,pos){var result=this.find(text,pos);if(result&&result.type=="tag"){return result}}}});emmet.define("tabStops",function(require,_){var startPlaceholderNum=100;var tabstopIndex=0;var defaultOptions={replaceCarets:false,escape:function(ch){return"\\"+ch},tabstop:function(data){return data.token},variable:function(data){return data.token}};require("abbreviationParser").addOutputProcessor(function(text,node,type){var maxNum=0;var tabstops=require("tabStops");var utils=require("utils");var tsOptions={tabstop:function(data){var group=parseInt(data.group);if(group==0){return"${0}"}if(group>maxNum){maxNum=group}if(data.placeholder){var ix=group+tabstopIndex;var placeholder=tabstops.processText(data.placeholder,tsOptions);return"${"+ix+":"+placeholder+"}"}else{return"${"+(group+tabstopIndex)+"}"}}};text=tabstops.processText(text,tsOptions);text=utils.replaceVariables(text,tabstops.variablesResolver(node));tabstopIndex+=maxNum+1;return text});return{extract:function(text,options){var utils=require("utils");var placeholders={carets:""};var marks=[];options=_.extend({},defaultOptions,options,{tabstop:function(data){var token=data.token;var ret="";if(data.placeholder=="cursor"){marks.push({start:data.start,end:data.start+token.length,group:"carets",value:""})}else{if("placeholder" in data){placeholders[data.group]=data.placeholder}if(data.group in placeholders){ret=placeholders[data.group]}marks.push({start:data.start,end:data.start+token.length,group:data.group,value:ret})}return token}});if(options.replaceCarets){text=text.replace(new RegExp(utils.escapeForRegexp(utils.getCaretPlaceholder()),"g"),"${0:cursor}")}text=this.processText(text,options);var buf=utils.stringBuilder(),lastIx=0;var tabStops=_.map(marks,function(mark){buf.append(text.substring(lastIx,mark.start));var pos=buf.length;var ph=placeholders[mark.group]||"";buf.append(ph);lastIx=mark.end;return{group:mark.group,start:pos,end:pos+ph.length}});buf.append(text.substring(lastIx));return{text:buf.toString(),tabstops:_.sortBy(tabStops,"start")}},processText:function(text,options){options=_.extend({},defaultOptions,options);var buf=require("utils").stringBuilder();var stream=require("stringStream").create(text);var ch,m,a;while(ch=stream.next()){if(ch=="\\"&&!stream.eol()){buf.append(options.escape(stream.next()));continue}a=ch;if(ch=="$"){stream.start=stream.pos-1;if(m=stream.match(/^[0-9]+/)){a=options.tabstop({start:buf.length,group:stream.current().substr(1),token:stream.current()})}else{if(m=stream.match(/^\{([a-z_\-][\w\-]*)\}/)){a=options.variable({start:buf.length,name:m[1],token:stream.current()})}else{if(m=stream.match(/^\{([0-9]+)(:.+?)?\}/,false)){stream.skipToPair("{","}");var obj={start:buf.length,group:m[1],token:stream.current()};var placeholder=obj.token.substring(obj.group.length+2,obj.token.length-1);if(placeholder){obj.placeholder=placeholder.substr(1)}a=options.tabstop(obj)}}}}buf.append(a)}return buf.toString()},upgrade:function(node,offset){var maxNum=0;var options={tabstop:function(data){var group=parseInt(data.group);if(group>maxNum){maxNum=group}if(data.placeholder){return"${"+(group+offset)+":"+data.placeholder+"}"}else{return"${"+(group+offset)+"}"}}};_.each(["start","end","content"],function(p){node[p]=this.processText(node[p],options)},this);return maxNum},variablesResolver:function(node){var placeholderMemo={};var res=require("resources");return function(str,varName){if(varName=="child"){return str}if(varName=="cursor"){return require("utils").getCaretPlaceholder()}var attr=node.attribute(varName);if(!_.isUndefined(attr)&&attr!==str){return attr}var varValue=res.getVariable(varName);if(varValue){return varValue}if(!placeholderMemo[varName]){placeholderMemo[varName]=startPlaceholderNum++}return"${"+placeholderMemo[varName]+":"+varName+"}" }},resetTabstopIndex:function(){tabstopIndex=0;startPlaceholderNum=100}}});emmet.define("preferences",function(require,_){var preferences={};var defaults={};var _dbgDefaults=null;var _dbgPreferences=null;function toBoolean(val){if(_.isString(val)){val=val.toLowerCase();return val=="yes"||val=="true"||val=="1"}return !!val}function isValueObj(obj){return _.isObject(obj)&&"value" in obj&&_.keys(obj).length<3}return{define:function(name,value,description){var prefs=name;if(_.isString(name)){prefs={};prefs[name]={value:value,description:description}}_.each(prefs,function(v,k){defaults[k]=isValueObj(v)?v:{value:v}})},set:function(name,value){var prefs=name;if(_.isString(name)){prefs={};prefs[name]=value}_.each(prefs,function(v,k){if(!(k in defaults)){throw'Property "'+k+'" is not defined. You should define it first with `define` method of current module'}if(v!==defaults[k].value){switch(typeof defaults[k].value){case"boolean":v=toBoolean(v);break;case"number":v=parseInt(v+"",10)||0;break;default:if(v!==null){v+=""}}preferences[k]=v}else{if(k in preferences){delete preferences[k]}}})},get:function(name){if(name in preferences){return preferences[name]}if(name in defaults){return defaults[name].value}return void 0},getArray:function(name){var val=this.get(name);if(_.isUndefined(val)||val===null||val===""){return null}val=_.map(val.split(","),require("utils").trim);if(!val.length){return null}return val},getDict:function(name){var result={};_.each(this.getArray(name),function(val){var parts=val.split(":");result[parts[0]]=parts[1]});return result},description:function(name){return name in defaults?defaults[name].description:void 0},remove:function(name){if(!_.isArray(name)){name=[name]}_.each(name,function(key){if(key in preferences){delete preferences[key]}if(key in defaults){delete defaults[key]}})},list:function(){return _.map(_.keys(defaults).sort(),function(key){return{name:key,value:this.get(key),type:typeof defaults[key].value,description:defaults[key].description}},this)},load:function(json){_.each(json,function(value,key){this.set(key,value)},this)},exportModified:function(){return _.clone(preferences)},reset:function(){preferences={}},_startTest:function(){_dbgDefaults=defaults;_dbgPreferences=preferences;defaults={};preferences={}},_stopTest:function(){defaults=_dbgDefaults;preferences=_dbgPreferences}}});emmet.define("filters",function(require,_){var registeredFilters={};var basicFilters="html";function list(filters){if(!filters){return[]}if(_.isString(filters)){return filters.split(/[\|,]/g)}return filters}return{add:function(name,fn){registeredFilters[name]=fn},apply:function(tree,filters,profile){var utils=require("utils");profile=require("profile").get(profile);_.each(list(filters),function(filter){var name=utils.trim(filter.toLowerCase());if(name&&name in registeredFilters){tree=registeredFilters[name](tree,profile)}});return tree},composeList:function(syntax,profile,additionalFilters){profile=require("profile").get(profile);var filters=list(profile.filters||require("resources").findItem(syntax,"filters")||basicFilters);if(profile.extraFilters){filters=filters.concat(list(profile.extraFilters))}if(additionalFilters){filters=filters.concat(list(additionalFilters))}if(!filters||!filters.length){filters=list(basicFilters)}return filters},extractFromAbbreviation:function(abbr){var filters="";abbr=abbr.replace(/\|([\w\|\-]+)$/,function(str,p1){filters=p1;return""});return[abbr,list(filters)]}}});emmet.define("elements",function(require,_){var factories={};var reAttrs=/([\w\-:]+)\s*=\s*(['"])(.*?)\2/g;var result={add:function(name,factory){var that=this;factories[name]=function(){var elem=factory.apply(that,arguments);if(elem){elem.type=name}return elem}},get:function(name){return factories[name]},create:function(name){var args=[].slice.call(arguments,1);var factory=this.get(name);return factory?factory.apply(this,args):null},is:function(elem,type){return elem&&elem.type===type}};function commonFactory(value){return{data:value}}result.add("element",function(elementName,attrs,isEmpty){var ret={name:elementName,is_empty:!!isEmpty};if(attrs){ret.attributes=[];if(_.isArray(attrs)){ret.attributes=attrs}else{if(_.isString(attrs)){var m;while(m=reAttrs.exec(attrs)){ret.attributes.push({name:m[1],value:m[3]})}}else{_.each(attrs,function(value,name){ret.attributes.push({name:name,value:value})})}}}return ret});result.add("snippet",commonFactory);result.add("reference",commonFactory);result.add("empty",function(){return{}});return result});emmet.define("editTree",function(require,_,core){var range=require("range").create;function EditContainer(source,options){this.options=_.extend({offset:0},options);this.source=source;this._children=[];this._positions={name:0};this.initialize.apply(this,arguments)}EditContainer.extend=core.extend;EditContainer.prototype={initialize:function(){},_updateSource:function(value,start,end){var r=range(start,_.isUndefined(end)?0:end-start);var delta=value.length-r.length();var update=function(obj){_.each(obj,function(v,k){if(v>=r.end){obj[k]+=delta }})};update(this._positions);_.each(this.list(),function(item){update(item._positions)});this.source=require("utils").replaceSubstring(this.source,value,r)},add:function(name,value,pos){var item=new EditElement(name,value);this._children.push(item);return item},get:function(name){if(_.isNumber(name)){return this.list()[name]}if(_.isString(name)){return _.find(this.list(),function(prop){return prop.name()===name})}return name},getAll:function(name){if(!_.isArray(name)){name=[name]}var names=[],indexes=[];_.each(name,function(item){if(_.isString(item)){names.push(item)}else{if(_.isNumber(item)){indexes.push(item)}}});return _.filter(this.list(),function(attribute,i){return _.include(indexes,i)||_.include(names,attribute.name())})},value:function(name,value,pos){var element=this.get(name);if(element){return element.value(value)}if(!_.isUndefined(value)){return this.add(name,value,pos)}},values:function(name){return _.map(this.getAll(name),function(element){return element.value()})},remove:function(name){var element=this.get(name);if(element){this._updateSource("",element.fullRange());this._children=_.without(this._children,element)}},list:function(){return this._children},indexOf:function(item){return _.indexOf(this.list(),this.get(item))},name:function(val){if(!_.isUndefined(val)&&this._name!==(val=String(val))){this._updateSource(val,this._positions.name,this._positions.name+this._name.length);this._name=val}return this._name},nameRange:function(isAbsolute){return range(this._positions.name+(isAbsolute?this.options.offset:0),this.name())},range:function(isAbsolute){return range(isAbsolute?this.options.offset:0,this.toString())},itemFromPosition:function(pos,isAbsolute){return _.find(this.list(),function(elem){return elem.range(isAbsolute).inside(pos)})},toString:function(){return this.source}};function EditElement(parent,nameToken,valueToken){this.parent=parent;this._name=nameToken.value;this._value=valueToken?valueToken.value:"";this._positions={name:nameToken.start,value:valueToken?valueToken.start:-1};this.initialize.apply(this,arguments)}EditElement.extend=core.extend;EditElement.prototype={initialize:function(){},_pos:function(num,isAbsolute){return num+(isAbsolute?this.parent.options.offset:0)},value:function(val){if(!_.isUndefined(val)&&this._value!==(val=String(val))){this.parent._updateSource(val,this.valueRange());this._value=val}return this._value},name:function(val){if(!_.isUndefined(val)&&this._name!==(val=String(val))){this.parent._updateSource(val,this.nameRange());this._name=val}return this._name},namePosition:function(isAbsolute){return this._pos(this._positions.name,isAbsolute)},valuePosition:function(isAbsolute){return this._pos(this._positions.value,isAbsolute)},range:function(isAbsolute){return range(this.namePosition(isAbsolute),this.toString())},fullRange:function(isAbsolute){return this.range(isAbsolute)},nameRange:function(isAbsolute){return range(this.namePosition(isAbsolute),this.name())},valueRange:function(isAbsolute){return range(this.valuePosition(isAbsolute),this.value())},toString:function(){return this.name()+this.value()},valueOf:function(){return this.toString()}};return{EditContainer:EditContainer,EditElement:EditElement,createToken:function(start,value,type){var obj={start:start||0,value:value||"",type:type};obj.end=obj.start+obj.value.length;return obj}}});emmet.define("cssEditTree",function(require,_){var defaultOptions={styleBefore:"\n\t",styleSeparator:": ",offset:0};var WHITESPACE_REMOVE_FROM_START=1;var WHITESPACE_REMOVE_FROM_END=2;function range(start,len){return require("range").create(start,len)}function trimWhitespaceTokens(tokens,mask){mask=mask||(WHITESPACE_REMOVE_FROM_START|WHITESPACE_REMOVE_FROM_END);var whitespace=["white","line"];if((mask&WHITESPACE_REMOVE_FROM_END)==WHITESPACE_REMOVE_FROM_END){while(tokens.length&&_.include(whitespace,_.last(tokens).type)){tokens.pop()}}if((mask&WHITESPACE_REMOVE_FROM_START)==WHITESPACE_REMOVE_FROM_START){while(tokens.length&&_.include(whitespace,tokens[0].type)){tokens.shift()}}return tokens}function findSelectorRange(it){var tokens=[],token;var start=it.position(),end;while(token=it.next()){if(token.type=="{"){break}tokens.push(token)}trimWhitespaceTokens(tokens);if(tokens.length){start=tokens[0].start;end=_.last(tokens).end}else{end=start}return range(start,end-start)}function findValueRange(it){var skipTokens=["white","line",":"];var tokens=[],token,start,end;it.nextUntil(function(tok){return !_.include(skipTokens,this.itemNext().type)});start=it.current().end;while(token=it.next()){if(token.type=="}"||token.type==";"){trimWhitespaceTokens(tokens,WHITESPACE_REMOVE_FROM_START|(token.type=="}"?WHITESPACE_REMOVE_FROM_END:0));if(tokens.length){start=tokens[0].start;end=_.last(tokens).end}else{end=start}return range(start,end-start)}tokens.push(token)}if(tokens.length){return range(tokens[0].start,_.last(tokens).end-tokens[0].start)}}function findParts(str){var stream=require("stringStream").create(str);var ch;var result=[]; var sep=/[\s\u00a0,]/;var add=function(){stream.next();result.push(range(stream.start,stream.current()));stream.start=stream.pos};stream.eatSpace();stream.start=stream.pos;while(ch=stream.next()){if(ch=='"'||ch=="'"){stream.next();if(!stream.skipTo(ch)){break}add()}else{if(ch=="("){stream.backUp(1);if(!stream.skipToPair("(",")")){break}stream.backUp(1);add()}else{if(sep.test(ch)){result.push(range(stream.start,stream.current().length-1));stream.eatWhile(sep);stream.start=stream.pos}}}}add();return _.chain(result).filter(function(item){return !!item.length()}).uniq(false,function(item){return item.toString()}).value()}function isValidIdentifier(it){var tokens=it.tokens;for(var i=it._i+1,il=tokens.length;i1){p.styleBefore="\n"+_.last(lines)}p.styleSeparator=source.substring(p.nameRange().end,p.valuePosition());p.styleBefore=_.last(p.styleBefore.split("*/"));p.styleSeparator=p.styleSeparator.replace(/\/\*.*?\*\//g,"");start=p.range().end})},add:function(name,value,pos){var list=this.list();var start=this._positions.contentStart;var styles=_.pick(this.options,"styleBefore","styleSeparator");var editTree=require("editTree");if(_.isUndefined(pos)){pos=list.length}var donor=list[pos];if(donor){start=donor.fullRange().start}else{if(donor=list[pos-1]){donor.end(";");start=donor.range().end}}if(donor){styles=_.pick(donor,"styleBefore","styleSeparator")}var nameToken=editTree.createToken(start+styles.styleBefore.length,name);var valueToken=editTree.createToken(nameToken.end+styles.styleSeparator.length,value);var property=new CSSEditElement(this,nameToken,valueToken,editTree.createToken(valueToken.end,";"));_.extend(property,styles);this._updateSource(property.styleBefore+property.toString(),start);this._children.splice(pos,0,property);return property}});var CSSEditElement=require("editTree").EditElement.extend({initialize:function(rule,name,value,end){this.styleBefore=rule.options.styleBefore;this.styleSeparator=rule.options.styleSeparator;this._end=end.value;this._positions.end=end.start},valueParts:function(isAbsolute){var parts=findParts(this.value());if(isAbsolute){var offset=this.valuePosition(true);_.each(parts,function(p){p.shift(offset)})}return parts},end:function(val){if(!_.isUndefined(val)&&this._end!==val){this.parent._updateSource(val,this._positions.end,this._positions.end+this._end.length);this._end=val}return this._end},fullRange:function(isAbsolute){var r=this.range(isAbsolute);r.start-=this.styleBefore.length;return r},toString:function(){return this.name()+this.styleSeparator+this.value()+this.end()}});return{parse:function(source,options){return new CSSEditContainer(source,options)},parseFromPosition:function(content,pos,isBackward){var bounds=this.extractRule(content,pos,isBackward);if(!bounds||!bounds.inside(pos)){return null}return this.parse(bounds.substring(content),{offset:bounds.start})},extractRule:function(content,pos,isBackward){var result="";var len=content.length;var offset=pos;var stopChars="{}/\\<>\n\r";var bracePos=-1,ch;while(offset>=0){ch=content.charAt(offset);if(ch=="{"){bracePos=offset;break}else{if(ch=="}"&&!isBackward){offset++;break}}offset--}while(offset=0){ch=content.charAt(offset);if(stopChars.indexOf(ch)!=-1){break}offset--}selector=content.substring(offset+1,bracePos).replace(/^[\s\n\r]+/m,"");return require("range").create(bracePos-selector.length,result.length+selector.length)}return null},baseName:function(name){return name.replace(/^\s*\-\w+\-/,"") },findParts:findParts}});emmet.define("xmlEditTree",function(require,_){var defaultOptions={styleBefore:" ",styleSeparator:"=",styleQuote:'"',offset:0};var startTag=/^<([\w\:\-]+)((?:\s+[\w\-:]+(?:\s*=\s*(?:(?:"[^"]*")|(?:'[^']*')|[^>\s]+))?)*)\s*(\/?)>/m;var XMLEditContainer=require("editTree").EditContainer.extend({initialize:function(source,options){_.defaults(this.options,defaultOptions);this._positions.name=1;var attrToken=null;var tokens=require("xmlParser").parse(source);var range=require("range");_.each(tokens,function(token){token.value=range.create(token).substring(source);switch(token.type){case"tag":if(/^<[^\/]+/.test(token.value)){this._name=token.value.substring(1)}break;case"attribute":if(attrToken){this._children.push(new XMLEditElement(this,attrToken))}attrToken=token;break;case"string":this._children.push(new XMLEditElement(this,attrToken,token));attrToken=null;break}},this);if(attrToken){this._children.push(new XMLEditElement(this,attrToken))}this._saveStyle()},_saveStyle:function(){var start=this.nameRange().end;var source=this.source;_.each(this.list(),function(p){p.styleBefore=source.substring(start,p.namePosition());if(p.valuePosition()!==-1){p.styleSeparator=source.substring(p.namePosition()+p.name().length,p.valuePosition()-p.styleQuote.length)}start=p.range().end})},add:function(name,value,pos){var list=this.list();var start=this.nameRange().end;var editTree=require("editTree");var styles=_.pick(this.options,"styleBefore","styleSeparator","styleQuote");if(_.isUndefined(pos)){pos=list.length}var donor=list[pos];if(donor){start=donor.fullRange().start}else{if(donor=list[pos-1]){start=donor.range().end}}if(donor){styles=_.pick(donor,"styleBefore","styleSeparator","styleQuote")}value=styles.styleQuote+value+styles.styleQuote;var attribute=new XMLEditElement(this,editTree.createToken(start+styles.styleBefore.length,name),editTree.createToken(start+styles.styleBefore.length+name.length+styles.styleSeparator.length,value));_.extend(attribute,styles);this._updateSource(attribute.styleBefore+attribute.toString(),start);this._children.splice(pos,0,attribute);return attribute}});var XMLEditElement=require("editTree").EditElement.extend({initialize:function(parent,nameToken,valueToken){this.styleBefore=parent.options.styleBefore;this.styleSeparator=parent.options.styleSeparator;var value="",quote=parent.options.styleQuote;if(valueToken){value=valueToken.value;quote=value.charAt(0);if(quote=='"'||quote=="'"){value=value.substring(1)}else{quote=""}if(quote&&value.charAt(value.length-1)==quote){value=value.substring(0,value.length-1)}}this.styleQuote=quote;this._value=value;this._positions.value=valueToken?valueToken.start+quote.length:-1},fullRange:function(isAbsolute){var r=this.range(isAbsolute);r.start-=this.styleBefore.length;return r},toString:function(){return this.name()+this.styleSeparator+this.styleQuote+this.value()+this.styleQuote}});return{parse:function(source,options){return new XMLEditContainer(source,options)},parseFromPosition:function(content,pos,isBackward){var bounds=this.extractTag(content,pos,isBackward);if(!bounds||!bounds.inside(pos)){return null}return this.parse(bounds.substring(content),{offset:bounds.start})},extractTag:function(content,pos,isBackward){var len=content.length,i;var range=require("range");var maxLen=Math.min(2000,len);var r=null;var match=function(pos){var m;if(content.charAt(pos)=="<"&&(m=content.substr(pos,maxLen).match(startTag))){return range.create(pos,m[0])}};for(i=pos;i>=0;i--){if(r=match(i)){break}}if(r&&(r.inside(pos)||isBackward)){return r}if(!r&&isBackward){return null}for(i=pos;i",range)}function toggleCSSComment(editor){var range=require("range").create(editor.getSelectionRange());var info=require("editorUtils").outputInfo(editor);if(!range.length()){var rule=require("cssEditTree").parseFromPosition(info.content,editor.getCaretPos());if(rule){var property=cssItemFromPosition(rule,editor.getCaretPos());range=property?property.range(true):require("range").create(rule.nameRange(true).start,rule.source)}}if(!range.length()){range=require("range").create(editor.getCurrentLineRange());require("utils").narrowToNonSpace(info.content,range)}return genericCommentToggle(editor,"/*","*/",range)}function cssItemFromPosition(rule,absPos){var relPos=absPos-(rule.options.offset||0);var reSafeChar=/^[\s\n\r]/;return _.find(rule.list(),function(item){if(item.range().end===relPos){return reSafeChar.test(rule.source.charAt(relPos))}return item.range().inside(relPos)})}function searchComment(text,from,startToken,endToken){var commentStart=-1;var commentEnd=-1;var hasMatch=function(str,start){return text.substr(start,str.length)==str};while(from--){if(hasMatch(startToken,from)){commentStart=from;break}}if(commentStart!=-1){from=commentStart;var contentLen=text.length;while(contentLen>=from++){if(hasMatch(endToken,from)){commentEnd=from+endToken.length;break}}}return(commentStart!=-1&&commentEnd!=-1)?require("range").create(commentStart,commentEnd-commentStart):null}function genericCommentToggle(editor,commentStart,commentEnd,range){var editorUtils=require("editorUtils");var content=editorUtils.outputInfo(editor).content;var caretPos=editor.getCaretPos();var newContent=null;var utils=require("utils");function removeComment(str){return str.replace(new RegExp("^"+utils.escapeForRegexp(commentStart)+"\\s*"),function(str){caretPos-=str.length;return""}).replace(new RegExp("\\s*"+utils.escapeForRegexp(commentEnd)+"$"),"")}var commentRange=searchComment(content,caretPos,commentStart,commentEnd);if(commentRange&&commentRange.overlap(range)){range=commentRange;newContent=removeComment(range.substring(content))}else{newContent=commentStart+" "+range.substring(content).replace(new RegExp(utils.escapeForRegexp(commentStart)+"\\s*|\\s*"+utils.escapeForRegexp(commentEnd),"g"),"")+" "+commentEnd;caretPos+=commentStart.length+1}if(newContent!==null){newContent=utils.escapeText(newContent);editor.setCaretPos(range.start);editor.replaceContent(editorUtils.unindent(editor,newContent),range.start,range.end);editor.setCaretPos(caretPos);return true}return false}require("actions").add("toggle_comment",function(editor){var info=require("editorUtils").outputInfo(editor); if(info.syntax=="css"){var caretPos=editor.getCaretPos();var tag=require("htmlMatcher").tag(info.content,caretPos);if(tag&&tag.open.range.inside(caretPos)){info.syntax="html"}}if(info.syntax=="css"){return toggleCSSComment(editor)}return toggleHTMLComment(editor)})});emmet.exec(function(require,_){function findNewEditPoint(editor,inc,offset){inc=inc||1;offset=offset||0;var curPoint=editor.getCaretPos()+offset;var content=String(editor.getContent());var maxLen=content.length;var nextPoint=-1;var reEmptyLine=/^\s+$/;function getLine(ix){var start=ix;while(start>=0){var c=content.charAt(start);if(c=="\n"||c=="\r"){break}start--}return content.substring(start,ix)}while(curPoint<=maxLen&&curPoint>=0){curPoint+=inc;var curChar=content.charAt(curPoint);var nextChar=content.charAt(curPoint+1);var prevChar=content.charAt(curPoint-1);switch(curChar){case'"':case"'":if(nextChar==curChar&&prevChar=="="){nextPoint=curPoint+1}break;case">":if(nextChar=="<"){nextPoint=curPoint+1}break;case"\n":case"\r":if(reEmptyLine.test(getLine(curPoint-1))){nextPoint=curPoint}break}if(nextPoint!=-1){break}}return nextPoint}var actions=require("actions");actions.add("prev_edit_point",function(editor){var curPos=editor.getCaretPos();var newPoint=findNewEditPoint(editor,-1);if(newPoint==curPos){newPoint=findNewEditPoint(editor,-1,-2)}if(newPoint!=-1){editor.setCaretPos(newPoint);return true}return false},{label:"Previous Edit Point"});actions.add("next_edit_point",function(editor){var newPoint=findNewEditPoint(editor,1);if(newPoint!=-1){editor.setCaretPos(newPoint);return true}return false})});emmet.exec(function(require,_){var startTag=/^<([\w\:\-]+)((?:\s+[\w\-:]+(?:\s*=\s*(?:(?:"[^"]*")|(?:'[^']*')|[^>\s]+))?)*)\s*(\/?)>/;function findItem(editor,isBackward,extractFn,rangeFn){var range=require("range");var content=require("editorUtils").outputInfo(editor).content;var contentLength=content.length;var itemRange,rng;var prevRange=range.create(-1,0);var sel=range.create(editor.getSelectionRange());var searchPos=sel.start,loop=100000;while(searchPos>=0&&searchPos0){if((itemRange=extractFn(content,searchPos,isBackward))){if(prevRange.equal(itemRange)){break}prevRange=itemRange.clone();rng=rangeFn(itemRange.substring(content),itemRange.start,sel.clone());if(rng){editor.createSelection(rng.start,rng.end);return true}else{searchPos=isBackward?itemRange.start:itemRange.end-1}}searchPos+=isBackward?-1:1}return false}function findNextHTMLItem(editor){var isFirst=true;return findItem(editor,false,function(content,searchPos){if(isFirst){isFirst=false;return findOpeningTagFromPosition(content,searchPos)}else{return getOpeningTagFromPosition(content,searchPos)}},function(tag,offset,selRange){return getRangeForHTMLItem(tag,offset,selRange,false)})}function findPrevHTMLItem(editor){return findItem(editor,true,getOpeningTagFromPosition,function(tag,offset,selRange){return getRangeForHTMLItem(tag,offset,selRange,true)})}function makePossibleRangesHTML(source,tokens,offset){offset=offset||0;var range=require("range");var result=[];var attrStart=-1,attrName="",attrValue="",attrValueRange,tagName;_.each(tokens,function(tok){switch(tok.type){case"tag":tagName=source.substring(tok.start,tok.end);if(/^<[\w\:\-]/.test(tagName)){result.push(range.create({start:tok.start+1,end:tok.end}))}break;case"attribute":attrStart=tok.start;attrName=source.substring(tok.start,tok.end);break;case"string":result.push(range.create(attrStart,tok.end-attrStart));attrValueRange=range.create(tok);attrValue=attrValueRange.substring(source);if(isQuote(attrValue.charAt(0))){attrValueRange.start++}if(isQuote(attrValue.charAt(attrValue.length-1))){attrValueRange.end--}result.push(attrValueRange);if(attrName=="class"){result=result.concat(classNameRanges(attrValueRange.substring(source),attrValueRange.start))}break}});_.each(result,function(r){r.shift(offset)});return _.chain(result).filter(function(item){return !!item.length()}).uniq(false,function(item){return item.toString()}).value()}function classNameRanges(className,offset){offset=offset||0;var result=[];var stream=require("stringStream").create(className);var range=require("range");stream.eatSpace();stream.start=stream.pos;var ch;while(ch=stream.next()){if(/[\s\u00a0]/.test(ch)){result.push(range.create(stream.start+offset,stream.pos-stream.start-1));stream.eatSpace();stream.start=stream.pos}}result.push(range.create(stream.start+offset,stream.pos-stream.start));return result}function getRangeForHTMLItem(tag,offset,selRange,isBackward){var ranges=makePossibleRangesHTML(tag,require("xmlParser").parse(tag),offset);if(isBackward){ranges.reverse()}var curRange=_.find(ranges,function(r){return r.equal(selRange)});if(curRange){var ix=_.indexOf(ranges,curRange);if(ix1){return matchedRanges[1] }}return _.find(ranges,function(r){return r.end>selRange.end})}function findOpeningTagFromPosition(html,pos){var tag;while(pos>=0){if(tag=getOpeningTagFromPosition(html,pos)){return tag}pos--}return null}function getOpeningTagFromPosition(html,pos){var m;if(html.charAt(pos)=="<"&&(m=html.substring(pos,html.length).match(startTag))){return require("range").create(pos,m[0])}}function isQuote(ch){return ch=='"'||ch=="'"}function makePossibleRangesCSS(property){var valueRange=property.valueRange(true);var result=[property.range(true),valueRange];var stringStream=require("stringStream");var cssEditTree=require("cssEditTree");var range=require("range");var value=property.value();_.each(property.valueParts(),function(r){var clone=r.clone();result.push(clone.shift(valueRange.start));var stream=stringStream.create(r.substring(value));if(stream.match(/^[\w\-]+\(/,true)){stream.start=stream.pos;stream.skipToPair("(",")");var fnBody=stream.current();result.push(range.create(clone.start+stream.start,fnBody));_.each(cssEditTree.findParts(fnBody),function(part){result.push(range.create(clone.start+stream.start+part.start,part.substring(fnBody)))})}});return _.chain(result).filter(function(item){return !!item.length()}).uniq(false,function(item){return item.toString()}).value()}function matchedRangeForCSSProperty(rule,selRange,isBackward){var property=null;var possibleRanges,curRange=null,ix;var list=rule.list();var searchFn,nearestItemFn;if(isBackward){list.reverse();searchFn=function(p){return p.range(true).start<=selRange.start};nearestItemFn=function(r){return r.start=selRange.end};nearestItemFn=function(r){return r.end>selRange.start}}while(property=_.find(list,searchFn)){possibleRanges=makePossibleRangesCSS(property);if(isBackward){possibleRanges.reverse()}curRange=_.find(possibleRanges,function(r){return r.equal(selRange)});if(!curRange){var matchedRanges=_.filter(possibleRanges,function(r){return r.inside(selRange.end)});if(matchedRanges.length>1){curRange=matchedRanges[1];break}if(curRange=_.find(possibleRanges,nearestItemFn)){break}}else{ix=_.indexOf(possibleRanges,curRange);if(ix!=possibleRanges.length-1){curRange=possibleRanges[ix+1];break}}curRange=null;selRange.start=selRange.end=isBackward?property.range(true).start-1:property.range(true).end+1}return curRange}function findNextCSSItem(editor){return findItem(editor,false,require("cssEditTree").extractRule,getRangeForNextItemInCSS)}function findPrevCSSItem(editor){return findItem(editor,true,require("cssEditTree").extractRule,getRangeForPrevItemInCSS)}function getRangeForNextItemInCSS(rule,offset,selRange){var tree=require("cssEditTree").parse(rule,{offset:offset});var range=tree.nameRange(true);if(selRange.endrange.start){return range}}return curRange}var actions=require("actions");actions.add("select_next_item",function(editor){if(editor.getSyntax()=="css"){return findNextCSSItem(editor)}else{return findNextHTMLItem(editor)}});actions.add("select_previous_item",function(editor){if(editor.getSyntax()=="css"){return findPrevCSSItem(editor)}else{return findPrevHTMLItem(editor)}})});emmet.exec(function(require,_){var actions=require("actions");var matcher=require("htmlMatcher");var lastMatch=null;function matchPair(editor,direction){direction=String((direction||"out").toLowerCase());var info=require("editorUtils").outputInfo(editor);var range=require("range");var sel=range.create(editor.getSelectionRange());var content=info.content;if(lastMatch&&!lastMatch.range.equal(sel)){lastMatch=null}if(lastMatch&&sel.length()){if(direction=="in"){if(lastMatch.type=="tag"&&!lastMatch.close){return false}else{if(lastMatch.range.equal(lastMatch.outerRange)){lastMatch.range=lastMatch.innerRange}else{var narrowed=require("utils").narrowToNonSpace(content,lastMatch.innerRange);lastMatch=matcher.find(content,narrowed.start+1);if(lastMatch&&lastMatch.range.equal(sel)&&lastMatch.outerRange.equal(sel)){lastMatch.range=lastMatch.innerRange}}}}else{if(!lastMatch.innerRange.equal(lastMatch.outerRange)&&lastMatch.range.equal(lastMatch.innerRange)&&sel.equal(lastMatch.range)){lastMatch.range=lastMatch.outerRange}else{lastMatch=matcher.find(content,sel.start);if(lastMatch&&lastMatch.range.equal(sel)&&lastMatch.innerRange.equal(sel)){lastMatch.range=lastMatch.outerRange}}}}else{lastMatch=matcher.find(content,sel.start)}if(lastMatch&&!lastMatch.range.equal(sel)){editor.createSelection(lastMatch.range.start,lastMatch.range.end);return true}lastMatch=null;return false}actions.add("match_pair",matchPair,{hidden:true});actions.add("match_pair_inward",function(editor){return matchPair(editor,"in")},{label:"HTML/Match Pair Tag (inward)"}); actions.add("match_pair_outward",function(editor){return matchPair(editor,"out")},{label:"HTML/Match Pair Tag (outward)"});actions.add("matching_pair",function(editor){var content=String(editor.getContent());var caretPos=editor.getCaretPos();if(content.charAt(caretPos)=="<"){caretPos++}var tag=matcher.tag(content,caretPos);if(tag&&tag.close){if(tag.open.range.inside(caretPos)){editor.setCaretPos(tag.close.range.start)}else{editor.setCaretPos(tag.open.range.start)}return true}return false},{label:"HTML/Go To Matching Tag Pair"})});emmet.exec(function(require,_){require("actions").add("remove_tag",function(editor){var utils=require("utils");var info=require("editorUtils").outputInfo(editor);var tag=require("htmlMatcher").tag(info.content,editor.getCaretPos());if(tag){if(!tag.close){editor.replaceContent(utils.getCaretPlaceholder(),tag.range.start,tag.range.end)}else{var tagContentRange=utils.narrowToNonSpace(info.content,tag.innerRange);var startLineBounds=utils.findNewlineBounds(info.content,tagContentRange.start);var startLinePad=utils.getLinePadding(startLineBounds.substring(info.content));var tagContent=tagContentRange.substring(info.content);tagContent=utils.unindentString(tagContent,startLinePad);editor.replaceContent(utils.getCaretPlaceholder()+utils.escapeText(tagContent),tag.outerRange.start,tag.outerRange.end)}return true}return false},{label:"HTML/Remove Tag"})});emmet.exec(function(require,_){function joinTag(editor,profile,tag){var utils=require("utils");var slash=profile.selfClosing()||" /";var content=tag.open.range.substring(tag.source).replace(/\s*>$/,slash+">");var caretPos=editor.getCaretPos();if(content.length+tag.outerRange.start$/,">");caretPos=tag.outerRange.start+content.length;content+=tagContent+"";content=utils.escapeText(content);editor.replaceContent(content,tag.outerRange.start,tag.outerRange.end);editor.setCaretPos(caretPos);return true}require("actions").add("split_join_tag",function(editor,profileName){var matcher=require("htmlMatcher");var info=require("editorUtils").outputInfo(editor,null,profileName);var profile=require("profile").get(info.profile);var tag=matcher.tag(info.content,editor.getCaretPos());if(tag){return tag.close?joinTag(editor,profile,tag):splitTag(editor,profile,tag)}return false},{label:"HTML/Split\\Join Tag Declaration"})});emmet.define("reflectCSSValue",function(require,_){var handlers=require("handlerList").create();require("actions").add("reflect_css_value",function(editor){if(editor.getSyntax()!="css"){return false}return require("actionUtils").compoundUpdate(editor,doCSSReflection(editor))},{label:"CSS/Reflect Value"});function doCSSReflection(editor){var cssEditTree=require("cssEditTree");var outputInfo=require("editorUtils").outputInfo(editor);var caretPos=editor.getCaretPos();var cssRule=cssEditTree.parseFromPosition(outputInfo.content,caretPos);if(!cssRule){return}var property=cssRule.itemFromPosition(caretPos,true);if(!property){return}var oldRule=cssRule.source;var offset=cssRule.options.offset;var caretDelta=caretPos-offset-property.range().start;handlers.exec(false,[property]);if(oldRule!==cssRule.source){return{data:cssRule.source,start:offset,end:offset+oldRule.length,caret:offset+property.range().start+caretDelta}}}function getReflectedCSSName(name){name=require("cssEditTree").baseName(name);var vendorPrefix="^(?:\\-\\w+\\-)?",m;if(name=="opacity"||name=="filter"){return new RegExp(vendorPrefix+"(?:opacity|filter)$")}else{if(m=name.match(/^border-radius-(top|bottom)(left|right)/)){return new RegExp(vendorPrefix+"(?:"+name+"|border-"+m[1]+"-"+m[2]+"-radius)$")}else{if(m=name.match(/^border-(top|bottom)-(left|right)-radius/)){return new RegExp(vendorPrefix+"(?:"+name+"|border-radius-"+m[1]+m[2]+")$")}}}return new RegExp(vendorPrefix+name+"$")}function reflectValue(donor,receiver){var value=getReflectedValue(donor.name(),donor.value(),receiver.name(),receiver.value());receiver.value(value)}function getReflectedValue(curName,curValue,refName,refValue){var cssEditTree=require("cssEditTree");var utils=require("utils");curName=cssEditTree.baseName(curName);refName=cssEditTree.baseName(refName);if(curName=="opacity"&&refName=="filter"){return refValue.replace(/opacity=[^)]*/i,"opacity="+Math.floor(parseFloat(curValue)*100))}else{if(curName=="filter"&&refName=="opacity"){var m=curValue.match(/opacity=([^)]*)/i);return m?utils.prettifyNumber(parseInt(m[1])/100):refValue}}return curValue}handlers.add(function(property){var reName=getReflectedCSSName(property.name()); _.each(property.parent.list(),function(p){if(reName.test(p.name())){reflectValue(property,p)}})},{order:-1});return{addHandler:function(fn,options){handlers.add(fn,options)},removeHandler:function(fn){handlers.remove(fn,options)}}});emmet.exec(function(require,_){require("actions").add("evaluate_math_expression",function(editor){var actionUtils=require("actionUtils");var utils=require("utils");var content=String(editor.getContent());var chars=".+-*/\\";var sel=require("range").create(editor.getSelectionRange());if(!sel.length()){sel=actionUtils.findExpressionBounds(editor,function(ch){return utils.isNumeric(ch)||chars.indexOf(ch)!=-1})}if(sel&&sel.length()){var expr=sel.substring(content);expr=expr.replace(/([\d\.\-]+)\\([\d\.\-]+)/g,"Math.round($1/$2)");try{var result=utils.prettifyNumber(new Function("return "+expr)());editor.replaceContent(result,sel.start,sel.end);editor.setCaretPos(sel.start+result.length);return true}catch(e){}}return false},{label:"Numbers/Evaluate Math Expression"})});emmet.exec(function(require,_){function incrementNumber(editor,step){var utils=require("utils");var actionUtils=require("actionUtils");var hasSign=false;var hasDecimal=false;var r=actionUtils.findExpressionBounds(editor,function(ch,pos,content){if(utils.isNumeric(ch)){return true}if(ch=="."){if(!utils.isNumeric(content.charAt(pos+1))){return false}return hasDecimal?false:hasDecimal=true}if(ch=="-"){return hasSign?false:hasSign=true}return false});if(r&&r.length()){var strNum=r.substring(String(editor.getContent()));var num=parseFloat(strNum);if(!_.isNaN(num)){num=utils.prettifyNumber(num+step);if(/^(\-?)0+[1-9]/.test(strNum)){var minus="";if(RegExp.$1){minus="-";num=num.substring(1)}var parts=num.split(".");parts[0]=utils.zeroPadString(parts[0],intLength(strNum));num=minus+parts.join(".")}editor.replaceContent(num,r.start,r.end);editor.createSelection(r.start,r.start+num.length);return true}}return false}function intLength(num){num=num.replace(/^\-/,"");if(~num.indexOf(".")){return num.split(".")[0].length}return num.length}var actions=require("actions");_.each([1,-1,10,-10,0.1,-0.1],function(num){var prefix=num>0?"increment":"decrement";actions.add(prefix+"_number_by_"+String(Math.abs(num)).replace(".","").substring(0,2),function(editor){return incrementNumber(editor,num)},{label:"Numbers/"+prefix.charAt(0).toUpperCase()+prefix.substring(1)+" number by "+Math.abs(num)})})});emmet.exec(function(require,_){var actions=require("actions");var prefs=require("preferences");prefs.define("css.closeBraceIndentation","\n","Indentation before closing brace of CSS rule. Some users prefere "+"indented closing brace of CSS rule for better readability. "+"This preference’s value will be automatically inserted before "+"closing brace when user adds newline in newly created CSS rule "+"(e.g. when “Insert formatted linebreak” action will be performed "+"in CSS file). If you’re such user, you may want to write put a value "+"like \\n\\t in this preference.");actions.add("insert_formatted_line_break_only",function(editor){var utils=require("utils");var res=require("resources");var info=require("editorUtils").outputInfo(editor);var caretPos=editor.getCaretPos();var nl=utils.getNewline();if(_.include(["html","xml","xsl"],info.syntax)){var pad=res.getVariable("indentation");var tag=require("htmlMatcher").tag(info.content,caretPos);if(tag&&!tag.innerRange.length()){editor.replaceContent(nl+pad+utils.getCaretPlaceholder()+nl,caretPos);return true}}else{if(info.syntax=="css"){var content=info.content;if(caretPos&&content.charAt(caretPos-1)=="{"){var append=prefs.get("css.closeBraceIndentation");var pad=res.getVariable("indentation");var hasCloseBrace=content.charAt(caretPos)=="}";if(!hasCloseBrace){for(var i=caretPos,il=content.length,ch;icurPadding.length){editor.replaceContent(nl+nextPadding,caretPos,caretPos,true)}else{editor.replaceContent(nl,caretPos)}}return true},{hidden:true})});emmet.exec(function(require,_){require("actions").add("merge_lines",function(editor){var matcher=require("htmlMatcher");var utils=require("utils");var editorUtils=require("editorUtils");var info=editorUtils.outputInfo(editor);var selection=require("range").create(editor.getSelectionRange()); if(!selection.length()){var pair=matcher.find(info.content,editor.getCaretPos());if(pair){selection=pair.outerRange}}if(selection.length()){var text=selection.substring(info.content);var lines=utils.splitByLines(text);for(var i=1;i=0){if(startsWith("src=",text,caretPos)){if(m=text.substr(caretPos).match(/^(src=(["'])?)([^'"<>\s]+)\1?/)){data=m[3];caretPos+=m[1].length}break}else{if(startsWith("url(",text,caretPos)){if(m=text.substr(caretPos).match(/^(url\((['"])?)([^'"\)\s]+)\1?/)){data=m[3];caretPos+=m[1].length}break}}}}if(data){if(startsWith("data:",data)){return decodeFromBase64(editor,data,caretPos)}else{return encodeToBase64(editor,data,caretPos)}}return false},{label:"Encode\\Decode data:URL image"});function startsWith(token,text,pos){pos=pos||0;return text.charAt(pos)==token.charAt(0)&&text.substr(pos,token.length)==token}function encodeToBase64(editor,imgPath,pos){var file=require("file");var actionUtils=require("actionUtils");var editorFile=editor.getFilePath();var defaultMimeType="application/octet-stream";if(editorFile===null){throw"You should save your file before using this action"}var realImgPath=file.locateFile(editorFile,imgPath);if(realImgPath===null){throw"Can't find "+imgPath+" file"}file.read(realImgPath,function(err,content){if(err){throw"Unable to read "+realImgPath+": "+err}var b64=require("base64").encode(String(content));if(!b64){throw"Can't encode file content to base64"}b64="data:"+(actionUtils.mimeTypes[String(file.getExt(realImgPath))]||defaultMimeType)+";base64,"+b64;editor.replaceContent("$0"+b64,pos,pos+imgPath.length)});return true}function decodeFromBase64(editor,data,pos){var filePath=String(editor.prompt("Enter path to file (absolute or relative)"));if(!filePath){return false}var file=require("file");var absPath=file.createPath(editor.getFilePath(),filePath);if(!absPath){throw"Can't save file"}file.save(absPath,require("base64").decode(data.replace(/^data\:.+?;.+?,/,"")));editor.replaceContent("$0"+filePath,pos,pos+data.length);return true}});emmet.exec(function(require,_){function updateImageSizeHTML(editor){var offset=editor.getCaretPos();var info=require("editorUtils").outputInfo(editor);var xmlElem=require("xmlEditTree").parseFromPosition(info.content,offset,true);if(xmlElem&&(xmlElem.name()||"").toLowerCase()=="img"){getImageSizeForSource(editor,xmlElem.value("src"),function(size){if(size){var compoundData=xmlElem.range(true);xmlElem.value("width",size.width);xmlElem.value("height",size.height,xmlElem.indexOf("width")+1);require("actionUtils").compoundUpdate(editor,_.extend(compoundData,{data:xmlElem.toString(),caret:offset}))}})}}function updateImageSizeCSS(editor){var offset=editor.getCaretPos();var info=require("editorUtils").outputInfo(editor);var cssRule=require("cssEditTree").parseFromPosition(info.content,offset,true);if(cssRule){var prop=cssRule.itemFromPosition(offset,true),m;if(prop&&(m=/url\((["']?)(.+?)\1\)/i.exec(prop.value()||""))){getImageSizeForSource(editor,m[2],function(size){if(size){var compoundData=cssRule.range(true);cssRule.value("width",size.width+"px");cssRule.value("height",size.height+"px",cssRule.indexOf("width")+1);require("actionUtils").compoundUpdate(editor,_.extend(compoundData,{data:cssRule.toString(),caret:offset}))}})}}}function getImageSizeForSource(editor,src,callback){var fileContent;var au=require("actionUtils");if(src){if(/^data:/.test(src)){fileContent=require("base64").decode(src.replace(/^data\:.+?;.+?,/,""));return callback(au.getImageSize(fileContent))}var file=require("file");var absPath=file.locateFile(editor.getFilePath(),src);if(absPath===null){throw"Can't find "+src+" file"}file.read(absPath,function(err,content){if(err){throw"Unable to read "+absPath+": "+err}content=String(content);callback(au.getImageSize(content))})}}require("actions").add("update_image_size",function(editor){if(_.include(["css","less","scss"],String(editor.getSyntax()))){updateImageSizeCSS(editor)}else{updateImageSizeHTML(editor)}return true})});emmet.define("cssResolver",function(require,_){var module=null;var prefixObj={prefix:"emmet",obsolete:false,transformName:function(name){return"-"+this.prefix+"-"+name},properties:function(){return getProperties("css."+this.prefix+"Properties")||[]},supports:function(name){return _.include(this.properties(),name)}};var vendorPrefixes={};var defaultValue="${1};";var prefs=require("preferences");prefs.define("css.valueSeparator",": ","Defines a symbol that should be placed between CSS property and "+"value when expanding CSS abbreviations."); prefs.define("css.propertyEnd",";","Defines a symbol that should be placed at the end of CSS property "+"when expanding CSS abbreviations.");prefs.define("stylus.valueSeparator"," ","Defines a symbol that should be placed between CSS property and "+"value when expanding CSS abbreviations in Stylus dialect.");prefs.define("stylus.propertyEnd","","Defines a symbol that should be placed at the end of CSS property "+"when expanding CSS abbreviations in Stylus dialect.");prefs.define("sass.propertyEnd","","Defines a symbol that should be placed at the end of CSS property "+"when expanding CSS abbreviations in SASS dialect.");prefs.define("css.autoInsertVendorPrefixes",true,"Automatically generate vendor-prefixed copies of expanded CSS "+"property. By default, Emmet will generate vendor-prefixed "+"properties only when you put dash before abbreviation "+"(e.g. -bxsh). With this option enabled, you don’t "+"need dashes before abbreviations: Emmet will produce "+"vendor-prefixed properties for you.");var descTemplate=_.template("A comma-separated list of CSS properties that may have "+"<%= vendor %> vendor prefix. This list is used to generate "+"a list of prefixed properties when expanding -property "+"abbreviations. Empty list means that all possible CSS values may "+"have <%= vendor %> prefix.");var descAddonTemplate=_.template("A comma-separated list of additional CSS properties "+"for css.<%= vendor %>Preperties preference. "+"You should use this list if you want to add or remove a few CSS "+"properties to original set. To add a new property, simply write its name, "+"to remove it, precede property with hyphen.
"+"For example, to add foo property and remove border-radius one, "+"the preference value will look like this: foo, -border-radius.");var props={"webkit":"animation, animation-delay, animation-direction, animation-duration, animation-fill-mode, animation-iteration-count, animation-name, animation-play-state, animation-timing-function, appearance, backface-visibility, background-clip, background-composite, background-origin, background-size, border-fit, border-horizontal-spacing, border-image, border-vertical-spacing, box-align, box-direction, box-flex, box-flex-group, box-lines, box-ordinal-group, box-orient, box-pack, box-reflect, box-shadow, color-correction, column-break-after, column-break-before, column-break-inside, column-count, column-gap, column-rule-color, column-rule-style, column-rule-width, column-span, column-width, dashboard-region, font-smoothing, highlight, hyphenate-character, hyphenate-limit-after, hyphenate-limit-before, hyphens, line-box-contain, line-break, line-clamp, locale, margin-before-collapse, margin-after-collapse, marquee-direction, marquee-increment, marquee-repetition, marquee-style, mask-attachment, mask-box-image, mask-box-image-outset, mask-box-image-repeat, mask-box-image-slice, mask-box-image-source, mask-box-image-width, mask-clip, mask-composite, mask-image, mask-origin, mask-position, mask-repeat, mask-size, nbsp-mode, perspective, perspective-origin, rtl-ordering, text-combine, text-decorations-in-effect, text-emphasis-color, text-emphasis-position, text-emphasis-style, text-fill-color, text-orientation, text-security, text-stroke-color, text-stroke-width, transform, transition, transform-origin, transform-style, transition-delay, transition-duration, transition-property, transition-timing-function, user-drag, user-modify, user-select, writing-mode, svg-shadow, box-sizing, border-radius","moz":"animation-delay, animation-direction, animation-duration, animation-fill-mode, animation-iteration-count, animation-name, animation-play-state, animation-timing-function, appearance, backface-visibility, background-inline-policy, binding, border-bottom-colors, border-image, border-left-colors, border-right-colors, border-top-colors, box-align, box-direction, box-flex, box-ordinal-group, box-orient, box-pack, box-shadow, box-sizing, column-count, column-gap, column-rule-color, column-rule-style, column-rule-width, column-width, float-edge, font-feature-settings, font-language-override, force-broken-image-icon, hyphens, image-region, orient, outline-radius-bottomleft, outline-radius-bottomright, outline-radius-topleft, outline-radius-topright, perspective, perspective-origin, stack-sizing, tab-size, text-blink, text-decoration-color, text-decoration-line, text-decoration-style, text-size-adjust, transform, transform-origin, transform-style, transition, transition-delay, transition-duration, transition-property, transition-timing-function, user-focus, user-input, user-modify, user-select, window-shadow, background-clip, border-radius","ms":"accelerator, backface-visibility, background-position-x, background-position-y, behavior, block-progression, box-align, box-direction, box-flex, box-line-progression, box-lines, box-ordinal-group, box-orient, box-pack, content-zoom-boundary, content-zoom-boundary-max, content-zoom-boundary-min, content-zoom-chaining, content-zoom-snap, content-zoom-snap-points, content-zoom-snap-type, content-zooming, filter, flow-from, flow-into, font-feature-settings, grid-column, grid-column-align, grid-column-span, grid-columns, grid-layer, grid-row, grid-row-align, grid-row-span, grid-rows, high-contrast-adjust, hyphenate-limit-chars, hyphenate-limit-lines, hyphenate-limit-zone, hyphens, ime-mode, interpolation-mode, layout-flow, layout-grid, layout-grid-char, layout-grid-line, layout-grid-mode, layout-grid-type, line-break, overflow-style, perspective, perspective-origin, perspective-origin-x, perspective-origin-y, scroll-boundary, scroll-boundary-bottom, scroll-boundary-left, scroll-boundary-right, scroll-boundary-top, scroll-chaining, scroll-rails, scroll-snap-points-x, scroll-snap-points-y, scroll-snap-type, scroll-snap-x, scroll-snap-y, scrollbar-arrow-color, scrollbar-base-color, scrollbar-darkshadow-color, scrollbar-face-color, scrollbar-highlight-color, scrollbar-shadow-color, scrollbar-track-color, text-align-last, text-autospace, text-justify, text-kashida-space, text-overflow, text-size-adjust, text-underline-position, touch-action, transform, transform-origin, transform-origin-x, transform-origin-y, transform-origin-z, transform-style, transition, transition-delay, transition-duration, transition-property, transition-timing-function, user-select, word-break, word-wrap, wrap-flow, wrap-margin, wrap-through, writing-mode","o":"dashboard-region, animation, animation-delay, animation-direction, animation-duration, animation-fill-mode, animation-iteration-count, animation-name, animation-play-state, animation-timing-function, border-image, link, link-source, object-fit, object-position, tab-size, table-baseline, transform, transform-origin, transition, transition-delay, transition-duration, transition-property, transition-timing-function, accesskey, input-format, input-required, marquee-dir, marquee-loop, marquee-speed, marquee-style"}; _.each(props,function(v,k){prefs.define("css."+k+"Properties",v,descTemplate({vendor:k}));prefs.define("css."+k+"PropertiesAddon","",descAddonTemplate({vendor:k}))});prefs.define("css.unitlessProperties","z-index, line-height, opacity, font-weight, zoom","The list of properties whose values must not contain units.");prefs.define("css.intUnit","px","Default unit for integer values");prefs.define("css.floatUnit","em","Default unit for float values");prefs.define("css.keywords","auto, inherit","A comma-separated list of valid keywords that can be used in CSS abbreviations.");prefs.define("css.keywordAliases","a:auto, i:inherit, s:solid, da:dashed, do:dotted, t:transparent","A comma-separated list of keyword aliases, used in CSS abbreviation. "+"Each alias should be defined as alias:keyword_name.");prefs.define("css.unitAliases","e:em, p:%, x:ex, r:rem","A comma-separated list of unit aliases, used in CSS abbreviation. "+"Each alias should be defined as alias:unit_value.");prefs.define("css.color.short",true,"Should color values like #ffffff be shortened to "+"#fff after abbreviation with color was expanded.");prefs.define("css.color.case","keep","Letter case of color values generated by abbreviations with color "+"(like c#0). Possible values are upper, "+"lower and keep.");prefs.define("css.fuzzySearch",true,"Enable fuzzy search among CSS snippet names. When enabled, every "+"unknown snippet will be scored against available snippet "+"names (not values or CSS properties!). The match with best score "+"will be used to resolve snippet value. For example, with this "+"preference enabled, the following abbreviations are equal: "+"ov:h == ov-h == o-h == "+"oh");prefs.define("css.fuzzySearchMinScore",0.3,"The minium score (from 0 to 1) that fuzzy-matched abbreviation should "+"achive. Lower values may produce many false-positive matches, "+"higher values may reduce possible matches.");prefs.define("css.alignVendor",false,"If set to true, all generated vendor-prefixed properties "+"will be aligned by real property name.");function isNumeric(ch){var code=ch&&ch.charCodeAt(0);return(ch&&ch=="."||(code>47&&code<58))}function isSingleProperty(snippet){var utils=require("utils");snippet=utils.trim(snippet);if(~snippet.indexOf("/*")||/[\n\r]/.test(snippet)){return false}if(!/^[a-z0-9\-]+\s*\:/i.test(snippet)){return false}snippet=require("tabStops").processText(snippet,{replaceCarets:true,tabstop:function(){return"value"}});return snippet.split(":").length==2}function normalizeValue(value){if(value.charAt(0)=="-"&&!/^\-[\.\d]/.test(value)){value=value.replace(/^\-+/,"")}if(value.charAt(0)=="#"){return normalizeHexColor(value)}return getKeyword(value)}function normalizeHexColor(value){var hex=value.replace(/^#+/,"")||"0";if(hex.toLowerCase()=="t"){return"transparent"}var repeat=require("utils").repeatString;var color=null;switch(hex.length){case 1:color=repeat(hex,6);break;case 2:color=repeat(hex,3);break;case 3:color=hex.charAt(0)+hex.charAt(0)+hex.charAt(1)+hex.charAt(1)+hex.charAt(2)+hex.charAt(2);break;case 4:color=hex+hex.substr(0,2);break;case 5:color=hex+hex.charAt(0);break;default:color=hex.substr(0,6)}if(prefs.get("css.color.short")){var p=color.split("");if(p[0]==p[1]&&p[2]==p[3]&&p[4]==p[5]){color=p[0]+p[2]+p[4]}}switch(prefs.get("css.color.case")){case"upper":color=color.toUpperCase();break;case"lower":color=color.toLowerCase();break}return"#"+color}function getKeyword(name){var aliases=prefs.getDict("css.keywordAliases");return name in aliases?aliases[name]:name}function getUnit(name){var aliases=prefs.getDict("css.unitAliases");return name in aliases?aliases[name]:name}function isValidKeyword(keyword){return _.include(prefs.getArray("css.keywords"),getKeyword(keyword))}function hasPrefix(property,prefix){var info=vendorPrefixes[prefix];if(!info){info=_.find(vendorPrefixes,function(data){return data.prefix==prefix})}return info&&info.supports(property)}function findPrefixes(property,noAutofill){var result=[];_.each(vendorPrefixes,function(obj,prefix){if(hasPrefix(property,prefix)){result.push(prefix)}});if(!result.length&&!noAutofill){_.each(vendorPrefixes,function(obj,prefix){if(!obj.obsolete){result.push(prefix)}})}return result}function addPrefix(name,obj){if(_.isString(obj)){obj={prefix:obj}}vendorPrefixes[name]=_.extend({},prefixObj,obj)}function getSyntaxPreference(name,syntax){if(syntax){var val=prefs.get(syntax+"."+name);if(!_.isUndefined(val)){return val}}return prefs.get("css."+name)}function formatProperty(property,syntax){var ix=property.indexOf(":");property=property.substring(0,ix).replace(/\s+$/,"")+getSyntaxPreference("valueSeparator",syntax)+require("utils").trim(property.substring(ix+1));return property.replace(/\s*;\s*$/,getSyntaxPreference("propertyEnd",syntax))}function transformSnippet(snippet,isImportant,syntax){if(!_.isString(snippet)){snippet=snippet.data }if(!isSingleProperty(snippet)){return snippet}if(isImportant){if(~snippet.indexOf(";")){snippet=snippet.split(";").join(" !important;")}else{snippet+=" !important"}}return formatProperty(snippet,syntax)}function parseList(list){var result=_.map((list||"").split(","),require("utils").trim);return result.length?result:null}function getProperties(key){var list=prefs.getArray(key);_.each(prefs.getArray(key+"Addon"),function(prop){if(prop.charAt(0)=="-"){list=_.without(list,prop.substr(1))}else{if(prop.charAt(0)=="+"){prop=prop.substr(1)}list.push(prop)}});return list}addPrefix("w",{prefix:"webkit"});addPrefix("m",{prefix:"moz"});addPrefix("s",{prefix:"ms"});addPrefix("o",{prefix:"o"});var cssSyntaxes=["css","less","sass","scss","stylus"];require("resources").addResolver(function(node,syntax){if(_.include(cssSyntaxes,syntax)&&node.isElement()){return module.expandToSnippet(node.abbreviation,syntax)}return null});var ea=require("expandAbbreviation");ea.addHandler(function(editor,syntax,profile){if(!_.include(cssSyntaxes,syntax)){return false}var caretPos=editor.getSelectionRange().end;var abbr=ea.findAbbreviation(editor);if(abbr){var content=emmet.expandAbbreviation(abbr,syntax,profile);if(content){var replaceFrom=caretPos-abbr.length;var replaceTo=caretPos;if(editor.getContent().charAt(caretPos)==";"&&content.charAt(content.length-1)==";"){replaceTo++}editor.replaceContent(content,replaceFrom,replaceTo);return true}}return false});return module={addPrefix:addPrefix,supportsPrefix:hasPrefix,prefixed:function(property,prefix){return hasPrefix(property,prefix)?"-"+prefix+"-"+property:property},listPrefixes:function(){return _.map(vendorPrefixes,function(obj){return obj.prefix})},getPrefix:function(name){return vendorPrefixes[name]},removePrefix:function(name){if(name in vendorPrefixes){delete vendorPrefixes[name]}},extractPrefixes:function(abbr){if(abbr.charAt(0)!="-"){return{property:abbr,prefixes:null}}var i=1,il=abbr.length,ch;var prefixes=[];while(ibackground-color property with gradient first color "+"as fallback for old browsers.");function normalizeSpace(str){return require("utils").trim(str).replace(/\s+/g," ")}function parseLinearGradient(gradient){var direction=defaultLinearDirections[0];var stream=require("stringStream").create(require("utils").trim(gradient));var colorStops=[],ch;while(ch=stream.next()){if(stream.peek()==","){colorStops.push(stream.current());stream.next();stream.eatSpace();stream.start=stream.pos}else{if(ch=="("){stream.skipTo(")")}}}colorStops.push(stream.current());colorStops=_.compact(_.map(colorStops,normalizeSpace));if(!colorStops.length){return null}if(reDeg.test(colorStops[0])||reKeyword.test(colorStops[0])){direction=colorStops.shift()}return{type:"linear",direction:direction,colorStops:_.map(colorStops,parseColorStop)}}function parseColorStop(colorStop){colorStop=normalizeSpace(colorStop);var color=null;colorStop=colorStop.replace(/^(\w+\(.+?\))\s*/,function(str,c){color=c;return""});if(!color){var parts=colorStop.split(" ");color=parts[0];colorStop=parts[1]||""}var result={color:color};if(colorStop){colorStop.replace(/^(\-?[\d\.]+)([a-z%]+)?$/,function(str,pos,unit){result.position=pos;if(~pos.indexOf(".")){unit=""}else{if(!unit){unit="%"}}if(unit){result.unit=unit}})}return result}function resolvePropertyName(name,syntax){var res=require("resources");var prefs=require("preferences");var snippet=res.findSnippet(syntax,name);if(!snippet&&prefs.get("css.fuzzySearch")){snippet=res.fuzzyFindSnippet(syntax,name,parseFloat(prefs.get("css.fuzzySearchMinScore")))}if(snippet){if(!_.isString(snippet)){snippet=snippet.data}return require("cssResolver").splitSnippet(snippet).name}}function fillImpliedPositions(colorStops){var from=0;_.each(colorStops,function(cs,i){if(!i){return cs.position=cs.position||0}if(i==colorStops.length-1&&!("position" in cs)){cs.position=1}if("position" in cs){var start=colorStops[from].position||0;var step=(cs.position-start)/(i-from);_.each(colorStops.slice(from,i),function(cs2,j){cs2.position=start+step*j});from=i}})}function textualDirection(direction){var angle=parseFloat(direction);if(!_.isNaN(angle)){switch(angle%360){case 0:return"left";case 90:return"bottom";case 180:return"right";case 240:return"top"}}return direction}function oldWebkitDirection(direction){direction=textualDirection(direction);if(reDeg.test(direction)){throw"The direction is an angle that can’t be converted."}var v=function(pos){return ~direction.indexOf(pos)?"100%":"0"};return v("right")+" "+v("bottom")+", "+v("left")+" "+v("top")}function getPrefixedNames(name){var prefixes=prefs.getArray("css.gradient.prefixes");var names=prefixes?_.map(prefixes,function(p){return"-"+p+"-"+name}):[];names.push(name);return names}function getPropertiesForGradient(gradient,propertyName){var props=[]; var css=require("cssResolver");if(prefs.get("css.gradient.fallback")&&~propertyName.toLowerCase().indexOf("background")){props.push({name:"background-color",value:"${1:"+gradient.colorStops[0].color+"}"})}_.each(prefs.getArray("css.gradient.prefixes"),function(prefix){var name=css.prefixed(propertyName,prefix);if(prefix=="webkit"&&prefs.get("css.gradient.oldWebkit")){try{props.push({name:name,value:module.oldWebkitLinearGradient(gradient)})}catch(e){}}props.push({name:name,value:module.toString(gradient,prefix)})});return props.sort(function(a,b){return b.name.length-a.name.length})}function pasteGradient(property,gradient,valueRange){var rule=property.parent;var utils=require("utils");var alignVendor=require("preferences").get("css.alignVendor");var sep=property.styleSeparator;var before=property.styleBefore;_.each(rule.getAll(getPrefixedNames(property.name())),function(item){if(item!=property&&/gradient/i.test(item.value())){if(item.styleSeparator.length<%= attr("class", ".") %> -->',"A definition of comment that should be placed after matched "+"element when comment filter is applied. This definition "+"is an ERB-style template passed to _.template() "+"function (see Underscore.js docs for details). In template context, "+"the following properties and functions are availabe:\n"+"
    "+"
  • attr(name, before, after) – a function that outputs"+"specified attribute value concatenated with before "+"and after strings. If attribute doesn't exists, the "+"empty string will be returned.
  • "+"
  • node – current node (instance of AbbreviationNode)
  • "+"
  • name – name of current tag
  • "+"
  • padding – current string padding, can be used "+"for formatting
  • "+"
");prefs.define("filter.commentBefore","","A definition of comment that should be placed before matched "+"element when comment filter is applied. "+"For more info, read description of filter.commentAfter "+"property");prefs.define("filter.commentTrigger","id, class","A comma-separated list of attribute names that should exist in abbreviatoin "+"where comment should be added. If you wish to add comment for "+"every element, set this option to *");function addComments(node,templateBefore,templateAfter){var utils=require("utils");var trigger=prefs.get("filter.commentTrigger");if(trigger!="*"){var shouldAdd=_.find(trigger.split(","),function(name){return !!node.attribute(utils.trim(name))});if(!shouldAdd){return}}var ctx={node:node,name:node.name(),padding:node.parent?node.parent.padding:"",attr:function(name,before,after){var attr=node.attribute(name); if(attr){return(before||"")+attr+(after||"")}return""}};var nodeBefore=utils.normalizeNewline(templateBefore?templateBefore(ctx):"");var nodeAfter=utils.normalizeNewline(templateAfter?templateAfter(ctx):"");node.start=node.start.replace(//,">"+nodeAfter)}function process(tree,before,after){var abbrUtils=require("abbreviationUtils");_.each(tree.children,function(item){if(abbrUtils.isBlock(item)){addComments(item,before,after)}process(item,before,after)});return tree}require("filters").add("c",function(tree){var templateBefore=_.template(prefs.get("filter.commentBefore"));var templateAfter=_.template(prefs.get("filter.commentAfter"));return process(tree,templateBefore,templateAfter)})});emmet.exec(function(require,_){var charMap={"<":"<",">":">","&":"&"};function escapeChars(str){return str.replace(/([<>&])/g,function(str,p1){return charMap[p1]})}require("filters").add("e",function process(tree){_.each(tree.children,function(item){item.start=escapeChars(item.start);item.end=escapeChars(item.end);item.content=escapeChars(item.content);process(item)});return tree})});emmet.exec(function(require,_){var placeholder="%s";var prefs=require("preferences");prefs.define("format.noIndentTags","html","A comma-separated list of tag names that should not get inner indentation.");prefs.define("format.forceIndentationForTags","body","A comma-separated list of tag names that should always get inner indentation.");function getIndentation(node){if(_.include(prefs.getArray("format.noIndentTags")||[],node.name())){return""}return require("resources").getVariable("indentation")}function hasBlockSibling(item){return item.parent&&require("abbreviationUtils").hasBlockChildren(item.parent)}function isVeryFirstChild(item){return item.parent&&!item.parent.parent&&!item.index()}function shouldAddLineBreak(node,profile){var abbrUtils=require("abbreviationUtils");if(profile.tag_nl===true||abbrUtils.isBlock(node)){return true}if(!node.parent||!profile.inline_break){return false}return shouldFormatInline(node.parent,profile)}function shouldBreakChild(node,profile){return node.children.length&&shouldAddLineBreak(node.children[0],profile)}function shouldFormatInline(node,profile){var nodeCount=0;var abbrUtils=require("abbreviationUtils");return !!_.find(node.children,function(child){if(child.isTextNode()||!abbrUtils.isInline(child)){nodeCount=0}else{if(abbrUtils.isInline(child)){nodeCount++}}if(nodeCount>=profile.inline_break){return true}})}function isRoot(item){return !item.parent}function processSnippet(item,profile,level){item.start=item.end="";if(!isVeryFirstChild(item)&&profile.tag_nl!==false&&shouldAddLineBreak(item,profile)){if(isRoot(item.parent)||!require("abbreviationUtils").isInline(item.parent)){item.start=require("utils").getNewline()+item.start}}return item}function shouldBreakInsideInline(node,profile){var abbrUtils=require("abbreviationUtils");var hasBlockElems=_.any(node.children,function(child){if(abbrUtils.isSnippet(child)){return false}return !abbrUtils.isInline(child)});if(!hasBlockElems){return shouldFormatInline(node,profile)}return true}function processTag(item,profile,level){item.start=item.end=placeholder;var utils=require("utils");var abbrUtils=require("abbreviationUtils");var isUnary=abbrUtils.isUnary(item);var nl=utils.getNewline();var indent=getIndentation(item);if(profile.tag_nl!==false){var forceNl=profile.tag_nl===true&&(profile.tag_nl_leaf||item.children.length);if(!forceNl){forceNl=_.include(prefs.getArray("format.forceIndentationForTags")||[],item.name())}if(!item.isTextNode()){if(shouldAddLineBreak(item,profile)){if(!isVeryFirstChild(item)&&(!abbrUtils.isSnippet(item.parent)||item.index())){item.start=nl+item.start}if(abbrUtils.hasBlockChildren(item)||shouldBreakChild(item,profile)||(forceNl&&!isUnary)){item.end=nl+item.end}if(abbrUtils.hasTagsInContent(item)||(forceNl&&!item.children.length&&!isUnary)){item.start+=nl+indent}}else{if(abbrUtils.isInline(item)&&hasBlockSibling(item)&&!isVeryFirstChild(item)){item.start=nl+item.start}else{if(abbrUtils.isInline(item)&&shouldBreakInsideInline(item,profile)){item.end=nl+item.end}}}item.padding=indent}}return item}require("filters").add("_format",function process(tree,profile,level){level=level||0;var abbrUtils=require("abbreviationUtils");_.each(tree.children,function(item){if(abbrUtils.isSnippet(item)){processSnippet(item,profile,level)}else{processTag(item,profile,level)}process(item,profile,level+1)});return tree})});emmet.exec(function(require,_){var childToken="${child}";function transformClassName(className){return require("utils").trim(className).replace(/\s+/g,".")}function makeAttributesString(tag,profile){var attrs="";var otherAttrs=[];var attrQuote=profile.attributeQuote();var cursor=profile.cursor();_.each(tag.attributeList(),function(a){var attrName=profile.attributeName(a.name);switch(attrName.toLowerCase()){case"id":attrs+="#"+(a.value||cursor);break;case"class":attrs+="."+transformClassName(a.value||cursor); break;default:otherAttrs.push(":"+attrName+" => "+attrQuote+(a.value||cursor)+attrQuote)}});if(otherAttrs.length){attrs+="{"+otherAttrs.join(", ")+"}"}return attrs}function hasBlockSibling(item){return item.parent&&item.parent.hasBlockChildren()}function processTag(item,profile,level){if(!item.parent){return item}var abbrUtils=require("abbreviationUtils");var utils=require("utils");var attrs=makeAttributesString(item,profile);var cursor=profile.cursor();var isUnary=abbrUtils.isUnary(item);var selfClosing=profile.self_closing_tag&&isUnary?"/":"";var start="";var tagName="%"+profile.tagName(item.name());if(tagName.toLowerCase()=="%div"&&attrs&&attrs.indexOf("{")==-1){tagName=""}item.end="";start=tagName+attrs+selfClosing+" ";var placeholder="%s";item.start=utils.replaceSubstring(item.start,start,item.start.indexOf(placeholder),placeholder);if(!item.children.length&&!isUnary){item.start+=cursor}return item}require("filters").add("haml",function process(tree,profile,level){level=level||0;var abbrUtils=require("abbreviationUtils");if(!level){tree=require("filters").apply(tree,"_format",profile)}_.each(tree.children,function(item){if(!abbrUtils.isSnippet(item)){processTag(item,profile,level)}process(item,profile,level+1)});return tree})});emmet.exec(function(require,_){function makeAttributesString(node,profile){var attrQuote=profile.attributeQuote();var cursor=profile.cursor();return _.map(node.attributeList(),function(a){var attrName=profile.attributeName(a.name);return" "+attrName+"="+attrQuote+(a.value||cursor)+attrQuote}).join("")}function processTag(item,profile,level){if(!item.parent){return item}var abbrUtils=require("abbreviationUtils");var utils=require("utils");var attrs=makeAttributesString(item,profile);var cursor=profile.cursor();var isUnary=abbrUtils.isUnary(item);var start="";var end="";if(!item.isTextNode()){var tagName=profile.tagName(item.name());if(isUnary){start="<"+tagName+attrs+profile.selfClosing()+">";item.end=""}else{start="<"+tagName+attrs+">";end=""}}var placeholder="%s";item.start=utils.replaceSubstring(item.start,start,item.start.indexOf(placeholder),placeholder);item.end=utils.replaceSubstring(item.end,end,item.end.indexOf(placeholder),placeholder);if(!item.children.length&&!isUnary&&!~item.content.indexOf(cursor)&&!require("tabStops").extract(item.content).tabstops.length){item.start+=cursor}return item}require("filters").add("html",function process(tree,profile,level){level=level||0;var abbrUtils=require("abbreviationUtils");if(!level){tree=require("filters").apply(tree,"_format",profile)}_.each(tree.children,function(item){if(!abbrUtils.isSnippet(item)){processTag(item,profile,level)}process(item,profile,level+1)});return tree})});emmet.exec(function(require,_){var rePad=/^\s+/;var reNl=/[\n\r]/g;require("filters").add("s",function process(tree,profile,level){var abbrUtils=require("abbreviationUtils");_.each(tree.children,function(item){if(!abbrUtils.isSnippet(item)){item.start=item.start.replace(rePad,"");item.end=item.end.replace(rePad,"")}item.start=item.start.replace(reNl,"");item.end=item.end.replace(reNl,"");item.content=item.content.replace(reNl,"");process(item)});return tree})});emmet.exec(function(require,_){require("preferences").define("filter.trimRegexp","[\\s|\\u00a0]*[\\d|#|\\-|*|\\u2022]+\\.?\\s*","Regular expression used to remove list markers (numbers, dashes, "+"bullets, etc.) in t (trim) filter. The trim filter "+"is useful for wrapping with abbreviation lists, pased from other "+"documents (for example, Word documents).");function process(tree,re){_.each(tree.children,function(item){if(item.content){item.content=item.content.replace(re,"")}process(item,re)});return tree}require("filters").add("t",function(tree){var re=new RegExp(require("preferences").get("filter.trimRegexp"));return process(tree,re)})});emmet.exec(function(require,_){var tags={"xsl:variable":1,"xsl:with-param":1};function trimAttribute(node){node.start=node.start.replace(/\s+select\s*=\s*(['"]).*?\1/,"")}require("filters").add("xsl",function process(tree){var abbrUtils=require("abbreviationUtils");_.each(tree.children,function(item){if(!abbrUtils.isSnippet(item)&&(item.name()||"").toLowerCase() in tags&&item.children.length){trimAttribute(item)}process(item)});return tree})});emmet.define("lorem",function(require,_){var langs={en:{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","решила","выйти","большой","мир","грамматики","великий","оксмокс","предупреждал","о","злых","запятых","диких","знаках","вопроса","коварных","точках","запятой","но","текст","дал","сбить","себя","толку","он","собрал","семь","своих","заглавных","букв","подпоясал","инициал","за","пояс","пустился","дорогу","взобравшись","первую","вершину","курсивных","гор","бросил","последний","взгляд","назад","силуэт","своего","родного","города","буквоград","заголовок","деревни","алфавит","подзаголовок","своего","переулка","грустный","реторический","вопрос","скатился","его","щеке","продолжил","свой","путь","дороге","встретил","рукопись","она","предупредила","моей","все","переписывается","несколько","раз","единственное","что","меня","осталось","это","приставка","возвращайся","ты","лучше","свою","безопасную","страну","послушавшись","рукописи","наш","продолжил","свой","путь","вскоре","ему","повстречался","коварный","составитель","рекламных","текстов","напоивший","языком","речью","заманивший","свое","агенство","которое","использовало","снова","снова","своих","проектах","если","переписали","то","живет","там","до","сих","пор"]}}; var prefs=require("preferences");prefs.define("lorem.defaultLang","en");require("abbreviationParser").addPreprocessor(function(tree,options){var re=/^(?:lorem|lipsum)([a-z]{2})?(\d*)$/i,match;tree.findAll(function(node){if(node._name&&(match=node._name.match(re))){var wordCound=match[2]||30;var lang=match[1]||prefs.get("lorem.defaultLang")||"en";node._name="";node.data("forceNameResolving",node.isRepeating()||node.attributeList().length);node.data("pasteOverwrites",true);node.data("paste",function(i,content){return paragraph(lang,wordCound,!i)})}})});function randint(from,to){return Math.round(Math.random()*(to-from)+from)}function sample(arr,count){var len=arr.length;var iterations=Math.min(len,count);var result=[];while(result.length3&&len<=6){totalCommas=randint(0,1)}else{if(len>6&&len<=12){totalCommas=randint(0,2)}else{totalCommas=randint(1,4)}}_.each(_.range(totalCommas),function(ix){if(ix5){words[4]+=","}totalWords+=words.length;result.push(sentence(words,"."))}while(totalWords","!!!4t":'',"!!!4s":'',"!!!xt":'',"!!!xs":'',"!!!xxs":'',"c":"","cc:ie6":"","cc:ie":"","cc:noie":"\n\t${child}|\n"},"abbreviations":{"!":"html:5","a":'',"a:link":'',"a:mail":'',"abbr":'',"acronym":'',"base":'',"basefont":"","br":"
","frame":"","hr":"
","bdo":'',"bdo:r":'',"bdo:l":'',"col":"","link":'',"link:css":'',"link:print":'',"link:favicon":'',"link:touch":'',"link:rss":'',"link:atom":'',"meta":"","meta:utf":'',"meta:win":'',"meta:vp":'',"meta:compat":'',"style":"