From 48d4e4e537e20aadf15468d04e22fe4d5cd4fa62 Mon Sep 17 00:00:00 2001 From: Ton Huisman Date: Tue, 8 Nov 2022 19:58:20 +0100 Subject: [PATCH] [CodeMirror] Add NeoPixelBright command --- static/espeasy.js | 2 +- static/espeasy.min.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/static/espeasy.js b/static/espeasy.js index 3f27d7a90..39d6e9156 100644 --- a/static/espeasy.js +++ b/static/espeasy.js @@ -38,7 +38,7 @@ var commonPlugins = [ //P036 "OledFramedCmd", "OledFramedCmd,Display", "OledFramedCmd,Frame", "OledFramedCmd,linecount", "OledFramedCmd,leftalign", //P038 - "NeoPixel", "NeoPixelAll", "NeoPixelLine", "NeoPixelHSV", "NeoPixelAllHSV", "NeoPixelLineHSV", + "NeoPixel", "NeoPixelAll", "NeoPixelLine", "NeoPixelHSV", "NeoPixelAllHSV", "NeoPixelLineHSV", "NeoPixelBright", //P048 "MotorShieldCmd,DCMotor", "MotorShieldCmd,Stepper", //P052 diff --git a/static/espeasy.min.js b/static/espeasy.min.js index 13fbff54d..b2c6fc845 100644 --- a/static/espeasy.min.js +++ b/static/espeasy.min.js @@ -1 +1 @@ -var commonAtoms=["And","Or"],commonKeywords=["If","Else","Elseif","Endif"],commonCommands=["AccessInfo","Background","Build","ClearAccessBlock","ClearRTCam","Config","ControllerDisable","ControllerEnable","DateTime","Debug","DeepSleep","DNS","DST","EraseSDKWiFi","ExecuteRules","Gateway","I2Cscanner","IP","Let","Load","LogEntry","LogPortStatus","LoopTimerSet","LoopTimerSet_ms","MemInfo","MemInfoDetail","Name","Password","Publish","Reboot","Reset","Save","SendTo","SendToHTTP","SendToUDP","Settings","Subnet","Subscribe","TaskClear","TaskClearAll","TaskDisable","TaskEnable","TaskRun","TaskValueSet","TaskValueSetAndRun","TimerPause","TimerResume","TimerSet","TimerSet_ms","TimeZone","UdpPort","UdpTest","Unit","UseNTP","WdConfig","WdRead","WiFi","WiFiAPkey","WiFiAllowAP","WiFiAPMode","WiFiConnect","WiFiDisconnect","WiFiKey","WiFiKey2","WiFiScan","WiFiSSID","WiFiSSID2","WiFiSTAMode","WiFi#Disconnected","Event","AsyncEvent","GPIO","GPIOToggle","LongPulse","LongPulse_mS","Monitor","Pulse","PWM","Servo","Status","Tone","RTTTL","UnMonitor"],commonString2=["Clock#Time","Login#Failed","MQTT#Connected","MQTT#Disconnected","MQTTimport#Connected","MQTTimport#Disconnected","Rules#Timer","System#Boot","System#BootMode","System#Sleep","System#Wake","TaskExit#","TaskInit#","Time#Initialized","Time#Set","WiFi#APmodeDisabled","WiFi#APmodeEnabled","WiFi#ChangedAccesspoint","WiFi#ChangedWiFichannel","WiFi#Connected"],commonPlugins=["ResetPulseCounter","SetPulseCounterTotal","LogPulseStatistic","analogout","MCPGPIO","MCPGPIOToggle","MCPLongPulse","MCPLongPulse_ms","MCPPulse","Status,MCP","Monitor,MCP","MonitorRange,MCP","UnMonitorRange,MCP","UnMonitor,MCP","MCPGPIORange","MCPGPIOPattern","MCPMode","MCPModeRange","LCDCmd","LCD","PCFGPIO","PCFGPIOToggle","PCFLongPulse","PCFLongPulse_ms","PCFPulse","Status,PCF","Monitor,PCF","MonitorRange,PCF","UnMonitorRange,PCF","UnMonitor,PCF","PCFGPIORange","PCFGPIOpattern","PCFMode","PCFmodeRange","pcapwm","pcafrq","mode2","OLED","OLEDCMD","OLEDCMD,on","OLEDCMD,off","OLEDCMD,clear","IRSEND","IRSENDAC","OledFramedCmd","OledFramedCmd,Display","OledFramedCmd,Frame","OledFramedCmd,linecount","OledFramedCmd,leftalign","NeoPixel","NeoPixelAll","NeoPixelLine","NeoPixelHSV","NeoPixelAllHSV","NeoPixelLineHSV","MotorShieldCmd,DCMotor","MotorShieldCmd,Stepper","Sensair_SetRelay","PMSX003","PMSX003,Wake","PMSX003,Sleep","PMSX003,Reset","encwrite","Play","Vol","Eq","Mode","Repeat","tareChanA","tareChanB","7dn","7dst","7dsd","7dtext","7dtt","7dt","7dtfont","7dtbin","7don","7doff","7output","HLWCalibrate","HLWReset","WemosMotorShieldCMD","LolinMotorShieldCMD","GPS","GPS,Sleep","GPS,Wake","GPS#GotFix","GPS#LostFix","GPS#Travelled","homieValueSet","HeatPumpir","MitsubishiHP","MitsubishiHP,temperature","MitsubishiHP,power","MitsubishiHP,mode","MitsubishiHP,fan","MitsubishiHP,vane","MitsubishiHP,widevane","Culreader_Write","Touch","Touch,Rot","Touch,Flip","Touch,Enable","Touch,Disable","Touch,On","Touch,Off","Touch,Toggle","Touch,Setgrp","Touch,Ingrp","Touch,Decgrp","Touch,Incpage","Touch,Decpage","Touch,Updatebutton","WakeOnLan","DotMatrix","DotMatrix,clear","DotMatrix,update","DotMatrix,size","DotMatrix,txt","DotMatrix,settxt","DotMatrix,content","DotMatrix,alignment","DotMatrix,anim.in","DotMatrix,anim.out","DotMatrix,speed","DotMatrix,pause","DotMatrix,font","DotMatrix,layout","DotMatrix,inverted","DotMatrix,specialeffect","DotMatrix,offset","DotMatrix,brightness","DotMatrix,repeat","DotMatrix,setbar","DotMatrix,bar","Thermo","Thermo,Up","Thermo,Down","Thermo,Mode","Thermo,ModeBtn","Thermo,Setpoint","Max1704xclearalert","scdgetabc","scdgetalt","scdgettmp","scdsetcalibration","scdsetfrc","scdgetinterval","multirelay","multirelay,on","multirelay,off","multirelay,set","multirelay,get","multirelay,loop","ShiftOut","ShiftOut,Set","ShiftOut,SetNoUpdate","ShiftOut,Update","ShiftOut,SetAll","ShiftOut,SetAllNoUpdate","ShiftOut,SetAllLow","ShiftOut,SetAllHigh","ShiftOut,SetChipCount","ShiftOut,SetHexBin","ShiftIn","ShiftIn,PinEvent","ShiftIn,ChipEvent","ShiftIn,SetChipCount","ShiftIn,SampleFrequency","ShiftIn,EventPerPin","cdmrst"],pluginDispKind=["tft","ili9341","ili9342","ili9481","ili9486","ili9488","eink","epaper","il3897","uc8151d","ssd1680","ws2in7","ws1in54","st77xx","st7735","st7789","st7796","neomatrix","neo"],pluginDispCmd=["cmd,on","cmd,off","cmd,clear","cmd,backlight","cmd,bright","cmd,deepsleep","cmd,seq_start","cmd,seq_end","cmd,inv","cmd,rot",",clear",",rot",",tpm",",txt",",txp",",txz",",txc",",txs",",txtfull",",asciitable",",font",",l",",lh",",lv",",lm",",lmr",",r",",rf",",c",",cf",",rf",",t",",tf",",rr",",rrf",",px",",pxh",",pxv",",bmp",",btn"],commonTag=["On","Do","Endon"],commonNumber=["toBin","toHex","Constrain","XOR","AND:","OR:","Ord","bitRead","bitSet","bitClear","bitWrite","urlencode"],commonMath=["Log","Ln","Abs","Exp","Sqrt","Sq","Round","Sin","Cos","Tan","aSin","aCos","aTan","Sind_d","Cos_d","Tan_d","aSin_d","aCos_d","sTan_d"],commonWarning=["delay","Delay","ResetFlashWriteCounter"],AnythingElse=["%eventvalue%","%eventpar%","%eventname%","substring","%sysname%","%bootcause%","%systime%","%systm_hm%","%systm_hm_0%","%systm_hm_sp%","%systime_am%","%systime_am_0%","%systime_am_sp%","%systm_hm_am%","%systm_hm_am_0%","%systm_hm_am_sp%","%lcltime%","%sunrise%","%s_sunrise%","%m_sunrise%","%sunset%","%s_sunset%","%m_sunset%","%lcltime_am%","%syshour%","%syshour_0%","%sysmin%","%sysmin_0%","%syssec%","%syssec_0%","%sysday%","%sysday_0%","%sysmonth%","%sysmonth_0%","%sysyear%","%sysyear_0%","%sysyears%","%sysweekday%","%sysweekday_s%","%unixtime%","%uptime%","%uptime_ms%","%rssi%","%ip%","%unit%","%ssid%","%bssid%","%wi_ch%","%iswifi%","%vcc%","%mac%","%mac_int%","%isntp%","%ismqtt%","%dns%","%dns1%","%dns2%","%flash_freq%","%flash_size%","%flash_chip_vendor%","%flash_chip_model%","%fs_free%","%fs_size%","%cpu_id%","%cpu_freq%","%cpu_model%","%cpu_rev%","%cpu_cores%","%board_name%","%c_w_dir%","%c_c2f%","%c_ms2Bft%","%c_dew_th%","%c_alt_pres_sea%","%c_sea_pres_alt%","%c_cm2imp%","%c_mm2imp%","%c_m2day%","%c_m2dh%","%c_m2dhm%","%c_s2dhms%","%c_2hex%","%c_u2ip%"];for(const element2 of pluginDispKind)commonPlugins=commonPlugins.concat(element2);for(const element2 of pluginDispKind)for(const element3 of pluginDispCmd){let mergedDisp=element2+element3;commonPlugins=commonPlugins.concat(mergedDisp)}var EXTRAWORDS=commonAtoms.concat(commonPlugins,commonKeywords,commonCommands,commonString2,commonTag,commonNumber,commonMath,commonWarning,AnythingElse),rEdit;function initCM(){CodeMirror.commands.autocomplete=function(cm){cm.showHint({hint:CodeMirror.hint.anyword})},(rEdit=CodeMirror.fromTextArea(document.getElementById("rules"),{tabSize:2,indentWithTabs:!1,lineNumbers:!0,autoCloseBrackets:!0,extraKeys:{"Ctrl-Space":"autocomplete",Tab:cm=>{"null"===cm.getMode().name?cm.execCommand("insertTab"):cm.somethingSelected()?cm.execCommand("indentMore"):cm.execCommand("insertSoftTab")},"Shift-Tab":cm=>cm.execCommand("indentLess")}})).on("change",(function(){rEdit.save()})),rEdit.on("inputRead",(function(cm,event){var letters=/[\w%,#]/,cur=cm.getCursor(),token=cm.getTokenAt(cur);letters.test(event.text)&&"comment"!=token.type&&cm.showHint({completeSingle:!1})}))}!function(mod){"object"==typeof exports&&"object"==typeof module?mod(require("codemirror")):"function"==typeof define&&define.amd?define(["codemirror"],mod):mod(CodeMirror)}((function(CodeMirror){"use strict";CodeMirror.defineMode("espeasy",(function(){var words={};function define(style,dict){for(var i=0;iname.toLowerCase());commonCommands=commonCommands.concat(lCcommonCommands);var lCcommonString2=commonString2.map(name=>name.toLowerCase());commonString2=commonString2.concat(lCcommonString2);var lCcommonPlugins=commonPlugins.map(name=>name.toLowerCase());commonPlugins=commonPlugins.concat(lCcommonPlugins);var lCcommonAtoms=commonAtoms.map(name=>name.toLowerCase());commonAtoms=commonAtoms.concat(lCcommonAtoms);var lCcommonKeywords=commonKeywords.map(name=>name.toLowerCase());commonKeywords=commonKeywords.concat(lCcommonKeywords);var lCcommonTag=commonTag.map(name=>name.toLowerCase());commonTag=commonTag.concat(lCcommonTag);var lCcommonNumber=commonNumber.map(name=>name.toLowerCase());commonNumber=commonNumber.concat(lCcommonNumber);var lCcommonMath=commonMath.map(name=>name.toLowerCase());function tokenBase(stream,state){if(stream.eatSpace())return null;var sol=stream.sol(),ch=stream.next();if(/\d/.test(ch)){if("0"==ch)return"x"===stream.next()?(stream.eatWhile(/\w/),"number"):(stream.eatWhile(/\d|\./),"number");if(stream.eatWhile(/\d|\./),!stream.match("d")&&!stream.match("output")&&(stream.eol()||/\D/.test(stream.peek())))return"number"}if(/\w/.test(ch))for(const element of EXTRAWORDS){let WinDB=element.substring(1);(element.includes(":")||element.includes(","))&&stream.match(WinDB)}if(/\w/.test(ch)&&(stream.eatWhile(/[\w]/),stream.match(".gpio")||stream.match(".pulse")||stream.match(".frq")||stream.match(".pwm")))return"def";if("\\"===ch)return stream.next(),null;if("("===ch||")"===ch)return"bracket";if("{"===ch||"}"===ch||":"===ch)return"number";if("/"==ch)return/\//.test(stream.peek())?(stream.skipToEnd(),"comment"):"operator";if("'"==ch&&(stream.eatWhile(/[^']/),stream.match("'")))return"attribute";if("+"===ch||"="===ch||"<"===ch||">"===ch||"-"===ch||","===ch||"*"===ch||"!"===ch)return"operator";if("%"==ch&&(stream.eatWhile(/[^\s\%]/),stream.match("%")))return"hr";if("["==ch&&(stream.eatWhile(/[^\s\]]/),stream.eat("]")))return"hr";stream.eatWhile(/\w/);var cur=stream.current();return/\w/.test(ch)&&stream.match("#")?(stream.eatWhile(/[\w#]/),"string-2"):"#"===ch?(stream.eatWhile(/\w/),"number"):words.hasOwnProperty(cur)?words[cur]:null}function tokenize(stream,state){return(state.tokens[0]||tokenBase)(stream,state)}return commonMath=commonMath.concat(lCcommonMath),define("atom",commonAtoms),define("keyword",commonKeywords),define("builtin",commonCommands),define("string-2",commonString2),define("def",commonPlugins),define("tag",commonTag),define("number",commonNumber),define("bracket",commonMath),define("warning",commonWarning),{startState:function(){return{tokens:[]}},token:function(stream,state){return tokenize(stream,state)},closeBrackets:"[]{}''\"\"``()",lineComment:"//",fold:"brace"}}))})),function(closeBrackets){"object"==typeof exports&&"object"==typeof module?closeBrackets(require("../../lib/codemirror")):"function"==typeof define&&define.amd?define(["../../lib/codemirror"],mod):closeBrackets(CodeMirror)}((function(CodeMirror){var defaults={pairs:"()[]{}''\"\"",closeBefore:")]}'\":;>",triples:"",explode:"[]{}"},Pos=CodeMirror.Pos;function getOption(conf,name){return"pairs"==name&&"string"==typeof conf?conf:"object"==typeof conf&&null!=conf[name]?conf[name]:defaults[name]}CodeMirror.defineOption("autoCloseBrackets",!1,(function(cm,val,old){old&&old!=CodeMirror.Init&&(cm.removeKeyMap(keyMap),cm.state.closeBrackets=null),val&&(ensureBound(getOption(val,"pairs")),cm.state.closeBrackets=val,cm.addKeyMap(keyMap))}));var keyMap={Backspace:handleBackspace,Enter:handleEnter};function ensureBound(chars){for(var i=0;i=0;i--){var cur=ranges[i].head;cm.replaceRange("",Pos(cur.line,cur.ch-1),Pos(cur.line,cur.ch+1),"+delete")}}function handleEnter(cm){var conf=getConfig(cm),explode=conf&&getOption(conf,"explode");if(!explode||cm.getOption("disableInput"))return CodeMirror.Pass;for(var ranges=cm.listSelections(),i=0;i0?{line:range.head.line,ch:range.head.ch+dir}:{line:range.head.line-1};newRanges.push({anchor:pos,head:pos})}cm.setSelections(newRanges,primary)}function contractSelection(sel){var inverted=CodeMirror.cmpPos(sel.anchor,sel.head)>0;return{anchor:new Pos(sel.anchor.line,sel.anchor.ch+(inverted?-1:1)),head:new Pos(sel.head.line,sel.head.ch+(inverted?1:-1))}}function handleChar(cm,ch){var conf=getConfig(cm);if(!conf||cm.getOption("disableInput"))return CodeMirror.Pass;var pairs=getOption(conf,"pairs"),pos=pairs.indexOf(ch);if(-1==pos)return CodeMirror.Pass;for(var closeBefore=getOption(conf,"closeBefore"),triples=getOption(conf,"triples"),identical=pairs.charAt(pos+1)==ch,ranges=cm.listSelections(),opening=pos%2==0,type,i=0;i1&&triples.indexOf(ch)>=0&&cm.getRange(Pos(cur.line,cur.ch-2),cur)==ch+ch){if(cur.ch>2&&/\bstring/.test(cm.getTokenTypeAt(Pos(cur.line,cur.ch-2))))return CodeMirror.Pass;curType="addFour"}else if(identical){var prev=0==cur.ch?" ":cm.getRange(Pos(cur.line,cur.ch-1),cur);if(CodeMirror.isWordChar(next)||prev==ch||CodeMirror.isWordChar(prev))return CodeMirror.Pass;curType="both"}else{if(!opening||!(0===next.length||/\s/.test(next)||closeBefore.indexOf(next)>-1))return CodeMirror.Pass;curType="both"}else curType=identical&&stringStartsAfter(cm,cur)?"both":triples.indexOf(ch)>=0&&cm.getRange(cur,Pos(cur.line,cur.ch+3))==ch+ch+ch?"skipThree":"skip";if(type){if(type!=curType)return CodeMirror.Pass}else type=curType}var left=pos%2?pairs.charAt(pos-1):ch,right=pos%2?ch:pairs.charAt(pos+1);cm.operation((function(){if("skip"==type)moveSel(cm,1);else if("skipThree"==type)moveSel(cm,3);else if("surround"==type){for(var sels=cm.getSelections(),i=0;ie.execCommand("indentLess")}})).on("change",function(){rEdit.save()}),rEdit.on("inputRead",function(e,t){var n=e.getCursor(),o=e.getTokenAt(n);/[\w%,#]/.test(t.text)&&"comment"!=o.type&&e.showHint({completeSingle:!1})})}!function(e){"object"==typeof exports&&"object"==typeof module?e(require("codemirror")):"function"==typeof define&&define.amd?define(["codemirror"],e):e(CodeMirror)}(function(e){"use strict";e.defineMode("espeasy",function(){var e={};function t(t,n){for(var o=0;oe.toLowerCase());commonCommands=commonCommands.concat(n);var o=commonString2.map(e=>e.toLowerCase());commonString2=commonString2.concat(o);var i=commonPlugins.map(e=>e.toLowerCase());commonPlugins=commonPlugins.concat(i);var r=commonAtoms.map(e=>e.toLowerCase());commonAtoms=commonAtoms.concat(r);var a=commonKeywords.map(e=>e.toLowerCase());commonKeywords=commonKeywords.concat(a);var s=commonTag.map(e=>e.toLowerCase());commonTag=commonTag.concat(s);var m=commonNumber.map(e=>e.toLowerCase());commonNumber=commonNumber.concat(m);var c=commonMath.map(e=>e.toLowerCase());function l(t,n){if(t.eatSpace())return null;t.sol();var o=t.next();if(/\d/.test(o)){if("0"==o)return"x"===t.next()?(t.eatWhile(/\w/),"number"):(t.eatWhile(/\d|\./),"number");if(t.eatWhile(/\d|\./),!t.match("d")&&!t.match("output")&&(t.eol()||/\D/.test(t.peek())))return"number"}if(/\w/.test(o))for(let i of EXTRAWORDS){let r=i.substring(1);(i.includes(":")||i.includes(","))&&t.match(r)}if(/\w/.test(o)&&(t.eatWhile(/[\w]/),t.match(".gpio")||t.match(".pulse")||t.match(".frq")||t.match(".pwm")))return"def";if("\\"===o)return t.next(),null;if("("===o||")"===o)return"bracket";if("{"===o||"}"===o||":"===o)return"number";if("/"==o)return/\//.test(t.peek())?(t.skipToEnd(),"comment"):"operator";if("'"==o&&(t.eatWhile(/[^']/),t.match("'")))return"attribute";if("+"===o||"="===o||"<"===o||">"===o||"-"===o||","===o||"*"===o||"!"===o)return"operator";if("%"==o&&(t.eatWhile(/[^\s\%]/),t.match("%"))||"["==o&&(t.eatWhile(/[^\s\]]/),t.eat("]")))return"hr";t.eatWhile(/\w/);var a=t.current();return/\w/.test(o)&&t.match("#")?(t.eatWhile(/[\w#]/),"string-2"):"#"===o?(t.eatWhile(/\w/),"number"):e.hasOwnProperty(a)?e[a]:null}return commonMath=commonMath.concat(c),t("atom",commonAtoms),t("keyword",commonKeywords),t("builtin",commonCommands),t("string-2",commonString2),t("def",commonPlugins),t("tag",commonTag),t("number",commonNumber),t("bracket",commonMath),t("warning",commonWarning),{startState:function(){return{tokens:[]}},token:function(e,t){var n,o;return n=e,((o=t).tokens[0]||l)(n,o)},closeBrackets:"[]{}''\"\"``()",lineComment:"//",fold:"brace"}})}),function(e){"object"==typeof exports&&"object"==typeof module?e(require("../../lib/codemirror")):"function"==typeof define&&define.amd?define(["../../lib/codemirror"],mod):e(CodeMirror)}(function(e){var t={pairs:"()[]{}''\"\"",closeBefore:")]}'\":;>",triples:"",explode:"[]{}"},n=e.Pos;function o(e,n){return"pairs"==n&&"string"==typeof e?e:"object"==typeof e&&null!=e[n]?e[n]:t[n]}e.defineOption("autoCloseBrackets",!1,function(t,n,a){a&&a!=e.Init&&(t.removeKeyMap(i),t.state.closeBrackets=null),n&&(r(o(n,"pairs")),t.state.closeBrackets=n,t.addKeyMap(i))});var i={Backspace:function t(i){var r=s(i);if(!r||i.getOption("disableInput"))return e.Pass;for(var a=o(r,"pairs"),m=i.listSelections(),c=0;c=0;c--){var d=m[c].head;i.replaceRange("",n(d.line,d.ch-1),n(d.line,d.ch+1),"+delete")}},Enter:function t(n){var i=s(n),r=i&&o(i,"explode");if(!r||n.getOption("disableInput"))return e.Pass;for(var a=n.listSelections(),c=0;c=0&&i.getRange(y,n(y.line,y.ch+3))==r+r+r?"skipThree":"skip";else if(p&&y.ch>1&&f.indexOf(r)>=0&&i.getRange(n(y.line,y.ch-2),y)==r+r){if(y.ch>2&&/\bstring/.test(i.getTokenTypeAt(n(y.line,y.ch-2))))return e.Pass;M="addFour"}else if(p){var x=0==y.ch?" ":i.getRange(n(y.line,y.ch-1),y);if(e.isWordChar(b)||x==r||e.isWordChar(x))return e.Pass;M="both"}else{if(!(S&&(0===b.length||/\s/.test(b)||h.indexOf(b)>-1)))return e.Pass;M="both"}if(C){if(C!=M)return e.Pass}else C=M}var v=d%2?l.charAt(d-1):r,D=d%2?r:l.charAt(d+1);i.operation(function(){if("skip"==C)m(i,1);else if("skipThree"==C)m(i,3);else if("surround"==C){for(var e=i.getSelections(),t=0;t0?{line:a.head.line,ch:a.head.ch+t}:{line:a.head.line-1};n.push({anchor:s,head:s})}e.setSelections(n,i)}function c(t){var o=e.cmpPos(t.anchor,t.head)>0;return{anchor:new n(t.anchor.line,t.anchor.ch+(o?-1:1)),head:new n(t.head.line,t.head.ch+(o?1:-1))}}function l(e,t){var o=e.getRange(n(t.line,t.ch-1),n(t.line,t.ch+1));return 2==o.length?o:null}function u(e,t){var o=e.getTokenAt(n(t.line,t.ch+1));return/\bstring/.test(o.type)&&o.start==t.ch&&(0==t.ch||!/\bstring/.test(e.getTokenTypeAt(t)))}r(t.pairs+"`")}); \ No newline at end of file