Created
May 7, 2018 12:58
-
-
Save lsei/279c768480437b273c0199735bd98d32 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* PrismJS 1.14.0 | |
http://prismjs.com/download.html#themes=prism&languages=sql */ | |
/** | |
* prism.js default theme for JavaScript, CSS and HTML | |
* Based on dabblet (http://dabblet.com) | |
* @author Lea Verou | |
*/ | |
code[class*="language-"], | |
pre[class*="language-"] { | |
color: black; | |
background: none; | |
text-shadow: 0 1px white; | |
font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; | |
text-align: left; | |
white-space: pre; | |
word-spacing: normal; | |
word-break: normal; | |
word-wrap: normal; | |
line-height: 1.5; | |
-moz-tab-size: 4; | |
-o-tab-size: 4; | |
tab-size: 4; | |
-webkit-hyphens: none; | |
-moz-hyphens: none; | |
-ms-hyphens: none; | |
hyphens: none; | |
} | |
pre[class*="language-"]::-moz-selection, pre[class*="language-"] ::-moz-selection, | |
code[class*="language-"]::-moz-selection, code[class*="language-"] ::-moz-selection { | |
text-shadow: none; | |
background: #b3d4fc; | |
} | |
pre[class*="language-"]::selection, pre[class*="language-"] ::selection, | |
code[class*="language-"]::selection, code[class*="language-"] ::selection { | |
text-shadow: none; | |
background: #b3d4fc; | |
} | |
@media print { | |
code[class*="language-"], | |
pre[class*="language-"] { | |
text-shadow: none; | |
} | |
} | |
/* Code blocks */ | |
pre[class*="language-"] { | |
padding: 1em; | |
margin: .5em 0; | |
overflow: auto; | |
} | |
:not(pre) > code[class*="language-"], | |
pre[class*="language-"] { | |
background: #f5f2f0; | |
} | |
/* Inline code */ | |
:not(pre) > code[class*="language-"] { | |
padding: .1em; | |
border-radius: .3em; | |
white-space: normal; | |
} | |
.token.comment, | |
.token.prolog, | |
.token.doctype, | |
.token.cdata { | |
color: slategray; | |
} | |
.token.punctuation { | |
color: #999; | |
} | |
.namespace { | |
opacity: .7; | |
} | |
.token.property, | |
.token.tag, | |
.token.boolean, | |
.token.number, | |
.token.constant, | |
.token.symbol, | |
.token.deleted { | |
color: #905; | |
} | |
.token.selector, | |
.token.attr-name, | |
.token.string, | |
.token.char, | |
.token.builtin, | |
.token.inserted { | |
color: #690; | |
} | |
.token.operator, | |
.token.entity, | |
.token.url, | |
.language-css .token.string, | |
.style .token.string { | |
color: #9a6e3a; | |
background: hsla(0, 0%, 100%, .5); | |
} | |
.token.atrule, | |
.token.attr-value, | |
.token.keyword { | |
color: #07a; | |
} | |
.token.function, | |
.token.class-name { | |
color: #DD4A68; | |
} | |
.token.regex, | |
.token.important, | |
.token.variable { | |
color: #e90; | |
} | |
.token.important, | |
.token.bold { | |
font-weight: bold; | |
} | |
.token.italic { | |
font-style: italic; | |
} | |
.token.entity { | |
cursor: help; | |
} | |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* PrismJS 1.14.0 | |
http://prismjs.com/download.html#themes=prism&languages=sql */ | |
var _self = (typeof window !== 'undefined') | |
? window // if in browser | |
: ( | |
(typeof WorkerGlobalScope !== 'undefined' && self instanceof WorkerGlobalScope) | |
? self // if in worker | |
: {} // if in node js | |
); | |
/** | |
* Prism: Lightweight, robust, elegant syntax highlighting | |
* MIT license http://www.opensource.org/licenses/mit-license.php/ | |
* @author Lea Verou http://lea.verou.me | |
*/ | |
var Prism = (function(){ | |
// Private helper vars | |
var lang = /\blang(?:uage)?-([\w-]+)\b/i; | |
var uniqueId = 0; | |
var _ = _self.Prism = { | |
manual: _self.Prism && _self.Prism.manual, | |
disableWorkerMessageHandler: _self.Prism && _self.Prism.disableWorkerMessageHandler, | |
util: { | |
encode: function (tokens) { | |
if (tokens instanceof Token) { | |
return new Token(tokens.type, _.util.encode(tokens.content), tokens.alias); | |
} else if (_.util.type(tokens) === 'Array') { | |
return tokens.map(_.util.encode); | |
} else { | |
return tokens.replace(/&/g, '&').replace(/</g, '<').replace(/\u00a0/g, ' '); | |
} | |
}, | |
type: function (o) { | |
return Object.prototype.toString.call(o).match(/\[object (\w+)\]/)[1]; | |
}, | |
objId: function (obj) { | |
if (!obj['__id']) { | |
Object.defineProperty(obj, '__id', { value: ++uniqueId }); | |
} | |
return obj['__id']; | |
}, | |
// Deep clone a language definition (e.g. to extend it) | |
clone: function (o, visited) { | |
var type = _.util.type(o); | |
visited = visited || {}; | |
switch (type) { | |
case 'Object': | |
if (visited[_.util.objId(o)]) { | |
return visited[_.util.objId(o)]; | |
} | |
var clone = {}; | |
visited[_.util.objId(o)] = clone; | |
for (var key in o) { | |
if (o.hasOwnProperty(key)) { | |
clone[key] = _.util.clone(o[key], visited); | |
} | |
} | |
return clone; | |
case 'Array': | |
if (visited[_.util.objId(o)]) { | |
return visited[_.util.objId(o)]; | |
} | |
var clone = []; | |
visited[_.util.objId(o)] = clone; | |
o.forEach(function (v, i) { | |
clone[i] = _.util.clone(v, visited); | |
}); | |
return clone; | |
} | |
return o; | |
} | |
}, | |
languages: { | |
extend: function (id, redef) { | |
var lang = _.util.clone(_.languages[id]); | |
for (var key in redef) { | |
lang[key] = redef[key]; | |
} | |
return lang; | |
}, | |
/** | |
* Insert a token before another token in a language literal | |
* As this needs to recreate the object (we cannot actually insert before keys in object literals), | |
* we cannot just provide an object, we need anobject and a key. | |
* @param inside The key (or language id) of the parent | |
* @param before The key to insert before. If not provided, the function appends instead. | |
* @param insert Object with the key/value pairs to insert | |
* @param root The object that contains `inside`. If equal to Prism.languages, it can be omitted. | |
*/ | |
insertBefore: function (inside, before, insert, root) { | |
root = root || _.languages; | |
var grammar = root[inside]; | |
if (arguments.length == 2) { | |
insert = arguments[1]; | |
for (var newToken in insert) { | |
if (insert.hasOwnProperty(newToken)) { | |
grammar[newToken] = insert[newToken]; | |
} | |
} | |
return grammar; | |
} | |
var ret = {}; | |
for (var token in grammar) { | |
if (grammar.hasOwnProperty(token)) { | |
if (token == before) { | |
for (var newToken in insert) { | |
if (insert.hasOwnProperty(newToken)) { | |
ret[newToken] = insert[newToken]; | |
} | |
} | |
} | |
ret[token] = grammar[token]; | |
} | |
} | |
// Update references in other language definitions | |
_.languages.DFS(_.languages, function(key, value) { | |
if (value === root[inside] && key != inside) { | |
this[key] = ret; | |
} | |
}); | |
return root[inside] = ret; | |
}, | |
// Traverse a language definition with Depth First Search | |
DFS: function(o, callback, type, visited) { | |
visited = visited || {}; | |
for (var i in o) { | |
if (o.hasOwnProperty(i)) { | |
callback.call(o, i, o[i], type || i); | |
if (_.util.type(o[i]) === 'Object' && !visited[_.util.objId(o[i])]) { | |
visited[_.util.objId(o[i])] = true; | |
_.languages.DFS(o[i], callback, null, visited); | |
} | |
else if (_.util.type(o[i]) === 'Array' && !visited[_.util.objId(o[i])]) { | |
visited[_.util.objId(o[i])] = true; | |
_.languages.DFS(o[i], callback, i, visited); | |
} | |
} | |
} | |
} | |
}, | |
plugins: {}, | |
highlightAll: function(async, callback) { | |
_.highlightAllUnder(document, async, callback); | |
}, | |
highlightAllUnder: function(container, async, callback) { | |
var env = { | |
callback: callback, | |
selector: 'code[class*="language-"], [class*="language-"] code, code[class*="lang-"], [class*="lang-"] code' | |
}; | |
_.hooks.run("before-highlightall", env); | |
var elements = env.elements || container.querySelectorAll(env.selector); | |
for (var i=0, element; element = elements[i++];) { | |
_.highlightElement(element, async === true, env.callback); | |
} | |
}, | |
highlightElement: function(element, async, callback) { | |
// Find language | |
var language, grammar, parent = element; | |
while (parent && !lang.test(parent.className)) { | |
parent = parent.parentNode; | |
} | |
if (parent) { | |
language = (parent.className.match(lang) || [,''])[1].toLowerCase(); | |
grammar = _.languages[language]; | |
} | |
// Set language on the element, if not present | |
element.className = element.className.replace(lang, '').replace(/\s+/g, ' ') + ' language-' + language; | |
if (element.parentNode) { | |
// Set language on the parent, for styling | |
parent = element.parentNode; | |
if (/pre/i.test(parent.nodeName)) { | |
parent.className = parent.className.replace(lang, '').replace(/\s+/g, ' ') + ' language-' + language; | |
} | |
} | |
var code = element.textContent; | |
var env = { | |
element: element, | |
language: language, | |
grammar: grammar, | |
code: code | |
}; | |
_.hooks.run('before-sanity-check', env); | |
if (!env.code || !env.grammar) { | |
if (env.code) { | |
_.hooks.run('before-highlight', env); | |
env.element.textContent = env.code; | |
_.hooks.run('after-highlight', env); | |
} | |
_.hooks.run('complete', env); | |
return; | |
} | |
_.hooks.run('before-highlight', env); | |
if (async && _self.Worker) { | |
var worker = new Worker(_.filename); | |
worker.onmessage = function(evt) { | |
env.highlightedCode = evt.data; | |
_.hooks.run('before-insert', env); | |
env.element.innerHTML = env.highlightedCode; | |
callback && callback.call(env.element); | |
_.hooks.run('after-highlight', env); | |
_.hooks.run('complete', env); | |
}; | |
worker.postMessage(JSON.stringify({ | |
language: env.language, | |
code: env.code, | |
immediateClose: true | |
})); | |
} | |
else { | |
env.highlightedCode = _.highlight(env.code, env.grammar, env.language); | |
_.hooks.run('before-insert', env); | |
env.element.innerHTML = env.highlightedCode; | |
callback && callback.call(element); | |
_.hooks.run('after-highlight', env); | |
_.hooks.run('complete', env); | |
} | |
}, | |
highlight: function (text, grammar, language) { | |
var env = { | |
code: text, | |
grammar: grammar, | |
language: language | |
}; | |
_.hooks.run('before-tokenize', env); | |
env.tokens = _.tokenize(env.code, env.grammar); | |
_.hooks.run('after-tokenize', env); | |
return Token.stringify(_.util.encode(env.tokens), env.language); | |
}, | |
matchGrammar: function (text, strarr, grammar, index, startPos, oneshot, target) { | |
var Token = _.Token; | |
for (var token in grammar) { | |
if(!grammar.hasOwnProperty(token) || !grammar[token]) { | |
continue; | |
} | |
if (token == target) { | |
return; | |
} | |
var patterns = grammar[token]; | |
patterns = (_.util.type(patterns) === "Array") ? patterns : [patterns]; | |
for (var j = 0; j < patterns.length; ++j) { | |
var pattern = patterns[j], | |
inside = pattern.inside, | |
lookbehind = !!pattern.lookbehind, | |
greedy = !!pattern.greedy, | |
lookbehindLength = 0, | |
alias = pattern.alias; | |
if (greedy && !pattern.pattern.global) { | |
// Without the global flag, lastIndex won't work | |
var flags = pattern.pattern.toString().match(/[imuy]*$/)[0]; | |
pattern.pattern = RegExp(pattern.pattern.source, flags + "g"); | |
} | |
pattern = pattern.pattern || pattern; | |
// Don’t cache length as it changes during the loop | |
for (var i = index, pos = startPos; i < strarr.length; pos += strarr[i].length, ++i) { | |
var str = strarr[i]; | |
if (strarr.length > text.length) { | |
// Something went terribly wrong, ABORT, ABORT! | |
return; | |
} | |
if (str instanceof Token) { | |
continue; | |
} | |
if (greedy && i != strarr.length - 1) { | |
pattern.lastIndex = pos; | |
var match = pattern.exec(text); | |
if (!match) { | |
break; | |
} | |
var from = match.index + (lookbehind ? match[1].length : 0), | |
to = match.index + match[0].length, | |
k = i, | |
p = pos; | |
for (var len = strarr.length; k < len && (p < to || (!strarr[k].type && !strarr[k - 1].greedy)); ++k) { | |
p += strarr[k].length; | |
// Move the index i to the element in strarr that is closest to from | |
if (from >= p) { | |
++i; | |
pos = p; | |
} | |
} | |
// If strarr[i] is a Token, then the match starts inside another Token, which is invalid | |
if (strarr[i] instanceof Token) { | |
continue; | |
} | |
// Number of tokens to delete and replace with the new match | |
delNum = k - i; | |
str = text.slice(pos, p); | |
match.index -= pos; | |
} else { | |
pattern.lastIndex = 0; | |
var match = pattern.exec(str), | |
delNum = 1; | |
} | |
if (!match) { | |
if (oneshot) { | |
break; | |
} | |
continue; | |
} | |
if(lookbehind) { | |
lookbehindLength = match[1] ? match[1].length : 0; | |
} | |
var from = match.index + lookbehindLength, | |
match = match[0].slice(lookbehindLength), | |
to = from + match.length, | |
before = str.slice(0, from), | |
after = str.slice(to); | |
var args = [i, delNum]; | |
if (before) { | |
++i; | |
pos += before.length; | |
args.push(before); | |
} | |
var wrapped = new Token(token, inside? _.tokenize(match, inside) : match, alias, match, greedy); | |
args.push(wrapped); | |
if (after) { | |
args.push(after); | |
} | |
Array.prototype.splice.apply(strarr, args); | |
if (delNum != 1) | |
_.matchGrammar(text, strarr, grammar, i, pos, true, token); | |
if (oneshot) | |
break; | |
} | |
} | |
} | |
}, | |
tokenize: function(text, grammar, language) { | |
var strarr = [text]; | |
var rest = grammar.rest; | |
if (rest) { | |
for (var token in rest) { | |
grammar[token] = rest[token]; | |
} | |
delete grammar.rest; | |
} | |
_.matchGrammar(text, strarr, grammar, 0, 0, false); | |
return strarr; | |
}, | |
hooks: { | |
all: {}, | |
add: function (name, callback) { | |
var hooks = _.hooks.all; | |
hooks[name] = hooks[name] || []; | |
hooks[name].push(callback); | |
}, | |
run: function (name, env) { | |
var callbacks = _.hooks.all[name]; | |
if (!callbacks || !callbacks.length) { | |
return; | |
} | |
for (var i=0, callback; callback = callbacks[i++];) { | |
callback(env); | |
} | |
} | |
} | |
}; | |
var Token = _.Token = function(type, content, alias, matchedStr, greedy) { | |
this.type = type; | |
this.content = content; | |
this.alias = alias; | |
// Copy of the full string this token was created from | |
this.length = (matchedStr || "").length|0; | |
this.greedy = !!greedy; | |
}; | |
Token.stringify = function(o, language, parent) { | |
if (typeof o == 'string') { | |
return o; | |
} | |
if (_.util.type(o) === 'Array') { | |
return o.map(function(element) { | |
return Token.stringify(element, language, o); | |
}).join(''); | |
} | |
var env = { | |
type: o.type, | |
content: Token.stringify(o.content, language, parent), | |
tag: 'span', | |
classes: ['token', o.type], | |
attributes: {}, | |
language: language, | |
parent: parent | |
}; | |
if (o.alias) { | |
var aliases = _.util.type(o.alias) === 'Array' ? o.alias : [o.alias]; | |
Array.prototype.push.apply(env.classes, aliases); | |
} | |
_.hooks.run('wrap', env); | |
var attributes = Object.keys(env.attributes).map(function(name) { | |
return name + '="' + (env.attributes[name] || '').replace(/"/g, '"') + '"'; | |
}).join(' '); | |
return '<' + env.tag + ' class="' + env.classes.join(' ') + '"' + (attributes ? ' ' + attributes : '') + '>' + env.content + '</' + env.tag + '>'; | |
}; | |
if (!_self.document) { | |
if (!_self.addEventListener) { | |
// in Node.js | |
return _self.Prism; | |
} | |
if (!_.disableWorkerMessageHandler) { | |
// In worker | |
_self.addEventListener('message', function (evt) { | |
var message = JSON.parse(evt.data), | |
lang = message.language, | |
code = message.code, | |
immediateClose = message.immediateClose; | |
_self.postMessage(_.highlight(code, _.languages[lang], lang)); | |
if (immediateClose) { | |
_self.close(); | |
} | |
}, false); | |
} | |
return _self.Prism; | |
} | |
//Get current script and highlight | |
var script = document.currentScript || [].slice.call(document.getElementsByTagName("script")).pop(); | |
if (script) { | |
_.filename = script.src; | |
if (!_.manual && !script.hasAttribute('data-manual')) { | |
if(document.readyState !== "loading") { | |
if (window.requestAnimationFrame) { | |
window.requestAnimationFrame(_.highlightAll); | |
} else { | |
window.setTimeout(_.highlightAll, 16); | |
} | |
} | |
else { | |
document.addEventListener('DOMContentLoaded', _.highlightAll); | |
} | |
} | |
} | |
return _self.Prism; | |
})(); | |
if (typeof module !== 'undefined' && module.exports) { | |
module.exports = Prism; | |
} | |
// hack for components to work correctly in node.js | |
if (typeof global !== 'undefined') { | |
global.Prism = Prism; | |
} | |
; | |
Prism.languages.sql= { | |
'comment': { | |
pattern: /(^|[^\\])(?:\/\*[\s\S]*?\*\/|(?:--|\/\/|#).*)/, | |
lookbehind: true | |
}, | |
'string' : { | |
pattern: /(^|[^@\\])("|')(?:\\[\s\S]|(?!\2)[^\\])*\2/, | |
greedy: true, | |
lookbehind: true | |
}, | |
'variable': /@[\w.$]+|@(["'`])(?:\\[\s\S]|(?!\1)[^\\])+\1/, | |
'function': /\b(?:AVG|COUNT|FIRST|FORMAT|LAST|LCASE|LEN|MAX|MID|MIN|MOD|NOW|ROUND|SUM|UCASE)(?=\s*\()/i, // Should we highlight user defined functions too? | |
'keyword': /\b(?:ACTION|ADD|AFTER|ALGORITHM|ALL|ALTER|ANALYZE|ANY|APPLY|AS|ASC|AUTHORIZATION|AUTO_INCREMENT|BACKUP|BDB|BEGIN|BERKELEYDB|BIGINT|BINARY|BIT|BLOB|BOOL|BOOLEAN|BREAK|BROWSE|BTREE|BULK|BY|CALL|CASCADED?|CASE|CHAIN|CHAR(?:ACTER|SET)?|CHECK(?:POINT)?|CLOSE|CLUSTERED|COALESCE|COLLATE|COLUMNS?|COMMENT|COMMIT(?:TED)?|COMPUTE|CONNECT|CONSISTENT|CONSTRAINT|CONTAINS(?:TABLE)?|CONTINUE|CONVERT|CREATE|CROSS|CURRENT(?:_DATE|_TIME|_TIMESTAMP|_USER)?|CURSOR|CYCLE|DATA(?:BASES?)?|DATE(?:TIME)?|DAY|DBCC|DEALLOCATE|DEC|DECIMAL|DECLARE|DEFAULT|DEFINER|DELAYED|DELETE|DELIMITERS?|DENY|DESC|DESCRIBE|DETERMINISTIC|DISABLE|DISCARD|DISK|DISTINCT|DISTINCTROW|DISTRIBUTED|DO|DOUBLE|DROP|DUMMY|DUMP(?:FILE)?|DUPLICATE|ELSE(?:IF)?|ENABLE|ENCLOSED|END|ENGINE|ENUM|ERRLVL|ERRORS|ESCAPED?|EXCEPT|EXEC(?:UTE)?|EXISTS|EXIT|EXPLAIN|EXTENDED|FETCH|FIELDS|FILE|FILLFACTOR|FIRST|FIXED|FLOAT|FOLLOWING|FOR(?: EACH ROW)?|FORCE|FOREIGN|FREETEXT(?:TABLE)?|FROM|FULL|FUNCTION|GEOMETRY(?:COLLECTION)?|GLOBAL|GOTO|GRANT|GROUP|HANDLER|HASH|HAVING|HOLDLOCK|HOUR|IDENTITY(?:_INSERT|COL)?|IF|IGNORE|IMPORT|INDEX|INFILE|INNER|INNODB|INOUT|INSERT|INT|INTEGER|INTERSECT|INTERVAL|INTO|INVOKER|ISOLATION|ITERATE|JOIN|KEYS?|KILL|LANGUAGE|LAST|LEAVE|LEFT|LEVEL|LIMIT|LINENO|LINES|LINESTRING|LOAD|LOCAL|LOCK|LONG(?:BLOB|TEXT)|LOOP|MATCH(?:ED)?|MEDIUM(?:BLOB|INT|TEXT)|MERGE|MIDDLEINT|MINUTE|MODE|MODIFIES|MODIFY|MONTH|MULTI(?:LINESTRING|POINT|POLYGON)|NATIONAL|NATURAL|NCHAR|NEXT|NO|NONCLUSTERED|NULLIF|NUMERIC|OFF?|OFFSETS?|ON|OPEN(?:DATASOURCE|QUERY|ROWSET)?|OPTIMIZE|OPTION(?:ALLY)?|ORDER|OUT(?:ER|FILE)?|OVER|PARTIAL|PARTITION|PERCENT|PIVOT|PLAN|POINT|POLYGON|PRECEDING|PRECISION|PREPARE|PREV|PRIMARY|PRINT|PRIVILEGES|PROC(?:EDURE)?|PUBLIC|PURGE|QUICK|RAISERROR|READS?|REAL|RECONFIGURE|REFERENCES|RELEASE|RENAME|REPEAT(?:ABLE)?|REPLACE|REPLICATION|REQUIRE|RESIGNAL|RESTORE|RESTRICT|RETURNS?|REVOKE|RIGHT|ROLLBACK|ROUTINE|ROW(?:COUNT|GUIDCOL|S)?|RTREE|RULE|SAVE(?:POINT)?|SCHEMA|SECOND|SELECT|SERIAL(?:IZABLE)?|SESSION(?:_USER)?|SET(?:USER)?|SHARE|SHOW|SHUTDOWN|SIMPLE|SMALLINT|SNAPSHOT|SOME|SONAME|SQL|START(?:ING)?|STATISTICS|STATUS|STRIPED|SYSTEM_USER|TABLES?|TABLESPACE|TEMP(?:ORARY|TABLE)?|TERMINATED|TEXT(?:SIZE)?|THEN|TIME(?:STAMP)?|TINY(?:BLOB|INT|TEXT)|TOP?|TRAN(?:SACTIONS?)?|TRIGGER|TRUNCATE|TSEQUAL|TYPES?|UNBOUNDED|UNCOMMITTED|UNDEFINED|UNION|UNIQUE|UNLOCK|UNPIVOT|UNSIGNED|UPDATE(?:TEXT)?|USAGE|USE|USER|USING|VALUES?|VAR(?:BINARY|CHAR|CHARACTER|YING)|VIEW|WAITFOR|WARNINGS|WHEN|WHERE|WHILE|WITH(?: ROLLUP|IN)?|WORK|WRITE(?:TEXT)?|YEAR)\b/i, | |
'boolean': /\b(?:TRUE|FALSE|NULL)\b/i, | |
'number': /\b0x[\da-f]+\b|\b\d+\.?\d*|\B\.\d+\b/i, | |
'operator': /[-+*\/=%^~]|&&?|\|\|?|!=?|<(?:=>?|<|>)?|>[>=]?|\b(?:AND|BETWEEN|IN|LIKE|NOT|OR|IS|DIV|REGEXP|RLIKE|SOUNDS LIKE|XOR)\b/i, | |
'punctuation': /[;[\]()`,.]/ | |
}; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment