diff --git a/dist/index.js b/dist/index.js index b7d9937..516abdc 100644 --- a/dist/index.js +++ b/dist/index.js @@ -38,6 +38,9 @@ }); } var nextTick = window.requestIdleCallback || requestIdleCallbackPolyfill; + function getProto(object) { + return Object.getPrototypeOf(object) || object.__proto__ || null; + } function setProto(object, proto) { if (Object.setPrototypeOf) { Object.setPrototypeOf(object, proto); @@ -843,87 +846,75 @@ 'sort', 'reverse' ]; - function createMutatedArray(handler) { - var mutatedArray = []; - Object.defineProperty(mutatedArray, '__updateId__', { - value: 0, - enumerable: false, - configurable: true, - writable: true - }); - var mutatedArrayProto = Object.create(arrayProto); - setProto(mutatedArray, mutatedArrayProto); - mutatedMethods.forEach(function (method) { - Object.defineProperty(mutatedArrayProto, method, { - value: function () { - var args = []; - for (var _i = 0; _i < arguments.length; _i++) { - args[_i] = arguments[_i]; - } - var observeStart = null; - switch (method) { - case 'push': - case 'unshift': - observeStart = 0; - break; - case 'splice': - observeStart = 2; - break; - } - if (is.number(observeStart)) { - for (var i = observeStart; i < args.length; i++) { - args[i] = observe(args[i]); - } - } - console.log(1); - handler.set(mutatedArray, '__updateId__', mutatedArray.__updateId__++, null); - return arrayProto[method].apply(this, args); - }, - configurable: true, - enumerable: false, - writable: true - }); - }); - return mutatedArray; - } var ProxyPolyfill = (function () { function ProxyPolyfill(target, handler) { - var isArray = is.array(target); - var proxy = isArray ? createMutatedArray(handler) : {}; - var propertyMap = {}; - var getter = function (p) { + var proxy = {}; + function getter(p) { return handler.get(this, p, proxy); - }; - var setter = function (p, v) { + } + function setter(p, v) { handler.set(this, p, v, proxy); - }; - console.log(Object.getOwnPropertyNames(target)); + } + var propertyMap = {}; Object.getOwnPropertyNames(target).forEach(function (prop) { - var oriDescriptor = Object.getOwnPropertyDescriptor(target, prop); - if (oriDescriptor.configurable) { - Object.defineProperty(proxy, prop, { - enumerable: !!oriDescriptor.enumerable, - get: getter.bind(target, prop), - set: setter.bind(target, prop) - }); - } + var descriptor = Object.getOwnPropertyDescriptor(target, prop); + Object.defineProperty(proxy, prop, { + configurable: descriptor.configurable, + enumerable: descriptor.enumerable, + get: getter.bind(target, prop), + set: setter.bind(target, prop) + }); propertyMap[prop] = true; }); - var targetProto = Object.getPrototypeOf ? Object.getPrototypeOf(target) : target.__proto__; - var prototypeOk = false; - if (isArray) { - var mutatedArrayProto = Object.getPrototypeOf ? Object.getPrototypeOf(proxy) : proxy.__proto__; - prototypeOk = setProto(mutatedArrayProto, targetProto); - } - else { - prototypeOk = setProto(proxy, targetProto); + var proxyProto = Object.create(getProto(target)); + setProto(proxy, proxyProto); + var proto = proxyProto; + if (is.array(target)) { + mutatedMethods.forEach(function (method) { + propertyMap[method] = true; + Object.defineProperty(proto, method, { + value: function () { + var args = []; + for (var _i = 0; _i < arguments.length; _i++) { + args[_i] = arguments[_i]; + } + var observeStart = null; + switch (method) { + case 'push': + case 'unshift': + observeStart = 0; + break; + case 'splice': + observeStart = 2; + break; + } + if (is.number(observeStart)) { + for (var i = observeStart; i < args.length; i++) { + args[i] = observe(args[i], Dependency.target); + } + } + return arrayProto[method].apply(this, args); + }, + configurable: true, + enumerable: false, + writable: true + }); + }); } - if (handler.get || !prototypeOk) { - for (var key in target) { - if (!propertyMap[key]) { - Object.defineProperty(proxy, key, { get: getter.bind(target, key) }); + while (proto) { + Object.getOwnPropertyNames(proto).forEach(function (prop) { + if (!propertyMap[prop]) { + var descriptor = Object.getOwnPropertyDescriptor(proto, prop); + Object.defineProperty(proxyProto, prop, { + configurable: descriptor.configurable, + enumerable: descriptor.enumerable, + get: getter.bind(target, prop), + set: setter.bind(target, prop) + }); + propertyMap[prop] = true; } - } + }); + proto = getProto(proto); } return proxy; } diff --git a/dist/kurge.min.js b/dist/kurge.min.js index a25ce8d..f043340 100644 --- a/dist/kurge.min.js +++ b/dist/kurge.min.js @@ -1 +1 @@ -!function(e){"function"==typeof define&&define.amd?define(e):e()}(function(){"use strict";var e,t;e=void 0,t=function(){var t=Object.prototype.toString,v={undefined:function(e){return"[object Undefined]"===t.call(e)},null:function(e){return"[object Null]"===t.call(e)},number:function(e){return"[object Number]"===t.call(e)},string:function(e){return"[object String]"===t.call(e)},boolean:function(e){return"[object Boolean]"===t.call(e)},symbol:function(e){return"[object Symbol]"===t.call(e)},regexp:function(e){return"[object RegExp]"===t.call(e)},object:function(e){return"[object Object]"===t.call(e)},array:function(e){return"[object Array]"===t.call(e)},function:function(e){return"[object Function]"===t.call(e)}},n=Object.prototype.hasOwnProperty;function u(e,t){return n.call(e,t)}var i=window.requestIdleCallback||function(e){var t=Date.now();return requestAnimationFrame(function(){e({timeRemaining:function(){return Math.max(0,50-(Date.now()-t))}})})};function l(e,t){return Object.setPrototypeOf?(Object.setPrototypeOf(e,t),!0):!!e.__proto__&&(e.__proto__=t,!0)}var a="data-kgid",c={key:!0,ref:!0},e=Object.keys(window||{}).filter(function(e){return/^on/.test(e)}),b={};function h(e){return document.querySelector("["+a+'="'+e+'"]')}function w(e){if(""===e)return document.createTextNode("");var t=document.createElement("div");return t.innerHTML=e,t.firstChild}function j(t){var e="";return null==t||("object"==typeof t?e+=Object.keys(t).filter(function(e){return t[e]}).join(" "):Array.isArray(t)?e+=t.join(" "):e+=t.toString()),e.trim()}function O(e){var t="";if(null==e);else if("object"==typeof e)for(var n in e)Object.hasOwnProperty.call(e,n)&&(t+=n.replace(/[A-Z]/g,function(e){return"-"+e.toLowerCase()})+": "+e[n]+"; ");else t+=e.toString();return t.trim()}e.forEach(function(e){return b[e]=!0});var k=new(function(){function e(){this.listeners={}}return e.prototype.on=function(e,t){this.listeners[e]||(this.listeners[e]=[]),this.listeners[e].push(t)},e.prototype.emit=function(e){if(this.listeners[e]){for(var t=0;t'+this.element+""},e.prototype.same=function(e){return v.number(e)||v.string(e)},e.prototype.update=function(e){this.node&&(e=null==e?this.element:""+e,this.element!==e&&(this.element=e,this.node.textContent=this.element))},e.prototype.unmount=function(){this.node&&this.node.remove(),delete this.id,delete this.node,delete this.index,delete this.element},e}(),o=function(){function e(e){this.arr=[],this.compare=e}return Object.defineProperty(e.prototype,"length",{get:function(){return this.arr.length},enumerable:!0,configurable:!0}),e.prototype.push=function(e){this.arr.push(e),this.promote(this.arr.length-1)},e.prototype.shift=function(){var e;return 1",v.string(this.element.ref)&&d.target){var s=d.target.instance;k.on("loaded",function(){return s.refs[i.element.ref]=i.node})}return k.on("loaded",function(){i.node&&i.node.removeAttribute(a)}),o},e.prototype.same=function(e){return v.object(e)&&e.type===this.element.type&&e.key===this.element.key},e.prototype.update=function(e){if(this.node){e=null==e?this.element:e;var t=this.node,n=this.element.props,r=e.props;for(var i in r)if("children"!==i)if("className"===i){var o=j(r.className);t.className!==o&&(t.className=o)}else if("style"===i){var s=O(r.style);t.style.cssText!==s&&(t.style.cssText=s)}else if("value"===i){var a=r.value;t.value!==a&&(t.value=a)}else if(b[i.toLowerCase()]&&v.function(r[i])){var u=r[i];this.node[i.toLowerCase()]!==u&&(this.node[i.toLowerCase()]=u)}else{var l=r[i];t.getAttribute(i)!==l&&t.setAttribute(i,l)}for(var i in n)(v.undefined(r[i])||v.null(r[i]))&&(b[i.toLowerCase()]&&v.function(r[i])?delete this.node[i.toLowerCase()]:t.removeAttribute("className"!==i?i:"class"));var c,h,f,p,d,y,m=this.childInstances,g=e.props.children;1===m.length&&1===g.length&&m[0].same(g[0])?P.enqueueUpdate(m[0],g[0]):(c=this,h=function(e,t){var o={};e.forEach(function(e){return o[e.key]=e});var s=[];t.forEach(function(e,t){var n=null!=e.key?"k_"+e.key:""+t,r=o[n];if(r&&r.same(e))P.enqueueUpdate(r,e),s.push(r);else{var i=L(e);s.push(i)}});for(var n=[],r=[],i=-1,a=e.length,u=0;ua&&r.push({type:"move",inst:f,index:a}),a=Math.min(f.index,a)):(f&&r.push({type:"remove",inst:f}),r.push({type:"insert",inst:h,index:a}))}var p={};for(var d in s.forEach(function(e){p[e.key]&&console.warn("Find duplicate keys in a list. Please offer unique keys for list items or rendering this list may meet some error"),p[e.key]=e}),o)p[d]||(n.push({type:"remove",inst:o[d]}),r.push({type:"remove",inst:o[d]}));return s.forEach(function(e,t){return e.index=t}),e.length=0,e.push.apply(e,s),n.length'+this.element+""},e.prototype.same=function(e){return v.number(e)||v.string(e)},e.prototype.update=function(e){this.node&&(e=null==e?this.element:""+e,this.element!==e&&(this.element=e,this.node.textContent=this.element))},e.prototype.unmount=function(){this.node&&this.node.remove(),delete this.id,delete this.node,delete this.index,delete this.element},e}(),o=function(){function e(e){this.arr=[],this.compare=e}return Object.defineProperty(e.prototype,"length",{get:function(){return this.arr.length},enumerable:!0,configurable:!0}),e.prototype.push=function(e){this.arr.push(e),this.promote(this.arr.length-1)},e.prototype.shift=function(){var e;return 1",v.string(this.element.ref)&&d.target){var s=d.target.instance;O.on("loaded",function(){return s.refs[i.element.ref]=i.node})}return O.on("loaded",function(){i.node&&i.node.removeAttribute(a)}),o},e.prototype.same=function(e){return v.object(e)&&e.type===this.element.type&&e.key===this.element.key},e.prototype.update=function(e){if(this.node){e=null==e?this.element:e;var t=this.node,n=this.element.props,r=e.props;for(var i in r)if("children"!==i)if("className"===i){var o=j(r.className);t.className!==o&&(t.className=o)}else if("style"===i){var s=k(r.style);t.style.cssText!==s&&(t.style.cssText=s)}else if("value"===i){var a=r.value;t.value!==a&&(t.value=a)}else if(b[i.toLowerCase()]&&v.function(r[i])){var u=r[i];this.node[i.toLowerCase()]!==u&&(this.node[i.toLowerCase()]=u)}else{var c=r[i];t.getAttribute(i)!==c&&t.setAttribute(i,c)}for(var i in n)(v.undefined(r[i])||v.null(r[i]))&&(b[i.toLowerCase()]&&v.function(r[i])?delete this.node[i.toLowerCase()]:t.removeAttribute("className"!==i?i:"class"));var l,h,f,p,d,y,m=this.childInstances,g=e.props.children;1===m.length&&1===g.length&&m[0].same(g[0])?E.enqueueUpdate(m[0],g[0]):(l=this,h=function(e,t){var o={};e.forEach(function(e){return o[e.key]=e});var s=[];t.forEach(function(e,t){var n=null!=e.key?"k_"+e.key:""+t,r=o[n];if(r&&r.same(e))E.enqueueUpdate(r,e),s.push(r);else{var i=S(e);s.push(i)}});for(var n=[],r=[],i=-1,a=e.length,u=0;ua&&r.push({type:"move",inst:f,index:a}),a=Math.min(f.index,a)):(f&&r.push({type:"remove",inst:f}),r.push({type:"insert",inst:h,index:a}))}var p={};for(var d in s.forEach(function(e){p[e.key]&&console.warn("Find duplicate keys in a list. Please offer unique keys for list items or rendering this list may meet some error"),p[e.key]=e}),o)p[d]||(n.push({type:"remove",inst:o[d]}),r.push({type:"remove",inst:o[d]}));return s.forEach(function(e,t){return e.index=t}),e.length=0,e.push.apply(e,s),n.length new VConsole() - \ No newline at end of file + \ No newline at end of file diff --git a/docs/site.js b/docs/site.js index db342fe..3d7a553 100644 --- a/docs/site.js +++ b/docs/site.js @@ -1,7 +1,7 @@ parcelRequire=function(e,r,n,t){var i="function"==typeof parcelRequire&&parcelRequire,o="function"==typeof require&&require;function u(n,t){if(!r[n]){if(!e[n]){var f="function"==typeof parcelRequire&&parcelRequire;if(!t&&f)return f(n,!0);if(i)return i(n,!0);if(o&&"string"==typeof n)return o(n);var c=new Error("Cannot find module '"+n+"'");throw c.code="MODULE_NOT_FOUND",c}p.resolve=function(r){return e[n][1][r]||r},p.cache={};var l=r[n]=new u.Module(n);e[n][0].call(l.exports,p,l,l.exports,this)}return r[n].exports;function p(e){return u(p.resolve(e))}}u.isParcelRequire=!0,u.Module=function(e){this.id=e,this.bundle=u,this.exports={}},u.modules=e,u.cache=r,u.parent=i,u.register=function(r,n){e[r]=[function(e,r){r.exports=n},{}]};for(var f=0;f'+this.element+""},e.prototype.same=function(e){return t.number(e)||t.string(e)},e.prototype.update=function(e){this.node&&(e=null==e?this.element:""+e,this.element!==e&&(this.element=e,this.node.textContent=this.element))},e.prototype.unmount=function(){this.node&&this.node.remove(),delete this.id,delete this.node,delete this.index,delete this.element},e}(),y=function(){function e(e){this.arr=[],this.compare=e}return Object.defineProperty(e.prototype,"length",{get:function(){return this.arr.length},enumerable:!0,configurable:!0}),e.prototype.push=function(e){this.arr.push(e),this.promote(this.arr.length-1)},e.prototype.shift=function(){var e;return this.arr.length>1?(e=this.arr[0],this.arr[0]=this.arr.pop(),this.heapify(0)):e=this.arr.pop(),e},e.prototype.heapify=function(e){var t,n=this.left(e),r=this.right(e),i=e;this.arr[n]&&this.compare(this.arr[n],this.arr[e])&&(i=n),this.arr[r]&&this.compare(this.arr[r],this.arr[e])&&(i=r),i!==e&&(t=[this.arr[i],this.arr[e]],this.arr[e]=t[0],this.arr[i]=t[1],this.heapify(i))},e.prototype.promote=function(e){for(var t,n=this.parent(e);this.arr[n]&&this.compare(this.arr[n],this.arr[e]);)t=[this.arr[n],this.arr[e]],this.arr[e]=t[0],this.arr[n]=t[1],e=n,n=this.parent(e)},e.prototype.parent=function(e){return Math.floor((e+1)/2)-1},e.prototype.left=function(e){return 2*(e+1)-1},e.prototype.right=function(e){return 2*(e+1)},e}(),g=0,v=function(){function e(e){this.id=g++,this.depIds={},this.newDepIds={},this.list=[],this.newList=[],this.instance=e}return e.prototype.depend=function(e){var t=e.id;this.newDepIds[t]||(this.newDepIds[t]=!0,this.newList.push(e),this.depIds[t]||e.subscribe(this))},e.prototype.clean=function(){for(var e,t,n=this.list.length;n--;){var r=this.list[n];this.newDepIds[r.id]||r.unsubscribe(this)}e=[this.newDepIds,this.depIds],this.depIds=e[0],this.newDepIds=e[1],this.newDepIds={},t=[this.newList,this.list],this.list=t[0],this.newList=t[1],this.newList.length=0},e.prototype.update=function(){S.enqueueUpdate(this.instance)},e}(),b=0,w=function(){function e(e){void 0===e&&(e=null),this.id=b++,this.list=[],this.specificWatcher=e}return e.prototype.subscribe=function(e){this.list.push(e)},e.prototype.unsubscribe=function(e){!function(e,t){if(e.length){var n=e.indexOf(t);if(n>-1)e.splice(n,1)}}(this.list,e)},e.prototype.collect=function(){e.target&&(!this.specificWatcher||this.specificWatcher&&this.specificWatcher===e.target)&&e.target.depend(this)},e.prototype.notify=function(){for(var e=0;e0&&e.dirtyInstanceSet.length;)r();e.dirtyInstanceSet.length?o(t):e.isBatchUpdating=!1,d.emit("updated")})},e}());var O=function(){function e(e){this.node=null,this.element=e}return Object.defineProperty(e.prototype,"key",{get:function(){return this.element&&null!=this.element.key?"k_"+this.element.key:null!=this.index?""+this.index:null},enumerable:!0,configurable:!0}),e.prototype.mount=function(e){var n=this;this.id=e,d.on("loaded",function(){return n.node=c(n.id)});var r="<"+this.element.type+" "+s+'="'+e+'" ';null!=this.element.key&&(r+='key="'+this.element.key+'" ');var i=this.element.props,o=function(e){if("children"===e)return"continue";"className"===e?r+='class="'+f(i.className)+'" ':"style"===e?r+='style="'+p(i.style)+'" ':l[e.toLowerCase()]&&t.function(i[e])?d.on("loaded",function(){return n.node[e.toLowerCase()]=i[e]}):r+=e+'="'+i[e]+'" '};for(var a in i)o(a);if(r+=">",this.childInstances=[],this.element.props.children.forEach(function(t,i){var o=C(t);o.index=i,r+=o.mount(e+":"+o.key),n.childInstances.push(o)}),r+="",t.string(this.element.ref)&&w.target){var u=w.target.instance;d.on("loaded",function(){return u.refs[n.element.ref]=n.node})}return d.on("loaded",function(){n.node&&n.node.removeAttribute(s)}),r},e.prototype.same=function(e){return t.object(e)&&e.type===this.element.type&&e.key===this.element.key},e.prototype.update=function(e){if(this.node){e=null==e?this.element:e;var n=this.node,r=this.element.props,i=e.props;for(var o in i)if("children"!==o)if("className"===o){var s=f(i.className);n.className!==s&&(n.className=s)}else if("style"===o){var a=p(i.style);n.style.cssText!==a&&(n.style.cssText=a)}else if("value"===o){var u=i.value;n.value!==u&&(n.value=u)}else if(l[o.toLowerCase()]&&t.function(i[o])){var c=i[o];this.node[o.toLowerCase()]!==c&&(this.node[o.toLowerCase()]=c)}else{var m=i[o];n.getAttribute(o)!==m&&n.setAttribute(o,m)}for(var o in r)(t.undefined(i[o])||t.null(i[o]))&&(l[o.toLowerCase()]&&t.function(i[o])?delete this.node[o.toLowerCase()]:n.removeAttribute("className"!==o?o:"class"));var y,g,v,b,w,k,x=this.childInstances,j=e.props.children;1===x.length&&1===j.length&&x[0].same(j[0])?S.enqueueUpdate(x[0],j[0]):(y=this,g=function(e,t){var n={};e.forEach(function(e){return n[e.key]=e});var r=[];t.forEach(function(e,t){var i=null!=e.key?"k_"+e.key:""+t,o=n[i];if(o&&o.same(e))S.enqueueUpdate(o,e),r.push(o);else{var s=C(e);r.push(s)}});for(var i=[],o=[],s=-1,a=e.length,u=0;ua&&o.push({type:"move",inst:f,index:a}),a=Math.min(f.index,a)):(f&&o.push({type:"remove",inst:f}),o.push({type:"insert",inst:h,index:a}))}var p={};for(var d in r.forEach(function(e){p[e.key]&&console.warn("Find duplicate keys in a list. Please offer unique keys for list items or rendering this list may meet some error"),p[e.key]=e}),n)p[d]||(i.push({type:"remove",inst:n[d]}),o.push({type:"remove",inst:n[d]}));return r.forEach(function(e,t){return e.index=t}),e.length=0,e.push.apply(e,r),i.length'+this.element+""},e.prototype.same=function(e){return t.number(e)||t.string(e)},e.prototype.update=function(e){this.node&&(e=null==e?this.element:""+e,this.element!==e&&(this.element=e,this.node.textContent=this.element))},e.prototype.unmount=function(){this.node&&this.node.remove(),delete this.id,delete this.node,delete this.index,delete this.element},e}(),g=function(){function e(e){this.arr=[],this.compare=e}return Object.defineProperty(e.prototype,"length",{get:function(){return this.arr.length},enumerable:!0,configurable:!0}),e.prototype.push=function(e){this.arr.push(e),this.promote(this.arr.length-1)},e.prototype.shift=function(){var e;return this.arr.length>1?(e=this.arr[0],this.arr[0]=this.arr.pop(),this.heapify(0)):e=this.arr.pop(),e},e.prototype.heapify=function(e){var t,n=this.left(e),r=this.right(e),i=e;this.arr[n]&&this.compare(this.arr[n],this.arr[e])&&(i=n),this.arr[r]&&this.compare(this.arr[r],this.arr[e])&&(i=r),i!==e&&(t=[this.arr[i],this.arr[e]],this.arr[e]=t[0],this.arr[i]=t[1],this.heapify(i))},e.prototype.promote=function(e){for(var t,n=this.parent(e);this.arr[n]&&this.compare(this.arr[n],this.arr[e]);)t=[this.arr[n],this.arr[e]],this.arr[e]=t[0],this.arr[n]=t[1],e=n,n=this.parent(e)},e.prototype.parent=function(e){return Math.floor((e+1)/2)-1},e.prototype.left=function(e){return 2*(e+1)-1},e.prototype.right=function(e){return 2*(e+1)},e}(),v=0,b=function(){function e(e){this.id=v++,this.depIds={},this.newDepIds={},this.list=[],this.newList=[],this.instance=e}return e.prototype.depend=function(e){var t=e.id;this.newDepIds[t]||(this.newDepIds[t]=!0,this.newList.push(e),this.depIds[t]||e.subscribe(this))},e.prototype.clean=function(){for(var e,t,n=this.list.length;n--;){var r=this.list[n];this.newDepIds[r.id]||r.unsubscribe(this)}e=[this.newDepIds,this.depIds],this.depIds=e[0],this.newDepIds=e[1],this.newDepIds={},t=[this.newList,this.list],this.list=t[0],this.newList=t[1],this.newList.length=0},e.prototype.update=function(){P.enqueueUpdate(this.instance)},e}(),w=0,j=function(){function e(e){void 0===e&&(e=null),this.id=w++,this.list=[],this.specificWatcher=e}return e.prototype.subscribe=function(e){this.list.push(e)},e.prototype.unsubscribe=function(e){!function(e,t){if(e.length){var n=e.indexOf(t);if(n>-1)e.splice(n,1)}}(this.list,e)},e.prototype.collect=function(){e.target&&(!this.specificWatcher||this.specificWatcher&&this.specificWatcher===e.target)&&e.target.depend(this)},e.prototype.notify=function(){for(var e=0;e0&&e.dirtyInstanceSet.length;)r();e.dirtyInstanceSet.length?o(t):e.isBatchUpdating=!1,y.emit("updated")})},e}());var S=function(){function e(e){this.node=null,this.element=e}return Object.defineProperty(e.prototype,"key",{get:function(){return this.element&&null!=this.element.key?"k_"+this.element.key:null!=this.index?""+this.index:null},enumerable:!0,configurable:!0}),e.prototype.mount=function(e){var n=this;this.id=e,y.on("loaded",function(){return n.node=h(n.id)});var r="<"+this.element.type+" "+a+'="'+e+'" ';null!=this.element.key&&(r+='key="'+this.element.key+'" ');var i=this.element.props,o=function(e){if("children"===e)return"continue";"className"===e?r+='class="'+p(i.className)+'" ':"style"===e?r+='style="'+d(i.style)+'" ':l[e.toLowerCase()]&&t.function(i[e])?y.on("loaded",function(){return n.node[e.toLowerCase()]=i[e]}):r+=e+'="'+i[e]+'" '};for(var s in i)o(s);if(r+=">",this.childInstances=[],this.element.props.children.forEach(function(t,i){var o=_(t);o.index=i,r+=o.mount(e+":"+o.key),n.childInstances.push(o)}),r+="",t.string(this.element.ref)&&j.target){var u=j.target.instance;y.on("loaded",function(){return u.refs[n.element.ref]=n.node})}return y.on("loaded",function(){n.node&&n.node.removeAttribute(a)}),r},e.prototype.same=function(e){return t.object(e)&&e.type===this.element.type&&e.key===this.element.key},e.prototype.update=function(e){if(this.node){e=null==e?this.element:e;var n=this.node,r=this.element.props,i=e.props;for(var o in i)if("children"!==o)if("className"===o){var s=p(i.className);n.className!==s&&(n.className=s)}else if("style"===o){var a=d(i.style);n.style.cssText!==a&&(n.style.cssText=a)}else if("value"===o){var u=i.value;n.value!==u&&(n.value=u)}else if(l[o.toLowerCase()]&&t.function(i[o])){var c=i[o];this.node[o.toLowerCase()]!==c&&(this.node[o.toLowerCase()]=c)}else{var h=i[o];n.getAttribute(o)!==h&&n.setAttribute(o,h)}for(var o in r)(t.undefined(i[o])||t.null(i[o]))&&(l[o.toLowerCase()]&&t.function(i[o])?delete this.node[o.toLowerCase()]:n.removeAttribute("className"!==o?o:"class"));var m,g,v,b,w,j,k=this.childInstances,O=e.props.children;1===k.length&&1===O.length&&k[0].same(O[0])?P.enqueueUpdate(k[0],O[0]):(m=this,g=function(e,t){var n={};e.forEach(function(e){return n[e.key]=e});var r=[];t.forEach(function(e,t){var i=null!=e.key?"k_"+e.key:""+t,o=n[i];if(o&&o.same(e))P.enqueueUpdate(o,e),r.push(o);else{var s=_(e);r.push(s)}});for(var i=[],o=[],s=-1,a=e.length,u=0;ua&&o.push({type:"move",inst:f,index:a}),a=Math.min(f.index,a)):(f&&o.push({type:"remove",inst:f}),o.push({type:"insert",inst:h,index:a}))}var p={};for(var d in r.forEach(function(e){p[e.key]&&console.warn("Find duplicate keys in a list. Please offer unique keys for list items or rendering this list may meet some error"),p[e.key]=e}),n)p[d]||(i.push({type:"remove",inst:n[d]}),o.push({type:"remove",inst:n[d]}));return r.forEach(function(e,t){return e.index=t}),e.length=0,e.push.apply(e,r),i.length -1) {\r\n return arr.splice(index, 1);\r\n }\r\n }\r\n }\r\n function requestIdleCallbackPolyfill(callback) {\r\n var start = Date.now();\r\n return requestAnimationFrame(function () {\r\n callback({\r\n timeRemaining: function () { return Math.max(0, 50 - (Date.now() - start)); }\r\n });\r\n });\r\n }\r\n var nextTick = window.requestIdleCallback || requestIdleCallbackPolyfill;\n\n var DATA_ID = 'data-kgid';\r\n var RESERVED_PROPS = { key: true, ref: true };\r\n var eventHandlers = Object.keys(window || {}).filter(function (key) { return /^on/.test(key); });\r\n var SUPPORTED_LISTENERS = {};\r\n eventHandlers.forEach(function (listener) { return SUPPORTED_LISTENERS[listener] = true; });\n\n function getNode(id) {\r\n return document.querySelector(\"[\" + DATA_ID + \"=\\\"\" + id + \"\\\"]\");\r\n }\r\n function createNode(markup) {\r\n if (markup === '') {\r\n return document.createTextNode('');\r\n }\r\n else {\r\n var node = document.createElement('div');\r\n node.innerHTML = markup;\r\n return node.firstChild;\r\n }\r\n }\r\n function getClassString(className) {\r\n var markup = '';\r\n if (className == null) ;\r\n else if (typeof className === 'object') {\r\n markup += Object.keys(className).filter(function (cls) { return className[cls]; }).join(' ');\r\n }\r\n else if (Array.isArray(className)) {\r\n markup += className.join(' ');\r\n }\r\n else {\r\n markup += className.toString();\r\n }\r\n return markup.trim();\r\n }\r\n function getStyleString(style) {\r\n var markup = '';\r\n if (style == null) ;\r\n else if (typeof style === 'object') {\r\n for (var key in style) {\r\n if (Object.hasOwnProperty.call(style, key)) {\r\n markup += key.replace(/[A-Z]/g, function (letter) { return \"-\" + letter.toLowerCase(); }) + (\": \" + style[key] + \"; \");\r\n }\r\n }\r\n }\r\n else {\r\n markup += style.toString();\r\n }\r\n return markup.trim();\r\n }\n\n var Emitter = (function () {\r\n function Emitter() {\r\n this.listeners = {};\r\n }\r\n Emitter.prototype.on = function (event, callback) {\r\n if (!this.listeners[event]) {\r\n this.listeners[event] = [];\r\n }\r\n this.listeners[event].push(callback);\r\n };\r\n Emitter.prototype.emit = function (event) {\r\n if (this.listeners[event]) {\r\n for (var i = 0; i < this.listeners[event].length; i++) {\r\n this.listeners[event][i]();\r\n }\r\n this.clean(event);\r\n }\r\n };\r\n Emitter.prototype.clean = function (event) {\r\n delete this.listeners[event];\r\n };\r\n return Emitter;\r\n }());\r\n var emitter = new Emitter();\n\n var TextInstance = (function () {\r\n function TextInstance(element) {\r\n this.node = null;\r\n this.element = '' + element;\r\n }\r\n Object.defineProperty(TextInstance.prototype, \"key\", {\r\n get: function () {\r\n return this.index != null ? '' + this.index : null;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n TextInstance.prototype.mount = function (id) {\r\n var _this = this;\r\n this.id = id;\r\n emitter.on('loaded', function () {\r\n var wrapper = getNode(_this.id);\r\n if (wrapper) {\r\n _this.node = wrapper.firstChild;\r\n if (!_this.node) {\r\n _this.node = createNode('');\r\n }\r\n wrapper.parentNode.insertBefore(_this.node, wrapper);\r\n wrapper.remove();\r\n }\r\n });\r\n return \"\" + this.element + \"\";\r\n };\r\n TextInstance.prototype.same = function (nextElement) {\r\n return is.number(nextElement) || is.string(nextElement);\r\n };\r\n TextInstance.prototype.update = function (nextElement) {\r\n if (!this.node)\r\n return;\r\n nextElement = nextElement == null ? this.element : '' + nextElement;\r\n if (this.element !== nextElement) {\r\n this.element = nextElement;\r\n this.node.textContent = this.element;\r\n }\r\n };\r\n TextInstance.prototype.unmount = function () {\r\n if (this.node)\r\n this.node.remove();\r\n delete this.id;\r\n delete this.node;\r\n delete this.index;\r\n delete this.element;\r\n };\r\n return TextInstance;\r\n }());\n\n var Heap = (function () {\r\n function Heap(compare) {\r\n this.arr = [];\r\n this.compare = compare;\r\n }\r\n Object.defineProperty(Heap.prototype, \"length\", {\r\n get: function () {\r\n return this.arr.length;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Heap.prototype.push = function (item) {\r\n this.arr.push(item);\r\n this.promote(this.arr.length - 1);\r\n };\r\n Heap.prototype.shift = function () {\r\n var m;\r\n if (this.arr.length > 1) {\r\n m = this.arr[0];\r\n this.arr[0] = this.arr.pop();\r\n this.heapify(0);\r\n }\r\n else {\r\n m = this.arr.pop();\r\n }\r\n return m;\r\n };\r\n Heap.prototype.heapify = function (i) {\r\n var _a;\r\n var l = this.left(i);\r\n var r = this.right(i);\r\n var m = i;\r\n if (this.arr[l] && this.compare(this.arr[l], this.arr[i])) {\r\n m = l;\r\n }\r\n if (this.arr[r] && this.compare(this.arr[r], this.arr[i])) {\r\n m = r;\r\n }\r\n if (m !== i) {\r\n _a = [this.arr[m], this.arr[i]], this.arr[i] = _a[0], this.arr[m] = _a[1];\r\n this.heapify(m);\r\n }\r\n };\r\n Heap.prototype.promote = function (i) {\r\n var _a;\r\n var p = this.parent(i);\r\n while (this.arr[p] && this.compare(this.arr[p], this.arr[i])) {\r\n _a = [this.arr[p], this.arr[i]], this.arr[i] = _a[0], this.arr[p] = _a[1];\r\n i = p;\r\n p = this.parent(i);\r\n }\r\n };\r\n Heap.prototype.parent = function (i) {\r\n return Math.floor((i + 1) / 2) - 1;\r\n };\r\n Heap.prototype.left = function (i) {\r\n return 2 * (i + 1) - 1;\r\n };\r\n Heap.prototype.right = function (i) {\r\n return 2 * (i + 1);\r\n };\r\n return Heap;\r\n }());\n\n var wid = 0;\r\n var Watcher = (function () {\r\n function Watcher(instance) {\r\n this.id = wid++;\r\n this.depIds = {};\r\n this.newDepIds = {};\r\n this.list = [];\r\n this.newList = [];\r\n this.instance = instance;\r\n }\r\n Watcher.prototype.depend = function (dep) {\r\n var id = dep.id;\r\n if (!this.newDepIds[id]) {\r\n this.newDepIds[id] = true;\r\n this.newList.push(dep);\r\n if (!this.depIds[id]) {\r\n dep.subscribe(this);\r\n }\r\n }\r\n };\r\n Watcher.prototype.clean = function () {\r\n var _a, _b;\r\n var i = this.list.length;\r\n while (i--) {\r\n var dep = this.list[i];\r\n if (!this.newDepIds[dep.id]) {\r\n dep.unsubscribe(this);\r\n }\r\n }\r\n _a = [this.newDepIds, this.depIds], this.depIds = _a[0], this.newDepIds = _a[1];\r\n this.newDepIds = {};\r\n _b = [this.newList, this.list], this.list = _b[0], this.newList = _b[1];\r\n this.newList.length = 0;\r\n };\r\n Watcher.prototype.update = function () {\r\n reconciler.enqueueUpdate(this.instance);\r\n };\r\n return Watcher;\r\n }());\n\n var uid = 0;\r\n var Dependency = (function () {\r\n function Dependency(specificWatcher) {\r\n if (specificWatcher === void 0) { specificWatcher = null; }\r\n this.id = uid++;\r\n this.list = [];\r\n this.specificWatcher = specificWatcher;\r\n }\r\n Dependency.prototype.subscribe = function (watcher) {\r\n this.list.push(watcher);\r\n };\r\n Dependency.prototype.unsubscribe = function (watcher) {\r\n delArrItem(this.list, watcher);\r\n };\r\n Dependency.prototype.collect = function () {\r\n if (Dependency.target &&\r\n (!this.specificWatcher ||\r\n this.specificWatcher && this.specificWatcher === Dependency.target)) {\r\n Dependency.target.depend(this);\r\n }\r\n };\r\n Dependency.prototype.notify = function () {\r\n for (var i = 0; i < this.list.length; i++) {\r\n this.list[i].update();\r\n }\r\n };\r\n Dependency.target = null;\r\n return Dependency;\r\n }());\r\n var targetStack = [];\r\n function pushTarget(target) {\r\n targetStack.push(target);\r\n Dependency.target = target;\r\n }\r\n function popTarget() {\r\n targetStack.pop();\r\n Dependency.target = targetStack[targetStack.length - 1];\r\n }\n\n var ComponentInstance = (function () {\r\n function ComponentInstance(element) {\r\n this.refs = {};\r\n this.watcher = new Watcher(this);\r\n this.guards = [];\r\n this.guardLeft = 0;\r\n this.states = [];\r\n this.stateId = 0;\r\n this.element = element;\r\n this.component = this.element.type;\r\n }\r\n Object.defineProperty(ComponentInstance.prototype, \"key\", {\r\n get: function () {\r\n return this.element && this.element.key != null\r\n ? 'k_' + this.element.key\r\n : this.index != null ? '' + this.index : null;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(ComponentInstance.prototype, \"node\", {\r\n get: function () {\r\n return this.renderedInstance ? this.renderedInstance.node : null;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(ComponentInstance.prototype, \"currentState\", {\r\n get: function () {\r\n return this.states[this.stateId++];\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(ComponentInstance.prototype, \"prevGuard\", {\r\n get: function () {\r\n if (this.guardLeft) {\r\n this.guardLeft--;\r\n return this.guards.shift();\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n ComponentInstance.prototype.mount = function (id) {\r\n pushTarget(this.watcher);\r\n this.renderedInstance = instantiate(this.component(this.element.props));\r\n var markup = this.renderedInstance.mount(this.id = id);\r\n popTarget();\r\n this.watcher.clean();\r\n return markup;\r\n };\r\n ComponentInstance.prototype.same = function (nextElement) {\r\n return is.object(nextElement)\r\n && nextElement.type === this.element.type\r\n && nextElement.key === this.element.key;\r\n };\r\n ComponentInstance.prototype.update = function (nextElement) {\r\n if (!this.node)\r\n return;\r\n nextElement = nextElement == null ? this.element : nextElement;\r\n var shouldUpdate = true;\r\n if (is.function(this.component.shouldUpdate)) {\r\n shouldUpdate = this.component.shouldUpdate(this.element.props, nextElement.props);\r\n }\r\n if (shouldUpdate) {\r\n this.stateId = 0;\r\n this.guardLeft = this.guards.length;\r\n pushTarget(this.watcher);\r\n reconciler.enqueueUpdate(this.renderedInstance, this.component(nextElement.props));\r\n popTarget();\r\n this.watcher.clean();\r\n }\r\n this.element = nextElement;\r\n };\r\n ComponentInstance.prototype.unmount = function () {\r\n emitter.emit(\"unmount:\" + this.id);\r\n this.renderedInstance.unmount();\r\n this.watcher.clean();\r\n delete this.id;\r\n delete this.index;\r\n delete this.guards;\r\n delete this.guardLeft;\r\n delete this.states;\r\n delete this.stateId;\r\n delete this.refs;\r\n delete this.watcher;\r\n delete this.element;\r\n delete this.component;\r\n delete this.renderedInstance;\r\n };\r\n return ComponentInstance;\r\n }());\n\n var DirtyInstanceSet = (function () {\r\n function DirtyInstanceSet() {\r\n this.map = {};\r\n this.arr = new Heap(function (contrast, self) {\r\n return contrast.split(':').length < self.split(':').length;\r\n });\r\n }\r\n Object.defineProperty(DirtyInstanceSet.prototype, \"length\", {\r\n get: function () {\r\n return this.arr.length;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n DirtyInstanceSet.prototype.push = function (dirtyInstance) {\r\n var id = dirtyInstance.instance.id;\r\n if (!this.map[id]) {\r\n this.arr.push(id);\r\n }\r\n this.map[id] = dirtyInstance;\r\n };\r\n DirtyInstanceSet.prototype.shift = function () {\r\n var id = this.arr.shift();\r\n var dirtyInstance = this.map[id];\r\n delete this.map[id];\r\n return dirtyInstance;\r\n };\r\n return DirtyInstanceSet;\r\n }());\r\n var Reconciler = (function () {\r\n function Reconciler() {\r\n this.dirtyInstanceSet = new DirtyInstanceSet();\r\n this.isBatchUpdating = false;\r\n }\r\n Reconciler.prototype.enqueueUpdate = function (instance, element) {\r\n if (element === void 0) { element = null; }\r\n this.dirtyInstanceSet.push({ instance: instance, element: element });\r\n if (!this.isBatchUpdating) {\r\n this.runBatchUpdate();\r\n }\r\n };\r\n Reconciler.prototype.runBatchUpdate = function () {\r\n var _this = this;\r\n this.isBatchUpdating = true;\r\n var batchUpdate = function (deadline) {\r\n var _loop_1 = function () {\r\n var _a = _this.dirtyInstanceSet.shift(), instance = _a.instance, element = _a.element;\r\n if (instance.id) {\r\n instance.update(element);\r\n if (instance instanceof ComponentInstance) {\r\n emitter.on('updated', function () {\r\n if (instance.node) {\r\n emitter.emit(\"updated:\" + instance.id);\r\n }\r\n });\r\n }\r\n }\r\n };\r\n while (deadline.timeRemaining() > 0 && _this.dirtyInstanceSet.length) {\r\n _loop_1();\r\n }\r\n if (_this.dirtyInstanceSet.length) {\r\n nextTick(batchUpdate);\r\n }\r\n else {\r\n _this.isBatchUpdating = false;\r\n }\r\n emitter.emit('updated');\r\n };\r\n nextTick(batchUpdate);\r\n };\r\n return Reconciler;\r\n }());\r\n var reconciler = new Reconciler();\n\n function diff(prevInstances, nextChildren) {\r\n var prevInstanceMap = {};\r\n prevInstances.forEach(function (inst) { return prevInstanceMap[inst.key] = inst; });\r\n var nextInstances = [];\r\n nextChildren.forEach(function (nextChild, index) {\r\n var key = nextChild.key != null\r\n ? 'k_' + nextChild.key\r\n : '' + index;\r\n var prevInstance = prevInstanceMap[key];\r\n if (prevInstance && prevInstance.same(nextChild)) {\r\n reconciler.enqueueUpdate(prevInstance, nextChild);\r\n nextInstances.push(prevInstance);\r\n }\r\n else {\r\n var nextInstance = instantiate(nextChild);\r\n nextInstances.push(nextInstance);\r\n }\r\n });\r\n var forwardOps = [];\r\n var backwardOps = [];\r\n var lastForwardIndex = -1;\r\n var lastBackwardIndex = prevInstances.length;\r\n for (var index = 0; index < nextInstances.length; ++index) {\r\n var forwardNextInstance = nextInstances[index];\r\n var forwardPrevInstance = prevInstanceMap[forwardNextInstance.key];\r\n if (forwardPrevInstance === forwardNextInstance) {\r\n if (forwardPrevInstance.index < lastForwardIndex) {\r\n forwardOps.push({\r\n type: 'move',\r\n inst: forwardPrevInstance,\r\n index: lastForwardIndex\r\n });\r\n }\r\n lastForwardIndex = Math.max(forwardPrevInstance.index, lastForwardIndex);\r\n }\r\n else {\r\n if (forwardPrevInstance) {\r\n forwardOps.push({\r\n type: 'remove',\r\n inst: forwardPrevInstance\r\n });\r\n }\r\n forwardOps.push({\r\n type: 'insert',\r\n inst: forwardNextInstance,\r\n index: lastForwardIndex\r\n });\r\n }\r\n var backwardNextInstance = nextInstances[nextInstances.length - index - 1];\r\n var backwardPrevInstance = prevInstanceMap[backwardNextInstance.key];\r\n if (backwardPrevInstance === backwardNextInstance) {\r\n if (backwardPrevInstance.index > lastBackwardIndex) {\r\n backwardOps.push({\r\n type: 'move',\r\n inst: backwardPrevInstance,\r\n index: lastBackwardIndex\r\n });\r\n }\r\n lastBackwardIndex = Math.min(backwardPrevInstance.index, lastBackwardIndex);\r\n }\r\n else {\r\n if (backwardPrevInstance) {\r\n backwardOps.push({\r\n type: 'remove',\r\n inst: backwardPrevInstance\r\n });\r\n }\r\n backwardOps.push({\r\n type: 'insert',\r\n inst: backwardNextInstance,\r\n index: lastBackwardIndex\r\n });\r\n }\r\n }\r\n var nextInstanceMap = {};\r\n nextInstances.forEach(function (inst) {\r\n if (nextInstanceMap[inst.key]) {\r\n console.warn('Find duplicate keys in a list. '\r\n + 'Please offer unique keys for list items '\r\n + 'or rendering this list may meet some error');\r\n }\r\n nextInstanceMap[inst.key] = inst;\r\n });\r\n for (var key in prevInstanceMap) {\r\n if (!nextInstanceMap[key]) {\r\n forwardOps.push({\r\n type: 'remove',\r\n inst: prevInstanceMap[key]\r\n });\r\n backwardOps.push({\r\n type: 'remove',\r\n inst: prevInstanceMap[key]\r\n });\r\n }\r\n }\r\n nextInstances.forEach(function (nextInstance, index) { return nextInstance.index = index; });\r\n prevInstances.length = 0;\r\n prevInstances.push.apply(prevInstances, nextInstances);\r\n return forwardOps.length < backwardOps.length\r\n ? { ops: forwardOps, dir: 'forward' }\r\n : { ops: backwardOps, dir: 'backward' };\r\n }\r\n function patch(parentInst, patches) {\r\n var container = parentInst.node;\r\n var ops = patches.ops, dir = patches.dir;\r\n var insertNum = 0;\r\n ops.forEach(function (op) {\r\n var beforeIndex = dir === 'forward' ? op.index + 1 + insertNum : op.index;\r\n if (op.type === 'remove') {\r\n op.inst.unmount();\r\n }\r\n else {\r\n if (op.type === 'insert') {\r\n ++insertNum;\r\n var markup = op.inst.mount(parentInst.id + \":\" + op.inst.key);\r\n var node = createNode(markup);\r\n var beforeNode = container.children[beforeIndex];\r\n container.insertBefore(node, beforeNode);\r\n emitter.emit('loaded');\r\n emitter.emit('mounted');\r\n }\r\n else {\r\n var node = op.inst.node;\r\n var beforeNode = container.children[beforeIndex];\r\n container.insertBefore(node, beforeNode);\r\n }\r\n }\r\n });\r\n }\n\n var DOMInstance = (function () {\r\n function DOMInstance(element) {\r\n this.node = null;\r\n this.element = element;\r\n }\r\n Object.defineProperty(DOMInstance.prototype, \"key\", {\r\n get: function () {\r\n return this.element && this.element.key != null\r\n ? 'k_' + this.element.key\r\n : this.index != null ? '' + this.index : null;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n DOMInstance.prototype.mount = function (id) {\r\n var _this = this;\r\n this.id = id;\r\n emitter.on('loaded', function () { return _this.node = getNode(_this.id); });\r\n var markup = \"<\" + this.element.type + \" \" + DATA_ID + \"=\\\"\" + id + \"\\\" \";\r\n if (this.element.key != null) {\r\n markup += \"key=\\\"\" + this.element.key + \"\\\" \";\r\n }\r\n var props = this.element.props;\r\n var _loop_1 = function (prop) {\r\n if (prop === 'children') {\r\n return \"continue\";\r\n }\r\n else if (prop === 'className') {\r\n markup += \"class=\\\"\" + getClassString(props.className) + \"\\\" \";\r\n }\r\n else if (prop === 'style') {\r\n markup += \"style=\\\"\" + getStyleString(props.style) + \"\\\" \";\r\n }\r\n else if (SUPPORTED_LISTENERS[prop.toLowerCase()] && is.function(props[prop])) {\r\n emitter.on('loaded', function () { return _this.node[prop.toLowerCase()] = props[prop]; });\r\n }\r\n else {\r\n markup += prop + \"=\\\"\" + props[prop] + \"\\\" \";\r\n }\r\n };\r\n for (var prop in props) {\r\n _loop_1(prop);\r\n }\r\n markup += '>';\r\n this.childInstances = [];\r\n this.element.props.children.forEach(function (child, index) {\r\n var instance = instantiate(child);\r\n instance.index = index;\r\n markup += instance.mount(id + \":\" + instance.key);\r\n _this.childInstances.push(instance);\r\n });\r\n markup += \"\";\r\n if (is.string(this.element.ref) && Dependency.target) {\r\n var compInst_1 = Dependency.target.instance;\r\n emitter.on('loaded', function () { return compInst_1.refs[_this.element.ref] = _this.node; });\r\n }\r\n emitter.on('loaded', function () {\r\n if (_this.node) {\r\n _this.node.removeAttribute(DATA_ID);\r\n }\r\n });\r\n return markup;\r\n };\r\n DOMInstance.prototype.same = function (nextElement) {\r\n return is.object(nextElement)\r\n && nextElement.type === this.element.type\r\n && nextElement.key === this.element.key;\r\n };\r\n DOMInstance.prototype.update = function (nextElement) {\r\n if (!this.node)\r\n return;\r\n nextElement = nextElement == null ? this.element : nextElement;\r\n var node = this.node;\r\n var prevProps = this.element.props;\r\n var nextProps = nextElement.props;\r\n for (var prop in nextProps) {\r\n if (prop === 'children') {\r\n continue;\r\n }\r\n else if (prop === 'className') {\r\n var nextClassName = getClassString(nextProps.className);\r\n if (node.className !== nextClassName) {\r\n node.className = nextClassName;\r\n }\r\n }\r\n else if (prop === 'style') {\r\n var nextStyle = getStyleString(nextProps.style);\r\n if (node.style.cssText !== nextStyle) {\r\n node.style.cssText = nextStyle;\r\n }\r\n }\r\n else if (prop === 'value') {\r\n var nextValue = nextProps.value;\r\n if (node.value !== nextValue) {\r\n node.value = nextValue;\r\n }\r\n }\r\n else if (SUPPORTED_LISTENERS[prop.toLowerCase()] && is.function(nextProps[prop])) {\r\n var nextEventListener = nextProps[prop];\r\n if (this.node[prop.toLowerCase()] !== nextEventListener) {\r\n this.node[prop.toLowerCase()] = nextEventListener;\r\n }\r\n }\r\n else {\r\n var nextAttr = nextProps[prop];\r\n if (node.getAttribute(prop) !== nextAttr) {\r\n node.setAttribute(prop, nextAttr);\r\n }\r\n }\r\n }\r\n for (var prop in prevProps) {\r\n if (is.undefined(nextProps[prop]) || is.null(nextProps[prop])) {\r\n if (SUPPORTED_LISTENERS[prop.toLowerCase()] && is.function(nextProps[prop])) {\r\n delete this.node[prop.toLowerCase()];\r\n }\r\n else {\r\n node.removeAttribute(prop !== 'className' ? prop : 'class');\r\n }\r\n }\r\n }\r\n var prevChildInstances = this.childInstances;\r\n var nextChildren = nextElement.props.children;\r\n if (prevChildInstances.length === 1\r\n && nextChildren.length === 1\r\n && prevChildInstances[0].same(nextChildren[0])) {\r\n reconciler.enqueueUpdate(prevChildInstances[0], nextChildren[0]);\r\n }\r\n else {\r\n patch(this, diff(prevChildInstances, nextChildren));\r\n }\r\n this.element = nextElement;\r\n };\r\n DOMInstance.prototype.unmount = function () {\r\n this.childInstances.forEach(function (child) { return child.unmount(); });\r\n if (this.node)\r\n this.node.remove();\r\n delete this.id;\r\n delete this.node;\r\n delete this.index;\r\n delete this.element;\r\n delete this.childInstances;\r\n };\r\n return DOMInstance;\r\n }());\n\n function createElement(type, config) {\r\n var children = [];\r\n for (var _i = 2; _i < arguments.length; _i++) {\r\n children[_i - 2] = arguments[_i];\r\n }\r\n var props = { children: [].concat.apply([], children) };\r\n var key = null;\r\n var ref = null;\r\n if (config) {\r\n if (config.key != null) {\r\n key = ('' + config.key).replace(/:/g, '_');\r\n }\r\n if (config.ref && is.string(config.ref)) {\r\n ref = config.ref;\r\n }\r\n for (var prop in config) {\r\n if (hasOwn(config, prop) && !RESERVED_PROPS[prop]) {\r\n props[prop] = config[prop];\r\n }\r\n }\r\n }\r\n return { type: type, key: key, ref: ref, props: props };\r\n }\n\n function instantiate(element) {\r\n var instance = null;\r\n if (is.undefined(element)\r\n || is.null(element)\r\n || is.number(element)\r\n || is.string(element)) {\r\n instance = new TextInstance(element);\r\n }\r\n else if (is.string(element.type)) {\r\n instance = new DOMInstance(element);\r\n }\r\n else if (is.function(element.type)) {\r\n instance = new ComponentInstance(element);\r\n }\r\n else {\r\n throw new Error('illegal VDOM node type, please do not return array/null/undefined/etc in an app');\r\n }\r\n return instance;\r\n }\r\n function render(vdom, container) {\r\n if (Dependency.target) {\r\n throw new Error('please call render outside all components');\r\n }\r\n else if (!is.object(vdom)) {\r\n throw new Error('please offer a legal VDOM node');\r\n }\r\n else if (!container) {\r\n throw new Error('a root DOM node is needed to mount the app');\r\n }\r\n var instance = null;\r\n if (is.string(vdom.type)) {\r\n instance = instantiate(createElement(function () { return vdom; }));\r\n }\r\n else {\r\n instance = instantiate(vdom);\r\n }\r\n var markup = instance.mount('kg');\r\n var node = createNode(markup);\r\n container.parentNode.insertBefore(node, container);\r\n container.remove();\r\n emitter.emit('loaded');\r\n emitter.emit('mounted');\r\n }\n\n function observe(data, specificWatcher) {\r\n if (specificWatcher === void 0) { specificWatcher = null; }\r\n if (is.function(data)) {\r\n throw new Error('function can\\'t be observed');\r\n }\r\n else if (!is.object(data) && !is.array(data)) {\r\n data = { value: data };\r\n }\r\n for (var key in data) {\r\n if (hasOwn(data, key)) {\r\n if (is.object(data[key]) || is.array(data[key])) {\r\n data[key] = observe(data[key], specificWatcher);\r\n }\r\n }\r\n }\r\n var dep = new Dependency(specificWatcher);\r\n return new Proxy(data, {\r\n get: function (target, property) {\r\n if (hasOwn(target, property)) {\r\n dep.collect();\r\n }\r\n return target[property];\r\n },\r\n set: function (target, property, value) {\r\n if ((hasOwn(target, property) || is.undefined(target[property])) &&\r\n value !== target[property]) {\r\n dep.notify();\r\n }\r\n target[property] = value;\r\n return true;\r\n },\r\n deleteProperty: function (target, property) {\r\n if (hasOwn(target, property)) {\r\n dep.notify();\r\n }\r\n return delete target[property];\r\n }\r\n });\r\n }\n\n function createContext(ctx) {\r\n if (Dependency.target) {\r\n throw new Error('please call createContext outside all components');\r\n }\r\n else {\r\n return observe(ctx);\r\n }\r\n }\n\n function useState(state) {\r\n if (!Dependency.target) {\r\n throw new Error('please call useState at top level in a component');\r\n }\r\n else {\r\n var instance = Dependency.target.instance;\r\n if (!instance.node) {\r\n instance.states.push(observe(state, Dependency.target));\r\n }\r\n var currentState = instance.currentState;\r\n if (!currentState) {\r\n throw new Error('unmatch any states. please don\\'t call useState in if/loop statement');\r\n }\r\n else {\r\n return currentState;\r\n }\r\n }\r\n }\n\n function useRefs() {\r\n if (!Dependency.target) {\r\n throw new Error('please call useRefs at top level in a component');\r\n }\r\n else {\r\n return Dependency.target.instance.refs;\r\n }\r\n }\n\n function useEffect(effect, guard) {\r\n if (guard === void 0) { guard = null; }\r\n if (!is.null(guard) && !is.array(guard)) {\r\n throw new Error('the second argument of useEffect only accepts array');\r\n }\r\n else if (!Dependency.target) {\r\n throw new Error('please call useEffect at top level in a component');\r\n }\r\n else {\r\n var instance_1 = Dependency.target.instance;\r\n if (instance_1.node) {\r\n var prevGuard = instance_1.prevGuard;\r\n if (is.undefined(prevGuard)) {\r\n throw new Error('unmatch any effects. please don\\'t call useEffect in if/loop statement');\r\n }\r\n var shouldCall = false;\r\n if (is.array(guard) && is.array(prevGuard) && guard.length === prevGuard.length) {\r\n for (var i = 0; i < guard.length; i++) {\r\n if (guard[i] !== prevGuard[i]) {\r\n shouldCall = true;\r\n }\r\n }\r\n }\r\n else {\r\n shouldCall = true;\r\n }\r\n if (shouldCall) {\r\n emitter.on(\"updated:\" + instance_1.id, function () {\r\n emitter.clean(\"unmount:\" + instance_1.id);\r\n var cleanup = effect();\r\n if (cleanup && is.function(cleanup)) {\r\n emitter.on(\"unmount:\" + instance_1.id, cleanup);\r\n }\r\n });\r\n }\r\n }\r\n else {\r\n emitter.on('mounted', function () {\r\n if (instance_1.node) {\r\n var cleanup = effect();\r\n if (cleanup && is.function(cleanup)) {\r\n emitter.on(\"unmount:\" + instance_1.id, cleanup);\r\n }\r\n }\r\n });\r\n }\r\n instance_1.guards.push(guard);\r\n }\r\n }\n\n var version = \"1.1.1\";\n\n var Kurge = {\r\n version: version,\r\n render: render,\r\n createElement: createElement,\r\n createContext: createContext,\r\n useState: useState,\r\n useRefs: useRefs,\r\n useEffect: useEffect\r\n };\n\n return Kurge;\n\n}));\n","module.exports.default = module.exports = require('./dist')","import { createContext } from '../../..'\n\nexport default createContext({\n lang: 'EN' // [CN, EN]\n})\n","import context from './context'\n\nconst I18N = {\n CN: [\n '基于函数式组件的响应式视图绑定库',\n '开始',\n '文档',\n 'Hook优先',\n '内置了多种灵活可用的hook,使你的状态和副作用独立于任何东西。让状态与视图分离,让逻辑与组件分离。',\n '函数组件',\n '没有类组件,没有对象组件,所有组件都是函数。封装函数组件来组织你的视图、搭建你的页面。',\n '示例',\n '使用函数来构建一个待办事项组件,并且调用useState hook来保存状态,然后返回一个JSX来描述组件的视图。',\n '注意',\n 'Kurge依赖ES6的Proxy和Refect来实现响应式监测state和context的变化。如果在不支持该特性的浏览器使用Kurge,需要相应的polyfill。',\n '待办事项',\n '添加',\n '完成',\n '无',\n '开始',\n '文档',\n ],\n EN: [\n 'A reactive function component based JavaScript UI binding library',\n 'Get Started',\n 'Documentation',\n 'Hook Dominated',\n 'All kinds of powerful hooks are available, to keep your states and effects free of all stuffs, making it possible to seperate state with view and logic with component.',\n 'Function Based',\n 'No class components, no object components, and all components are organized by function. Build encapsulated function components to compose your view making UIs.',\n 'Example',\n 'Use a function to build a Todo-List component, and call the useState hook to save state, then return a JSX to describe the component view.',\n 'Note',\n 'Kurge depends Proxy and Reflect of ES6 to observe the change of states and contexts. So you need polyfills to run Kurge in those unsupported browsers.',\n 'Todo-List',\n 'Add',\n 'Done',\n 'None',\n 'Start',\n 'Docs',\n ]\n}\n\nexport default function useI18N() {\n return I18N[context.lang]\n}\n","import React from '../../..'\nimport useI18N from '../hooks/i18n'\nimport context from '../hooks/context'\nimport './banner.less'\n\nexport default function Banner() {\n const I18N = useI18N()\n function changeLang() {\n context.lang = context.lang === 'CN' ? 'EN' : 'CN'\n }\n return (\n
\n

Kurge

\n

{I18N[0]}

\n \n \n
\n )\n}","import React, { useState } from '../../..'\nimport useI18N from '../hooks/i18n'\nimport './todo-list.less'\n\nlet uid = 0\n\nexport default function TodoList() {\n const I18N = useI18N()\n const state = useState({\n input: '',\n todos: []\n })\n function handleAdd() {\n if (state.input !== '' && state.todos.length < 6) {\n state.todos.push({ key: uid++, item: state.input })\n state.input = ''\n }\n }\n return (\n
\n

{I18N[11]}

\n
\n state.input = e.target.value} value={state.input}>\n \n
\n
    \n {\n state.todos.length\n ? state.todos.map((todo, index) => \n
  • \n {todo.item}\n \n
  • \n )\n :
  • {I18N[14]}
  • \n }\n
\n
\n )\n}\n","/*! highlight.js v9.12.0 | BSD3 License | git.io/hljslicense */\n(function(factory) {\n\n // Find the global object for export to both the browser and web workers.\n var globalObject = typeof window === 'object' && window ||\n typeof self === 'object' && self;\n\n // Setup highlight.js for different environments. First is Node.js or\n // CommonJS.\n if(typeof exports !== 'undefined') {\n factory(exports);\n } else if(globalObject) {\n // Export hljs globally even when using AMD for cases when this script\n // is loaded with others that may still expect a global hljs.\n globalObject.hljs = factory({});\n\n // Finally register the global hljs with AMD.\n if(typeof define === 'function' && define.amd) {\n define([], function() {\n return globalObject.hljs;\n });\n }\n }\n\n}(function(hljs) {\n // Convenience variables for build-in objects\n var ArrayProto = [],\n objectKeys = Object.keys;\n\n // Global internal variables used within the highlight.js library.\n var languages = {},\n aliases = {};\n\n // Regular expressions used throughout the highlight.js library.\n var noHighlightRe = /^(no-?highlight|plain|text)$/i,\n languagePrefixRe = /\\blang(?:uage)?-([\\w-]+)\\b/i,\n fixMarkupRe = /((^(<[^>]+>|\\t|)+|(?:\\n)))/gm;\n\n var spanEndTag = '';\n\n // Global options used when within external APIs. This is modified when\n // calling the `hljs.configure` function.\n var options = {\n classPrefix: 'hljs-',\n tabReplace: null,\n useBR: false,\n languages: undefined\n };\n\n\n /* Utility functions */\n\n function escape(value) {\n return value.replace(/&/g, '&').replace(//g, '>');\n }\n\n function tag(node) {\n return node.nodeName.toLowerCase();\n }\n\n function testRe(re, lexeme) {\n var match = re && re.exec(lexeme);\n return match && match.index === 0;\n }\n\n function isNotHighlighted(language) {\n return noHighlightRe.test(language);\n }\n\n function blockLanguage(block) {\n var i, match, length, _class;\n var classes = block.className + ' ';\n\n classes += block.parentNode ? block.parentNode.className : '';\n\n // language-* takes precedence over non-prefixed class names.\n match = languagePrefixRe.exec(classes);\n if (match) {\n return getLanguage(match[1]) ? match[1] : 'no-highlight';\n }\n\n classes = classes.split(/\\s+/);\n\n for (i = 0, length = classes.length; i < length; i++) {\n _class = classes[i]\n\n if (isNotHighlighted(_class) || getLanguage(_class)) {\n return _class;\n }\n }\n }\n\n function inherit(parent) { // inherit(parent, override_obj, override_obj, ...)\n var key;\n var result = {};\n var objects = Array.prototype.slice.call(arguments, 1);\n\n for (key in parent)\n result[key] = parent[key];\n objects.forEach(function(obj) {\n for (key in obj)\n result[key] = obj[key];\n });\n return result;\n }\n\n /* Stream merging */\n\n function nodeStream(node) {\n var result = [];\n (function _nodeStream(node, offset) {\n for (var child = node.firstChild; child; child = child.nextSibling) {\n if (child.nodeType === 3)\n offset += child.nodeValue.length;\n else if (child.nodeType === 1) {\n result.push({\n event: 'start',\n offset: offset,\n node: child\n });\n offset = _nodeStream(child, offset);\n // Prevent void elements from having an end tag that would actually\n // double them in the output. There are more void elements in HTML\n // but we list only those realistically expected in code display.\n if (!tag(child).match(/br|hr|img|input/)) {\n result.push({\n event: 'stop',\n offset: offset,\n node: child\n });\n }\n }\n }\n return offset;\n })(node, 0);\n return result;\n }\n\n function mergeStreams(original, highlighted, value) {\n var processed = 0;\n var result = '';\n var nodeStack = [];\n\n function selectStream() {\n if (!original.length || !highlighted.length) {\n return original.length ? original : highlighted;\n }\n if (original[0].offset !== highlighted[0].offset) {\n return (original[0].offset < highlighted[0].offset) ? original : highlighted;\n }\n\n /*\n To avoid starting the stream just before it should stop the order is\n ensured that original always starts first and closes last:\n\n if (event1 == 'start' && event2 == 'start')\n return original;\n if (event1 == 'start' && event2 == 'stop')\n return highlighted;\n if (event1 == 'stop' && event2 == 'start')\n return original;\n if (event1 == 'stop' && event2 == 'stop')\n return highlighted;\n\n ... which is collapsed to:\n */\n return highlighted[0].event === 'start' ? original : highlighted;\n }\n\n function open(node) {\n function attr_str(a) {return ' ' + a.nodeName + '=\"' + escape(a.value).replace('\"', '"') + '\"';}\n result += '<' + tag(node) + ArrayProto.map.call(node.attributes, attr_str).join('') + '>';\n }\n\n function close(node) {\n result += '';\n }\n\n function render(event) {\n (event.event === 'start' ? open : close)(event.node);\n }\n\n while (original.length || highlighted.length) {\n var stream = selectStream();\n result += escape(value.substring(processed, stream[0].offset));\n processed = stream[0].offset;\n if (stream === original) {\n /*\n On any opening or closing tag of the original markup we first close\n the entire highlighted node stack, then render the original tag along\n with all the following original tags at the same offset and then\n reopen all the tags on the highlighted stack.\n */\n nodeStack.reverse().forEach(close);\n do {\n render(stream.splice(0, 1)[0]);\n stream = selectStream();\n } while (stream === original && stream.length && stream[0].offset === processed);\n nodeStack.reverse().forEach(open);\n } else {\n if (stream[0].event === 'start') {\n nodeStack.push(stream[0].node);\n } else {\n nodeStack.pop();\n }\n render(stream.splice(0, 1)[0]);\n }\n }\n return result + escape(value.substr(processed));\n }\n\n /* Initialization */\n\n function expand_mode(mode) {\n if (mode.variants && !mode.cached_variants) {\n mode.cached_variants = mode.variants.map(function(variant) {\n return inherit(mode, {variants: null}, variant);\n });\n }\n return mode.cached_variants || (mode.endsWithParent && [inherit(mode)]) || [mode];\n }\n\n function compileLanguage(language) {\n\n function reStr(re) {\n return (re && re.source) || re;\n }\n\n function langRe(value, global) {\n return new RegExp(\n reStr(value),\n 'm' + (language.case_insensitive ? 'i' : '') + (global ? 'g' : '')\n );\n }\n\n function compileMode(mode, parent) {\n if (mode.compiled)\n return;\n mode.compiled = true;\n\n mode.keywords = mode.keywords || mode.beginKeywords;\n if (mode.keywords) {\n var compiled_keywords = {};\n\n var flatten = function(className, str) {\n if (language.case_insensitive) {\n str = str.toLowerCase();\n }\n str.split(' ').forEach(function(kw) {\n var pair = kw.split('|');\n compiled_keywords[pair[0]] = [className, pair[1] ? Number(pair[1]) : 1];\n });\n };\n\n if (typeof mode.keywords === 'string') { // string\n flatten('keyword', mode.keywords);\n } else {\n objectKeys(mode.keywords).forEach(function (className) {\n flatten(className, mode.keywords[className]);\n });\n }\n mode.keywords = compiled_keywords;\n }\n mode.lexemesRe = langRe(mode.lexemes || /\\w+/, true);\n\n if (parent) {\n if (mode.beginKeywords) {\n mode.begin = '\\\\b(' + mode.beginKeywords.split(' ').join('|') + ')\\\\b';\n }\n if (!mode.begin)\n mode.begin = /\\B|\\b/;\n mode.beginRe = langRe(mode.begin);\n if (!mode.end && !mode.endsWithParent)\n mode.end = /\\B|\\b/;\n if (mode.end)\n mode.endRe = langRe(mode.end);\n mode.terminator_end = reStr(mode.end) || '';\n if (mode.endsWithParent && parent.terminator_end)\n mode.terminator_end += (mode.end ? '|' : '') + parent.terminator_end;\n }\n if (mode.illegal)\n mode.illegalRe = langRe(mode.illegal);\n if (mode.relevance == null)\n mode.relevance = 1;\n if (!mode.contains) {\n mode.contains = [];\n }\n mode.contains = Array.prototype.concat.apply([], mode.contains.map(function(c) {\n return expand_mode(c === 'self' ? mode : c)\n }));\n mode.contains.forEach(function(c) {compileMode(c, mode);});\n\n if (mode.starts) {\n compileMode(mode.starts, parent);\n }\n\n var terminators =\n mode.contains.map(function(c) {\n return c.beginKeywords ? '\\\\.?(' + c.begin + ')\\\\.?' : c.begin;\n })\n .concat([mode.terminator_end, mode.illegal])\n .map(reStr)\n .filter(Boolean);\n mode.terminators = terminators.length ? langRe(terminators.join('|'), true) : {exec: function(/*s*/) {return null;}};\n }\n\n compileMode(language);\n }\n\n /*\n Core highlighting function. Accepts a language name, or an alias, and a\n string with the code to highlight. Returns an object with the following\n properties:\n\n - relevance (int)\n - value (an HTML string with highlighting markup)\n\n */\n function highlight(name, value, ignore_illegals, continuation) {\n\n function subMode(lexeme, mode) {\n var i, length;\n\n for (i = 0, length = mode.contains.length; i < length; i++) {\n if (testRe(mode.contains[i].beginRe, lexeme)) {\n return mode.contains[i];\n }\n }\n }\n\n function endOfMode(mode, lexeme) {\n if (testRe(mode.endRe, lexeme)) {\n while (mode.endsParent && mode.parent) {\n mode = mode.parent;\n }\n return mode;\n }\n if (mode.endsWithParent) {\n return endOfMode(mode.parent, lexeme);\n }\n }\n\n function isIllegal(lexeme, mode) {\n return !ignore_illegals && testRe(mode.illegalRe, lexeme);\n }\n\n function keywordMatch(mode, match) {\n var match_str = language.case_insensitive ? match[0].toLowerCase() : match[0];\n return mode.keywords.hasOwnProperty(match_str) && mode.keywords[match_str];\n }\n\n function buildSpan(classname, insideSpan, leaveOpen, noPrefix) {\n var classPrefix = noPrefix ? '' : options.classPrefix,\n openSpan = '';\n\n return openSpan + insideSpan + closeSpan;\n }\n\n function processKeywords() {\n var keyword_match, last_index, match, result;\n\n if (!top.keywords)\n return escape(mode_buffer);\n\n result = '';\n last_index = 0;\n top.lexemesRe.lastIndex = 0;\n match = top.lexemesRe.exec(mode_buffer);\n\n while (match) {\n result += escape(mode_buffer.substring(last_index, match.index));\n keyword_match = keywordMatch(top, match);\n if (keyword_match) {\n relevance += keyword_match[1];\n result += buildSpan(keyword_match[0], escape(match[0]));\n } else {\n result += escape(match[0]);\n }\n last_index = top.lexemesRe.lastIndex;\n match = top.lexemesRe.exec(mode_buffer);\n }\n return result + escape(mode_buffer.substr(last_index));\n }\n\n function processSubLanguage() {\n var explicit = typeof top.subLanguage === 'string';\n if (explicit && !languages[top.subLanguage]) {\n return escape(mode_buffer);\n }\n\n var result = explicit ?\n highlight(top.subLanguage, mode_buffer, true, continuations[top.subLanguage]) :\n highlightAuto(mode_buffer, top.subLanguage.length ? top.subLanguage : undefined);\n\n // Counting embedded language score towards the host language may be disabled\n // with zeroing the containing mode relevance. Usecase in point is Markdown that\n // allows XML everywhere and makes every XML snippet to have a much larger Markdown\n // score.\n if (top.relevance > 0) {\n relevance += result.relevance;\n }\n if (explicit) {\n continuations[top.subLanguage] = result.top;\n }\n return buildSpan(result.language, result.value, false, true);\n }\n\n function processBuffer() {\n result += (top.subLanguage != null ? processSubLanguage() : processKeywords());\n mode_buffer = '';\n }\n\n function startNewMode(mode) {\n result += mode.className? buildSpan(mode.className, '', true): '';\n top = Object.create(mode, {parent: {value: top}});\n }\n\n function processLexeme(buffer, lexeme) {\n\n mode_buffer += buffer;\n\n if (lexeme == null) {\n processBuffer();\n return 0;\n }\n\n var new_mode = subMode(lexeme, top);\n if (new_mode) {\n if (new_mode.skip) {\n mode_buffer += lexeme;\n } else {\n if (new_mode.excludeBegin) {\n mode_buffer += lexeme;\n }\n processBuffer();\n if (!new_mode.returnBegin && !new_mode.excludeBegin) {\n mode_buffer = lexeme;\n }\n }\n startNewMode(new_mode, lexeme);\n return new_mode.returnBegin ? 0 : lexeme.length;\n }\n\n var end_mode = endOfMode(top, lexeme);\n if (end_mode) {\n var origin = top;\n if (origin.skip) {\n mode_buffer += lexeme;\n } else {\n if (!(origin.returnEnd || origin.excludeEnd)) {\n mode_buffer += lexeme;\n }\n processBuffer();\n if (origin.excludeEnd) {\n mode_buffer = lexeme;\n }\n }\n do {\n if (top.className) {\n result += spanEndTag;\n }\n if (!top.skip) {\n relevance += top.relevance;\n }\n top = top.parent;\n } while (top !== end_mode.parent);\n if (end_mode.starts) {\n startNewMode(end_mode.starts, '');\n }\n return origin.returnEnd ? 0 : lexeme.length;\n }\n\n if (isIllegal(lexeme, top))\n throw new Error('Illegal lexeme \"' + lexeme + '\" for mode \"' + (top.className || '') + '\"');\n\n /*\n Parser should not reach this point as all types of lexemes should be caught\n earlier, but if it does due to some bug make sure it advances at least one\n character forward to prevent infinite looping.\n */\n mode_buffer += lexeme;\n return lexeme.length || 1;\n }\n\n var language = getLanguage(name);\n if (!language) {\n throw new Error('Unknown language: \"' + name + '\"');\n }\n\n compileLanguage(language);\n var top = continuation || language;\n var continuations = {}; // keep continuations for sub-languages\n var result = '', current;\n for(current = top; current !== language; current = current.parent) {\n if (current.className) {\n result = buildSpan(current.className, '', true) + result;\n }\n }\n var mode_buffer = '';\n var relevance = 0;\n try {\n var match, count, index = 0;\n while (true) {\n top.terminators.lastIndex = index;\n match = top.terminators.exec(value);\n if (!match)\n break;\n count = processLexeme(value.substring(index, match.index), match[0]);\n index = match.index + count;\n }\n processLexeme(value.substr(index));\n for(current = top; current.parent; current = current.parent) { // close dangling modes\n if (current.className) {\n result += spanEndTag;\n }\n }\n return {\n relevance: relevance,\n value: result,\n language: name,\n top: top\n };\n } catch (e) {\n if (e.message && e.message.indexOf('Illegal') !== -1) {\n return {\n relevance: 0,\n value: escape(value)\n };\n } else {\n throw e;\n }\n }\n }\n\n /*\n Highlighting with language detection. Accepts a string with the code to\n highlight. Returns an object with the following properties:\n\n - language (detected language)\n - relevance (int)\n - value (an HTML string with highlighting markup)\n - second_best (object with the same structure for second-best heuristically\n detected language, may be absent)\n\n */\n function highlightAuto(text, languageSubset) {\n languageSubset = languageSubset || options.languages || objectKeys(languages);\n var result = {\n relevance: 0,\n value: escape(text)\n };\n var second_best = result;\n languageSubset.filter(getLanguage).forEach(function(name) {\n var current = highlight(name, text, false);\n current.language = name;\n if (current.relevance > second_best.relevance) {\n second_best = current;\n }\n if (current.relevance > result.relevance) {\n second_best = result;\n result = current;\n }\n });\n if (second_best.language) {\n result.second_best = second_best;\n }\n return result;\n }\n\n /*\n Post-processing of the highlighted markup:\n\n - replace TABs with something more useful\n - replace real line-breaks with '
' for non-pre containers\n\n */\n function fixMarkup(value) {\n return !(options.tabReplace || options.useBR)\n ? value\n : value.replace(fixMarkupRe, function(match, p1) {\n if (options.useBR && match === '\\n') {\n return '
';\n } else if (options.tabReplace) {\n return p1.replace(/\\t/g, options.tabReplace);\n }\n return '';\n });\n }\n\n function buildClassName(prevClassName, currentLang, resultLang) {\n var language = currentLang ? aliases[currentLang] : resultLang,\n result = [prevClassName.trim()];\n\n if (!prevClassName.match(/\\bhljs\\b/)) {\n result.push('hljs');\n }\n\n if (prevClassName.indexOf(language) === -1) {\n result.push(language);\n }\n\n return result.join(' ').trim();\n }\n\n /*\n Applies highlighting to a DOM node containing code. Accepts a DOM node and\n two optional parameters for fixMarkup.\n */\n function highlightBlock(block) {\n var node, originalStream, result, resultNode, text;\n var language = blockLanguage(block);\n\n if (isNotHighlighted(language))\n return;\n\n if (options.useBR) {\n node = document.createElementNS('http://www.w3.org/1999/xhtml', 'div');\n node.innerHTML = block.innerHTML.replace(/\\n/g, '').replace(//g, '\\n');\n } else {\n node = block;\n }\n text = node.textContent;\n result = language ? highlight(language, text, true) : highlightAuto(text);\n\n originalStream = nodeStream(node);\n if (originalStream.length) {\n resultNode = document.createElementNS('http://www.w3.org/1999/xhtml', 'div');\n resultNode.innerHTML = result.value;\n result.value = mergeStreams(originalStream, nodeStream(resultNode), text);\n }\n result.value = fixMarkup(result.value);\n\n block.innerHTML = result.value;\n block.className = buildClassName(block.className, language, result.language);\n block.result = {\n language: result.language,\n re: result.relevance\n };\n if (result.second_best) {\n block.second_best = {\n language: result.second_best.language,\n re: result.second_best.relevance\n };\n }\n }\n\n /*\n Updates highlight.js global options with values passed in the form of an object.\n */\n function configure(user_options) {\n options = inherit(options, user_options);\n }\n\n /*\n Applies highlighting to all
..
blocks on a page.\n */\n function initHighlighting() {\n if (initHighlighting.called)\n return;\n initHighlighting.called = true;\n\n var blocks = document.querySelectorAll('pre code');\n ArrayProto.forEach.call(blocks, highlightBlock);\n }\n\n /*\n Attaches highlighting to the page load event.\n */\n function initHighlightingOnLoad() {\n addEventListener('DOMContentLoaded', initHighlighting, false);\n addEventListener('load', initHighlighting, false);\n }\n\n function registerLanguage(name, language) {\n var lang = languages[name] = language(hljs);\n if (lang.aliases) {\n lang.aliases.forEach(function(alias) {aliases[alias] = name;});\n }\n }\n\n function listLanguages() {\n return objectKeys(languages);\n }\n\n function getLanguage(name) {\n name = (name || '').toLowerCase();\n return languages[name] || languages[aliases[name]];\n }\n\n /* Interface definition */\n\n hljs.highlight = highlight;\n hljs.highlightAuto = highlightAuto;\n hljs.fixMarkup = fixMarkup;\n hljs.highlightBlock = highlightBlock;\n hljs.configure = configure;\n hljs.initHighlighting = initHighlighting;\n hljs.initHighlightingOnLoad = initHighlightingOnLoad;\n hljs.registerLanguage = registerLanguage;\n hljs.listLanguages = listLanguages;\n hljs.getLanguage = getLanguage;\n hljs.inherit = inherit;\n\n // Common regexps\n hljs.IDENT_RE = '[a-zA-Z]\\\\w*';\n hljs.UNDERSCORE_IDENT_RE = '[a-zA-Z_]\\\\w*';\n hljs.NUMBER_RE = '\\\\b\\\\d+(\\\\.\\\\d+)?';\n hljs.C_NUMBER_RE = '(-?)(\\\\b0[xX][a-fA-F0-9]+|(\\\\b\\\\d+(\\\\.\\\\d*)?|\\\\.\\\\d+)([eE][-+]?\\\\d+)?)'; // 0x..., 0..., decimal, float\n hljs.BINARY_NUMBER_RE = '\\\\b(0b[01]+)'; // 0b...\n hljs.RE_STARTERS_RE = '!|!=|!==|%|%=|&|&&|&=|\\\\*|\\\\*=|\\\\+|\\\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\\\?|\\\\[|\\\\{|\\\\(|\\\\^|\\\\^=|\\\\||\\\\|=|\\\\|\\\\||~';\n\n // Common modes\n hljs.BACKSLASH_ESCAPE = {\n begin: '\\\\\\\\[\\\\s\\\\S]', relevance: 0\n };\n hljs.APOS_STRING_MODE = {\n className: 'string',\n begin: '\\'', end: '\\'',\n illegal: '\\\\n',\n contains: [hljs.BACKSLASH_ESCAPE]\n };\n hljs.QUOTE_STRING_MODE = {\n className: 'string',\n begin: '\"', end: '\"',\n illegal: '\\\\n',\n contains: [hljs.BACKSLASH_ESCAPE]\n };\n hljs.PHRASAL_WORDS_MODE = {\n begin: /\\b(a|an|the|are|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such|will|you|your|they|like|more)\\b/\n };\n hljs.COMMENT = function (begin, end, inherits) {\n var mode = hljs.inherit(\n {\n className: 'comment',\n begin: begin, end: end,\n contains: []\n },\n inherits || {}\n );\n mode.contains.push(hljs.PHRASAL_WORDS_MODE);\n mode.contains.push({\n className: 'doctag',\n begin: '(?:TODO|FIXME|NOTE|BUG|XXX):',\n relevance: 0\n });\n return mode;\n };\n hljs.C_LINE_COMMENT_MODE = hljs.COMMENT('//', '$');\n hljs.C_BLOCK_COMMENT_MODE = hljs.COMMENT('/\\\\*', '\\\\*/');\n hljs.HASH_COMMENT_MODE = hljs.COMMENT('#', '$');\n hljs.NUMBER_MODE = {\n className: 'number',\n begin: hljs.NUMBER_RE,\n relevance: 0\n };\n hljs.C_NUMBER_MODE = {\n className: 'number',\n begin: hljs.C_NUMBER_RE,\n relevance: 0\n };\n hljs.BINARY_NUMBER_MODE = {\n className: 'number',\n begin: hljs.BINARY_NUMBER_RE,\n relevance: 0\n };\n hljs.CSS_NUMBER_MODE = {\n className: 'number',\n begin: hljs.NUMBER_RE + '(' +\n '%|em|ex|ch|rem' +\n '|vw|vh|vmin|vmax' +\n '|cm|mm|in|pt|pc|px' +\n '|deg|grad|rad|turn' +\n '|s|ms' +\n '|Hz|kHz' +\n '|dpi|dpcm|dppx' +\n ')?',\n relevance: 0\n };\n hljs.REGEXP_MODE = {\n className: 'regexp',\n begin: /\\//, end: /\\/[gimuy]*/,\n illegal: /\\n/,\n contains: [\n hljs.BACKSLASH_ESCAPE,\n {\n begin: /\\[/, end: /\\]/,\n relevance: 0,\n contains: [hljs.BACKSLASH_ESCAPE]\n }\n ]\n };\n hljs.TITLE_MODE = {\n className: 'title',\n begin: hljs.IDENT_RE,\n relevance: 0\n };\n hljs.UNDERSCORE_TITLE_MODE = {\n className: 'title',\n begin: hljs.UNDERSCORE_IDENT_RE,\n relevance: 0\n };\n hljs.METHOD_GUARD = {\n // excludes method names from keyword processing\n begin: '\\\\.\\\\s*' + hljs.UNDERSCORE_IDENT_RE,\n relevance: 0\n };\n\nhljs.registerLanguage('1c', function(hljs){\n\n // общий паттерн для определения идентификаторов\n var UNDERSCORE_IDENT_RE = '[A-Za-zА-Яа-яёЁ_][A-Za-zА-Яа-яёЁ_0-9]+';\n \n // v7 уникальные ключевые слова, отсутствующие в v8 ==> keyword\n var v7_keywords =\n 'далее ';\n\n // v8 ключевые слова ==> keyword\n var v8_keywords =\n 'возврат вызватьисключение выполнить для если и из или иначе иначеесли исключение каждого конецесли ' +\n 'конецпопытки конеццикла не новый перейти перем по пока попытка прервать продолжить тогда цикл экспорт ';\n\n // keyword : ключевые слова\n var KEYWORD = v7_keywords + v8_keywords;\n \n // v7 уникальные директивы, отсутствующие в v8 ==> meta-keyword\n var v7_meta_keywords =\n 'загрузитьизфайла ';\n\n // v8 ключевые слова в инструкциях препроцессора, директивах компиляции, аннотациях ==> meta-keyword\n var v8_meta_keywords =\n 'вебклиент вместо внешнеесоединение клиент конецобласти мобильноеприложениеклиент мобильноеприложениесервер ' +\n 'наклиенте наклиентенасервере наклиентенасерверебезконтекста насервере насерверебезконтекста область перед ' +\n 'после сервер толстыйклиентобычноеприложение толстыйклиентуправляемоеприложение тонкийклиент ';\n\n // meta-keyword : ключевые слова в инструкциях препроцессора, директивах компиляции, аннотациях\n var METAKEYWORD = v7_meta_keywords + v8_meta_keywords;\n\n // v7 системные константы ==> built_in\n var v7_system_constants =\n 'разделительстраниц разделительстрок символтабуляции ';\n \n // v7 уникальные методы глобального контекста, отсутствующие в v8 ==> built_in\n var v7_global_context_methods =\n 'ansitooem oemtoansi ввестивидсубконто ввестиперечисление ввестипериод ввестиплансчетов выбранныйплансчетов ' +\n 'датагод датамесяц датачисло заголовоксистемы значениевстроку значениеизстроки каталогиб каталогпользователя ' +\n 'кодсимв конгода конецпериодаби конецрассчитанногопериодаби конецстандартногоинтервала конквартала конмесяца ' +\n 'коннедели лог лог10 максимальноеколичествосубконто названиеинтерфейса названиенабораправ назначитьвид ' +\n 'назначитьсчет найтиссылки началопериодаби началостандартногоинтервала начгода начквартала начмесяца ' +\n 'начнедели номерднягода номерднянедели номернеделигода обработкаожидания основнойжурналрасчетов ' +\n 'основнойплансчетов основнойязык очиститьокносообщений периодстр получитьвремята получитьдатута ' +\n 'получитьдокументта получитьзначенияотбора получитьпозициюта получитьпустоезначение получитьта ' +\n 'префиксавтонумерации пропись пустоезначение разм разобратьпозициюдокумента рассчитатьрегистрына ' +\n 'рассчитатьрегистрыпо симв создатьобъект статусвозврата стрколичествострок сформироватьпозициюдокумента ' +\n 'счетпокоду текущеевремя типзначения типзначениястр установитьтана установитьтапо фиксшаблон шаблон ';\n \n // v8 методы глобального контекста ==> built_in\n var v8_global_context_methods =\n 'acos asin atan base64значение base64строка cos exp log log10 pow sin sqrt tan xmlзначение xmlстрока ' +\n 'xmlтип xmlтипзнч активноеокно безопасныйрежим безопасныйрежимразделенияданных булево ввестидату ввестизначение ' +\n 'ввестистроку ввестичисло возможностьчтенияxml вопрос восстановитьзначение врег выгрузитьжурналрегистрации ' +\n 'выполнитьобработкуоповещения выполнитьпроверкуправдоступа вычислить год данныеформывзначение дата день деньгода ' +\n 'деньнедели добавитьмесяц заблокироватьданныедляредактирования заблокироватьработупользователя завершитьработусистемы ' +\n 'загрузитьвнешнююкомпоненту закрытьсправку записатьjson записатьxml записатьдатуjson записьжурналарегистрации ' +\n 'заполнитьзначениясвойств запроситьразрешениепользователя запуститьприложение запуститьсистему зафиксироватьтранзакцию ' +\n 'значениевданныеформы значениевстрокувнутр значениевфайл значениезаполнено значениеизстрокивнутр значениеизфайла ' +\n 'изxmlтипа импортмоделиxdto имякомпьютера имяпользователя инициализироватьпредопределенныеданные информацияобошибке ' +\n 'каталогбиблиотекимобильногоустройства каталогвременныхфайлов каталогдокументов каталогпрограммы кодироватьстроку ' +\n 'кодлокализацииинформационнойбазы кодсимвола командасистемы конецгода конецдня конецквартала конецмесяца конецминуты ' +\n 'конецнедели конецчаса конфигурациябазыданныхизмененадинамически конфигурацияизменена копироватьданныеформы ' +\n 'копироватьфайл краткоепредставлениеошибки лев макс местноевремя месяц мин минута монопольныйрежим найти ' +\n 'найтинедопустимыесимволыxml найтиокнопонавигационнойссылке найтипомеченныенаудаление найтипоссылкам найтифайлы ' +\n 'началогода началодня началоквартала началомесяца началоминуты началонедели началочаса начатьзапросразрешенияпользователя ' +\n 'начатьзапускприложения начатькопированиефайла начатьперемещениефайла начатьподключениевнешнейкомпоненты ' +\n 'начатьподключениерасширенияработыскриптографией начатьподключениерасширенияработысфайлами начатьпоискфайлов ' +\n 'начатьполучениекаталогавременныхфайлов начатьполучениекаталогадокументов начатьполучениерабочегокаталогаданныхпользователя ' +\n 'начатьполучениефайлов начатьпомещениефайла начатьпомещениефайлов начатьсозданиедвоичныхданныхизфайла начатьсозданиекаталога ' +\n 'начатьтранзакцию начатьудалениефайлов начатьустановкувнешнейкомпоненты начатьустановкурасширенияработыскриптографией ' +\n 'начатьустановкурасширенияработысфайлами неделягода необходимостьзавершениясоединения номерсеансаинформационнойбазы ' +\n 'номерсоединенияинформационнойбазы нрег нстр обновитьинтерфейс обновитьнумерациюобъектов обновитьповторноиспользуемыезначения ' +\n 'обработкапрерыванияпользователя объединитьфайлы окр описаниеошибки оповестить оповеститьобизменении ' +\n 'отключитьобработчикзапросанастроекклиенталицензирования отключитьобработчикожидания отключитьобработчикоповещения ' +\n 'открытьзначение открытьиндекссправки открытьсодержаниесправки открытьсправку открытьформу открытьформумодально ' +\n 'отменитьтранзакцию очиститьжурналрегистрации очиститьнастройкипользователя очиститьсообщения параметрыдоступа ' +\n 'перейтипонавигационнойссылке переместитьфайл подключитьвнешнююкомпоненту ' +\n 'подключитьобработчикзапросанастроекклиенталицензирования подключитьобработчикожидания подключитьобработчикоповещения ' +\n 'подключитьрасширениеработыскриптографией подключитьрасширениеработысфайлами подробноепредставлениеошибки ' +\n 'показатьвводдаты показатьвводзначения показатьвводстроки показатьвводчисла показатьвопрос показатьзначение ' +\n 'показатьинформациюобошибке показатьнакарте показатьоповещениепользователя показатьпредупреждение полноеимяпользователя ' +\n 'получитьcomобъект получитьxmlтип получитьадреспоместоположению получитьблокировкусеансов получитьвремязавершенияспящегосеанса ' +\n 'получитьвремязасыпанияпассивногосеанса получитьвремяожиданияблокировкиданных получитьданныевыбора ' +\n 'получитьдополнительныйпараметрклиенталицензирования получитьдопустимыекодылокализации получитьдопустимыечасовыепояса ' +\n 'получитьзаголовокклиентскогоприложения получитьзаголовоксистемы получитьзначенияотборажурналарегистрации ' +\n 'получитьидентификаторконфигурации получитьизвременногохранилища получитьимявременногофайла ' +\n 'получитьимяклиенталицензирования получитьинформациюэкрановклиента получитьиспользованиежурналарегистрации ' +\n 'получитьиспользованиесобытияжурналарегистрации получитькраткийзаголовокприложения получитьмакетоформления ' +\n 'получитьмаскувсефайлы получитьмаскувсефайлыклиента получитьмаскувсефайлысервера получитьместоположениепоадресу ' +\n 'получитьминимальнуюдлинупаролейпользователей получитьнавигационнуюссылку получитьнавигационнуюссылкуинформационнойбазы ' +\n 'получитьобновлениеконфигурациибазыданных получитьобновлениепредопределенныхданныхинформационнойбазы получитьобщиймакет ' +\n 'получитьобщуюформу получитьокна получитьоперативнуюотметкувремени получитьотключениебезопасногорежима ' +\n 'получитьпараметрыфункциональныхопцийинтерфейса получитьполноеимяпредопределенногозначения ' +\n 'получитьпредставлениянавигационныхссылок получитьпроверкусложностипаролейпользователей получитьразделительпути ' +\n 'получитьразделительпутиклиента получитьразделительпутисервера получитьсеансыинформационнойбазы ' +\n 'получитьскоростьклиентскогосоединения получитьсоединенияинформационнойбазы получитьсообщенияпользователю ' +\n 'получитьсоответствиеобъектаиформы получитьсоставстандартногоинтерфейсаodata получитьструктурухранениябазыданных ' +\n 'получитьтекущийсеансинформационнойбазы получитьфайл получитьфайлы получитьформу получитьфункциональнуюопцию ' +\n 'получитьфункциональнуюопциюинтерфейса получитьчасовойпоясинформационнойбазы пользователиос поместитьвовременноехранилище ' +\n 'поместитьфайл поместитьфайлы прав праводоступа предопределенноезначение представлениекодалокализации представлениепериода ' +\n 'представлениеправа представлениеприложения представлениесобытияжурналарегистрации представлениечасовогопояса предупреждение ' +\n 'прекратитьработусистемы привилегированныйрежим продолжитьвызов прочитатьjson прочитатьxml прочитатьдатуjson пустаястрока ' +\n 'рабочийкаталогданныхпользователя разблокироватьданныедляредактирования разделитьфайл разорватьсоединениесвнешнимисточникомданных ' +\n 'раскодироватьстроку рольдоступна секунда сигнал символ скопироватьжурналрегистрации смещениелетнеговремени ' +\n 'смещениестандартноговремени соединитьбуферыдвоичныхданных создатькаталог создатьфабрикуxdto сокрл сокрлп сокрп сообщить ' +\n 'состояние сохранитьзначение сохранитьнастройкипользователя сред стрдлина стрзаканчиваетсяна стрзаменить стрнайти стрначинаетсяс ' +\n 'строка строкасоединенияинформационнойбазы стрполучитьстроку стрразделить стрсоединить стрсравнить стрчисловхождений '+\n 'стрчислострок стршаблон текущаядата текущаядатасеанса текущаяуниверсальнаядата текущаяуниверсальнаядатавмиллисекундах ' +\n 'текущийвариантинтерфейсаклиентскогоприложения текущийвариантосновногошрифтаклиентскогоприложения текущийкодлокализации ' +\n 'текущийрежимзапуска текущийязык текущийязыксистемы тип типзнч транзакцияактивна трег удалитьданныеинформационнойбазы ' +\n 'удалитьизвременногохранилища удалитьобъекты удалитьфайлы универсальноевремя установитьбезопасныйрежим ' +\n 'установитьбезопасныйрежимразделенияданных установитьблокировкусеансов установитьвнешнююкомпоненту ' +\n 'установитьвремязавершенияспящегосеанса установитьвремязасыпанияпассивногосеанса установитьвремяожиданияблокировкиданных ' +\n 'установитьзаголовокклиентскогоприложения установитьзаголовоксистемы установитьиспользованиежурналарегистрации ' +\n 'установитьиспользованиесобытияжурналарегистрации установитькраткийзаголовокприложения ' +\n 'установитьминимальнуюдлинупаролейпользователей установитьмонопольныйрежим установитьнастройкиклиенталицензирования ' +\n 'установитьобновлениепредопределенныхданныхинформационнойбазы установитьотключениебезопасногорежима ' +\n 'установитьпараметрыфункциональныхопцийинтерфейса установитьпривилегированныйрежим ' +\n 'установитьпроверкусложностипаролейпользователей установитьрасширениеработыскриптографией ' +\n 'установитьрасширениеработысфайлами установитьсоединениесвнешнимисточникомданных установитьсоответствиеобъектаиформы ' +\n 'установитьсоставстандартногоинтерфейсаodata установитьчасовойпоясинформационнойбазы установитьчасовойпояссеанса ' +\n 'формат цел час часовойпояс часовойпояссеанса число числопрописью этоадресвременногохранилища ';\n\n // v8 свойства глобального контекста ==> built_in\n var v8_global_context_property =\n 'wsссылки библиотекакартинок библиотекамакетовоформлениякомпоновкиданных библиотекастилей бизнеспроцессы ' +\n 'внешниеисточникиданных внешниеобработки внешниеотчеты встроенныепокупки главныйинтерфейс главныйстиль ' +\n 'документы доставляемыеуведомления журналыдокументов задачи информацияобинтернетсоединении использованиерабочейдаты ' +\n 'историяработыпользователя константы критерииотбора метаданные обработки отображениерекламы отправкадоставляемыхуведомлений ' +\n 'отчеты панельзадачос параметрзапуска параметрысеанса перечисления планывидоврасчета планывидовхарактеристик ' +\n 'планыобмена планысчетов полнотекстовыйпоиск пользователиинформационнойбазы последовательности проверкавстроенныхпокупок ' +\n 'рабочаядата расширенияконфигурации регистрыбухгалтерии регистрынакопления регистрырасчета регистрысведений ' +\n 'регламентныезадания сериализаторxdto справочники средствагеопозиционирования средствакриптографии средствамультимедиа ' +\n 'средстваотображениярекламы средствапочты средствателефонии фабрикаxdto файловыепотоки фоновыезадания хранилищанастроек ' +\n 'хранилищевариантовотчетов хранилищенастроекданныхформ хранилищеобщихнастроек хранилищепользовательскихнастроекдинамическихсписков ' +\n 'хранилищепользовательскихнастроекотчетов хранилищесистемныхнастроек ';\n\n // built_in : встроенные или библиотечные объекты (константы, классы, функции)\n var BUILTIN =\n v7_system_constants +\n v7_global_context_methods + v8_global_context_methods +\n v8_global_context_property;\n \n // v8 системные наборы значений ==> class\n var v8_system_sets_of_values =\n 'webцвета windowsцвета windowsшрифты библиотекакартинок рамкистиля символы цветастиля шрифтыстиля ';\n\n // v8 системные перечисления - интерфейсные ==> class\n var v8_system_enums_interface =\n 'автоматическоесохранениеданныхформывнастройках автонумерациявформе автораздвижениесерий ' +\n 'анимациядиаграммы вариантвыравниванияэлементовизаголовков вариантуправлениявысотойтаблицы ' +\n 'вертикальнаяпрокруткаформы вертикальноеположение вертикальноеположениеэлемента видгруппыформы ' +\n 'виддекорацииформы виддополненияэлементаформы видизмененияданных видкнопкиформы видпереключателя ' +\n 'видподписейкдиаграмме видполяформы видфлажка влияниеразмеранапузырекдиаграммы горизонтальноеположение ' +\n 'горизонтальноеположениеэлемента группировкаколонок группировкаподчиненныхэлементовформы ' +\n 'группыиэлементы действиеперетаскивания дополнительныйрежимотображения допустимыедействияперетаскивания ' +\n 'интервалмеждуэлементамиформы использованиевывода использованиеполосыпрокрутки ' +\n 'используемоезначениеточкибиржевойдиаграммы историявыборапривводе источникзначенийоситочекдиаграммы ' +\n 'источникзначенияразмерапузырькадиаграммы категориягруппыкоманд максимумсерий начальноеотображениедерева ' +\n 'начальноеотображениесписка обновлениетекстаредактирования ориентациядендрограммы ориентациядиаграммы ' +\n 'ориентацияметокдиаграммы ориентацияметоксводнойдиаграммы ориентацияэлементаформы отображениевдиаграмме ' +\n 'отображениевлегендедиаграммы отображениегруппыкнопок отображениезаголовкашкалыдиаграммы ' +\n 'отображениезначенийсводнойдиаграммы отображениезначенияизмерительнойдиаграммы ' +\n 'отображениеинтерваладиаграммыганта отображениекнопки отображениекнопкивыбора отображениеобсужденийформы ' +\n 'отображениеобычнойгруппы отображениеотрицательныхзначенийпузырьковойдиаграммы отображениепанелипоиска ' +\n 'отображениеподсказки отображениепредупрежденияприредактировании отображениеразметкиполосырегулирования ' +\n 'отображениестраницформы отображениетаблицы отображениетекстазначениядиаграммыганта ' +\n 'отображениеуправленияобычнойгруппы отображениефигурыкнопки палитрацветовдиаграммы поведениеобычнойгруппы ' +\n 'поддержкамасштабадендрограммы поддержкамасштабадиаграммыганта поддержкамасштабасводнойдиаграммы ' +\n 'поисквтаблицепривводе положениезаголовкаэлементаформы положениекартинкикнопкиформы ' +\n 'положениекартинкиэлементаграфическойсхемы положениекоманднойпанелиформы положениекоманднойпанелиэлементаформы ' +\n 'положениеопорнойточкиотрисовки положениеподписейкдиаграмме положениеподписейшкалызначенийизмерительнойдиаграммы ' +\n 'положениесостоянияпросмотра положениестрокипоиска положениетекстасоединительнойлинии положениеуправленияпоиском ' +\n 'положениешкалывремени порядокотображенияточекгоризонтальнойгистограммы порядоксерийвлегендедиаграммы ' +\n 'размеркартинки расположениезаголовкашкалыдиаграммы растягиваниеповертикалидиаграммыганта ' +\n 'режимавтоотображениясостояния режимвводастроктаблицы режимвыборанезаполненного режимвыделениядаты ' +\n 'режимвыделениястрокитаблицы режимвыделениятаблицы режимизмененияразмера режимизменениясвязанногозначения ' +\n 'режимиспользованиядиалогапечати режимиспользованияпараметракоманды режиммасштабированияпросмотра ' +\n 'режимосновногоокнаклиентскогоприложения режимоткрытияокнаформы режимотображениявыделения ' +\n 'режимотображениягеографическойсхемы режимотображениязначенийсерии режимотрисовкисеткиграфическойсхемы ' +\n 'режимполупрозрачностидиаграммы режимпробеловдиаграммы режимразмещениянастранице режимредактированияколонки ' +\n 'режимсглаживаниядиаграммы режимсглаживанияиндикатора режимсписказадач сквозноевыравнивание ' +\n 'сохранениеданныхформывнастройках способзаполнениятекстазаголовкашкалыдиаграммы ' +\n 'способопределенияограничивающегозначениядиаграммы стандартнаягруппакоманд стандартноеоформление ' +\n 'статусоповещенияпользователя стильстрелки типаппроксимациилиниитрендадиаграммы типдиаграммы ' +\n 'типединицышкалывремени типимпортасерийслоягеографическойсхемы типлиниигеографическойсхемы типлиниидиаграммы ' +\n 'типмаркерагеографическойсхемы типмаркерадиаграммы типобластиоформления ' +\n 'типорганизацииисточникаданныхгеографическойсхемы типотображениясериислоягеографическойсхемы ' +\n 'типотображенияточечногообъектагеографическойсхемы типотображенияшкалыэлементалегендыгеографическойсхемы ' +\n 'типпоискаобъектовгеографическойсхемы типпроекциигеографическойсхемы типразмещенияизмерений ' +\n 'типразмещенияреквизитовизмерений типрамкиэлементауправления типсводнойдиаграммы ' +\n 'типсвязидиаграммыганта типсоединениязначенийпосериямдиаграммы типсоединенияточекдиаграммы ' +\n 'типсоединительнойлинии типстороныэлементаграфическойсхемы типформыотчета типшкалырадарнойдиаграммы ' +\n 'факторлиниитрендадиаграммы фигуракнопки фигурыграфическойсхемы фиксациявтаблице форматдняшкалывремени ' +\n 'форматкартинки ширинаподчиненныхэлементовформы ';\n\n // v8 системные перечисления - свойства прикладных объектов ==> class\n var v8_system_enums_objects_properties =\n 'виддвижениябухгалтерии виддвижениянакопления видпериодарегистрарасчета видсчета видточкимаршрутабизнеспроцесса ' +\n 'использованиеагрегатарегистранакопления использованиегруппиэлементов использованиережимапроведения ' +\n 'использованиесреза периодичностьагрегатарегистранакопления режимавтовремя режимзаписидокумента режимпроведениядокумента ';\n\n // v8 системные перечисления - планы обмена ==> class\n var v8_system_enums_exchange_plans =\n 'авторегистрацияизменений допустимыйномерсообщения отправкаэлементаданных получениеэлементаданных ';\n\n // v8 системные перечисления - табличный документ ==> class\n var v8_system_enums_tabular_document =\n 'использованиерасшифровкитабличногодокумента ориентациястраницы положениеитоговколоноксводнойтаблицы ' +\n 'положениеитоговстроксводнойтаблицы положениетекстаотносительнокартинки расположениезаголовкагруппировкитабличногодокумента ' +\n 'способчтениязначенийтабличногодокумента типдвустороннейпечати типзаполненияобластитабличногодокумента ' +\n 'типкурсоровтабличногодокумента типлиниирисункатабличногодокумента типлинииячейкитабличногодокумента ' +\n 'типнаправленияпереходатабличногодокумента типотображениявыделениятабличногодокумента типотображениялинийсводнойтаблицы ' +\n 'типразмещениятекстатабличногодокумента типрисункатабличногодокумента типсмещениятабличногодокумента ' +\n 'типузоратабличногодокумента типфайлатабличногодокумента точностьпечати чередованиерасположениястраниц ';\n\n // v8 системные перечисления - планировщик ==> class\n var v8_system_enums_sheduler =\n 'отображениевремениэлементовпланировщика ';\n\n // v8 системные перечисления - форматированный документ ==> class\n var v8_system_enums_formatted_document =\n 'типфайлаформатированногодокумента ';\n\n // v8 системные перечисления - запрос ==> class\n var v8_system_enums_query =\n 'обходрезультатазапроса типзаписизапроса ';\n\n // v8 системные перечисления - построитель отчета ==> class\n var v8_system_enums_report_builder =\n 'видзаполнениярасшифровкипостроителяотчета типдобавленияпредставлений типизмеренияпостроителяотчета типразмещенияитогов ';\n\n // v8 системные перечисления - работа с файлами ==> class\n var v8_system_enums_files =\n 'доступкфайлу режимдиалогавыборафайла режимоткрытияфайла ';\n\n // v8 системные перечисления - построитель запроса ==> class\n var v8_system_enums_query_builder =\n 'типизмеренияпостроителязапроса ';\n\n // v8 системные перечисления - анализ данных ==> class\n var v8_system_enums_data_analysis =\n 'видданныханализа методкластеризации типединицыинтервалавременианализаданных типзаполнениятаблицырезультатаанализаданных ' +\n 'типиспользованиячисловыхзначенийанализаданных типисточникаданныхпоискаассоциаций типколонкианализаданныхдереворешений ' +\n 'типколонкианализаданныхкластеризация типколонкианализаданныхобщаястатистика типколонкианализаданныхпоискассоциаций ' +\n 'типколонкианализаданныхпоискпоследовательностей типколонкимоделипрогноза типмерырасстоянияанализаданных ' +\n 'типотсеченияправилассоциации типполяанализаданных типстандартизациианализаданных типупорядочиванияправилассоциациианализаданных ' +\n 'типупорядочиванияшаблоновпоследовательностейанализаданных типупрощениядереварешений ';\n\n // v8 системные перечисления - xml, json, xs, dom, xdto, web-сервисы ==> class\n var v8_system_enums_xml_json_xs_dom_xdto_ws =\n 'wsнаправлениепараметра вариантxpathxs вариантзаписидатыjson вариантпростоготипаxs видгруппымоделиxs видфасетаxdto ' +\n 'действиепостроителяdom завершенностьпростоготипаxs завершенностьсоставноготипаxs завершенностьсхемыxs запрещенныеподстановкиxs ' +\n 'исключениягруппподстановкиxs категорияиспользованияатрибутаxs категорияограниченияидентичностиxs категорияограниченияпространствименxs ' +\n 'методнаследованияxs модельсодержимогоxs назначениетипаxml недопустимыеподстановкиxs обработкапробельныхсимволовxs обработкасодержимогоxs ' +\n 'ограничениезначенияxs параметрыотбораузловdom переносстрокjson позициявдокументеdom пробельныесимволыxml типатрибутаxml типзначенияjson ' +\n 'типканоническогоxml типкомпонентыxs типпроверкиxml типрезультатаdomxpath типузлаdom типузлаxml формаxml формапредставленияxs ' +\n 'форматдатыjson экранированиесимволовjson ';\n\n // v8 системные перечисления - система компоновки данных ==> class\n var v8_system_enums_data_composition_system =\n 'видсравнениякомпоновкиданных действиеобработкирасшифровкикомпоновкиданных направлениесортировкикомпоновкиданных ' +\n 'расположениевложенныхэлементоврезультатакомпоновкиданных расположениеитоговкомпоновкиданных расположениегруппировкикомпоновкиданных ' +\n 'расположениеполейгруппировкикомпоновкиданных расположениеполякомпоновкиданных расположениереквизитовкомпоновкиданных ' +\n 'расположениересурсовкомпоновкиданных типбухгалтерскогоостаткакомпоновкиданных типвыводатекстакомпоновкиданных ' +\n 'типгруппировкикомпоновкиданных типгруппыэлементовотборакомпоновкиданных типдополненияпериодакомпоновкиданных ' +\n 'типзаголовкаполейкомпоновкиданных типмакетагруппировкикомпоновкиданных типмакетаобластикомпоновкиданных типостаткакомпоновкиданных ' +\n 'типпериодакомпоновкиданных типразмещениятекстакомпоновкиданных типсвязинаборовданныхкомпоновкиданных типэлементарезультатакомпоновкиданных ' +\n 'расположениелегендыдиаграммыкомпоновкиданных типпримененияотборакомпоновкиданных режимотображенияэлементанастройкикомпоновкиданных ' +\n 'режимотображениянастроеккомпоновкиданных состояниеэлементанастройкикомпоновкиданных способвосстановлениянастроеккомпоновкиданных ' +\n 'режимкомпоновкирезультата использованиепараметракомпоновкиданных автопозицияресурсовкомпоновкиданных '+\n 'вариантиспользованиягруппировкикомпоновкиданных расположениересурсоввдиаграммекомпоновкиданных фиксациякомпоновкиданных ' +\n 'использованиеусловногооформлениякомпоновкиданных ';\n\n // v8 системные перечисления - почта ==> class\n var v8_system_enums_email =\n 'важностьинтернетпочтовогосообщения обработкатекстаинтернетпочтовогосообщения способкодированияинтернетпочтовоговложения ' +\n 'способкодированиянеasciiсимволовинтернетпочтовогосообщения типтекстапочтовогосообщения протоколинтернетпочты ' +\n 'статусразборапочтовогосообщения ';\n\n // v8 системные перечисления - журнал регистрации ==> class\n var v8_system_enums_logbook =\n 'режимтранзакциизаписижурналарегистрации статустранзакциизаписижурналарегистрации уровеньжурналарегистрации ';\n\n // v8 системные перечисления - криптография ==> class\n var v8_system_enums_cryptography =\n 'расположениехранилищасертификатовкриптографии режимвключениясертификатовкриптографии режимпроверкисертификатакриптографии ' +\n 'типхранилищасертификатовкриптографии ';\n\n // v8 системные перечисления - ZIP ==> class\n var v8_system_enums_zip =\n 'кодировкаименфайловвzipфайле методсжатияzip методшифрованияzip режимвосстановленияпутейфайловzip режимобработкиподкаталоговzip ' +\n 'режимсохраненияпутейzip уровеньсжатияzip ';\n\n // v8 системные перечисления - \n // Блокировка данных, Фоновые задания, Автоматизированное тестирование,\n // Доставляемые уведомления, Встроенные покупки, Интернет, Работа с двоичными данными ==> class\n var v8_system_enums_other =\n 'звуковоеоповещение направлениепереходакстроке позициявпотоке порядокбайтов режимблокировкиданных режимуправленияблокировкойданных ' +\n 'сервисвстроенныхпокупок состояниефоновогозадания типподписчикадоставляемыхуведомлений уровеньиспользованиязащищенногосоединенияftp ';\n\n // v8 системные перечисления - схема запроса ==> class\n var v8_system_enums_request_schema =\n 'направлениепорядкасхемызапроса типдополненияпериодамисхемызапроса типконтрольнойточкисхемызапроса типобъединениясхемызапроса ' +\n 'типпараметрадоступнойтаблицысхемызапроса типсоединениясхемызапроса ';\n\n // v8 системные перечисления - свойства объектов метаданных ==> class\n var v8_system_enums_properties_of_metadata_objects =\n 'httpметод автоиспользованиеобщегореквизита автопрефиксномеразадачи вариантвстроенногоязыка видиерархии видрегистранакопления ' +\n 'видтаблицывнешнегоисточникаданных записьдвиженийприпроведении заполнениепоследовательностей индексирование ' +\n 'использованиебазыпланавидоврасчета использованиебыстроговыбора использованиеобщегореквизита использованиеподчинения ' +\n 'использованиеполнотекстовогопоиска использованиеразделяемыхданныхобщегореквизита использованиереквизита ' +\n 'назначениеиспользованияприложения назначениерасширенияконфигурации направлениепередачи обновлениепредопределенныхданных ' +\n 'оперативноепроведение основноепредставлениевидарасчета основноепредставлениевидахарактеристики основноепредставлениезадачи ' +\n 'основноепредставлениепланаобмена основноепредставлениесправочника основноепредставлениесчета перемещениеграницыприпроведении ' +\n 'периодичностьномерабизнеспроцесса периодичностьномерадокумента периодичностьрегистрарасчета периодичностьрегистрасведений ' +\n 'повторноеиспользованиевозвращаемыхзначений полнотекстовыйпоискпривводепостроке принадлежностьобъекта проведение ' +\n 'разделениеаутентификацииобщегореквизита разделениеданныхобщегореквизита разделениерасширенийконфигурацииобщегореквизита '+\n 'режимавтонумерацииобъектов режимзаписирегистра режимиспользованиямодальности ' +\n 'режимиспользованиясинхронныхвызововрасширенийплатформыивнешнихкомпонент режимповторногоиспользованиясеансов ' +\n 'режимполученияданныхвыборапривводепостроке режимсовместимости режимсовместимостиинтерфейса ' +\n 'режимуправленияблокировкойданныхпоумолчанию сериикодовпланавидовхарактеристик сериикодовпланасчетов ' +\n 'сериикодовсправочника созданиепривводе способвыбора способпоискастрокипривводепостроке способредактирования ' +\n 'типданныхтаблицывнешнегоисточникаданных типкодапланавидоврасчета типкодасправочника типмакета типномерабизнеспроцесса ' +\n 'типномерадокумента типномеразадачи типформы удалениедвижений ';\n\n // v8 системные перечисления - разные ==> class\n var v8_system_enums_differents =\n 'важностьпроблемыприменениярасширенияконфигурации вариантинтерфейсаклиентскогоприложения вариантмасштабаформклиентскогоприложения ' +\n 'вариантосновногошрифтаклиентскогоприложения вариантстандартногопериода вариантстандартнойдатыначала видграницы видкартинки ' +\n 'видотображенияполнотекстовогопоиска видрамки видсравнения видцвета видчисловогозначения видшрифта допустимаядлина допустимыйзнак ' +\n 'использованиеbyteordermark использованиеметаданныхполнотекстовогопоиска источникрасширенийконфигурации клавиша кодвозвратадиалога ' +\n 'кодировкаxbase кодировкатекста направлениепоиска направлениесортировки обновлениепредопределенныхданных обновлениеприизмененииданных ' +\n 'отображениепанелиразделов проверказаполнения режимдиалогавопрос режимзапускаклиентскогоприложения режимокругления режимоткрытияформприложения ' +\n 'режимполнотекстовогопоиска скоростьклиентскогосоединения состояниевнешнегоисточникаданных состояниеобновленияконфигурациибазыданных ' +\n 'способвыборасертификатаwindows способкодированиястроки статуссообщения типвнешнейкомпоненты типплатформы типповеденияклавишиenter ' +\n 'типэлементаинформацииовыполненииобновленияконфигурациибазыданных уровеньизоляциитранзакций хешфункция частидаты';\n\n // class: встроенные наборы значений, системные перечисления (содержат дочерние значения, обращения к которым через разыменование)\n var CLASS =\n v8_system_sets_of_values +\n v8_system_enums_interface +\n v8_system_enums_objects_properties +\n v8_system_enums_exchange_plans +\n v8_system_enums_tabular_document +\n v8_system_enums_sheduler +\n v8_system_enums_formatted_document +\n v8_system_enums_query +\n v8_system_enums_report_builder +\n v8_system_enums_files +\n v8_system_enums_query_builder +\n v8_system_enums_data_analysis +\n v8_system_enums_xml_json_xs_dom_xdto_ws +\n v8_system_enums_data_composition_system +\n v8_system_enums_email +\n v8_system_enums_logbook +\n v8_system_enums_cryptography +\n v8_system_enums_zip +\n v8_system_enums_other +\n v8_system_enums_request_schema +\n v8_system_enums_properties_of_metadata_objects +\n v8_system_enums_differents;\n\n // v8 общие объекты (у объектов есть конструктор, экземпляры создаются методом НОВЫЙ) ==> type\n var v8_shared_object =\n 'comобъект ftpсоединение httpзапрос httpсервисответ httpсоединение wsопределения wsпрокси xbase анализданных аннотацияxs ' +\n 'блокировкаданных буфердвоичныхданных включениеxs выражениекомпоновкиданных генераторслучайныхчисел географическаясхема ' +\n 'географическиекоординаты графическаясхема группамоделиxs данныерасшифровкикомпоновкиданных двоичныеданные дендрограмма ' +\n 'диаграмма диаграммаганта диалогвыборафайла диалогвыборацвета диалогвыборашрифта диалограсписаниярегламентногозадания ' +\n 'диалогредактированиястандартногопериода диапазон документdom документhtml документацияxs доставляемоеуведомление ' +\n 'записьdom записьfastinfoset записьhtml записьjson записьxml записьzipфайла записьданных записьтекста записьузловdom ' +\n 'запрос защищенноесоединениеopenssl значенияполейрасшифровкикомпоновкиданных извлечениетекста импортxs интернетпочта ' +\n 'интернетпочтовоесообщение интернетпочтовыйпрофиль интернетпрокси интернетсоединение информациядляприложенияxs ' +\n 'использованиеатрибутаxs использованиесобытияжурналарегистрации источникдоступныхнастроеккомпоновкиданных ' +\n 'итераторузловdom картинка квалификаторыдаты квалификаторыдвоичныхданных квалификаторыстроки квалификаторычисла ' +\n 'компоновщикмакетакомпоновкиданных компоновщикнастроеккомпоновкиданных конструктормакетаоформлениякомпоновкиданных ' +\n 'конструкторнастроеккомпоновкиданных конструкторформатнойстроки линия макеткомпоновкиданных макетобластикомпоновкиданных ' +\n 'макетоформлениякомпоновкиданных маскаxs менеджеркриптографии наборсхемxml настройкикомпоновкиданных настройкисериализацииjson ' +\n 'обработкакартинок обработкарасшифровкикомпоновкиданных обходдереваdom объявлениеатрибутаxs объявлениенотацииxs ' +\n 'объявлениеэлементаxs описаниеиспользованиясобытиядоступжурналарегистрации ' +\n 'описаниеиспользованиясобытияотказвдоступежурналарегистрации описаниеобработкирасшифровкикомпоновкиданных ' +\n 'описаниепередаваемогофайла описаниетипов определениегруппыатрибутовxs определениегруппымоделиxs ' +\n 'определениеограниченияидентичностиxs определениепростоготипаxs определениесоставноготипаxs определениетипадокументаdom ' +\n 'определенияxpathxs отборкомпоновкиданных пакетотображаемыхдокументов параметрвыбора параметркомпоновкиданных ' +\n 'параметрызаписиjson параметрызаписиxml параметрычтенияxml переопределениеxs планировщик полеанализаданных ' +\n 'полекомпоновкиданных построительdom построительзапроса построительотчета построительотчетаанализаданных ' +\n 'построительсхемxml поток потоквпамяти почта почтовоесообщение преобразованиеxsl преобразованиекканоническомуxml ' +\n 'процессорвыводарезультатакомпоновкиданныхвколлекциюзначений процессорвыводарезультатакомпоновкиданныхвтабличныйдокумент ' +\n 'процессоркомпоновкиданных разыменовательпространствименdom рамка расписаниерегламентногозадания расширенноеимяxml ' +\n 'результатчтенияданных своднаядиаграмма связьпараметравыбора связьпотипу связьпотипукомпоновкиданных сериализаторxdto ' +\n 'сертификатклиентаwindows сертификатклиентафайл сертификаткриптографии сертификатыудостоверяющихцентровwindows ' +\n 'сертификатыудостоверяющихцентровфайл сжатиеданных системнаяинформация сообщениепользователю сочетаниеклавиш ' +\n 'сравнениезначений стандартнаядатаначала стандартныйпериод схемаxml схемакомпоновкиданных табличныйдокумент ' +\n 'текстовыйдокумент тестируемоеприложение типданныхxml уникальныйидентификатор фабрикаxdto файл файловыйпоток ' +\n 'фасетдлиныxs фасетколичестваразрядовдробнойчастиxs фасетмаксимальноговключающегозначенияxs ' +\n 'фасетмаксимальногоисключающегозначенияxs фасетмаксимальнойдлиныxs фасетминимальноговключающегозначенияxs ' +\n 'фасетминимальногоисключающегозначенияxs фасетминимальнойдлиныxs фасетобразцаxs фасетобщегоколичестваразрядовxs ' +\n 'фасетперечисленияxs фасетпробельныхсимволовxs фильтрузловdom форматированнаястрока форматированныйдокумент ' +\n 'фрагментxs хешированиеданных хранилищезначения цвет чтениеfastinfoset чтениеhtml чтениеjson чтениеxml чтениеzipфайла ' +\n 'чтениеданных чтениетекста чтениеузловdom шрифт элементрезультатакомпоновкиданных ';\n\n // v8 универсальные коллекции значений ==> type\n var v8_universal_collection =\n 'comsafearray деревозначений массив соответствие списокзначений структура таблицазначений фиксированнаяструктура ' +\n 'фиксированноесоответствие фиксированныймассив ';\n\n // type : встроенные типы\n var TYPE =\n v8_shared_object +\n v8_universal_collection;\n\n // literal : примитивные типы\n var LITERAL = 'null истина ложь неопределено';\n \n // number : числа\n var NUMBERS = hljs.inherit(hljs.NUMBER_MODE);\n\n // string : строки\n var STRINGS = {\n className: 'string',\n begin: '\"|\\\\|', end: '\"|$',\n contains: [{begin: '\"\"'}]\n };\n\n // number : даты\n var DATE = {\n begin: \"'\", end: \"'\", excludeBegin: true, excludeEnd: true,\n contains: [\n {\n className: 'number',\n begin: '\\\\d{4}([\\\\.\\\\\\\\/:-]?\\\\d{2}){0,5}'\n }\n ]\n };\n \n // comment : комментарии\n var COMMENTS = hljs.inherit(hljs.C_LINE_COMMENT_MODE);\n \n // meta : инструкции препроцессора, директивы компиляции\n var META = {\n className: 'meta',\n lexemes: UNDERSCORE_IDENT_RE,\n begin: '#|&', end: '$',\n keywords: {'meta-keyword': KEYWORD + METAKEYWORD},\n contains: [\n COMMENTS\n ]\n };\n \n // symbol : метка goto\n var SYMBOL = {\n className: 'symbol',\n begin: '~', end: ';|:', excludeEnd: true\n }; \n \n // function : объявление процедур и функций\n var FUNCTION = {\n className: 'function',\n lexemes: UNDERSCORE_IDENT_RE,\n variants: [\n {begin: 'процедура|функция', end: '\\\\)', keywords: 'процедура функция'},\n {begin: 'конецпроцедуры|конецфункции', keywords: 'конецпроцедуры конецфункции'}\n ],\n contains: [\n {\n begin: '\\\\(', end: '\\\\)', endsParent : true,\n contains: [\n {\n className: 'params',\n lexemes: UNDERSCORE_IDENT_RE,\n begin: UNDERSCORE_IDENT_RE, end: ',', excludeEnd: true, endsWithParent: true,\n keywords: {\n keyword: 'знач',\n literal: LITERAL\n },\n contains: [\n NUMBERS,\n STRINGS,\n DATE\n ]\n },\n COMMENTS\n ]\n },\n hljs.inherit(hljs.TITLE_MODE, {begin: UNDERSCORE_IDENT_RE})\n ]\n };\n\n return {\n case_insensitive: true,\n lexemes: UNDERSCORE_IDENT_RE,\n keywords: {\n keyword: KEYWORD,\n built_in: BUILTIN,\n class: CLASS,\n type: TYPE,\n literal: LITERAL\n },\n contains: [\n META,\n FUNCTION,\n COMMENTS,\n SYMBOL,\n NUMBERS,\n STRINGS,\n DATE\n ] \n }\n});\n\nhljs.registerLanguage('abnf', function(hljs) {\n var regexes = {\n ruleDeclaration: \"^[a-zA-Z][a-zA-Z0-9-]*\",\n unexpectedChars: \"[!@#$^&',?+~`|:]\"\n };\n\n var keywords = [\n \"ALPHA\",\n \"BIT\",\n \"CHAR\",\n \"CR\",\n \"CRLF\",\n \"CTL\",\n \"DIGIT\",\n \"DQUOTE\",\n \"HEXDIG\",\n \"HTAB\",\n \"LF\",\n \"LWSP\",\n \"OCTET\",\n \"SP\",\n \"VCHAR\",\n \"WSP\"\n ];\n\n var commentMode = hljs.COMMENT(\";\", \"$\");\n\n var terminalBinaryMode = {\n className: \"symbol\",\n begin: /%b[0-1]+(-[0-1]+|(\\.[0-1]+)+){0,1}/\n };\n\n var terminalDecimalMode = {\n className: \"symbol\",\n begin: /%d[0-9]+(-[0-9]+|(\\.[0-9]+)+){0,1}/\n };\n\n var terminalHexadecimalMode = {\n className: \"symbol\",\n begin: /%x[0-9A-F]+(-[0-9A-F]+|(\\.[0-9A-F]+)+){0,1}/,\n };\n\n var caseSensitivityIndicatorMode = {\n className: \"symbol\",\n begin: /%[si]/\n };\n\n var ruleDeclarationMode = {\n begin: regexes.ruleDeclaration + '\\\\s*=',\n returnBegin: true,\n end: /=/,\n relevance: 0,\n contains: [{className: \"attribute\", begin: regexes.ruleDeclaration}]\n };\n\n return {\n illegal: regexes.unexpectedChars,\n keywords: keywords.join(\" \"),\n contains: [\n ruleDeclarationMode,\n commentMode,\n terminalBinaryMode,\n terminalDecimalMode,\n terminalHexadecimalMode,\n caseSensitivityIndicatorMode,\n hljs.QUOTE_STRING_MODE,\n hljs.NUMBER_MODE\n ]\n };\n});\n\nhljs.registerLanguage('accesslog', function(hljs) {\n return {\n contains: [\n // IP\n {\n className: 'number',\n begin: '\\\\b\\\\d{1,3}\\\\.\\\\d{1,3}\\\\.\\\\d{1,3}\\\\.\\\\d{1,3}(:\\\\d{1,5})?\\\\b'\n },\n // Other numbers\n {\n className: 'number',\n begin: '\\\\b\\\\d+\\\\b',\n relevance: 0\n },\n // Requests\n {\n className: 'string',\n begin: '\"(GET|POST|HEAD|PUT|DELETE|CONNECT|OPTIONS|PATCH|TRACE)', end: '\"',\n keywords: 'GET POST HEAD PUT DELETE CONNECT OPTIONS PATCH TRACE',\n illegal: '\\\\n',\n relevance: 10\n },\n // Dates\n {\n className: 'string',\n begin: /\\[/, end: /\\]/,\n illegal: '\\\\n'\n },\n // Strings\n {\n className: 'string',\n begin: '\"', end: '\"',\n illegal: '\\\\n'\n }\n ]\n };\n});\n\nhljs.registerLanguage('actionscript', function(hljs) {\n var IDENT_RE = '[a-zA-Z_$][a-zA-Z0-9_$]*';\n var IDENT_FUNC_RETURN_TYPE_RE = '([*]|[a-zA-Z_$][a-zA-Z0-9_$]*)';\n\n var AS3_REST_ARG_MODE = {\n className: 'rest_arg',\n begin: '[.]{3}', end: IDENT_RE,\n relevance: 10\n };\n\n return {\n aliases: ['as'],\n keywords: {\n keyword: 'as break case catch class const continue default delete do dynamic each ' +\n 'else extends final finally for function get if implements import in include ' +\n 'instanceof interface internal is namespace native new override package private ' +\n 'protected public return set static super switch this throw try typeof use var void ' +\n 'while with',\n literal: 'true false null undefined'\n },\n contains: [\n hljs.APOS_STRING_MODE,\n hljs.QUOTE_STRING_MODE,\n hljs.C_LINE_COMMENT_MODE,\n hljs.C_BLOCK_COMMENT_MODE,\n hljs.C_NUMBER_MODE,\n {\n className: 'class',\n beginKeywords: 'package', end: '{',\n contains: [hljs.TITLE_MODE]\n },\n {\n className: 'class',\n beginKeywords: 'class interface', end: '{', excludeEnd: true,\n contains: [\n {\n beginKeywords: 'extends implements'\n },\n hljs.TITLE_MODE\n ]\n },\n {\n className: 'meta',\n beginKeywords: 'import include', end: ';',\n keywords: {'meta-keyword': 'import include'}\n },\n {\n className: 'function',\n beginKeywords: 'function', end: '[{;]', excludeEnd: true,\n illegal: '\\\\S',\n contains: [\n hljs.TITLE_MODE,\n {\n className: 'params',\n begin: '\\\\(', end: '\\\\)',\n contains: [\n hljs.APOS_STRING_MODE,\n hljs.QUOTE_STRING_MODE,\n hljs.C_LINE_COMMENT_MODE,\n hljs.C_BLOCK_COMMENT_MODE,\n AS3_REST_ARG_MODE\n ]\n },\n {\n begin: ':\\\\s*' + IDENT_FUNC_RETURN_TYPE_RE\n }\n ]\n },\n hljs.METHOD_GUARD\n ],\n illegal: /#/\n };\n});\n\nhljs.registerLanguage('ada', // We try to support full Ada2012\n//\n// We highlight all appearances of types, keywords, literals (string, char, number, bool)\n// and titles (user defined function/procedure/package)\n// CSS classes are set accordingly\n//\n// Languages causing problems for language detection:\n// xml (broken by Foo : Bar type), elm (broken by Foo : Bar type), vbscript-html (broken by body keyword)\n// sql (ada default.txt has a lot of sql keywords)\n\nfunction(hljs) {\n // Regular expression for Ada numeric literals.\n // stolen form the VHDL highlighter\n\n // Decimal literal:\n var INTEGER_RE = '\\\\d(_|\\\\d)*';\n var EXPONENT_RE = '[eE][-+]?' + INTEGER_RE;\n var DECIMAL_LITERAL_RE = INTEGER_RE + '(\\\\.' + INTEGER_RE + ')?' + '(' + EXPONENT_RE + ')?';\n\n // Based literal:\n var BASED_INTEGER_RE = '\\\\w+';\n var BASED_LITERAL_RE = INTEGER_RE + '#' + BASED_INTEGER_RE + '(\\\\.' + BASED_INTEGER_RE + ')?' + '#' + '(' + EXPONENT_RE + ')?';\n\n var NUMBER_RE = '\\\\b(' + BASED_LITERAL_RE + '|' + DECIMAL_LITERAL_RE + ')';\n\n // Identifier regex\n var ID_REGEX = '[A-Za-z](_?[A-Za-z0-9.])*';\n\n // bad chars, only allowed in literals\n var BAD_CHARS = '[]{}%#\\'\\\"'\n\n // Ada doesn't have block comments, only line comments\n var COMMENTS = hljs.COMMENT('--', '$');\n\n // variable declarations of the form\n // Foo : Bar := Baz;\n // where only Bar will be highlighted\n var VAR_DECLS = {\n // TODO: These spaces are not required by the Ada syntax\n // however, I have yet to see handwritten Ada code where\n // someone does not put spaces around :\n begin: '\\\\s+:\\\\s+', end: '\\\\s*(:=|;|\\\\)|=>|$)',\n // endsWithParent: true,\n // returnBegin: true,\n illegal: BAD_CHARS,\n contains: [\n {\n // workaround to avoid highlighting\n // named loops and declare blocks\n beginKeywords: 'loop for declare others',\n endsParent: true,\n },\n {\n // properly highlight all modifiers\n className: 'keyword',\n beginKeywords: 'not null constant access function procedure in out aliased exception'\n },\n {\n className: 'type',\n begin: ID_REGEX,\n endsParent: true,\n relevance: 0,\n }\n ]\n };\n\n return {\n case_insensitive: true,\n keywords: {\n keyword:\n 'abort else new return abs elsif not reverse abstract end ' +\n 'accept entry select access exception of separate aliased exit or some ' +\n 'all others subtype and for out synchronized array function overriding ' +\n 'at tagged generic package task begin goto pragma terminate ' +\n 'body private then if procedure type case in protected constant interface ' +\n 'is raise use declare range delay limited record when delta loop rem while ' +\n 'digits renames with do mod requeue xor',\n literal:\n 'True False',\n },\n contains: [\n COMMENTS,\n // strings \"foobar\"\n {\n className: 'string',\n begin: /\"/, end: /\"/,\n contains: [{begin: /\"\"/, relevance: 0}]\n },\n // characters ''\n {\n // character literals always contain one char\n className: 'string',\n begin: /'.'/\n },\n {\n // number literals\n className: 'number',\n begin: NUMBER_RE,\n relevance: 0\n },\n {\n // Attributes\n className: 'symbol',\n begin: \"'\" + ID_REGEX,\n },\n {\n // package definition, maybe inside generic\n className: 'title',\n begin: '(\\\\bwith\\\\s+)?(\\\\bprivate\\\\s+)?\\\\bpackage\\\\s+(\\\\bbody\\\\s+)?', end: '(is|$)',\n keywords: 'package body',\n excludeBegin: true,\n excludeEnd: true,\n illegal: BAD_CHARS\n },\n {\n // function/procedure declaration/definition\n // maybe inside generic\n begin: '(\\\\b(with|overriding)\\\\s+)?\\\\b(function|procedure)\\\\s+', end: '(\\\\bis|\\\\bwith|\\\\brenames|\\\\)\\\\s*;)',\n keywords: 'overriding function procedure with is renames return',\n // we need to re-match the 'function' keyword, so that\n // the title mode below matches only exactly once\n returnBegin: true,\n contains:\n [\n COMMENTS,\n {\n // name of the function/procedure\n className: 'title',\n begin: '(\\\\bwith\\\\s+)?\\\\b(function|procedure)\\\\s+',\n end: '(\\\\(|\\\\s+|$)',\n excludeBegin: true,\n excludeEnd: true,\n illegal: BAD_CHARS\n },\n // 'self'\n // // parameter types\n VAR_DECLS,\n {\n // return type\n className: 'type',\n begin: '\\\\breturn\\\\s+', end: '(\\\\s+|;|$)',\n keywords: 'return',\n excludeBegin: true,\n excludeEnd: true,\n // we are done with functions\n endsParent: true,\n illegal: BAD_CHARS\n\n },\n ]\n },\n {\n // new type declarations\n // maybe inside generic\n className: 'type',\n begin: '\\\\b(sub)?type\\\\s+', end: '\\\\s+',\n keywords: 'type',\n excludeBegin: true,\n illegal: BAD_CHARS\n },\n\n // see comment above the definition\n VAR_DECLS,\n\n // no markup\n // relevance boosters for small snippets\n // {begin: '\\\\s*=>\\\\s*'},\n // {begin: '\\\\s*:=\\\\s*'},\n // {begin: '\\\\s+:=\\\\s+'},\n ]\n };\n});\n\nhljs.registerLanguage('apache', function(hljs) {\n var NUMBER = {className: 'number', begin: '[\\\\$%]\\\\d+'};\n return {\n aliases: ['apacheconf'],\n case_insensitive: true,\n contains: [\n hljs.HASH_COMMENT_MODE,\n {className: 'section', begin: ''},\n {\n className: 'attribute',\n begin: /\\w+/,\n relevance: 0,\n // keywords aren’t needed for highlighting per se, they only boost relevance\n // for a very generally defined mode (starts with a word, ends with line-end\n keywords: {\n nomarkup:\n 'order deny allow setenv rewriterule rewriteengine rewritecond documentroot ' +\n 'sethandler errordocument loadmodule options header listen serverroot ' +\n 'servername'\n },\n starts: {\n end: /$/,\n relevance: 0,\n keywords: {\n literal: 'on off all'\n },\n contains: [\n {\n className: 'meta',\n begin: '\\\\s\\\\[', end: '\\\\]$'\n },\n {\n className: 'variable',\n begin: '[\\\\$%]\\\\{', end: '\\\\}',\n contains: ['self', NUMBER]\n },\n NUMBER,\n hljs.QUOTE_STRING_MODE\n ]\n }\n }\n ],\n illegal: /\\S/\n };\n});\n\nhljs.registerLanguage('applescript', function(hljs) {\n var STRING = hljs.inherit(hljs.QUOTE_STRING_MODE, {illegal: ''});\n var PARAMS = {\n className: 'params',\n begin: '\\\\(', end: '\\\\)',\n contains: ['self', hljs.C_NUMBER_MODE, STRING]\n };\n var COMMENT_MODE_1 = hljs.COMMENT('--', '$');\n var COMMENT_MODE_2 = hljs.COMMENT(\n '\\\\(\\\\*',\n '\\\\*\\\\)',\n {\n contains: ['self', COMMENT_MODE_1] //allow nesting\n }\n );\n var COMMENTS = [\n COMMENT_MODE_1,\n COMMENT_MODE_2,\n hljs.HASH_COMMENT_MODE\n ];\n\n return {\n aliases: ['osascript'],\n keywords: {\n keyword:\n 'about above after against and around as at back before beginning ' +\n 'behind below beneath beside between but by considering ' +\n 'contain contains continue copy div does eighth else end equal ' +\n 'equals error every exit fifth first for fourth from front ' +\n 'get given global if ignoring in into is it its last local me ' +\n 'middle mod my ninth not of on onto or over prop property put ref ' +\n 'reference repeat returning script second set seventh since ' +\n 'sixth some tell tenth that the|0 then third through thru ' +\n 'timeout times to transaction try until where while whose with ' +\n 'without',\n literal:\n 'AppleScript false linefeed return pi quote result space tab true',\n built_in:\n 'alias application boolean class constant date file integer list ' +\n 'number real record string text ' +\n 'activate beep count delay launch log offset read round ' +\n 'run say summarize write ' +\n 'character characters contents day frontmost id item length ' +\n 'month name paragraph paragraphs rest reverse running time version ' +\n 'weekday word words year'\n },\n contains: [\n STRING,\n hljs.C_NUMBER_MODE,\n {\n className: 'built_in',\n begin:\n '\\\\b(clipboard info|the clipboard|info for|list (disks|folder)|' +\n 'mount volume|path to|(close|open for) access|(get|set) eof|' +\n 'current date|do shell script|get volume settings|random number|' +\n 'set volume|system attribute|system info|time to GMT|' +\n '(load|run|store) script|scripting components|' +\n 'ASCII (character|number)|localized string|' +\n 'choose (application|color|file|file name|' +\n 'folder|from list|remote application|URL)|' +\n 'display (alert|dialog))\\\\b|^\\\\s*return\\\\b'\n },\n {\n className: 'literal',\n begin:\n '\\\\b(text item delimiters|current application|missing value)\\\\b'\n },\n {\n className: 'keyword',\n begin:\n '\\\\b(apart from|aside from|instead of|out of|greater than|' +\n \"isn't|(doesn't|does not) (equal|come before|come after|contain)|\" +\n '(greater|less) than( or equal)?|(starts?|ends|begins?) with|' +\n 'contained by|comes (before|after)|a (ref|reference)|POSIX file|' +\n 'POSIX path|(date|time) string|quoted form)\\\\b'\n },\n {\n beginKeywords: 'on',\n illegal: '[${=;\\\\n]',\n contains: [hljs.UNDERSCORE_TITLE_MODE, PARAMS]\n }\n ].concat(COMMENTS),\n illegal: '//|->|=>|\\\\[\\\\['\n };\n});\n\nhljs.registerLanguage('cpp', function(hljs) {\n var CPP_PRIMITIVE_TYPES = {\n className: 'keyword',\n begin: '\\\\b[a-z\\\\d_]*_t\\\\b'\n };\n\n var STRINGS = {\n className: 'string',\n variants: [\n {\n begin: '(u8?|U)?L?\"', end: '\"',\n illegal: '\\\\n',\n contains: [hljs.BACKSLASH_ESCAPE]\n },\n {\n begin: '(u8?|U)?R\"', end: '\"',\n contains: [hljs.BACKSLASH_ESCAPE]\n },\n {\n begin: '\\'\\\\\\\\?.', end: '\\'',\n illegal: '.'\n }\n ]\n };\n\n var NUMBERS = {\n className: 'number',\n variants: [\n { begin: '\\\\b(0b[01\\']+)' },\n { begin: '(-?)\\\\b([\\\\d\\']+(\\\\.[\\\\d\\']*)?|\\\\.[\\\\d\\']+)(u|U|l|L|ul|UL|f|F|b|B)' },\n { begin: '(-?)(\\\\b0[xX][a-fA-F0-9\\']+|(\\\\b[\\\\d\\']+(\\\\.[\\\\d\\']*)?|\\\\.[\\\\d\\']+)([eE][-+]?[\\\\d\\']+)?)' }\n ],\n relevance: 0\n };\n\n var PREPROCESSOR = {\n className: 'meta',\n begin: /#\\s*[a-z]+\\b/, end: /$/,\n keywords: {\n 'meta-keyword':\n 'if else elif endif define undef warning error line ' +\n 'pragma ifdef ifndef include'\n },\n contains: [\n {\n begin: /\\\\\\n/, relevance: 0\n },\n hljs.inherit(STRINGS, {className: 'meta-string'}),\n {\n className: 'meta-string',\n begin: /<[^\\n>]*>/, end: /$/,\n illegal: '\\\\n',\n },\n hljs.C_LINE_COMMENT_MODE,\n hljs.C_BLOCK_COMMENT_MODE\n ]\n };\n\n var FUNCTION_TITLE = hljs.IDENT_RE + '\\\\s*\\\\(';\n\n var CPP_KEYWORDS = {\n keyword: 'int float while private char catch import module export virtual operator sizeof ' +\n 'dynamic_cast|10 typedef const_cast|10 const for static_cast|10 union namespace ' +\n 'unsigned long volatile static protected bool template mutable if public friend ' +\n 'do goto auto void enum else break extern using asm case typeid ' +\n 'short reinterpret_cast|10 default double register explicit signed typename try this ' +\n 'switch continue inline delete alignof constexpr decltype ' +\n 'noexcept static_assert thread_local restrict _Bool complex _Complex _Imaginary ' +\n 'atomic_bool atomic_char atomic_schar ' +\n 'atomic_uchar atomic_short atomic_ushort atomic_int atomic_uint atomic_long atomic_ulong atomic_llong ' +\n 'atomic_ullong new throw return ' +\n 'and or not',\n built_in: 'std string cin cout cerr clog stdin stdout stderr stringstream istringstream ostringstream ' +\n 'auto_ptr deque list queue stack vector map set bitset multiset multimap unordered_set ' +\n 'unordered_map unordered_multiset unordered_multimap array shared_ptr abort abs acos ' +\n 'asin atan2 atan calloc ceil cosh cos exit exp fabs floor fmod fprintf fputs free frexp ' +\n 'fscanf isalnum isalpha iscntrl isdigit isgraph islower isprint ispunct isspace isupper ' +\n 'isxdigit tolower toupper labs ldexp log10 log malloc realloc memchr memcmp memcpy memset modf pow ' +\n 'printf putchar puts scanf sinh sin snprintf sprintf sqrt sscanf strcat strchr strcmp ' +\n 'strcpy strcspn strlen strncat strncmp strncpy strpbrk strrchr strspn strstr tanh tan ' +\n 'vfprintf vprintf vsprintf endl initializer_list unique_ptr',\n literal: 'true false nullptr NULL'\n };\n\n var EXPRESSION_CONTAINS = [\n CPP_PRIMITIVE_TYPES,\n hljs.C_LINE_COMMENT_MODE,\n hljs.C_BLOCK_COMMENT_MODE,\n NUMBERS,\n STRINGS\n ];\n\n return {\n aliases: ['c', 'cc', 'h', 'c++', 'h++', 'hpp'],\n keywords: CPP_KEYWORDS,\n illegal: '',\n keywords: CPP_KEYWORDS,\n contains: ['self', CPP_PRIMITIVE_TYPES]\n },\n {\n begin: hljs.IDENT_RE + '::',\n keywords: CPP_KEYWORDS\n },\n {\n // This mode covers expression context where we can't expect a function\n // definition and shouldn't highlight anything that looks like one:\n // `return some()`, `else if()`, `(x*sum(1, 2))`\n variants: [\n {begin: /=/, end: /;/},\n {begin: /\\(/, end: /\\)/},\n {beginKeywords: 'new throw return else', end: /;/}\n ],\n keywords: CPP_KEYWORDS,\n contains: EXPRESSION_CONTAINS.concat([\n {\n begin: /\\(/, end: /\\)/,\n keywords: CPP_KEYWORDS,\n contains: EXPRESSION_CONTAINS.concat(['self']),\n relevance: 0\n }\n ]),\n relevance: 0\n },\n {\n className: 'function',\n begin: '(' + hljs.IDENT_RE + '[\\\\*&\\\\s]+)+' + FUNCTION_TITLE,\n returnBegin: true, end: /[{;=]/,\n excludeEnd: true,\n keywords: CPP_KEYWORDS,\n illegal: /[^\\w\\s\\*&]/,\n contains: [\n {\n begin: FUNCTION_TITLE, returnBegin: true,\n contains: [hljs.TITLE_MODE],\n relevance: 0\n },\n {\n className: 'params',\n begin: /\\(/, end: /\\)/,\n keywords: CPP_KEYWORDS,\n relevance: 0,\n contains: [\n hljs.C_LINE_COMMENT_MODE,\n hljs.C_BLOCK_COMMENT_MODE,\n STRINGS,\n NUMBERS,\n CPP_PRIMITIVE_TYPES\n ]\n },\n hljs.C_LINE_COMMENT_MODE,\n hljs.C_BLOCK_COMMENT_MODE,\n PREPROCESSOR\n ]\n },\n {\n className: 'class',\n beginKeywords: 'class struct', end: /[{;:]/,\n contains: [\n {begin: //, contains: ['self']}, // skip generic stuff\n hljs.TITLE_MODE\n ]\n }\n ]),\n exports: {\n preprocessor: PREPROCESSOR,\n strings: STRINGS,\n keywords: CPP_KEYWORDS\n }\n };\n});\n\nhljs.registerLanguage('arduino', function(hljs) {\n var CPP = hljs.getLanguage('cpp').exports;\n\treturn {\n keywords: {\n keyword:\n 'boolean byte word string String array ' + CPP.keywords.keyword,\n built_in:\n 'setup loop while catch for if do goto try switch case else ' +\n 'default break continue return ' +\n 'KeyboardController MouseController SoftwareSerial ' +\n 'EthernetServer EthernetClient LiquidCrystal ' +\n 'RobotControl GSMVoiceCall EthernetUDP EsploraTFT ' +\n 'HttpClient RobotMotor WiFiClient GSMScanner ' +\n 'FileSystem Scheduler GSMServer YunClient YunServer ' +\n 'IPAddress GSMClient GSMModem Keyboard Ethernet ' +\n 'Console GSMBand Esplora Stepper Process ' +\n 'WiFiUDP GSM_SMS Mailbox USBHost Firmata PImage ' +\n 'Client Server GSMPIN FileIO Bridge Serial ' +\n 'EEPROM Stream Mouse Audio Servo File Task ' +\n 'GPRS WiFi Wire TFT GSM SPI SD ' +\n 'runShellCommandAsynchronously analogWriteResolution ' +\n 'retrieveCallingNumber printFirmwareVersion ' +\n 'analogReadResolution sendDigitalPortPair ' +\n 'noListenOnLocalhost readJoystickButton setFirmwareVersion ' +\n 'readJoystickSwitch scrollDisplayRight getVoiceCallStatus ' +\n 'scrollDisplayLeft writeMicroseconds delayMicroseconds ' +\n 'beginTransmission getSignalStrength runAsynchronously ' +\n 'getAsynchronously listenOnLocalhost getCurrentCarrier ' +\n 'readAccelerometer messageAvailable sendDigitalPorts ' +\n 'lineFollowConfig countryNameWrite runShellCommand ' +\n 'readStringUntil rewindDirectory readTemperature ' +\n 'setClockDivider readLightSensor endTransmission ' +\n 'analogReference detachInterrupt countryNameRead ' +\n 'attachInterrupt encryptionType readBytesUntil ' +\n 'robotNameWrite readMicrophone robotNameRead cityNameWrite ' +\n 'userNameWrite readJoystickY readJoystickX mouseReleased ' +\n 'openNextFile scanNetworks noInterrupts digitalWrite ' +\n 'beginSpeaker mousePressed isActionDone mouseDragged ' +\n 'displayLogos noAutoscroll addParameter remoteNumber ' +\n 'getModifiers keyboardRead userNameRead waitContinue ' +\n 'processInput parseCommand printVersion readNetworks ' +\n 'writeMessage blinkVersion cityNameRead readMessage ' +\n 'setDataMode parsePacket isListening setBitOrder ' +\n 'beginPacket isDirectory motorsWrite drawCompass ' +\n 'digitalRead clearScreen serialEvent rightToLeft ' +\n 'setTextSize leftToRight requestFrom keyReleased ' +\n 'compassRead analogWrite interrupts WiFiServer ' +\n 'disconnect playMelody parseFloat autoscroll ' +\n 'getPINUsed setPINUsed setTimeout sendAnalog ' +\n 'readSlider analogRead beginWrite createChar ' +\n 'motorsStop keyPressed tempoWrite readButton ' +\n 'subnetMask debugPrint macAddress writeGreen ' +\n 'randomSeed attachGPRS readString sendString ' +\n 'remotePort releaseAll mouseMoved background ' +\n 'getXChange getYChange answerCall getResult ' +\n 'voiceCall endPacket constrain getSocket writeJSON ' +\n 'getButton available connected findUntil readBytes ' +\n 'exitValue readGreen writeBlue startLoop IPAddress ' +\n 'isPressed sendSysex pauseMode gatewayIP setCursor ' +\n 'getOemKey tuneWrite noDisplay loadImage switchPIN ' +\n 'onRequest onReceive changePIN playFile noBuffer ' +\n 'parseInt overflow checkPIN knobRead beginTFT ' +\n 'bitClear updateIR bitWrite position writeRGB ' +\n 'highByte writeRed setSpeed readBlue noStroke ' +\n 'remoteIP transfer shutdown hangCall beginSMS ' +\n 'endWrite attached maintain noCursor checkReg ' +\n 'checkPUK shiftOut isValid shiftIn pulseIn ' +\n 'connect println localIP pinMode getIMEI ' +\n 'display noBlink process getBand running beginSD ' +\n 'drawBMP lowByte setBand release bitRead prepare ' +\n 'pointTo readRed setMode noFill remove listen ' +\n 'stroke detach attach noTone exists buffer ' +\n 'height bitSet circle config cursor random ' +\n 'IRread setDNS endSMS getKey micros ' +\n 'millis begin print write ready flush width ' +\n 'isPIN blink clear press mkdir rmdir close ' +\n 'point yield image BSSID click delay ' +\n 'read text move peek beep rect line open ' +\n 'seek fill size turn stop home find ' +\n 'step tone sqrt RSSI SSID ' +\n 'end bit tan cos sin pow map abs max ' +\n 'min get run put',\n literal:\n 'DIGITAL_MESSAGE FIRMATA_STRING ANALOG_MESSAGE ' +\n 'REPORT_DIGITAL REPORT_ANALOG INPUT_PULLUP ' +\n 'SET_PIN_MODE INTERNAL2V56 SYSTEM_RESET LED_BUILTIN ' +\n 'INTERNAL1V1 SYSEX_START INTERNAL EXTERNAL ' +\n 'DEFAULT OUTPUT INPUT HIGH LOW'\n },\n contains: [\n CPP.preprocessor,\n hljs.C_LINE_COMMENT_MODE,\n hljs.C_BLOCK_COMMENT_MODE,\n hljs.APOS_STRING_MODE,\n hljs.QUOTE_STRING_MODE,\n hljs.C_NUMBER_MODE\n ]\n };\n});\n\nhljs.registerLanguage('armasm', function(hljs) {\n //local labels: %?[FB]?[AT]?\\d{1,2}\\w+\n return {\n case_insensitive: true,\n aliases: ['arm'],\n lexemes: '\\\\.?' + hljs.IDENT_RE,\n keywords: {\n meta:\n //GNU preprocs\n '.2byte .4byte .align .ascii .asciz .balign .byte .code .data .else .end .endif .endm .endr .equ .err .exitm .extern .global .hword .if .ifdef .ifndef .include .irp .long .macro .rept .req .section .set .skip .space .text .word .arm .thumb .code16 .code32 .force_thumb .thumb_func .ltorg '+\n //ARM directives\n 'ALIAS ALIGN ARM AREA ASSERT ATTR CN CODE CODE16 CODE32 COMMON CP DATA DCB DCD DCDU DCDO DCFD DCFDU DCI DCQ DCQU DCW DCWU DN ELIF ELSE END ENDFUNC ENDIF ENDP ENTRY EQU EXPORT EXPORTAS EXTERN FIELD FILL FUNCTION GBLA GBLL GBLS GET GLOBAL IF IMPORT INCBIN INCLUDE INFO KEEP LCLA LCLL LCLS LTORG MACRO MAP MEND MEXIT NOFP OPT PRESERVE8 PROC QN READONLY RELOC REQUIRE REQUIRE8 RLIST FN ROUT SETA SETL SETS SN SPACE SUBT THUMB THUMBX TTL WHILE WEND ',\n built_in:\n 'r0 r1 r2 r3 r4 r5 r6 r7 r8 r9 r10 r11 r12 r13 r14 r15 '+ //standard registers\n 'pc lr sp ip sl sb fp '+ //typical regs plus backward compatibility\n 'a1 a2 a3 a4 v1 v2 v3 v4 v5 v6 v7 v8 f0 f1 f2 f3 f4 f5 f6 f7 '+ //more regs and fp\n 'p0 p1 p2 p3 p4 p5 p6 p7 p8 p9 p10 p11 p12 p13 p14 p15 '+ //coprocessor regs\n 'c0 c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 c14 c15 '+ //more coproc\n 'q0 q1 q2 q3 q4 q5 q6 q7 q8 q9 q10 q11 q12 q13 q14 q15 '+ //advanced SIMD NEON regs\n\n //program status registers\n 'cpsr_c cpsr_x cpsr_s cpsr_f cpsr_cx cpsr_cxs cpsr_xs cpsr_xsf cpsr_sf cpsr_cxsf '+\n 'spsr_c spsr_x spsr_s spsr_f spsr_cx spsr_cxs spsr_xs spsr_xsf spsr_sf spsr_cxsf '+\n\n //NEON and VFP registers\n 's0 s1 s2 s3 s4 s5 s6 s7 s8 s9 s10 s11 s12 s13 s14 s15 '+\n 's16 s17 s18 s19 s20 s21 s22 s23 s24 s25 s26 s27 s28 s29 s30 s31 '+\n 'd0 d1 d2 d3 d4 d5 d6 d7 d8 d9 d10 d11 d12 d13 d14 d15 '+\n 'd16 d17 d18 d19 d20 d21 d22 d23 d24 d25 d26 d27 d28 d29 d30 d31 ' +\n\n '{PC} {VAR} {TRUE} {FALSE} {OPT} {CONFIG} {ENDIAN} {CODESIZE} {CPU} {FPU} {ARCHITECTURE} {PCSTOREOFFSET} {ARMASM_VERSION} {INTER} {ROPI} {RWPI} {SWST} {NOSWST} . @'\n },\n contains: [\n {\n className: 'keyword',\n begin: '\\\\b('+ //mnemonics\n 'adc|'+\n '(qd?|sh?|u[qh]?)?add(8|16)?|usada?8|(q|sh?|u[qh]?)?(as|sa)x|'+\n 'and|adrl?|sbc|rs[bc]|asr|b[lx]?|blx|bxj|cbn?z|tb[bh]|bic|'+\n 'bfc|bfi|[su]bfx|bkpt|cdp2?|clz|clrex|cmp|cmn|cpsi[ed]|cps|'+\n 'setend|dbg|dmb|dsb|eor|isb|it[te]{0,3}|lsl|lsr|ror|rrx|'+\n 'ldm(([id][ab])|f[ds])?|ldr((s|ex)?[bhd])?|movt?|mvn|mra|mar|'+\n 'mul|[us]mull|smul[bwt][bt]|smu[as]d|smmul|smmla|'+\n 'mla|umlaal|smlal?([wbt][bt]|d)|mls|smlsl?[ds]|smc|svc|sev|'+\n 'mia([bt]{2}|ph)?|mrr?c2?|mcrr2?|mrs|msr|orr|orn|pkh(tb|bt)|rbit|'+\n 'rev(16|sh)?|sel|[su]sat(16)?|nop|pop|push|rfe([id][ab])?|'+\n 'stm([id][ab])?|str(ex)?[bhd]?|(qd?)?sub|(sh?|q|u[qh]?)?sub(8|16)|'+\n '[su]xt(a?h|a?b(16)?)|srs([id][ab])?|swpb?|swi|smi|tst|teq|'+\n 'wfe|wfi|yield'+\n ')'+\n '(eq|ne|cs|cc|mi|pl|vs|vc|hi|ls|ge|lt|gt|le|al|hs|lo)?'+ //condition codes\n '[sptrx]?' , //legal postfixes\n end: '\\\\s'\n },\n hljs.COMMENT('[;@]', '$', {relevance: 0}),\n hljs.C_BLOCK_COMMENT_MODE,\n hljs.QUOTE_STRING_MODE,\n {\n className: 'string',\n begin: '\\'',\n end: '[^\\\\\\\\]\\'',\n relevance: 0\n },\n {\n className: 'title',\n begin: '\\\\|', end: '\\\\|',\n illegal: '\\\\n',\n relevance: 0\n },\n {\n className: 'number',\n variants: [\n {begin: '[#$=]?0x[0-9a-f]+'}, //hex\n {begin: '[#$=]?0b[01]+'}, //bin\n {begin: '[#$=]\\\\d+'}, //literal\n {begin: '\\\\b\\\\d+'} //bare number\n ],\n relevance: 0\n },\n {\n className: 'symbol',\n variants: [\n {begin: '^[a-z_\\\\.\\\\$][a-z0-9_\\\\.\\\\$]+'}, //ARM syntax\n {begin: '^\\\\s*[a-z_\\\\.\\\\$][a-z0-9_\\\\.\\\\$]+:'}, //GNU ARM syntax\n {begin: '[=#]\\\\w+' } //label reference\n ],\n relevance: 0\n }\n ]\n };\n});\n\nhljs.registerLanguage('xml', function(hljs) {\n var XML_IDENT_RE = '[A-Za-z0-9\\\\._:-]+';\n var TAG_INTERNALS = {\n endsWithParent: true,\n illegal: /`]+/}\n ]\n }\n ]\n }\n ]\n };\n return {\n aliases: ['html', 'xhtml', 'rss', 'atom', 'xjb', 'xsd', 'xsl', 'plist'],\n case_insensitive: true,\n contains: [\n {\n className: 'meta',\n begin: '',\n relevance: 10,\n contains: [{begin: '\\\\[', end: '\\\\]'}]\n },\n hljs.COMMENT(\n '',\n {\n relevance: 10\n }\n ),\n {\n begin: '<\\\\!\\\\[CDATA\\\\[', end: '\\\\]\\\\]>',\n relevance: 10\n },\n {\n begin: /<\\?(php)?/, end: /\\?>/,\n subLanguage: 'php',\n contains: [{begin: '/\\\\*', end: '\\\\*/', skip: true}]\n },\n {\n className: 'tag',\n /*\n The lookahead pattern (?=...) ensures that 'begin' only matches\n '|$)', end: '>',\n keywords: {name: 'style'},\n contains: [TAG_INTERNALS],\n starts: {\n end: '', returnEnd: true,\n subLanguage: ['css', 'xml']\n }\n },\n {\n className: 'tag',\n // See the comment in the ', returnEnd: true,\n subLanguage: ['css', 'xml']\n }\n },\n {\n className: 'tag',\n // See the comment in the