telegram-crawler/data/web/instantview.telegram.org/js/codemirror-instantview.js
2022-05-13 12:05:36 +02:00

113 lines
No EOL
4.8 KiB
JavaScript

// CodeMirror, copyright (c) by Marijn Haverbeke and others
// Distributed under an MIT license: http://codemirror.net/LICENSE
(function(mod) {
if (typeof exports == "object" && typeof module == "object") // CommonJS
mod(require("../../lib/codemirror"));
else if (typeof define == "function" && define.amd) // AMD
define(["../../lib/codemirror"], mod);
else // Plain browser env
mod(CodeMirror);
})(function(CodeMirror) {
CodeMirror.defineSimpleMode('instantview', {
start: [
// string
{regex: /"(?:[^\\"]|\\.)*?(?:"|$)/, token: 'string'},
{regex: /("(?:[^\\"]|\\.)*?)(\\)(\s*$)/,
token: ['string', 'hr', null], push: 'string'},
// condition
{regex: /(\s*)([?!](?:domain|domain_not|path|path_not)\b)((?:[^\\#]|\\.)*)/,
token: [null, 'def', null], sol: true},
{regex: /(\s*)([?!](?:exists|not_exists|false|true|condition)\b)/,
token: [null, 'def'], sol: true},
// include
{regex: /(\s*)(\+\s*[a-z0-9.-]+)/,
token: [null, 'variable-3'], sol: true},
// replace_tag alias
{regex: /(\s*)(<[a-z0-9-]+>)/,
token: [null, 'tag'], sol: true},
// function with arguments
{regex: /(\s*)(@(?:debug|remove|match|replace|urlencode|urldecode|htmlencode|htmldecode|datetime|set_attr|set_attrs|style_to_attrs|background_to_image|json_to_xml|html_to_dom|prepend_to|append_to|before_el|after_el|prepend|append|before|after|replace_tag|wrap|wrap_inner|clone|detach|split_parent|pre|combine|inline|load|unsupported|simplify|if|if_not|map|repeat|while|while_not|function)\b)/,
token: [null, 'builtin'], sol: true},
// option
{regex: /(\s*)(~[a-z][a-z0-9_]*)/i,
token: [null, 'keyword'], sol: true},
// variable
{regex: /(\s*)(\$[a-z][a-z0-9_]*)(\??\+?)/i,
token: [null, 'variable-2', 'positive'], sol: true},
{regex: /\$(?:\$|@|[a-z][a-z0-9_]*)/i, token: 'variable-2'},
// property
{regex: /(\s*)([a-z][a-z0-9_]*)(!{0,2})/i,
token: [null, 'variable-2', 'positive'], sol: true},
// comment
{regex: /(#.*)(\\)(\s*$)/, token: ['comment', 'hr', null], push: 'comment'},
{regex: /#.*/, token: 'comment'},
// tag in xpath
{regex: /(\/)([a-z0-9-]+\:\:)?([a-z0-9_-]+|\*)/i,
token: [null, null, 'tag-2']},
// tag
{regex: /<[a-z0-9_-]+>/i, token: 'tag'},
// attribute
{regex: /@[a-z0-9-]+/, token: 'attribute'},
// index
{regex: /last\(\)|[-+]?(?:\.\d+|\d+\.?\d*)/i, token: 'number'},
// null
{regex: /null/, token: 'atom'},
// simple word
{regex: /\w[\w-]*/, token: 'variable'},
// continue line
{regex: /()(\\)(\s*$)/, token: [null, 'hr', null], next: 'next'}
],
next: [
// string
{regex: /"(?:[^\\"]|\\.)*?"$/, token: 'string', next: 'start'},
{regex: /"(?:[^\\"]|\\.)*?"/, token: 'string'},
{regex: /"(?:[^\\"]|\\.)*?$/, token: 'string', next: 'start'},
{regex: /("(?:[^\\"]|\\.)*?)(\\)(\s*$)/,
token: ['string', 'hr', null], push: 'string'},
// variable
{regex: /\$(?:\$|@|[a-z][a-z0-9_]*$)/i, token: 'variable-2', next: 'start'},
{regex: /\$(?:\$|@|[a-z][a-z0-9_]*)/i, token: 'variable-2'},
// comment
{regex: /(#.*)(\\)(\s*$)/, token: ['comment', 'hr', null], push: 'comment'},
{regex: /#.*$/, token: 'comment', next: 'start'},
// tag in xpath
{regex: /(\/)([a-z0-9-]+\:\:)?([a-z0-9_-]+|\*)$/i,
token: [null, null, 'tag-2'], next: 'start'},
{regex: /(\/)([a-z0-9-]+\:\:)?([a-z0-9_-]+|\*)/i,
token: [null, null, 'tag-2']},
// tag
{regex: /<[a-z0-9_-]+>$/i, token: 'tag', next: 'start'},
{regex: /<[a-z0-9_-]+>/i, token: 'tag'},
// attribute
{regex: /@[a-z0-9-]+$/, token: 'attribute', next: 'start'},
{regex: /@[a-z0-9-]+/, token: 'attribute'},
// index
{regex: /last\(\)|[-+]?(?:\.\d+|\d+\.?\d*)$/i, token: 'number', next: 'start'},
{regex: /last\(\)|[-+]?(?:\.\d+|\d+\.?\d*)/i, token: 'number'},
// null
{regex: /null/, token: 'atom'},
// simple word
{regex: /\w[\w-]*$/, token: 'variable', next: 'start'},
{regex: /\w[\w-]*/, token: 'variable'},
// continue line
{regex: /()(\\)(\s*$)/, token: [null, 'hr', null]},
// end of line
{regex: /[^\\]\s*$/, token: null, next: 'start'},
],
string: [
{regex: /(?:[^\\"]|\\.)*?"$/, token: 'string', next: 'start'},
{regex: /(?:[^\\"]|\\.)*?"/, token: 'string', pop: true},
{regex: /(?:[^\\"]|\\.)*?$/, token: 'string', next: 'start'},
{regex: /((?:[^\\"]|\\.)*?)(\\)(\s*$)/, token: ['string', 'hr', null]}
],
comment: [
{regex: /(.*)(\\)(\s*$)/, token: ['comment', 'hr', null]},
{regex: /.*$/, token: 'comment', next: 'start'}
],
meta: {
dontIndentStates: ['comment'],
lineComment: '#'
}
});
});