├── LICENSE ├── README.md ├── pb_hooks └── _hooks-dash.pb.js └── pb_public └── hooks-dash ├── index.html ├── index.js └── lib ├── code-input.auto-close-brackets.min.js ├── code-input.indent.min.js ├── code-input.min.css ├── code-input.min.js ├── highlight.go.min.js ├── highlight.javascript.min.js ├── highlight.min.js ├── highlight.sql.min.js └── highlight.theme.min.css /LICENSE: -------------------------------------------------------------------------------- 1 | This is free and unencumbered software released into the public domain. 2 | 3 | Anyone is free to copy, modify, publish, use, compile, sell, or 4 | distribute this software, either in source code form or as a compiled 5 | binary, for any purpose, commercial or non-commercial, and by any 6 | means. 7 | 8 | In jurisdictions that recognize copyright laws, the author or authors 9 | of this software dedicate any and all copyright interest in the 10 | software to the public domain. We make this dedication for the benefit 11 | of the public at large and to the detriment of our heirs and 12 | successors. We intend this dedication to be an overt act of 13 | relinquishment in perpetuity of all present and future rights to this 14 | software under copyright law. 15 | 16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 17 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 18 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 19 | IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR 20 | OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, 21 | ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 22 | OTHER DEALINGS IN THE SOFTWARE. 23 | 24 | For more information, please refer to 25 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # pb-hooks-dash 2 | 3 | A drop-in web dashboard to view and edit [PocketBase](https://pocketbase.io/docs/use-as-framework/) custom hooks/functions through the browser. 4 | 5 | ![image](https://github.com/user-attachments/assets/f23547b8-2856-4ab9-b5e6-18c1196d0584) 6 | 7 | 8 | **Contents** 9 | 10 | - [Getting Started](#getting-started) 11 | - [Usage Notes](#usage-notes) 12 | - [Customisation](#customisation) 13 | - [Technical Details](#technical-details) 14 | - [Future Work](#possible-future-work) 15 | - [Contact](#contact) 16 | 17 | # Getting Started 18 | 19 | 1. Copy the `pb_hooks/_hooks-dash.pb.js` file and the `pb_public/hooks-dash/` folder into the respective folders on your PB server, or wherever you've specified with `--publicDir`/`--hooksDir`. 20 | 21 | 3. If you aren't already, login to the normal `/_` admin dashboard of your server (eg `http://localhost:8090/_`). The hooks dashboard piggybacks this auth token. 22 | 23 | 4. Access the hooks dashboard at the `/hooks-dash` path of your server (eg `http://localhost:8090/hooks-dash`). 24 | 25 | # Usage Notes 26 | 27 | Creating a new file has a `.pb.js` extension pre-filled only for convenience, but any file extension works fine. If you mainly work with GO, or prefer empty default, you can change `DEFAULT_FILE_EXTENSION` at the top of `hooks-dash/index.js` if you want. 28 | 29 | The sidebar can theoretically load/display any level of folder nesting that already exists, but creating a new file/folder via UI is currently only supported at the `pb_hooks/` root folder level. There's a shonky workaround where you can specify the path in the filename input field to create something in an existing folder. 30 | 31 | Moving files between folders and deleting/renaming folders is currently not supported through the UI. 32 | 33 | **Read Only Mode** prevents editing/deleting anything, and piggybacks the existing server setting for *'Hide collection create and edit controls'* set in `/_/#/settings`. 34 | 35 | For transparency to avoid route collisions, this adds the following API routes on the PB server: 36 | - `/hooks-dash/folder` (GET / PUT) 37 | - `/hooks-dash/file` (GET / PUT / DELETE) 38 | 39 | ## Customisation 40 | 41 | ### Languages 42 | 43 | Syntax highlighting for JS, GO, and SQL is included out of the box. You can add [more languages](https://highlightjs.readthedocs.io/en/latest/supported-languages.html) if you want by adding the script tag next to the others near the bottom of `hooks-dash/index.html`, either dropped into `lib/` or reference straight from CDN eg: 44 | ```html 45 | 46 | ``` 47 | 48 | ### Colour Theme 49 | 50 | Default code editor colour theme is *atom-one-light*. You can change the [colour theme](https://highlightjs.org/demo) by swapping out the `lib/highlight.theme.min.css` file, or change the link tag near the bottom of `hooks-dash/index.html` to reference a different one from CDN eg: 51 | ```html 52 | 53 | ``` 54 | 55 | # Technical Details 56 | 57 | Built against PocketBase v0.25.9, but theoretically will probably work for anything v0.23 and up. 58 | 59 | Piggybacks the css of the existing PB admin dashboard, otherwise uses the following libraries just for the code editor panel, which are already included in `pb_public/hooks-dash/lib/`: 60 | - [code-input](https://github.com/WebCoder49/code-input) v2.4.0 61 | - [highlight.js](https://highlightjs.org/) v.11.9.0 62 | 63 | # Possible Future Work 64 | 65 | - Proper UI workflow for managing multi-level nested folder structure, eg create new files/folders inside folders, move files/folders, rename/delete folders, etc. 66 | - Easy-mode hooks UI with helper controls/dropdowns to select request method, middlewares, events, etc. Have already implemented a parser to recognise the separate bits of any hooks inside a `.pb.js` file and can easily re-compose to be a valid `.pb.js` file, just haven't yet thought about/decided how to handle the UI workflow of editing individual hooks, especially with multiple hooks in a single file. 67 | - Integrated HTTP route tester. 68 | - Tab width selector. 69 | - Drag resize the sidebar, eg for long filenames. 70 | - Piggyback the existing Prism code editor library from the PB admin dashboard. Then don't need a `hooks-dash` folder to contain `lib/` and everything, it can just be a single drop-in `hooks-dash.html` file. 71 | 72 | # Contact 73 | 74 | Raise an issue/discussion in this repo. 75 | -------------------------------------------------------------------------------- /pb_hooks/_hooks-dash.pb.js: -------------------------------------------------------------------------------- 1 | routerAdd("GET", "/hooks-dash/folder", function(e) 2 | { 3 | const IGNORE = ['_hooks-dash.pb.js'] 4 | 5 | let path = e.request.url.query().get("path") 6 | if (path && path.includes('../')) 7 | throw BadRequestError("Can't escape out of pb_hooks folder") 8 | 9 | return e.json(200, recurseFolder(__hooks + (path ? '/'+path : ''))); 10 | 11 | function recurseFolder(folder) 12 | { 13 | let files = [] 14 | let list = $os.readDir(folder) 15 | list.sort() 16 | let deferred = [] 17 | for (let file of list) 18 | { 19 | if (file.isDir()) 20 | { 21 | let child = {} 22 | child[file.name()] = recurseFolder(folder+'/'+file.name()) 23 | deferred.push(child) 24 | } 25 | else if (!IGNORE.includes(file.name())) 26 | files.push(file.name()) 27 | } 28 | for (let file of deferred) 29 | files.push(file) 30 | return files 31 | } 32 | }, $apis.requireSuperuserAuth()) 33 | 34 | 35 | routerAdd("PUT", "/hooks-dash/folder", function(e) 36 | { 37 | if($app.settings().meta.hideControls) 38 | throw BadRequestError('Read Only Mode. Switch off "Hide collection create and edit controls" in PocketBase superuser dashboard at /_/#/settings') 39 | 40 | let path = e.request.url.query().get("path") 41 | if (!path) 42 | throw BadRequestError('Must supply path URL parameter') 43 | if (path.includes('../')) 44 | throw BadRequestError("Can't escape out of pb_hooks folder") 45 | 46 | //move/rename 47 | let newPath = e.requestInfo().body.path 48 | if (newPath) 49 | { 50 | if (newPath.includes('../')) 51 | throw BadRequestError("Can't escape out of pb_hooks folder") 52 | $os.rename(__hooks+'/'+path, __hooks+'/'+newPath) 53 | } 54 | else 55 | $os.mkdir(__hooks+'/'+path, 0o755) 56 | }, $apis.requireSuperuserAuth()) 57 | 58 | 59 | routerAdd("GET", "/hooks-dash/file", function(e) 60 | { 61 | let path = e.request.url.query().get("path") 62 | if (!path) 63 | throw BadRequestError('Must supply path URL parameter') 64 | if (path.includes('../')) 65 | throw BadRequestError("Can't escape out of pb_hooks folder") 66 | return e.string(200, toString($os.readFile(__hooks+'/'+path))); 67 | }, $apis.requireSuperuserAuth()) 68 | 69 | 70 | routerAdd("PUT", "/hooks-dash/file", function(e) 71 | { 72 | if($app.settings().meta.hideControls) 73 | throw BadRequestError('Read Only Mode. Switch off "Hide collection create and edit controls" in PocketBase superuser dashboard at /_/#/settings') 74 | 75 | let path = e.request.url.query().get("path") 76 | if (!path) 77 | throw BadRequestError('Must supply path URL parameter') 78 | if (path.includes('../')) 79 | throw BadRequestError("Can't escape out of pb_hooks folder") 80 | 81 | //move/rename 82 | let newPath = e.requestInfo().body.path 83 | if (newPath) 84 | { 85 | if (newPath.includes('../')) 86 | throw BadRequestError("Can't escape out of pb_hooks folder") 87 | $os.rename(__hooks+'/'+path, __hooks+'/'+newPath) 88 | path = newPath 89 | } 90 | 91 | $os.writeFile(__hooks+'/'+path, e.requestInfo().body.contents, 0o644) 92 | }, $apis.requireSuperuserAuth()) 93 | 94 | 95 | routerAdd("DELETE", "/hooks-dash/file", function(e) 96 | { 97 | if($app.settings().meta.hideControls) 98 | throw BadRequestError('Read Only Mode. Switch off "Hide collection create and edit controls" in PocketBase superuser dashboard at /_/#/settings') 99 | 100 | let path = e.request.url.query().get("path") 101 | if (!path) 102 | throw BadRequestError('Must supply path URL parameter') 103 | if (path.includes('../')) 104 | throw BadRequestError("Can't escape out of pb_hooks folder") 105 | 106 | $os.removeAll(__hooks+'/'+path) 107 | }, $apis.requireSuperuserAuth()) -------------------------------------------------------------------------------- /pb_public/hooks-dash/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | PB Hooks Dashboard 5 | 6 | 7 | 8 | 9 | 17 | 20 | 21 |
22 |
23 | 29 |
30 | 58 | 93 |
94 |
95 |
96 |
97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 121 | 122 | 123 | 124 | -------------------------------------------------------------------------------- /pb_public/hooks-dash/index.js: -------------------------------------------------------------------------------- 1 | const DEFAULT_FILE_EXTENSION = '.pb.js' 2 | 3 | //piggyback the superuser token from the /_ dashboard 4 | const SUPERUSER_TOKEN = JSON.parse(localStorage.getItem('__pb_superuser_auth__'))?.token 5 | if (!SUPERUSER_TOKEN || JSON.parse(atob(SUPERUSER_TOKEN.split('.')[1])).exp < Math.round(Date.now()/1000)) 6 | window.location.href = window.location.origin + '/_/#/login' 7 | 8 | init() 9 | async function init() 10 | { 11 | //piggyback css files from the /_ dashboard 12 | let piggybackDOM = new DOMParser().parseFromString(await (await sendRoot('/_')).text(), "text/html") 13 | for (let element of piggybackDOM.head.querySelectorAll('link[rel="stylesheet"]')) 14 | { 15 | element.href = element.href.replace("/hooks-dash/", "/_/") 16 | document.head.append(element) 17 | } 18 | 19 | //piggyback hideControls server setting 20 | if ((await (await sendRoot('/api/settings?fields=meta')).json()).meta.hideControls) 21 | { 22 | document.getElementById('editor').querySelector('textarea').disabled = true 23 | document.getElementById('rename').disabled = true 24 | document.getElementById('save').disabled = true 25 | document.getElementById('delete').disabled = true 26 | document.getElementById('new').disabled = true 27 | document.getElementById('readOnly').classList.remove('hidden') 28 | } 29 | 30 | let response = await send('folder') 31 | if (!response.ok) 32 | return 33 | await recurseList(document.getElementById('sideNav'), await response.json()) 34 | 35 | let path = new URLSearchParams(window.location.search).get('path') 36 | if (path) 37 | displayHook({srcElement: getNavFileElement(decodeURIComponent(path))}) 38 | } 39 | 40 | async function recurseList(parent, list) 41 | { 42 | for (let file of list) 43 | { 44 | if (file.constructor.name == 'String') 45 | { 46 | let navFileElement = createNavFileElement(file) 47 | parent.append(navFileElement) 48 | if (file.endsWith('.pb.js')) 49 | { 50 | let response = await send('file?path='+getNavFileElementPath(navFileElement)) 51 | if (response.ok) 52 | parseHooksFile(await response.text(), navFileElement.lastElementChild) 53 | } 54 | } 55 | else 56 | { 57 | let folder = createNavFolderElement(Object.keys(file)[0]) 58 | parent.append(folder) 59 | recurseList(folder.lastElementChild, Object.values(file)[0]) 60 | } 61 | } 62 | } 63 | 64 | async function displayHook(event, getContents=true) 65 | { 66 | resetEditor() 67 | 68 | let element = event.srcElement 69 | while (!element.getAttribute('hook-key')) 70 | element = element.parentElement 71 | 72 | displayAncestors(element) 73 | 74 | element.classList.add('active') 75 | 76 | //set the filename input/rename field 77 | document.getElementById('filename').value = element.getAttribute('hook-key') 78 | 79 | let path = getNavFileElementPath(element) 80 | 81 | //set the breadcrumbs 82 | let breadcrumbs = document.body.querySelector('.breadcrumbs') 83 | for (let node of path.split('/')) 84 | breadcrumbs.innerHTML += `` 85 | 86 | //get the file contents and put them in the editor 87 | let editor = document.getElementById('editor') 88 | if (getContents) 89 | { 90 | let response = await send('file?path='+path) 91 | if (!response.ok) 92 | return 93 | editor.value = await response.text() 94 | } 95 | editor.setAttribute('activepath', path) 96 | 97 | //set the syntax highlighting language 98 | let language = 'JavaScript' 99 | if (path.toLowerCase().endsWith('sql')) 100 | language = 'SQL' 101 | if (path.toLowerCase().endsWith('go')) 102 | language = 'Go' 103 | editor.setAttribute('language', language) 104 | 105 | //mod the url for the existing path 106 | let url = new URL(window.location) 107 | url.searchParams.set('path', encodeURIComponent(path)) 108 | window.history.replaceState({},null,url) 109 | 110 | document.body.querySelector('.page-wrapper').classList.remove('hidden') 111 | editor.querySelector('textarea').focus() 112 | } 113 | 114 | function resetEditor() 115 | { 116 | //set everything not active 117 | for (let active of document.body.querySelectorAll(".active")) 118 | active.classList.remove('active') 119 | 120 | //reset the breadcrumbs 121 | let breadcrumbs = document.body.querySelector('.breadcrumbs') 122 | breadcrumbs.innerHTML = '' 123 | 124 | let editor = document.getElementById('editor') 125 | editor.value = '' 126 | editor.removeAttribute('activepath') 127 | editor.setAttribute('language', 'JavaScript') 128 | 129 | let filename = document.getElementById('filename') 130 | filename.value = DEFAULT_FILE_EXTENSION 131 | filename.selectionStart = 0 132 | filename.selectionEnd = 0 133 | 134 | stopEditName() 135 | } 136 | 137 | async function saveHook() 138 | { 139 | let editor = document.getElementById('editor') 140 | let body = {contents: editor.value} 141 | let activepath = editor.getAttribute('activepath') 142 | let newName = document.getElementById('filename').value 143 | if (activepath) 144 | { 145 | let split = activepath.split('/') 146 | split[split.length - 1] = newName 147 | let newPath = split.join('/') 148 | if (activepath != newPath) 149 | body.path = newPath 150 | 151 | let response = await send('file?path='+activepath, {method: 'PUT', body: JSON.stringify(body)}) 152 | if (response.ok) 153 | { 154 | if (activepath != newPath) 155 | { 156 | //update breadcrumb 157 | document.body.querySelector('.breadcrumbs').lastElementChild.innerText = newName 158 | 159 | //update side nav 160 | let element = getNavFileElement(activepath) 161 | element.querySelector('[shortcut="name"]').innerText = newName 162 | element.setAttribute('hook-key', newName) 163 | 164 | //update editor activepath 165 | editor.setAttribute('activepath', newPath) 166 | 167 | stopEditName() 168 | } 169 | } 170 | } 171 | else 172 | { 173 | let response = await send('file?path='+newName, {method: 'PUT', body: JSON.stringify(body)}) 174 | if (response.ok) 175 | { 176 | //insert new side nav element 177 | let parent = document.getElementById('sideNav') 178 | let split = newName.split('/') 179 | for (let filename of split.slice(0,-1)) 180 | parent = parent.querySelector(`[hook-key="${filename}"]`) 181 | let newElement = createNavFileElement(split[split.length-1]) 182 | let beforeFolder = parent.querySelector('[hook-type="folder"]') 183 | if (beforeFolder) 184 | beforeFolder.parentElement.insertBefore(newElement, beforeFolder) 185 | else 186 | parent.querySelector('.collapse').append(newElement) 187 | 188 | displayHook({srcElement: newElement}) 189 | } 190 | } 191 | } 192 | 193 | async function deleteHook() 194 | { 195 | let activepath = document.getElementById('editor').getAttribute('activepath') 196 | if (!confirm(`Confirm you want to delete: `+activepath)) 197 | return 198 | let response = await send('file?path='+activepath, {method: 'DELETE'}) 199 | if (!response.ok) 200 | return 201 | resetEditor() 202 | document.body.querySelector('.page-wrapper').classList.add('hidden') 203 | getNavFileElement(activepath).remove() 204 | } 205 | 206 | function newHook() 207 | { 208 | resetEditor() 209 | document.body.querySelector('.page-wrapper').classList.remove('hidden') 210 | startEditName() 211 | } 212 | 213 | function newFolder() 214 | { 215 | document.getElementById('newFolder').classList.add('hidden') 216 | let folderName = document.getElementById('folderName') 217 | folderName.classList.remove('hidden') 218 | folderName.value = '' 219 | folderName.focus() 220 | } 221 | 222 | async function saveFolder(event) 223 | { 224 | let path = document.getElementById('folderName').value.trim() 225 | if (!path) 226 | return 227 | let response = await send('folder?path='+path, {method: 'PUT'}) 228 | if (response.ok) 229 | { 230 | stopFolderNameInput() 231 | 232 | //insert new side nav element 233 | let parent = document.getElementById('sideNav') 234 | let split = path.split('/') 235 | for (let filename of split.slice(0,-1)) 236 | parent = parent.querySelector(`[hook-key="${filename}"]`) 237 | if (parent.getAttribute('hook-type') == 'folder') 238 | parent = parent.querySelector('.collapse') 239 | parent.append(createNavFolderElement(split[split.length-1])) 240 | } 241 | } 242 | 243 | function stopFolderNameInput() 244 | { 245 | document.getElementById('newFolder').classList.remove('hidden') 246 | document.getElementById('folderName').classList.add('hidden') 247 | } 248 | 249 | function startEditName() 250 | { 251 | let filename = document.getElementById('filename') 252 | filename.classList.remove('hidden') 253 | filename.focus() 254 | document.getElementById('rename').classList.add('hidden') 255 | document.getElementById('cancelRename').classList.remove('hidden') 256 | document.body.querySelector('.breadcrumbs').classList.add('hidden') 257 | } 258 | 259 | function stopEditName() 260 | { 261 | let filename = document.getElementById('filename') 262 | filename.classList.add('hidden') 263 | filename.blur() 264 | filename.value = document.getElementById('sideNav').querySelector('.active')?.querySelector('[shortcut="name"').innerText || '.pb.js' 265 | document.getElementById('rename').classList.remove('hidden') 266 | document.getElementById('cancelRename').classList.add('hidden') 267 | document.body.querySelector('.breadcrumbs').classList.remove('hidden') 268 | if (!document.getElementById('editor').getAttribute('activepath')) 269 | document.body.querySelector('.page-wrapper').classList.add('hidden') 270 | } 271 | 272 | function searchHooks(event) 273 | { 274 | let search = event.srcElement.value.toLowerCase() 275 | if (!search) 276 | document.getElementById('clearSearch').classList.add('hidden') 277 | else 278 | document.getElementById('clearSearch').classList.remove('hidden') 279 | 280 | for (let element of document.querySelectorAll('[hook-type]')) 281 | { 282 | let candidateString = `${element.getAttribute('hook-type') || ''} ${element.getAttribute('hook-key') || ''}` 283 | console.log(candidateString) 284 | if (candidateString.toLowerCase().includes(search)) 285 | { 286 | element.classList.remove('hidden') 287 | displayAncestors(element) 288 | } 289 | else 290 | element.classList.add('hidden') 291 | } 292 | } 293 | 294 | function displayAncestors(element) 295 | { 296 | let parent = element.parentElement 297 | while (parent.id != 'sideNav') 298 | { 299 | parent.classList.remove('hidden') 300 | if (parent.getAttribute('hook-type') == 'folder') 301 | expand(parent) 302 | parent = parent.parentElement 303 | } 304 | } 305 | 306 | function clearSearch() 307 | { 308 | let search = document.getElementById('search') 309 | search.value = ''; 310 | searchHooks({srcElement: search}) 311 | } 312 | 313 | function createNavFileElement(filename) 314 | { 315 | return elementFromString(` 316 |
317 |  ${filename} 318 |
319 |
320 | `) 321 | } 322 | 323 | function getNavFileElement(path) 324 | { 325 | let element = document.getElementById('sideNav') 326 | for (let filename of path.split('/')) 327 | element = element.querySelector(`[hook-key="${filename}"]`) 328 | return element 329 | } 330 | 331 | function getNavFileElementPath(element) 332 | { 333 | let path = element.getAttribute('hook-key') 334 | element = element.parentElement 335 | while (element.id != 'sideNav') 336 | { 337 | if (element.getAttribute('hook-key')) 338 | path = element.getAttribute('hook-key') + '/' + path 339 | element = element.parentElement 340 | } 341 | return path 342 | } 343 | 344 | 345 | function createNavFolderElement(foldername) 346 | { 347 | return elementFromString(` 348 |
349 | 354 | 355 |
356 | `) 357 | } 358 | 359 | function toggleCollapse(event) 360 | { 361 | let button = event.srcElement 362 | while (button.tagName != 'BUTTON') 363 | button = button.parentElement 364 | 365 | button.firstElementChild.classList.toggle('ri-folder-line') 366 | button.firstElementChild.classList.toggle('ri-folder-open-line') 367 | button.lastElementChild.classList.toggle('ri-arrow-down-s-line') 368 | button.lastElementChild.classList.toggle('ri-arrow-up-s-line') 369 | button.nextElementSibling.classList.toggle('hidden') 370 | } 371 | 372 | function expand(element) 373 | { 374 | element.firstElementChild.firstElementChild.classList.remove('ri-folder-line') 375 | element.firstElementChild.firstElementChild.classList.add('ri-folder-open-line') 376 | element.firstElementChild.lastElementChild.classList.remove('ri-arrow-down-s-line') 377 | element.firstElementChild.lastElementChild.classList.add('ri-arrow-up-s-line') 378 | element.querySelector('.collapse').classList.remove('hidden') 379 | } 380 | function collapse(element) 381 | { 382 | element.firstElementChild.firstElementChild.classList.add('ri-folder-line') 383 | element.firstElementChild.firstElementChild.classList.remove('ri-folder-open-line') 384 | element.firstElementChild.lastElementChild.classList.add('ri-arrow-down-s-line') 385 | element.firstElementChild.lastElementChild.classList.remove('ri-arrow-up-s-line') 386 | element.querySelector('.collapse').classList.add('hidden') 387 | } 388 | 389 | async function send(path, opts={}) 390 | { 391 | return await sendRoot('/hooks-dash/'+path, opts) 392 | } 393 | 394 | async function sendRoot(path, opts={}) 395 | { 396 | if (!opts.headers) 397 | opts.headers = {'Content-Type': 'application/json'} 398 | opts.headers['Authorization'] = SUPERUSER_TOKEN 399 | try 400 | { 401 | let response = await fetch(window.location.origin+path, opts) 402 | if (!response.ok) 403 | toastAlert(`${response.status} - ${(await response.json()).message}`) 404 | return response 405 | } 406 | catch(e) 407 | { 408 | toastAlert(e) 409 | } 410 | } 411 | 412 | function toastAlert(message) 413 | { 414 | document.querySelector('.toasts-wrapper').append(elementFromString(` 415 |
416 |
417 |
${message}
418 | 419 |
420 | `)) 421 | setTimeout(function() {document.querySelector('.toasts-wrapper').innerHTML = ''}, 5000) 422 | } 423 | 424 | function elementFromString(string) 425 | { 426 | var div = document.createElement("div"); 427 | div.innerHTML = string; 428 | return div.firstElementChild 429 | } 430 | 431 | 432 | const MIDDLEWARES = [ 433 | 'requireGuestOnly', 434 | 'requireAuth', 435 | 'requireSuperuserAuth', 436 | 'requireSuperuserOrOwnerAuth', 437 | 'bodyLimit', 438 | 'gzip', 439 | 'skipSuccessActivityLog', 440 | ] 441 | 442 | var EVENT_HOOKS = [ 443 | //app 444 | 'onBootstrap', 445 | 'onSettingsReload', 446 | 'onBackupCreate', 447 | 'onBackupRestore', 448 | 'onTerminate', 449 | //mailer 450 | 'onMailerSend', 451 | 'onMailerRecordAuthAlertSend', 452 | 'onMailerRecordPasswordResetSend', 453 | 'onMailerRecordVerificationSend', 454 | 'onMailerRecordEmailChangeSend', 455 | 'onMailerRecordOTPSend', 456 | //realtime 457 | 'onRealtimeConnectRequest', 458 | 'onRealtimeSubscribeRequest', 459 | 'onRealtimeMessageSend', 460 | //record model 461 | 'onRecordEnrich', //remainder populated below 462 | //collection model (populated below) 463 | //request 464 | //record crud (populated below) 465 | //record auth 466 | 'onRecordAuthRequest', 467 | 'onRecordAuthRefreshRequest', 468 | 'onRecordAuthWithPasswordRequest', 469 | 'onRecordAuthWithOAuth2Request', 470 | 'onRecordRequestPasswordResetRequest', 471 | 'onRecordConfirmPasswordResetRequest', 472 | 'onRecordRequestVerificationRequest', 473 | 'onRecordConfirmVerificationRequest', 474 | 'onRecordRequestEmailChangeRequest', 475 | 'onRecordConfirmEmailChangeRequest', 476 | 'onRecordRequestOTPRequest', 477 | 'onRecordAuthWithOTPRequest', 478 | //batch 479 | 'onBatchRequest', 480 | //file 481 | 'onFileDownloadRequest', 482 | 'onFileTokenRequest', 483 | //collection (populated below) 484 | //settings 485 | 'onSettingsListRequest', 486 | 'onSettingsUpdateRequest', 487 | //base model (populated below) 488 | ] 489 | for (let model of ['Record', 'Collection', 'Model']) 490 | { 491 | EVENT_HOOKS.push(`on${model}Validate`) 492 | 493 | for (let action of ['Create', 'Update', 'Delete']) 494 | { 495 | EVENT_HOOKS.push(`on${model}${action}`) 496 | EVENT_HOOKS.push(`on${model}${action}Execute`) 497 | EVENT_HOOKS.push(`on${model}After${action}Success`) 498 | EVENT_HOOKS.push(`on${model}After${action}Error`) 499 | 500 | if (model != 'Model') 501 | EVENT_HOOKS.push(`on${model}${action}Request`) 502 | } 503 | 504 | if (model != 'Model') 505 | { 506 | EVENT_HOOKS.push(`on${model}sListRequest`) 507 | EVENT_HOOKS.push(`on${model}ViewRequest`) 508 | } 509 | } 510 | 511 | var PARSED_HOOKS = { 512 | 'Route': {}, 513 | 'Event': {}, 514 | 'Scheduled Cron Job': {}, 515 | 'Command': {}, 516 | 'Global Middleware': {}, 517 | } 518 | 519 | function parseHooksFile(hooksFileContents, parent) 520 | { 521 | //dummy up the pocketbase api 522 | let contents = ` 523 | var HOOKS = [] 524 | 525 | class Command {constructor(object) { HOOKS.push({ 526 | type: 'Command', 527 | key: object.use, 528 | use: object.use, 529 | handler: object.run.toString(), 530 | })}} 531 | $app = {rootCmd: {addCommand: function(command) {}}} 532 | 533 | function cronAdd(name, schedule, handler) 534 | { 535 | HOOKS.push({ 536 | type: 'Scheduled Cron Job', 537 | key: name, 538 | name: name, 539 | schedule: schedule, 540 | handler: handler.toString(), 541 | }) 542 | } 543 | 544 | //builtin middlewares 545 | $apis = { 546 | ` 547 | for (let middleware of MIDDLEWARES) 548 | contents += `${middleware}: function(...args){return "$apis.${middleware}("+ (args.length ? "'"+args.join("','")+"'" :"") +")"},\n` 549 | contents += ` 550 | } //end of $apis. 551 | 552 | function routerAdd(method, path, handler, ...middlewares) 553 | { 554 | var hook = { 555 | type: 'Route', 556 | key: method + ' ' + path, 557 | method: method, 558 | path: path, 559 | handler: handler.toString(), 560 | middlewares: [], 561 | } 562 | for (let middleware of middlewares) 563 | hook.middlewares.push(middleware.toString()) 564 | HOOKS.push(hook) 565 | } 566 | 567 | class Middleware { 568 | handler; 569 | priority; 570 | constructor(handler, priority){ 571 | this.handler = handler; 572 | this.priority = priority; 573 | } 574 | toString() {return this.handler.toString()} 575 | } 576 | function routerUse(handler) 577 | { 578 | HOOKS.push({ 579 | type: 'Global Middleware', 580 | key: 'Global Middleware', 581 | handler: handler.toString(), 582 | priority: handler.priority, 583 | }) 584 | } 585 | ` 586 | for (let eventHook of EVENT_HOOKS) 587 | contents += `function ${eventHook}(handler, ...collections) { 588 | HOOKS.push({ 589 | type: 'Event', 590 | key: '${eventHook} ' + collections, 591 | event: '${eventHook}', 592 | handler: handler.toString(), 593 | collections: collections, 594 | })} 595 | ` 596 | contents += hooksFileContents + ';\nHOOKS' 597 | let parsedHooks = eval(contents) 598 | 599 | parent.style = "border-left: solid 1px lightgrey; margin-left: 6px; padding-left:2px" 600 | 601 | for (let hook of parsedHooks) 602 | { 603 | PARSED_HOOKS[hook.type][hook.key] = hook; 604 | let label = '' 605 | if (hook.type == 'Route') 606 | label = `${hook.method} ${hook.path}` 607 | else if (hook.type == 'Event') 608 | label = `${hook.event} ${hook.collections && hook.collections.length > 0 ? `${hook.collections}` : ''}` 609 | else if (hook.type == 'Scheduled Cron Job') 610 | label = ` ${hook.name}` 611 | else if (hook.type == 'Command') 612 | label = ` ${hook.use}` 613 | else if (hook.type == 'Global Middleware') 614 | label = `${hook.type}` 615 | parent.innerHTML += `${label}` 616 | } 617 | } 618 | 619 | 620 | function displayParsedHook(event) 621 | { 622 | let element = event.srcElement 623 | 624 | //placeholder, just display the whole parent file until easy-mode is implemented 625 | while (element.getAttribute('hook-type') != 'file') 626 | element = element.parentElement 627 | displayHook({srcElement: element}) 628 | return 629 | 630 | //TODO display easy mode 631 | while (!element.getAttribute('hook-type')) 632 | element = element.parentElement 633 | 634 | let hook = PARSED_HOOKS[element.getAttribute('hook-type')][element.getAttribute('hook-key')] 635 | 636 | document.getElementById('editor').value = hook.handler 637 | } -------------------------------------------------------------------------------- /pb_public/hooks-dash/lib/code-input.auto-close-brackets.min.js: -------------------------------------------------------------------------------- 1 | codeInput.plugins.AutoCloseBrackets=class extends codeInput.Plugin{bracketPairs=[];bracketsOpenedStack=[];constructor(a={"(":")","[":"]","{":"}",'"':"\""}){super([]),this.bracketPairs=a}afterElementsAdded(a){a.textareaElement.addEventListener("keydown",b=>{this.checkBackspace(a,b)}),a.textareaElement.addEventListener("beforeinput",b=>{this.checkBrackets(a,b)})}checkBrackets(a,b){if(b.data==a.textareaElement.value[a.textareaElement.selectionStart])for(let c in this.bracketPairs){let d=this.bracketPairs[c];if(b.data==d){a.textareaElement.selectionStart=a.textareaElement.selectionEnd+=1,b.preventDefault();break}}else if(b.data in this.bracketPairs){let c=this.bracketPairs[b.data];document.execCommand("insertText",!1,c),a.textareaElement.selectionStart=a.textareaElement.selectionEnd-=1}}checkBackspace(a,b){if("Backspace"==b.key&&a.textareaElement.selectionStart==a.textareaElement.selectionEnd){let b=this.bracketPairs[a.textareaElement.value[a.textareaElement.selectionStart-1]];b!=null&&a.textareaElement.value[a.textareaElement.selectionStart]==b&&(a.textareaElement.selectionEnd=a.textareaElement.selectionStart+1,a.textareaElement.selectionStart-=1)}}}; -------------------------------------------------------------------------------- /pb_public/hooks-dash/lib/code-input.indent.min.js: -------------------------------------------------------------------------------- 1 | codeInput.plugins.Indent=class extends codeInput.Plugin{bracketPairs={};indentation="\t";indentationNumChars=1;tabIndentationEnabled=!0;escTabToChangeFocus=!0;escJustPressed=!1;constructor(a=!1,b=4,c={"(":")","[":"]","{":"}"},d=!0){if(super([]),this.bracketPairs=c,a){this.indentation="";for(let a=0;a{this.escTabToChangeFocus&&a.setKeyboardNavInstructions("Tab and Shift-Tab currently for indentation. Press Esc to enable keyboard navigation.",!0)}),b.addEventListener("keydown",b=>{this.checkTab(a,b),this.checkEnter(a,b),this.checkBackspace(a,b)}),b.addEventListener("beforeinput",b=>{this.checkCloseBracket(a,b)});let c=document.createElement("pre");c.setAttribute("aria-hidden","true");let d=document.createElement("span");if(a.template.preElementStyled)c.appendChild(d),c.classList.add("code-input_autocomplete_test-indentation-width"),a.appendChild(c);else{let b=document.createElement("code");b.appendChild(d),b.classList.add("code-input_autocomplete_test-indentation-width"),c.appendChild(b),a.appendChild(c)}d.innerHTML=a.escapeHtml(this.indentation);let e=d.offsetWidth;a.removeChild(c),a.pluginData.indent={indentationWidthPx:e}}checkTab(a,b){var c=Math.max;if(this.tabIndentationEnabled){if(this.escTabToChangeFocus){if("Escape"==b.key)return this.escJustPressed=!0,void a.setKeyboardNavInstructions("Tab and Shift-Tab currently for keyboard navigation. Type to return to indentation.",!1);if("Tab"!=b.key)return"Shift"==b.key?void 0:(a.setKeyboardNavInstructions("Tab and Shift-Tab currently for indentation. Press Esc to enable keyboard navigation.",!1),void(this.escJustPressed=!1));if(!this.enableTabIndentation||this.escJustPressed)return a.setKeyboardNavInstructions("",!1),void(this.escJustPressed=!1)}else if("Tab"!=b.key)return;let d=a.textareaElement;if(b.preventDefault(),!b.shiftKey&&d.selectionStart==d.selectionEnd)document.execCommand("insertText",!1,this.indentation);else{let e=d.value.split("\n"),f=0,g=d.selectionStart,h=d.selectionEnd;for(let a=0;a=f+1||g==h&&g<=f+e[a].length+1&&h>=f)&&(b.shiftKey?e[a].substring(0,this.indentationNumChars)==this.indentation&&(d.selectionStart=f,d.selectionEnd=f+this.indentationNumChars,document.execCommand("delete",!1,""),g>f&&(g=c(g-this.indentationNumChars,f)),h-=this.indentationNumChars,f-=this.indentationNumChars):(d.selectionStart=f,d.selectionEnd=f,document.execCommand("insertText",!1,this.indentation),g>f&&(g+=this.indentationNumChars),h+=this.indentationNumChars,f+=this.indentationNumChars)),f+=e[a].length+1;d.selectionStart=g,d.selectionEnd=h,b.shiftKey?a.scrollBy(-a.pluginData.indent.indentationWidthPx,0):a.scrollBy(a.pluginData.indent.indentationWidthPx,0)}a.value=d.value}}checkEnter(a,b){if("Enter"!=b.key)return;b.preventDefault();let c=a.textareaElement,d=c.value.split("\n"),e=0,f=d.length-1,g="",h=0;for(let g=0;g=c.scrollTop+q&&a.scrollBy(0,+getComputedStyle(c).lineHeight.replace("px","")),a.value=c.value}checkBackspace(a,b){if("Backspace"==b.key&&1!=this.indentationNumChars){let c=a.textareaElement;c.selectionStart==c.selectionEnd&&a.value.substring(c.selectionStart-this.indentationNumChars,c.selectionStart)==this.indentation&&(c.selectionStart-=this.indentationNumChars,b.preventDefault(),document.execCommand("delete",!1,""))}}checkCloseBracket(a,b){if(a.textareaElement.selectionStart==a.textareaElement.selectionEnd)for(let c in this.bracketPairs){let d=this.bracketPairs[c];b.data==d&&a.value.substring(a.textareaElement.selectionStart-this.indentationNumChars,a.textareaElement.selectionStart)==this.indentation&&(a.textareaElement.selectionStart-=this.indentationNumChars,document.execCommand("delete",!1,""))}}}; -------------------------------------------------------------------------------- /pb_public/hooks-dash/lib/code-input.min.css: -------------------------------------------------------------------------------- 1 | code-input{display:block;overflow-y:auto;overflow-x:auto;position:relative;top:0;left:0;margin:8px;--padding:16px;height:250px;font-size:inherit;font-family:monospace;line-height:1.5;tab-size:2;caret-color:#a9a9a9;white-space:pre;padding:0!important;display:grid;grid-template-columns:100%;grid-template-rows:100%}code-input:not(.code-input_loaded){padding:var(--padding,16px)!important}code-input textarea,code-input.code-input_pre-element-styled pre,code-input:not(.code-input_pre-element-styled) pre code{margin:0!important;padding:var(--padding,16px)!important;border:0;min-width:calc(100% - var(--padding) * 2);min-height:calc(100% - var(--padding) * 2);overflow:hidden;resize:none;grid-row:1;grid-column:1;display:block}code-input.code-input_pre-element-styled pre,code-input:not(.code-input_pre-element-styled) pre code{height:max-content;width:max-content}code-input.code-input_pre-element-styled pre code,code-input:not(.code-input_pre-element-styled) pre{margin:0!important;padding:0!important;width:100%;height:100%}code-input pre,code-input pre *,code-input textarea{font-size:inherit!important;font-family:inherit!important;line-height:inherit!important;tab-size:inherit!important}code-input pre,code-input textarea{grid-column:1;grid-row:1}code-input textarea{z-index:1}code-input pre{z-index:0}code-input textarea{color:transparent;background:0 0;caret-color:inherit!important}code-input textarea::placeholder{color:#d3d3d3}code-input pre,code-input textarea{white-space:inherit;word-spacing:normal;word-break:normal;word-wrap:normal}code-input textarea{resize:none;outline:0!important}code-input:has(textarea:focus):not(.code-input_mouse-focused){outline:2px solid #000}code-input:not(.code-input_registered){overflow:hidden;display:block;box-sizing:border-box}code-input:not(.code-input_registered)::after{content:"Use codeInput.registerTemplate to set up.";display:block;position:absolute;bottom:var(--padding);left:var(--padding);width:calc(100% - 2 * var(--padding));border-top:1px solid grey;outline:var(--padding) solid #fff;background-color:#fff}code-input:not(.code-input_loaded) pre,code-input:not(.code-input_loaded) textarea{opacity:0}code-input .code-input_dialog-container{z-index:2;position:sticky;grid-row:1;grid-column:1;top:0;left:0;width:100%;height:0;text-align:left}code-input .code-input_dialog-container .code-input_keyboard-navigation-instructions{top:0;right:0;display:block;position:absolute;background-color:#000;color:#fff;padding:2px;padding-left:10px;text-wrap:pretty;overflow:hidden;text-overflow:ellipsis;width:calc(100% - 12px);max-height:3em}code-input .code-input_dialog-container .code-input_keyboard-navigation-instructions:empty,code-input.code-input_mouse-focused .code-input_dialog-container .code-input_keyboard-navigation-instructions,code-input:not(:has(textarea:focus)) .code-input_dialog-container .code-input_keyboard-navigation-instructions{display:none}code-input:not(:has(.code-input_keyboard-navigation-instructions:empty)):has(textarea:focus):not(.code-input_mouse-focused) textarea,code-input:not(:has(.code-input_keyboard-navigation-instructions:empty)):has(textarea:focus):not(.code-input_mouse-focused).code-input_pre-element-styled pre,code-input:not(:has(.code-input_keyboard-navigation-instructions:empty)):has(textarea:focus):not(.code-input_mouse-focused):not(.code-input_pre-element-styled) pre code{padding-top:calc(var(--padding) + 3em)!important} -------------------------------------------------------------------------------- /pb_public/hooks-dash/lib/code-input.min.js: -------------------------------------------------------------------------------- 1 | var codeInput={observedAttributes:["value","placeholder","language","lang","template"],textareaSyncAttributes:["value","min","max","type","pattern","autocomplete","autocorrect","autofocus","cols","dirname","disabled","form","maxlength","minlength","name","placeholder","readonly","required","rows","spellcheck","wrap"],textareaSyncEvents:["change","selectionchange","invalid","input"],usedTemplates:{},defaultTemplate:void 0,templateNotYetRegisteredQueue:{},registerTemplate:function(a,b){if(!("string"==typeof a||a instanceof String))throw TypeError(`code-input: Name of template "${a}" must be a string.`);if(!("function"==typeof b.highlight||b.highlight instanceof Function))throw TypeError(`code-input: Template for "${a}" invalid, because the highlight function provided is not a function; it is "${b.highlight}". Please make sure you use one of the constructors in codeInput.templates, and that you provide the correct arguments.`);if(!("boolean"==typeof b.includeCodeInputInHighlightFunc||b.includeCodeInputInHighlightFunc instanceof Boolean))throw TypeError(`code-input: Template for "${a}" invalid, because the includeCodeInputInHighlightFunc value provided is not a true or false; it is "${b.includeCodeInputInHighlightFunc}". Please make sure you use one of the constructors in codeInput.templates, and that you provide the correct arguments.`);if(!("boolean"==typeof b.preElementStyled||b.preElementStyled instanceof Boolean))throw TypeError(`code-input: Template for "${a}" invalid, because the preElementStyled value provided is not a true or false; it is "${b.preElementStyled}". Please make sure you use one of the constructors in codeInput.templates, and that you provide the correct arguments.`);if(!("boolean"==typeof b.isCode||b.isCode instanceof Boolean))throw TypeError(`code-input: Template for "${a}" invalid, because the isCode value provided is not a true or false; it is "${b.isCode}". Please make sure you use one of the constructors in codeInput.templates, and that you provide the correct arguments.`);if(!Array.isArray(b.plugins))throw TypeError(`code-input: Template for "${a}" invalid, because the plugin array provided is not an array; it is "${b.plugins}". Please make sure you use one of the constructors in codeInput.templates, and that you provide the correct arguments.`);if(b.plugins.forEach((c,d)=>{if(!(c instanceof codeInput.Plugin))throw TypeError(`code-input: Template for "${a}" invalid, because the plugin provided at index ${d} is not valid; it is "${b.plugins[d]}". Please make sure you use one of the constructors in codeInput.templates, and that you provide the correct arguments.`)}),codeInput.usedTemplates[a]=b,a in codeInput.templateNotYetRegisteredQueue){for(let c in codeInput.templateNotYetRegisteredQueue[a])elem=codeInput.templateNotYetRegisteredQueue[a][c],elem.template=b,codeInput.runOnceWindowLoaded(function(a){a.connectedCallback()}.bind(null,elem),elem);console.log(`code-input: template: Added existing elements with template ${a}`)}if(null==codeInput.defaultTemplate){if(codeInput.defaultTemplate=a,void 0 in codeInput.templateNotYetRegisteredQueue)for(let a in codeInput.templateNotYetRegisteredQueue[void 0])elem=codeInput.templateNotYetRegisteredQueue[void 0][a],elem.template=b,codeInput.runOnceWindowLoaded(function(a){a.connectedCallback()}.bind(null,elem),elem);console.log(`code-input: template: Set template ${a} as default`)}console.log(`code-input: template: Created template ${a}`)},Template:class{constructor(a=function(){},b=!0,c=!0,d=!1,e=[]){this.highlight=a,this.preElementStyled=b,this.isCode=c,this.includeCodeInputInHighlightFunc=d,this.plugins=e}highlight=function(){};preElementStyled=!0;isCode=!0;includeCodeInputInHighlightFunc=!1;plugins=[]},templates:{prism(a,b=[]){return new codeInput.Template(a.highlightElement,!0,!0,!1,b)},hljs(a,b=[]){return new codeInput.Template(function(b){b.removeAttribute("data-highlighted"),a.highlightElement(b)},!1,!0,!1,b)},characterLimit(a){return{highlight:function(a,b,c=[]){let d=+b.getAttribute("data-character-limit"),e=b.escapeHtml(b.value.slice(0,d)),f=b.escapeHtml(b.value.slice(d));a.innerHTML=`${e}${f}`,0${b.getAttribute("data-overflow-msg")||"(Character limit reached)"}`)},includeCodeInputInHighlightFunc:!0,preElementStyled:!0,isCode:!1,plugins:a}},rainbowText(a=["red","orangered","orange","goldenrod","gold","green","darkgreen","navy","blue","magenta"],b="",c=[]){return{highlight:function(a,b){let c=[],d=b.value.split(b.template.delimiter);for(let e=0;e${b.escapeHtml(d[e])}`);a.innerHTML=c.join(b.template.delimiter)},includeCodeInputInHighlightFunc:!0,preElementStyled:!0,isCode:!1,rainbowColors:a,delimiter:b,plugins:c}},character_limit(){return this.characterLimit([])},rainbow_text(a=["red","orangered","orange","goldenrod","gold","green","darkgreen","navy","blue","magenta"],b="",c=[]){return this.rainbowText(a,b,c)},custom(a=function(){},b=!0,c=!0,d=!1,e=[]){return{highlight:a,includeCodeInputInHighlightFunc:d,preElementStyled:b,isCode:c,plugins:e}}},plugins:new Proxy({},{get(a,b){if(a[b]==null)throw ReferenceError(`code-input: Plugin '${b}' is not defined. Please ensure you import the necessary files from the plugins folder in the WebCoder49/code-input repository, in the of your HTML, before the plugin is instatiated.`);return a[b]}}),Plugin:class{constructor(a){console.log("code-input: plugin: Created plugin"),a.forEach(a=>{codeInput.observedAttributes.push(a)})}beforeHighlight(){}afterHighlight(){}beforeElementsAdded(){}afterElementsAdded(){}attributeChanged(){}},CodeInput:class extends HTMLElement{constructor(){super()}textareaElement=null;preElement=null;codeElement=null;dialogContainerElement=null;static formAssociated=!0;boundEventCallbacks={};pluginEvt(a,b){for(let c in this.template.plugins){let d=this.template.plugins[c];a in d&&(b===void 0?d[a](this):d[a](this,...b))}}needsHighlight=!1;handleEventsFromTextarea=!0;originalAriaDescription;scheduleHighlight(){this.needsHighlight=!0}animateFrame(){this.needsHighlight&&(this.update(),this.needsHighlight=!1),window.requestAnimationFrame(this.animateFrame.bind(this))}update(){let a=this.codeElement,b=this.value;b+="\n",a.innerHTML=this.escapeHtml(b),this.pluginEvt("beforeHighlight"),this.template.includeCodeInputInHighlightFunc?this.template.highlight(a,this):this.template.highlight(a),this.syncSize(),this.textareaElement===document.activeElement&&(this.handleEventsFromTextarea=!1,this.textareaElement.blur(),this.textareaElement.focus(),this.handleEventsFromTextarea=!0),this.pluginEvt("afterHighlight")}syncSize(){this.template.preElementStyled?(this.style.backgroundColor=getComputedStyle(this.preElement).backgroundColor,this.textareaElement.style.height=getComputedStyle(this.preElement).height,this.textareaElement.style.width=getComputedStyle(this.preElement).width):(this.style.backgroundColor=getComputedStyle(this.codeElement).backgroundColor,this.textareaElement.style.height=getComputedStyle(this.codeElement).height,this.textareaElement.style.width=getComputedStyle(this.codeElement).width)}setKeyboardNavInstructions(a,b){this.dialogContainerElement.querySelector(".code-input_keyboard-navigation-instructions").innerText=a,b?this.textareaElement.setAttribute("aria-description",this.originalAriaDescription+". "+a):this.textareaElement.setAttribute("aria-description",a)}escapeHtml(a){return a.replace(/&/g,"&").replace(/")}getTemplate(){let a;return a=null==this.getAttribute("template")?codeInput.defaultTemplate:this.getAttribute("template"),a in codeInput.usedTemplates?codeInput.usedTemplates[a]:(a in codeInput.templateNotYetRegisteredQueue||(codeInput.templateNotYetRegisteredQueue[a]=[]),void codeInput.templateNotYetRegisteredQueue[a].push(this))}setup(){if(null!=this.textareaElement)return;this.classList.add("code-input_registered"),this.template.preElementStyled&&this.classList.add("code-input_pre-element-styled"),this.pluginEvt("beforeElementsAdded");let a=this.getAttribute("language")||this.getAttribute("lang"),b=this.getAttribute("placeholder")||this.getAttribute("language")||this.getAttribute("lang")||"",c=this.unescapeHtml(this.innerHTML)||this.getAttribute("value")||"";this.initialValue=c;let d=document.createElement("textarea");d.placeholder=b,""!=c&&(d.value=c),d.innerHTML=this.innerHTML,d.setAttribute("spellcheck","false"),d.setAttribute("tabindex",this.getAttribute("tabindex")||0),this.setAttribute("tabindex",-1),this.originalAriaDescription=this.getAttribute("aria-description")||"Code input field",this.addEventListener("mousedown",()=>{this.classList.add("code-input_mouse-focused")}),d.addEventListener("blur",()=>{this.handleEventsFromTextarea&&this.classList.remove("code-input_mouse-focused")}),this.innerHTML="";for(let a,b=0;b{this.value=this.textareaElement.value}),this.textareaElement=d,this.append(d);let e=document.createElement("code"),f=document.createElement("pre");f.setAttribute("aria-hidden","true"),f.setAttribute("tabindex","-1"),f.setAttribute("inert",!0),this.preElement=f,this.codeElement=e,f.append(e),this.append(f),this.template.isCode&&a!=null&&""!=a&&e.classList.add("language-"+a.toLowerCase());let g=document.createElement("div");g.classList.add("code-input_dialog-container"),this.append(g),this.dialogContainerElement=g;let h=document.createElement("div");h.classList.add("code-input_keyboard-navigation-instructions"),g.append(h),this.pluginEvt("afterElementsAdded"),this.dispatchEvent(new CustomEvent("code-input_load")),this.value=c,this.animateFrame();const i=new ResizeObserver(()=>{this.syncSize()});i.observe(this)}escape_html(a){return this.escapeHtml(a)}get_template(){return this.getTemplate()}connectedCallback(){this.template=this.getTemplate(),this.template!=null&&(this.classList.add("code-input_registered"),codeInput.runOnceWindowLoaded(()=>{this.setup(),this.classList.add("code-input_loaded")},this)),this.mutationObserver=new MutationObserver(this.mutationObserverCallback.bind(this)),this.mutationObserver.observe(this,{attributes:!0,attributeOldValue:!0})}mutationObserverCallback(a){for(const b of a)if("attributes"===b.type){for(let a=0;a{a.match(b)&&(null==c?this.textareaElement.removeAttribute(a):this.textareaElement.setAttribute(a,c))})}}addEventListener(a,b,c=void 0){let d=function(a){"function"==typeof b?b(a):b&&b.handleEvent&&b.handleEvent(a)}.bind(this);if(this.boundEventCallbacks[b]=d,codeInput.textareaSyncEvents.includes(a)){let e=function(a){this.handleEventsFromTextarea&&d(a)}.bind(this);this.boundEventCallbacks[b]=e,void 0===c?null==this.textareaElement?this.addEventListener("code-input_load",()=>{this.textareaElement.addEventListener(a,d)}):this.textareaElement.addEventListener(a,e):null==this.textareaElement?this.addEventListener("code-input_load",()=>{this.textareaElement.addEventListener(a,d,c)}):this.textareaElement.addEventListener(a,e,c)}else void 0===c?super.addEventListener(a,d):super.addEventListener(a,d,c)}removeEventListener(a,b,c=void 0){let d=this.boundEventCallbacks[b];codeInput.textareaSyncEvents.includes(a)?c===void 0?null==this.textareaElement?this.addEventListener("code-input_load",()=>{this.textareaElement.removeEventListener(a,d)}):this.textareaElement.removeEventListener(a,d):null==this.textareaElement?this.addEventListener("code-input_load",()=>{this.textareaElement.removeEventListener(a,d,c)}):this.textareaElement.removeEventListener(a,d,c):c===void 0?super.removeEventListener(a,d):super.removeEventListener(a,d,c)}get value(){return this.textareaElement.value}set value(a){return(null===a||void 0===a)&&(a=""),this.textareaElement.value=a,this.scheduleHighlight(),a}get placeholder(){return this.getAttribute("placeholder")}set placeholder(a){return this.setAttribute("placeholder",a)}get validity(){return this.textareaElement.validity}get validationMessage(){return this.textareaElement.validationMessage}setCustomValidity(a){return this.textareaElement.setCustomValidity(a)}checkValidity(){return this.textareaElement.checkValidity()}reportValidity(){return this.textareaElement.reportValidity()}pluginData={};formResetCallback(){this.value=this.initialValue}},runOnceWindowLoaded(a){"complete"==document.readyState?a():window.addEventListener("load",a)}};customElements.define("code-input",codeInput.CodeInput); -------------------------------------------------------------------------------- /pb_public/hooks-dash/lib/highlight.go.min.js: -------------------------------------------------------------------------------- 1 | /*! `go` grammar compiled for Highlight.js 11.9.0 */ 2 | (()=>{var e=(()=>{"use strict";return e=>{const n={ 3 | keyword:["break","case","chan","const","continue","default","defer","else","fallthrough","for","func","go","goto","if","import","interface","map","package","range","return","select","struct","switch","type","var"], 4 | type:["bool","byte","complex64","complex128","error","float32","float64","int8","int16","int32","int64","string","uint8","uint16","uint32","uint64","int","uint","uintptr","rune"], 5 | literal:["true","false","iota","nil"], 6 | built_in:["append","cap","close","complex","copy","imag","len","make","new","panic","print","println","real","recover","delete"] 7 | };return{name:"Go",aliases:["golang"],keywords:n,illegal:"{var e=(()=>{"use strict" 3 | ;const e="[A-Za-z$_][0-9A-Za-z$_]*",n=["as","in","of","if","for","while","finally","var","new","function","do","return","void","else","break","catch","instanceof","with","throw","case","default","try","switch","continue","typeof","delete","let","yield","const","class","debugger","async","await","static","import","from","export","extends"],a=["true","false","null","undefined","NaN","Infinity"],t=["Object","Function","Boolean","Symbol","Math","Date","Number","BigInt","String","RegExp","Array","Float32Array","Float64Array","Int8Array","Uint8Array","Uint8ClampedArray","Int16Array","Int32Array","Uint16Array","Uint32Array","BigInt64Array","BigUint64Array","Set","Map","WeakSet","WeakMap","ArrayBuffer","SharedArrayBuffer","Atomics","DataView","JSON","Promise","Generator","GeneratorFunction","AsyncFunction","Reflect","Proxy","Intl","WebAssembly"],s=["Error","EvalError","InternalError","RangeError","ReferenceError","SyntaxError","TypeError","URIError"],r=["setInterval","setTimeout","clearInterval","clearTimeout","require","exports","eval","isFinite","isNaN","parseFloat","parseInt","decodeURI","decodeURIComponent","encodeURI","encodeURIComponent","escape","unescape"],c=["arguments","this","super","console","window","document","localStorage","sessionStorage","module","global"],i=[].concat(r,t,s) 4 | ;return o=>{const l=o.regex,b=e,d={begin:/<[A-Za-z0-9\\._:-]+/, 5 | end:/\/[A-Za-z0-9\\._:-]+>|\/>/,isTrulyOpeningTag:(e,n)=>{ 6 | const a=e[0].length+e.index,t=e.input[a] 7 | ;if("<"===t||","===t)return void n.ignoreMatch();let s 8 | ;">"===t&&(((e,{after:n})=>{const a="",$={ 54 | match:[/const|var|let/,/\s+/,b,/\s*/,/=\s*/,/(async\s*)?/,l.lookahead(B)], 55 | keywords:"async",className:{1:"keyword",3:"title.function"},contains:[R]} 56 | ;return{name:"JavaScript",aliases:["js","jsx","mjs","cjs"],keywords:g,exports:{ 57 | PARAMS_CONTAINS:w,CLASS_REFERENCE:k},illegal:/#(?![$_A-z])/, 58 | contains:[o.SHEBANG({label:"shebang",binary:"node",relevance:5}),{ 59 | label:"use_strict",className:"meta",relevance:10, 60 | begin:/^\s*['"]use (strict|asm)['"]/ 61 | },o.APOS_STRING_MODE,o.QUOTE_STRING_MODE,h,N,_,f,v,{match:/\$\d+/},A,k,{ 62 | className:"attr",begin:b+l.lookahead(":"),relevance:0},$,{ 63 | begin:"("+o.RE_STARTERS_RE+"|\\b(case|return|throw)\\b)\\s*", 64 | keywords:"return throw case",relevance:0,contains:[v,o.REGEXP_MODE,{ 65 | className:"function",begin:B,returnBegin:!0,end:"\\s*=>",contains:[{ 66 | className:"params",variants:[{begin:o.UNDERSCORE_IDENT_RE,relevance:0},{ 67 | className:null,begin:/\(\s*\)/,skip:!0},{begin:/\(/,end:/\)/,excludeBegin:!0, 68 | excludeEnd:!0,keywords:g,contains:w}]}]},{begin:/,/,relevance:0},{match:/\s+/, 69 | relevance:0},{variants:[{begin:"<>",end:""},{ 70 | match:/<[A-Za-z0-9\\._:-]+\s*\/>/},{begin:d.begin, 71 | "on:begin":d.isTrulyOpeningTag,end:d.end}],subLanguage:"xml",contains:[{ 72 | begin:d.begin,end:d.end,skip:!0,contains:["self"]}]}]},I,{ 73 | beginKeywords:"while if switch catch for"},{ 74 | begin:"\\b(?!function)"+o.UNDERSCORE_IDENT_RE+"\\([^()]*(\\([^()]*(\\([^()]*\\)[^()]*)*\\)[^()]*)*\\)\\s*\\{", 75 | returnBegin:!0,label:"func.def",contains:[R,o.inherit(o.TITLE_MODE,{begin:b, 76 | className:"title.function"})]},{match:/\.\.\./,relevance:0},C,{match:"\\$"+b, 77 | relevance:0},{match:[/\bconstructor(?=\s*\()/],className:{1:"title.function"}, 78 | contains:[R]},x,{relevance:0,match:/\b[A-Z][A-Z_0-9]+\b/, 79 | className:"variable.constant"},O,M,{match:/\$[(.]/}]}}})() 80 | ;hljs.registerLanguage("javascript",e)})(); -------------------------------------------------------------------------------- /pb_public/hooks-dash/lib/highlight.min.js: -------------------------------------------------------------------------------- 1 | /*! 2 | Highlight.js v11.9.0 (git: f47103d4f1) 3 | (c) 2006-2023 undefined and other contributors 4 | License: BSD-3-Clause 5 | */ 6 | var hljs=function(){"use strict";function e(n){ 7 | return n instanceof Map?n.clear=n.delete=n.set=()=>{ 8 | throw Error("map is read-only")}:n instanceof Set&&(n.add=n.clear=n.delete=()=>{ 9 | throw Error("set is read-only") 10 | }),Object.freeze(n),Object.getOwnPropertyNames(n).forEach((t=>{ 11 | const a=n[t],i=typeof a;"object"!==i&&"function"!==i||Object.isFrozen(a)||e(a) 12 | })),n}class n{constructor(e){ 13 | void 0===e.data&&(e.data={}),this.data=e.data,this.isMatchIgnored=!1} 14 | ignoreMatch(){this.isMatchIgnored=!0}}function t(e){ 15 | return e.replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'") 16 | }function a(e,...n){const t=Object.create(null);for(const n in e)t[n]=e[n] 17 | ;return n.forEach((e=>{for(const n in e)t[n]=e[n]})),t}const i=e=>!!e.scope 18 | ;class r{constructor(e,n){ 19 | this.buffer="",this.classPrefix=n.classPrefix,e.walk(this)}addText(e){ 20 | this.buffer+=t(e)}openNode(e){if(!i(e))return;const n=((e,{prefix:n})=>{ 21 | if(e.startsWith("language:"))return e.replace("language:","language-") 22 | ;if(e.includes(".")){const t=e.split(".") 23 | ;return[`${n}${t.shift()}`,...t.map(((e,n)=>`${e}${"_".repeat(n+1)}`))].join(" ") 24 | }return`${n}${e}`})(e.scope,{prefix:this.classPrefix});this.span(n)} 25 | closeNode(e){i(e)&&(this.buffer+="")}value(){return this.buffer}span(e){ 26 | this.buffer+=``}}const s=(e={})=>{const n={children:[]} 27 | ;return Object.assign(n,e),n};class o{constructor(){ 28 | this.rootNode=s(),this.stack=[this.rootNode]}get top(){ 29 | return this.stack[this.stack.length-1]}get root(){return this.rootNode}add(e){ 30 | this.top.children.push(e)}openNode(e){const n=s({scope:e}) 31 | ;this.add(n),this.stack.push(n)}closeNode(){ 32 | if(this.stack.length>1)return this.stack.pop()}closeAllNodes(){ 33 | for(;this.closeNode(););}toJSON(){return JSON.stringify(this.rootNode,null,4)} 34 | walk(e){return this.constructor._walk(e,this.rootNode)}static _walk(e,n){ 35 | return"string"==typeof n?e.addText(n):n.children&&(e.openNode(n), 36 | n.children.forEach((n=>this._walk(e,n))),e.closeNode(n)),e}static _collapse(e){ 37 | "string"!=typeof e&&e.children&&(e.children.every((e=>"string"==typeof e))?e.children=[e.children.join("")]:e.children.forEach((e=>{ 38 | o._collapse(e)})))}}class l extends o{constructor(e){super(),this.options=e} 39 | addText(e){""!==e&&this.add(e)}startScope(e){this.openNode(e)}endScope(){ 40 | this.closeNode()}__addSublanguage(e,n){const t=e.root 41 | ;n&&(t.scope="language:"+n),this.add(t)}toHTML(){ 42 | return new r(this,this.options).value()}finalize(){ 43 | return this.closeAllNodes(),!0}}function c(e){ 44 | return e?"string"==typeof e?e:e.source:null}function d(e){return b("(?=",e,")")} 45 | function g(e){return b("(?:",e,")*")}function u(e){return b("(?:",e,")?")} 46 | function b(...e){return e.map((e=>c(e))).join("")}function m(...e){const n=(e=>{ 47 | const n=e[e.length-1] 48 | ;return"object"==typeof n&&n.constructor===Object?(e.splice(e.length-1,1),n):{} 49 | })(e);return"("+(n.capture?"":"?:")+e.map((e=>c(e))).join("|")+")"} 50 | function p(e){return RegExp(e.toString()+"|").exec("").length-1} 51 | const _=/\[(?:[^\\\]]|\\.)*\]|\(\??|\\([1-9][0-9]*)|\\./ 52 | ;function h(e,{joinWith:n}){let t=0;return e.map((e=>{t+=1;const n=t 53 | ;let a=c(e),i="";for(;a.length>0;){const e=_.exec(a);if(!e){i+=a;break} 54 | i+=a.substring(0,e.index), 55 | a=a.substring(e.index+e[0].length),"\\"===e[0][0]&&e[1]?i+="\\"+(Number(e[1])+n):(i+=e[0], 56 | "("===e[0]&&t++)}return i})).map((e=>`(${e})`)).join(n)} 57 | const f="[a-zA-Z]\\w*",E="[a-zA-Z_]\\w*",y="\\b\\d+(\\.\\d+)?",N="(-?)(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)",w="\\b(0b[01]+)",v={ 58 | begin:"\\\\[\\s\\S]",relevance:0},O={scope:"string",begin:"'",end:"'", 59 | illegal:"\\n",contains:[v]},k={scope:"string",begin:'"',end:'"',illegal:"\\n", 60 | contains:[v]},x=(e,n,t={})=>{const i=a({scope:"comment",begin:e,end:n, 61 | contains:[]},t);i.contains.push({scope:"doctag", 62 | begin:"[ ]*(?=(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):)", 63 | end:/(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):/,excludeBegin:!0,relevance:0}) 64 | ;const r=m("I","a","is","so","us","to","at","if","in","it","on",/[A-Za-z]+['](d|ve|re|ll|t|s|n)/,/[A-Za-z]+[-][a-z]+/,/[A-Za-z][a-z]{2,}/) 65 | ;return i.contains.push({begin:b(/[ ]+/,"(",r,/[.]?[:]?([.][ ]|[ ])/,"){3}")}),i 66 | },M=x("//","$"),S=x("/\\*","\\*/"),A=x("#","$");var C=Object.freeze({ 67 | __proto__:null,APOS_STRING_MODE:O,BACKSLASH_ESCAPE:v,BINARY_NUMBER_MODE:{ 68 | scope:"number",begin:w,relevance:0},BINARY_NUMBER_RE:w,COMMENT:x, 69 | C_BLOCK_COMMENT_MODE:S,C_LINE_COMMENT_MODE:M,C_NUMBER_MODE:{scope:"number", 70 | begin:N,relevance:0},C_NUMBER_RE:N,END_SAME_AS_BEGIN:e=>Object.assign(e,{ 71 | "on:begin":(e,n)=>{n.data._beginMatch=e[1]},"on:end":(e,n)=>{ 72 | n.data._beginMatch!==e[1]&&n.ignoreMatch()}}),HASH_COMMENT_MODE:A,IDENT_RE:f, 73 | MATCH_NOTHING_RE:/\b\B/,METHOD_GUARD:{begin:"\\.\\s*"+E,relevance:0}, 74 | NUMBER_MODE:{scope:"number",begin:y,relevance:0},NUMBER_RE:y, 75 | PHRASAL_WORDS_MODE:{ 76 | begin:/\b(a|an|the|are|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such|will|you|your|they|like|more)\b/ 77 | },QUOTE_STRING_MODE:k,REGEXP_MODE:{scope:"regexp",begin:/\/(?=[^/\n]*\/)/, 78 | end:/\/[gimuy]*/,contains:[v,{begin:/\[/,end:/\]/,relevance:0,contains:[v]}]}, 79 | RE_STARTERS_RE:"!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~", 80 | SHEBANG:(e={})=>{const n=/^#![ ]*\// 81 | ;return e.binary&&(e.begin=b(n,/.*\b/,e.binary,/\b.*/)),a({scope:"meta",begin:n, 82 | end:/$/,relevance:0,"on:begin":(e,n)=>{0!==e.index&&n.ignoreMatch()}},e)}, 83 | TITLE_MODE:{scope:"title",begin:f,relevance:0},UNDERSCORE_IDENT_RE:E, 84 | UNDERSCORE_TITLE_MODE:{scope:"title",begin:E,relevance:0}});function T(e,n){ 85 | "."===e.input[e.index-1]&&n.ignoreMatch()}function R(e,n){ 86 | void 0!==e.className&&(e.scope=e.className,delete e.className)}function D(e,n){ 87 | n&&e.beginKeywords&&(e.begin="\\b("+e.beginKeywords.split(" ").join("|")+")(?!\\.)(?=\\b|\\s)", 88 | e.__beforeBegin=T,e.keywords=e.keywords||e.beginKeywords,delete e.beginKeywords, 89 | void 0===e.relevance&&(e.relevance=0))}function I(e,n){ 90 | Array.isArray(e.illegal)&&(e.illegal=m(...e.illegal))}function L(e,n){ 91 | if(e.match){ 92 | if(e.begin||e.end)throw Error("begin & end are not supported with match") 93 | ;e.begin=e.match,delete e.match}}function B(e,n){ 94 | void 0===e.relevance&&(e.relevance=1)}const $=(e,n)=>{if(!e.beforeMatch)return 95 | ;if(e.starts)throw Error("beforeMatch cannot be used with starts") 96 | ;const t=Object.assign({},e);Object.keys(e).forEach((n=>{delete e[n] 97 | })),e.keywords=t.keywords,e.begin=b(t.beforeMatch,d(t.begin)),e.starts={ 98 | relevance:0,contains:[Object.assign(t,{endsParent:!0})] 99 | },e.relevance=0,delete t.beforeMatch 100 | },z=["of","and","for","in","not","or","if","then","parent","list","value"],F="keyword" 101 | ;function U(e,n,t=F){const a=Object.create(null) 102 | ;return"string"==typeof e?i(t,e.split(" ")):Array.isArray(e)?i(t,e):Object.keys(e).forEach((t=>{ 103 | Object.assign(a,U(e[t],n,t))})),a;function i(e,t){ 104 | n&&(t=t.map((e=>e.toLowerCase()))),t.forEach((n=>{const t=n.split("|") 105 | ;a[t[0]]=[e,j(t[0],t[1])]}))}}function j(e,n){ 106 | return n?Number(n):(e=>z.includes(e.toLowerCase()))(e)?0:1}const P={},K=e=>{ 107 | console.error(e)},H=(e,...n)=>{console.log("WARN: "+e,...n)},q=(e,n)=>{ 108 | P[`${e}/${n}`]||(console.log(`Deprecated as of ${e}. ${n}`),P[`${e}/${n}`]=!0) 109 | },G=Error();function Z(e,n,{key:t}){let a=0;const i=e[t],r={},s={} 110 | ;for(let e=1;e<=n.length;e++)s[e+a]=i[e],r[e+a]=!0,a+=p(n[e-1]) 111 | ;e[t]=s,e[t]._emit=r,e[t]._multi=!0}function W(e){(e=>{ 112 | e.scope&&"object"==typeof e.scope&&null!==e.scope&&(e.beginScope=e.scope, 113 | delete e.scope)})(e),"string"==typeof e.beginScope&&(e.beginScope={ 114 | _wrap:e.beginScope}),"string"==typeof e.endScope&&(e.endScope={_wrap:e.endScope 115 | }),(e=>{if(Array.isArray(e.begin)){ 116 | if(e.skip||e.excludeBegin||e.returnBegin)throw K("skip, excludeBegin, returnBegin not compatible with beginScope: {}"), 117 | G 118 | ;if("object"!=typeof e.beginScope||null===e.beginScope)throw K("beginScope must be object"), 119 | G;Z(e,e.begin,{key:"beginScope"}),e.begin=h(e.begin,{joinWith:""})}})(e),(e=>{ 120 | if(Array.isArray(e.end)){ 121 | if(e.skip||e.excludeEnd||e.returnEnd)throw K("skip, excludeEnd, returnEnd not compatible with endScope: {}"), 122 | G 123 | ;if("object"!=typeof e.endScope||null===e.endScope)throw K("endScope must be object"), 124 | G;Z(e,e.end,{key:"endScope"}),e.end=h(e.end,{joinWith:""})}})(e)}function Q(e){ 125 | function n(n,t){ 126 | return RegExp(c(n),"m"+(e.case_insensitive?"i":"")+(e.unicodeRegex?"u":"")+(t?"g":"")) 127 | }class t{constructor(){ 128 | this.matchIndexes={},this.regexes=[],this.matchAt=1,this.position=0} 129 | addRule(e,n){ 130 | n.position=this.position++,this.matchIndexes[this.matchAt]=n,this.regexes.push([n,e]), 131 | this.matchAt+=p(e)+1}compile(){0===this.regexes.length&&(this.exec=()=>null) 132 | ;const e=this.regexes.map((e=>e[1]));this.matcherRe=n(h(e,{joinWith:"|" 133 | }),!0),this.lastIndex=0}exec(e){this.matcherRe.lastIndex=this.lastIndex 134 | ;const n=this.matcherRe.exec(e);if(!n)return null 135 | ;const t=n.findIndex(((e,n)=>n>0&&void 0!==e)),a=this.matchIndexes[t] 136 | ;return n.splice(0,t),Object.assign(n,a)}}class i{constructor(){ 137 | this.rules=[],this.multiRegexes=[], 138 | this.count=0,this.lastIndex=0,this.regexIndex=0}getMatcher(e){ 139 | if(this.multiRegexes[e])return this.multiRegexes[e];const n=new t 140 | ;return this.rules.slice(e).forEach((([e,t])=>n.addRule(e,t))), 141 | n.compile(),this.multiRegexes[e]=n,n}resumingScanAtSamePosition(){ 142 | return 0!==this.regexIndex}considerAll(){this.regexIndex=0}addRule(e,n){ 143 | this.rules.push([e,n]),"begin"===n.type&&this.count++}exec(e){ 144 | const n=this.getMatcher(this.regexIndex);n.lastIndex=this.lastIndex 145 | ;let t=n.exec(e) 146 | ;if(this.resumingScanAtSamePosition())if(t&&t.index===this.lastIndex);else{ 147 | const n=this.getMatcher(0);n.lastIndex=this.lastIndex+1,t=n.exec(e)} 148 | return t&&(this.regexIndex+=t.position+1, 149 | this.regexIndex===this.count&&this.considerAll()),t}} 150 | if(e.compilerExtensions||(e.compilerExtensions=[]), 151 | e.contains&&e.contains.includes("self"))throw Error("ERR: contains `self` is not supported at the top-level of a language. See documentation.") 152 | ;return e.classNameAliases=a(e.classNameAliases||{}),function t(r,s){const o=r 153 | ;if(r.isCompiled)return o 154 | ;[R,L,W,$].forEach((e=>e(r,s))),e.compilerExtensions.forEach((e=>e(r,s))), 155 | r.__beforeBegin=null,[D,I,B].forEach((e=>e(r,s))),r.isCompiled=!0;let l=null 156 | ;return"object"==typeof r.keywords&&r.keywords.$pattern&&(r.keywords=Object.assign({},r.keywords), 157 | l=r.keywords.$pattern, 158 | delete r.keywords.$pattern),l=l||/\w+/,r.keywords&&(r.keywords=U(r.keywords,e.case_insensitive)), 159 | o.keywordPatternRe=n(l,!0), 160 | s&&(r.begin||(r.begin=/\B|\b/),o.beginRe=n(o.begin),r.end||r.endsWithParent||(r.end=/\B|\b/), 161 | r.end&&(o.endRe=n(o.end)), 162 | o.terminatorEnd=c(o.end)||"",r.endsWithParent&&s.terminatorEnd&&(o.terminatorEnd+=(r.end?"|":"")+s.terminatorEnd)), 163 | r.illegal&&(o.illegalRe=n(r.illegal)), 164 | r.contains||(r.contains=[]),r.contains=[].concat(...r.contains.map((e=>(e=>(e.variants&&!e.cachedVariants&&(e.cachedVariants=e.variants.map((n=>a(e,{ 165 | variants:null},n)))),e.cachedVariants?e.cachedVariants:X(e)?a(e,{ 166 | starts:e.starts?a(e.starts):null 167 | }):Object.isFrozen(e)?a(e):e))("self"===e?r:e)))),r.contains.forEach((e=>{t(e,o) 168 | })),r.starts&&t(r.starts,s),o.matcher=(e=>{const n=new i 169 | ;return e.contains.forEach((e=>n.addRule(e.begin,{rule:e,type:"begin" 170 | }))),e.terminatorEnd&&n.addRule(e.terminatorEnd,{type:"end" 171 | }),e.illegal&&n.addRule(e.illegal,{type:"illegal"}),n})(o),o}(e)}function X(e){ 172 | return!!e&&(e.endsWithParent||X(e.starts))}class V extends Error{ 173 | constructor(e,n){super(e),this.name="HTMLInjectionError",this.html=n}} 174 | const J=t,Y=a,ee=Symbol("nomatch"),ne=t=>{ 175 | const a=Object.create(null),i=Object.create(null),r=[];let s=!0 176 | ;const o="Could not find the language '{}', did you forget to load/include a language module?",c={ 177 | disableAutodetect:!0,name:"Plain text",contains:[]};let p={ 178 | ignoreUnescapedHTML:!1,throwUnescapedHTML:!1,noHighlightRe:/^(no-?highlight)$/i, 179 | languageDetectRe:/\blang(?:uage)?-([\w-]+)\b/i,classPrefix:"hljs-", 180 | cssSelector:"pre code",languages:null,__emitter:l};function _(e){ 181 | return p.noHighlightRe.test(e)}function h(e,n,t){let a="",i="" 182 | ;"object"==typeof n?(a=e, 183 | t=n.ignoreIllegals,i=n.language):(q("10.7.0","highlight(lang, code, ...args) has been deprecated."), 184 | q("10.7.0","Please use highlight(code, options) instead.\nhttps://github.com/highlightjs/highlight.js/issues/2277"), 185 | i=e,a=n),void 0===t&&(t=!0);const r={code:a,language:i};x("before:highlight",r) 186 | ;const s=r.result?r.result:f(r.language,r.code,t) 187 | ;return s.code=r.code,x("after:highlight",s),s}function f(e,t,i,r){ 188 | const l=Object.create(null);function c(){if(!x.keywords)return void S.addText(A) 189 | ;let e=0;x.keywordPatternRe.lastIndex=0;let n=x.keywordPatternRe.exec(A),t="" 190 | ;for(;n;){t+=A.substring(e,n.index) 191 | ;const i=w.case_insensitive?n[0].toLowerCase():n[0],r=(a=i,x.keywords[a]);if(r){ 192 | const[e,a]=r 193 | ;if(S.addText(t),t="",l[i]=(l[i]||0)+1,l[i]<=7&&(C+=a),e.startsWith("_"))t+=n[0];else{ 194 | const t=w.classNameAliases[e]||e;g(n[0],t)}}else t+=n[0] 195 | ;e=x.keywordPatternRe.lastIndex,n=x.keywordPatternRe.exec(A)}var a 196 | ;t+=A.substring(e),S.addText(t)}function d(){null!=x.subLanguage?(()=>{ 197 | if(""===A)return;let e=null;if("string"==typeof x.subLanguage){ 198 | if(!a[x.subLanguage])return void S.addText(A) 199 | ;e=f(x.subLanguage,A,!0,M[x.subLanguage]),M[x.subLanguage]=e._top 200 | }else e=E(A,x.subLanguage.length?x.subLanguage:null) 201 | ;x.relevance>0&&(C+=e.relevance),S.__addSublanguage(e._emitter,e.language) 202 | })():c(),A=""}function g(e,n){ 203 | ""!==e&&(S.startScope(n),S.addText(e),S.endScope())}function u(e,n){let t=1 204 | ;const a=n.length-1;for(;t<=a;){if(!e._emit[t]){t++;continue} 205 | const a=w.classNameAliases[e[t]]||e[t],i=n[t];a?g(i,a):(A=i,c(),A=""),t++}} 206 | function b(e,n){ 207 | return e.scope&&"string"==typeof e.scope&&S.openNode(w.classNameAliases[e.scope]||e.scope), 208 | e.beginScope&&(e.beginScope._wrap?(g(A,w.classNameAliases[e.beginScope._wrap]||e.beginScope._wrap), 209 | A=""):e.beginScope._multi&&(u(e.beginScope,n),A="")),x=Object.create(e,{parent:{ 210 | value:x}}),x}function m(e,t,a){let i=((e,n)=>{const t=e&&e.exec(n) 211 | ;return t&&0===t.index})(e.endRe,a);if(i){if(e["on:end"]){const a=new n(e) 212 | ;e["on:end"](t,a),a.isMatchIgnored&&(i=!1)}if(i){ 213 | for(;e.endsParent&&e.parent;)e=e.parent;return e}} 214 | if(e.endsWithParent)return m(e.parent,t,a)}function _(e){ 215 | return 0===x.matcher.regexIndex?(A+=e[0],1):(D=!0,0)}function h(e){ 216 | const n=e[0],a=t.substring(e.index),i=m(x,e,a);if(!i)return ee;const r=x 217 | ;x.endScope&&x.endScope._wrap?(d(), 218 | g(n,x.endScope._wrap)):x.endScope&&x.endScope._multi?(d(), 219 | u(x.endScope,e)):r.skip?A+=n:(r.returnEnd||r.excludeEnd||(A+=n), 220 | d(),r.excludeEnd&&(A=n));do{ 221 | x.scope&&S.closeNode(),x.skip||x.subLanguage||(C+=x.relevance),x=x.parent 222 | }while(x!==i.parent);return i.starts&&b(i.starts,e),r.returnEnd?0:n.length} 223 | let y={};function N(a,r){const o=r&&r[0];if(A+=a,null==o)return d(),0 224 | ;if("begin"===y.type&&"end"===r.type&&y.index===r.index&&""===o){ 225 | if(A+=t.slice(r.index,r.index+1),!s){const n=Error(`0 width match regex (${e})`) 226 | ;throw n.languageName=e,n.badRule=y.rule,n}return 1} 227 | if(y=r,"begin"===r.type)return(e=>{ 228 | const t=e[0],a=e.rule,i=new n(a),r=[a.__beforeBegin,a["on:begin"]] 229 | ;for(const n of r)if(n&&(n(e,i),i.isMatchIgnored))return _(t) 230 | ;return a.skip?A+=t:(a.excludeBegin&&(A+=t), 231 | d(),a.returnBegin||a.excludeBegin||(A=t)),b(a,e),a.returnBegin?0:t.length})(r) 232 | ;if("illegal"===r.type&&!i){ 233 | const e=Error('Illegal lexeme "'+o+'" for mode "'+(x.scope||"")+'"') 234 | ;throw e.mode=x,e}if("end"===r.type){const e=h(r);if(e!==ee)return e} 235 | if("illegal"===r.type&&""===o)return 1 236 | ;if(R>1e5&&R>3*r.index)throw Error("potential infinite loop, way more iterations than matches") 237 | ;return A+=o,o.length}const w=v(e) 238 | ;if(!w)throw K(o.replace("{}",e)),Error('Unknown language: "'+e+'"') 239 | ;const O=Q(w);let k="",x=r||O;const M={},S=new p.__emitter(p);(()=>{const e=[] 240 | ;for(let n=x;n!==w;n=n.parent)n.scope&&e.unshift(n.scope) 241 | ;e.forEach((e=>S.openNode(e)))})();let A="",C=0,T=0,R=0,D=!1;try{ 242 | if(w.__emitTokens)w.__emitTokens(t,S);else{for(x.matcher.considerAll();;){ 243 | R++,D?D=!1:x.matcher.considerAll(),x.matcher.lastIndex=T 244 | ;const e=x.matcher.exec(t);if(!e)break;const n=N(t.substring(T,e.index),e) 245 | ;T=e.index+n}N(t.substring(T))}return S.finalize(),k=S.toHTML(),{language:e, 246 | value:k,relevance:C,illegal:!1,_emitter:S,_top:x}}catch(n){ 247 | if(n.message&&n.message.includes("Illegal"))return{language:e,value:J(t), 248 | illegal:!0,relevance:0,_illegalBy:{message:n.message,index:T, 249 | context:t.slice(T-100,T+100),mode:n.mode,resultSoFar:k},_emitter:S};if(s)return{ 250 | language:e,value:J(t),illegal:!1,relevance:0,errorRaised:n,_emitter:S,_top:x} 251 | ;throw n}}function E(e,n){n=n||p.languages||Object.keys(a);const t=(e=>{ 252 | const n={value:J(e),illegal:!1,relevance:0,_top:c,_emitter:new p.__emitter(p)} 253 | ;return n._emitter.addText(e),n})(e),i=n.filter(v).filter(k).map((n=>f(n,e,!1))) 254 | ;i.unshift(t);const r=i.sort(((e,n)=>{ 255 | if(e.relevance!==n.relevance)return n.relevance-e.relevance 256 | ;if(e.language&&n.language){if(v(e.language).supersetOf===n.language)return 1 257 | ;if(v(n.language).supersetOf===e.language)return-1}return 0})),[s,o]=r,l=s 258 | ;return l.secondBest=o,l}function y(e){let n=null;const t=(e=>{ 259 | let n=e.className+" ";n+=e.parentNode?e.parentNode.className:"" 260 | ;const t=p.languageDetectRe.exec(n);if(t){const n=v(t[1]) 261 | ;return n||(H(o.replace("{}",t[1])), 262 | H("Falling back to no-highlight mode for this block.",e)),n?t[1]:"no-highlight"} 263 | return n.split(/\s+/).find((e=>_(e)||v(e)))})(e);if(_(t))return 264 | ;if(x("before:highlightElement",{el:e,language:t 265 | }),e.dataset.highlighted)return void console.log("Element previously highlighted. To highlight again, first unset `dataset.highlighted`.",e) 266 | ;if(e.children.length>0&&(p.ignoreUnescapedHTML||(console.warn("One of your code blocks includes unescaped HTML. This is a potentially serious security risk."), 267 | console.warn("https://github.com/highlightjs/highlight.js/wiki/security"), 268 | console.warn("The element with unescaped HTML:"), 269 | console.warn(e)),p.throwUnescapedHTML))throw new V("One of your code blocks includes unescaped HTML.",e.innerHTML) 270 | ;n=e;const a=n.textContent,r=t?h(a,{language:t,ignoreIllegals:!0}):E(a) 271 | ;e.innerHTML=r.value,e.dataset.highlighted="yes",((e,n,t)=>{const a=n&&i[n]||t 272 | ;e.classList.add("hljs"),e.classList.add("language-"+a) 273 | })(e,t,r.language),e.result={language:r.language,re:r.relevance, 274 | relevance:r.relevance},r.secondBest&&(e.secondBest={ 275 | language:r.secondBest.language,relevance:r.secondBest.relevance 276 | }),x("after:highlightElement",{el:e,result:r,text:a})}let N=!1;function w(){ 277 | "loading"!==document.readyState?document.querySelectorAll(p.cssSelector).forEach(y):N=!0 278 | }function v(e){return e=(e||"").toLowerCase(),a[e]||a[i[e]]} 279 | function O(e,{languageName:n}){"string"==typeof e&&(e=[e]),e.forEach((e=>{ 280 | i[e.toLowerCase()]=n}))}function k(e){const n=v(e) 281 | ;return n&&!n.disableAutodetect}function x(e,n){const t=e;r.forEach((e=>{ 282 | e[t]&&e[t](n)}))} 283 | "undefined"!=typeof window&&window.addEventListener&&window.addEventListener("DOMContentLoaded",(()=>{ 284 | N&&w()}),!1),Object.assign(t,{highlight:h,highlightAuto:E,highlightAll:w, 285 | highlightElement:y, 286 | highlightBlock:e=>(q("10.7.0","highlightBlock will be removed entirely in v12.0"), 287 | q("10.7.0","Please use highlightElement now."),y(e)),configure:e=>{p=Y(p,e)}, 288 | initHighlighting:()=>{ 289 | w(),q("10.6.0","initHighlighting() deprecated. Use highlightAll() now.")}, 290 | initHighlightingOnLoad:()=>{ 291 | w(),q("10.6.0","initHighlightingOnLoad() deprecated. Use highlightAll() now.") 292 | },registerLanguage:(e,n)=>{let i=null;try{i=n(t)}catch(n){ 293 | if(K("Language definition for '{}' could not be registered.".replace("{}",e)), 294 | !s)throw n;K(n),i=c} 295 | i.name||(i.name=e),a[e]=i,i.rawDefinition=n.bind(null,t),i.aliases&&O(i.aliases,{ 296 | languageName:e})},unregisterLanguage:e=>{delete a[e] 297 | ;for(const n of Object.keys(i))i[n]===e&&delete i[n]}, 298 | listLanguages:()=>Object.keys(a),getLanguage:v,registerAliases:O, 299 | autoDetection:k,inherit:Y,addPlugin:e=>{(e=>{ 300 | e["before:highlightBlock"]&&!e["before:highlightElement"]&&(e["before:highlightElement"]=n=>{ 301 | e["before:highlightBlock"](Object.assign({block:n.el},n)) 302 | }),e["after:highlightBlock"]&&!e["after:highlightElement"]&&(e["after:highlightElement"]=n=>{ 303 | e["after:highlightBlock"](Object.assign({block:n.el},n))})})(e),r.push(e)}, 304 | removePlugin:e=>{const n=r.indexOf(e);-1!==n&&r.splice(n,1)}}),t.debugMode=()=>{ 305 | s=!1},t.safeMode=()=>{s=!0},t.versionString="11.9.0",t.regex={concat:b, 306 | lookahead:d,either:m,optional:u,anyNumberOfTimes:g} 307 | ;for(const n in C)"object"==typeof C[n]&&e(C[n]);return Object.assign(t,C),t 308 | },te=ne({});te.newInstance=()=>ne({});var ae=te;const ie=e=>({IMPORTANT:{ 309 | scope:"meta",begin:"!important"},BLOCK_COMMENT:e.C_BLOCK_COMMENT_MODE,HEXCOLOR:{ 310 | scope:"number",begin:/#(([0-9a-fA-F]{3,4})|(([0-9a-fA-F]{2}){3,4}))\b/}, 311 | FUNCTION_DISPATCH:{className:"built_in",begin:/[\w-]+(?=\()/}, 312 | ATTRIBUTE_SELECTOR_MODE:{scope:"selector-attr",begin:/\[/,end:/\]/,illegal:"$", 313 | contains:[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE]},CSS_NUMBER_MODE:{ 314 | scope:"number", 315 | begin:e.NUMBER_RE+"(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?", 316 | relevance:0},CSS_VARIABLE:{className:"attr",begin:/--[A-Za-z_][A-Za-z0-9_-]*/} 317 | }),re=["a","abbr","address","article","aside","audio","b","blockquote","body","button","canvas","caption","cite","code","dd","del","details","dfn","div","dl","dt","em","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6","header","hgroup","html","i","iframe","img","input","ins","kbd","label","legend","li","main","mark","menu","nav","object","ol","p","q","quote","samp","section","span","strong","summary","sup","table","tbody","td","textarea","tfoot","th","thead","time","tr","ul","var","video"],se=["any-hover","any-pointer","aspect-ratio","color","color-gamut","color-index","device-aspect-ratio","device-height","device-width","display-mode","forced-colors","grid","height","hover","inverted-colors","monochrome","orientation","overflow-block","overflow-inline","pointer","prefers-color-scheme","prefers-contrast","prefers-reduced-motion","prefers-reduced-transparency","resolution","scan","scripting","update","width","min-width","max-width","min-height","max-height"],oe=["active","any-link","blank","checked","current","default","defined","dir","disabled","drop","empty","enabled","first","first-child","first-of-type","fullscreen","future","focus","focus-visible","focus-within","has","host","host-context","hover","indeterminate","in-range","invalid","is","lang","last-child","last-of-type","left","link","local-link","not","nth-child","nth-col","nth-last-child","nth-last-col","nth-last-of-type","nth-of-type","only-child","only-of-type","optional","out-of-range","past","placeholder-shown","read-only","read-write","required","right","root","scope","target","target-within","user-invalid","valid","visited","where"],le=["after","backdrop","before","cue","cue-region","first-letter","first-line","grammar-error","marker","part","placeholder","selection","slotted","spelling-error"],ce=["align-content","align-items","align-self","all","animation","animation-delay","animation-direction","animation-duration","animation-fill-mode","animation-iteration-count","animation-name","animation-play-state","animation-timing-function","backface-visibility","background","background-attachment","background-blend-mode","background-clip","background-color","background-image","background-origin","background-position","background-repeat","background-size","block-size","border","border-block","border-block-color","border-block-end","border-block-end-color","border-block-end-style","border-block-end-width","border-block-start","border-block-start-color","border-block-start-style","border-block-start-width","border-block-style","border-block-width","border-bottom","border-bottom-color","border-bottom-left-radius","border-bottom-right-radius","border-bottom-style","border-bottom-width","border-collapse","border-color","border-image","border-image-outset","border-image-repeat","border-image-slice","border-image-source","border-image-width","border-inline","border-inline-color","border-inline-end","border-inline-end-color","border-inline-end-style","border-inline-end-width","border-inline-start","border-inline-start-color","border-inline-start-style","border-inline-start-width","border-inline-style","border-inline-width","border-left","border-left-color","border-left-style","border-left-width","border-radius","border-right","border-right-color","border-right-style","border-right-width","border-spacing","border-style","border-top","border-top-color","border-top-left-radius","border-top-right-radius","border-top-style","border-top-width","border-width","bottom","box-decoration-break","box-shadow","box-sizing","break-after","break-before","break-inside","caption-side","caret-color","clear","clip","clip-path","clip-rule","color","column-count","column-fill","column-gap","column-rule","column-rule-color","column-rule-style","column-rule-width","column-span","column-width","columns","contain","content","content-visibility","counter-increment","counter-reset","cue","cue-after","cue-before","cursor","direction","display","empty-cells","filter","flex","flex-basis","flex-direction","flex-flow","flex-grow","flex-shrink","flex-wrap","float","flow","font","font-display","font-family","font-feature-settings","font-kerning","font-language-override","font-size","font-size-adjust","font-smoothing","font-stretch","font-style","font-synthesis","font-variant","font-variant-caps","font-variant-east-asian","font-variant-ligatures","font-variant-numeric","font-variant-position","font-variation-settings","font-weight","gap","glyph-orientation-vertical","grid","grid-area","grid-auto-columns","grid-auto-flow","grid-auto-rows","grid-column","grid-column-end","grid-column-start","grid-gap","grid-row","grid-row-end","grid-row-start","grid-template","grid-template-areas","grid-template-columns","grid-template-rows","hanging-punctuation","height","hyphens","icon","image-orientation","image-rendering","image-resolution","ime-mode","inline-size","isolation","justify-content","left","letter-spacing","line-break","line-height","list-style","list-style-image","list-style-position","list-style-type","margin","margin-block","margin-block-end","margin-block-start","margin-bottom","margin-inline","margin-inline-end","margin-inline-start","margin-left","margin-right","margin-top","marks","mask","mask-border","mask-border-mode","mask-border-outset","mask-border-repeat","mask-border-slice","mask-border-source","mask-border-width","mask-clip","mask-composite","mask-image","mask-mode","mask-origin","mask-position","mask-repeat","mask-size","mask-type","max-block-size","max-height","max-inline-size","max-width","min-block-size","min-height","min-inline-size","min-width","mix-blend-mode","nav-down","nav-index","nav-left","nav-right","nav-up","none","normal","object-fit","object-position","opacity","order","orphans","outline","outline-color","outline-offset","outline-style","outline-width","overflow","overflow-wrap","overflow-x","overflow-y","padding","padding-block","padding-block-end","padding-block-start","padding-bottom","padding-inline","padding-inline-end","padding-inline-start","padding-left","padding-right","padding-top","page-break-after","page-break-before","page-break-inside","pause","pause-after","pause-before","perspective","perspective-origin","pointer-events","position","quotes","resize","rest","rest-after","rest-before","right","row-gap","scroll-margin","scroll-margin-block","scroll-margin-block-end","scroll-margin-block-start","scroll-margin-bottom","scroll-margin-inline","scroll-margin-inline-end","scroll-margin-inline-start","scroll-margin-left","scroll-margin-right","scroll-margin-top","scroll-padding","scroll-padding-block","scroll-padding-block-end","scroll-padding-block-start","scroll-padding-bottom","scroll-padding-inline","scroll-padding-inline-end","scroll-padding-inline-start","scroll-padding-left","scroll-padding-right","scroll-padding-top","scroll-snap-align","scroll-snap-stop","scroll-snap-type","scrollbar-color","scrollbar-gutter","scrollbar-width","shape-image-threshold","shape-margin","shape-outside","speak","speak-as","src","tab-size","table-layout","text-align","text-align-all","text-align-last","text-combine-upright","text-decoration","text-decoration-color","text-decoration-line","text-decoration-style","text-emphasis","text-emphasis-color","text-emphasis-position","text-emphasis-style","text-indent","text-justify","text-orientation","text-overflow","text-rendering","text-shadow","text-transform","text-underline-position","top","transform","transform-box","transform-origin","transform-style","transition","transition-delay","transition-duration","transition-property","transition-timing-function","unicode-bidi","vertical-align","visibility","voice-balance","voice-duration","voice-family","voice-pitch","voice-range","voice-rate","voice-stress","voice-volume","white-space","widows","width","will-change","word-break","word-spacing","word-wrap","writing-mode","z-index"].reverse(),de=oe.concat(le) 318 | ;var ge="[0-9](_*[0-9])*",ue=`\\.(${ge})`,be="[0-9a-fA-F](_*[0-9a-fA-F])*",me={ 319 | className:"number",variants:[{ 320 | begin:`(\\b(${ge})((${ue})|\\.)?|(${ue}))[eE][+-]?(${ge})[fFdD]?\\b`},{ 321 | begin:`\\b(${ge})((${ue})[fFdD]?\\b|\\.([fFdD]\\b)?)`},{ 322 | begin:`(${ue})[fFdD]?\\b`},{begin:`\\b(${ge})[fFdD]\\b`},{ 323 | begin:`\\b0[xX]((${be})\\.?|(${be})?\\.(${be}))[pP][+-]?(${ge})[fFdD]?\\b`},{ 324 | begin:"\\b(0|[1-9](_*[0-9])*)[lL]?\\b"},{begin:`\\b0[xX](${be})[lL]?\\b`},{ 325 | begin:"\\b0(_*[0-7])*[lL]?\\b"},{begin:"\\b0[bB][01](_*[01])*[lL]?\\b"}], 326 | relevance:0};function pe(e,n,t){return-1===t?"":e.replace(n,(a=>pe(e,n,t-1)))} 327 | const _e="[A-Za-z$_][0-9A-Za-z$_]*",he=["as","in","of","if","for","while","finally","var","new","function","do","return","void","else","break","catch","instanceof","with","throw","case","default","try","switch","continue","typeof","delete","let","yield","const","class","debugger","async","await","static","import","from","export","extends"],fe=["true","false","null","undefined","NaN","Infinity"],Ee=["Object","Function","Boolean","Symbol","Math","Date","Number","BigInt","String","RegExp","Array","Float32Array","Float64Array","Int8Array","Uint8Array","Uint8ClampedArray","Int16Array","Int32Array","Uint16Array","Uint32Array","BigInt64Array","BigUint64Array","Set","Map","WeakSet","WeakMap","ArrayBuffer","SharedArrayBuffer","Atomics","DataView","JSON","Promise","Generator","GeneratorFunction","AsyncFunction","Reflect","Proxy","Intl","WebAssembly"],ye=["Error","EvalError","InternalError","RangeError","ReferenceError","SyntaxError","TypeError","URIError"],Ne=["setInterval","setTimeout","clearInterval","clearTimeout","require","exports","eval","isFinite","isNaN","parseFloat","parseInt","decodeURI","decodeURIComponent","encodeURI","encodeURIComponent","escape","unescape"],we=["arguments","this","super","console","window","document","localStorage","sessionStorage","module","global"],ve=[].concat(Ne,Ee,ye) 328 | ;function Oe(e){const n=e.regex,t=_e,a={begin:/<[A-Za-z0-9\\._:-]+/, 329 | end:/\/[A-Za-z0-9\\._:-]+>|\/>/,isTrulyOpeningTag:(e,n)=>{ 330 | const t=e[0].length+e.index,a=e.input[t] 331 | ;if("<"===a||","===a)return void n.ignoreMatch();let i 332 | ;">"===a&&(((e,{after:n})=>{const t="",M={ 378 | match:[/const|var|let/,/\s+/,t,/\s*/,/=\s*/,/(async\s*)?/,n.lookahead(x)], 379 | keywords:"async",className:{1:"keyword",3:"title.function"},contains:[f]} 380 | ;return{name:"JavaScript",aliases:["js","jsx","mjs","cjs"],keywords:i,exports:{ 381 | PARAMS_CONTAINS:h,CLASS_REFERENCE:y},illegal:/#(?![$_A-z])/, 382 | contains:[e.SHEBANG({label:"shebang",binary:"node",relevance:5}),{ 383 | label:"use_strict",className:"meta",relevance:10, 384 | begin:/^\s*['"]use (strict|asm)['"]/ 385 | },e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,d,g,u,b,m,{match:/\$\d+/},l,y,{ 386 | className:"attr",begin:t+n.lookahead(":"),relevance:0},M,{ 387 | begin:"("+e.RE_STARTERS_RE+"|\\b(case|return|throw)\\b)\\s*", 388 | keywords:"return throw case",relevance:0,contains:[m,e.REGEXP_MODE,{ 389 | className:"function",begin:x,returnBegin:!0,end:"\\s*=>",contains:[{ 390 | className:"params",variants:[{begin:e.UNDERSCORE_IDENT_RE,relevance:0},{ 391 | className:null,begin:/\(\s*\)/,skip:!0},{begin:/\(/,end:/\)/,excludeBegin:!0, 392 | excludeEnd:!0,keywords:i,contains:h}]}]},{begin:/,/,relevance:0},{match:/\s+/, 393 | relevance:0},{variants:[{begin:"<>",end:""},{ 394 | match:/<[A-Za-z0-9\\._:-]+\s*\/>/},{begin:a.begin, 395 | "on:begin":a.isTrulyOpeningTag,end:a.end}],subLanguage:"xml",contains:[{ 396 | begin:a.begin,end:a.end,skip:!0,contains:["self"]}]}]},N,{ 397 | beginKeywords:"while if switch catch for"},{ 398 | begin:"\\b(?!function)"+e.UNDERSCORE_IDENT_RE+"\\([^()]*(\\([^()]*(\\([^()]*\\)[^()]*)*\\)[^()]*)*\\)\\s*\\{", 399 | returnBegin:!0,label:"func.def",contains:[f,e.inherit(e.TITLE_MODE,{begin:t, 400 | className:"title.function"})]},{match:/\.\.\./,relevance:0},O,{match:"\\$"+t, 401 | relevance:0},{match:[/\bconstructor(?=\s*\()/],className:{1:"title.function"}, 402 | contains:[f]},w,{relevance:0,match:/\b[A-Z][A-Z_0-9]+\b/, 403 | className:"variable.constant"},E,k,{match:/\$[(.]/}]}} 404 | const ke=e=>b(/\b/,e,/\w$/.test(e)?/\b/:/\B/),xe=["Protocol","Type"].map(ke),Me=["init","self"].map(ke),Se=["Any","Self"],Ae=["actor","any","associatedtype","async","await",/as\?/,/as!/,"as","borrowing","break","case","catch","class","consume","consuming","continue","convenience","copy","default","defer","deinit","didSet","distributed","do","dynamic","each","else","enum","extension","fallthrough",/fileprivate\(set\)/,"fileprivate","final","for","func","get","guard","if","import","indirect","infix",/init\?/,/init!/,"inout",/internal\(set\)/,"internal","in","is","isolated","nonisolated","lazy","let","macro","mutating","nonmutating",/open\(set\)/,"open","operator","optional","override","postfix","precedencegroup","prefix",/private\(set\)/,"private","protocol",/public\(set\)/,"public","repeat","required","rethrows","return","set","some","static","struct","subscript","super","switch","throws","throw",/try\?/,/try!/,"try","typealias",/unowned\(safe\)/,/unowned\(unsafe\)/,"unowned","var","weak","where","while","willSet"],Ce=["false","nil","true"],Te=["assignment","associativity","higherThan","left","lowerThan","none","right"],Re=["#colorLiteral","#column","#dsohandle","#else","#elseif","#endif","#error","#file","#fileID","#fileLiteral","#filePath","#function","#if","#imageLiteral","#keyPath","#line","#selector","#sourceLocation","#warning"],De=["abs","all","any","assert","assertionFailure","debugPrint","dump","fatalError","getVaList","isKnownUniquelyReferenced","max","min","numericCast","pointwiseMax","pointwiseMin","precondition","preconditionFailure","print","readLine","repeatElement","sequence","stride","swap","swift_unboxFromSwiftValueWithType","transcode","type","unsafeBitCast","unsafeDowncast","withExtendedLifetime","withUnsafeMutablePointer","withUnsafePointer","withVaList","withoutActuallyEscaping","zip"],Ie=m(/[/=\-+!*%<>&|^~?]/,/[\u00A1-\u00A7]/,/[\u00A9\u00AB]/,/[\u00AC\u00AE]/,/[\u00B0\u00B1]/,/[\u00B6\u00BB\u00BF\u00D7\u00F7]/,/[\u2016-\u2017]/,/[\u2020-\u2027]/,/[\u2030-\u203E]/,/[\u2041-\u2053]/,/[\u2055-\u205E]/,/[\u2190-\u23FF]/,/[\u2500-\u2775]/,/[\u2794-\u2BFF]/,/[\u2E00-\u2E7F]/,/[\u3001-\u3003]/,/[\u3008-\u3020]/,/[\u3030]/),Le=m(Ie,/[\u0300-\u036F]/,/[\u1DC0-\u1DFF]/,/[\u20D0-\u20FF]/,/[\uFE00-\uFE0F]/,/[\uFE20-\uFE2F]/),Be=b(Ie,Le,"*"),$e=m(/[a-zA-Z_]/,/[\u00A8\u00AA\u00AD\u00AF\u00B2-\u00B5\u00B7-\u00BA]/,/[\u00BC-\u00BE\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u00FF]/,/[\u0100-\u02FF\u0370-\u167F\u1681-\u180D\u180F-\u1DBF]/,/[\u1E00-\u1FFF]/,/[\u200B-\u200D\u202A-\u202E\u203F-\u2040\u2054\u2060-\u206F]/,/[\u2070-\u20CF\u2100-\u218F\u2460-\u24FF\u2776-\u2793]/,/[\u2C00-\u2DFF\u2E80-\u2FFF]/,/[\u3004-\u3007\u3021-\u302F\u3031-\u303F\u3040-\uD7FF]/,/[\uF900-\uFD3D\uFD40-\uFDCF\uFDF0-\uFE1F\uFE30-\uFE44]/,/[\uFE47-\uFEFE\uFF00-\uFFFD]/),ze=m($e,/\d/,/[\u0300-\u036F\u1DC0-\u1DFF\u20D0-\u20FF\uFE20-\uFE2F]/),Fe=b($e,ze,"*"),Ue=b(/[A-Z]/,ze,"*"),je=["attached","autoclosure",b(/convention\(/,m("swift","block","c"),/\)/),"discardableResult","dynamicCallable","dynamicMemberLookup","escaping","freestanding","frozen","GKInspectable","IBAction","IBDesignable","IBInspectable","IBOutlet","IBSegueAction","inlinable","main","nonobjc","NSApplicationMain","NSCopying","NSManaged",b(/objc\(/,Fe,/\)/),"objc","objcMembers","propertyWrapper","requires_stored_property_inits","resultBuilder","Sendable","testable","UIApplicationMain","unchecked","unknown","usableFromInline","warn_unqualified_access"],Pe=["iOS","iOSApplicationExtension","macOS","macOSApplicationExtension","macCatalyst","macCatalystApplicationExtension","watchOS","watchOSApplicationExtension","tvOS","tvOSApplicationExtension","swift"] 405 | ;var Ke=Object.freeze({__proto__:null,grmr_bash:e=>{const n=e.regex,t={},a={ 406 | begin:/\$\{/,end:/\}/,contains:["self",{begin:/:-/,contains:[t]}]} 407 | ;Object.assign(t,{className:"variable",variants:[{ 408 | begin:n.concat(/\$[\w\d#@][\w\d_]*/,"(?![\\w\\d])(?![$])")},a]});const i={ 409 | className:"subst",begin:/\$\(/,end:/\)/,contains:[e.BACKSLASH_ESCAPE]},r={ 410 | begin:/<<-?\s*(?=\w+)/,starts:{contains:[e.END_SAME_AS_BEGIN({begin:/(\w+)/, 411 | end:/(\w+)/,className:"string"})]}},s={className:"string",begin:/"/,end:/"/, 412 | contains:[e.BACKSLASH_ESCAPE,t,i]};i.contains.push(s);const o={begin:/\$?\(\(/, 413 | end:/\)\)/,contains:[{begin:/\d+#[0-9a-f]+/,className:"number"},e.NUMBER_MODE,t] 414 | },l=e.SHEBANG({binary:"(fish|bash|zsh|sh|csh|ksh|tcsh|dash|scsh)",relevance:10 415 | }),c={className:"function",begin:/\w[\w\d_]*\s*\(\s*\)\s*\{/,returnBegin:!0, 416 | contains:[e.inherit(e.TITLE_MODE,{begin:/\w[\w\d_]*/})],relevance:0};return{ 417 | name:"Bash",aliases:["sh"],keywords:{$pattern:/\b[a-z][a-z0-9._-]+\b/, 418 | keyword:["if","then","else","elif","fi","for","while","until","in","do","done","case","esac","function","select"], 419 | literal:["true","false"], 420 | built_in:["break","cd","continue","eval","exec","exit","export","getopts","hash","pwd","readonly","return","shift","test","times","trap","umask","unset","alias","bind","builtin","caller","command","declare","echo","enable","help","let","local","logout","mapfile","printf","read","readarray","source","type","typeset","ulimit","unalias","set","shopt","autoload","bg","bindkey","bye","cap","chdir","clone","comparguments","compcall","compctl","compdescribe","compfiles","compgroups","compquote","comptags","comptry","compvalues","dirs","disable","disown","echotc","echoti","emulate","fc","fg","float","functions","getcap","getln","history","integer","jobs","kill","limit","log","noglob","popd","print","pushd","pushln","rehash","sched","setcap","setopt","stat","suspend","ttyctl","unfunction","unhash","unlimit","unsetopt","vared","wait","whence","where","which","zcompile","zformat","zftp","zle","zmodload","zparseopts","zprof","zpty","zregexparse","zsocket","zstyle","ztcp","chcon","chgrp","chown","chmod","cp","dd","df","dir","dircolors","ln","ls","mkdir","mkfifo","mknod","mktemp","mv","realpath","rm","rmdir","shred","sync","touch","truncate","vdir","b2sum","base32","base64","cat","cksum","comm","csplit","cut","expand","fmt","fold","head","join","md5sum","nl","numfmt","od","paste","ptx","pr","sha1sum","sha224sum","sha256sum","sha384sum","sha512sum","shuf","sort","split","sum","tac","tail","tr","tsort","unexpand","uniq","wc","arch","basename","chroot","date","dirname","du","echo","env","expr","factor","groups","hostid","id","link","logname","nice","nohup","nproc","pathchk","pinky","printenv","printf","pwd","readlink","runcon","seq","sleep","stat","stdbuf","stty","tee","test","timeout","tty","uname","unlink","uptime","users","who","whoami","yes"] 421 | },contains:[l,e.SHEBANG(),c,o,e.HASH_COMMENT_MODE,r,{match:/(\/[a-z._-]+)+/},s,{ 422 | match:/\\"/},{className:"string",begin:/'/,end:/'/},{match:/\\'/},t]}}, 423 | grmr_c:e=>{const n=e.regex,t=e.COMMENT("//","$",{contains:[{begin:/\\\n/}] 424 | }),a="decltype\\(auto\\)",i="[a-zA-Z_]\\w*::",r="("+a+"|"+n.optional(i)+"[a-zA-Z_]\\w*"+n.optional("<[^<>]+>")+")",s={ 425 | className:"type",variants:[{begin:"\\b[a-z\\d_]*_t\\b"},{ 426 | match:/\batomic_[a-z]{3,6}\b/}]},o={className:"string",variants:[{ 427 | begin:'(u8?|U|L)?"',end:'"',illegal:"\\n",contains:[e.BACKSLASH_ESCAPE]},{ 428 | begin:"(u8?|U|L)?'(\\\\(x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4,8}|[0-7]{3}|\\S)|.)", 429 | end:"'",illegal:"."},e.END_SAME_AS_BEGIN({ 430 | begin:/(?:u8?|U|L)?R"([^()\\ ]{0,16})\(/,end:/\)([^()\\ ]{0,16})"/})]},l={ 431 | className:"number",variants:[{begin:"\\b(0b[01']+)"},{ 432 | begin:"(-?)\\b([\\d']+(\\.[\\d']*)?|\\.[\\d']+)((ll|LL|l|L)(u|U)?|(u|U)(ll|LL|l|L)?|f|F|b|B)" 433 | },{ 434 | begin:"(-?)(\\b0[xX][a-fA-F0-9']+|(\\b[\\d']+(\\.[\\d']*)?|\\.[\\d']+)([eE][-+]?[\\d']+)?)" 435 | }],relevance:0},c={className:"meta",begin:/#\s*[a-z]+\b/,end:/$/,keywords:{ 436 | keyword:"if else elif endif define undef warning error line pragma _Pragma ifdef ifndef include" 437 | },contains:[{begin:/\\\n/,relevance:0},e.inherit(o,{className:"string"}),{ 438 | className:"string",begin:/<.*?>/},t,e.C_BLOCK_COMMENT_MODE]},d={ 439 | className:"title",begin:n.optional(i)+e.IDENT_RE,relevance:0 440 | },g=n.optional(i)+e.IDENT_RE+"\\s*\\(",u={ 441 | keyword:["asm","auto","break","case","continue","default","do","else","enum","extern","for","fortran","goto","if","inline","register","restrict","return","sizeof","struct","switch","typedef","union","volatile","while","_Alignas","_Alignof","_Atomic","_Generic","_Noreturn","_Static_assert","_Thread_local","alignas","alignof","noreturn","static_assert","thread_local","_Pragma"], 442 | type:["float","double","signed","unsigned","int","short","long","char","void","_Bool","_Complex","_Imaginary","_Decimal32","_Decimal64","_Decimal128","const","static","complex","bool","imaginary"], 443 | literal:"true false NULL", 444 | built_in:"std string wstring cin cout cerr clog stdin stdout stderr stringstream istringstream ostringstream auto_ptr deque list queue stack vector map set pair bitset multiset multimap unordered_set unordered_map unordered_multiset unordered_multimap priority_queue make_pair array shared_ptr abort terminate abs acos asin atan2 atan calloc ceil cosh cos exit exp fabs floor fmod fprintf fputs free frexp fscanf future isalnum isalpha iscntrl isdigit isgraph islower isprint ispunct isspace isupper isxdigit tolower toupper labs ldexp log10 log malloc realloc memchr memcmp memcpy memset modf pow printf putchar puts scanf sinh sin snprintf sprintf sqrt sscanf strcat strchr strcmp strcpy strcspn strlen strncat strncmp strncpy strpbrk strrchr strspn strstr tanh tan vfprintf vprintf vsprintf endl initializer_list unique_ptr" 445 | },b=[c,s,t,e.C_BLOCK_COMMENT_MODE,l,o],m={variants:[{begin:/=/,end:/;/},{ 446 | begin:/\(/,end:/\)/},{beginKeywords:"new throw return else",end:/;/}], 447 | keywords:u,contains:b.concat([{begin:/\(/,end:/\)/,keywords:u, 448 | contains:b.concat(["self"]),relevance:0}]),relevance:0},p={ 449 | begin:"("+r+"[\\*&\\s]+)+"+g,returnBegin:!0,end:/[{;=]/,excludeEnd:!0, 450 | keywords:u,illegal:/[^\w\s\*&:<>.]/,contains:[{begin:a,keywords:u,relevance:0},{ 451 | begin:g,returnBegin:!0,contains:[e.inherit(d,{className:"title.function"})], 452 | relevance:0},{relevance:0,match:/,/},{className:"params",begin:/\(/,end:/\)/, 453 | keywords:u,relevance:0,contains:[t,e.C_BLOCK_COMMENT_MODE,o,l,s,{begin:/\(/, 454 | end:/\)/,keywords:u,relevance:0,contains:["self",t,e.C_BLOCK_COMMENT_MODE,o,l,s] 455 | }]},s,t,e.C_BLOCK_COMMENT_MODE,c]};return{name:"C",aliases:["h"],keywords:u, 456 | disableAutodetect:!0,illegal:"=]/,contains:[{ 459 | beginKeywords:"final class struct"},e.TITLE_MODE]}]),exports:{preprocessor:c, 460 | strings:o,keywords:u}}},grmr_cpp:e=>{const n=e.regex,t=e.COMMENT("//","$",{ 461 | contains:[{begin:/\\\n/}] 462 | }),a="decltype\\(auto\\)",i="[a-zA-Z_]\\w*::",r="(?!struct)("+a+"|"+n.optional(i)+"[a-zA-Z_]\\w*"+n.optional("<[^<>]+>")+")",s={ 463 | className:"type",begin:"\\b[a-z\\d_]*_t\\b"},o={className:"string",variants:[{ 464 | begin:'(u8?|U|L)?"',end:'"',illegal:"\\n",contains:[e.BACKSLASH_ESCAPE]},{ 465 | begin:"(u8?|U|L)?'(\\\\(x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4,8}|[0-7]{3}|\\S)|.)", 466 | end:"'",illegal:"."},e.END_SAME_AS_BEGIN({ 467 | begin:/(?:u8?|U|L)?R"([^()\\ ]{0,16})\(/,end:/\)([^()\\ ]{0,16})"/})]},l={ 468 | className:"number",variants:[{begin:"\\b(0b[01']+)"},{ 469 | begin:"(-?)\\b([\\d']+(\\.[\\d']*)?|\\.[\\d']+)((ll|LL|l|L)(u|U)?|(u|U)(ll|LL|l|L)?|f|F|b|B)" 470 | },{ 471 | begin:"(-?)(\\b0[xX][a-fA-F0-9']+|(\\b[\\d']+(\\.[\\d']*)?|\\.[\\d']+)([eE][-+]?[\\d']+)?)" 472 | }],relevance:0},c={className:"meta",begin:/#\s*[a-z]+\b/,end:/$/,keywords:{ 473 | keyword:"if else elif endif define undef warning error line pragma _Pragma ifdef ifndef include" 474 | },contains:[{begin:/\\\n/,relevance:0},e.inherit(o,{className:"string"}),{ 475 | className:"string",begin:/<.*?>/},t,e.C_BLOCK_COMMENT_MODE]},d={ 476 | className:"title",begin:n.optional(i)+e.IDENT_RE,relevance:0 477 | },g=n.optional(i)+e.IDENT_RE+"\\s*\\(",u={ 478 | type:["bool","char","char16_t","char32_t","char8_t","double","float","int","long","short","void","wchar_t","unsigned","signed","const","static"], 479 | keyword:["alignas","alignof","and","and_eq","asm","atomic_cancel","atomic_commit","atomic_noexcept","auto","bitand","bitor","break","case","catch","class","co_await","co_return","co_yield","compl","concept","const_cast|10","consteval","constexpr","constinit","continue","decltype","default","delete","do","dynamic_cast|10","else","enum","explicit","export","extern","false","final","for","friend","goto","if","import","inline","module","mutable","namespace","new","noexcept","not","not_eq","nullptr","operator","or","or_eq","override","private","protected","public","reflexpr","register","reinterpret_cast|10","requires","return","sizeof","static_assert","static_cast|10","struct","switch","synchronized","template","this","thread_local","throw","transaction_safe","transaction_safe_dynamic","true","try","typedef","typeid","typename","union","using","virtual","volatile","while","xor","xor_eq"], 480 | literal:["NULL","false","nullopt","nullptr","true"],built_in:["_Pragma"], 481 | _type_hints:["any","auto_ptr","barrier","binary_semaphore","bitset","complex","condition_variable","condition_variable_any","counting_semaphore","deque","false_type","future","imaginary","initializer_list","istringstream","jthread","latch","lock_guard","multimap","multiset","mutex","optional","ostringstream","packaged_task","pair","promise","priority_queue","queue","recursive_mutex","recursive_timed_mutex","scoped_lock","set","shared_future","shared_lock","shared_mutex","shared_timed_mutex","shared_ptr","stack","string_view","stringstream","timed_mutex","thread","true_type","tuple","unique_lock","unique_ptr","unordered_map","unordered_multimap","unordered_multiset","unordered_set","variant","vector","weak_ptr","wstring","wstring_view"] 482 | },b={className:"function.dispatch",relevance:0,keywords:{ 483 | _hint:["abort","abs","acos","apply","as_const","asin","atan","atan2","calloc","ceil","cerr","cin","clog","cos","cosh","cout","declval","endl","exchange","exit","exp","fabs","floor","fmod","forward","fprintf","fputs","free","frexp","fscanf","future","invoke","isalnum","isalpha","iscntrl","isdigit","isgraph","islower","isprint","ispunct","isspace","isupper","isxdigit","labs","launder","ldexp","log","log10","make_pair","make_shared","make_shared_for_overwrite","make_tuple","make_unique","malloc","memchr","memcmp","memcpy","memset","modf","move","pow","printf","putchar","puts","realloc","scanf","sin","sinh","snprintf","sprintf","sqrt","sscanf","std","stderr","stdin","stdout","strcat","strchr","strcmp","strcpy","strcspn","strlen","strncat","strncmp","strncpy","strpbrk","strrchr","strspn","strstr","swap","tan","tanh","terminate","to_underlying","tolower","toupper","vfprintf","visit","vprintf","vsprintf"] 484 | }, 485 | begin:n.concat(/\b/,/(?!decltype)/,/(?!if)/,/(?!for)/,/(?!switch)/,/(?!while)/,e.IDENT_RE,n.lookahead(/(<[^<>]+>|)\s*\(/)) 486 | },m=[b,c,s,t,e.C_BLOCK_COMMENT_MODE,l,o],p={variants:[{begin:/=/,end:/;/},{ 487 | begin:/\(/,end:/\)/},{beginKeywords:"new throw return else",end:/;/}], 488 | keywords:u,contains:m.concat([{begin:/\(/,end:/\)/,keywords:u, 489 | contains:m.concat(["self"]),relevance:0}]),relevance:0},_={className:"function", 490 | begin:"("+r+"[\\*&\\s]+)+"+g,returnBegin:!0,end:/[{;=]/,excludeEnd:!0, 491 | keywords:u,illegal:/[^\w\s\*&:<>.]/,contains:[{begin:a,keywords:u,relevance:0},{ 492 | begin:g,returnBegin:!0,contains:[d],relevance:0},{begin:/::/,relevance:0},{ 493 | begin:/:/,endsWithParent:!0,contains:[o,l]},{relevance:0,match:/,/},{ 494 | className:"params",begin:/\(/,end:/\)/,keywords:u,relevance:0, 495 | contains:[t,e.C_BLOCK_COMMENT_MODE,o,l,s,{begin:/\(/,end:/\)/,keywords:u, 496 | relevance:0,contains:["self",t,e.C_BLOCK_COMMENT_MODE,o,l,s]}] 497 | },s,t,e.C_BLOCK_COMMENT_MODE,c]};return{name:"C++", 498 | aliases:["cc","c++","h++","hpp","hh","hxx","cxx"],keywords:u,illegal:"",keywords:u,contains:["self",s]},{begin:e.IDENT_RE+"::",keywords:u},{ 503 | match:[/\b(?:enum(?:\s+(?:class|struct))?|class|struct|union)/,/\s+/,/\w+/], 504 | className:{1:"keyword",3:"title.class"}}])}},grmr_csharp:e=>{const n={ 505 | keyword:["abstract","as","base","break","case","catch","class","const","continue","do","else","event","explicit","extern","finally","fixed","for","foreach","goto","if","implicit","in","interface","internal","is","lock","namespace","new","operator","out","override","params","private","protected","public","readonly","record","ref","return","scoped","sealed","sizeof","stackalloc","static","struct","switch","this","throw","try","typeof","unchecked","unsafe","using","virtual","void","volatile","while"].concat(["add","alias","and","ascending","async","await","by","descending","equals","from","get","global","group","init","into","join","let","nameof","not","notnull","on","or","orderby","partial","remove","select","set","unmanaged","value|0","var","when","where","with","yield"]), 506 | built_in:["bool","byte","char","decimal","delegate","double","dynamic","enum","float","int","long","nint","nuint","object","sbyte","short","string","ulong","uint","ushort"], 507 | literal:["default","false","null","true"]},t=e.inherit(e.TITLE_MODE,{ 508 | begin:"[a-zA-Z](\\.?\\w)*"}),a={className:"number",variants:[{ 509 | begin:"\\b(0b[01']+)"},{ 510 | begin:"(-?)\\b([\\d']+(\\.[\\d']*)?|\\.[\\d']+)(u|U|l|L|ul|UL|f|F|b|B)"},{ 511 | begin:"(-?)(\\b0[xX][a-fA-F0-9']+|(\\b[\\d']+(\\.[\\d']*)?|\\.[\\d']+)([eE][-+]?[\\d']+)?)" 512 | }],relevance:0},i={className:"string",begin:'@"',end:'"',contains:[{begin:'""'}] 513 | },r=e.inherit(i,{illegal:/\n/}),s={className:"subst",begin:/\{/,end:/\}/, 514 | keywords:n},o=e.inherit(s,{illegal:/\n/}),l={className:"string",begin:/\$"/, 515 | end:'"',illegal:/\n/,contains:[{begin:/\{\{/},{begin:/\}\}/ 516 | },e.BACKSLASH_ESCAPE,o]},c={className:"string",begin:/\$@"/,end:'"',contains:[{ 517 | begin:/\{\{/},{begin:/\}\}/},{begin:'""'},s]},d=e.inherit(c,{illegal:/\n/, 518 | contains:[{begin:/\{\{/},{begin:/\}\}/},{begin:'""'},o]}) 519 | ;s.contains=[c,l,i,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,a,e.C_BLOCK_COMMENT_MODE], 520 | o.contains=[d,l,r,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,a,e.inherit(e.C_BLOCK_COMMENT_MODE,{ 521 | illegal:/\n/})];const g={variants:[c,l,i,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE] 522 | },u={begin:"<",end:">",contains:[{beginKeywords:"in out"},t] 523 | },b=e.IDENT_RE+"(<"+e.IDENT_RE+"(\\s*,\\s*"+e.IDENT_RE+")*>)?(\\[\\])?",m={ 524 | begin:"@"+e.IDENT_RE,relevance:0};return{name:"C#",aliases:["cs","c#"], 525 | keywords:n,illegal:/::/,contains:[e.COMMENT("///","$",{returnBegin:!0, 526 | contains:[{className:"doctag",variants:[{begin:"///",relevance:0},{ 527 | begin:"\x3c!--|--\x3e"},{begin:""}]}] 528 | }),e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,{className:"meta",begin:"#", 529 | end:"$",keywords:{ 530 | keyword:"if else elif endif define undef warning error line region endregion pragma checksum" 531 | }},g,a,{beginKeywords:"class interface",relevance:0,end:/[{;=]/, 532 | illegal:/[^\s:,]/,contains:[{beginKeywords:"where class" 533 | },t,u,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},{beginKeywords:"namespace", 534 | relevance:0,end:/[{;=]/,illegal:/[^\s:]/, 535 | contains:[t,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},{ 536 | beginKeywords:"record",relevance:0,end:/[{;=]/,illegal:/[^\s:]/, 537 | contains:[t,u,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},{className:"meta", 538 | begin:"^\\s*\\[(?=[\\w])",excludeBegin:!0,end:"\\]",excludeEnd:!0,contains:[{ 539 | className:"string",begin:/"/,end:/"/}]},{ 540 | beginKeywords:"new return throw await else",relevance:0},{className:"function", 541 | begin:"("+b+"\\s+)+"+e.IDENT_RE+"\\s*(<[^=]+>\\s*)?\\(",returnBegin:!0, 542 | end:/\s*[{;=]/,excludeEnd:!0,keywords:n,contains:[{ 543 | beginKeywords:"public private protected static internal protected abstract async extern override unsafe virtual new sealed partial", 544 | relevance:0},{begin:e.IDENT_RE+"\\s*(<[^=]+>\\s*)?\\(",returnBegin:!0, 545 | contains:[e.TITLE_MODE,u],relevance:0},{match:/\(\)/},{className:"params", 546 | begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:n,relevance:0, 547 | contains:[g,a,e.C_BLOCK_COMMENT_MODE] 548 | },e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},m]}},grmr_css:e=>{ 549 | const n=e.regex,t=ie(e),a=[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE];return{ 550 | name:"CSS",case_insensitive:!0,illegal:/[=|'\$]/,keywords:{ 551 | keyframePosition:"from to"},classNameAliases:{keyframePosition:"selector-tag"}, 552 | contains:[t.BLOCK_COMMENT,{begin:/-(webkit|moz|ms|o)-(?=[a-z])/ 553 | },t.CSS_NUMBER_MODE,{className:"selector-id",begin:/#[A-Za-z0-9_-]+/,relevance:0 554 | },{className:"selector-class",begin:"\\.[a-zA-Z-][a-zA-Z0-9_-]*",relevance:0 555 | },t.ATTRIBUTE_SELECTOR_MODE,{className:"selector-pseudo",variants:[{ 556 | begin:":("+oe.join("|")+")"},{begin:":(:)?("+le.join("|")+")"}] 557 | },t.CSS_VARIABLE,{className:"attribute",begin:"\\b("+ce.join("|")+")\\b"},{ 558 | begin:/:/,end:/[;}{]/, 559 | contains:[t.BLOCK_COMMENT,t.HEXCOLOR,t.IMPORTANT,t.CSS_NUMBER_MODE,...a,{ 560 | begin:/(url|data-uri)\(/,end:/\)/,relevance:0,keywords:{built_in:"url data-uri" 561 | },contains:[...a,{className:"string",begin:/[^)]/,endsWithParent:!0, 562 | excludeEnd:!0}]},t.FUNCTION_DISPATCH]},{begin:n.lookahead(/@/),end:"[{;]", 563 | relevance:0,illegal:/:/,contains:[{className:"keyword",begin:/@-?\w[\w]*(-\w+)*/ 564 | },{begin:/\s/,endsWithParent:!0,excludeEnd:!0,relevance:0,keywords:{ 565 | $pattern:/[a-z-]+/,keyword:"and or not only",attribute:se.join(" ")},contains:[{ 566 | begin:/[a-z-]+(?=:)/,className:"attribute"},...a,t.CSS_NUMBER_MODE]}]},{ 567 | className:"selector-tag",begin:"\\b("+re.join("|")+")\\b"}]}},grmr_diff:e=>{ 568 | const n=e.regex;return{name:"Diff",aliases:["patch"],contains:[{ 569 | className:"meta",relevance:10, 570 | match:n.either(/^@@ +-\d+,\d+ +\+\d+,\d+ +@@/,/^\*\*\* +\d+,\d+ +\*\*\*\*$/,/^--- +\d+,\d+ +----$/) 571 | },{className:"comment",variants:[{ 572 | begin:n.either(/Index: /,/^index/,/={3,}/,/^-{3}/,/^\*{3} /,/^\+{3}/,/^diff --git/), 573 | end:/$/},{match:/^\*{15}$/}]},{className:"addition",begin:/^\+/,end:/$/},{ 574 | className:"deletion",begin:/^-/,end:/$/},{className:"addition",begin:/^!/, 575 | end:/$/}]}},grmr_go:e=>{const n={ 576 | keyword:["break","case","chan","const","continue","default","defer","else","fallthrough","for","func","go","goto","if","import","interface","map","package","range","return","select","struct","switch","type","var"], 577 | type:["bool","byte","complex64","complex128","error","float32","float64","int8","int16","int32","int64","string","uint8","uint16","uint32","uint64","int","uint","uintptr","rune"], 578 | literal:["true","false","iota","nil"], 579 | built_in:["append","cap","close","complex","copy","imag","len","make","new","panic","print","println","real","recover","delete"] 580 | };return{name:"Go",aliases:["golang"],keywords:n,illegal:"{const n=e.regex;return{name:"GraphQL",aliases:["gql"], 588 | case_insensitive:!0,disableAutodetect:!1,keywords:{ 589 | keyword:["query","mutation","subscription","type","input","schema","directive","interface","union","scalar","fragment","enum","on"], 590 | literal:["true","false","null"]}, 591 | contains:[e.HASH_COMMENT_MODE,e.QUOTE_STRING_MODE,e.NUMBER_MODE,{ 592 | scope:"punctuation",match:/[.]{3}/,relevance:0},{scope:"punctuation", 593 | begin:/[\!\(\)\:\=\[\]\{\|\}]{1}/,relevance:0},{scope:"variable",begin:/\$/, 594 | end:/\W/,excludeEnd:!0,relevance:0},{scope:"meta",match:/@\w+/,excludeEnd:!0},{ 595 | scope:"symbol",begin:n.concat(/[_A-Za-z][_0-9A-Za-z]*/,n.lookahead(/\s*:/)), 596 | relevance:0}],illegal:[/[;<']/,/BEGIN/]}},grmr_ini:e=>{const n=e.regex,t={ 597 | className:"number",relevance:0,variants:[{begin:/([+-]+)?[\d]+_[\d_]+/},{ 598 | begin:e.NUMBER_RE}]},a=e.COMMENT();a.variants=[{begin:/;/,end:/$/},{begin:/#/, 599 | end:/$/}];const i={className:"variable",variants:[{begin:/\$[\w\d"][\w\d_]*/},{ 600 | begin:/\$\{(.*?)\}/}]},r={className:"literal", 601 | begin:/\bon|off|true|false|yes|no\b/},s={className:"string", 602 | contains:[e.BACKSLASH_ESCAPE],variants:[{begin:"'''",end:"'''",relevance:10},{ 603 | begin:'"""',end:'"""',relevance:10},{begin:'"',end:'"'},{begin:"'",end:"'"}] 604 | },o={begin:/\[/,end:/\]/,contains:[a,r,i,s,t,"self"],relevance:0 605 | },l=n.either(/[A-Za-z0-9_-]+/,/"(\\"|[^"])*"/,/'[^']*'/);return{ 606 | name:"TOML, also INI",aliases:["toml"],case_insensitive:!0,illegal:/\S/, 607 | contains:[a,{className:"section",begin:/\[+/,end:/\]+/},{ 608 | begin:n.concat(l,"(\\s*\\.\\s*",l,")*",n.lookahead(/\s*=\s*[^#\s]/)), 609 | className:"attr",starts:{end:/$/,contains:[a,o,r,i,s,t]}}]}},grmr_java:e=>{ 610 | const n=e.regex,t="[\xc0-\u02b8a-zA-Z_$][\xc0-\u02b8a-zA-Z_$0-9]*",a=t+pe("(?:<"+t+"~~~(?:\\s*,\\s*"+t+"~~~)*>)?",/~~~/g,2),i={ 611 | keyword:["synchronized","abstract","private","var","static","if","const ","for","while","strictfp","finally","protected","import","native","final","void","enum","else","break","transient","catch","instanceof","volatile","case","assert","package","default","public","try","switch","continue","throws","protected","public","private","module","requires","exports","do","sealed","yield","permits"], 612 | literal:["false","true","null"], 613 | type:["char","boolean","long","float","int","byte","short","double"], 614 | built_in:["super","this"]},r={className:"meta",begin:"@"+t,contains:[{ 615 | begin:/\(/,end:/\)/,contains:["self"]}]},s={className:"params",begin:/\(/, 616 | end:/\)/,keywords:i,relevance:0,contains:[e.C_BLOCK_COMMENT_MODE],endsParent:!0} 617 | ;return{name:"Java",aliases:["jsp"],keywords:i,illegal:/<\/|#/, 618 | contains:[e.COMMENT("/\\*\\*","\\*/",{relevance:0,contains:[{begin:/\w+@/, 619 | relevance:0},{className:"doctag",begin:"@[A-Za-z]+"}]}),{ 620 | begin:/import java\.[a-z]+\./,keywords:"import",relevance:2 621 | },e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,{begin:/"""/,end:/"""/, 622 | className:"string",contains:[e.BACKSLASH_ESCAPE] 623 | },e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,{ 624 | match:[/\b(?:class|interface|enum|extends|implements|new)/,/\s+/,t],className:{ 625 | 1:"keyword",3:"title.class"}},{match:/non-sealed/,scope:"keyword"},{ 626 | begin:[n.concat(/(?!else)/,t),/\s+/,t,/\s+/,/=(?!=)/],className:{1:"type", 627 | 3:"variable",5:"operator"}},{begin:[/record/,/\s+/,t],className:{1:"keyword", 628 | 3:"title.class"},contains:[s,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},{ 629 | beginKeywords:"new throw return else",relevance:0},{ 630 | begin:["(?:"+a+"\\s+)",e.UNDERSCORE_IDENT_RE,/\s*(?=\()/],className:{ 631 | 2:"title.function"},keywords:i,contains:[{className:"params",begin:/\(/, 632 | end:/\)/,keywords:i,relevance:0, 633 | contains:[r,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,me,e.C_BLOCK_COMMENT_MODE] 634 | },e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},me,r]}},grmr_javascript:Oe, 635 | grmr_json:e=>{const n=["true","false","null"],t={scope:"literal", 636 | beginKeywords:n.join(" ")};return{name:"JSON",keywords:{literal:n},contains:[{ 637 | className:"attr",begin:/"(\\.|[^\\"\r\n])*"(?=\s*:)/,relevance:1.01},{ 638 | match:/[{}[\],:]/,className:"punctuation",relevance:0 639 | },e.QUOTE_STRING_MODE,t,e.C_NUMBER_MODE,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE], 640 | illegal:"\\S"}},grmr_kotlin:e=>{const n={ 641 | keyword:"abstract as val var vararg get set class object open private protected public noinline crossinline dynamic final enum if else do while for when throw try catch finally import package is in fun override companion reified inline lateinit init interface annotation data sealed internal infix operator out by constructor super tailrec where const inner suspend typealias external expect actual", 642 | built_in:"Byte Short Char Int Long Boolean Float Double Void Unit Nothing", 643 | literal:"true false null"},t={className:"symbol",begin:e.UNDERSCORE_IDENT_RE+"@" 644 | },a={className:"subst",begin:/\$\{/,end:/\}/,contains:[e.C_NUMBER_MODE]},i={ 645 | className:"variable",begin:"\\$"+e.UNDERSCORE_IDENT_RE},r={className:"string", 646 | variants:[{begin:'"""',end:'"""(?=[^"])',contains:[i,a]},{begin:"'",end:"'", 647 | illegal:/\n/,contains:[e.BACKSLASH_ESCAPE]},{begin:'"',end:'"',illegal:/\n/, 648 | contains:[e.BACKSLASH_ESCAPE,i,a]}]};a.contains.push(r);const s={ 649 | className:"meta", 650 | begin:"@(?:file|property|field|get|set|receiver|param|setparam|delegate)\\s*:(?:\\s*"+e.UNDERSCORE_IDENT_RE+")?" 651 | },o={className:"meta",begin:"@"+e.UNDERSCORE_IDENT_RE,contains:[{begin:/\(/, 652 | end:/\)/,contains:[e.inherit(r,{className:"string"}),"self"]}] 653 | },l=me,c=e.COMMENT("/\\*","\\*/",{contains:[e.C_BLOCK_COMMENT_MODE]}),d={ 654 | variants:[{className:"type",begin:e.UNDERSCORE_IDENT_RE},{begin:/\(/,end:/\)/, 655 | contains:[]}]},g=d;return g.variants[1].contains=[d],d.variants[1].contains=[g], 656 | {name:"Kotlin",aliases:["kt","kts"],keywords:n, 657 | contains:[e.COMMENT("/\\*\\*","\\*/",{relevance:0,contains:[{className:"doctag", 658 | begin:"@[A-Za-z]+"}]}),e.C_LINE_COMMENT_MODE,c,{className:"keyword", 659 | begin:/\b(break|continue|return|this)\b/,starts:{contains:[{className:"symbol", 660 | begin:/@\w+/}]}},t,s,o,{className:"function",beginKeywords:"fun",end:"[(]|$", 661 | returnBegin:!0,excludeEnd:!0,keywords:n,relevance:5,contains:[{ 662 | begin:e.UNDERSCORE_IDENT_RE+"\\s*\\(",returnBegin:!0,relevance:0, 663 | contains:[e.UNDERSCORE_TITLE_MODE]},{className:"type",begin://, 664 | keywords:"reified",relevance:0},{className:"params",begin:/\(/,end:/\)/, 665 | endsParent:!0,keywords:n,relevance:0,contains:[{begin:/:/,end:/[=,\/]/, 666 | endsWithParent:!0,contains:[d,e.C_LINE_COMMENT_MODE,c],relevance:0 667 | },e.C_LINE_COMMENT_MODE,c,s,o,r,e.C_NUMBER_MODE]},c]},{ 668 | begin:[/class|interface|trait/,/\s+/,e.UNDERSCORE_IDENT_RE],beginScope:{ 669 | 3:"title.class"},keywords:"class interface trait",end:/[:\{(]|$/,excludeEnd:!0, 670 | illegal:"extends implements",contains:[{ 671 | beginKeywords:"public protected internal private constructor" 672 | },e.UNDERSCORE_TITLE_MODE,{className:"type",begin://,excludeBegin:!0, 673 | excludeEnd:!0,relevance:0},{className:"type",begin:/[,:]\s*/,end:/[<\(,){\s]|$/, 674 | excludeBegin:!0,returnEnd:!0},s,o]},r,{className:"meta",begin:"^#!/usr/bin/env", 675 | end:"$",illegal:"\n"},l]}},grmr_less:e=>{ 676 | const n=ie(e),t=de,a="[\\w-]+",i="("+a+"|@\\{"+a+"\\})",r=[],s=[],o=e=>({ 677 | className:"string",begin:"~?"+e+".*?"+e}),l=(e,n,t)=>({className:e,begin:n, 678 | relevance:t}),c={$pattern:/[a-z-]+/,keyword:"and or not only", 679 | attribute:se.join(" ")},d={begin:"\\(",end:"\\)",contains:s,keywords:c, 680 | relevance:0} 681 | ;s.push(e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,o("'"),o('"'),n.CSS_NUMBER_MODE,{ 682 | begin:"(url|data-uri)\\(",starts:{className:"string",end:"[\\)\\n]", 683 | excludeEnd:!0} 684 | },n.HEXCOLOR,d,l("variable","@@?"+a,10),l("variable","@\\{"+a+"\\}"),l("built_in","~?`[^`]*?`"),{ 685 | className:"attribute",begin:a+"\\s*:",end:":",returnBegin:!0,excludeEnd:!0 686 | },n.IMPORTANT,{beginKeywords:"and not"},n.FUNCTION_DISPATCH);const g=s.concat({ 687 | begin:/\{/,end:/\}/,contains:r}),u={beginKeywords:"when",endsWithParent:!0, 688 | contains:[{beginKeywords:"and not"}].concat(s)},b={begin:i+"\\s*:", 689 | returnBegin:!0,end:/[;}]/,relevance:0,contains:[{begin:/-(webkit|moz|ms|o)-/ 690 | },n.CSS_VARIABLE,{className:"attribute",begin:"\\b("+ce.join("|")+")\\b", 691 | end:/(?=:)/,starts:{endsWithParent:!0,illegal:"[<=$]",relevance:0,contains:s}}] 692 | },m={className:"keyword", 693 | begin:"@(import|media|charset|font-face|(-[a-z]+-)?keyframes|supports|document|namespace|page|viewport|host)\\b", 694 | starts:{end:"[;{}]",keywords:c,returnEnd:!0,contains:s,relevance:0}},p={ 695 | className:"variable",variants:[{begin:"@"+a+"\\s*:",relevance:15},{begin:"@"+a 696 | }],starts:{end:"[;}]",returnEnd:!0,contains:g}},_={variants:[{ 697 | begin:"[\\.#:&\\[>]",end:"[;{}]"},{begin:i,end:/\{/}],returnBegin:!0, 698 | returnEnd:!0,illegal:"[<='$\"]",relevance:0, 699 | contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,u,l("keyword","all\\b"),l("variable","@\\{"+a+"\\}"),{ 700 | begin:"\\b("+re.join("|")+")\\b",className:"selector-tag" 701 | },n.CSS_NUMBER_MODE,l("selector-tag",i,0),l("selector-id","#"+i),l("selector-class","\\."+i,0),l("selector-tag","&",0),n.ATTRIBUTE_SELECTOR_MODE,{ 702 | className:"selector-pseudo",begin:":("+oe.join("|")+")"},{ 703 | className:"selector-pseudo",begin:":(:)?("+le.join("|")+")"},{begin:/\(/, 704 | end:/\)/,relevance:0,contains:g},{begin:"!important"},n.FUNCTION_DISPATCH]},h={ 705 | begin:a+":(:)?"+`(${t.join("|")})`,returnBegin:!0,contains:[_]} 706 | ;return r.push(e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,m,p,h,b,_,u,n.FUNCTION_DISPATCH), 707 | {name:"Less",case_insensitive:!0,illegal:"[=>'/<($\"]",contains:r}}, 708 | grmr_lua:e=>{const n="\\[=*\\[",t="\\]=*\\]",a={begin:n,end:t,contains:["self"] 709 | },i=[e.COMMENT("--(?!"+n+")","$"),e.COMMENT("--"+n,t,{contains:[a],relevance:10 710 | })];return{name:"Lua",keywords:{$pattern:e.UNDERSCORE_IDENT_RE, 711 | literal:"true false nil", 712 | keyword:"and break do else elseif end for goto if in local not or repeat return then until while", 713 | built_in:"_G _ENV _VERSION __index __newindex __mode __call __metatable __tostring __len __gc __add __sub __mul __div __mod __pow __concat __unm __eq __lt __le assert collectgarbage dofile error getfenv getmetatable ipairs load loadfile loadstring module next pairs pcall print rawequal rawget rawset require select setfenv setmetatable tonumber tostring type unpack xpcall arg self coroutine resume yield status wrap create running debug getupvalue debug sethook getmetatable gethook setmetatable setlocal traceback setfenv getinfo setupvalue getlocal getregistry getfenv io lines write close flush open output type read stderr stdin input stdout popen tmpfile math log max acos huge ldexp pi cos tanh pow deg tan cosh sinh random randomseed frexp ceil floor rad abs sqrt modf asin min mod fmod log10 atan2 exp sin atan os exit setlocale date getenv difftime remove time clock tmpname rename execute package preload loadlib loaded loaders cpath config path seeall string sub upper len gfind rep find match char dump gmatch reverse byte format gsub lower table setn insert getn foreachi maxn foreach concat sort remove" 714 | },contains:i.concat([{className:"function",beginKeywords:"function",end:"\\)", 715 | contains:[e.inherit(e.TITLE_MODE,{ 716 | begin:"([_a-zA-Z]\\w*\\.)*([_a-zA-Z]\\w*:)?[_a-zA-Z]\\w*"}),{className:"params", 717 | begin:"\\(",endsWithParent:!0,contains:i}].concat(i) 718 | },e.C_NUMBER_MODE,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,{className:"string", 719 | begin:n,end:t,contains:[a],relevance:5}])}},grmr_makefile:e=>{const n={ 720 | className:"variable",variants:[{begin:"\\$\\("+e.UNDERSCORE_IDENT_RE+"\\)", 721 | contains:[e.BACKSLASH_ESCAPE]},{begin:/\$[@%{ 731 | const n={begin:/<\/?[A-Za-z_]/,end:">",subLanguage:"xml",relevance:0},t={ 732 | variants:[{begin:/\[.+?\]\[.*?\]/,relevance:0},{ 733 | begin:/\[.+?\]\(((data|javascript|mailto):|(?:http|ftp)s?:\/\/).*?\)/, 734 | relevance:2},{ 735 | begin:e.regex.concat(/\[.+?\]\(/,/[A-Za-z][A-Za-z0-9+.-]*/,/:\/\/.*?\)/), 736 | relevance:2},{begin:/\[.+?\]\([./?&#].*?\)/,relevance:1},{ 737 | begin:/\[.*?\]\(.*?\)/,relevance:0}],returnBegin:!0,contains:[{match:/\[(?=\])/ 738 | },{className:"string",relevance:0,begin:"\\[",end:"\\]",excludeBegin:!0, 739 | returnEnd:!0},{className:"link",relevance:0,begin:"\\]\\(",end:"\\)", 740 | excludeBegin:!0,excludeEnd:!0},{className:"symbol",relevance:0,begin:"\\]\\[", 741 | end:"\\]",excludeBegin:!0,excludeEnd:!0}]},a={className:"strong",contains:[], 742 | variants:[{begin:/_{2}(?!\s)/,end:/_{2}/},{begin:/\*{2}(?!\s)/,end:/\*{2}/}] 743 | },i={className:"emphasis",contains:[],variants:[{begin:/\*(?![*\s])/,end:/\*/},{ 744 | begin:/_(?![_\s])/,end:/_/,relevance:0}]},r=e.inherit(a,{contains:[] 745 | }),s=e.inherit(i,{contains:[]});a.contains.push(s),i.contains.push(r) 746 | ;let o=[n,t];return[a,i,r,s].forEach((e=>{e.contains=e.contains.concat(o) 747 | })),o=o.concat(a,i),{name:"Markdown",aliases:["md","mkdown","mkd"],contains:[{ 748 | className:"section",variants:[{begin:"^#{1,6}",end:"$",contains:o},{ 749 | begin:"(?=^.+?\\n[=-]{2,}$)",contains:[{begin:"^[=-]*$"},{begin:"^",end:"\\n", 750 | contains:o}]}]},n,{className:"bullet",begin:"^[ \t]*([*+-]|(\\d+\\.))(?=\\s+)", 751 | end:"\\s+",excludeEnd:!0},a,i,{className:"quote",begin:"^>\\s+",contains:o, 752 | end:"$"},{className:"code",variants:[{begin:"(`{3,})[^`](.|\\n)*?\\1`*[ ]*"},{ 753 | begin:"(~{3,})[^~](.|\\n)*?\\1~*[ ]*"},{begin:"```",end:"```+[ ]*$"},{ 754 | begin:"~~~",end:"~~~+[ ]*$"},{begin:"`.+?`"},{begin:"(?=^( {4}|\\t))", 755 | contains:[{begin:"^( {4}|\\t)",end:"(\\n)$"}],relevance:0}]},{ 756 | begin:"^[-\\*]{3,}",end:"$"},t,{begin:/^\[[^\n]+\]:/,returnBegin:!0,contains:[{ 757 | className:"symbol",begin:/\[/,end:/\]/,excludeBegin:!0,excludeEnd:!0},{ 758 | className:"link",begin:/:\s*/,end:/$/,excludeBegin:!0}]}]}},grmr_objectivec:e=>{ 759 | const n=/[a-zA-Z@][a-zA-Z0-9_]*/,t={$pattern:n, 760 | keyword:["@interface","@class","@protocol","@implementation"]};return{ 761 | name:"Objective-C",aliases:["mm","objc","obj-c","obj-c++","objective-c++"], 762 | keywords:{"variable.language":["this","super"],$pattern:n, 763 | keyword:["while","export","sizeof","typedef","const","struct","for","union","volatile","static","mutable","if","do","return","goto","enum","else","break","extern","asm","case","default","register","explicit","typename","switch","continue","inline","readonly","assign","readwrite","self","@synchronized","id","typeof","nonatomic","IBOutlet","IBAction","strong","weak","copy","in","out","inout","bycopy","byref","oneway","__strong","__weak","__block","__autoreleasing","@private","@protected","@public","@try","@property","@end","@throw","@catch","@finally","@autoreleasepool","@synthesize","@dynamic","@selector","@optional","@required","@encode","@package","@import","@defs","@compatibility_alias","__bridge","__bridge_transfer","__bridge_retained","__bridge_retain","__covariant","__contravariant","__kindof","_Nonnull","_Nullable","_Null_unspecified","__FUNCTION__","__PRETTY_FUNCTION__","__attribute__","getter","setter","retain","unsafe_unretained","nonnull","nullable","null_unspecified","null_resettable","class","instancetype","NS_DESIGNATED_INITIALIZER","NS_UNAVAILABLE","NS_REQUIRES_SUPER","NS_RETURNS_INNER_POINTER","NS_INLINE","NS_AVAILABLE","NS_DEPRECATED","NS_ENUM","NS_OPTIONS","NS_SWIFT_UNAVAILABLE","NS_ASSUME_NONNULL_BEGIN","NS_ASSUME_NONNULL_END","NS_REFINED_FOR_SWIFT","NS_SWIFT_NAME","NS_SWIFT_NOTHROW","NS_DURING","NS_HANDLER","NS_ENDHANDLER","NS_VALUERETURN","NS_VOIDRETURN"], 764 | literal:["false","true","FALSE","TRUE","nil","YES","NO","NULL"], 765 | built_in:["dispatch_once_t","dispatch_queue_t","dispatch_sync","dispatch_async","dispatch_once"], 766 | type:["int","float","char","unsigned","signed","short","long","double","wchar_t","unichar","void","bool","BOOL","id|0","_Bool"] 767 | },illegal:"/,end:/$/,illegal:"\\n" 776 | },e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},{className:"class", 777 | begin:"("+t.keyword.join("|")+")\\b",end:/(\{|$)/,excludeEnd:!0,keywords:t, 778 | contains:[e.UNDERSCORE_TITLE_MODE]},{begin:"\\."+e.UNDERSCORE_IDENT_RE, 779 | relevance:0}]}},grmr_perl:e=>{const n=e.regex,t=/[dualxmsipngr]{0,12}/,a={ 780 | $pattern:/[\w.]+/, 781 | keyword:"abs accept alarm and atan2 bind binmode bless break caller chdir chmod chomp chop chown chr chroot close closedir connect continue cos crypt dbmclose dbmopen defined delete die do dump each else elsif endgrent endhostent endnetent endprotoent endpwent endservent eof eval exec exists exit exp fcntl fileno flock for foreach fork format formline getc getgrent getgrgid getgrnam gethostbyaddr gethostbyname gethostent getlogin getnetbyaddr getnetbyname getnetent getpeername getpgrp getpriority getprotobyname getprotobynumber getprotoent getpwent getpwnam getpwuid getservbyname getservbyport getservent getsockname getsockopt given glob gmtime goto grep gt hex if index int ioctl join keys kill last lc lcfirst length link listen local localtime log lstat lt ma map mkdir msgctl msgget msgrcv msgsnd my ne next no not oct open opendir or ord our pack package pipe pop pos print printf prototype push q|0 qq quotemeta qw qx rand read readdir readline readlink readpipe recv redo ref rename require reset return reverse rewinddir rindex rmdir say scalar seek seekdir select semctl semget semop send setgrent sethostent setnetent setpgrp setpriority setprotoent setpwent setservent setsockopt shift shmctl shmget shmread shmwrite shutdown sin sleep socket socketpair sort splice split sprintf sqrt srand stat state study sub substr symlink syscall sysopen sysread sysseek system syswrite tell telldir tie tied time times tr truncate uc ucfirst umask undef unless unlink unpack unshift untie until use utime values vec wait waitpid wantarray warn when while write x|0 xor y|0" 782 | },i={className:"subst",begin:"[$@]\\{",end:"\\}",keywords:a},r={begin:/->\{/, 783 | end:/\}/},s={variants:[{begin:/\$\d/},{ 784 | begin:n.concat(/[$%@](\^\w\b|#\w+(::\w+)*|\{\w+\}|\w+(::\w*)*)/,"(?![A-Za-z])(?![@$%])") 785 | },{begin:/[$%@][^\s\w{]/,relevance:0}] 786 | },o=[e.BACKSLASH_ESCAPE,i,s],l=[/!/,/\//,/\|/,/\?/,/'/,/"/,/#/],c=(e,a,i="\\1")=>{ 787 | const r="\\1"===i?i:n.concat(i,a) 788 | ;return n.concat(n.concat("(?:",e,")"),a,/(?:\\.|[^\\\/])*?/,r,/(?:\\.|[^\\\/])*?/,i,t) 789 | },d=(e,a,i)=>n.concat(n.concat("(?:",e,")"),a,/(?:\\.|[^\\\/])*?/,i,t),g=[s,e.HASH_COMMENT_MODE,e.COMMENT(/^=\w/,/=cut/,{ 790 | endsWithParent:!0}),r,{className:"string",contains:o,variants:[{ 791 | begin:"q[qwxr]?\\s*\\(",end:"\\)",relevance:5},{begin:"q[qwxr]?\\s*\\[", 792 | end:"\\]",relevance:5},{begin:"q[qwxr]?\\s*\\{",end:"\\}",relevance:5},{ 793 | begin:"q[qwxr]?\\s*\\|",end:"\\|",relevance:5},{begin:"q[qwxr]?\\s*<",end:">", 794 | relevance:5},{begin:"qw\\s+q",end:"q",relevance:5},{begin:"'",end:"'", 795 | contains:[e.BACKSLASH_ESCAPE]},{begin:'"',end:'"'},{begin:"`",end:"`", 796 | contains:[e.BACKSLASH_ESCAPE]},{begin:/\{\w+\}/,relevance:0},{ 797 | begin:"-?\\w+\\s*=>",relevance:0}]},{className:"number", 798 | begin:"(\\b0[0-7_]+)|(\\b0x[0-9a-fA-F_]+)|(\\b[1-9][0-9_]*(\\.[0-9_]+)?)|[0_]\\b", 799 | relevance:0},{ 800 | begin:"(\\/\\/|"+e.RE_STARTERS_RE+"|\\b(split|return|print|reverse|grep)\\b)\\s*", 801 | keywords:"split return print reverse grep",relevance:0, 802 | contains:[e.HASH_COMMENT_MODE,{className:"regexp",variants:[{ 803 | begin:c("s|tr|y",n.either(...l,{capture:!0}))},{begin:c("s|tr|y","\\(","\\)")},{ 804 | begin:c("s|tr|y","\\[","\\]")},{begin:c("s|tr|y","\\{","\\}")}],relevance:2},{ 805 | className:"regexp",variants:[{begin:/(m|qr)\/\//,relevance:0},{ 806 | begin:d("(?:m|qr)?",/\//,/\//)},{begin:d("m|qr",n.either(...l,{capture:!0 807 | }),/\1/)},{begin:d("m|qr",/\(/,/\)/)},{begin:d("m|qr",/\[/,/\]/)},{ 808 | begin:d("m|qr",/\{/,/\}/)}]}]},{className:"function",beginKeywords:"sub", 809 | end:"(\\s*\\(.*?\\))?[;{]",excludeEnd:!0,relevance:5,contains:[e.TITLE_MODE]},{ 810 | begin:"-\\w\\b",relevance:0},{begin:"^__DATA__$",end:"^__END__$", 811 | subLanguage:"mojolicious",contains:[{begin:"^@@.*",end:"$",className:"comment"}] 812 | }];return i.contains=g,r.contains=g,{name:"Perl",aliases:["pl","pm"],keywords:a, 813 | contains:g}},grmr_php:e=>{ 814 | const n=e.regex,t=/(?![A-Za-z0-9])(?![$])/,a=n.concat(/[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*/,t),i=n.concat(/(\\?[A-Z][a-z0-9_\x7f-\xff]+|\\?[A-Z]+(?=[A-Z][a-z0-9_\x7f-\xff])){1,}/,t),r={ 815 | scope:"variable",match:"\\$+"+a},s={scope:"subst",variants:[{begin:/\$\w+/},{ 816 | begin:/\{\$/,end:/\}/}]},o=e.inherit(e.APOS_STRING_MODE,{illegal:null 817 | }),l="[ \t\n]",c={scope:"string",variants:[e.inherit(e.QUOTE_STRING_MODE,{ 818 | illegal:null,contains:e.QUOTE_STRING_MODE.contains.concat(s)}),o,{ 819 | begin:/<<<[ \t]*(?:(\w+)|"(\w+)")\n/,end:/[ \t]*(\w+)\b/, 820 | contains:e.QUOTE_STRING_MODE.contains.concat(s),"on:begin":(e,n)=>{ 821 | n.data._beginMatch=e[1]||e[2]},"on:end":(e,n)=>{ 822 | n.data._beginMatch!==e[1]&&n.ignoreMatch()}},e.END_SAME_AS_BEGIN({ 823 | begin:/<<<[ \t]*'(\w+)'\n/,end:/[ \t]*(\w+)\b/})]},d={scope:"number",variants:[{ 824 | begin:"\\b0[bB][01]+(?:_[01]+)*\\b"},{begin:"\\b0[oO][0-7]+(?:_[0-7]+)*\\b"},{ 825 | begin:"\\b0[xX][\\da-fA-F]+(?:_[\\da-fA-F]+)*\\b"},{ 826 | begin:"(?:\\b\\d+(?:_\\d+)*(\\.(?:\\d+(?:_\\d+)*))?|\\B\\.\\d+)(?:[eE][+-]?\\d+)?" 827 | }],relevance:0 828 | },g=["false","null","true"],u=["__CLASS__","__DIR__","__FILE__","__FUNCTION__","__COMPILER_HALT_OFFSET__","__LINE__","__METHOD__","__NAMESPACE__","__TRAIT__","die","echo","exit","include","include_once","print","require","require_once","array","abstract","and","as","binary","bool","boolean","break","callable","case","catch","class","clone","const","continue","declare","default","do","double","else","elseif","empty","enddeclare","endfor","endforeach","endif","endswitch","endwhile","enum","eval","extends","final","finally","float","for","foreach","from","global","goto","if","implements","instanceof","insteadof","int","integer","interface","isset","iterable","list","match|0","mixed","new","never","object","or","private","protected","public","readonly","real","return","string","switch","throw","trait","try","unset","use","var","void","while","xor","yield"],b=["Error|0","AppendIterator","ArgumentCountError","ArithmeticError","ArrayIterator","ArrayObject","AssertionError","BadFunctionCallException","BadMethodCallException","CachingIterator","CallbackFilterIterator","CompileError","Countable","DirectoryIterator","DivisionByZeroError","DomainException","EmptyIterator","ErrorException","Exception","FilesystemIterator","FilterIterator","GlobIterator","InfiniteIterator","InvalidArgumentException","IteratorIterator","LengthException","LimitIterator","LogicException","MultipleIterator","NoRewindIterator","OutOfBoundsException","OutOfRangeException","OuterIterator","OverflowException","ParentIterator","ParseError","RangeException","RecursiveArrayIterator","RecursiveCachingIterator","RecursiveCallbackFilterIterator","RecursiveDirectoryIterator","RecursiveFilterIterator","RecursiveIterator","RecursiveIteratorIterator","RecursiveRegexIterator","RecursiveTreeIterator","RegexIterator","RuntimeException","SeekableIterator","SplDoublyLinkedList","SplFileInfo","SplFileObject","SplFixedArray","SplHeap","SplMaxHeap","SplMinHeap","SplObjectStorage","SplObserver","SplPriorityQueue","SplQueue","SplStack","SplSubject","SplTempFileObject","TypeError","UnderflowException","UnexpectedValueException","UnhandledMatchError","ArrayAccess","BackedEnum","Closure","Fiber","Generator","Iterator","IteratorAggregate","Serializable","Stringable","Throwable","Traversable","UnitEnum","WeakReference","WeakMap","Directory","__PHP_Incomplete_Class","parent","php_user_filter","self","static","stdClass"],m={ 829 | keyword:u,literal:(e=>{const n=[];return e.forEach((e=>{ 830 | n.push(e),e.toLowerCase()===e?n.push(e.toUpperCase()):n.push(e.toLowerCase()) 831 | })),n})(g),built_in:b},p=e=>e.map((e=>e.replace(/\|\d+$/,""))),_={variants:[{ 832 | match:[/new/,n.concat(l,"+"),n.concat("(?!",p(b).join("\\b|"),"\\b)"),i],scope:{ 833 | 1:"keyword",4:"title.class"}}]},h=n.concat(a,"\\b(?!\\()"),f={variants:[{ 834 | match:[n.concat(/::/,n.lookahead(/(?!class\b)/)),h],scope:{2:"variable.constant" 835 | }},{match:[/::/,/class/],scope:{2:"variable.language"}},{ 836 | match:[i,n.concat(/::/,n.lookahead(/(?!class\b)/)),h],scope:{1:"title.class", 837 | 3:"variable.constant"}},{match:[i,n.concat("::",n.lookahead(/(?!class\b)/))], 838 | scope:{1:"title.class"}},{match:[i,/::/,/class/],scope:{1:"title.class", 839 | 3:"variable.language"}}]},E={scope:"attr", 840 | match:n.concat(a,n.lookahead(":"),n.lookahead(/(?!::)/))},y={relevance:0, 841 | begin:/\(/,end:/\)/,keywords:m,contains:[E,r,f,e.C_BLOCK_COMMENT_MODE,c,d,_] 842 | },N={relevance:0, 843 | match:[/\b/,n.concat("(?!fn\\b|function\\b|",p(u).join("\\b|"),"|",p(b).join("\\b|"),"\\b)"),a,n.concat(l,"*"),n.lookahead(/(?=\()/)], 844 | scope:{3:"title.function.invoke"},contains:[y]};y.contains.push(N) 845 | ;const w=[E,f,e.C_BLOCK_COMMENT_MODE,c,d,_];return{case_insensitive:!1, 846 | keywords:m,contains:[{begin:n.concat(/#\[\s*/,i),beginScope:"meta",end:/]/, 847 | endScope:"meta",keywords:{literal:g,keyword:["new","array"]},contains:[{ 848 | begin:/\[/,end:/]/,keywords:{literal:g,keyword:["new","array"]}, 849 | contains:["self",...w]},...w,{scope:"meta",match:i}] 850 | },e.HASH_COMMENT_MODE,e.COMMENT("//","$"),e.COMMENT("/\\*","\\*/",{contains:[{ 851 | scope:"doctag",match:"@[A-Za-z]+"}]}),{match:/__halt_compiler\(\);/, 852 | keywords:"__halt_compiler",starts:{scope:"comment",end:e.MATCH_NOTHING_RE, 853 | contains:[{match:/\?>/,scope:"meta",endsParent:!0}]}},{scope:"meta",variants:[{ 854 | begin:/<\?php/,relevance:10},{begin:/<\?=/},{begin:/<\?/,relevance:.1},{ 855 | begin:/\?>/}]},{scope:"variable.language",match:/\$this\b/},r,N,f,{ 856 | match:[/const/,/\s/,a],scope:{1:"keyword",3:"variable.constant"}},_,{ 857 | scope:"function",relevance:0,beginKeywords:"fn function",end:/[;{]/, 858 | excludeEnd:!0,illegal:"[$%\\[]",contains:[{beginKeywords:"use" 859 | },e.UNDERSCORE_TITLE_MODE,{begin:"=>",endsParent:!0},{scope:"params", 860 | begin:"\\(",end:"\\)",excludeBegin:!0,excludeEnd:!0,keywords:m, 861 | contains:["self",r,f,e.C_BLOCK_COMMENT_MODE,c,d]}]},{scope:"class",variants:[{ 862 | beginKeywords:"enum",illegal:/[($"]/},{beginKeywords:"class interface trait", 863 | illegal:/[:($"]/}],relevance:0,end:/\{/,excludeEnd:!0,contains:[{ 864 | beginKeywords:"extends implements"},e.UNDERSCORE_TITLE_MODE]},{ 865 | beginKeywords:"namespace",relevance:0,end:";",illegal:/[.']/, 866 | contains:[e.inherit(e.UNDERSCORE_TITLE_MODE,{scope:"title.class"})]},{ 867 | beginKeywords:"use",relevance:0,end:";",contains:[{ 868 | match:/\b(as|const|function)\b/,scope:"keyword"},e.UNDERSCORE_TITLE_MODE]},c,d]} 869 | },grmr_php_template:e=>({name:"PHP template",subLanguage:"xml",contains:[{ 870 | begin:/<\?(php|=)?/,end:/\?>/,subLanguage:"php",contains:[{begin:"/\\*", 871 | end:"\\*/",skip:!0},{begin:'b"',end:'"',skip:!0},{begin:"b'",end:"'",skip:!0 872 | },e.inherit(e.APOS_STRING_MODE,{illegal:null,className:null,contains:null, 873 | skip:!0}),e.inherit(e.QUOTE_STRING_MODE,{illegal:null,className:null, 874 | contains:null,skip:!0})]}]}),grmr_plaintext:e=>({name:"Plain text", 875 | aliases:["text","txt"],disableAutodetect:!0}),grmr_python:e=>{ 876 | const n=e.regex,t=/[\p{XID_Start}_]\p{XID_Continue}*/u,a=["and","as","assert","async","await","break","case","class","continue","def","del","elif","else","except","finally","for","from","global","if","import","in","is","lambda","match","nonlocal|10","not","or","pass","raise","return","try","while","with","yield"],i={ 877 | $pattern:/[A-Za-z]\w+|__\w+__/,keyword:a, 878 | built_in:["__import__","abs","all","any","ascii","bin","bool","breakpoint","bytearray","bytes","callable","chr","classmethod","compile","complex","delattr","dict","dir","divmod","enumerate","eval","exec","filter","float","format","frozenset","getattr","globals","hasattr","hash","help","hex","id","input","int","isinstance","issubclass","iter","len","list","locals","map","max","memoryview","min","next","object","oct","open","ord","pow","print","property","range","repr","reversed","round","set","setattr","slice","sorted","staticmethod","str","sum","super","tuple","type","vars","zip"], 879 | literal:["__debug__","Ellipsis","False","None","NotImplemented","True"], 880 | type:["Any","Callable","Coroutine","Dict","List","Literal","Generic","Optional","Sequence","Set","Tuple","Type","Union"] 881 | },r={className:"meta",begin:/^(>>>|\.\.\.) /},s={className:"subst",begin:/\{/, 882 | end:/\}/,keywords:i,illegal:/#/},o={begin:/\{\{/,relevance:0},l={ 883 | className:"string",contains:[e.BACKSLASH_ESCAPE],variants:[{ 884 | begin:/([uU]|[bB]|[rR]|[bB][rR]|[rR][bB])?'''/,end:/'''/, 885 | contains:[e.BACKSLASH_ESCAPE,r],relevance:10},{ 886 | begin:/([uU]|[bB]|[rR]|[bB][rR]|[rR][bB])?"""/,end:/"""/, 887 | contains:[e.BACKSLASH_ESCAPE,r],relevance:10},{ 888 | begin:/([fF][rR]|[rR][fF]|[fF])'''/,end:/'''/, 889 | contains:[e.BACKSLASH_ESCAPE,r,o,s]},{begin:/([fF][rR]|[rR][fF]|[fF])"""/, 890 | end:/"""/,contains:[e.BACKSLASH_ESCAPE,r,o,s]},{begin:/([uU]|[rR])'/,end:/'/, 891 | relevance:10},{begin:/([uU]|[rR])"/,end:/"/,relevance:10},{ 892 | begin:/([bB]|[bB][rR]|[rR][bB])'/,end:/'/},{begin:/([bB]|[bB][rR]|[rR][bB])"/, 893 | end:/"/},{begin:/([fF][rR]|[rR][fF]|[fF])'/,end:/'/, 894 | contains:[e.BACKSLASH_ESCAPE,o,s]},{begin:/([fF][rR]|[rR][fF]|[fF])"/,end:/"/, 895 | contains:[e.BACKSLASH_ESCAPE,o,s]},e.APOS_STRING_MODE,e.QUOTE_STRING_MODE] 896 | },c="[0-9](_?[0-9])*",d=`(\\b(${c}))?\\.(${c})|\\b(${c})\\.`,g="\\b|"+a.join("|"),u={ 897 | className:"number",relevance:0,variants:[{ 898 | begin:`(\\b(${c})|(${d}))[eE][+-]?(${c})[jJ]?(?=${g})`},{begin:`(${d})[jJ]?`},{ 899 | begin:`\\b([1-9](_?[0-9])*|0+(_?0)*)[lLjJ]?(?=${g})`},{ 900 | begin:`\\b0[bB](_?[01])+[lL]?(?=${g})`},{begin:`\\b0[oO](_?[0-7])+[lL]?(?=${g})` 901 | },{begin:`\\b0[xX](_?[0-9a-fA-F])+[lL]?(?=${g})`},{begin:`\\b(${c})[jJ](?=${g})` 902 | }]},b={className:"comment",begin:n.lookahead(/# type:/),end:/$/,keywords:i, 903 | contains:[{begin:/# type:/},{begin:/#/,end:/\b\B/,endsWithParent:!0}]},m={ 904 | className:"params",variants:[{className:"",begin:/\(\s*\)/,skip:!0},{begin:/\(/, 905 | end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:i, 906 | contains:["self",r,u,l,e.HASH_COMMENT_MODE]}]};return s.contains=[l,u,r],{ 907 | name:"Python",aliases:["py","gyp","ipython"],unicodeRegex:!0,keywords:i, 908 | illegal:/(<\/|\?)|=>/,contains:[r,u,{begin:/\bself\b/},{beginKeywords:"if", 909 | relevance:0},l,b,e.HASH_COMMENT_MODE,{match:[/\bdef/,/\s+/,t],scope:{ 910 | 1:"keyword",3:"title.function"},contains:[m]},{variants:[{ 911 | match:[/\bclass/,/\s+/,t,/\s*/,/\(\s*/,t,/\s*\)/]},{match:[/\bclass/,/\s+/,t]}], 912 | scope:{1:"keyword",3:"title.class",6:"title.class.inherited"}},{ 913 | className:"meta",begin:/^[\t ]*@/,end:/(?=#)|$/,contains:[u,m,l]}]}}, 914 | grmr_python_repl:e=>({aliases:["pycon"],contains:[{className:"meta.prompt", 915 | starts:{end:/ |$/,starts:{end:"$",subLanguage:"python"}},variants:[{ 916 | begin:/^>>>(?=[ ]|$)/},{begin:/^\.\.\.(?=[ ]|$)/}]}]}),grmr_r:e=>{ 917 | const n=e.regex,t=/(?:(?:[a-zA-Z]|\.[._a-zA-Z])[._a-zA-Z0-9]*)|\.(?!\d)/,a=n.either(/0[xX][0-9a-fA-F]+\.[0-9a-fA-F]*[pP][+-]?\d+i?/,/0[xX][0-9a-fA-F]+(?:[pP][+-]?\d+)?[Li]?/,/(?:\d+(?:\.\d*)?|\.\d+)(?:[eE][+-]?\d+)?[Li]?/),i=/[=!<>:]=|\|\||&&|:::?|<-|<<-|->>|->|\|>|[-+*\/?!$&|:<=>@^~]|\*\*/,r=n.either(/[()]/,/[{}]/,/\[\[/,/[[\]]/,/\\/,/,/) 918 | ;return{name:"R",keywords:{$pattern:t, 919 | keyword:"function if in break next repeat else for while", 920 | literal:"NULL NA TRUE FALSE Inf NaN NA_integer_|10 NA_real_|10 NA_character_|10 NA_complex_|10", 921 | built_in:"LETTERS letters month.abb month.name pi T F abs acos acosh all any anyNA Arg as.call as.character as.complex as.double as.environment as.integer as.logical as.null.default as.numeric as.raw asin asinh atan atanh attr attributes baseenv browser c call ceiling class Conj cos cosh cospi cummax cummin cumprod cumsum digamma dim dimnames emptyenv exp expression floor forceAndCall gamma gc.time globalenv Im interactive invisible is.array is.atomic is.call is.character is.complex is.double is.environment is.expression is.finite is.function is.infinite is.integer is.language is.list is.logical is.matrix is.na is.name is.nan is.null is.numeric is.object is.pairlist is.raw is.recursive is.single is.symbol lazyLoadDBfetch length lgamma list log max min missing Mod names nargs nzchar oldClass on.exit pos.to.env proc.time prod quote range Re rep retracemem return round seq_along seq_len seq.int sign signif sin sinh sinpi sqrt standardGeneric substitute sum switch tan tanh tanpi tracemem trigamma trunc unclass untracemem UseMethod xtfrm" 922 | },contains:[e.COMMENT(/#'/,/$/,{contains:[{scope:"doctag",match:/@examples/, 923 | starts:{end:n.lookahead(n.either(/\n^#'\s*(?=@[a-zA-Z]+)/,/\n^(?!#')/)), 924 | endsParent:!0}},{scope:"doctag",begin:"@param",end:/$/,contains:[{ 925 | scope:"variable",variants:[{match:t},{match:/`(?:\\.|[^`\\])+`/}],endsParent:!0 926 | }]},{scope:"doctag",match:/@[a-zA-Z]+/},{scope:"keyword",match:/\\[a-zA-Z]+/}] 927 | }),e.HASH_COMMENT_MODE,{scope:"string",contains:[e.BACKSLASH_ESCAPE], 928 | variants:[e.END_SAME_AS_BEGIN({begin:/[rR]"(-*)\(/,end:/\)(-*)"/ 929 | }),e.END_SAME_AS_BEGIN({begin:/[rR]"(-*)\{/,end:/\}(-*)"/ 930 | }),e.END_SAME_AS_BEGIN({begin:/[rR]"(-*)\[/,end:/\](-*)"/ 931 | }),e.END_SAME_AS_BEGIN({begin:/[rR]'(-*)\(/,end:/\)(-*)'/ 932 | }),e.END_SAME_AS_BEGIN({begin:/[rR]'(-*)\{/,end:/\}(-*)'/ 933 | }),e.END_SAME_AS_BEGIN({begin:/[rR]'(-*)\[/,end:/\](-*)'/}),{begin:'"',end:'"', 934 | relevance:0},{begin:"'",end:"'",relevance:0}]},{relevance:0,variants:[{scope:{ 935 | 1:"operator",2:"number"},match:[i,a]},{scope:{1:"operator",2:"number"}, 936 | match:[/%[^%]*%/,a]},{scope:{1:"punctuation",2:"number"},match:[r,a]},{scope:{ 937 | 2:"number"},match:[/[^a-zA-Z0-9._]|^/,a]}]},{scope:{3:"operator"}, 938 | match:[t,/\s+/,/<-/,/\s+/]},{scope:"operator",relevance:0,variants:[{match:i},{ 939 | match:/%[^%]*%/}]},{scope:"punctuation",relevance:0,match:r},{begin:"`",end:"`", 940 | contains:[{begin:/\\./}]}]}},grmr_ruby:e=>{ 941 | const n=e.regex,t="([a-zA-Z_]\\w*[!?=]?|[-+~]@|<<|>>|=~|===?|<=>|[<>]=?|\\*\\*|[-/+%^&*~`|]|\\[\\]=?)",a=n.either(/\b([A-Z]+[a-z0-9]+)+/,/\b([A-Z]+[a-z0-9]+)+[A-Z]+/),i=n.concat(a,/(::\w+)*/),r={ 942 | "variable.constant":["__FILE__","__LINE__","__ENCODING__"], 943 | "variable.language":["self","super"], 944 | keyword:["alias","and","begin","BEGIN","break","case","class","defined","do","else","elsif","end","END","ensure","for","if","in","module","next","not","or","redo","require","rescue","retry","return","then","undef","unless","until","when","while","yield","include","extend","prepend","public","private","protected","raise","throw"], 945 | built_in:["proc","lambda","attr_accessor","attr_reader","attr_writer","define_method","private_constant","module_function"], 946 | literal:["true","false","nil"]},s={className:"doctag",begin:"@[A-Za-z]+"},o={ 947 | begin:"#<",end:">"},l=[e.COMMENT("#","$",{contains:[s] 948 | }),e.COMMENT("^=begin","^=end",{contains:[s],relevance:10 949 | }),e.COMMENT("^__END__",e.MATCH_NOTHING_RE)],c={className:"subst",begin:/#\{/, 950 | end:/\}/,keywords:r},d={className:"string",contains:[e.BACKSLASH_ESCAPE,c], 951 | variants:[{begin:/'/,end:/'/},{begin:/"/,end:/"/},{begin:/`/,end:/`/},{ 952 | begin:/%[qQwWx]?\(/,end:/\)/},{begin:/%[qQwWx]?\[/,end:/\]/},{ 953 | begin:/%[qQwWx]?\{/,end:/\}/},{begin:/%[qQwWx]?/},{begin:/%[qQwWx]?\//, 954 | end:/\//},{begin:/%[qQwWx]?%/,end:/%/},{begin:/%[qQwWx]?-/,end:/-/},{ 955 | begin:/%[qQwWx]?\|/,end:/\|/},{begin:/\B\?(\\\d{1,3})/},{ 956 | begin:/\B\?(\\x[A-Fa-f0-9]{1,2})/},{begin:/\B\?(\\u\{?[A-Fa-f0-9]{1,6}\}?)/},{ 957 | begin:/\B\?(\\M-\\C-|\\M-\\c|\\c\\M-|\\M-|\\C-\\M-)[\x20-\x7e]/},{ 958 | begin:/\B\?\\(c|C-)[\x20-\x7e]/},{begin:/\B\?\\?\S/},{ 959 | begin:n.concat(/<<[-~]?'?/,n.lookahead(/(\w+)(?=\W)[^\n]*\n(?:[^\n]*\n)*?\s*\1\b/)), 960 | contains:[e.END_SAME_AS_BEGIN({begin:/(\w+)/,end:/(\w+)/, 961 | contains:[e.BACKSLASH_ESCAPE,c]})]}]},g="[0-9](_?[0-9])*",u={className:"number", 962 | relevance:0,variants:[{ 963 | begin:`\\b([1-9](_?[0-9])*|0)(\\.(${g}))?([eE][+-]?(${g})|r)?i?\\b`},{ 964 | begin:"\\b0[dD][0-9](_?[0-9])*r?i?\\b"},{begin:"\\b0[bB][0-1](_?[0-1])*r?i?\\b" 965 | },{begin:"\\b0[oO][0-7](_?[0-7])*r?i?\\b"},{ 966 | begin:"\\b0[xX][0-9a-fA-F](_?[0-9a-fA-F])*r?i?\\b"},{ 967 | begin:"\\b0(_?[0-7])+r?i?\\b"}]},b={variants:[{match:/\(\)/},{ 968 | className:"params",begin:/\(/,end:/(?=\))/,excludeBegin:!0,endsParent:!0, 969 | keywords:r}]},m=[d,{variants:[{match:[/class\s+/,i,/\s+<\s+/,i]},{ 970 | match:[/\b(class|module)\s+/,i]}],scope:{2:"title.class", 971 | 4:"title.class.inherited"},keywords:r},{match:[/(include|extend)\s+/,i],scope:{ 972 | 2:"title.class"},keywords:r},{relevance:0,match:[i,/\.new[. (]/],scope:{ 973 | 1:"title.class"}},{relevance:0,match:/\b[A-Z][A-Z_0-9]+\b/, 974 | className:"variable.constant"},{relevance:0,match:a,scope:"title.class"},{ 975 | match:[/def/,/\s+/,t],scope:{1:"keyword",3:"title.function"},contains:[b]},{ 976 | begin:e.IDENT_RE+"::"},{className:"symbol", 977 | begin:e.UNDERSCORE_IDENT_RE+"(!|\\?)?:",relevance:0},{className:"symbol", 978 | begin:":(?!\\s)",contains:[d,{begin:t}],relevance:0},u,{className:"variable", 979 | begin:"(\\$\\W)|((\\$|@@?)(\\w+))(?=[^@$?])(?![A-Za-z])(?![@$?'])"},{ 980 | className:"params",begin:/\|/,end:/\|/,excludeBegin:!0,excludeEnd:!0, 981 | relevance:0,keywords:r},{begin:"("+e.RE_STARTERS_RE+"|unless)\\s*", 982 | keywords:"unless",contains:[{className:"regexp",contains:[e.BACKSLASH_ESCAPE,c], 983 | illegal:/\n/,variants:[{begin:"/",end:"/[a-z]*"},{begin:/%r\{/,end:/\}[a-z]*/},{ 984 | begin:"%r\\(",end:"\\)[a-z]*"},{begin:"%r!",end:"![a-z]*"},{begin:"%r\\[", 985 | end:"\\][a-z]*"}]}].concat(o,l),relevance:0}].concat(o,l) 986 | ;c.contains=m,b.contains=m;const p=[{begin:/^\s*=>/,starts:{end:"$",contains:m} 987 | },{className:"meta.prompt", 988 | begin:"^([>?]>|[\\w#]+\\(\\w+\\):\\d+:\\d+[>*]|(\\w+-)?\\d+\\.\\d+\\.\\d+(p\\d+)?[^\\d][^>]+>)(?=[ ])", 989 | starts:{end:"$",keywords:r,contains:m}}];return l.unshift(o),{name:"Ruby", 990 | aliases:["rb","gemspec","podspec","thor","irb"],keywords:r,illegal:/\/\*/, 991 | contains:[e.SHEBANG({binary:"ruby"})].concat(p).concat(l).concat(m)}}, 992 | grmr_rust:e=>{const n=e.regex,t={className:"title.function.invoke",relevance:0, 993 | begin:n.concat(/\b/,/(?!let|for|while|if|else|match\b)/,e.IDENT_RE,n.lookahead(/\s*\(/)) 994 | },a="([ui](8|16|32|64|128|size)|f(32|64))?",i=["drop ","Copy","Send","Sized","Sync","Drop","Fn","FnMut","FnOnce","ToOwned","Clone","Debug","PartialEq","PartialOrd","Eq","Ord","AsRef","AsMut","Into","From","Default","Iterator","Extend","IntoIterator","DoubleEndedIterator","ExactSizeIterator","SliceConcatExt","ToString","assert!","assert_eq!","bitflags!","bytes!","cfg!","col!","concat!","concat_idents!","debug_assert!","debug_assert_eq!","env!","eprintln!","panic!","file!","format!","format_args!","include_bytes!","include_str!","line!","local_data_key!","module_path!","option_env!","print!","println!","select!","stringify!","try!","unimplemented!","unreachable!","vec!","write!","writeln!","macro_rules!","assert_ne!","debug_assert_ne!"],r=["i8","i16","i32","i64","i128","isize","u8","u16","u32","u64","u128","usize","f32","f64","str","char","bool","Box","Option","Result","String","Vec"] 995 | ;return{name:"Rust",aliases:["rs"],keywords:{$pattern:e.IDENT_RE+"!?",type:r, 996 | keyword:["abstract","as","async","await","become","box","break","const","continue","crate","do","dyn","else","enum","extern","false","final","fn","for","if","impl","in","let","loop","macro","match","mod","move","mut","override","priv","pub","ref","return","self","Self","static","struct","super","trait","true","try","type","typeof","unsafe","unsized","use","virtual","where","while","yield"], 997 | literal:["true","false","Some","None","Ok","Err"],built_in:i},illegal:""},t]}}, 1017 | grmr_scss:e=>{const n=ie(e),t=le,a=oe,i="@[a-z-]+",r={className:"variable", 1018 | begin:"(\\$[a-zA-Z-][a-zA-Z0-9_-]*)\\b",relevance:0};return{name:"SCSS", 1019 | case_insensitive:!0,illegal:"[=/|']", 1020 | contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,n.CSS_NUMBER_MODE,{ 1021 | className:"selector-id",begin:"#[A-Za-z0-9_-]+",relevance:0},{ 1022 | className:"selector-class",begin:"\\.[A-Za-z0-9_-]+",relevance:0 1023 | },n.ATTRIBUTE_SELECTOR_MODE,{className:"selector-tag", 1024 | begin:"\\b("+re.join("|")+")\\b",relevance:0},{className:"selector-pseudo", 1025 | begin:":("+a.join("|")+")"},{className:"selector-pseudo", 1026 | begin:":(:)?("+t.join("|")+")"},r,{begin:/\(/,end:/\)/, 1027 | contains:[n.CSS_NUMBER_MODE]},n.CSS_VARIABLE,{className:"attribute", 1028 | begin:"\\b("+ce.join("|")+")\\b"},{ 1029 | begin:"\\b(whitespace|wait|w-resize|visible|vertical-text|vertical-ideographic|uppercase|upper-roman|upper-alpha|underline|transparent|top|thin|thick|text|text-top|text-bottom|tb-rl|table-header-group|table-footer-group|sw-resize|super|strict|static|square|solid|small-caps|separate|se-resize|scroll|s-resize|rtl|row-resize|ridge|right|repeat|repeat-y|repeat-x|relative|progress|pointer|overline|outside|outset|oblique|nowrap|not-allowed|normal|none|nw-resize|no-repeat|no-drop|newspaper|ne-resize|n-resize|move|middle|medium|ltr|lr-tb|lowercase|lower-roman|lower-alpha|loose|list-item|line|line-through|line-edge|lighter|left|keep-all|justify|italic|inter-word|inter-ideograph|inside|inset|inline|inline-block|inherit|inactive|ideograph-space|ideograph-parenthesis|ideograph-numeric|ideograph-alpha|horizontal|hidden|help|hand|groove|fixed|ellipsis|e-resize|double|dotted|distribute|distribute-space|distribute-letter|distribute-all-lines|disc|disabled|default|decimal|dashed|crosshair|collapse|col-resize|circle|char|center|capitalize|break-word|break-all|bottom|both|bolder|bold|block|bidi-override|below|baseline|auto|always|all-scroll|absolute|table|table-cell)\\b" 1030 | },{begin:/:/,end:/[;}{]/,relevance:0, 1031 | contains:[n.BLOCK_COMMENT,r,n.HEXCOLOR,n.CSS_NUMBER_MODE,e.QUOTE_STRING_MODE,e.APOS_STRING_MODE,n.IMPORTANT,n.FUNCTION_DISPATCH] 1032 | },{begin:"@(page|font-face)",keywords:{$pattern:i,keyword:"@page @font-face"}},{ 1033 | begin:"@",end:"[{;]",returnBegin:!0,keywords:{$pattern:/[a-z-]+/, 1034 | keyword:"and or not only",attribute:se.join(" ")},contains:[{begin:i, 1035 | className:"keyword"},{begin:/[a-z-]+(?=:)/,className:"attribute" 1036 | },r,e.QUOTE_STRING_MODE,e.APOS_STRING_MODE,n.HEXCOLOR,n.CSS_NUMBER_MODE] 1037 | },n.FUNCTION_DISPATCH]}},grmr_shell:e=>({name:"Shell Session", 1038 | aliases:["console","shellsession"],contains:[{className:"meta.prompt", 1039 | begin:/^\s{0,3}[/~\w\d[\]()@-]*[>%$#][ ]?/,starts:{end:/[^\\](?=\s*$)/, 1040 | subLanguage:"bash"}}]}),grmr_sql:e=>{ 1041 | const n=e.regex,t=e.COMMENT("--","$"),a=["true","false","unknown"],i=["bigint","binary","blob","boolean","char","character","clob","date","dec","decfloat","decimal","float","int","integer","interval","nchar","nclob","national","numeric","real","row","smallint","time","timestamp","varchar","varying","varbinary"],r=["abs","acos","array_agg","asin","atan","avg","cast","ceil","ceiling","coalesce","corr","cos","cosh","count","covar_pop","covar_samp","cume_dist","dense_rank","deref","element","exp","extract","first_value","floor","json_array","json_arrayagg","json_exists","json_object","json_objectagg","json_query","json_table","json_table_primitive","json_value","lag","last_value","lead","listagg","ln","log","log10","lower","max","min","mod","nth_value","ntile","nullif","percent_rank","percentile_cont","percentile_disc","position","position_regex","power","rank","regr_avgx","regr_avgy","regr_count","regr_intercept","regr_r2","regr_slope","regr_sxx","regr_sxy","regr_syy","row_number","sin","sinh","sqrt","stddev_pop","stddev_samp","substring","substring_regex","sum","tan","tanh","translate","translate_regex","treat","trim","trim_array","unnest","upper","value_of","var_pop","var_samp","width_bucket"],s=["create table","insert into","primary key","foreign key","not null","alter table","add constraint","grouping sets","on overflow","character set","respect nulls","ignore nulls","nulls first","nulls last","depth first","breadth first"],o=r,l=["abs","acos","all","allocate","alter","and","any","are","array","array_agg","array_max_cardinality","as","asensitive","asin","asymmetric","at","atan","atomic","authorization","avg","begin","begin_frame","begin_partition","between","bigint","binary","blob","boolean","both","by","call","called","cardinality","cascaded","case","cast","ceil","ceiling","char","char_length","character","character_length","check","classifier","clob","close","coalesce","collate","collect","column","commit","condition","connect","constraint","contains","convert","copy","corr","corresponding","cos","cosh","count","covar_pop","covar_samp","create","cross","cube","cume_dist","current","current_catalog","current_date","current_default_transform_group","current_path","current_role","current_row","current_schema","current_time","current_timestamp","current_path","current_role","current_transform_group_for_type","current_user","cursor","cycle","date","day","deallocate","dec","decimal","decfloat","declare","default","define","delete","dense_rank","deref","describe","deterministic","disconnect","distinct","double","drop","dynamic","each","element","else","empty","end","end_frame","end_partition","end-exec","equals","escape","every","except","exec","execute","exists","exp","external","extract","false","fetch","filter","first_value","float","floor","for","foreign","frame_row","free","from","full","function","fusion","get","global","grant","group","grouping","groups","having","hold","hour","identity","in","indicator","initial","inner","inout","insensitive","insert","int","integer","intersect","intersection","interval","into","is","join","json_array","json_arrayagg","json_exists","json_object","json_objectagg","json_query","json_table","json_table_primitive","json_value","lag","language","large","last_value","lateral","lead","leading","left","like","like_regex","listagg","ln","local","localtime","localtimestamp","log","log10","lower","match","match_number","match_recognize","matches","max","member","merge","method","min","minute","mod","modifies","module","month","multiset","national","natural","nchar","nclob","new","no","none","normalize","not","nth_value","ntile","null","nullif","numeric","octet_length","occurrences_regex","of","offset","old","omit","on","one","only","open","or","order","out","outer","over","overlaps","overlay","parameter","partition","pattern","per","percent","percent_rank","percentile_cont","percentile_disc","period","portion","position","position_regex","power","precedes","precision","prepare","primary","procedure","ptf","range","rank","reads","real","recursive","ref","references","referencing","regr_avgx","regr_avgy","regr_count","regr_intercept","regr_r2","regr_slope","regr_sxx","regr_sxy","regr_syy","release","result","return","returns","revoke","right","rollback","rollup","row","row_number","rows","running","savepoint","scope","scroll","search","second","seek","select","sensitive","session_user","set","show","similar","sin","sinh","skip","smallint","some","specific","specifictype","sql","sqlexception","sqlstate","sqlwarning","sqrt","start","static","stddev_pop","stddev_samp","submultiset","subset","substring","substring_regex","succeeds","sum","symmetric","system","system_time","system_user","table","tablesample","tan","tanh","then","time","timestamp","timezone_hour","timezone_minute","to","trailing","translate","translate_regex","translation","treat","trigger","trim","trim_array","true","truncate","uescape","union","unique","unknown","unnest","update","upper","user","using","value","values","value_of","var_pop","var_samp","varbinary","varchar","varying","versioning","when","whenever","where","width_bucket","window","with","within","without","year","add","asc","collation","desc","final","first","last","view"].filter((e=>!r.includes(e))),c={ 1042 | begin:n.concat(/\b/,n.either(...o),/\s*\(/),relevance:0,keywords:{built_in:o}} 1043 | ;return{name:"SQL",case_insensitive:!0,illegal:/[{}]|<\//,keywords:{ 1044 | $pattern:/\b[\w\.]+/,keyword:((e,{exceptions:n,when:t}={})=>{const a=t 1045 | ;return n=n||[],e.map((e=>e.match(/\|\d+$/)||n.includes(e)?e:a(e)?e+"|0":e)) 1046 | })(l,{when:e=>e.length<3}),literal:a,type:i, 1047 | built_in:["current_catalog","current_date","current_default_transform_group","current_path","current_role","current_schema","current_transform_group_for_type","current_user","session_user","system_time","system_user","current_time","localtime","current_timestamp","localtimestamp"] 1048 | },contains:[{begin:n.either(...s),relevance:0,keywords:{$pattern:/[\w\.]+/, 1049 | keyword:l.concat(s),literal:a,type:i}},{className:"type", 1050 | begin:n.either("double precision","large object","with timezone","without timezone") 1051 | },c,{className:"variable",begin:/@[a-z0-9][a-z0-9_]*/},{className:"string", 1052 | variants:[{begin:/'/,end:/'/,contains:[{begin:/''/}]}]},{begin:/"/,end:/"/, 1053 | contains:[{begin:/""/}]},e.C_NUMBER_MODE,e.C_BLOCK_COMMENT_MODE,t,{ 1054 | className:"operator",begin:/[-+*/=%^~]|&&?|\|\|?|!=?|<(?:=>?|<|>)?|>[>=]?/, 1055 | relevance:0}]}},grmr_swift:e=>{const n={match:/\s+/,relevance:0 1056 | },t=e.COMMENT("/\\*","\\*/",{contains:["self"]}),a=[e.C_LINE_COMMENT_MODE,t],i={ 1057 | match:[/\./,m(...xe,...Me)],className:{2:"keyword"}},r={match:b(/\./,m(...Ae)), 1058 | relevance:0},s=Ae.filter((e=>"string"==typeof e)).concat(["_|0"]),o={variants:[{ 1059 | className:"keyword", 1060 | match:m(...Ae.filter((e=>"string"!=typeof e)).concat(Se).map(ke),...Me)}]},l={ 1061 | $pattern:m(/\b\w+/,/#\w+/),keyword:s.concat(Re),literal:Ce},c=[i,r,o],g=[{ 1062 | match:b(/\./,m(...De)),relevance:0},{className:"built_in", 1063 | match:b(/\b/,m(...De),/(?=\()/)}],u={match:/->/,relevance:0},p=[u,{ 1064 | className:"operator",relevance:0,variants:[{match:Be},{match:`\\.(\\.|${Le})+`}] 1065 | }],_="([0-9]_*)+",h="([0-9a-fA-F]_*)+",f={className:"number",relevance:0, 1066 | variants:[{match:`\\b(${_})(\\.(${_}))?([eE][+-]?(${_}))?\\b`},{ 1067 | match:`\\b0x(${h})(\\.(${h}))?([pP][+-]?(${_}))?\\b`},{match:/\b0o([0-7]_*)+\b/ 1068 | },{match:/\b0b([01]_*)+\b/}]},E=(e="")=>({className:"subst",variants:[{ 1069 | match:b(/\\/,e,/[0\\tnr"']/)},{match:b(/\\/,e,/u\{[0-9a-fA-F]{1,8}\}/)}] 1070 | }),y=(e="")=>({className:"subst",match:b(/\\/,e,/[\t ]*(?:[\r\n]|\r\n)/) 1071 | }),N=(e="")=>({className:"subst",label:"interpol",begin:b(/\\/,e,/\(/),end:/\)/ 1072 | }),w=(e="")=>({begin:b(e,/"""/),end:b(/"""/,e),contains:[E(e),y(e),N(e)] 1073 | }),v=(e="")=>({begin:b(e,/"/),end:b(/"/,e),contains:[E(e),N(e)]}),O={ 1074 | className:"string", 1075 | variants:[w(),w("#"),w("##"),w("###"),v(),v("#"),v("##"),v("###")] 1076 | },k=[e.BACKSLASH_ESCAPE,{begin:/\[/,end:/\]/,relevance:0, 1077 | contains:[e.BACKSLASH_ESCAPE]}],x={begin:/\/[^\s](?=[^/\n]*\/)/,end:/\//, 1078 | contains:k},M=e=>{const n=b(e,/\//),t=b(/\//,e);return{begin:n,end:t, 1079 | contains:[...k,{scope:"comment",begin:`#(?!.*${t})`,end:/$/}]}},S={ 1080 | scope:"regexp",variants:[M("###"),M("##"),M("#"),x]},A={match:b(/`/,Fe,/`/) 1081 | },C=[A,{className:"variable",match:/\$\d+/},{className:"variable", 1082 | match:`\\$${ze}+`}],T=[{match:/(@|#(un)?)available/,scope:"keyword",starts:{ 1083 | contains:[{begin:/\(/,end:/\)/,keywords:Pe,contains:[...p,f,O]}]}},{ 1084 | scope:"keyword",match:b(/@/,m(...je))},{scope:"meta",match:b(/@/,Fe)}],R={ 1085 | match:d(/\b[A-Z]/),relevance:0,contains:[{className:"type", 1086 | match:b(/(AV|CA|CF|CG|CI|CL|CM|CN|CT|MK|MP|MTK|MTL|NS|SCN|SK|UI|WK|XC)/,ze,"+") 1087 | },{className:"type",match:Ue,relevance:0},{match:/[?!]+/,relevance:0},{ 1088 | match:/\.\.\./,relevance:0},{match:b(/\s+&\s+/,d(Ue)),relevance:0}]},D={ 1089 | begin://,keywords:l,contains:[...a,...c,...T,u,R]};R.contains.push(D) 1090 | ;const I={begin:/\(/,end:/\)/,relevance:0,keywords:l,contains:["self",{ 1091 | match:b(Fe,/\s*:/),keywords:"_|0",relevance:0 1092 | },...a,S,...c,...g,...p,f,O,...C,...T,R]},L={begin://, 1093 | keywords:"repeat each",contains:[...a,R]},B={begin:/\(/,end:/\)/,keywords:l, 1094 | contains:[{begin:m(d(b(Fe,/\s*:/)),d(b(Fe,/\s+/,Fe,/\s*:/))),end:/:/, 1095 | relevance:0,contains:[{className:"keyword",match:/\b_\b/},{className:"params", 1096 | match:Fe}]},...a,...c,...p,f,O,...T,R,I],endsParent:!0,illegal:/["']/},$={ 1097 | match:[/(func|macro)/,/\s+/,m(A.match,Fe,Be)],className:{1:"keyword", 1098 | 3:"title.function"},contains:[L,B,n],illegal:[/\[/,/%/]},z={ 1099 | match:[/\b(?:subscript|init[?!]?)/,/\s*(?=[<(])/],className:{1:"keyword"}, 1100 | contains:[L,B,n],illegal:/\[|%/},F={match:[/operator/,/\s+/,Be],className:{ 1101 | 1:"keyword",3:"title"}},U={begin:[/precedencegroup/,/\s+/,Ue],className:{ 1102 | 1:"keyword",3:"title"},contains:[R],keywords:[...Te,...Ce],end:/}/} 1103 | ;for(const e of O.variants){const n=e.contains.find((e=>"interpol"===e.label)) 1104 | ;n.keywords=l;const t=[...c,...g,...p,f,O,...C];n.contains=[...t,{begin:/\(/, 1105 | end:/\)/,contains:["self",...t]}]}return{name:"Swift",keywords:l, 1106 | contains:[...a,$,z,{beginKeywords:"struct protocol class extension enum actor", 1107 | end:"\\{",excludeEnd:!0,keywords:l,contains:[e.inherit(e.TITLE_MODE,{ 1108 | className:"title.class",begin:/[A-Za-z$_][\u00C0-\u02B80-9A-Za-z$_]*/}),...c] 1109 | },F,U,{beginKeywords:"import",end:/$/,contains:[...a],relevance:0 1110 | },S,...c,...g,...p,f,O,...C,...T,R,I]}},grmr_typescript:e=>{ 1111 | const n=Oe(e),t=_e,a=["any","void","number","boolean","string","object","never","symbol","bigint","unknown"],i={ 1112 | beginKeywords:"namespace",end:/\{/,excludeEnd:!0, 1113 | contains:[n.exports.CLASS_REFERENCE]},r={beginKeywords:"interface",end:/\{/, 1114 | excludeEnd:!0,keywords:{keyword:"interface extends",built_in:a}, 1115 | contains:[n.exports.CLASS_REFERENCE]},s={$pattern:_e, 1116 | keyword:he.concat(["type","namespace","interface","public","private","protected","implements","declare","abstract","readonly","enum","override"]), 1117 | literal:fe,built_in:ve.concat(a),"variable.language":we},o={className:"meta", 1118 | begin:"@"+t},l=(e,n,t)=>{const a=e.contains.findIndex((e=>e.label===n)) 1119 | ;if(-1===a)throw Error("can not find mode to replace");e.contains.splice(a,1,t)} 1120 | ;return Object.assign(n.keywords,s), 1121 | n.exports.PARAMS_CONTAINS.push(o),n.contains=n.contains.concat([o,i,r]), 1122 | l(n,"shebang",e.SHEBANG()),l(n,"use_strict",{className:"meta",relevance:10, 1123 | begin:/^\s*['"]use strict['"]/ 1124 | }),n.contains.find((e=>"func.def"===e.label)).relevance=0,Object.assign(n,{ 1125 | name:"TypeScript",aliases:["ts","tsx","mts","cts"]}),n},grmr_vbnet:e=>{ 1126 | const n=e.regex,t=/\d{1,2}\/\d{1,2}\/\d{4}/,a=/\d{4}-\d{1,2}-\d{1,2}/,i=/(\d|1[012])(:\d+){0,2} *(AM|PM)/,r=/\d{1,2}(:\d{1,2}){1,2}/,s={ 1127 | className:"literal",variants:[{begin:n.concat(/# */,n.either(a,t),/ *#/)},{ 1128 | begin:n.concat(/# */,r,/ *#/)},{begin:n.concat(/# */,i,/ *#/)},{ 1129 | begin:n.concat(/# */,n.either(a,t),/ +/,n.either(i,r),/ *#/)}] 1130 | },o=e.COMMENT(/'''/,/$/,{contains:[{className:"doctag",begin:/<\/?/,end:/>/}] 1131 | }),l=e.COMMENT(null,/$/,{variants:[{begin:/'/},{begin:/([\t ]|^)REM(?=\s)/}]}) 1132 | ;return{name:"Visual Basic .NET",aliases:["vb"],case_insensitive:!0, 1133 | classNameAliases:{label:"symbol"},keywords:{ 1134 | keyword:"addhandler alias aggregate ansi as async assembly auto binary by byref byval call case catch class compare const continue custom declare default delegate dim distinct do each equals else elseif end enum erase error event exit explicit finally for friend from function get global goto group handles if implements imports in inherits interface into iterator join key let lib loop me mid module mustinherit mustoverride mybase myclass namespace narrowing new next notinheritable notoverridable of off on operator option optional order overloads overridable overrides paramarray partial preserve private property protected public raiseevent readonly redim removehandler resume return select set shadows shared skip static step stop structure strict sub synclock take text then throw to try unicode until using when where while widening with withevents writeonly yield", 1135 | built_in:"addressof and andalso await directcast gettype getxmlnamespace is isfalse isnot istrue like mod nameof new not or orelse trycast typeof xor cbool cbyte cchar cdate cdbl cdec cint clng cobj csbyte cshort csng cstr cuint culng cushort", 1136 | type:"boolean byte char date decimal double integer long object sbyte short single string uinteger ulong ushort", 1137 | literal:"true false nothing"}, 1138 | illegal:"//|\\{|\\}|endif|gosub|variant|wend|^\\$ ",contains:[{ 1139 | className:"string",begin:/"(""|[^/n])"C\b/},{className:"string",begin:/"/, 1140 | end:/"/,illegal:/\n/,contains:[{begin:/""/}]},s,{className:"number",relevance:0, 1141 | variants:[{begin:/\b\d[\d_]*((\.[\d_]+(E[+-]?[\d_]+)?)|(E[+-]?[\d_]+))[RFD@!#]?/ 1142 | },{begin:/\b\d[\d_]*((U?[SIL])|[%&])?/},{begin:/&H[\dA-F_]+((U?[SIL])|[%&])?/},{ 1143 | begin:/&O[0-7_]+((U?[SIL])|[%&])?/},{begin:/&B[01_]+((U?[SIL])|[%&])?/}]},{ 1144 | className:"label",begin:/^\w+:/},o,l,{className:"meta", 1145 | begin:/[\t ]*#(const|disable|else|elseif|enable|end|externalsource|if|region)\b/, 1146 | end:/$/,keywords:{ 1147 | keyword:"const disable else elseif enable end externalsource if region then"}, 1148 | contains:[l]}]}},grmr_wasm:e=>{e.regex;const n=e.COMMENT(/\(;/,/;\)/) 1149 | ;return n.contains.push("self"),{name:"WebAssembly",keywords:{$pattern:/[\w.]+/, 1150 | keyword:["anyfunc","block","br","br_if","br_table","call","call_indirect","data","drop","elem","else","end","export","func","global.get","global.set","local.get","local.set","local.tee","get_global","get_local","global","if","import","local","loop","memory","memory.grow","memory.size","module","mut","nop","offset","param","result","return","select","set_global","set_local","start","table","tee_local","then","type","unreachable"] 1151 | },contains:[e.COMMENT(/;;/,/$/),n,{match:[/(?:offset|align)/,/\s*/,/=/], 1152 | className:{1:"keyword",3:"operator"}},{className:"variable",begin:/\$[\w_]+/},{ 1153 | match:/(\((?!;)|\))+/,className:"punctuation",relevance:0},{ 1154 | begin:[/(?:func|call|call_indirect)/,/\s+/,/\$[^\s)]+/],className:{1:"keyword", 1155 | 3:"title.function"}},e.QUOTE_STRING_MODE,{match:/(i32|i64|f32|f64)(?!\.)/, 1156 | className:"type"},{className:"keyword", 1157 | match:/\b(f32|f64|i32|i64)(?:\.(?:abs|add|and|ceil|clz|const|convert_[su]\/i(?:32|64)|copysign|ctz|demote\/f64|div(?:_[su])?|eqz?|extend_[su]\/i32|floor|ge(?:_[su])?|gt(?:_[su])?|le(?:_[su])?|load(?:(?:8|16|32)_[su])?|lt(?:_[su])?|max|min|mul|nearest|neg?|or|popcnt|promote\/f32|reinterpret\/[fi](?:32|64)|rem_[su]|rot[lr]|shl|shr_[su]|store(?:8|16|32)?|sqrt|sub|trunc(?:_[su]\/f(?:32|64))?|wrap\/i64|xor))\b/ 1158 | },{className:"number",relevance:0, 1159 | match:/[+-]?\b(?:\d(?:_?\d)*(?:\.\d(?:_?\d)*)?(?:[eE][+-]?\d(?:_?\d)*)?|0x[\da-fA-F](?:_?[\da-fA-F])*(?:\.[\da-fA-F](?:_?[\da-fA-D])*)?(?:[pP][+-]?\d(?:_?\d)*)?)\b|\binf\b|\bnan(?::0x[\da-fA-F](?:_?[\da-fA-D])*)?\b/ 1160 | }]}},grmr_xml:e=>{ 1161 | const n=e.regex,t=n.concat(/[\p{L}_]/u,n.optional(/[\p{L}0-9_.-]*:/u),/[\p{L}0-9_.-]*/u),a={ 1162 | className:"symbol",begin:/&[a-z]+;|&#[0-9]+;|&#x[a-f0-9]+;/},i={begin:/\s/, 1163 | contains:[{className:"keyword",begin:/#?[a-z_][a-z1-9_-]+/,illegal:/\n/}] 1164 | },r=e.inherit(i,{begin:/\(/,end:/\)/}),s=e.inherit(e.APOS_STRING_MODE,{ 1165 | className:"string"}),o=e.inherit(e.QUOTE_STRING_MODE,{className:"string"}),l={ 1166 | endsWithParent:!0,illegal:/`]+/}]}]}]};return{ 1170 | name:"HTML, XML", 1171 | aliases:["html","xhtml","rss","atom","xjb","xsd","xsl","plist","wsf","svg"], 1172 | case_insensitive:!0,unicodeRegex:!0,contains:[{className:"meta",begin://,relevance:10,contains:[i,o,s,r,{begin:/\[/,end:/\]/,contains:[{ 1174 | className:"meta",begin://,contains:[i,r,o,s]}]}] 1175 | },e.COMMENT(//,{relevance:10}),{begin://, 1176 | relevance:10},a,{className:"meta",end:/\?>/,variants:[{begin:/<\?xml/, 1177 | relevance:10,contains:[o]},{begin:/<\?[a-z][a-z0-9]+/}]},{className:"tag", 1178 | begin:/)/,end:/>/,keywords:{name:"style"},contains:[l],starts:{ 1179 | end:/<\/style>/,returnEnd:!0,subLanguage:["css","xml"]}},{className:"tag", 1180 | begin:/)/,end:/>/,keywords:{name:"script"},contains:[l],starts:{ 1181 | end:/<\/script>/,returnEnd:!0,subLanguage:["javascript","handlebars","xml"]}},{ 1182 | className:"tag",begin:/<>|<\/>/},{className:"tag", 1183 | begin:n.concat(//,/>/,/\s/)))), 1184 | end:/\/?>/,contains:[{className:"name",begin:t,relevance:0,starts:l}]},{ 1185 | className:"tag",begin:n.concat(/<\//,n.lookahead(n.concat(t,/>/))),contains:[{ 1186 | className:"name",begin:t,relevance:0},{begin:/>/,relevance:0,endsParent:!0}]}]} 1187 | },grmr_yaml:e=>{ 1188 | const n="true false yes no null",t="[\\w#;/?:@&=+$,.~*'()[\\]]+",a={ 1189 | className:"string",relevance:0,variants:[{begin:/'/,end:/'/},{begin:/"/,end:/"/ 1190 | },{begin:/\S+/}],contains:[e.BACKSLASH_ESCAPE,{className:"template-variable", 1191 | variants:[{begin:/\{\{/,end:/\}\}/},{begin:/%\{/,end:/\}/}]}]},i=e.inherit(a,{ 1192 | variants:[{begin:/'/,end:/'/},{begin:/"/,end:/"/},{begin:/[^\s,{}[\]]+/}]}),r={ 1193 | end:",",endsWithParent:!0,excludeEnd:!0,keywords:n,relevance:0},s={begin:/\{/, 1194 | end:/\}/,contains:[r],illegal:"\\n",relevance:0},o={begin:"\\[",end:"\\]", 1195 | contains:[r],illegal:"\\n",relevance:0},l=[{className:"attr",variants:[{ 1196 | begin:"\\w[\\w :\\/.-]*:(?=[ \t]|$)"},{begin:'"\\w[\\w :\\/.-]*":(?=[ \t]|$)'},{ 1197 | begin:"'\\w[\\w :\\/.-]*':(?=[ \t]|$)"}]},{className:"meta",begin:"^---\\s*$", 1198 | relevance:10},{className:"string", 1199 | begin:"[\\|>]([1-9]?[+-])?[ ]*\\n( +)[^ ][^\\n]*\\n(\\2[^\\n]+\\n?)*"},{ 1200 | begin:"<%[%=-]?",end:"[%-]?%>",subLanguage:"ruby",excludeBegin:!0,excludeEnd:!0, 1201 | relevance:0},{className:"type",begin:"!\\w+!"+t},{className:"type", 1202 | begin:"!<"+t+">"},{className:"type",begin:"!"+t},{className:"type",begin:"!!"+t 1203 | },{className:"meta",begin:"&"+e.UNDERSCORE_IDENT_RE+"$"},{className:"meta", 1204 | begin:"\\*"+e.UNDERSCORE_IDENT_RE+"$"},{className:"bullet",begin:"-(?=[ ]|$)", 1205 | relevance:0},e.HASH_COMMENT_MODE,{beginKeywords:n,keywords:{literal:n}},{ 1206 | className:"number", 1207 | begin:"\\b[0-9]{4}(-[0-9][0-9]){0,2}([Tt \\t][0-9][0-9]?(:[0-9][0-9]){2})?(\\.[0-9]*)?([ \\t])*(Z|[-+][0-9][0-9]?(:[0-9][0-9])?)?\\b" 1208 | },{className:"number",begin:e.C_NUMBER_RE+"\\b",relevance:0},s,o,a],c=[...l] 1209 | ;return c.pop(),c.push(i),r.contains=c,{name:"YAML",case_insensitive:!0, 1210 | aliases:["yml"],contains:l}}});const He=ae;for(const e of Object.keys(Ke)){ 1211 | const n=e.replace("grmr_","").replace("_","-");He.registerLanguage(n,Ke[e])} 1212 | return He}() 1213 | ;"object"==typeof exports&&"undefined"!=typeof module&&(module.exports=hljs); -------------------------------------------------------------------------------- /pb_public/hooks-dash/lib/highlight.sql.min.js: -------------------------------------------------------------------------------- 1 | /*! `sql` grammar compiled for Highlight.js 11.9.0 */ 2 | (()=>{var e=(()=>{"use strict";return e=>{ 3 | const r=e.regex,t=e.COMMENT("--","$"),n=["true","false","unknown"],a=["bigint","binary","blob","boolean","char","character","clob","date","dec","decfloat","decimal","float","int","integer","interval","nchar","nclob","national","numeric","real","row","smallint","time","timestamp","varchar","varying","varbinary"],i=["abs","acos","array_agg","asin","atan","avg","cast","ceil","ceiling","coalesce","corr","cos","cosh","count","covar_pop","covar_samp","cume_dist","dense_rank","deref","element","exp","extract","first_value","floor","json_array","json_arrayagg","json_exists","json_object","json_objectagg","json_query","json_table","json_table_primitive","json_value","lag","last_value","lead","listagg","ln","log","log10","lower","max","min","mod","nth_value","ntile","nullif","percent_rank","percentile_cont","percentile_disc","position","position_regex","power","rank","regr_avgx","regr_avgy","regr_count","regr_intercept","regr_r2","regr_slope","regr_sxx","regr_sxy","regr_syy","row_number","sin","sinh","sqrt","stddev_pop","stddev_samp","substring","substring_regex","sum","tan","tanh","translate","translate_regex","treat","trim","trim_array","unnest","upper","value_of","var_pop","var_samp","width_bucket"],s=["create table","insert into","primary key","foreign key","not null","alter table","add constraint","grouping sets","on overflow","character set","respect nulls","ignore nulls","nulls first","nulls last","depth first","breadth first"],o=i,c=["abs","acos","all","allocate","alter","and","any","are","array","array_agg","array_max_cardinality","as","asensitive","asin","asymmetric","at","atan","atomic","authorization","avg","begin","begin_frame","begin_partition","between","bigint","binary","blob","boolean","both","by","call","called","cardinality","cascaded","case","cast","ceil","ceiling","char","char_length","character","character_length","check","classifier","clob","close","coalesce","collate","collect","column","commit","condition","connect","constraint","contains","convert","copy","corr","corresponding","cos","cosh","count","covar_pop","covar_samp","create","cross","cube","cume_dist","current","current_catalog","current_date","current_default_transform_group","current_path","current_role","current_row","current_schema","current_time","current_timestamp","current_path","current_role","current_transform_group_for_type","current_user","cursor","cycle","date","day","deallocate","dec","decimal","decfloat","declare","default","define","delete","dense_rank","deref","describe","deterministic","disconnect","distinct","double","drop","dynamic","each","element","else","empty","end","end_frame","end_partition","end-exec","equals","escape","every","except","exec","execute","exists","exp","external","extract","false","fetch","filter","first_value","float","floor","for","foreign","frame_row","free","from","full","function","fusion","get","global","grant","group","grouping","groups","having","hold","hour","identity","in","indicator","initial","inner","inout","insensitive","insert","int","integer","intersect","intersection","interval","into","is","join","json_array","json_arrayagg","json_exists","json_object","json_objectagg","json_query","json_table","json_table_primitive","json_value","lag","language","large","last_value","lateral","lead","leading","left","like","like_regex","listagg","ln","local","localtime","localtimestamp","log","log10","lower","match","match_number","match_recognize","matches","max","member","merge","method","min","minute","mod","modifies","module","month","multiset","national","natural","nchar","nclob","new","no","none","normalize","not","nth_value","ntile","null","nullif","numeric","octet_length","occurrences_regex","of","offset","old","omit","on","one","only","open","or","order","out","outer","over","overlaps","overlay","parameter","partition","pattern","per","percent","percent_rank","percentile_cont","percentile_disc","period","portion","position","position_regex","power","precedes","precision","prepare","primary","procedure","ptf","range","rank","reads","real","recursive","ref","references","referencing","regr_avgx","regr_avgy","regr_count","regr_intercept","regr_r2","regr_slope","regr_sxx","regr_sxy","regr_syy","release","result","return","returns","revoke","right","rollback","rollup","row","row_number","rows","running","savepoint","scope","scroll","search","second","seek","select","sensitive","session_user","set","show","similar","sin","sinh","skip","smallint","some","specific","specifictype","sql","sqlexception","sqlstate","sqlwarning","sqrt","start","static","stddev_pop","stddev_samp","submultiset","subset","substring","substring_regex","succeeds","sum","symmetric","system","system_time","system_user","table","tablesample","tan","tanh","then","time","timestamp","timezone_hour","timezone_minute","to","trailing","translate","translate_regex","translation","treat","trigger","trim","trim_array","true","truncate","uescape","union","unique","unknown","unnest","update","upper","user","using","value","values","value_of","var_pop","var_samp","varbinary","varchar","varying","versioning","when","whenever","where","width_bucket","window","with","within","without","year","add","asc","collation","desc","final","first","last","view"].filter((e=>!i.includes(e))),l={ 4 | begin:r.concat(/\b/,r.either(...o),/\s*\(/),relevance:0,keywords:{built_in:o}} 5 | ;return{name:"SQL",case_insensitive:!0,illegal:/[{}]|<\//,keywords:{ 6 | $pattern:/\b[\w\.]+/,keyword:((e,{exceptions:r,when:t}={})=>{const n=t 7 | ;return r=r||[],e.map((e=>e.match(/\|\d+$/)||r.includes(e)?e:n(e)?e+"|0":e)) 8 | })(c,{when:e=>e.length<3}),literal:n,type:a, 9 | built_in:["current_catalog","current_date","current_default_transform_group","current_path","current_role","current_schema","current_transform_group_for_type","current_user","session_user","system_time","system_user","current_time","localtime","current_timestamp","localtimestamp"] 10 | },contains:[{begin:r.either(...s),relevance:0,keywords:{$pattern:/[\w\.]+/, 11 | keyword:c.concat(s),literal:n,type:a}},{className:"type", 12 | begin:r.either("double precision","large object","with timezone","without timezone") 13 | },l,{className:"variable",begin:/@[a-z0-9][a-z0-9_]*/},{className:"string", 14 | variants:[{begin:/'/,end:/'/,contains:[{begin:/''/}]}]},{begin:/"/,end:/"/, 15 | contains:[{begin:/""/}]},e.C_NUMBER_MODE,e.C_BLOCK_COMMENT_MODE,t,{ 16 | className:"operator",begin:/[-+*/=%^~]|&&?|\|\|?|!=?|<(?:=>?|<|>)?|>[>=]?/, 17 | relevance:0}]}}})();hljs.registerLanguage("sql",e)})(); -------------------------------------------------------------------------------- /pb_public/hooks-dash/lib/highlight.theme.min.css: -------------------------------------------------------------------------------- 1 | pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}.hljs{color:#383a42;background:#fafafa}.hljs-comment,.hljs-quote{color:#a0a1a7;font-style:italic}.hljs-doctag,.hljs-formula,.hljs-keyword{color:#a626a4}.hljs-deletion,.hljs-name,.hljs-section,.hljs-selector-tag,.hljs-subst{color:#e45649}.hljs-literal{color:#0184bb}.hljs-addition,.hljs-attribute,.hljs-meta .hljs-string,.hljs-regexp,.hljs-string{color:#50a14f}.hljs-attr,.hljs-number,.hljs-selector-attr,.hljs-selector-class,.hljs-selector-pseudo,.hljs-template-variable,.hljs-type,.hljs-variable{color:#986801}.hljs-bullet,.hljs-link,.hljs-meta,.hljs-selector-id,.hljs-symbol,.hljs-title{color:#4078f2}.hljs-built_in,.hljs-class .hljs-title,.hljs-title.class_{color:#c18401}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700}.hljs-link{text-decoration:underline} --------------------------------------------------------------------------------