Please wait. This can take some minutes ...
Many resources are needed to download a project. Please understand that we have to compensate our server costs. Thank you in advance.
Project price only 1 $
You can buy this project and download/modify it how often you want.
web-interface.assets.6e61897c-67.472622149827c1587209.js.map Maven / Gradle / Ivy
{"version":3,"sources":["webpack:///./node_modules/ace-builds/src-noconflict/ext-language_tools.js","webpack:///./node_modules/ace-builds/src-noconflict/mode-lucene.js"],"names":["ace","oop","require","EventEmitter","lang","Range","RangeList","HashHandler","Tokenizer","clipboard","VARIABLES","CURRENT_WORD","editor","session","getTextRange","getWordRange","SELECTION","name","indentation","text","replace","CURRENT_LINE","getLine","getCursorPosition","row","PREV_LINE","LINE_INDEX","LINE_NUMBER","SOFT_TABS","getUseSoftTabs","TAB_SIZE","getTabSize","CLIPBOARD","getText","FILENAME","exec","this","FILEPATH","FILENAME_BASE","DIRECTORY","WORKSPACE_NAME","FULLNAME","BLOCK_COMMENT_START","mode","$mode","blockComment","start","BLOCK_COMMENT_END","end","LINE_COMMENT","lineCommentStart","CURRENT_YEAR","date","bind","year","CURRENT_YEAR_SHORT","CURRENT_MONTH","month","CURRENT_MONTH_NAME","CURRENT_MONTH_NAME_SHORT","CURRENT_DATE","day","CURRENT_DAY_NAME","weekday","CURRENT_DAY_NAME_SHORT","CURRENT_HOUR","hour","hour12","CURRENT_MINUTE","minute","CURRENT_SECOND","second","dateFormat","str","Date","toLocaleString","length","SELECTED_TEXT","SnippetManager","snippetMap","snippetNameMap","implement","getTokenizer","$tokenizer","createTokenizer","TabstopToken","substr","test","tabstopId","parseInt","escape","ch","formatMatcher","regex","onMatch","val","state","stack","ts","fmtString","guard","slice","flag","next","indexOf","shift","t","unshift","token","merge","snippetVar","choices","operator","split","map","value","formatString","expectElse","ifEnd","elseEnd","changeCase","local","formatStringVar","formatFunction","tokenizeTmSnippet","startState","getLineTokens","tokens","x","getVariableValue","variables","__","hasOwnProperty","tmStrFormat","fmt","re","RegExp","fmtTokens","_self","oldArgs","call","arguments","fmtParts","resolveVariables","gChangeCase","i","toUpperCase","toLowerCase","join","tmFormatFunction","snippet","result","afterNewLine","j","push","gotoNext","i1","insertSnippetForSelection","snippetText","cursor","line","tabString","getTabString","indentString","match","column","tabstops","forEach","p","id","index","parents","some","expanding","copyValue","copy","lastIndexOf","Object","keys","parentId","splice","apply","Math","max","concat","lines","range","getSelectionRange","tabstopManager","TabstopManager","selectionId","inVirtualSelectionMode","selection","addTabstops","insertSnippet","self","forEachSelection","keepOrder","tabNext","$getScope","scope","$id","pop","inlinePhp","c","getState","substring","getActiveScopes","scopes","includeScopes","expandWithTab","options","expandSnippetForSelection","before","after","snippets","findMatchingSnippet","dryRun","doc","removeInLine","replaceBefore","replaceAfter","M__","matchBefore","T__","matchAfter","content","snippetList","s","startRe","endRe","triggerRe","endTriggerRe","register","wrapRegexp","src","guardedRegexp","opening","addSnippet","old","unregister","prefix","tabTrigger","body","Array","isArray","trigger","escapeRegExp","endTrigger","endGuard","key","_signal","removeSnippet","nameMap","parseSnippetFile","m","list","JSON","parse","e","guardRe","getSnippetByName","prototype","$onChange","onChange","$onChangeSelection","delayedCall","onChangeSelection","schedule","$onChangeSession","onChangeSession","$onAfterExec","onAfterExec","attach","ranges","$openTabstops","selectedTabstop","on","commands","keyBinding","addKeyboardHandler","keyboardHandler","detach","removeTabstopMarkers","removeListener","removeKeyboardHandler","delta","isRemove","action","active","rangeList","$bias","parentActive","startIndex","pointIndex","endIndex","toRemove","removeRange","$inChange","getLength","getValue","updateLinkedFields","hasLinkedRanges","firstNonLinked","linked","original","exports","snippetManager","command","readOnly","lead","anchor","isEmpty","containsLead","contains","containsAnchor","dir","min","selectTabstop","addTabstopMarkers","fromOrientedRange","sel","multiSelect","toSingleRange","addRange","clone","execCommand","matches","useLink","getOption","fromPoints","moveRelative","arg","dest","movePoint","tabstop","addList","markerId","addMarker","removeMarker","bindKeys","renderer","scrollCursorIntoView","point","diff","importCssString","Editor","expandSnippet","define","module","Renderer","VirtualRenderer","event","dom","$singleLineEditor","el","$maxLines","setHighlightActiveLine","setShowPrintMargin","setShowGutter","setHighlightGutterLine","$mouseHandler","$focusTimeout","$highlightTagPending","AcePopup","parentNode","createElement","popup","appendChild","style","display","setStyle","setOption","lastMouseEvent","noop","focus","$isFocused","$cursorLayer","restartTimer","element","opacity","$keepTextAreaAtCursor","highlight","$searchHighlight","clazz","pos","getDocumentPosition","moveToPosition","selectionMarker","stop","hoverMarker","Infinity","setSelectOnHover","y","scrollTop","setRow","setHoverMarker","$pos","getRow","$textLayer","selected","childNodes","config","firstRow","selectedNode","removeCssClass","addCssClass","hideHoverMarker","suppressRedraw","_emit","getHoveredRow","addListener","container","data","bgTokenizer","$tokenizeRow","caption","addToken","className","type","lower","filterText","lastIndex","lastI","matchMask","sub","meta","message","$updateOnChange","$computeWidth","screenWidth","isOpen","isTopdown","autoSelect","setData","setValue","stringRepeat","getData","clearSelection","moveCursorTo","hide","show","lineHeight","topdownOnly","screenHeight","window","innerHeight","innerWidth","maxH","top","$borderSize","$maxPixelHeight","bottom","left","offsetWidth","goTo","where","getTextLeftOffset","$padding","$imageSize","parForEach","array","fn","callback","completed","arLength","err","ID_REGEX","retrievePrecedingIdentifier","buf","reverse","retrieveFollowingIdentifier","getCompletionPrefix","completers","completer","identifierRegexps","identifierRegex","util","Autocomplete","autoInsert","exactMatch","gatherCompletionsId","blurListener","changeListener","mousedownListener","mousewheelListener","changeTimer","updateCompletions","tooltipTimer","updateDocTooltip","$init","document","documentElement","insertMatch","getPopup","openPopup","keepPopupPosition","completions","filtered","setTheme","getTheme","setFontSize","getFontSize","layerConfig","getPixelPosition","base","rect","getBoundingClientRect","offset","scrollLeft","gutterWidth","cancel","off","hideDocTooltip","activated","activeElement","textInput","getElement","fromTooltip","relatedTarget","tooltipNode","startOperation","getAllRanges","remove","endOperation","deleteSuffix","gotoPageUp","gotoPageDown","gatherCompletions","getSession","createAnchor","$insertRight","total","getCompletions","results","finished","showPopup","setFilter","FilteredList","_id","detachIfFinished","cancelContextMenu","all","getDocTooltip","docText","docHTML","showDocTooltip","item","margin","pointerEvents","tabIndex","onblur","onclick","onTooltipClick","innerHTML","textContent","right","offsetTop","offsetHeight","isFocused","removeChild","a","target","nodeName","href","rel","destroy","for","get","$shared","$sharedInstance","once","startCommand","bindKey","filterCompletions","sort","b","$score","localeCompare","prev","filter","items","needle","upper","loop","distance","penalty","fullMatchIndex","i2","score","splitRegex","wordDistance","prefixPos","getWordIndex","words","wordScores","create","currentWord","word","idx","abs","wordScore","textCompleter","keyWordCompleter","snippetCompleter","getTokenAt","escapeHTML","setCompleters","addCompleter","onChangeMode","loadSnippetsForMode","$modes","files","loadSnippetFile","snippetFileId","modes","snippetFilePath","loadModule","doLiveAutocomplete","hasCompleter","defineOptions","enableBasicAutocompletion","set","addCommand","removeCommand","enableLiveAutocompletion","enableSnippets","TextHighlightRules","LuceneHighlightRules","$rules","defaultToken","inherits","TextMode","Mode","HighlightRules","$behaviour","$defaultBehaviour"],"mappings":"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","file":"6e61897c-67.472622149827c1587209.js","sourcesContent":["ace.define(\"ace/snippets\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/lib/event_emitter\",\"ace/lib/lang\",\"ace/range\",\"ace/range_list\",\"ace/keyboard/hash_handler\",\"ace/tokenizer\",\"ace/clipboard\",\"ace/lib/dom\",\"ace/editor\"], function(require, exports, module) {\n\"use strict\";\nvar oop = require(\"./lib/oop\");\nvar EventEmitter = require(\"./lib/event_emitter\").EventEmitter;\nvar lang = require(\"./lib/lang\");\nvar Range = require(\"./range\").Range;\nvar RangeList = require(\"./range_list\").RangeList;\nvar HashHandler = require(\"./keyboard/hash_handler\").HashHandler;\nvar Tokenizer = require(\"./tokenizer\").Tokenizer;\nvar clipboard = require(\"./clipboard\");\n\nvar VARIABLES = {\n CURRENT_WORD: function(editor) {\n return editor.session.getTextRange(editor.session.getWordRange());\n },\n SELECTION: function(editor, name, indentation) {\n var text = editor.session.getTextRange();\n if (indentation)\n return text.replace(/\\n\\r?([ \\t]*\\S)/g, \"\\n\" + indentation + \"$1\");\n return text;\n },\n CURRENT_LINE: function(editor) {\n return editor.session.getLine(editor.getCursorPosition().row);\n },\n PREV_LINE: function(editor) {\n return editor.session.getLine(editor.getCursorPosition().row - 1);\n },\n LINE_INDEX: function(editor) {\n return editor.getCursorPosition().row;\n },\n LINE_NUMBER: function(editor) {\n return editor.getCursorPosition().row + 1;\n },\n SOFT_TABS: function(editor) {\n return editor.session.getUseSoftTabs() ? \"YES\" : \"NO\";\n },\n TAB_SIZE: function(editor) {\n return editor.session.getTabSize();\n },\n CLIPBOARD: function(editor) {\n return clipboard.getText && clipboard.getText();\n },\n FILENAME: function(editor) {\n return /[^/\\\\]*$/.exec(this.FILEPATH(editor))[0];\n },\n FILENAME_BASE: function(editor) {\n return /[^/\\\\]*$/.exec(this.FILEPATH(editor))[0].replace(/\\.[^.]*$/, \"\");\n },\n DIRECTORY: function(editor) {\n return this.FILEPATH(editor).replace(/[^/\\\\]*$/, \"\");\n },\n FILEPATH: function(editor) { return \"/not implemented.txt\"; },\n WORKSPACE_NAME: function() { return \"Unknown\"; },\n FULLNAME: function() { return \"Unknown\"; },\n BLOCK_COMMENT_START: function(editor) {\n var mode = editor.session.$mode || {};\n return mode.blockComment && mode.blockComment.start || \"\";\n },\n BLOCK_COMMENT_END: function(editor) {\n var mode = editor.session.$mode || {};\n return mode.blockComment && mode.blockComment.end || \"\";\n },\n LINE_COMMENT: function(editor) {\n var mode = editor.session.$mode || {};\n return mode.lineCommentStart || \"\";\n },\n CURRENT_YEAR: date.bind(null, {year: \"numeric\"}),\n CURRENT_YEAR_SHORT: date.bind(null, {year: \"2-digit\"}),\n CURRENT_MONTH: date.bind(null, {month: \"numeric\"}),\n CURRENT_MONTH_NAME: date.bind(null, {month: \"long\"}),\n CURRENT_MONTH_NAME_SHORT: date.bind(null, {month: \"short\"}),\n CURRENT_DATE: date.bind(null, {day: \"2-digit\"}),\n CURRENT_DAY_NAME: date.bind(null, {weekday: \"long\"}),\n CURRENT_DAY_NAME_SHORT: date.bind(null, {weekday: \"short\"}),\n CURRENT_HOUR: date.bind(null, {hour: \"2-digit\", hour12: false}),\n CURRENT_MINUTE: date.bind(null, {minute: \"2-digit\"}),\n CURRENT_SECOND: date.bind(null, {second: \"2-digit\"})\n};\n\nVARIABLES.SELECTED_TEXT = VARIABLES.SELECTION;\n\nfunction date(dateFormat) {\n var str = new Date().toLocaleString(\"en-us\", dateFormat);\n return str.length == 1 ? \"0\" + str : str;\n}\n\nvar SnippetManager = function() {\n this.snippetMap = {};\n this.snippetNameMap = {};\n};\n\n(function() {\n oop.implement(this, EventEmitter);\n \n this.getTokenizer = function() {\n return SnippetManager.$tokenizer || this.createTokenizer();\n };\n \n this.createTokenizer = function() {\n function TabstopToken(str) {\n str = str.substr(1);\n if (/^\\d+$/.test(str))\n return [{tabstopId: parseInt(str, 10)}];\n return [{text: str}];\n }\n function escape(ch) {\n return \"(?:[^\\\\\\\\\" + ch + \"]|\\\\\\\\.)\";\n }\n var formatMatcher = {\n regex: \"/(\" + escape(\"/\") + \"+)/\", \n onMatch: function(val, state, stack) {\n var ts = stack[0];\n ts.fmtString = true;\n ts.guard = val.slice(1, -1);\n ts.flag = \"\";\n return \"\";\n },\n next: \"formatString\"\n };\n \n SnippetManager.$tokenizer = new Tokenizer({\n start: [\n {regex: /\\\\./, onMatch: function(val, state, stack) {\n var ch = val[1];\n if (ch == \"}\" && stack.length) {\n val = ch;\n } else if (\"`$\\\\\".indexOf(ch) != -1) {\n val = ch;\n }\n return [val];\n }},\n {regex: /}/, onMatch: function(val, state, stack) {\n return [stack.length ? stack.shift() : val];\n }},\n {regex: /\\$(?:\\d+|\\w+)/, onMatch: TabstopToken},\n {regex: /\\$\\{[\\dA-Z_a-z]+/, onMatch: function(str, state, stack) {\n var t = TabstopToken(str.substr(1));\n stack.unshift(t[0]);\n return t;\n }, next: \"snippetVar\"},\n {regex: /\\n/, token: \"newline\", merge: false}\n ],\n snippetVar: [\n {regex: \"\\\\|\" + escape(\"\\\\|\") + \"*\\\\|\", onMatch: function(val, state, stack) {\n var choices = val.slice(1, -1).replace(/\\\\[,|\\\\]|,/g, function(operator) {\n return operator.length == 2 ? operator[1] : \"\\x00\";\n }).split(\"\\x00\").map(function(value){\n return {value: value};\n });\n stack[0].choices = choices;\n return [choices[0]];\n }, next: \"start\"},\n formatMatcher,\n {regex: \"([^:}\\\\\\\\]|\\\\\\\\.)*:?\", token: \"\", next: \"start\"}\n ],\n formatString: [\n {regex: /:/, onMatch: function(val, state, stack) {\n if (stack.length && stack[0].expectElse) {\n stack[0].expectElse = false;\n stack[0].ifEnd = {elseEnd: stack[0]};\n return [stack[0].ifEnd];\n }\n return \":\";\n }},\n {regex: /\\\\./, onMatch: function(val, state, stack) {\n var ch = val[1];\n if (ch == \"}\" && stack.length)\n val = ch;\n else if (\"`$\\\\\".indexOf(ch) != -1)\n val = ch;\n else if (ch == \"n\")\n val = \"\\n\";\n else if (ch == \"t\")\n val = \"\\t\";\n else if (\"ulULE\".indexOf(ch) != -1)\n val = {changeCase: ch, local: ch > \"a\"};\n return [val];\n }},\n {regex: \"/\\\\w*}\", onMatch: function(val, state, stack) {\n var next = stack.shift();\n if (next)\n next.flag = val.slice(1, -1);\n this.next = next && next.tabstopId ? \"start\" : \"\";\n return [next || val];\n }, next: \"start\"},\n {regex: /\\$(?:\\d+|\\w+)/, onMatch: function(val, state, stack) {\n return [{text: val.slice(1)}];\n }},\n {regex: /\\${\\w+/, onMatch: function(val, state, stack) {\n var token = {text: val.slice(2)};\n stack.unshift(token);\n return [token];\n }, next: \"formatStringVar\"},\n {regex: /\\n/, token: \"newline\", merge: false},\n {regex: /}/, onMatch: function(val, state, stack) {\n var next = stack.shift();\n this.next = next && next.tabstopId ? \"start\" : \"\";\n return [next || val];\n }, next: \"start\"}\n ],\n formatStringVar: [\n {regex: /:\\/\\w+}/, onMatch: function(val, state, stack) {\n var ts = stack[0];\n ts.formatFunction = val.slice(2, -1);\n return [stack.shift()];\n }, next: \"formatString\"},\n formatMatcher,\n {regex: /:[\\?\\-+]?/, onMatch: function(val, state, stack) {\n if (val[1] == \"+\")\n stack[0].ifEnd = stack[0];\n if (val[1] == \"?\")\n stack[0].expectElse = true;\n }, next: \"formatString\"},\n {regex: \"([^:}\\\\\\\\]|\\\\\\\\.)*:?\", token: \"\", next: \"formatString\"}\n ]\n });\n return SnippetManager.$tokenizer;\n };\n\n this.tokenizeTmSnippet = function(str, startState) {\n return this.getTokenizer().getLineTokens(str, startState).tokens.map(function(x) {\n return x.value || x;\n });\n };\n \n this.getVariableValue = function(editor, name, indentation) {\n if (/^\\d+$/.test(name))\n return (this.variables.__ || {})[name] || \"\";\n if (/^[A-Z]\\d+$/.test(name))\n return (this.variables[name[0] + \"__\"] || {})[name.substr(1)] || \"\";\n \n name = name.replace(/^TM_/, \"\");\n if (!this.variables.hasOwnProperty(name))\n return \"\";\n var value = this.variables[name];\n if (typeof value == \"function\")\n value = this.variables[name](editor, name, indentation);\n return value == null ? \"\" : value;\n };\n \n this.variables = VARIABLES;\n this.tmStrFormat = function(str, ch, editor) {\n if (!ch.fmt) return str;\n var flag = ch.flag || \"\";\n var re = ch.guard;\n re = new RegExp(re, flag.replace(/[^gim]/g, \"\"));\n var fmtTokens = typeof ch.fmt == \"string\" ? this.tokenizeTmSnippet(ch.fmt, \"formatString\") : ch.fmt;\n var _self = this;\n var formatted = str.replace(re, function() {\n var oldArgs = _self.variables.__;\n _self.variables.__ = [].slice.call(arguments);\n var fmtParts = _self.resolveVariables(fmtTokens, editor);\n var gChangeCase = \"E\";\n for (var i = 0; i < fmtParts.length; i++) {\n var ch = fmtParts[i];\n if (typeof ch == \"object\") {\n fmtParts[i] = \"\";\n if (ch.changeCase && ch.local) {\n var next = fmtParts[i + 1];\n if (next && typeof next == \"string\") {\n if (ch.changeCase == \"u\")\n fmtParts[i] = next[0].toUpperCase();\n else\n fmtParts[i] = next[0].toLowerCase();\n fmtParts[i + 1] = next.substr(1);\n }\n } else if (ch.changeCase) {\n gChangeCase = ch.changeCase;\n }\n } else if (gChangeCase == \"U\") {\n fmtParts[i] = ch.toUpperCase();\n } else if (gChangeCase == \"L\") {\n fmtParts[i] = ch.toLowerCase();\n }\n }\n _self.variables.__ = oldArgs;\n return fmtParts.join(\"\");\n });\n return formatted;\n };\n \n this.tmFormatFunction = function(str, ch, editor) {\n if (ch.formatFunction == \"upcase\")\n return str.toUpperCase();\n if (ch.formatFunction == \"downcase\")\n return str.toLowerCase();\n return str;\n };\n\n this.resolveVariables = function(snippet, editor) {\n var result = [];\n var indentation = \"\";\n var afterNewLine = true;\n for (var i = 0; i < snippet.length; i++) {\n var ch = snippet[i];\n if (typeof ch == \"string\") {\n result.push(ch);\n if (ch == \"\\n\") {\n afterNewLine = true;\n indentation = \"\";\n }\n else if (afterNewLine) {\n indentation = /^\\t*/.exec(ch)[0];\n afterNewLine = /\\S/.test(ch);\n }\n continue;\n }\n if (!ch) continue;\n afterNewLine = false;\n \n if (ch.fmtString) {\n var j = snippet.indexOf(ch, i + 1);\n if (j == -1) j = snippet.length;\n ch.fmt = snippet.slice(i + 1, j);\n i = j;\n }\n \n if (ch.text) {\n var value = this.getVariableValue(editor, ch.text, indentation) + \"\";\n if (ch.fmtString)\n value = this.tmStrFormat(value, ch, editor);\n if (ch.formatFunction)\n value = this.tmFormatFunction(value, ch, editor);\n \n if (value && !ch.ifEnd) {\n result.push(value);\n gotoNext(ch);\n } else if (!value && ch.ifEnd) {\n gotoNext(ch.ifEnd);\n }\n } else if (ch.elseEnd) {\n gotoNext(ch.elseEnd);\n } else if (ch.tabstopId != null) {\n result.push(ch);\n } else if (ch.changeCase != null) {\n result.push(ch);\n }\n }\n function gotoNext(ch) {\n var i1 = snippet.indexOf(ch, i + 1);\n if (i1 != -1)\n i = i1;\n }\n return result;\n };\n\n this.insertSnippetForSelection = function(editor, snippetText) {\n var cursor = editor.getCursorPosition();\n var line = editor.session.getLine(cursor.row);\n var tabString = editor.session.getTabString();\n var indentString = line.match(/^\\s*/)[0];\n \n if (cursor.column < indentString.length)\n indentString = indentString.slice(0, cursor.column);\n\n snippetText = snippetText.replace(/\\r/g, \"\");\n var tokens = this.tokenizeTmSnippet(snippetText);\n tokens = this.resolveVariables(tokens, editor);\n tokens = tokens.map(function(x) {\n if (x == \"\\n\")\n return x + indentString;\n if (typeof x == \"string\")\n return x.replace(/\\t/g, tabString);\n return x;\n });\n var tabstops = [];\n tokens.forEach(function(p, i) {\n if (typeof p != \"object\")\n return;\n var id = p.tabstopId;\n var ts = tabstops[id];\n if (!ts) {\n ts = tabstops[id] = [];\n ts.index = id;\n ts.value = \"\";\n ts.parents = {};\n }\n if (ts.indexOf(p) !== -1)\n return;\n if (p.choices && !ts.choices)\n ts.choices = p.choices;\n ts.push(p);\n var i1 = tokens.indexOf(p, i + 1);\n if (i1 === -1)\n return;\n\n var value = tokens.slice(i + 1, i1);\n var isNested = value.some(function(t) {return typeof t === \"object\";});\n if (isNested && !ts.value) {\n ts.value = value;\n } else if (value.length && (!ts.value || typeof ts.value !== \"string\")) {\n ts.value = value.join(\"\");\n }\n });\n tabstops.forEach(function(ts) {ts.length = 0;});\n var expanding = {};\n function copyValue(val) {\n var copy = [];\n for (var i = 0; i < val.length; i++) {\n var p = val[i];\n if (typeof p == \"object\") {\n if (expanding[p.tabstopId])\n continue;\n var j = val.lastIndexOf(p, i - 1);\n p = copy[j] || {tabstopId: p.tabstopId};\n }\n copy[i] = p;\n }\n return copy;\n }\n for (var i = 0; i < tokens.length; i++) {\n var p = tokens[i];\n if (typeof p != \"object\")\n continue;\n var id = p.tabstopId;\n var ts = tabstops[id];\n var i1 = tokens.indexOf(p, i + 1);\n if (expanding[id]) {\n if (expanding[id] === p) {\n delete expanding[id];\n Object.keys(expanding).forEach(function(parentId) {\n ts.parents[parentId] = true;\n });\n }\n continue;\n }\n expanding[id] = p;\n var value = ts.value;\n if (typeof value !== \"string\")\n value = copyValue(value);\n else if (p.fmt)\n value = this.tmStrFormat(value, p, editor);\n tokens.splice.apply(tokens, [i + 1, Math.max(0, i1 - i)].concat(value, p));\n\n if (ts.indexOf(p) === -1)\n ts.push(p);\n }\n var row = 0, column = 0;\n var text = \"\";\n tokens.forEach(function(t) {\n if (typeof t === \"string\") {\n var lines = t.split(\"\\n\");\n if (lines.length > 1){\n column = lines[lines.length - 1].length;\n row += lines.length - 1;\n } else\n column += t.length;\n text += t;\n } else if (t) {\n if (!t.start)\n t.start = {row: row, column: column};\n else\n t.end = {row: row, column: column};\n }\n });\n var range = editor.getSelectionRange();\n var end = editor.session.replace(range, text);\n\n var tabstopManager = new TabstopManager(editor);\n var selectionId = editor.inVirtualSelectionMode && editor.selection.index;\n tabstopManager.addTabstops(tabstops, range.start, end, selectionId);\n };\n \n this.insertSnippet = function(editor, snippetText) {\n var self = this;\n if (editor.inVirtualSelectionMode)\n return self.insertSnippetForSelection(editor, snippetText);\n \n editor.forEachSelection(function() {\n self.insertSnippetForSelection(editor, snippetText);\n }, null, {keepOrder: true});\n \n if (editor.tabstopManager)\n editor.tabstopManager.tabNext();\n };\n\n this.$getScope = function(editor) {\n var scope = editor.session.$mode.$id || \"\";\n scope = scope.split(\"/\").pop();\n if (scope === \"html\" || scope === \"php\") {\n if (scope === \"php\" && !editor.session.$mode.inlinePhp) \n scope = \"html\";\n var c = editor.getCursorPosition();\n var state = editor.session.getState(c.row);\n if (typeof state === \"object\") {\n state = state[0];\n }\n if (state.substring) {\n if (state.substring(0, 3) == \"js-\")\n scope = \"javascript\";\n else if (state.substring(0, 4) == \"css-\")\n scope = \"css\";\n else if (state.substring(0, 4) == \"php-\")\n scope = \"php\";\n }\n }\n \n return scope;\n };\n\n this.getActiveScopes = function(editor) {\n var scope = this.$getScope(editor);\n var scopes = [scope];\n var snippetMap = this.snippetMap;\n if (snippetMap[scope] && snippetMap[scope].includeScopes) {\n scopes.push.apply(scopes, snippetMap[scope].includeScopes);\n }\n scopes.push(\"_\");\n return scopes;\n };\n\n this.expandWithTab = function(editor, options) {\n var self = this;\n var result = editor.forEachSelection(function() {\n return self.expandSnippetForSelection(editor, options);\n }, null, {keepOrder: true});\n if (result && editor.tabstopManager)\n editor.tabstopManager.tabNext();\n return result;\n };\n \n this.expandSnippetForSelection = function(editor, options) {\n var cursor = editor.getCursorPosition();\n var line = editor.session.getLine(cursor.row);\n var before = line.substring(0, cursor.column);\n var after = line.substr(cursor.column);\n\n var snippetMap = this.snippetMap;\n var snippet;\n this.getActiveScopes(editor).some(function(scope) {\n var snippets = snippetMap[scope];\n if (snippets)\n snippet = this.findMatchingSnippet(snippets, before, after);\n return !!snippet;\n }, this);\n if (!snippet)\n return false;\n if (options && options.dryRun)\n return true;\n editor.session.doc.removeInLine(cursor.row,\n cursor.column - snippet.replaceBefore.length,\n cursor.column + snippet.replaceAfter.length\n );\n\n this.variables.M__ = snippet.matchBefore;\n this.variables.T__ = snippet.matchAfter;\n this.insertSnippetForSelection(editor, snippet.content);\n\n this.variables.M__ = this.variables.T__ = null;\n return true;\n };\n\n this.findMatchingSnippet = function(snippetList, before, after) {\n for (var i = snippetList.length; i--;) {\n var s = snippetList[i];\n if (s.startRe && !s.startRe.test(before))\n continue;\n if (s.endRe && !s.endRe.test(after))\n continue;\n if (!s.startRe && !s.endRe)\n continue;\n\n s.matchBefore = s.startRe ? s.startRe.exec(before) : [\"\"];\n s.matchAfter = s.endRe ? s.endRe.exec(after) : [\"\"];\n s.replaceBefore = s.triggerRe ? s.triggerRe.exec(before)[0] : \"\";\n s.replaceAfter = s.endTriggerRe ? s.endTriggerRe.exec(after)[0] : \"\";\n return s;\n }\n };\n\n this.snippetMap = {};\n this.snippetNameMap = {};\n this.register = function(snippets, scope) {\n var snippetMap = this.snippetMap;\n var snippetNameMap = this.snippetNameMap;\n var self = this;\n \n if (!snippets) \n snippets = [];\n \n function wrapRegexp(src) {\n if (src && !/^\\^?\\(.*\\)\\$?$|^\\\\b$/.test(src))\n src = \"(?:\" + src + \")\";\n\n return src || \"\";\n }\n function guardedRegexp(re, guard, opening) {\n re = wrapRegexp(re);\n guard = wrapRegexp(guard);\n if (opening) {\n re = guard + re;\n if (re && re[re.length - 1] != \"$\")\n re = re + \"$\";\n } else {\n re = re + guard;\n if (re && re[0] != \"^\")\n re = \"^\" + re;\n }\n return new RegExp(re);\n }\n\n function addSnippet(s) {\n if (!s.scope)\n s.scope = scope || \"_\";\n scope = s.scope;\n if (!snippetMap[scope]) {\n snippetMap[scope] = [];\n snippetNameMap[scope] = {};\n }\n\n var map = snippetNameMap[scope];\n if (s.name) {\n var old = map[s.name];\n if (old)\n self.unregister(old);\n map[s.name] = s;\n }\n snippetMap[scope].push(s);\n\n if (s.prefix)\n s.tabTrigger = s.prefix;\n\n if (!s.content && s.body)\n s.content = Array.isArray(s.body) ? s.body.join(\"\\n\") : s.body;\n\n if (s.tabTrigger && !s.trigger) {\n if (!s.guard && /^\\w/.test(s.tabTrigger))\n s.guard = \"\\\\b\";\n s.trigger = lang.escapeRegExp(s.tabTrigger);\n }\n \n if (!s.trigger && !s.guard && !s.endTrigger && !s.endGuard)\n return;\n \n s.startRe = guardedRegexp(s.trigger, s.guard, true);\n s.triggerRe = new RegExp(s.trigger);\n\n s.endRe = guardedRegexp(s.endTrigger, s.endGuard, true);\n s.endTriggerRe = new RegExp(s.endTrigger);\n }\n\n if (Array.isArray(snippets)) {\n snippets.forEach(addSnippet);\n } else {\n Object.keys(snippets).forEach(function(key) {\n addSnippet(snippets[key]);\n });\n }\n \n this._signal(\"registerSnippets\", {scope: scope});\n };\n this.unregister = function(snippets, scope) {\n var snippetMap = this.snippetMap;\n var snippetNameMap = this.snippetNameMap;\n\n function removeSnippet(s) {\n var nameMap = snippetNameMap[s.scope||scope];\n if (nameMap && nameMap[s.name]) {\n delete nameMap[s.name];\n var map = snippetMap[s.scope||scope];\n var i = map && map.indexOf(s);\n if (i >= 0)\n map.splice(i, 1);\n }\n }\n if (snippets.content)\n removeSnippet(snippets);\n else if (Array.isArray(snippets))\n snippets.forEach(removeSnippet);\n };\n this.parseSnippetFile = function(str) {\n str = str.replace(/\\r/g, \"\");\n var list = [], snippet = {};\n var re = /^#.*|^({[\\s\\S]*})\\s*$|^(\\S+) (.*)$|^((?:\\n*\\t.*)+)/gm;\n var m;\n while (m = re.exec(str)) {\n if (m[1]) {\n try {\n snippet = JSON.parse(m[1]);\n list.push(snippet);\n } catch (e) {}\n } if (m[4]) {\n snippet.content = m[4].replace(/^\\t/gm, \"\");\n list.push(snippet);\n snippet = {};\n } else {\n var key = m[2], val = m[3];\n if (key == \"regex\") {\n var guardRe = /\\/((?:[^\\/\\\\]|\\\\.)*)|$/g;\n snippet.guard = guardRe.exec(val)[1];\n snippet.trigger = guardRe.exec(val)[1];\n snippet.endTrigger = guardRe.exec(val)[1];\n snippet.endGuard = guardRe.exec(val)[1];\n } else if (key == \"snippet\") {\n snippet.tabTrigger = val.match(/^\\S*/)[0];\n if (!snippet.name)\n snippet.name = val;\n } else if (key) {\n snippet[key] = val;\n }\n }\n }\n return list;\n };\n this.getSnippetByName = function(name, editor) {\n var snippetMap = this.snippetNameMap;\n var snippet;\n this.getActiveScopes(editor).some(function(scope) {\n var snippets = snippetMap[scope];\n if (snippets)\n snippet = snippets[name];\n return !!snippet;\n }, this);\n return snippet;\n };\n\n}).call(SnippetManager.prototype);\n\n\nvar TabstopManager = function(editor) {\n if (editor.tabstopManager)\n return editor.tabstopManager;\n editor.tabstopManager = this;\n this.$onChange = this.onChange.bind(this);\n this.$onChangeSelection = lang.delayedCall(this.onChangeSelection.bind(this)).schedule;\n this.$onChangeSession = this.onChangeSession.bind(this);\n this.$onAfterExec = this.onAfterExec.bind(this);\n this.attach(editor);\n};\n(function() {\n this.attach = function(editor) {\n this.index = 0;\n this.ranges = [];\n this.tabstops = [];\n this.$openTabstops = null;\n this.selectedTabstop = null;\n\n this.editor = editor;\n this.editor.on(\"change\", this.$onChange);\n this.editor.on(\"changeSelection\", this.$onChangeSelection);\n this.editor.on(\"changeSession\", this.$onChangeSession);\n this.editor.commands.on(\"afterExec\", this.$onAfterExec);\n this.editor.keyBinding.addKeyboardHandler(this.keyboardHandler);\n };\n this.detach = function() {\n this.tabstops.forEach(this.removeTabstopMarkers, this);\n this.ranges = null;\n this.tabstops = null;\n this.selectedTabstop = null;\n this.editor.removeListener(\"change\", this.$onChange);\n this.editor.removeListener(\"changeSelection\", this.$onChangeSelection);\n this.editor.removeListener(\"changeSession\", this.$onChangeSession);\n this.editor.commands.removeListener(\"afterExec\", this.$onAfterExec);\n this.editor.keyBinding.removeKeyboardHandler(this.keyboardHandler);\n this.editor.tabstopManager = null;\n this.editor = null;\n };\n\n this.onChange = function(delta) {\n var isRemove = delta.action[0] == \"r\";\n var selectedTabstop = this.selectedTabstop || {};\n var parents = selectedTabstop.parents || {};\n var tabstops = (this.tabstops || []).slice();\n for (var i = 0; i < tabstops.length; i++) {\n var ts = tabstops[i];\n var active = ts == selectedTabstop || parents[ts.index];\n ts.rangeList.$bias = active ? 0 : 1;\n \n if (delta.action == \"remove\" && ts !== selectedTabstop) {\n var parentActive = ts.parents && ts.parents[selectedTabstop.index];\n var startIndex = ts.rangeList.pointIndex(delta.start, parentActive);\n startIndex = startIndex < 0 ? -startIndex - 1 : startIndex + 1;\n var endIndex = ts.rangeList.pointIndex(delta.end, parentActive);\n endIndex = endIndex < 0 ? -endIndex - 1 : endIndex - 1;\n var toRemove = ts.rangeList.ranges.slice(startIndex, endIndex);\n for (var j = 0; j < toRemove.length; j++)\n this.removeRange(toRemove[j]);\n }\n ts.rangeList.$onChange(delta);\n }\n var session = this.editor.session;\n if (!this.$inChange && isRemove && session.getLength() == 1 && !session.getValue())\n this.detach();\n };\n this.updateLinkedFields = function() {\n var ts = this.selectedTabstop;\n if (!ts || !ts.hasLinkedRanges || !ts.firstNonLinked)\n return;\n this.$inChange = true;\n var session = this.editor.session;\n var text = session.getTextRange(ts.firstNonLinked);\n for (var i = 0; i < ts.length; i++) {\n var range = ts[i];\n if (!range.linked)\n continue;\n var original = range.original;\n var fmt = exports.snippetManager.tmStrFormat(text, original, this.editor);\n session.replace(range, fmt);\n }\n this.$inChange = false;\n };\n this.onAfterExec = function(e) {\n if (e.command && !e.command.readOnly)\n this.updateLinkedFields();\n };\n this.onChangeSelection = function() {\n if (!this.editor)\n return;\n var lead = this.editor.selection.lead;\n var anchor = this.editor.selection.anchor;\n var isEmpty = this.editor.selection.isEmpty();\n for (var i = 0; i < this.ranges.length; i++) {\n if (this.ranges[i].linked)\n continue;\n var containsLead = this.ranges[i].contains(lead.row, lead.column);\n var containsAnchor = isEmpty || this.ranges[i].contains(anchor.row, anchor.column);\n if (containsLead && containsAnchor)\n return;\n }\n this.detach();\n };\n this.onChangeSession = function() {\n this.detach();\n };\n this.tabNext = function(dir) {\n var max = this.tabstops.length;\n var index = this.index + (dir || 1);\n index = Math.min(Math.max(index, 1), max);\n if (index == max)\n index = 0;\n this.selectTabstop(index);\n if (index === 0)\n this.detach();\n };\n this.selectTabstop = function(index) {\n this.$openTabstops = null;\n var ts = this.tabstops[this.index];\n if (ts)\n this.addTabstopMarkers(ts);\n this.index = index;\n ts = this.tabstops[this.index];\n if (!ts || !ts.length)\n return;\n \n this.selectedTabstop = ts;\n var range = ts.firstNonLinked || ts;\n if (ts.choices) range.cursor = range.start;\n if (!this.editor.inVirtualSelectionMode) {\n var sel = this.editor.multiSelect;\n sel.toSingleRange(range);\n for (var i = 0; i < ts.length; i++) {\n if (ts.hasLinkedRanges && ts[i].linked)\n continue;\n sel.addRange(ts[i].clone(), true);\n }\n } else {\n this.editor.selection.fromOrientedRange(range);\n }\n \n this.editor.keyBinding.addKeyboardHandler(this.keyboardHandler);\n if (this.selectedTabstop && this.selectedTabstop.choices)\n this.editor.execCommand(\"startAutocomplete\", {matches: this.selectedTabstop.choices});\n };\n this.addTabstops = function(tabstops, start, end) {\n var useLink = this.useLink || !this.editor.getOption(\"enableMultiselect\");\n \n if (!this.$openTabstops)\n this.$openTabstops = [];\n if (!tabstops[0]) {\n var p = Range.fromPoints(end, end);\n moveRelative(p.start, start);\n moveRelative(p.end, start);\n tabstops[0] = [p];\n tabstops[0].index = 0;\n }\n\n var i = this.index;\n var arg = [i + 1, 0];\n var ranges = this.ranges;\n tabstops.forEach(function(ts, index) {\n var dest = this.$openTabstops[index] || ts;\n \n for (var i = 0; i < ts.length; i++) {\n var p = ts[i];\n var range = Range.fromPoints(p.start, p.end || p.start);\n movePoint(range.start, start);\n movePoint(range.end, start);\n range.original = p;\n range.tabstop = dest;\n ranges.push(range);\n if (dest != ts)\n dest.unshift(range);\n else\n dest[i] = range;\n if (p.fmtString || (dest.firstNonLinked && useLink)) {\n range.linked = true;\n dest.hasLinkedRanges = true;\n } else if (!dest.firstNonLinked)\n dest.firstNonLinked = range;\n }\n if (!dest.firstNonLinked)\n dest.hasLinkedRanges = false;\n if (dest === ts) {\n arg.push(dest);\n this.$openTabstops[index] = dest;\n }\n this.addTabstopMarkers(dest);\n dest.rangeList = dest.rangeList || new RangeList();\n dest.rangeList.$bias = 0;\n dest.rangeList.addList(dest);\n }, this);\n \n if (arg.length > 2) {\n if (this.tabstops.length)\n arg.push(arg.splice(2, 1)[0]);\n this.tabstops.splice.apply(this.tabstops, arg);\n }\n };\n\n this.addTabstopMarkers = function(ts) {\n var session = this.editor.session;\n ts.forEach(function(range) {\n if (!range.markerId)\n range.markerId = session.addMarker(range, \"ace_snippet-marker\", \"text\");\n });\n };\n this.removeTabstopMarkers = function(ts) {\n var session = this.editor.session;\n ts.forEach(function(range) {\n session.removeMarker(range.markerId);\n range.markerId = null;\n });\n };\n this.removeRange = function(range) {\n var i = range.tabstop.indexOf(range);\n if (i != -1) range.tabstop.splice(i, 1);\n i = this.ranges.indexOf(range);\n if (i != -1) this.ranges.splice(i, 1);\n i = range.tabstop.rangeList.ranges.indexOf(range);\n if (i != -1) range.tabstop.splice(i, 1);\n this.editor.session.removeMarker(range.markerId);\n if (!range.tabstop.length) {\n i = this.tabstops.indexOf(range.tabstop);\n if (i != -1)\n this.tabstops.splice(i, 1);\n if (!this.tabstops.length)\n this.detach();\n }\n };\n\n this.keyboardHandler = new HashHandler();\n this.keyboardHandler.bindKeys({\n \"Tab\": function(editor) {\n if (exports.snippetManager && exports.snippetManager.expandWithTab(editor))\n return;\n editor.tabstopManager.tabNext(1);\n editor.renderer.scrollCursorIntoView();\n },\n \"Shift-Tab\": function(editor) {\n editor.tabstopManager.tabNext(-1);\n editor.renderer.scrollCursorIntoView();\n },\n \"Esc\": function(editor) {\n editor.tabstopManager.detach();\n }\n });\n}).call(TabstopManager.prototype);\n\n\n\nvar movePoint = function(point, diff) {\n if (point.row == 0)\n point.column += diff.column;\n point.row += diff.row;\n};\n\nvar moveRelative = function(point, start) {\n if (point.row == start.row)\n point.column -= start.column;\n point.row -= start.row;\n};\n\n\nrequire(\"./lib/dom\").importCssString(\"\\\n.ace_snippet-marker {\\\n -moz-box-sizing: border-box;\\\n box-sizing: border-box;\\\n background: rgba(194, 193, 208, 0.09);\\\n border: 1px dotted rgba(211, 208, 235, 0.62);\\\n position: absolute;\\\n}\");\n\nexports.snippetManager = new SnippetManager();\n\n\nvar Editor = require(\"./editor\").Editor;\n(function() {\n this.insertSnippet = function(content, options) {\n return exports.snippetManager.insertSnippet(this, content, options);\n };\n this.expandSnippet = function(options) {\n return exports.snippetManager.expandWithTab(this, options);\n };\n}).call(Editor.prototype);\n\n});\n\nace.define(\"ace/autocomplete/popup\",[\"require\",\"exports\",\"module\",\"ace/virtual_renderer\",\"ace/editor\",\"ace/range\",\"ace/lib/event\",\"ace/lib/lang\",\"ace/lib/dom\"], function(require, exports, module) {\n\"use strict\";\n\nvar Renderer = require(\"../virtual_renderer\").VirtualRenderer;\nvar Editor = require(\"../editor\").Editor;\nvar Range = require(\"../range\").Range;\nvar event = require(\"../lib/event\");\nvar lang = require(\"../lib/lang\");\nvar dom = require(\"../lib/dom\");\n\nvar $singleLineEditor = function(el) {\n var renderer = new Renderer(el);\n\n renderer.$maxLines = 4;\n\n var editor = new Editor(renderer);\n\n editor.setHighlightActiveLine(false);\n editor.setShowPrintMargin(false);\n editor.renderer.setShowGutter(false);\n editor.renderer.setHighlightGutterLine(false);\n\n editor.$mouseHandler.$focusTimeout = 0;\n editor.$highlightTagPending = true;\n\n return editor;\n};\n\nvar AcePopup = function(parentNode) {\n var el = dom.createElement(\"div\");\n var popup = new $singleLineEditor(el);\n\n if (parentNode)\n parentNode.appendChild(el);\n el.style.display = \"none\";\n popup.renderer.content.style.cursor = \"default\";\n popup.renderer.setStyle(\"ace_autocomplete\");\n\n popup.setOption(\"displayIndentGuides\", false);\n popup.setOption(\"dragDelay\", 150);\n\n var noop = function(){};\n\n popup.focus = noop;\n popup.$isFocused = true;\n\n popup.renderer.$cursorLayer.restartTimer = noop;\n popup.renderer.$cursorLayer.element.style.opacity = 0;\n\n popup.renderer.$maxLines = 8;\n popup.renderer.$keepTextAreaAtCursor = false;\n\n popup.setHighlightActiveLine(false);\n popup.session.highlight(\"\");\n popup.session.$searchHighlight.clazz = \"ace_highlight-marker\";\n\n popup.on(\"mousedown\", function(e) {\n var pos = e.getDocumentPosition();\n popup.selection.moveToPosition(pos);\n selectionMarker.start.row = selectionMarker.end.row = pos.row;\n e.stop();\n });\n\n var lastMouseEvent;\n var hoverMarker = new Range(-1,0,-1,Infinity);\n var selectionMarker = new Range(-1,0,-1,Infinity);\n selectionMarker.id = popup.session.addMarker(selectionMarker, \"ace_active-line\", \"fullLine\");\n popup.setSelectOnHover = function(val) {\n if (!val) {\n hoverMarker.id = popup.session.addMarker(hoverMarker, \"ace_line-hover\", \"fullLine\");\n } else if (hoverMarker.id) {\n popup.session.removeMarker(hoverMarker.id);\n hoverMarker.id = null;\n }\n };\n popup.setSelectOnHover(false);\n popup.on(\"mousemove\", function(e) {\n if (!lastMouseEvent) {\n lastMouseEvent = e;\n return;\n }\n if (lastMouseEvent.x == e.x && lastMouseEvent.y == e.y) {\n return;\n }\n lastMouseEvent = e;\n lastMouseEvent.scrollTop = popup.renderer.scrollTop;\n var row = lastMouseEvent.getDocumentPosition().row;\n if (hoverMarker.start.row != row) {\n if (!hoverMarker.id)\n popup.setRow(row);\n setHoverMarker(row);\n }\n });\n popup.renderer.on(\"beforeRender\", function() {\n if (lastMouseEvent && hoverMarker.start.row != -1) {\n lastMouseEvent.$pos = null;\n var row = lastMouseEvent.getDocumentPosition().row;\n if (!hoverMarker.id)\n popup.setRow(row);\n setHoverMarker(row, true);\n }\n });\n popup.renderer.on(\"afterRender\", function() {\n var row = popup.getRow();\n var t = popup.renderer.$textLayer;\n var selected = t.element.childNodes[row - t.config.firstRow];\n if (selected !== t.selectedNode && t.selectedNode)\n dom.removeCssClass(t.selectedNode, \"ace_selected\");\n t.selectedNode = selected;\n if (selected)\n dom.addCssClass(selected, \"ace_selected\");\n });\n var hideHoverMarker = function() { setHoverMarker(-1); };\n var setHoverMarker = function(row, suppressRedraw) {\n if (row !== hoverMarker.start.row) {\n hoverMarker.start.row = hoverMarker.end.row = row;\n if (!suppressRedraw)\n popup.session._emit(\"changeBackMarker\");\n popup._emit(\"changeHoverMarker\");\n }\n };\n popup.getHoveredRow = function() {\n return hoverMarker.start.row;\n };\n\n event.addListener(popup.container, \"mouseout\", hideHoverMarker);\n popup.on(\"hide\", hideHoverMarker);\n popup.on(\"changeSelection\", hideHoverMarker);\n\n popup.session.doc.getLength = function() {\n return popup.data.length;\n };\n popup.session.doc.getLine = function(i) {\n var data = popup.data[i];\n if (typeof data == \"string\")\n return data;\n return (data && data.value) || \"\";\n };\n\n var bgTokenizer = popup.session.bgTokenizer;\n bgTokenizer.$tokenizeRow = function(row) {\n var data = popup.data[row];\n var tokens = [];\n if (!data)\n return tokens;\n if (typeof data == \"string\")\n data = {value: data};\n var caption = data.caption || data.value || data.name;\n\n function addToken(value, className) {\n value && tokens.push({\n type: (data.className || \"\") + (className || \"\"), \n value: value\n });\n }\n \n var lower = caption.toLowerCase();\n var filterText = (popup.filterText || \"\").toLowerCase();\n var lastIndex = 0;\n var lastI = 0;\n for (var i = 0; i <= filterText.length; i++) {\n if (i != lastI && (data.matchMask & (1 << i) || i == filterText.length)) {\n var sub = filterText.slice(lastI, i);\n lastI = i;\n var index = lower.indexOf(sub, lastIndex);\n if (index == -1) continue;\n addToken(caption.slice(lastIndex, index), \"\");\n lastIndex = index + sub.length;\n addToken(caption.slice(index, lastIndex), \"completion-highlight\");\n }\n }\n addToken(caption.slice(lastIndex, caption.length), \"\");\n \n if (data.meta)\n tokens.push({type: \"completion-meta\", value: data.meta});\n if (data.message)\n tokens.push({type: \"completion-message\", value: data.message});\n\n return tokens;\n };\n bgTokenizer.$updateOnChange = noop;\n bgTokenizer.start = noop;\n\n popup.session.$computeWidth = function() {\n return this.screenWidth = 0;\n };\n popup.isOpen = false;\n popup.isTopdown = false;\n popup.autoSelect = true;\n popup.filterText = \"\";\n\n popup.data = [];\n popup.setData = function(list, filterText) {\n popup.filterText = filterText || \"\";\n popup.setValue(lang.stringRepeat(\"\\n\", list.length), -1);\n popup.data = list || [];\n popup.setRow(0);\n };\n popup.getData = function(row) {\n return popup.data[row];\n };\n\n popup.getRow = function() {\n return selectionMarker.start.row;\n };\n popup.setRow = function(line) {\n line = Math.max(this.autoSelect ? 0 : -1, Math.min(this.data.length, line));\n if (selectionMarker.start.row != line) {\n popup.selection.clearSelection();\n selectionMarker.start.row = selectionMarker.end.row = line || 0;\n popup.session._emit(\"changeBackMarker\");\n popup.moveCursorTo(line || 0, 0);\n if (popup.isOpen)\n popup._signal(\"select\");\n }\n };\n\n popup.on(\"changeSelection\", function() {\n if (popup.isOpen)\n popup.setRow(popup.selection.lead.row);\n popup.renderer.scrollCursorIntoView();\n });\n\n popup.hide = function() {\n this.container.style.display = \"none\";\n this._signal(\"hide\");\n popup.isOpen = false;\n };\n popup.show = function(pos, lineHeight, topdownOnly) {\n var el = this.container;\n var screenHeight = window.innerHeight;\n var screenWidth = window.innerWidth;\n var renderer = this.renderer;\n var maxH = renderer.$maxLines * lineHeight * 1.4;\n var top = pos.top + this.$borderSize;\n var allowTopdown = top > screenHeight / 2 && !topdownOnly;\n if (allowTopdown && top + lineHeight + maxH > screenHeight) {\n renderer.$maxPixelHeight = top - 2 * this.$borderSize;\n el.style.top = \"\";\n el.style.bottom = screenHeight - top + \"px\";\n popup.isTopdown = false;\n } else {\n top += lineHeight;\n renderer.$maxPixelHeight = screenHeight - top - 0.2 * lineHeight;\n el.style.top = top + \"px\";\n el.style.bottom = \"\";\n popup.isTopdown = true;\n }\n\n el.style.display = \"\";\n\n var left = pos.left;\n if (left + el.offsetWidth > screenWidth)\n left = screenWidth - el.offsetWidth;\n\n el.style.left = left + \"px\";\n\n this._signal(\"show\");\n lastMouseEvent = null;\n popup.isOpen = true;\n };\n\n popup.goTo = function(where) {\n var row = this.getRow();\n var max = this.session.getLength() - 1;\n\n switch(where) {\n case \"up\": row = row <= 0 ? max : row - 1; break;\n case \"down\": row = row >= max ? -1 : row + 1; break;\n case \"start\": row = 0; break;\n case \"end\": row = max; break;\n }\n\n this.setRow(row);\n };\n\n\n popup.getTextLeftOffset = function() {\n return this.$borderSize + this.renderer.$padding + this.$imageSize;\n };\n\n popup.$imageSize = 0;\n popup.$borderSize = 1;\n\n return popup;\n};\n\ndom.importCssString(\"\\\n.ace_editor.ace_autocomplete .ace_marker-layer .ace_active-line {\\\n background-color: #CAD6FA;\\\n z-index: 1;\\\n}\\\n.ace_dark.ace_editor.ace_autocomplete .ace_marker-layer .ace_active-line {\\\n background-color: #3a674e;\\\n}\\\n.ace_editor.ace_autocomplete .ace_line-hover {\\\n border: 1px solid #abbffe;\\\n margin-top: -1px;\\\n background: rgba(233,233,253,0.4);\\\n position: absolute;\\\n z-index: 2;\\\n}\\\n.ace_dark.ace_editor.ace_autocomplete .ace_line-hover {\\\n border: 1px solid rgba(109, 150, 13, 0.8);\\\n background: rgba(58, 103, 78, 0.62);\\\n}\\\n.ace_completion-meta {\\\n opacity: 0.5;\\\n margin: 0.9em;\\\n}\\\n.ace_completion-message {\\\n color: blue;\\\n}\\\n.ace_editor.ace_autocomplete .ace_completion-highlight{\\\n color: #2d69c7;\\\n}\\\n.ace_dark.ace_editor.ace_autocomplete .ace_completion-highlight{\\\n color: #93ca12;\\\n}\\\n.ace_editor.ace_autocomplete {\\\n width: 300px;\\\n z-index: 200000;\\\n border: 1px lightgray solid;\\\n position: fixed;\\\n box-shadow: 2px 3px 5px rgba(0,0,0,.2);\\\n line-height: 1.4;\\\n background: #fefefe;\\\n color: #111;\\\n}\\\n.ace_dark.ace_editor.ace_autocomplete {\\\n border: 1px #484747 solid;\\\n box-shadow: 2px 3px 5px rgba(0, 0, 0, 0.51);\\\n line-height: 1.4;\\\n background: #25282c;\\\n color: #c1c1c1;\\\n}\", \"autocompletion.css\");\n\nexports.AcePopup = AcePopup;\nexports.$singleLineEditor = $singleLineEditor;\n});\n\nace.define(\"ace/autocomplete/util\",[\"require\",\"exports\",\"module\"], function(require, exports, module) {\n\"use strict\";\n\nexports.parForEach = function(array, fn, callback) {\n var completed = 0;\n var arLength = array.length;\n if (arLength === 0)\n callback();\n for (var i = 0; i < arLength; i++) {\n fn(array[i], function(result, err) {\n completed++;\n if (completed === arLength)\n callback(result, err);\n });\n }\n};\n\nvar ID_REGEX = /[a-zA-Z_0-9\\$\\-\\u00A2-\\u2000\\u2070-\\uFFFF]/;\n\nexports.retrievePrecedingIdentifier = function(text, pos, regex) {\n regex = regex || ID_REGEX;\n var buf = [];\n for (var i = pos-1; i >= 0; i--) {\n if (regex.test(text[i]))\n buf.push(text[i]);\n else\n break;\n }\n return buf.reverse().join(\"\");\n};\n\nexports.retrieveFollowingIdentifier = function(text, pos, regex) {\n regex = regex || ID_REGEX;\n var buf = [];\n for (var i = pos; i < text.length; i++) {\n if (regex.test(text[i]))\n buf.push(text[i]);\n else\n break;\n }\n return buf;\n};\n\nexports.getCompletionPrefix = function (editor) {\n var pos = editor.getCursorPosition();\n var line = editor.session.getLine(pos.row);\n var prefix;\n editor.completers.forEach(function(completer) {\n if (completer.identifierRegexps) {\n completer.identifierRegexps.forEach(function(identifierRegex) {\n if (!prefix && identifierRegex)\n prefix = this.retrievePrecedingIdentifier(line, pos.column, identifierRegex);\n }.bind(this));\n }\n }.bind(this));\n return prefix || this.retrievePrecedingIdentifier(line, pos.column);\n};\n\n});\n\nace.define(\"ace/autocomplete\",[\"require\",\"exports\",\"module\",\"ace/keyboard/hash_handler\",\"ace/autocomplete/popup\",\"ace/autocomplete/util\",\"ace/lib/lang\",\"ace/lib/dom\",\"ace/snippets\",\"ace/config\"], function(require, exports, module) {\n\"use strict\";\n\nvar HashHandler = require(\"./keyboard/hash_handler\").HashHandler;\nvar AcePopup = require(\"./autocomplete/popup\").AcePopup;\nvar util = require(\"./autocomplete/util\");\nvar lang = require(\"./lib/lang\");\nvar dom = require(\"./lib/dom\");\nvar snippetManager = require(\"./snippets\").snippetManager;\nvar config = require(\"./config\");\n\nvar Autocomplete = function() {\n this.autoInsert = false;\n this.autoSelect = true;\n this.exactMatch = false;\n this.gatherCompletionsId = 0;\n this.keyboardHandler = new HashHandler();\n this.keyboardHandler.bindKeys(this.commands);\n\n this.blurListener = this.blurListener.bind(this);\n this.changeListener = this.changeListener.bind(this);\n this.mousedownListener = this.mousedownListener.bind(this);\n this.mousewheelListener = this.mousewheelListener.bind(this);\n\n this.changeTimer = lang.delayedCall(function() {\n this.updateCompletions(true);\n }.bind(this));\n\n this.tooltipTimer = lang.delayedCall(this.updateDocTooltip.bind(this), 50);\n};\n\n(function() {\n\n this.$init = function() {\n this.popup = new AcePopup(document.body || document.documentElement);\n this.popup.on(\"click\", function(e) {\n this.insertMatch();\n e.stop();\n }.bind(this));\n this.popup.focus = this.editor.focus.bind(this.editor);\n this.popup.on(\"show\", this.tooltipTimer.bind(null, null));\n this.popup.on(\"select\", this.tooltipTimer.bind(null, null));\n this.popup.on(\"changeHoverMarker\", this.tooltipTimer.bind(null, null));\n return this.popup;\n };\n\n this.getPopup = function() {\n return this.popup || this.$init();\n };\n\n this.openPopup = function(editor, prefix, keepPopupPosition) {\n if (!this.popup)\n this.$init();\n\n this.popup.autoSelect = this.autoSelect;\n\n this.popup.setData(this.completions.filtered, this.completions.filterText);\n\n editor.keyBinding.addKeyboardHandler(this.keyboardHandler);\n \n var renderer = editor.renderer;\n this.popup.setRow(this.autoSelect ? 0 : -1);\n if (!keepPopupPosition) {\n this.popup.setTheme(editor.getTheme());\n this.popup.setFontSize(editor.getFontSize());\n\n var lineHeight = renderer.layerConfig.lineHeight;\n\n var pos = renderer.$cursorLayer.getPixelPosition(this.base, true);\n pos.left -= this.popup.getTextLeftOffset();\n\n var rect = editor.container.getBoundingClientRect();\n pos.top += rect.top - renderer.layerConfig.offset;\n pos.left += rect.left - editor.renderer.scrollLeft;\n pos.left += renderer.gutterWidth;\n\n this.popup.show(pos, lineHeight);\n } else if (keepPopupPosition && !prefix) {\n this.detach();\n }\n this.changeTimer.cancel();\n };\n\n this.detach = function() {\n this.editor.keyBinding.removeKeyboardHandler(this.keyboardHandler);\n this.editor.off(\"changeSelection\", this.changeListener);\n this.editor.off(\"blur\", this.blurListener);\n this.editor.off(\"mousedown\", this.mousedownListener);\n this.editor.off(\"mousewheel\", this.mousewheelListener);\n this.changeTimer.cancel();\n this.hideDocTooltip();\n\n this.gatherCompletionsId += 1;\n if (this.popup && this.popup.isOpen)\n this.popup.hide();\n\n if (this.base)\n this.base.detach();\n this.activated = false;\n this.completions = this.base = null;\n };\n\n this.changeListener = function(e) {\n var cursor = this.editor.selection.lead;\n if (cursor.row != this.base.row || cursor.column < this.base.column) {\n this.detach();\n }\n if (this.activated)\n this.changeTimer.schedule();\n else\n this.detach();\n };\n\n this.blurListener = function(e) {\n var el = document.activeElement;\n var text = this.editor.textInput.getElement();\n var fromTooltip = e.relatedTarget && this.tooltipNode && this.tooltipNode.contains(e.relatedTarget);\n var container = this.popup && this.popup.container;\n if (el != text && el.parentNode != container && !fromTooltip\n && el != this.tooltipNode && e.relatedTarget != text\n ) {\n this.detach();\n }\n };\n\n this.mousedownListener = function(e) {\n this.detach();\n };\n\n this.mousewheelListener = function(e) {\n this.detach();\n };\n\n this.goTo = function(where) {\n this.popup.goTo(where);\n };\n\n this.insertMatch = function(data, options) {\n if (!data)\n data = this.popup.getData(this.popup.getRow());\n if (!data)\n return false;\n\n var completions = this.completions;\n this.editor.startOperation({command: {name: \"insertMatch\"}});\n if (data.completer && data.completer.insertMatch) {\n data.completer.insertMatch(this.editor, data);\n } else {\n if (completions.filterText) {\n var ranges = this.editor.selection.getAllRanges();\n for (var i = 0, range; range = ranges[i]; i++) {\n range.start.column -= completions.filterText.length;\n this.editor.session.remove(range);\n }\n }\n if (data.snippet)\n snippetManager.insertSnippet(this.editor, data.snippet);\n else\n this.editor.execCommand(\"insertstring\", data.value || data);\n }\n if (this.completions == completions)\n this.detach();\n this.editor.endOperation();\n };\n\n\n this.commands = {\n \"Up\": function(editor) { editor.completer.goTo(\"up\"); },\n \"Down\": function(editor) { editor.completer.goTo(\"down\"); },\n \"Ctrl-Up|Ctrl-Home\": function(editor) { editor.completer.goTo(\"start\"); },\n \"Ctrl-Down|Ctrl-End\": function(editor) { editor.completer.goTo(\"end\"); },\n\n \"Esc\": function(editor) { editor.completer.detach(); },\n \"Return\": function(editor) { return editor.completer.insertMatch(); },\n \"Shift-Return\": function(editor) { editor.completer.insertMatch(null, {deleteSuffix: true}); },\n \"Tab\": function(editor) {\n var result = editor.completer.insertMatch();\n if (!result && !editor.tabstopManager)\n editor.completer.goTo(\"down\");\n else\n return result;\n },\n\n \"PageUp\": function(editor) { editor.completer.popup.gotoPageUp(); },\n \"PageDown\": function(editor) { editor.completer.popup.gotoPageDown(); }\n };\n\n this.gatherCompletions = function(editor, callback) {\n var session = editor.getSession();\n var pos = editor.getCursorPosition();\n\n var prefix = util.getCompletionPrefix(editor);\n\n this.base = session.doc.createAnchor(pos.row, pos.column - prefix.length);\n this.base.$insertRight = true;\n\n var matches = [];\n var total = editor.completers.length;\n editor.completers.forEach(function(completer, i) {\n completer.getCompletions(editor, session, pos, prefix, function(err, results) {\n if (!err && results)\n matches = matches.concat(results);\n callback(null, {\n prefix: util.getCompletionPrefix(editor),\n matches: matches,\n finished: (--total === 0)\n });\n });\n });\n return true;\n };\n\n this.showPopup = function(editor, options) {\n if (this.editor)\n this.detach();\n\n this.activated = true;\n\n this.editor = editor;\n if (editor.completer != this) {\n if (editor.completer)\n editor.completer.detach();\n editor.completer = this;\n }\n\n editor.on(\"changeSelection\", this.changeListener);\n editor.on(\"blur\", this.blurListener);\n editor.on(\"mousedown\", this.mousedownListener);\n editor.on(\"mousewheel\", this.mousewheelListener);\n\n this.updateCompletions(false, options);\n };\n\n this.updateCompletions = function(keepPopupPosition, options) {\n if (keepPopupPosition && this.base && this.completions) {\n var pos = this.editor.getCursorPosition();\n var prefix = this.editor.session.getTextRange({start: this.base, end: pos});\n if (prefix == this.completions.filterText)\n return;\n this.completions.setFilter(prefix);\n if (!this.completions.filtered.length)\n return this.detach();\n if (this.completions.filtered.length == 1\n && this.completions.filtered[0].value == prefix\n && !this.completions.filtered[0].snippet)\n return this.detach();\n this.openPopup(this.editor, prefix, keepPopupPosition);\n return;\n }\n \n if (options && options.matches) {\n var pos = this.editor.getSelectionRange().start;\n this.base = this.editor.session.doc.createAnchor(pos.row, pos.column);\n this.base.$insertRight = true;\n this.completions = new FilteredList(options.matches);\n return this.openPopup(this.editor, \"\", keepPopupPosition);\n }\n var _id = this.gatherCompletionsId;\n this.gatherCompletions(this.editor, function(err, results) {\n var detachIfFinished = function() {\n if (!results.finished) return;\n return this.detach();\n }.bind(this);\n\n var prefix = results.prefix;\n var matches = results && results.matches;\n\n if (!matches || !matches.length)\n return detachIfFinished();\n if (prefix.indexOf(results.prefix) !== 0 || _id != this.gatherCompletionsId)\n return;\n\n this.completions = new FilteredList(matches);\n\n if (this.exactMatch)\n this.completions.exactMatch = true;\n\n this.completions.setFilter(prefix);\n var filtered = this.completions.filtered;\n if (!filtered.length)\n return detachIfFinished();\n if (filtered.length == 1 && filtered[0].value == prefix && !filtered[0].snippet)\n return detachIfFinished();\n if (this.autoInsert && filtered.length == 1 && results.finished)\n return this.insertMatch(filtered[0]);\n\n this.openPopup(this.editor, prefix, keepPopupPosition);\n }.bind(this));\n };\n\n this.cancelContextMenu = function() {\n this.editor.$mouseHandler.cancelContextMenu();\n };\n\n this.updateDocTooltip = function() {\n var popup = this.popup;\n var all = popup.data;\n var selected = all && (all[popup.getHoveredRow()] || all[popup.getRow()]);\n var doc = null;\n if (!selected || !this.editor || !this.popup.isOpen)\n return this.hideDocTooltip();\n this.editor.completers.some(function(completer) {\n if (completer.getDocTooltip)\n doc = completer.getDocTooltip(selected);\n return doc;\n });\n if (!doc && typeof selected != \"string\")\n doc = selected;\n\n if (typeof doc == \"string\")\n doc = {docText: doc};\n if (!doc || !(doc.docHTML || doc.docText))\n return this.hideDocTooltip();\n this.showDocTooltip(doc);\n };\n\n this.showDocTooltip = function(item) {\n if (!this.tooltipNode) {\n this.tooltipNode = dom.createElement(\"div\");\n this.tooltipNode.className = \"ace_tooltip ace_doc-tooltip\";\n this.tooltipNode.style.margin = 0;\n this.tooltipNode.style.pointerEvents = \"auto\";\n this.tooltipNode.tabIndex = -1;\n this.tooltipNode.onblur = this.blurListener.bind(this);\n this.tooltipNode.onclick = this.onTooltipClick.bind(this);\n }\n\n var tooltipNode = this.tooltipNode;\n if (item.docHTML) {\n tooltipNode.innerHTML = item.docHTML;\n } else if (item.docText) {\n tooltipNode.textContent = item.docText;\n }\n\n if (!tooltipNode.parentNode)\n document.body.appendChild(tooltipNode);\n var popup = this.popup;\n var rect = popup.container.getBoundingClientRect();\n tooltipNode.style.top = popup.container.style.top;\n tooltipNode.style.bottom = popup.container.style.bottom;\n\n tooltipNode.style.display = \"block\";\n if (window.innerWidth - rect.right < 320) {\n if (rect.left < 320) {\n if(popup.isTopdown) {\n tooltipNode.style.top = rect.bottom + \"px\";\n tooltipNode.style.left = rect.left + \"px\";\n tooltipNode.style.right = \"\";\n tooltipNode.style.bottom = \"\";\n } else {\n tooltipNode.style.top = popup.container.offsetTop - tooltipNode.offsetHeight + \"px\";\n tooltipNode.style.left = rect.left + \"px\";\n tooltipNode.style.right = \"\";\n tooltipNode.style.bottom = \"\";\n }\n } else {\n tooltipNode.style.right = window.innerWidth - rect.left + \"px\";\n tooltipNode.style.left = \"\";\n }\n } else {\n tooltipNode.style.left = (rect.right + 1) + \"px\";\n tooltipNode.style.right = \"\";\n }\n };\n\n this.hideDocTooltip = function() {\n this.tooltipTimer.cancel();\n if (!this.tooltipNode) return;\n var el = this.tooltipNode;\n if (!this.editor.isFocused() && document.activeElement == el)\n this.editor.focus();\n this.tooltipNode = null;\n if (el.parentNode)\n el.parentNode.removeChild(el);\n };\n \n this.onTooltipClick = function(e) {\n var a = e.target;\n while (a && a != this.tooltipNode) {\n if (a.nodeName == \"A\" && a.href) {\n a.rel = \"noreferrer\";\n a.target = \"_blank\";\n break;\n }\n a = a.parentNode;\n }\n };\n\n this.destroy = function() {\n this.detach();\n if (this.popup) {\n this.popup.destroy();\n var el = this.popup.container;\n if (el && el.parentNode)\n el.parentNode.removeChild(el);\n }\n if (this.editor && this.editor.completer == this)\n this.editor.completer == null;\n this.popup = null;\n };\n\n}).call(Autocomplete.prototype);\n\n\nAutocomplete.for = function(editor) {\n if (editor.completer) {\n return editor.completer;\n }\n if (config.get(\"sharedPopups\")) {\n if (!Autocomplete.$shared)\n Autocomplete.$sharedInstance = new Autocomplete();\n editor.completer = Autocomplete.$sharedInstance;\n } else {\n editor.completer = new Autocomplete();\n editor.once(\"destroy\", function(e, editor) {\n editor.completer.destroy();\n });\n }\n return editor.completer;\n};\n\nAutocomplete.startCommand = {\n name: \"startAutocomplete\",\n exec: function(editor, options) {\n var completer = Autocomplete.for(editor);\n completer.autoInsert = false;\n completer.autoSelect = true;\n completer.showPopup(editor, options);\n completer.cancelContextMenu();\n },\n bindKey: \"Ctrl-Space|Ctrl-Shift-Space|Alt-Space\"\n};\n\nvar FilteredList = function(array, filterText) {\n this.all = array;\n this.filtered = array;\n this.filterText = filterText || \"\";\n this.exactMatch = false;\n};\n(function(){\n this.setFilter = function(str) {\n if (str.length > this.filterText && str.lastIndexOf(this.filterText, 0) === 0)\n var matches = this.filtered;\n else\n var matches = this.all;\n\n this.filterText = str;\n matches = this.filterCompletions(matches, this.filterText);\n matches = matches.sort(function(a, b) {\n return b.exactMatch - a.exactMatch || b.$score - a.$score \n || (a.caption || a.value).localeCompare(b.caption || b.value);\n });\n var prev = null;\n matches = matches.filter(function(item){\n var caption = item.snippet || item.caption || item.value;\n if (caption === prev) return false;\n prev = caption;\n return true;\n });\n\n this.filtered = matches;\n };\n this.filterCompletions = function(items, needle) {\n var results = [];\n var upper = needle.toUpperCase();\n var lower = needle.toLowerCase();\n loop: for (var i = 0, item; item = items[i]; i++) {\n var caption = item.caption || item.value || item.snippet;\n if (!caption) continue;\n var lastIndex = -1;\n var matchMask = 0;\n var penalty = 0;\n var index, distance;\n\n if (this.exactMatch) {\n if (needle !== caption.substr(0, needle.length))\n continue loop;\n } else {\n var fullMatchIndex = caption.toLowerCase().indexOf(lower);\n if (fullMatchIndex > -1) {\n penalty = fullMatchIndex;\n } else {\n for (var j = 0; j < needle.length; j++) {\n var i1 = caption.indexOf(lower[j], lastIndex + 1);\n var i2 = caption.indexOf(upper[j], lastIndex + 1);\n index = (i1 >= 0) ? ((i2 < 0 || i1 < i2) ? i1 : i2) : i2;\n if (index < 0)\n continue loop;\n distance = index - lastIndex - 1;\n if (distance > 0) {\n if (lastIndex === -1)\n penalty += 10;\n penalty += distance;\n matchMask = matchMask | (1 << j);\n }\n lastIndex = index;\n }\n }\n }\n item.matchMask = matchMask;\n item.exactMatch = penalty ? 0 : 1;\n item.$score = (item.score || 0) - penalty;\n results.push(item);\n }\n return results;\n };\n}).call(FilteredList.prototype);\n\nexports.Autocomplete = Autocomplete;\nexports.FilteredList = FilteredList;\n\n});\n\nace.define(\"ace/autocomplete/text_completer\",[\"require\",\"exports\",\"module\",\"ace/range\"], function(require, exports, module) {\n var Range = require(\"../range\").Range;\n \n var splitRegex = /[^a-zA-Z_0-9\\$\\-\\u00C0-\\u1FFF\\u2C00-\\uD7FF\\w]+/;\n\n function getWordIndex(doc, pos) {\n var textBefore = doc.getTextRange(Range.fromPoints({row: 0, column:0}, pos));\n return textBefore.split(splitRegex).length - 1;\n }\n function wordDistance(doc, pos) {\n var prefixPos = getWordIndex(doc, pos);\n var words = doc.getValue().split(splitRegex);\n var wordScores = Object.create(null);\n \n var currentWord = words[prefixPos];\n\n words.forEach(function(word, idx) {\n if (!word || word === currentWord) return;\n\n var distance = Math.abs(prefixPos - idx);\n var score = words.length - distance;\n if (wordScores[word]) {\n wordScores[word] = Math.max(score, wordScores[word]);\n } else {\n wordScores[word] = score;\n }\n });\n return wordScores;\n }\n\n exports.getCompletions = function(editor, session, pos, prefix, callback) {\n var wordScore = wordDistance(session, pos);\n var wordList = Object.keys(wordScore);\n callback(null, wordList.map(function(word) {\n return {\n caption: word,\n value: word,\n score: wordScore[word],\n meta: \"local\"\n };\n }));\n };\n});\n\nace.define(\"ace/ext/language_tools\",[\"require\",\"exports\",\"module\",\"ace/snippets\",\"ace/autocomplete\",\"ace/config\",\"ace/lib/lang\",\"ace/autocomplete/util\",\"ace/autocomplete/text_completer\",\"ace/editor\",\"ace/config\"], function(require, exports, module) {\n\"use strict\";\n\nvar snippetManager = require(\"../snippets\").snippetManager;\nvar Autocomplete = require(\"../autocomplete\").Autocomplete;\nvar config = require(\"../config\");\nvar lang = require(\"../lib/lang\");\nvar util = require(\"../autocomplete/util\");\n\nvar textCompleter = require(\"../autocomplete/text_completer\");\nvar keyWordCompleter = {\n getCompletions: function(editor, session, pos, prefix, callback) {\n if (session.$mode.completer) {\n return session.$mode.completer.getCompletions(editor, session, pos, prefix, callback);\n }\n var state = editor.session.getState(pos.row);\n var completions = session.$mode.getCompletions(state, session, pos, prefix);\n callback(null, completions);\n }\n};\n\nvar snippetCompleter = {\n getCompletions: function(editor, session, pos, prefix, callback) {\n var scopes = [];\n var token = session.getTokenAt(pos.row, pos.column);\n if (token && token.type.match(/(tag-name|tag-open|tag-whitespace|attribute-name|attribute-value)\\.xml$/))\n scopes.push('html-tag');\n else\n scopes = snippetManager.getActiveScopes(editor);\n\n var snippetMap = snippetManager.snippetMap;\n var completions = [];\n scopes.forEach(function(scope) {\n var snippets = snippetMap[scope] || [];\n for (var i = snippets.length; i--;) {\n var s = snippets[i];\n var caption = s.name || s.tabTrigger;\n if (!caption)\n continue;\n completions.push({\n caption: caption,\n snippet: s.content,\n meta: s.tabTrigger && !s.name ? s.tabTrigger + \"\\u21E5 \" : \"snippet\",\n type: \"snippet\"\n });\n }\n }, this);\n callback(null, completions);\n },\n getDocTooltip: function(item) {\n if (item.type == \"snippet\" && !item.docHTML) {\n item.docHTML = [\n \"\", lang.escapeHTML(item.caption), \" \", \" \",\n lang.escapeHTML(item.snippet)\n ].join(\"\");\n }\n }\n};\n\nvar completers = [snippetCompleter, textCompleter, keyWordCompleter];\nexports.setCompleters = function(val) {\n completers.length = 0;\n if (val) completers.push.apply(completers, val);\n};\nexports.addCompleter = function(completer) {\n completers.push(completer);\n};\nexports.textCompleter = textCompleter;\nexports.keyWordCompleter = keyWordCompleter;\nexports.snippetCompleter = snippetCompleter;\n\nvar expandSnippet = {\n name: \"expandSnippet\",\n exec: function(editor) {\n return snippetManager.expandWithTab(editor);\n },\n bindKey: \"Tab\"\n};\n\nvar onChangeMode = function(e, editor) {\n loadSnippetsForMode(editor.session.$mode);\n};\n\nvar loadSnippetsForMode = function(mode) {\n if (typeof mode == \"string\")\n mode = config.$modes[mode];\n if (!mode)\n return;\n if (!snippetManager.files)\n snippetManager.files = {};\n \n loadSnippetFile(mode.$id, mode.snippetFileId);\n if (mode.modes)\n mode.modes.forEach(loadSnippetsForMode);\n};\n\nvar loadSnippetFile = function(id, snippetFilePath) {\n if (!snippetFilePath || !id || snippetManager.files[id])\n return;\n snippetManager.files[id] = {};\n config.loadModule(snippetFilePath, function(m) {\n if (!m) return;\n snippetManager.files[id] = m;\n if (!m.snippets && m.snippetText)\n m.snippets = snippetManager.parseSnippetFile(m.snippetText);\n snippetManager.register(m.snippets || [], m.scope);\n if (m.includeScopes) {\n snippetManager.snippetMap[m.scope].includeScopes = m.includeScopes;\n m.includeScopes.forEach(function(x) {\n loadSnippetsForMode(\"ace/mode/\" + x);\n });\n }\n });\n};\n\nvar doLiveAutocomplete = function(e) {\n var editor = e.editor;\n var hasCompleter = editor.completer && editor.completer.activated;\n if (e.command.name === \"backspace\") {\n if (hasCompleter && !util.getCompletionPrefix(editor))\n editor.completer.detach();\n }\n else if (e.command.name === \"insertstring\") {\n var prefix = util.getCompletionPrefix(editor);\n if (prefix && !hasCompleter) {\n var completer = Autocomplete.for(editor);\n completer.autoInsert = false;\n completer.showPopup(editor);\n }\n }\n};\n\nvar Editor = require(\"../editor\").Editor;\nrequire(\"../config\").defineOptions(Editor.prototype, \"editor\", {\n enableBasicAutocompletion: {\n set: function(val) {\n if (val) {\n if (!this.completers)\n this.completers = Array.isArray(val)? val: completers;\n this.commands.addCommand(Autocomplete.startCommand);\n } else {\n this.commands.removeCommand(Autocomplete.startCommand);\n }\n },\n value: false\n },\n enableLiveAutocompletion: {\n set: function(val) {\n if (val) {\n if (!this.completers)\n this.completers = Array.isArray(val)? val: completers;\n this.commands.on('afterExec', doLiveAutocomplete);\n } else {\n this.commands.removeListener('afterExec', doLiveAutocomplete);\n }\n },\n value: false\n },\n enableSnippets: {\n set: function(val) {\n if (val) {\n this.commands.addCommand(expandSnippet);\n this.on(\"changeMode\", onChangeMode);\n onChangeMode(null, this);\n } else {\n this.commands.removeCommand(expandSnippet);\n this.off(\"changeMode\", onChangeMode);\n }\n },\n value: false\n }\n});\n}); (function() {\n ace.require([\"ace/ext/language_tools\"], function(m) {\n if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n module.exports = m;\n }\n });\n })();\n ","ace.define(\"ace/mode/lucene_highlight_rules\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text_highlight_rules\"], function(require, exports, module) {\n\"use strict\";\n\nvar oop = require(\"../lib/oop\");\nvar TextHighlightRules = require(\"./text_highlight_rules\").TextHighlightRules;\n\nvar LuceneHighlightRules = function() {\n this.$rules = {\n \"start\" : [\n {\n token: \"constant.language.escape\",\n regex: /\\\\[\\-+&|!(){}\\[\\]^\"~*?:\\\\]/\n }, {\n token: \"constant.character.negation\",\n regex: \"\\\\-\"\n }, {\n token: \"constant.character.interro\",\n regex: \"\\\\?\"\n }, {\n token: \"constant.character.required\",\n regex: \"\\\\+\"\n }, {\n token: \"constant.character.asterisk\",\n regex: \"\\\\*\"\n }, {\n token: 'constant.character.proximity',\n regex: '~(?:0\\\\.[0-9]+|[0-9]+)?'\n }, {\n token: 'keyword.operator',\n regex: '(AND|OR|NOT|TO)\\\\b'\n }, {\n token: \"paren.lparen\",\n regex: \"[\\\\(\\\\{\\\\[]\"\n }, {\n token: \"paren.rparen\",\n regex: \"[\\\\)\\\\}\\\\]]\"\n }, {\n token: \"keyword.operator\",\n regex: /[><=^]/\n }, {\n token: \"constant.numeric\",\n regex: /\\d[\\d.-]*/\n }, {\n token: \"string\",\n regex: /\"(?:\\\\\"|[^\"])*\"/\n }, {\n token: \"keyword\",\n regex: /(?:\\\\.|[^\\s\\-+&|!(){}\\[\\]^\"~*?:\\\\])+:/,\n next: \"maybeRegex\"\n }, {\n token: \"term\",\n regex: /\\w+/\n }, {\n token: \"text\",\n regex: /\\s+/\n }\n ],\n \"maybeRegex\": [{\n token: \"text\",\n regex: /\\s+/\n }, {\n token: \"string.regexp.start\",\n regex: \"/\",\n next: \"regex\"\n }, {\n regex: \"\",\n next: \"start\"\n }],\n \"regex\": [\n {\n token: \"regexp.keyword.operator\",\n regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n }, {\n token: \"string.regexp.end\",\n regex: \"/[sxngimy]*\",\n next: \"no_regex\"\n }, {\n token : \"invalid\",\n regex: /\\{\\d+\\b,?\\d*\\}[+*]|[+*$^?][+*]|[$^][?]|\\?{3,}/\n }, {\n token : \"constant.language.escape\",\n regex: /\\(\\?[:=!]|\\)|\\{\\d+\\b,?\\d*\\}|[+*]\\?|[()$^+*?.]/\n }, {\n token: \"constant.language.escape\",\n regex: \"<\\d+-\\d+>|[~&@]\"\n }, {\n token : \"constant.language.delimiter\",\n regex: /\\|/\n }, {\n token: \"constant.language.escape\",\n regex: /\\[\\^?/,\n next: \"regex_character_class\"\n }, {\n token: \"empty\",\n regex: \"$\",\n next: \"no_regex\"\n }, {\n defaultToken: \"string.regexp\"\n }\n ],\n \"regex_character_class\": [\n {\n token: \"regexp.charclass.keyword.operator\",\n regex: \"\\\\\\\\(?:u[\\\\da-fA-F]{4}|x[\\\\da-fA-F]{2}|.)\"\n }, {\n token: \"constant.language.escape\",\n regex: \"]\",\n next: \"regex\"\n }, {\n token: \"constant.language.escape\",\n regex: \"-\"\n }, {\n token: \"empty\",\n regex: \"$\",\n next: \"no_regex\"\n }, {\n defaultToken: \"string.regexp.charachterclass\"\n }\n ]\n };\n};\n\noop.inherits(LuceneHighlightRules, TextHighlightRules);\n\nexports.LuceneHighlightRules = LuceneHighlightRules;\n});\n\nace.define(\"ace/mode/lucene\",[\"require\",\"exports\",\"module\",\"ace/lib/oop\",\"ace/mode/text\",\"ace/mode/lucene_highlight_rules\"], function(require, exports, module) {\n'use strict';\n\nvar oop = require(\"../lib/oop\");\nvar TextMode = require(\"./text\").Mode;\nvar LuceneHighlightRules = require(\"./lucene_highlight_rules\").LuceneHighlightRules;\n\nvar Mode = function() {\n this.HighlightRules = LuceneHighlightRules;\n this.$behaviour = this.$defaultBehaviour;\n};\n\noop.inherits(Mode, TextMode);\n\n(function() {\n this.$id = \"ace/mode/lucene\";\n}).call(Mode.prototype);\n\nexports.Mode = Mode;\n}); (function() {\n ace.require([\"ace/mode/lucene\"], function(m) {\n if (typeof module == \"object\" && typeof exports == \"object\" && module) {\n module.exports = m;\n }\n });\n })();\n "],"sourceRoot":""}