diff --git a/src/Blog/Components/Layout/MainLayout.razor.css b/src/Blog/Components/Layout/MainLayout.razor.css
index 0431dce..b194dfa 100644
--- a/src/Blog/Components/Layout/MainLayout.razor.css
+++ b/src/Blog/Components/Layout/MainLayout.razor.css
@@ -6,10 +6,17 @@
max-width: 42rem;
padding: 1.25rem;
width: 100%;
+ gap: 4rem;
+}
+
+main {
+ display: flex;
+ flex-direction: column;
+ width: 100%;
}
#blazor-error-ui {
- background: lightyellow;
+ background: var(--color-background-soft);
bottom: 0;
box-shadow: 0 -1px 2px rgba(0, 0, 0, 0.2);
display: none;
diff --git a/src/Blog/Components/Pages/Error.razor b/src/Blog/Components/Pages/Error.razor
index 576cc2d..c04dc20 100644
--- a/src/Blog/Components/Pages/Error.razor
+++ b/src/Blog/Components/Pages/Error.razor
@@ -3,34 +3,25 @@
Error
-
Error.
-
An error occurred while processing your request.
+
+
Error
+
Sorry it's me, not you. It looks like an unhandled error occurred while processing your request.
-@if (ShowRequestId)
-{
+ @if (ShowRequestId)
+ {
- Request ID: @RequestId
+ Request ID: @RequestId
-}
-
-
Development Mode
-
- Swapping to Development environment will display more detailed information about the error that occurred.
-
-
- The Development environment shouldn't be enabled for deployed applications.
- It can result in displaying sensitive information from exceptions to end users.
- For local debugging, enable the Development environment by setting the ASPNETCORE_ENVIRONMENT environment variable to Development
- and restarting the app.
-
+ }
+
@code{
- [CascadingParameter]
- private HttpContext? HttpContext { get; set; }
+ [CascadingParameter]
+ private HttpContext? HttpContext { get; set; }
- private string? RequestId { get; set; }
- private bool ShowRequestId => !string.IsNullOrEmpty(RequestId);
+ private string? RequestId { get; set; }
+ private bool ShowRequestId => !string.IsNullOrEmpty(RequestId);
- protected override void OnInitialized() =>
- RequestId = Activity.Current?.Id ?? HttpContext?.TraceIdentifier;
+ protected override void OnInitialized() =>
+ RequestId = Activity.Current?.Id ?? HttpContext?.TraceIdentifier;
}
diff --git a/src/Blog/Components/Pages/Error.razor.css b/src/Blog/Components/Pages/Error.razor.css
new file mode 100644
index 0000000..3278828
--- /dev/null
+++ b/src/Blog/Components/Pages/Error.razor.css
@@ -0,0 +1,5 @@
+.container {
+ display: flex;
+ flex-direction: column;
+ gap: 1rem;
+}
\ No newline at end of file
diff --git a/src/Blog/Components/Pages/Home.razor b/src/Blog/Components/Pages/Home.razor
index 1f8286f..6cd10d5 100644
--- a/src/Blog/Components/Pages/Home.razor
+++ b/src/Blog/Components/Pages/Home.razor
@@ -3,9 +3,8 @@
journal - A blog by Stevan Freeborn
-
+
-
Hello, world!
-
-Welcome to your new app.
+
Posts
+
\ No newline at end of file
diff --git a/src/Blog/Components/Pages/_Error404.razor b/src/Blog/Components/Pages/_Error404.razor
new file mode 100644
index 0000000..17a7d91
--- /dev/null
+++ b/src/Blog/Components/Pages/_Error404.razor
@@ -0,0 +1,8 @@
+
+@page "/Error/404"
+
+
+
Not Found
+
Hmm...it doesn't look like the page you were looking for exists, but we did find this adorable corgi.
+

+
\ No newline at end of file
diff --git a/src/Blog/Components/Pages/_Error404.razor.css b/src/Blog/Components/Pages/_Error404.razor.css
new file mode 100644
index 0000000..3c4c9a5
--- /dev/null
+++ b/src/Blog/Components/Pages/_Error404.razor.css
@@ -0,0 +1,9 @@
+.container {
+ display: flex;
+ flex-direction: column;
+ gap: 1rem;
+
+ & img {
+ border-radius: 0.5rem;
+ }
+}
\ No newline at end of file
diff --git a/src/Blog/Components/Posts/Feed.razor b/src/Blog/Components/Posts/Feed.razor
new file mode 100644
index 0000000..f4be89a
--- /dev/null
+++ b/src/Blog/Components/Posts/Feed.razor
@@ -0,0 +1,34 @@
+@namespace Blog.Components
+@inject IPostService postService
+@inject IJSRuntime JS
+
+ @if (posts.Count == 0)
+ {
+
+
Looks like writers block. Check back later.
+
+ }
+ else
+ {
+
+ }
+
+@code {
+ private List
posts = [];
+
+ protected override async Task OnInitializedAsync()
+ {
+ posts = await postService.GetPostsAsync();
+ }
+}
\ No newline at end of file
diff --git a/src/Blog/Components/Posts/Feed.razor.css b/src/Blog/Components/Posts/Feed.razor.css
new file mode 100644
index 0000000..f3beb49
--- /dev/null
+++ b/src/Blog/Components/Posts/Feed.razor.css
@@ -0,0 +1,46 @@
+.container {
+ display: flex;
+ flex-direction: column;
+ width: 100%;
+ gap: 2rem;
+
+ & a {
+ padding: 1rem;
+ border-radius: 1rem;
+ background-color: var(--color-background-soft);
+ transition-property: transform;
+ transition-duration: 100ms;
+ transition-timing-function: ease-in-out
+ }
+
+ & a:active {
+ transform: scale(0.95)
+ }
+
+ & article {
+ display: flex;
+ flex-direction: column;
+ gap: 0.25rem;
+
+ & h3 {
+ background: linear-gradient(to right top, #db3e3e, #df3741, #e32e44, #e72347, #eb124b);
+ background-clip: text;
+ -webkit-background-clip: text;
+ -webkit-text-fill-color: transparent;
+ font-size: 2rem;
+ font-weight: 900;
+ }
+
+ & .date {
+ font-size: 0.85rem;
+ }
+
+ & h3,
+ & .date,
+ & .lead {
+ text-wrap: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/Blog/Components/Routes.razor b/src/Blog/Components/Routes.razor
index 3b4a0a0..143f0b9 100644
--- a/src/Blog/Components/Routes.razor
+++ b/src/Blog/Components/Routes.razor
@@ -1,6 +1,6 @@
-
+
diff --git a/src/Blog/GlobalUsings.cs b/src/Blog/GlobalUsings.cs
new file mode 100644
index 0000000..ed008cf
--- /dev/null
+++ b/src/Blog/GlobalUsings.cs
@@ -0,0 +1,11 @@
+global using System.IO.Abstractions;
+global using System.Text.Json;
+
+global using Blog.Components;
+global using Blog.Posts;
+
+global using Markdig;
+global using Markdig.Prism;
+global using Markdig.Syntax;
+
+global using Microsoft.Extensions.Options;
diff --git a/src/Blog/Posts/FilePostService.cs b/src/Blog/Posts/FilePostService.cs
new file mode 100644
index 0000000..072969f
--- /dev/null
+++ b/src/Blog/Posts/FilePostService.cs
@@ -0,0 +1,108 @@
+namespace Blog.Posts;
+
+class FilePostService(
+ IOptions options,
+ IFileSystem fileSystem,
+ ILogger logger
+) : IPostService
+{
+ private static readonly JsonSerializerOptions JsonSerializerOptions = new()
+ {
+ PropertyNameCaseInsensitive = true,
+ AllowTrailingCommas = true,
+ };
+
+ private static readonly MarkdownPipeline MarkdownPipeline = new MarkdownPipelineBuilder()
+ .UseAdvancedExtensions()
+ .UsePrism()
+ .Build();
+
+ private const string MetaFence = "meta";
+ private const string IndexFile = "index.md";
+
+ private readonly FilePostServiceOptions _options = options.Value;
+ private readonly IFileSystem _fileSystem = fileSystem;
+ private readonly ILogger _logger = logger;
+
+ private static (string? metadata, MarkdownDocument document) ParsePost(string postText)
+ {
+ var markDoc = Markdown.Parse(postText, MarkdownPipeline);
+ var postMetadata = markDoc
+ .Where(
+ x =>
+ x is FencedCodeBlock fencedCodeBlock &&
+ fencedCodeBlock.Arguments is not null &&
+ fencedCodeBlock.Arguments.Contains(MetaFence)
+ )
+ .Select(x => x as FencedCodeBlock)
+ .FirstOrDefault();
+
+ if (postMetadata is not null)
+ {
+ markDoc.Remove(postMetadata);
+ }
+
+ var metaContent = postMetadata?.Lines.ToString();
+
+ return (metaContent, markDoc);
+ }
+
+ public async Task> GetPostsAsync()
+ {
+ var posts = new List();
+
+ if (_fileSystem.Directory.Exists(_options.PostsDirectory) is false)
+ {
+ return posts;
+ }
+
+ var subDirectories = _fileSystem.Directory.GetDirectories(_options.PostsDirectory);
+
+ if (subDirectories.Length is 0)
+ {
+ return posts;
+ }
+
+ foreach (var subDirectory in subDirectories)
+ {
+ try
+ {
+ var indexFilePath = _fileSystem.Path.Combine(subDirectory, IndexFile);
+
+ if (_fileSystem.File.Exists(indexFilePath) is false)
+ {
+ continue;
+ }
+
+ var postText = await _fileSystem.File.ReadAllTextAsync(indexFilePath);
+
+ var (metaContent, document) = ParsePost(postText);
+
+ if (metaContent is null || document.Count is 0)
+ {
+ continue;
+ }
+
+ var post = JsonSerializer.Deserialize(metaContent, JsonSerializerOptions);
+
+ if (post is null || post.IsPublished is false)
+ {
+ continue;
+ }
+
+ var finalPost = post with
+ {
+ Slug = _fileSystem.Path.GetFileName(subDirectory),
+ };
+
+ posts.Add(finalPost);
+ }
+ catch (Exception ex)
+ {
+ _logger.LogError(ex, "Error while processing post in {SubDirectory}", subDirectory);
+ }
+ }
+
+ return [.. posts.OrderByDescending(x => x.PublishedAt)];
+ }
+}
\ No newline at end of file
diff --git a/src/Blog/Posts/FilePostServiceOptions.cs b/src/Blog/Posts/FilePostServiceOptions.cs
new file mode 100644
index 0000000..478b551
--- /dev/null
+++ b/src/Blog/Posts/FilePostServiceOptions.cs
@@ -0,0 +1,17 @@
+namespace Blog.Posts;
+
+class FilePostServiceOptions
+{
+ public string PostsDirectory { get; set; } = string.Empty;
+}
+
+class FilePostServiceOptionsSetup(IConfiguration configuration) : IConfigureOptions
+{
+ private const string SectionName = nameof(FilePostServiceOptions);
+ private readonly IConfiguration _configuration = configuration;
+
+ public void Configure(FilePostServiceOptions options)
+ {
+ _configuration.GetSection(SectionName).Bind(options);
+ }
+}
\ No newline at end of file
diff --git a/src/Blog/Posts/IPostService.cs b/src/Blog/Posts/IPostService.cs
new file mode 100644
index 0000000..def70c0
--- /dev/null
+++ b/src/Blog/Posts/IPostService.cs
@@ -0,0 +1,6 @@
+namespace Blog.Posts;
+
+interface IPostService
+{
+ Task> GetPostsAsync();
+}
\ No newline at end of file
diff --git a/src/Blog/Posts/Post.cs b/src/Blog/Posts/Post.cs
new file mode 100644
index 0000000..fe170b6
--- /dev/null
+++ b/src/Blog/Posts/Post.cs
@@ -0,0 +1,15 @@
+namespace Blog.Posts;
+
+record Post
+{
+ public string Title { get; init; } = string.Empty;
+ public string Lead { get; init; } = string.Empty;
+ public bool IsPublished { get; init; } = false;
+ public DateTime PublishedAt { get; init; }
+ public string Slug { get; init; } = string.Empty;
+}
+
+record PostWithContent : Post
+{
+ public string Content { get; init; } = string.Empty;
+}
\ No newline at end of file
diff --git a/src/Blog/Program.cs b/src/Blog/Program.cs
index bc42976..0ee5596 100644
--- a/src/Blog/Program.cs
+++ b/src/Blog/Program.cs
@@ -1,7 +1,9 @@
-using Blog.Components;
-
var builder = WebApplication.CreateBuilder(args);
+builder.Services.ConfigureOptions();
+builder.Services.AddSingleton();
+builder.Services.AddScoped();
+
builder.Services
.AddRazorComponents()
.AddInteractiveServerComponents();
@@ -23,6 +25,8 @@ app
.MapRazorComponents()
.AddInteractiveServerRenderMode();
+app.UseStatusCodePagesWithRedirects("/Error/{0}");
+
app.Run();
-public partial class Program {}
\ No newline at end of file
+public partial class Program { }
\ No newline at end of file
diff --git a/src/Blog/appsettings.example.json b/src/Blog/appsettings.example.json
index acae0aa..d4be169 100644
--- a/src/Blog/appsettings.example.json
+++ b/src/Blog/appsettings.example.json
@@ -1,3 +1,7 @@
{
- "Urls": "https://localhost:4500;http://localhost:4501"
+ "Urls": "https://localhost:4500;http://localhost:4501",
+ "FilePostServiceOptions": {
+ "PostsDirectory": "wwwroot/posts"
+ },
+ "DetailedErrors": "true"
}
\ No newline at end of file
diff --git a/src/Blog/example.env.development b/src/Blog/example.env.development
index fb80ac5..d1e6fbc 100644
--- a/src/Blog/example.env.development
+++ b/src/Blog/example.env.development
@@ -12,4 +12,6 @@ ASPNETCORE_Kestrel__Certificates__Default__Password=
# The first url in the list is the port that the browser will attempt to connect to
# The second url in the list is the port that the dotnet watch process will be running
# on in the container. This is necessary for hot reload to work.
-DOTNET_WATCH_AUTO_RELOAD_WS_HOSTNAME=localhost:1234;http://0.0.0.0:5555;http://127.0.0.1
\ No newline at end of file
+DOTNET_WATCH_AUTO_RELOAD_WS_HOSTNAME=localhost:1234;http://0.0.0.0:5555;http://127.0.0.1
+DETAILED_ERRORS=true
+DOTNET_WATCH_RESTART_ON_RUDE_EDIT=true
\ No newline at end of file
diff --git a/src/Blog/wwwroot/app.css b/src/Blog/wwwroot/app.css
index 16a6d49..87d0436 100644
--- a/src/Blog/wwwroot/app.css
+++ b/src/Blog/wwwroot/app.css
@@ -41,6 +41,39 @@ table {
/* Site */
+:root {
+ --primary-white: #ffffff;
+ --secondary-white: #f8f8f8;
+ --primary-black: #121212;
+ --secondary-black: #1e1e1e;
+}
+
+:root {
+ --color-background: var(--primary-white);
+ --color-background-soft: var(--secondary-white);
+ --color-text: var(--primary-black);
+}
+
+@media (prefers-color-scheme: dark) {
+ :root {
+ --color-background: var(--primary-black);
+ --color-background-soft: var(--secondary-black);
+ --color-text: var(--primary-white);
+ }
+}
+
+.sr-only {
+ position: absolute;
+ width: 1px;
+ height: 1px;
+ padding: 0;
+ margin: -1px;
+ overflow: hidden;
+ clip: rect(0, 0, 0, 0);
+ white-space: nowrap;
+ border-width: 0;
+}
+
html,
body {
height: 100%;
@@ -56,9 +89,11 @@ body {
text-rendering: optimizeLegibility;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
+ background-color: var(--color-background);
+ color: var(--color-text);
}
-h1:focus {
+h2:focus {
outline: none;
}
diff --git a/src/Blog/wwwroot/favicon.ico b/src/Blog/wwwroot/favicon.ico
index ec4c0e3..794347d 100644
Binary files a/src/Blog/wwwroot/favicon.ico and b/src/Blog/wwwroot/favicon.ico differ
diff --git a/src/Blog/wwwroot/not-found-corgi.jpg b/src/Blog/wwwroot/not-found-corgi.jpg
new file mode 100644
index 0000000..8d58950
Binary files /dev/null and b/src/Blog/wwwroot/not-found-corgi.jpg differ
diff --git a/src/Blog/wwwroot/prism.css b/src/Blog/wwwroot/prism.css
new file mode 100644
index 0000000..80c92ff
--- /dev/null
+++ b/src/Blog/wwwroot/prism.css
@@ -0,0 +1,114 @@
+/* PrismJS 1.29.0
+https://prismjs.com/download.html#themes=prism-tomorrow&languages=markup+css+clike+javascript+abap+abnf+actionscript+ada+agda+al+antlr4+apacheconf+apex+apl+applescript+aql+arduino+arff+armasm+arturo+asciidoc+aspnet+asm6502+asmatmel+autohotkey+autoit+avisynth+avro-idl+awk+bash+basic+batch+bbcode+bbj+bicep+birb+bison+bnf+bqn+brainfuck+brightscript+bro+bsl+c+csharp+cpp+cfscript+chaiscript+cil+cilkc+cilkcpp+clojure+cmake+cobol+coffeescript+concurnas+csp+cooklang+coq+crystal+css-extras+csv+cue+cypher+d+dart+dataweave+dax+dhall+diff+django+dns-zone-file+docker+dot+ebnf+editorconfig+eiffel+ejs+elixir+elm+etlua+erb+erlang+excel-formula+fsharp+factor+false+firestore-security-rules+flow+fortran+ftl+gml+gap+gcode+gdscript+gedcom+gettext+gherkin+git+glsl+gn+linker-script+go+go-module+gradle+graphql+groovy+haml+handlebars+haskell+haxe+hcl+hlsl+hoon+http+hpkp+hsts+ichigojam+icon+icu-message-format+idris+ignore+inform7+ini+io+j+java+javadoc+javadoclike+javastacktrace+jexl+jolie+jq+jsdoc+js-extras+json+json5+jsonp+jsstacktrace+js-templates+julia+keepalived+keyman+kotlin+kumir+kusto+latex+latte+less+lilypond+liquid+lisp+livescript+llvm+log+lolcode+lua+magma+makefile+markdown+markup-templating+mata+matlab+maxscript+mel+mermaid+metafont+mizar+mongodb+monkey+moonscript+n1ql+n4js+nand2tetris-hdl+naniscript+nasm+neon+nevod+nginx+nim+nix+nsis+objectivec+ocaml+odin+opencl+openqasm+oz+parigp+parser+pascal+pascaligo+psl+pcaxis+peoplecode+perl+php+phpdoc+php-extras+plant-uml+plsql+powerquery+powershell+processing+prolog+promql+properties+protobuf+pug+puppet+pure+purebasic+purescript+python+qsharp+q+qml+qore+r+racket+cshtml+jsx+tsx+reason+regex+rego+renpy+rescript+rest+rip+roboconf+robotframework+ruby+rust+sas+sass+scss+scala+scheme+shell-session+smali+smalltalk+smarty+sml+solidity+solution-file+soy+sparql+splunk-spl+sqf+sql+squirrel+stan+stata+iecst+stylus+supercollider+swift+systemd+t4-templating+t4-cs+t4-vb+tap+tcl+tt2+textile+toml+tremor+turtle+twig+typescript+typoscript+unrealscript+uorazor+uri+v+vala+vbnet+velocity+verilog+vhdl+vim+visual-basic+warpscript+wasm+web-idl+wgsl+wiki+wolfram+wren+xeora+xml-doc+xojo+xquery+yaml+yang+zig */
+code[class*=language-],
+pre[class*=language-] {
+ color: #ccc;
+ background: 0 0;
+ font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;
+ font-size: 1em;
+ text-align: left;
+ white-space: pre;
+ word-spacing: normal;
+ word-break: normal;
+ word-wrap: normal;
+ line-height: 1.5;
+ -moz-tab-size: 4;
+ -o-tab-size: 4;
+ tab-size: 4;
+ -webkit-hyphens: none;
+ -moz-hyphens: none;
+ -ms-hyphens: none;
+ hyphens: none
+}
+
+pre[class*=language-] {
+ padding: 1em;
+ margin: .5em 0;
+ overflow: auto
+}
+
+:not(pre)>code[class*=language-],
+pre[class*=language-] {
+ background: #2d2d2d
+}
+
+:not(pre)>code[class*=language-] {
+ padding: .1em;
+ border-radius: .3em;
+ white-space: normal
+}
+
+.token.block-comment,
+.token.cdata,
+.token.comment,
+.token.doctype,
+.token.prolog {
+ color: #999
+}
+
+.token.punctuation {
+ color: #ccc
+}
+
+.token.attr-name,
+.token.deleted,
+.token.namespace,
+.token.tag {
+ color: #e2777a
+}
+
+.token.function-name {
+ color: #6196cc
+}
+
+.token.boolean,
+.token.function,
+.token.number {
+ color: #f08d49
+}
+
+.token.class-name,
+.token.constant,
+.token.property,
+.token.symbol {
+ color: #f8c555
+}
+
+.token.atrule,
+.token.builtin,
+.token.important,
+.token.keyword,
+.token.selector {
+ color: #cc99cd
+}
+
+.token.attr-value,
+.token.char,
+.token.regex,
+.token.string,
+.token.variable {
+ color: #7ec699
+}
+
+.token.entity,
+.token.operator,
+.token.url {
+ color: #67cdcc
+}
+
+.token.bold,
+.token.important {
+ font-weight: 700
+}
+
+.token.italic {
+ font-style: italic
+}
+
+.token.entity {
+ cursor: help
+}
+
+.token.inserted {
+ color: green
+}
\ No newline at end of file
diff --git a/src/Blog/wwwroot/prism.js b/src/Blog/wwwroot/prism.js
new file mode 100644
index 0000000..44bb63f
--- /dev/null
+++ b/src/Blog/wwwroot/prism.js
@@ -0,0 +1,15391 @@
+/* PrismJS 1.29.0
+https://prismjs.com/download.html#themes=prism&languages=markup+css+clike+javascript+abap+abnf+actionscript+ada+agda+al+antlr4+apacheconf+apex+apl+applescript+aql+arduino+arff+armasm+arturo+asciidoc+aspnet+asm6502+asmatmel+autohotkey+autoit+avisynth+avro-idl+awk+bash+basic+batch+bbcode+bbj+bicep+birb+bison+bnf+bqn+brainfuck+brightscript+bro+bsl+c+csharp+cpp+cfscript+chaiscript+cil+cilkc+cilkcpp+clojure+cmake+cobol+coffeescript+concurnas+csp+cooklang+coq+crystal+css-extras+csv+cue+cypher+d+dart+dataweave+dax+dhall+diff+django+dns-zone-file+docker+dot+ebnf+editorconfig+eiffel+ejs+elixir+elm+etlua+erb+erlang+excel-formula+fsharp+factor+false+firestore-security-rules+flow+fortran+ftl+gml+gap+gcode+gdscript+gedcom+gettext+gherkin+git+glsl+gn+linker-script+go+go-module+gradle+graphql+groovy+haml+handlebars+haskell+haxe+hcl+hlsl+hoon+http+hpkp+hsts+ichigojam+icon+icu-message-format+idris+ignore+inform7+ini+io+j+java+javadoc+javadoclike+javastacktrace+jexl+jolie+jq+jsdoc+js-extras+json+json5+jsonp+jsstacktrace+js-templates+julia+keepalived+keyman+kotlin+kumir+kusto+latex+latte+less+lilypond+liquid+lisp+livescript+llvm+log+lolcode+lua+magma+makefile+markdown+markup-templating+mata+matlab+maxscript+mel+mermaid+metafont+mizar+mongodb+monkey+moonscript+n1ql+n4js+nand2tetris-hdl+naniscript+nasm+neon+nevod+nginx+nim+nix+nsis+objectivec+ocaml+odin+opencl+openqasm+oz+parigp+parser+pascal+pascaligo+psl+pcaxis+peoplecode+perl+php+phpdoc+php-extras+plant-uml+plsql+powerquery+powershell+processing+prolog+promql+properties+protobuf+pug+puppet+pure+purebasic+purescript+python+qsharp+q+qml+qore+r+racket+cshtml+jsx+tsx+reason+regex+rego+renpy+rescript+rest+rip+roboconf+robotframework+ruby+rust+sas+sass+scss+scala+scheme+shell-session+smali+smalltalk+smarty+sml+solidity+solution-file+soy+sparql+splunk-spl+sqf+sql+squirrel+stan+stata+iecst+stylus+supercollider+swift+systemd+t4-templating+t4-cs+t4-vb+tap+tcl+tt2+textile+toml+tremor+turtle+twig+typescript+typoscript+unrealscript+uorazor+uri+v+vala+vbnet+velocity+verilog+vhdl+vim+visual-basic+warpscript+wasm+web-idl+wgsl+wiki+wolfram+wren+xeora+xml-doc+xojo+xquery+yaml+yang+zig */
+var _self =
+ "undefined" != typeof window
+ ? window
+ : "undefined" != typeof WorkerGlobalScope &&
+ self instanceof WorkerGlobalScope
+ ? self
+ : {},
+ Prism = (function (e) {
+ var n = /(?:^|\s)lang(?:uage)?-([\w-]+)(?=\s|$)/i,
+ t = 0,
+ r = {},
+ a = {
+ manual: e.Prism && e.Prism.manual,
+ disableWorkerMessageHandler:
+ e.Prism && e.Prism.disableWorkerMessageHandler,
+ util: {
+ encode: function e(n) {
+ return n instanceof i
+ ? new i(n.type, e(n.content), n.alias)
+ : Array.isArray(n)
+ ? n.map(e)
+ : n
+ .replace(/&/g, "&")
+ .replace(/= g.reach);
+ A += w.value.length, w = w.next
+ ) {
+ var E = w.value;
+ if (n.length > e.length) return;
+ if (!(E instanceof i)) {
+ var P,
+ L = 1;
+ if (y) {
+ if (!(P = l(b, A, e, m)) || P.index >= e.length) break;
+ var S = P.index,
+ O = P.index + P[0].length,
+ j = A;
+ for (j += w.value.length; S >= j; )
+ j += (w = w.next).value.length;
+ if (((A = j -= w.value.length), w.value instanceof i))
+ continue;
+ for (
+ var C = w;
+ C !== n.tail && (j < O || "string" == typeof C.value);
+ C = C.next
+ )
+ L++, (j += C.value.length);
+ L--, (E = e.slice(A, j)), (P.index -= A);
+ } else if (!(P = l(b, 0, E, m))) continue;
+ S = P.index;
+ var N = P[0],
+ _ = E.slice(0, S),
+ M = E.slice(S + N.length),
+ W = A + E.length;
+ g && W > g.reach && (g.reach = W);
+ var z = w.prev;
+ if (
+ (_ && ((z = u(n, z, _)), (A += _.length)),
+ c(n, z, L),
+ (w = u(n, z, new i(f, p ? a.tokenize(N, p) : N, k, N))),
+ M && u(n, w, M),
+ L > 1)
+ ) {
+ var I = { cause: f + "," + d, reach: W };
+ o(e, n, t, w.prev, A, I),
+ g && I.reach > g.reach && (g.reach = I.reach);
+ }
+ }
+ }
+ }
+ }
+ }
+ function s() {
+ var e = { value: null, prev: null, next: null },
+ n = { value: null, prev: e, next: null };
+ (e.next = n), (this.head = e), (this.tail = n), (this.length = 0);
+ }
+ function u(e, n, t) {
+ var r = n.next,
+ a = { value: t, prev: n, next: r };
+ return (n.next = a), (r.prev = a), e.length++, a;
+ }
+ function c(e, n, t) {
+ for (var r = n.next, a = 0; a < t && r !== e.tail; a++) r = r.next;
+ (n.next = r), (r.prev = n), (e.length -= a);
+ }
+ if (
+ ((e.Prism = a),
+ (i.stringify = function e(n, t) {
+ if ("string" == typeof n) return n;
+ if (Array.isArray(n)) {
+ var r = "";
+ return (
+ n.forEach(function (n) {
+ r += e(n, t);
+ }),
+ r
+ );
+ }
+ var i = {
+ type: n.type,
+ content: e(n.content, t),
+ tag: "span",
+ classes: ["token", n.type],
+ attributes: {},
+ language: t,
+ },
+ l = n.alias;
+ l &&
+ (Array.isArray(l)
+ ? Array.prototype.push.apply(i.classes, l)
+ : i.classes.push(l)),
+ a.hooks.run("wrap", i);
+ var o = "";
+ for (var s in i.attributes)
+ o +=
+ " " +
+ s +
+ '="' +
+ (i.attributes[s] || "").replace(/"/g, """) +
+ '"';
+ return (
+ "<" +
+ i.tag +
+ ' class="' +
+ i.classes.join(" ") +
+ '"' +
+ o +
+ ">" +
+ i.content +
+ "" +
+ i.tag +
+ ">"
+ );
+ }),
+ !e.document)
+ )
+ return e.addEventListener
+ ? (a.disableWorkerMessageHandler ||
+ e.addEventListener(
+ "message",
+ function (n) {
+ var t = JSON.parse(n.data),
+ r = t.language,
+ i = t.code,
+ l = t.immediateClose;
+ e.postMessage(a.highlight(i, a.languages[r], r)),
+ l && e.close();
+ },
+ !1
+ ),
+ a)
+ : a;
+ var g = a.util.currentScript();
+ function f() {
+ a.manual || a.highlightAll();
+ }
+ if (
+ (g &&
+ ((a.filename = g.src),
+ g.hasAttribute("data-manual") && (a.manual = !0)),
+ !a.manual)
+ ) {
+ var h = document.readyState;
+ "loading" === h || ("interactive" === h && g && g.defer)
+ ? document.addEventListener("DOMContentLoaded", f)
+ : window.requestAnimationFrame
+ ? window.requestAnimationFrame(f)
+ : window.setTimeout(f, 16);
+ }
+ return a;
+ })(_self);
+"undefined" != typeof module && module.exports && (module.exports = Prism),
+ "undefined" != typeof global && (global.Prism = Prism);
+(Prism.languages.markup = {
+ comment: { pattern: //, greedy: !0 },
+ prolog: { pattern: /<\?[\s\S]+?\?>/, greedy: !0 },
+ doctype: {
+ pattern:
+ /"'[\]]|"[^"]*"|'[^']*')+(?:\[(?:[^<"'\]]|"[^"]*"|'[^']*'|<(?!!--)|)*\]\s*)?>/i,
+ greedy: !0,
+ inside: {
+ "internal-subset": {
+ pattern: /(^[^\[]*\[)[\s\S]+(?=\]>$)/,
+ lookbehind: !0,
+ greedy: !0,
+ inside: null,
+ },
+ string: { pattern: /"[^"]*"|'[^']*'/, greedy: !0 },
+ punctuation: /^$|[[\]]/,
+ "doctype-tag": /^DOCTYPE/i,
+ name: /[^\s<>'"]+/,
+ },
+ },
+ cdata: { pattern: //i, greedy: !0 },
+ tag: {
+ pattern:
+ /<\/?(?!\d)[^\s>\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/,
+ greedy: !0,
+ inside: {
+ tag: {
+ pattern: /^<\/?[^\s>\/]+/,
+ inside: { punctuation: /^<\/?/, namespace: /^[^\s>\/:]+:/ },
+ },
+ "special-attr": [],
+ "attr-value": {
+ pattern: /=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+)/,
+ inside: {
+ punctuation: [
+ { pattern: /^=/, alias: "attr-equals" },
+ { pattern: /^(\s*)["']|["']$/, lookbehind: !0 },
+ ],
+ },
+ },
+ punctuation: /\/?>/,
+ "attr-name": {
+ pattern: /[^\s>\/]+/,
+ inside: { namespace: /^[^\s>\/:]+:/ },
+ },
+ },
+ },
+ entity: [
+ { pattern: /&[\da-z]{1,8};/i, alias: "named-entity" },
+ /?[\da-f]{1,8};/i,
+ ],
+}),
+ (Prism.languages.markup.tag.inside["attr-value"].inside.entity =
+ Prism.languages.markup.entity),
+ (Prism.languages.markup.doctype.inside["internal-subset"].inside =
+ Prism.languages.markup),
+ Prism.hooks.add("wrap", function (a) {
+ "entity" === a.type &&
+ (a.attributes.title = a.content.replace(/&/, "&"));
+ }),
+ Object.defineProperty(Prism.languages.markup.tag, "addInlined", {
+ value: function (a, e) {
+ var s = {};
+ (s["language-" + e] = {
+ pattern: /(^$)/i,
+ lookbehind: !0,
+ inside: Prism.languages[e],
+ }),
+ (s.cdata = /^$/i);
+ var t = {
+ "included-cdata": { pattern: //i, inside: s },
+ };
+ t["language-" + e] = { pattern: /[\s\S]+/, inside: Prism.languages[e] };
+ var n = {};
+ (n[a] = {
+ pattern: RegExp(
+ "(<__[^>]*>)(?:))*\\]\\]>|(?!)".replace(
+ /__/g,
+ function () {
+ return a;
+ }
+ ),
+ "i"
+ ),
+ lookbehind: !0,
+ greedy: !0,
+ inside: t,
+ }),
+ Prism.languages.insertBefore("markup", "cdata", n);
+ },
+ }),
+ Object.defineProperty(Prism.languages.markup.tag, "addAttribute", {
+ value: function (a, e) {
+ Prism.languages.markup.tag.inside["special-attr"].push({
+ pattern: RegExp(
+ "(^|[\"'\\s])(?:" +
+ a +
+ ")\\s*=\\s*(?:\"[^\"]*\"|'[^']*'|[^\\s'\">=]+(?=[\\s>]))",
+ "i"
+ ),
+ lookbehind: !0,
+ inside: {
+ "attr-name": /^[^\s=]+/,
+ "attr-value": {
+ pattern: /=[\s\S]+/,
+ inside: {
+ value: {
+ pattern: /(^=\s*(["']|(?!["'])))\S[\s\S]*(?=\2$)/,
+ lookbehind: !0,
+ alias: [e, "language-" + e],
+ inside: Prism.languages[e],
+ },
+ punctuation: [{ pattern: /^=/, alias: "attr-equals" }, /"|'/],
+ },
+ },
+ },
+ });
+ },
+ }),
+ (Prism.languages.html = Prism.languages.markup),
+ (Prism.languages.mathml = Prism.languages.markup),
+ (Prism.languages.svg = Prism.languages.markup),
+ (Prism.languages.xml = Prism.languages.extend("markup", {})),
+ (Prism.languages.ssml = Prism.languages.xml),
+ (Prism.languages.atom = Prism.languages.xml),
+ (Prism.languages.rss = Prism.languages.xml);
+!(function (s) {
+ var e =
+ /(?:"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n])*')/;
+ (s.languages.css = {
+ comment: /\/\*[\s\S]*?\*\//,
+ atrule: {
+ pattern: RegExp(
+ "@[\\w-](?:[^;{\\s\"']|\\s+(?!\\s)|" + e.source + ")*?(?:;|(?=\\s*\\{))"
+ ),
+ inside: {
+ rule: /^@[\w-]+/,
+ "selector-function-argument": {
+ pattern:
+ /(\bselector\s*\(\s*(?![\s)]))(?:[^()\s]|\s+(?![\s)])|\((?:[^()]|\([^()]*\))*\))+(?=\s*\))/,
+ lookbehind: !0,
+ alias: "selector",
+ },
+ keyword: {
+ pattern: /(^|[^\w-])(?:and|not|only|or)(?![\w-])/,
+ lookbehind: !0,
+ },
+ },
+ },
+ url: {
+ pattern: RegExp(
+ "\\burl\\((?:" + e.source + "|(?:[^\\\\\r\n()\"']|\\\\[^])*)\\)",
+ "i"
+ ),
+ greedy: !0,
+ inside: {
+ function: /^url/i,
+ punctuation: /^\(|\)$/,
+ string: { pattern: RegExp("^" + e.source + "$"), alias: "url" },
+ },
+ },
+ selector: {
+ pattern: RegExp(
+ "(^|[{}\\s])[^{}\\s](?:[^{};\"'\\s]|\\s+(?![\\s{])|" +
+ e.source +
+ ")*(?=\\s*\\{)"
+ ),
+ lookbehind: !0,
+ },
+ string: { pattern: e, greedy: !0 },
+ property: {
+ pattern:
+ /(^|[^-\w\xA0-\uFFFF])(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*(?=\s*:)/i,
+ lookbehind: !0,
+ },
+ important: /!important\b/i,
+ function: { pattern: /(^|[^-a-z0-9])[-a-z0-9]+(?=\()/i, lookbehind: !0 },
+ punctuation: /[(){};:,]/,
+ }),
+ (s.languages.css.atrule.inside.rest = s.languages.css);
+ var t = s.languages.markup;
+ t && (t.tag.addInlined("style", "css"), t.tag.addAttribute("style", "css"));
+})(Prism);
+Prism.languages.clike = {
+ comment: [
+ { pattern: /(^|[^\\])\/\*[\s\S]*?(?:\*\/|$)/, lookbehind: !0, greedy: !0 },
+ { pattern: /(^|[^\\:])\/\/.*/, lookbehind: !0, greedy: !0 },
+ ],
+ string: {
+ pattern: /(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,
+ greedy: !0,
+ },
+ "class-name": {
+ pattern:
+ /(\b(?:class|extends|implements|instanceof|interface|new|trait)\s+|\bcatch\s+\()[\w.\\]+/i,
+ lookbehind: !0,
+ inside: { punctuation: /[.\\]/ },
+ },
+ keyword:
+ /\b(?:break|catch|continue|do|else|finally|for|function|if|in|instanceof|new|null|return|throw|try|while)\b/,
+ boolean: /\b(?:false|true)\b/,
+ function: /\b\w+(?=\()/,
+ number: /\b0x[\da-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?/i,
+ operator: /[<>]=?|[!=]=?=?|--?|\+\+?|&&?|\|\|?|[?*/~^%]/,
+ punctuation: /[{}[\];(),.:]/,
+};
+(Prism.languages.javascript = Prism.languages.extend("clike", {
+ "class-name": [
+ Prism.languages.clike["class-name"],
+ {
+ pattern:
+ /(^|[^$\w\xA0-\uFFFF])(?!\s)[_$A-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\.(?:constructor|prototype))/,
+ lookbehind: !0,
+ },
+ ],
+ keyword: [
+ { pattern: /((?:^|\})\s*)catch\b/, lookbehind: !0 },
+ {
+ pattern:
+ /(^|[^.]|\.\.\.\s*)\b(?:as|assert(?=\s*\{)|async(?=\s*(?:function\b|\(|[$\w\xA0-\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally(?=\s*(?:\{|$))|for|from(?=\s*(?:['"]|$))|function|(?:get|set)(?=\s*(?:[#\[$\w\xA0-\uFFFF]|$))|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\b/,
+ lookbehind: !0,
+ },
+ ],
+ function:
+ /#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*(?:\.\s*(?:apply|bind|call)\s*)?\()/,
+ number: {
+ pattern: RegExp(
+ "(^|[^\\w$])(?:NaN|Infinity|0[bB][01]+(?:_[01]+)*n?|0[oO][0-7]+(?:_[0-7]+)*n?|0[xX][\\dA-Fa-f]+(?:_[\\dA-Fa-f]+)*n?|\\d+(?:_\\d+)*n|(?:\\d+(?:_\\d+)*(?:\\.(?:\\d+(?:_\\d+)*)?)?|\\.\\d+(?:_\\d+)*)(?:[Ee][+-]?\\d+(?:_\\d+)*)?)(?![\\w$])"
+ ),
+ lookbehind: !0,
+ },
+ operator:
+ /--|\+\+|\*\*=?|=>|&&=?|\|\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\.{3}|\?\?=?|\?\.?|[~:]/,
+})),
+ (Prism.languages.javascript["class-name"][0].pattern =
+ /(\b(?:class|extends|implements|instanceof|interface|new)\s+)[\w.\\]+/),
+ Prism.languages.insertBefore("javascript", "keyword", {
+ regex: {
+ pattern: RegExp(
+ "((?:^|[^$\\w\\xA0-\\uFFFF.\"'\\])\\s]|\\b(?:return|yield))\\s*)/(?:(?:\\[(?:[^\\]\\\\\r\n]|\\\\.)*\\]|\\\\.|[^/\\\\\\[\r\n])+/[dgimyus]{0,7}|(?:\\[(?:[^[\\]\\\\\r\n]|\\\\.|\\[(?:[^[\\]\\\\\r\n]|\\\\.|\\[(?:[^[\\]\\\\\r\n]|\\\\.)*\\])*\\])*\\]|\\\\.|[^/\\\\\\[\r\n])+/[dgimyus]{0,7}v[dgimyus]{0,7})(?=(?:\\s|/\\*(?:[^*]|\\*(?!/))*\\*/)*(?:$|[\r\n,.;:})\\]]|//))"
+ ),
+ lookbehind: !0,
+ greedy: !0,
+ inside: {
+ "regex-source": {
+ pattern: /^(\/)[\s\S]+(?=\/[a-z]*$)/,
+ lookbehind: !0,
+ alias: "language-regex",
+ inside: Prism.languages.regex,
+ },
+ "regex-delimiter": /^\/|\/$/,
+ "regex-flags": /^[a-z]+$/,
+ },
+ },
+ "function-variable": {
+ pattern:
+ /#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*[=:]\s*(?:async\s*)?(?:\bfunction\b|(?:\((?:[^()]|\([^()]*\))*\)|(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)\s*=>))/,
+ alias: "function",
+ },
+ parameter: [
+ {
+ pattern:
+ /(function(?:\s+(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)?\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\))/,
+ lookbehind: !0,
+ inside: Prism.languages.javascript,
+ },
+ {
+ pattern:
+ /(^|[^$\w\xA0-\uFFFF])(?!\s)[_$a-z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*=>)/i,
+ lookbehind: !0,
+ inside: Prism.languages.javascript,
+ },
+ {
+ pattern:
+ /(\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*=>)/,
+ lookbehind: !0,
+ inside: Prism.languages.javascript,
+ },
+ {
+ pattern:
+ /((?:\b|\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\w\xA0-\uFFFF]))(?:(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*)\(\s*|\]\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*\{)/,
+ lookbehind: !0,
+ inside: Prism.languages.javascript,
+ },
+ ],
+ constant: /\b[A-Z](?:[A-Z_]|\dx?)*\b/,
+ }),
+ Prism.languages.insertBefore("javascript", "string", {
+ hashbang: { pattern: /^#!.*/, greedy: !0, alias: "comment" },
+ "template-string": {
+ pattern:
+ /`(?:\\[\s\S]|\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}|(?!\$\{)[^\\`])*`/,
+ greedy: !0,
+ inside: {
+ "template-punctuation": { pattern: /^`|`$/, alias: "string" },
+ interpolation: {
+ pattern:
+ /((?:^|[^\\])(?:\\{2})*)\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}/,
+ lookbehind: !0,
+ inside: {
+ "interpolation-punctuation": {
+ pattern: /^\$\{|\}$/,
+ alias: "punctuation",
+ },
+ rest: Prism.languages.javascript,
+ },
+ },
+ string: /[\s\S]+/,
+ },
+ },
+ "string-property": {
+ pattern:
+ /((?:^|[,{])[ \t]*)(["'])(?:\\(?:\r\n|[\s\S])|(?!\2)[^\\\r\n])*\2(?=\s*:)/m,
+ lookbehind: !0,
+ greedy: !0,
+ alias: "property",
+ },
+ }),
+ Prism.languages.insertBefore("javascript", "operator", {
+ "literal-property": {
+ pattern:
+ /((?:^|[,{])[ \t]*)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*:)/m,
+ lookbehind: !0,
+ alias: "property",
+ },
+ }),
+ Prism.languages.markup &&
+ (Prism.languages.markup.tag.addInlined("script", "javascript"),
+ Prism.languages.markup.tag.addAttribute(
+ "on(?:abort|blur|change|click|composition(?:end|start|update)|dblclick|error|focus(?:in|out)?|key(?:down|up)|load|mouse(?:down|enter|leave|move|out|over|up)|reset|resize|scroll|select|slotchange|submit|unload|wheel)",
+ "javascript"
+ )),
+ (Prism.languages.js = Prism.languages.javascript);
+Prism.languages.abap = {
+ comment: /^\*.*/m,
+ string: /(`|')(?:\\.|(?!\1)[^\\\r\n])*\1/,
+ "string-template": {
+ pattern: /([|}])(?:\\.|[^\\|{\r\n])*(?=[|{])/,
+ lookbehind: !0,
+ alias: "string",
+ },
+ "eol-comment": { pattern: /(^|\s)".*/m, lookbehind: !0, alias: "comment" },
+ keyword: {
+ pattern:
+ /(\s|\.|^)(?:\*-INPUT|\?TO|ABAP-SOURCE|ABBREVIATED|ABS|ABSTRACT|ACCEPT|ACCEPTING|ACCESSPOLICY|ACCORDING|ACOS|ACTIVATION|ACTUAL|ADD|ADD-CORRESPONDING|ADJACENT|AFTER|ALIAS|ALIASES|ALIGN|ALL|ALLOCATE|ALPHA|ANALYSIS|ANALYZER|AND|ANY|APPEND|APPENDAGE|APPENDING|APPLICATION|ARCHIVE|AREA|ARITHMETIC|AS|ASCENDING|ASIN|ASPECT|ASSERT|ASSIGN|ASSIGNED|ASSIGNING|ASSOCIATION|ASYNCHRONOUS|AT|ATAN|ATTRIBUTES|AUTHORITY|AUTHORITY-CHECK|AVG|BACK|BACKGROUND|BACKUP|BACKWARD|BADI|BASE|BEFORE|BEGIN|BETWEEN|BIG|BINARY|BINDING|BIT|BIT-AND|BIT-NOT|BIT-OR|BIT-XOR|BLACK|BLANK|BLANKS|BLOB|BLOCK|BLOCKS|BLUE|BOUND|BOUNDARIES|BOUNDS|BOXED|BREAK-POINT|BT|BUFFER|BY|BYPASSING|BYTE|BYTE-CA|BYTE-CN|BYTE-CO|BYTE-CS|BYTE-NA|BYTE-NS|BYTE-ORDER|C|CA|CALL|CALLING|CASE|CAST|CASTING|CATCH|CEIL|CENTER|CENTERED|CHAIN|CHAIN-INPUT|CHAIN-REQUEST|CHANGE|CHANGING|CHANNELS|CHAR-TO-HEX|CHARACTER|CHARLEN|CHECK|CHECKBOX|CIRCULAR|CI_|CLASS|CLASS-CODING|CLASS-DATA|CLASS-EVENTS|CLASS-METHODS|CLASS-POOL|CLEANUP|CLEAR|CLIENT|CLOB|CLOCK|CLOSE|CN|CNT|CO|COALESCE|CODE|CODING|COLLECT|COLOR|COLUMN|COLUMNS|COL_BACKGROUND|COL_GROUP|COL_HEADING|COL_KEY|COL_NEGATIVE|COL_NORMAL|COL_POSITIVE|COL_TOTAL|COMMENT|COMMENTS|COMMIT|COMMON|COMMUNICATION|COMPARING|COMPONENT|COMPONENTS|COMPRESSION|COMPUTE|CONCAT|CONCATENATE|COND|CONDENSE|CONDITION|CONNECT|CONNECTION|CONSTANTS|CONTEXT|CONTEXTS|CONTINUE|CONTROL|CONTROLS|CONV|CONVERSION|CONVERT|COPIES|COPY|CORRESPONDING|COS|COSH|COUNT|COUNTRY|COVER|CP|CPI|CREATE|CREATING|CRITICAL|CS|CURRENCY|CURRENCY_CONVERSION|CURRENT|CURSOR|CURSOR-SELECTION|CUSTOMER|CUSTOMER-FUNCTION|DANGEROUS|DATA|DATABASE|DATAINFO|DATASET|DATE|DAYLIGHT|DBMAXLEN|DD\/MM\/YY|DD\/MM\/YYYY|DDMMYY|DEALLOCATE|DECIMALS|DECIMAL_SHIFT|DECLARATIONS|DEEP|DEFAULT|DEFERRED|DEFINE|DEFINING|DEFINITION|DELETE|DELETING|DEMAND|DEPARTMENT|DESCENDING|DESCRIBE|DESTINATION|DETAIL|DIALOG|DIRECTORY|DISCONNECT|DISPLAY|DISPLAY-MODE|DISTANCE|DISTINCT|DIV|DIVIDE|DIVIDE-CORRESPONDING|DIVISION|DO|DUMMY|DUPLICATE|DUPLICATES|DURATION|DURING|DYNAMIC|DYNPRO|E|EACH|EDIT|EDITOR-CALL|ELSE|ELSEIF|EMPTY|ENABLED|ENABLING|ENCODING|END|END-ENHANCEMENT-SECTION|END-LINES|END-OF-DEFINITION|END-OF-FILE|END-OF-PAGE|END-OF-SELECTION|ENDAT|ENDCASE|ENDCATCH|ENDCHAIN|ENDCLASS|ENDDO|ENDENHANCEMENT|ENDEXEC|ENDFOR|ENDFORM|ENDFUNCTION|ENDIAN|ENDIF|ENDING|ENDINTERFACE|ENDLOOP|ENDMETHOD|ENDMODULE|ENDON|ENDPROVIDE|ENDSELECT|ENDTRY|ENDWHILE|ENGINEERING|ENHANCEMENT|ENHANCEMENT-POINT|ENHANCEMENT-SECTION|ENHANCEMENTS|ENTRIES|ENTRY|ENVIRONMENT|EQ|EQUAL|EQUIV|ERRORMESSAGE|ERRORS|ESCAPE|ESCAPING|EVENT|EVENTS|EXACT|EXCEPT|EXCEPTION|EXCEPTION-TABLE|EXCEPTIONS|EXCLUDE|EXCLUDING|EXEC|EXECUTE|EXISTS|EXIT|EXIT-COMMAND|EXP|EXPAND|EXPANDING|EXPIRATION|EXPLICIT|EXPONENT|EXPORT|EXPORTING|EXTEND|EXTENDED|EXTENSION|EXTRACT|FAIL|FETCH|FIELD|FIELD-GROUPS|FIELD-SYMBOL|FIELD-SYMBOLS|FIELDS|FILE|FILTER|FILTER-TABLE|FILTERS|FINAL|FIND|FIRST|FIRST-LINE|FIXED-POINT|FKEQ|FKGE|FLOOR|FLUSH|FONT|FOR|FORM|FORMAT|FORWARD|FOUND|FRAC|FRAME|FRAMES|FREE|FRIENDS|FROM|FUNCTION|FUNCTION-POOL|FUNCTIONALITY|FURTHER|GAPS|GE|GENERATE|GET|GIVING|GKEQ|GKGE|GLOBAL|GRANT|GREATER|GREEN|GROUP|GROUPS|GT|HANDLE|HANDLER|HARMLESS|HASHED|HAVING|HDB|HEAD-LINES|HEADER|HEADERS|HEADING|HELP-ID|HELP-REQUEST|HIDE|HIGH|HINT|HOLD|HOTSPOT|I|ICON|ID|IDENTIFICATION|IDENTIFIER|IDS|IF|IGNORE|IGNORING|IMMEDIATELY|IMPLEMENTATION|IMPLEMENTATIONS|IMPLEMENTED|IMPLICIT|IMPORT|IMPORTING|IN|INACTIVE|INCL|INCLUDE|INCLUDES|INCLUDING|INCREMENT|INDEX|INDEX-LINE|INFOTYPES|INHERITING|INIT|INITIAL|INITIALIZATION|INNER|INOUT|INPUT|INSERT|INSTANCES|INTENSIFIED|INTERFACE|INTERFACE-POOL|INTERFACES|INTERNAL|INTERVALS|INTO|INVERSE|INVERTED-DATE|IS|ISO|ITERATOR|ITNO|JOB|JOIN|KEEP|KEEPING|KERNEL|KEY|KEYS|KEYWORDS|KIND|LANGUAGE|LAST|LATE|LAYOUT|LE|LEADING|LEAVE|LEFT|LEFT-JUSTIFIED|LEFTPLUS|LEFTSPACE|LEGACY|LENGTH|LESS|LET|LEVEL|LEVELS|LIKE|LINE|LINE-COUNT|LINE-SELECTION|LINE-SIZE|LINEFEED|LINES|LIST|LIST-PROCESSING|LISTBOX|LITTLE|LLANG|LOAD|LOAD-OF-PROGRAM|LOB|LOCAL|LOCALE|LOCATOR|LOG|LOG-POINT|LOG10|LOGFILE|LOGICAL|LONG|LOOP|LOW|LOWER|LPAD|LPI|LT|M|MAIL|MAIN|MAJOR-ID|MAPPING|MARGIN|MARK|MASK|MATCH|MATCHCODE|MAX|MAXIMUM|MEDIUM|MEMBERS|MEMORY|MESH|MESSAGE|MESSAGE-ID|MESSAGES|MESSAGING|METHOD|METHODS|MIN|MINIMUM|MINOR-ID|MM\/DD\/YY|MM\/DD\/YYYY|MMDDYY|MOD|MODE|MODIF|MODIFIER|MODIFY|MODULE|MOVE|MOVE-CORRESPONDING|MULTIPLY|MULTIPLY-CORRESPONDING|NA|NAME|NAMETAB|NATIVE|NB|NE|NESTED|NESTING|NEW|NEW-LINE|NEW-PAGE|NEW-SECTION|NEXT|NO|NO-DISPLAY|NO-EXTENSION|NO-GAP|NO-GAPS|NO-GROUPING|NO-HEADING|NO-SCROLLING|NO-SIGN|NO-TITLE|NO-TOPOFPAGE|NO-ZERO|NODE|NODES|NON-UNICODE|NON-UNIQUE|NOT|NP|NS|NULL|NUMBER|NUMOFCHAR|O|OBJECT|OBJECTS|OBLIGATORY|OCCURRENCE|OCCURRENCES|OCCURS|OF|OFF|OFFSET|OLE|ON|ONLY|OPEN|OPTION|OPTIONAL|OPTIONS|OR|ORDER|OTHER|OTHERS|OUT|OUTER|OUTPUT|OUTPUT-LENGTH|OVERFLOW|OVERLAY|PACK|PACKAGE|PAD|PADDING|PAGE|PAGES|PARAMETER|PARAMETER-TABLE|PARAMETERS|PART|PARTIALLY|PATTERN|PERCENTAGE|PERFORM|PERFORMING|PERSON|PF|PF-STATUS|PINK|PLACES|POOL|POSITION|POS_HIGH|POS_LOW|PRAGMAS|PRECOMPILED|PREFERRED|PRESERVING|PRIMARY|PRINT|PRINT-CONTROL|PRIORITY|PRIVATE|PROCEDURE|PROCESS|PROGRAM|PROPERTY|PROTECTED|PROVIDE|PUBLIC|PUSHBUTTON|PUT|QUEUE-ONLY|QUICKINFO|RADIOBUTTON|RAISE|RAISING|RANGE|RANGES|RAW|READ|READ-ONLY|READER|RECEIVE|RECEIVED|RECEIVER|RECEIVING|RED|REDEFINITION|REDUCE|REDUCED|REF|REFERENCE|REFRESH|REGEX|REJECT|REMOTE|RENAMING|REPLACE|REPLACEMENT|REPLACING|REPORT|REQUEST|REQUESTED|RESERVE|RESET|RESOLUTION|RESPECTING|RESPONSIBLE|RESULT|RESULTS|RESUMABLE|RESUME|RETRY|RETURN|RETURNCODE|RETURNING|RIGHT|RIGHT-JUSTIFIED|RIGHTPLUS|RIGHTSPACE|RISK|RMC_COMMUNICATION_FAILURE|RMC_INVALID_STATUS|RMC_SYSTEM_FAILURE|ROLE|ROLLBACK|ROUND|ROWS|RTTI|RUN|SAP|SAP-SPOOL|SAVING|SCALE_PRESERVING|SCALE_PRESERVING_SCIENTIFIC|SCAN|SCIENTIFIC|SCIENTIFIC_WITH_LEADING_ZERO|SCREEN|SCROLL|SCROLL-BOUNDARY|SCROLLING|SEARCH|SECONDARY|SECONDS|SECTION|SELECT|SELECT-OPTIONS|SELECTION|SELECTION-SCREEN|SELECTION-SET|SELECTION-SETS|SELECTION-TABLE|SELECTIONS|SELECTOR|SEND|SEPARATE|SEPARATED|SET|SHARED|SHIFT|SHORT|SHORTDUMP-ID|SIGN|SIGN_AS_POSTFIX|SIMPLE|SIN|SINGLE|SINH|SIZE|SKIP|SKIPPING|SMART|SOME|SORT|SORTABLE|SORTED|SOURCE|SPACE|SPECIFIED|SPLIT|SPOOL|SPOTS|SQL|SQLSCRIPT|SQRT|STABLE|STAMP|STANDARD|START-OF-SELECTION|STARTING|STATE|STATEMENT|STATEMENTS|STATIC|STATICS|STATUSINFO|STEP-LOOP|STOP|STRLEN|STRUCTURE|STRUCTURES|STYLE|SUBKEY|SUBMATCHES|SUBMIT|SUBROUTINE|SUBSCREEN|SUBSTRING|SUBTRACT|SUBTRACT-CORRESPONDING|SUFFIX|SUM|SUMMARY|SUMMING|SUPPLIED|SUPPLY|SUPPRESS|SWITCH|SWITCHSTATES|SYMBOL|SYNCPOINTS|SYNTAX|SYNTAX-CHECK|SYNTAX-TRACE|SYSTEM-CALL|SYSTEM-EXCEPTIONS|SYSTEM-EXIT|TAB|TABBED|TABLE|TABLES|TABLEVIEW|TABSTRIP|TAN|TANH|TARGET|TASK|TASKS|TEST|TESTING|TEXT|TEXTPOOL|THEN|THROW|TIME|TIMES|TIMESTAMP|TIMEZONE|TITLE|TITLE-LINES|TITLEBAR|TO|TOKENIZATION|TOKENS|TOP-LINES|TOP-OF-PAGE|TRACE-FILE|TRACE-TABLE|TRAILING|TRANSACTION|TRANSFER|TRANSFORMATION|TRANSLATE|TRANSPORTING|TRMAC|TRUNC|TRUNCATE|TRUNCATION|TRY|TYPE|TYPE-POOL|TYPE-POOLS|TYPES|ULINE|UNASSIGN|UNDER|UNICODE|UNION|UNIQUE|UNIT|UNIT_CONVERSION|UNIX|UNPACK|UNTIL|UNWIND|UP|UPDATE|UPPER|USER|USER-COMMAND|USING|UTF-8|VALID|VALUE|VALUE-REQUEST|VALUES|VARY|VARYING|VERIFICATION-MESSAGE|VERSION|VIA|VIEW|VISIBLE|WAIT|WARNING|WHEN|WHENEVER|WHERE|WHILE|WIDTH|WINDOW|WINDOWS|WITH|WITH-HEADING|WITH-TITLE|WITHOUT|WORD|WORK|WRITE|WRITER|X|XML|XOR|XSD|XSTRLEN|YELLOW|YES|YYMMDD|Z|ZERO|ZONE)(?![\w-])/i,
+ lookbehind: !0,
+ },
+ number: /\b\d+\b/,
+ operator: {
+ pattern: /(\s)(?:\*\*?|<[=>]?|>=?|\?=|[-+\/=])(?=\s)/,
+ lookbehind: !0,
+ },
+ "string-operator": {
+ pattern: /(\s)&&?(?=\s)/,
+ lookbehind: !0,
+ alias: "keyword",
+ },
+ "token-operator": [
+ {
+ pattern: /(\w)(?:->?|=>|[~|{}])(?=\w)/,
+ lookbehind: !0,
+ alias: "punctuation",
+ },
+ { pattern: /[|{}]/, alias: "punctuation" },
+ ],
+ punctuation: /[,.:()]/,
+};
+!(function (n) {
+ var i =
+ "(?:ALPHA|BIT|CHAR|CR|CRLF|CTL|DIGIT|DQUOTE|HEXDIG|HTAB|LF|LWSP|OCTET|SP|VCHAR|WSP)";
+ n.languages.abnf = {
+ comment: /;.*/,
+ string: {
+ pattern: /(?:%[is])?"[^"\n\r]*"/,
+ greedy: !0,
+ inside: { punctuation: /^%[is]/ },
+ },
+ range: {
+ pattern: /%(?:b[01]+-[01]+|d\d+-\d+|x[A-F\d]+-[A-F\d]+)/i,
+ alias: "number",
+ },
+ terminal: {
+ pattern:
+ /%(?:b[01]+(?:\.[01]+)*|d\d+(?:\.\d+)*|x[A-F\d]+(?:\.[A-F\d]+)*)/i,
+ alias: "number",
+ },
+ repetition: {
+ pattern: /(^|[^\w-])(?:\d*\*\d*|\d+)/,
+ lookbehind: !0,
+ alias: "operator",
+ },
+ definition: {
+ pattern: /(^[ \t]*)(?:[a-z][\w-]*|<[^<>\r\n]*>)(?=\s*=)/m,
+ lookbehind: !0,
+ alias: "keyword",
+ inside: { punctuation: /<|>/ },
+ },
+ "core-rule": {
+ pattern: RegExp("(?:(^|[^<\\w-])" + i + "|<" + i + ">)(?![\\w-])", "i"),
+ lookbehind: !0,
+ alias: ["rule", "constant"],
+ inside: { punctuation: /<|>/ },
+ },
+ rule: {
+ pattern: /(^|[^<\w-])[a-z][\w-]*|<[^<>\r\n]*>/i,
+ lookbehind: !0,
+ inside: { punctuation: /<|>/ },
+ },
+ operator: /=\/?|\//,
+ punctuation: /[()\[\]]/,
+ };
+})(Prism);
+(Prism.languages.actionscript = Prism.languages.extend("javascript", {
+ keyword:
+ /\b(?:as|break|case|catch|class|const|default|delete|do|dynamic|each|else|extends|final|finally|for|function|get|if|implements|import|in|include|instanceof|interface|internal|is|namespace|native|new|null|override|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|use|var|void|while|with)\b/,
+ operator: /\+\+|--|(?:[+\-*\/%^]|&&?|\|\|?|<|>>?>?|[!=]=?)=?|[~?@]/,
+})),
+ (Prism.languages.actionscript["class-name"].alias = "function"),
+ delete Prism.languages.actionscript.parameter,
+ delete Prism.languages.actionscript["literal-property"],
+ Prism.languages.markup &&
+ Prism.languages.insertBefore("actionscript", "string", {
+ xml: {
+ pattern:
+ /(^|[^.])<\/?\w+(?:\s+[^\s>\/=]+=("|')(?:\\[\s\S]|(?!\2)[^\\])*\2)*\s*\/?>/,
+ lookbehind: !0,
+ inside: Prism.languages.markup,
+ },
+ });
+Prism.languages.ada = {
+ comment: /--.*/,
+ string: /"(?:""|[^"\r\f\n])*"/,
+ number: [
+ {
+ pattern:
+ /\b\d(?:_?\d)*#[\dA-F](?:_?[\dA-F])*(?:\.[\dA-F](?:_?[\dA-F])*)?#(?:E[+-]?\d(?:_?\d)*)?/i,
+ },
+ { pattern: /\b\d(?:_?\d)*(?:\.\d(?:_?\d)*)?(?:E[+-]?\d(?:_?\d)*)?\b/i },
+ ],
+ attribute: { pattern: /\b'\w+/, alias: "attr-name" },
+ keyword:
+ /\b(?:abort|abs|abstract|accept|access|aliased|all|and|array|at|begin|body|case|constant|declare|delay|delta|digits|do|else|elsif|end|entry|exception|exit|for|function|generic|goto|if|in|interface|is|limited|loop|mod|new|not|null|of|or|others|out|overriding|package|pragma|private|procedure|protected|raise|range|record|rem|renames|requeue|return|reverse|select|separate|some|subtype|synchronized|tagged|task|terminate|then|type|until|use|when|while|with|xor)\b/i,
+ boolean: /\b(?:false|true)\b/i,
+ operator: /<[=>]?|>=?|=>?|:=|\/=?|\*\*?|[&+-]/,
+ punctuation: /\.\.?|[,;():]/,
+ char: /'.'/,
+ variable: /\b[a-z](?:\w)*\b/i,
+};
+!(function (t) {
+ t.languages.agda = {
+ comment: /\{-[\s\S]*?(?:-\}|$)|--.*/,
+ string: { pattern: /"(?:\\(?:\r\n|[\s\S])|[^\\\r\n"])*"/, greedy: !0 },
+ punctuation: /[(){}⦃⦄.;@]/,
+ "class-name": { pattern: /((?:data|record) +)\S+/, lookbehind: !0 },
+ function: { pattern: /(^[ \t]*)(?!\s)[^:\r\n]+(?=:)/m, lookbehind: !0 },
+ operator: { pattern: /(^\s*|\s)(?:[=|:∀→λ\\?_]|->)(?=\s)/, lookbehind: !0 },
+ keyword:
+ /\b(?:Set|abstract|constructor|data|eta-equality|field|forall|hiding|import|in|inductive|infix|infixl|infixr|instance|let|macro|module|mutual|no-eta-equality|open|overlap|pattern|postulate|primitive|private|public|quote|quoteContext|quoteGoal|quoteTerm|record|renaming|rewrite|syntax|tactic|unquote|unquoteDecl|unquoteDef|using|variable|where|with)\b/,
+ };
+})(Prism);
+Prism.languages.al = {
+ comment: /\/\/.*|\/\*[\s\S]*?\*\//,
+ string: {
+ pattern: /'(?:''|[^'\r\n])*'(?!')|"(?:""|[^"\r\n])*"(?!")/,
+ greedy: !0,
+ },
+ function: {
+ pattern:
+ /(\b(?:event|procedure|trigger)\s+|(?:^|[^.])\.\s*)[a-z_]\w*(?=\s*\()/i,
+ lookbehind: !0,
+ },
+ keyword: [
+ /\b(?:array|asserterror|begin|break|case|do|downto|else|end|event|exit|for|foreach|function|if|implements|in|indataset|interface|internal|local|of|procedure|program|protected|repeat|runonclient|securityfiltering|suppressdispose|temporary|then|to|trigger|until|var|while|with|withevents)\b/i,
+ /\b(?:action|actions|addafter|addbefore|addfirst|addlast|area|assembly|chartpart|codeunit|column|controladdin|cuegroup|customizes|dataitem|dataset|dotnet|elements|enum|enumextension|extends|field|fieldattribute|fieldelement|fieldgroup|fieldgroups|fields|filter|fixed|grid|group|key|keys|label|labels|layout|modify|moveafter|movebefore|movefirst|movelast|page|pagecustomization|pageextension|part|profile|query|repeater|report|requestpage|schema|separator|systempart|table|tableelement|tableextension|textattribute|textelement|type|usercontrol|value|xmlport)\b/i,
+ ],
+ number:
+ /\b(?:0x[\da-f]+|(?:\d+(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?)(?:F|LL?|U(?:LL?)?)?\b/i,
+ boolean: /\b(?:false|true)\b/i,
+ variable: /\b(?:Curr(?:FieldNo|Page|Report)|x?Rec|RequestOptionsPage)\b/,
+ "class-name":
+ /\b(?:automation|biginteger|bigtext|blob|boolean|byte|char|clienttype|code|completiontriggererrorlevel|connectiontype|database|dataclassification|datascope|date|dateformula|datetime|decimal|defaultlayout|dialog|dictionary|dotnetassembly|dotnettypedeclaration|duration|errorinfo|errortype|executioncontext|executionmode|fieldclass|fieldref|fieldtype|file|filterpagebuilder|guid|httpclient|httpcontent|httpheaders|httprequestmessage|httpresponsemessage|instream|integer|joker|jsonarray|jsonobject|jsontoken|jsonvalue|keyref|list|moduledependencyinfo|moduleinfo|none|notification|notificationscope|objecttype|option|outstream|pageresult|record|recordid|recordref|reportformat|securityfilter|sessionsettings|tableconnectiontype|tablefilter|testaction|testfield|testfilterfield|testpage|testpermissions|testrequestpage|text|textbuilder|textconst|textencoding|time|transactionmodel|transactiontype|variant|verbosity|version|view|views|webserviceactioncontext|webserviceactionresultcode|xmlattribute|xmlattributecollection|xmlcdata|xmlcomment|xmldeclaration|xmldocument|xmldocumenttype|xmlelement|xmlnamespacemanager|xmlnametable|xmlnode|xmlnodelist|xmlprocessinginstruction|xmlreadoptions|xmltext|xmlwriteoptions)\b/i,
+ operator: /\.\.|:[=:]|[-+*/]=?|<>|[<>]=?|=|\b(?:and|div|mod|not|or|xor)\b/i,
+ punctuation: /[()\[\]{}:.;,]/,
+};
+(Prism.languages.antlr4 = {
+ comment: /\/\/.*|\/\*[\s\S]*?(?:\*\/|$)/,
+ string: { pattern: /'(?:\\.|[^\\'\r\n])*'/, greedy: !0 },
+ "character-class": {
+ pattern: /\[(?:\\.|[^\\\]\r\n])*\]/,
+ greedy: !0,
+ alias: "regex",
+ inside: {
+ range: {
+ pattern: /([^[]|(?:^|[^\\])(?:\\\\)*\\\[)-(?!\])/,
+ lookbehind: !0,
+ alias: "punctuation",
+ },
+ escape:
+ /\\(?:u(?:[a-fA-F\d]{4}|\{[a-fA-F\d]+\})|[pP]\{[=\w-]+\}|[^\r\nupP])/,
+ punctuation: /[\[\]]/,
+ },
+ },
+ action: {
+ pattern: /\{(?:[^{}]|\{(?:[^{}]|\{(?:[^{}]|\{[^{}]*\})*\})*\})*\}/,
+ greedy: !0,
+ inside: {
+ content: { pattern: /(\{)[\s\S]+(?=\})/, lookbehind: !0 },
+ punctuation: /[{}]/,
+ },
+ },
+ command: {
+ pattern:
+ /(->\s*(?!\s))(?:\s*(?:,\s*)?\b[a-z]\w*(?:\s*\([^()\r\n]*\))?)+(?=\s*;)/i,
+ lookbehind: !0,
+ inside: { function: /\b\w+(?=\s*(?:[,(]|$))/, punctuation: /[,()]/ },
+ },
+ annotation: { pattern: /@\w+(?:::\w+)*/, alias: "keyword" },
+ label: { pattern: /#[ \t]*\w+/, alias: "punctuation" },
+ keyword:
+ /\b(?:catch|channels|finally|fragment|grammar|import|lexer|locals|mode|options|parser|returns|throws|tokens)\b/,
+ definition: [
+ { pattern: /\b[a-z]\w*(?=\s*:)/, alias: ["rule", "class-name"] },
+ { pattern: /\b[A-Z]\w*(?=\s*:)/, alias: ["token", "constant"] },
+ ],
+ constant: /\b[A-Z][A-Z_]*\b/,
+ operator: /\.\.|->|[|~]|[*+?]\??/,
+ punctuation: /[;:()=]/,
+}),
+ (Prism.languages.g4 = Prism.languages.antlr4);
+Prism.languages.apacheconf = {
+ comment: /#.*/,
+ "directive-inline": {
+ pattern:
+ /(^[\t ]*)\b(?:AcceptFilter|AcceptPathInfo|AccessFileName|Action|Add(?:Alt|AltByEncoding|AltByType|Charset|DefaultCharset|Description|Encoding|Handler|Icon|IconByEncoding|IconByType|InputFilter|Language|ModuleInfo|OutputFilter|OutputFilterByType|Type)|Alias|AliasMatch|Allow(?:CONNECT|EncodedSlashes|Methods|Override|OverrideList)?|Anonymous(?:_LogEmail|_MustGiveEmail|_NoUserID|_VerifyEmail)?|AsyncRequestWorkerFactor|Auth(?:BasicAuthoritative|BasicFake|BasicProvider|BasicUseDigestAlgorithm|DBDUserPWQuery|DBDUserRealmQuery|DBMGroupFile|DBMType|DBMUserFile|Digest(?:Algorithm|Domain|NonceLifetime|Provider|Qop|ShmemSize)|Form(?:Authoritative|Body|DisableNoStore|FakeBasicAuth|Location|LoginRequiredLocation|LoginSuccessLocation|LogoutLocation|Method|Mimetype|Password|Provider|SitePassphrase|Size|Username)|GroupFile|LDAP(?:AuthorizePrefix|BindAuthoritative|BindDN|BindPassword|CharsetConfig|CompareAsUser|CompareDNOnServer|DereferenceAliases|GroupAttribute|GroupAttributeIsDN|InitialBindAsUser|InitialBindPattern|MaxSubGroupDepth|RemoteUserAttribute|RemoteUserIsDN|SearchAsUser|SubGroupAttribute|SubGroupClass|Url)|Merging|Name|nCache(?:Context|Enable|ProvideFor|SOCache|Timeout)|nzFcgiCheckAuthnProvider|nzFcgiDefineProvider|Type|UserFile|zDBDLoginToReferer|zDBDQuery|zDBDRedirectQuery|zDBMType|zSendForbiddenOnFailure)|BalancerGrowth|BalancerInherit|BalancerMember|BalancerPersist|BrowserMatch|BrowserMatchNoCase|BufferedLogs|BufferSize|Cache(?:DefaultExpire|DetailHeader|DirLength|DirLevels|Disable|Enable|File|Header|IgnoreCacheControl|IgnoreHeaders|IgnoreNoLastMod|IgnoreQueryString|IgnoreURLSessionIdentifiers|KeyBaseURL|LastModifiedFactor|Lock|LockMaxAge|LockPath|MaxExpire|MaxFileSize|MinExpire|MinFileSize|NegotiatedDocs|QuickHandler|ReadSize|ReadTime|Root|Socache(?:MaxSize|MaxTime|MinTime|ReadSize|ReadTime)?|StaleOnError|StoreExpired|StoreNoStore|StorePrivate)|CGIDScriptTimeout|CGIMapExtension|CharsetDefault|CharsetOptions|CharsetSourceEnc|CheckCaseOnly|CheckSpelling|ChrootDir|ContentDigest|CookieDomain|CookieExpires|CookieName|CookieStyle|CookieTracking|CoreDumpDirectory|CustomLog|Dav|DavDepthInfinity|DavGenericLockDB|DavLockDB|DavMinTimeout|DBDExptime|DBDInitSQL|DBDKeep|DBDMax|DBDMin|DBDParams|DBDPersist|DBDPrepareSQL|DBDriver|DefaultIcon|DefaultLanguage|DefaultRuntimeDir|DefaultType|Define|Deflate(?:BufferSize|CompressionLevel|FilterNote|InflateLimitRequestBody|InflateRatio(?:Burst|Limit)|MemLevel|WindowSize)|Deny|DirectoryCheckHandler|DirectoryIndex|DirectoryIndexRedirect|DirectorySlash|DocumentRoot|DTracePrivileges|DumpIOInput|DumpIOOutput|EnableExceptionHook|EnableMMAP|EnableSendfile|Error|ErrorDocument|ErrorLog|ErrorLogFormat|Example|ExpiresActive|ExpiresByType|ExpiresDefault|ExtendedStatus|ExtFilterDefine|ExtFilterOptions|FallbackResource|FileETag|FilterChain|FilterDeclare|FilterProtocol|FilterProvider|FilterTrace|ForceLanguagePriority|ForceType|ForensicLog|GprofDir|GracefulShutdownTimeout|Group|Header|HeaderName|Heartbeat(?:Address|Listen|MaxServers|Storage)|HostnameLookups|IdentityCheck|IdentityCheckTimeout|ImapBase|ImapDefault|ImapMenu|Include|IncludeOptional|Index(?:HeadInsert|Ignore|IgnoreReset|Options|OrderDefault|StyleSheet)|InputSed|ISAPI(?:AppendLogToErrors|AppendLogToQuery|CacheFile|FakeAsync|LogNotSupported|ReadAheadBuffer)|KeepAlive|KeepAliveTimeout|KeptBodySize|LanguagePriority|LDAP(?:CacheEntries|CacheTTL|ConnectionPoolTTL|ConnectionTimeout|LibraryDebug|OpCacheEntries|OpCacheTTL|ReferralHopLimit|Referrals|Retries|RetryDelay|SharedCacheFile|SharedCacheSize|Timeout|TrustedClientCert|TrustedGlobalCert|TrustedMode|VerifyServerCert)|Limit(?:InternalRecursion|Request(?:Body|Fields|FieldSize|Line)|XMLRequestBody)|Listen|ListenBackLog|LoadFile|LoadModule|LogFormat|LogLevel|LogMessage|LuaAuthzProvider|LuaCodeCache|Lua(?:Hook(?:AccessChecker|AuthChecker|CheckUserID|Fixups|InsertFilter|Log|MapToStorage|TranslateName|TypeChecker)|Inherit|InputFilter|MapHandler|OutputFilter|PackageCPath|PackagePath|QuickHandler|Root|Scope)|Max(?:ConnectionsPerChild|KeepAliveRequests|MemFree|RangeOverlaps|RangeReversals|Ranges|RequestWorkers|SpareServers|SpareThreads|Threads)|MergeTrailers|MetaDir|MetaFiles|MetaSuffix|MimeMagicFile|MinSpareServers|MinSpareThreads|MMapFile|ModemStandard|ModMimeUsePathInfo|MultiviewsMatch|Mutex|NameVirtualHost|NoProxy|NWSSLTrustedCerts|NWSSLUpgradeable|Options|Order|OutputSed|PassEnv|PidFile|PrivilegesMode|Protocol|ProtocolEcho|Proxy(?:AddHeaders|BadHeader|Block|Domain|ErrorOverride|ExpressDBMFile|ExpressDBMType|ExpressEnable|FtpDirCharset|FtpEscapeWildcards|FtpListOnWildcard|HTML(?:BufSize|CharsetOut|DocType|Enable|Events|Extended|Fixups|Interp|Links|Meta|StripComments|URLMap)|IOBufferSize|MaxForwards|Pass(?:Inherit|InterpolateEnv|Match|Reverse|ReverseCookieDomain|ReverseCookiePath)?|PreserveHost|ReceiveBufferSize|Remote|RemoteMatch|Requests|SCGIInternalRedirect|SCGISendfile|Set|SourceAddress|Status|Timeout|Via)|ReadmeName|ReceiveBufferSize|Redirect|RedirectMatch|RedirectPermanent|RedirectTemp|ReflectorHeader|RemoteIP(?:Header|InternalProxy|InternalProxyList|ProxiesHeader|TrustedProxy|TrustedProxyList)|RemoveCharset|RemoveEncoding|RemoveHandler|RemoveInputFilter|RemoveLanguage|RemoveOutputFilter|RemoveType|RequestHeader|RequestReadTimeout|Require|Rewrite(?:Base|Cond|Engine|Map|Options|Rule)|RLimitCPU|RLimitMEM|RLimitNPROC|Satisfy|ScoreBoardFile|Script(?:Alias|AliasMatch|InterpreterSource|Log|LogBuffer|LogLength|Sock)?|SecureListen|SeeRequestTail|SendBufferSize|Server(?:Admin|Alias|Limit|Name|Path|Root|Signature|Tokens)|Session(?:Cookie(?:Name|Name2|Remove)|Crypto(?:Cipher|Driver|Passphrase|PassphraseFile)|DBD(?:CookieName|CookieName2|CookieRemove|DeleteLabel|InsertLabel|PerUser|SelectLabel|UpdateLabel)|Env|Exclude|Header|Include|MaxAge)?|SetEnv|SetEnvIf|SetEnvIfExpr|SetEnvIfNoCase|SetHandler|SetInputFilter|SetOutputFilter|SSIEndTag|SSIErrorMsg|SSIETag|SSILastModified|SSILegacyExprParser|SSIStartTag|SSITimeFormat|SSIUndefinedEcho|SSL(?:CACertificateFile|CACertificatePath|CADNRequestFile|CADNRequestPath|CARevocationCheck|CARevocationFile|CARevocationPath|CertificateChainFile|CertificateFile|CertificateKeyFile|CipherSuite|Compression|CryptoDevice|Engine|FIPS|HonorCipherOrder|InsecureRenegotiation|OCSP(?:DefaultResponder|Enable|OverrideResponder|ResponderTimeout|ResponseMaxAge|ResponseTimeSkew|UseRequestNonce)|OpenSSLConfCmd|Options|PassPhraseDialog|Protocol|Proxy(?:CACertificateFile|CACertificatePath|CARevocation(?:Check|File|Path)|CheckPeer(?:CN|Expire|Name)|CipherSuite|Engine|MachineCertificate(?:ChainFile|File|Path)|Protocol|Verify|VerifyDepth)|RandomSeed|RenegBufferSize|Require|RequireSSL|Session(?:Cache|CacheTimeout|TicketKeyFile|Tickets)|SRPUnknownUserSeed|SRPVerifierFile|Stapling(?:Cache|ErrorCacheTimeout|FakeTryLater|ForceURL|ResponderTimeout|ResponseMaxAge|ResponseTimeSkew|ReturnResponderErrors|StandardCacheTimeout)|StrictSNIVHostCheck|UserName|UseStapling|VerifyClient|VerifyDepth)|StartServers|StartThreads|Substitute|Suexec|SuexecUserGroup|ThreadLimit|ThreadsPerChild|ThreadStackSize|TimeOut|TraceEnable|TransferLog|TypesConfig|UnDefine|UndefMacro|UnsetEnv|Use|UseCanonicalName|UseCanonicalPhysicalPort|User|UserDir|VHostCGIMode|VHostCGIPrivs|VHostGroup|VHostPrivs|VHostSecure|VHostUser|Virtual(?:DocumentRoot|ScriptAlias)(?:IP)?|WatchdogInterval|XBitHack|xml2EncAlias|xml2EncDefault|xml2StartParse)\b/im,
+ lookbehind: !0,
+ alias: "property",
+ },
+ "directive-block": {
+ pattern:
+ /<\/?\b(?:Auth[nz]ProviderAlias|Directory|DirectoryMatch|Else|ElseIf|Files|FilesMatch|If|IfDefine|IfModule|IfVersion|Limit|LimitExcept|Location|LocationMatch|Macro|Proxy|Require(?:All|Any|None)|VirtualHost)\b.*>/i,
+ inside: {
+ "directive-block": {
+ pattern: /^<\/?\w+/,
+ inside: { punctuation: /^<\/?/ },
+ alias: "tag",
+ },
+ "directive-block-parameter": {
+ pattern: /.*[^>]/,
+ inside: {
+ punctuation: /:/,
+ string: {
+ pattern: /("|').*\1/,
+ inside: { variable: /[$%]\{?(?:\w\.?[-+:]?)+\}?/ },
+ },
+ },
+ alias: "attr-value",
+ },
+ punctuation: />/,
+ },
+ alias: "tag",
+ },
+ "directive-flags": { pattern: /\[(?:[\w=],?)+\]/, alias: "keyword" },
+ string: {
+ pattern: /("|').*\1/,
+ inside: { variable: /[$%]\{?(?:\w\.?[-+:]?)+\}?/ },
+ },
+ variable: /[$%]\{?(?:\w\.?[-+:]?)+\}?/,
+ regex: /\^?.*\$|\^.*\$?/,
+};
+Prism.languages.sql = {
+ comment: {
+ pattern: /(^|[^\\])(?:\/\*[\s\S]*?\*\/|(?:--|\/\/|#).*)/,
+ lookbehind: !0,
+ },
+ variable: [
+ { pattern: /@(["'`])(?:\\[\s\S]|(?!\1)[^\\])+\1/, greedy: !0 },
+ /@[\w.$]+/,
+ ],
+ string: {
+ pattern: /(^|[^@\\])("|')(?:\\[\s\S]|(?!\2)[^\\]|\2\2)*\2/,
+ greedy: !0,
+ lookbehind: !0,
+ },
+ identifier: {
+ pattern: /(^|[^@\\])`(?:\\[\s\S]|[^`\\]|``)*`/,
+ greedy: !0,
+ lookbehind: !0,
+ inside: { punctuation: /^`|`$/ },
+ },
+ function:
+ /\b(?:AVG|COUNT|FIRST|FORMAT|LAST|LCASE|LEN|MAX|MID|MIN|MOD|NOW|ROUND|SUM|UCASE)(?=\s*\()/i,
+ keyword:
+ /\b(?:ACTION|ADD|AFTER|ALGORITHM|ALL|ALTER|ANALYZE|ANY|APPLY|AS|ASC|AUTHORIZATION|AUTO_INCREMENT|BACKUP|BDB|BEGIN|BERKELEYDB|BIGINT|BINARY|BIT|BLOB|BOOL|BOOLEAN|BREAK|BROWSE|BTREE|BULK|BY|CALL|CASCADED?|CASE|CHAIN|CHAR(?:ACTER|SET)?|CHECK(?:POINT)?|CLOSE|CLUSTERED|COALESCE|COLLATE|COLUMNS?|COMMENT|COMMIT(?:TED)?|COMPUTE|CONNECT|CONSISTENT|CONSTRAINT|CONTAINS(?:TABLE)?|CONTINUE|CONVERT|CREATE|CROSS|CURRENT(?:_DATE|_TIME|_TIMESTAMP|_USER)?|CURSOR|CYCLE|DATA(?:BASES?)?|DATE(?:TIME)?|DAY|DBCC|DEALLOCATE|DEC|DECIMAL|DECLARE|DEFAULT|DEFINER|DELAYED|DELETE|DELIMITERS?|DENY|DESC|DESCRIBE|DETERMINISTIC|DISABLE|DISCARD|DISK|DISTINCT|DISTINCTROW|DISTRIBUTED|DO|DOUBLE|DROP|DUMMY|DUMP(?:FILE)?|DUPLICATE|ELSE(?:IF)?|ENABLE|ENCLOSED|END|ENGINE|ENUM|ERRLVL|ERRORS|ESCAPED?|EXCEPT|EXEC(?:UTE)?|EXISTS|EXIT|EXPLAIN|EXTENDED|FETCH|FIELDS|FILE|FILLFACTOR|FIRST|FIXED|FLOAT|FOLLOWING|FOR(?: EACH ROW)?|FORCE|FOREIGN|FREETEXT(?:TABLE)?|FROM|FULL|FUNCTION|GEOMETRY(?:COLLECTION)?|GLOBAL|GOTO|GRANT|GROUP|HANDLER|HASH|HAVING|HOLDLOCK|HOUR|IDENTITY(?:COL|_INSERT)?|IF|IGNORE|IMPORT|INDEX|INFILE|INNER|INNODB|INOUT|INSERT|INT|INTEGER|INTERSECT|INTERVAL|INTO|INVOKER|ISOLATION|ITERATE|JOIN|KEYS?|KILL|LANGUAGE|LAST|LEAVE|LEFT|LEVEL|LIMIT|LINENO|LINES|LINESTRING|LOAD|LOCAL|LOCK|LONG(?:BLOB|TEXT)|LOOP|MATCH(?:ED)?|MEDIUM(?:BLOB|INT|TEXT)|MERGE|MIDDLEINT|MINUTE|MODE|MODIFIES|MODIFY|MONTH|MULTI(?:LINESTRING|POINT|POLYGON)|NATIONAL|NATURAL|NCHAR|NEXT|NO|NONCLUSTERED|NULLIF|NUMERIC|OFF?|OFFSETS?|ON|OPEN(?:DATASOURCE|QUERY|ROWSET)?|OPTIMIZE|OPTION(?:ALLY)?|ORDER|OUT(?:ER|FILE)?|OVER|PARTIAL|PARTITION|PERCENT|PIVOT|PLAN|POINT|POLYGON|PRECEDING|PRECISION|PREPARE|PREV|PRIMARY|PRINT|PRIVILEGES|PROC(?:EDURE)?|PUBLIC|PURGE|QUICK|RAISERROR|READS?|REAL|RECONFIGURE|REFERENCES|RELEASE|RENAME|REPEAT(?:ABLE)?|REPLACE|REPLICATION|REQUIRE|RESIGNAL|RESTORE|RESTRICT|RETURN(?:ING|S)?|REVOKE|RIGHT|ROLLBACK|ROUTINE|ROW(?:COUNT|GUIDCOL|S)?|RTREE|RULE|SAVE(?:POINT)?|SCHEMA|SECOND|SELECT|SERIAL(?:IZABLE)?|SESSION(?:_USER)?|SET(?:USER)?|SHARE|SHOW|SHUTDOWN|SIMPLE|SMALLINT|SNAPSHOT|SOME|SONAME|SQL|START(?:ING)?|STATISTICS|STATUS|STRIPED|SYSTEM_USER|TABLES?|TABLESPACE|TEMP(?:ORARY|TABLE)?|TERMINATED|TEXT(?:SIZE)?|THEN|TIME(?:STAMP)?|TINY(?:BLOB|INT|TEXT)|TOP?|TRAN(?:SACTIONS?)?|TRIGGER|TRUNCATE|TSEQUAL|TYPES?|UNBOUNDED|UNCOMMITTED|UNDEFINED|UNION|UNIQUE|UNLOCK|UNPIVOT|UNSIGNED|UPDATE(?:TEXT)?|USAGE|USE|USER|USING|VALUES?|VAR(?:BINARY|CHAR|CHARACTER|YING)|VIEW|WAITFOR|WARNINGS|WHEN|WHERE|WHILE|WITH(?: ROLLUP|IN)?|WORK|WRITE(?:TEXT)?|YEAR)\b/i,
+ boolean: /\b(?:FALSE|NULL|TRUE)\b/i,
+ number: /\b0x[\da-f]+\b|\b\d+(?:\.\d*)?|\B\.\d+\b/i,
+ operator:
+ /[-+*\/=%^~]|&&?|\|\|?|!=?|<(?:=>?|<|>)?|>[>=]?|\b(?:AND|BETWEEN|DIV|ILIKE|IN|IS|LIKE|NOT|OR|REGEXP|RLIKE|SOUNDS LIKE|XOR)\b/i,
+ punctuation: /[;[\]()`,.]/,
+};
+!(function (e) {
+ var t =
+ /\b(?:(?:after|before)(?=\s+[a-z])|abstract|activate|and|any|array|as|asc|autonomous|begin|bigdecimal|blob|boolean|break|bulk|by|byte|case|cast|catch|char|class|collect|commit|const|continue|currency|date|datetime|decimal|default|delete|desc|do|double|else|end|enum|exception|exit|export|extends|final|finally|float|for|from|get(?=\s*[{};])|global|goto|group|having|hint|if|implements|import|in|inner|insert|instanceof|int|integer|interface|into|join|like|limit|list|long|loop|map|merge|new|not|null|nulls|number|object|of|on|or|outer|override|package|parallel|pragma|private|protected|public|retrieve|return|rollback|select|set|short|sObject|sort|static|string|super|switch|synchronized|system|testmethod|then|this|throw|time|transaction|transient|trigger|try|undelete|update|upsert|using|virtual|void|webservice|when|where|while|(?:inherited|with|without)\s+sharing)\b/i,
+ n =
+ "\\b(?:(?=[a-z_]\\w*\\s*[<\\[])|(?!))[A-Z_]\\w*(?:\\s*\\.\\s*[A-Z_]\\w*)*\\b(?:\\s*(?:\\[\\s*\\]|<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>))*".replace(
+ //g,
+ function () {
+ return t.source;
+ }
+ );
+ function i(e) {
+ return RegExp(
+ e.replace(//g, function () {
+ return n;
+ }),
+ "i"
+ );
+ }
+ var a = { keyword: t, punctuation: /[()\[\]{};,:.<>]/ };
+ e.languages.apex = {
+ comment: e.languages.clike.comment,
+ string: e.languages.clike.string,
+ sql: {
+ pattern: /((?:[=,({:]|\breturn)\s*)\[[^\[\]]*\]/i,
+ lookbehind: !0,
+ greedy: !0,
+ alias: "language-sql",
+ inside: e.languages.sql,
+ },
+ annotation: { pattern: /@\w+\b/, alias: "punctuation" },
+ "class-name": [
+ {
+ pattern: i(
+ "(\\b(?:class|enum|extends|implements|instanceof|interface|new|trigger\\s+\\w+\\s+on)\\s+)"
+ ),
+ lookbehind: !0,
+ inside: a,
+ },
+ {
+ pattern: i("(\\(\\s*)(?=\\s*\\)\\s*[\\w(])"),
+ lookbehind: !0,
+ inside: a,
+ },
+ { pattern: i("(?=\\s*\\w+\\s*[;=,(){:])"), inside: a },
+ ],
+ trigger: {
+ pattern: /(\btrigger\s+)\w+\b/i,
+ lookbehind: !0,
+ alias: "class-name",
+ },
+ keyword: t,
+ function: /\b[a-z_]\w*(?=\s*\()/i,
+ boolean: /\b(?:false|true)\b/i,
+ number: /(?:\B\.\d+|\b\d+(?:\.\d+|L)?)\b/i,
+ operator: /[!=](?:==?)?|\?\.?|&&|\|\||--|\+\+|[-+*/^&|]=?|:|<=?|>{1,3}=?/,
+ punctuation: /[()\[\]{};,.]/,
+ };
+})(Prism);
+Prism.languages.apl = {
+ comment: /(?:⍝|#[! ]).*$/m,
+ string: { pattern: /'(?:[^'\r\n]|'')*'/, greedy: !0 },
+ number:
+ /¯?(?:\d*\.?\b\d+(?:e[+¯]?\d+)?|¯|∞)(?:j¯?(?:(?:\d+(?:\.\d+)?|\.\d+)(?:e[+¯]?\d+)?|¯|∞))?/i,
+ statement: /:[A-Z][a-z][A-Za-z]*\b/,
+ "system-function": { pattern: /⎕[A-Z]+/i, alias: "function" },
+ constant: /[⍬⌾#⎕⍞]/,
+ function: /[-+×÷⌈⌊∣|⍳⍸?*⍟○!⌹<≤=>≥≠≡≢∊⍷∪∩~∨∧⍱⍲⍴,⍪⌽⊖⍉↑↓⊂⊃⊆⊇⌷⍋⍒⊤⊥⍕⍎⊣⊢⍁⍂≈⍯↗¤→]/,
+ "monadic-operator": { pattern: /[\\\/⌿⍀¨⍨⌶&∥]/, alias: "operator" },
+ "dyadic-operator": { pattern: /[.⍣⍠⍤∘⌸@⌺⍥]/, alias: "operator" },
+ assignment: { pattern: /←/, alias: "keyword" },
+ punctuation: /[\[;\]()◇⋄]/,
+ dfn: { pattern: /[{}⍺⍵⍶⍹∇⍫:]/, alias: "builtin" },
+};
+Prism.languages.applescript = {
+ comment: [
+ /\(\*(?:\(\*(?:[^*]|\*(?!\)))*\*\)|(?!\(\*)[\s\S])*?\*\)/,
+ /--.+/,
+ /#.+/,
+ ],
+ string: /"(?:\\.|[^"\\\r\n])*"/,
+ number: /(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e-?\d+)?\b/i,
+ operator: [
+ /[&=≠≤≥*+\-\/÷^]|[<>]=?/,
+ /\b(?:(?:begin|end|start)s? with|(?:contains?|(?:does not|doesn't) contain)|(?:is|isn't|is not) (?:contained by|in)|(?:(?:is|isn't|is not) )?(?:greater|less) than(?: or equal)?(?: to)?|(?:comes|(?:does not|doesn't) come) (?:after|before)|(?:is|isn't|is not) equal(?: to)?|(?:(?:does not|doesn't) equal|equal to|equals|is not|isn't)|(?:a )?(?:ref(?: to)?|reference to)|(?:and|as|div|mod|not|or))\b/,
+ ],
+ keyword:
+ /\b(?:about|above|after|against|apart from|around|aside from|at|back|before|beginning|behind|below|beneath|beside|between|but|by|considering|continue|copy|does|eighth|else|end|equal|error|every|exit|false|fifth|first|for|fourth|from|front|get|given|global|if|ignoring|in|instead of|into|is|it|its|last|local|me|middle|my|ninth|of|on|onto|out of|over|prop|property|put|repeat|return|returning|second|set|seventh|since|sixth|some|tell|tenth|that|the|then|third|through|thru|timeout|times|to|transaction|true|try|until|where|while|whose|with|without)\b/,
+ "class-name":
+ /\b(?:POSIX file|RGB color|alias|application|boolean|centimeters|centimetres|class|constant|cubic centimeters|cubic centimetres|cubic feet|cubic inches|cubic meters|cubic metres|cubic yards|date|degrees Celsius|degrees Fahrenheit|degrees Kelvin|feet|file|gallons|grams|inches|integer|kilograms|kilometers|kilometres|list|liters|litres|meters|metres|miles|number|ounces|pounds|quarts|real|record|reference|script|square feet|square kilometers|square kilometres|square meters|square metres|square miles|square yards|text|yards)\b/,
+ punctuation: /[{}():,¬«»《》]/,
+};
+Prism.languages.aql = {
+ comment: /\/\/.*|\/\*[\s\S]*?\*\//,
+ property: {
+ pattern:
+ /([{,]\s*)(?:(?!\d)\w+|(["'´`])(?:(?!\2)[^\\\r\n]|\\.)*\2)(?=\s*:)/,
+ lookbehind: !0,
+ greedy: !0,
+ },
+ string: { pattern: /(["'])(?:(?!\1)[^\\\r\n]|\\.)*\1/, greedy: !0 },
+ identifier: { pattern: /([´`])(?:(?!\1)[^\\\r\n]|\\.)*\1/, greedy: !0 },
+ variable: /@@?\w+/,
+ keyword: [
+ { pattern: /(\bWITH\s+)COUNT(?=\s+INTO\b)/i, lookbehind: !0 },
+ /\b(?:AGGREGATE|ALL|AND|ANY|ASC|COLLECT|DESC|DISTINCT|FILTER|FOR|GRAPH|IN|INBOUND|INSERT|INTO|K_PATHS|K_SHORTEST_PATHS|LET|LIKE|LIMIT|NONE|NOT|NULL|OR|OUTBOUND|REMOVE|REPLACE|RETURN|SHORTEST_PATH|SORT|UPDATE|UPSERT|WINDOW|WITH)\b/i,
+ { pattern: /(^|[^\w.[])(?:KEEP|PRUNE|SEARCH|TO)\b/i, lookbehind: !0 },
+ { pattern: /(^|[^\w.[])(?:CURRENT|NEW|OLD)\b/, lookbehind: !0 },
+ { pattern: /\bOPTIONS(?=\s*\{)/i },
+ ],
+ function: /\b(?!\d)\w+(?=\s*\()/,
+ boolean: /\b(?:false|true)\b/i,
+ range: { pattern: /\.\./, alias: "operator" },
+ number: [
+ /\b0b[01]+/i,
+ /\b0x[0-9a-f]+/i,
+ /(?:\B\.\d+|\b(?:0|[1-9]\d*)(?:\.\d+)?)(?:e[+-]?\d+)?/i,
+ ],
+ operator: /\*{2,}|[=!]~|[!=<>]=?|&&|\|\||[-+*/%]/,
+ punctuation: /::|[?.:,;()[\]{}]/,
+};
+(Prism.languages.c = Prism.languages.extend("clike", {
+ comment: {
+ pattern:
+ /\/\/(?:[^\r\n\\]|\\(?:\r\n?|\n|(?![\r\n])))*|\/\*[\s\S]*?(?:\*\/|$)/,
+ greedy: !0,
+ },
+ string: { pattern: /"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"/, greedy: !0 },
+ "class-name": {
+ pattern:
+ /(\b(?:enum|struct)\s+(?:__attribute__\s*\(\([\s\S]*?\)\)\s*)?)\w+|\b[a-z]\w*_t\b/,
+ lookbehind: !0,
+ },
+ keyword:
+ /\b(?:_Alignas|_Alignof|_Atomic|_Bool|_Complex|_Generic|_Imaginary|_Noreturn|_Static_assert|_Thread_local|__attribute__|asm|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|inline|int|long|register|return|short|signed|sizeof|static|struct|switch|typedef|typeof|union|unsigned|void|volatile|while)\b/,
+ function: /\b[a-z_]\w*(?=\s*\()/i,
+ number:
+ /(?:\b0x(?:[\da-f]+(?:\.[\da-f]*)?|\.[\da-f]+)(?:p[+-]?\d+)?|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?)[ful]{0,4}/i,
+ operator: />>=?|<<=?|->|([-+&|:])\1|[?:~]|[-+*/%&|^!=<>]=?/,
+})),
+ Prism.languages.insertBefore("c", "string", {
+ char: { pattern: /'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n]){0,32}'/, greedy: !0 },
+ }),
+ Prism.languages.insertBefore("c", "string", {
+ macro: {
+ pattern:
+ /(^[\t ]*)#\s*[a-z](?:[^\r\n\\/]|\/(?!\*)|\/\*(?:[^*]|\*(?!\/))*\*\/|\\(?:\r\n|[\s\S]))*/im,
+ lookbehind: !0,
+ greedy: !0,
+ alias: "property",
+ inside: {
+ string: [
+ { pattern: /^(#\s*include\s*)<[^>]+>/, lookbehind: !0 },
+ Prism.languages.c.string,
+ ],
+ char: Prism.languages.c.char,
+ comment: Prism.languages.c.comment,
+ "macro-name": [
+ { pattern: /(^#\s*define\s+)\w+\b(?!\()/i, lookbehind: !0 },
+ {
+ pattern: /(^#\s*define\s+)\w+\b(?=\()/i,
+ lookbehind: !0,
+ alias: "function",
+ },
+ ],
+ directive: {
+ pattern: /^(#\s*)[a-z]+/,
+ lookbehind: !0,
+ alias: "keyword",
+ },
+ "directive-hash": /^#/,
+ punctuation: /##|\\(?=[\r\n])/,
+ expression: { pattern: /\S[\s\S]*/, inside: Prism.languages.c },
+ },
+ },
+ }),
+ Prism.languages.insertBefore("c", "function", {
+ constant:
+ /\b(?:EOF|NULL|SEEK_CUR|SEEK_END|SEEK_SET|__DATE__|__FILE__|__LINE__|__TIMESTAMP__|__TIME__|__func__|stderr|stdin|stdout)\b/,
+ }),
+ delete Prism.languages.c.boolean;
+!(function (e) {
+ var t =
+ /\b(?:alignas|alignof|asm|auto|bool|break|case|catch|char|char16_t|char32_t|char8_t|class|co_await|co_return|co_yield|compl|concept|const|const_cast|consteval|constexpr|constinit|continue|decltype|default|delete|do|double|dynamic_cast|else|enum|explicit|export|extern|final|float|for|friend|goto|if|import|inline|int|int16_t|int32_t|int64_t|int8_t|long|module|mutable|namespace|new|noexcept|nullptr|operator|override|private|protected|public|register|reinterpret_cast|requires|return|short|signed|sizeof|static|static_assert|static_cast|struct|switch|template|this|thread_local|throw|try|typedef|typeid|typename|uint16_t|uint32_t|uint64_t|uint8_t|union|unsigned|using|virtual|void|volatile|wchar_t|while)\b/,
+ n = "\\b(?!)\\w+(?:\\s*\\.\\s*\\w+)*\\b".replace(
+ //g,
+ function () {
+ return t.source;
+ }
+ );
+ (e.languages.cpp = e.languages.extend("c", {
+ "class-name": [
+ {
+ pattern: RegExp(
+ "(\\b(?:class|concept|enum|struct|typename)\\s+)(?!)\\w+".replace(
+ //g,
+ function () {
+ return t.source;
+ }
+ )
+ ),
+ lookbehind: !0,
+ },
+ /\b[A-Z]\w*(?=\s*::\s*\w+\s*\()/,
+ /\b[A-Z_]\w*(?=\s*::\s*~\w+\s*\()/i,
+ /\b\w+(?=\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>\s*::\s*\w+\s*\()/,
+ ],
+ keyword: t,
+ number: {
+ pattern:
+ /(?:\b0b[01']+|\b0x(?:[\da-f']+(?:\.[\da-f']*)?|\.[\da-f']+)(?:p[+-]?[\d']+)?|(?:\b[\d']+(?:\.[\d']*)?|\B\.[\d']+)(?:e[+-]?[\d']+)?)[ful]{0,4}/i,
+ greedy: !0,
+ },
+ operator:
+ />>=?|<<=?|->|--|\+\+|&&|\|\||[?:~]|<=>|[-+*/%&|^!=<>]=?|\b(?:and|and_eq|bitand|bitor|not|not_eq|or|or_eq|xor|xor_eq)\b/,
+ boolean: /\b(?:false|true)\b/,
+ })),
+ e.languages.insertBefore("cpp", "string", {
+ module: {
+ pattern: RegExp(
+ '(\\b(?:import|module)\\s+)(?:"(?:\\\\(?:\r\n|[^])|[^"\\\\\r\n])*"|<[^<>\r\n]*>|' +
+ "(?:\\s*:\\s*)?|:\\s*".replace(
+ //g,
+ function () {
+ return n;
+ }
+ ) +
+ ")"
+ ),
+ lookbehind: !0,
+ greedy: !0,
+ inside: { string: /^[<"][\s\S]+/, operator: /:/, punctuation: /\./ },
+ },
+ "raw-string": {
+ pattern: /R"([^()\\ ]{0,16})\([\s\S]*?\)\1"/,
+ alias: "string",
+ greedy: !0,
+ },
+ }),
+ e.languages.insertBefore("cpp", "keyword", {
+ "generic-function": {
+ pattern: /\b(?!operator\b)[a-z_]\w*\s*<(?:[^<>]|<[^<>]*>)*>(?=\s*\()/i,
+ inside: {
+ function: /^\w+/,
+ generic: {
+ pattern: /<[\s\S]+/,
+ alias: "class-name",
+ inside: e.languages.cpp,
+ },
+ },
+ },
+ }),
+ e.languages.insertBefore("cpp", "operator", {
+ "double-colon": { pattern: /::/, alias: "punctuation" },
+ }),
+ e.languages.insertBefore("cpp", "class-name", {
+ "base-clause": {
+ pattern:
+ /(\b(?:class|struct)\s+\w+\s*:\s*)[^;{}"'\s]+(?:\s+[^;{}"'\s]+)*(?=\s*[;{])/,
+ lookbehind: !0,
+ greedy: !0,
+ inside: e.languages.extend("cpp", {}),
+ },
+ }),
+ e.languages.insertBefore(
+ "inside",
+ "double-colon",
+ { "class-name": /\b[a-z_]\w*\b(?!\s*::)/i },
+ e.languages.cpp["base-clause"]
+ );
+})(Prism);
+(Prism.languages.arduino = Prism.languages.extend("cpp", {
+ keyword:
+ /\b(?:String|array|bool|boolean|break|byte|case|catch|continue|default|do|double|else|finally|for|function|goto|if|in|instanceof|int|integer|long|loop|new|null|return|setup|string|switch|throw|try|void|while|word)\b/,
+ constant:
+ /\b(?:ANALOG_MESSAGE|DEFAULT|DIGITAL_MESSAGE|EXTERNAL|FIRMATA_STRING|HIGH|INPUT|INPUT_PULLUP|INTERNAL|INTERNAL1V1|INTERNAL2V56|LED_BUILTIN|LOW|OUTPUT|REPORT_ANALOG|REPORT_DIGITAL|SET_PIN_MODE|SYSEX_START|SYSTEM_RESET)\b/,
+ builtin:
+ /\b(?:Audio|BSSID|Bridge|Client|Console|EEPROM|Esplora|EsploraTFT|Ethernet|EthernetClient|EthernetServer|EthernetUDP|File|FileIO|FileSystem|Firmata|GPRS|GSM|GSMBand|GSMClient|GSMModem|GSMPIN|GSMScanner|GSMServer|GSMVoiceCall|GSM_SMS|HttpClient|IPAddress|IRread|Keyboard|KeyboardController|LiquidCrystal|LiquidCrystal_I2C|Mailbox|Mouse|MouseController|PImage|Process|RSSI|RobotControl|RobotMotor|SD|SPI|SSID|Scheduler|Serial|Server|Servo|SoftwareSerial|Stepper|Stream|TFT|Task|USBHost|WiFi|WiFiClient|WiFiServer|WiFiUDP|Wire|YunClient|YunServer|abs|addParameter|analogRead|analogReadResolution|analogReference|analogWrite|analogWriteResolution|answerCall|attach|attachGPRS|attachInterrupt|attached|autoscroll|available|background|beep|begin|beginPacket|beginSD|beginSMS|beginSpeaker|beginTFT|beginTransmission|beginWrite|bit|bitClear|bitRead|bitSet|bitWrite|blink|blinkVersion|buffer|changePIN|checkPIN|checkPUK|checkReg|circle|cityNameRead|cityNameWrite|clear|clearScreen|click|close|compassRead|config|connect|connected|constrain|cos|countryNameRead|countryNameWrite|createChar|cursor|debugPrint|delay|delayMicroseconds|detach|detachInterrupt|digitalRead|digitalWrite|disconnect|display|displayLogos|drawBMP|drawCompass|encryptionType|end|endPacket|endSMS|endTransmission|endWrite|exists|exitValue|fill|find|findUntil|flush|gatewayIP|get|getAsynchronously|getBand|getButton|getCurrentCarrier|getIMEI|getKey|getModifiers|getOemKey|getPINUsed|getResult|getSignalStrength|getSocket|getVoiceCallStatus|getXChange|getYChange|hangCall|height|highByte|home|image|interrupts|isActionDone|isDirectory|isListening|isPIN|isPressed|isValid|keyPressed|keyReleased|keyboardRead|knobRead|leftToRight|line|lineFollowConfig|listen|listenOnLocalhost|loadImage|localIP|lowByte|macAddress|maintain|map|max|messageAvailable|micros|millis|min|mkdir|motorsStop|motorsWrite|mouseDragged|mouseMoved|mousePressed|mouseReleased|move|noAutoscroll|noBlink|noBuffer|noCursor|noDisplay|noFill|noInterrupts|noListenOnLocalhost|noStroke|noTone|onReceive|onRequest|open|openNextFile|overflow|parseCommand|parseFloat|parseInt|parsePacket|pauseMode|peek|pinMode|playFile|playMelody|point|pointTo|position|pow|prepare|press|print|printFirmwareVersion|printVersion|println|process|processInput|pulseIn|put|random|randomSeed|read|readAccelerometer|readBlue|readButton|readBytes|readBytesUntil|readGreen|readJoystickButton|readJoystickSwitch|readJoystickX|readJoystickY|readLightSensor|readMessage|readMicrophone|readNetworks|readRed|readSlider|readString|readStringUntil|readTemperature|ready|rect|release|releaseAll|remoteIP|remoteNumber|remotePort|remove|requestFrom|retrieveCallingNumber|rewindDirectory|rightToLeft|rmdir|robotNameRead|robotNameWrite|run|runAsynchronously|runShellCommand|runShellCommandAsynchronously|running|scanNetworks|scrollDisplayLeft|scrollDisplayRight|seek|sendAnalog|sendDigitalPortPair|sendDigitalPorts|sendString|sendSysex|serialEvent|setBand|setBitOrder|setClockDivider|setCursor|setDNS|setDataMode|setFirmwareVersion|setMode|setPINUsed|setSpeed|setTextSize|setTimeout|shiftIn|shiftOut|shutdown|sin|size|sqrt|startLoop|step|stop|stroke|subnetMask|switchPIN|tan|tempoWrite|text|tone|transfer|tuneWrite|turn|updateIR|userNameRead|userNameWrite|voiceCall|waitContinue|width|write|writeBlue|writeGreen|writeJSON|writeMessage|writeMicroseconds|writeRGB|writeRed|yield)\b/,
+})),
+ (Prism.languages.ino = Prism.languages.arduino);
+Prism.languages.arff = {
+ comment: /%.*/,
+ string: { pattern: /(["'])(?:\\.|(?!\1)[^\\\r\n])*\1/, greedy: !0 },
+ keyword: /@(?:attribute|data|end|relation)\b/i,
+ number: /\b\d+(?:\.\d+)?\b/,
+ punctuation: /[{},]/,
+};
+(Prism.languages.armasm = {
+ comment: { pattern: /;.*/, greedy: !0 },
+ string: {
+ pattern: /"(?:[^"\r\n]|"")*"/,
+ greedy: !0,
+ inside: {
+ variable: { pattern: /((?:^|[^$])(?:\${2})*)\$\w+/, lookbehind: !0 },
+ },
+ },
+ char: { pattern: /'(?:[^'\r\n]{0,4}|'')'/, greedy: !0 },
+ "version-symbol": { pattern: /\|[\w@]+\|/, greedy: !0, alias: "property" },
+ boolean: /\b(?:FALSE|TRUE)\b/,
+ directive: {
+ pattern:
+ /\b(?:ALIAS|ALIGN|AREA|ARM|ASSERT|ATTR|CN|CODE|CODE16|CODE32|COMMON|CP|DATA|DCB|DCD|DCDO|DCDU|DCFD|DCFDU|DCI|DCQ|DCQU|DCW|DCWU|DN|ELIF|ELSE|END|ENDFUNC|ENDIF|ENDP|ENTRY|EQU|EXPORT|EXPORTAS|EXTERN|FIELD|FILL|FN|FUNCTION|GBLA|GBLL|GBLS|GET|GLOBAL|IF|IMPORT|INCBIN|INCLUDE|INFO|KEEP|LCLA|LCLL|LCLS|LTORG|MACRO|MAP|MEND|MEXIT|NOFP|OPT|PRESERVE8|PROC|QN|READONLY|RELOC|REQUIRE|REQUIRE8|RLIST|ROUT|SETA|SETL|SETS|SN|SPACE|SUBT|THUMB|THUMBX|TTL|WEND|WHILE)\b/,
+ alias: "property",
+ },
+ instruction: {
+ pattern:
+ /((?:^|(?:^|[^\\])(?:\r\n?|\n))[ \t]*(?:(?:[A-Z][A-Z0-9_]*[a-z]\w*|[a-z]\w*|\d+)[ \t]+)?)\b[A-Z.]+\b/,
+ lookbehind: !0,
+ alias: "keyword",
+ },
+ variable: /\$\w+/,
+ number:
+ /(?:\b[2-9]_\d+|(?:\b\d+(?:\.\d+)?|\B\.\d+)(?:e-?\d+)?|\b0(?:[fd]_|x)[0-9a-f]+|&[0-9a-f]+)\b/i,
+ register: { pattern: /\b(?:r\d|lr)\b/, alias: "symbol" },
+ operator: /<>|<<|>>|&&|\|\||[=!<>/]=?|[+\-*%#?&|^]|:[A-Z]+:/,
+ punctuation: /[()[\],]/,
+}),
+ (Prism.languages["arm-asm"] = Prism.languages.armasm);
+!(function (e) {
+ var a = function (a, t) {
+ return {
+ pattern: RegExp("\\{!(?:" + (t || a) + ")$[^]*\\}", "m"),
+ greedy: !0,
+ inside: {
+ embedded: {
+ pattern: /(^\{!\w+\b)[\s\S]+(?=\}$)/,
+ lookbehind: !0,
+ alias: "language-" + a,
+ inside: e.languages[a],
+ },
+ string: /[\s\S]+/,
+ },
+ };
+ };
+ (e.languages.arturo = {
+ comment: { pattern: /;.*/, greedy: !0 },
+ character: { pattern: /`.`/, alias: "char", greedy: !0 },
+ number: { pattern: /\b\d+(?:\.\d+(?:\.\d+(?:-[\w+-]+)?)?)?\b/ },
+ string: { pattern: /"(?:[^"\\\r\n]|\\.)*"/, greedy: !0 },
+ regex: { pattern: /\{\/.*?\/\}/, greedy: !0 },
+ "html-string": a("html"),
+ "css-string": a("css"),
+ "js-string": a("js"),
+ "md-string": a("md"),
+ "sql-string": a("sql"),
+ "sh-string": a("shell", "sh"),
+ multistring: {
+ pattern: /».*|\{:[\s\S]*?:\}|\{[\s\S]*?\}|^-{6}$[\s\S]*/m,
+ alias: "string",
+ greedy: !0,
+ },
+ label: { pattern: /\w+\b\??:/, alias: "property" },
+ literal: { pattern: /'(?:\w+\b\??:?)/, alias: "constant" },
+ type: { pattern: /:(?:\w+\b\??:?)/, alias: "class-name" },
+ color: /#\w+/,
+ predicate: {
+ pattern:
+ /\b(?:all|and|any|ascii|attr|attribute|attributeLabel|binary|block|char|contains|database|date|dictionary|empty|equal|even|every|exists|false|floating|function|greater|greaterOrEqual|if|in|inline|integer|is|key|label|leap|less|lessOrEqual|literal|logical|lower|nand|negative|nor|not|notEqual|null|numeric|odd|or|path|pathLabel|positive|prefix|prime|regex|same|set|some|sorted|standalone|string|subset|suffix|superset|symbol|symbolLiteral|true|try|type|unless|upper|when|whitespace|word|xnor|xor|zero)\?/,
+ alias: "keyword",
+ },
+ "builtin-function": {
+ pattern:
+ /\b(?:abs|acos|acosh|acsec|acsech|actan|actanh|add|after|alert|alias|and|angle|append|arg|args|arity|array|as|asec|asech|asin|asinh|atan|atan2|atanh|attr|attrs|average|before|benchmark|blend|break|call|capitalize|case|ceil|chop|clear|clip|close|color|combine|conj|continue|copy|cos|cosh|crc|csec|csech|ctan|ctanh|cursor|darken|dec|decode|define|delete|desaturate|deviation|dialog|dictionary|difference|digest|digits|div|do|download|drop|dup|e|else|empty|encode|ensure|env|escape|execute|exit|exp|extend|extract|factors|fdiv|filter|first|flatten|floor|fold|from|function|gamma|gcd|get|goto|hash|hypot|if|inc|indent|index|infinity|info|input|insert|inspect|intersection|invert|jaro|join|keys|kurtosis|last|let|levenshtein|lighten|list|ln|log|loop|lower|mail|map|match|max|median|min|mod|module|mul|nand|neg|new|nor|normalize|not|now|null|open|or|outdent|pad|palette|panic|path|pause|permissions|permutate|pi|pop|popup|pow|powerset|powmod|prefix|print|prints|process|product|query|random|range|read|relative|remove|rename|render|repeat|replace|request|return|reverse|round|sample|saturate|script|sec|sech|select|serve|set|shl|shr|shuffle|sin|sinh|size|skewness|slice|sort|spin|split|sqrt|squeeze|stack|strip|sub|suffix|sum|switch|symbols|symlink|sys|take|tan|tanh|terminal|terminate|to|truncate|try|type|unclip|union|unique|unless|until|unzip|upper|values|var|variance|volume|webview|while|with|wordwrap|write|xnor|xor|zip)\b/,
+ alias: "keyword",
+ },
+ sugar: { pattern: /->|=>|\||::/, alias: "operator" },
+ punctuation: /[()[\],]/,
+ symbol: {
+ pattern: /<:|-:|ø|@|#|\+|\||\*|\$|---|-|%|\/|\.\.|\^|~|=|<|>|\\/,
+ },
+ boolean: { pattern: /\b(?:false|maybe|true)\b/ },
+ }),
+ (e.languages.art = e.languages.arturo);
+})(Prism);
+!(function (t) {
+ var n = {
+ pattern:
+ /(^[ \t]*)\[(?!\[)(?:(["'$`])(?:(?!\2)[^\\]|\\.)*\2|\[(?:[^\[\]\\]|\\.)*\]|[^\[\]\\"'$`]|\\.)*\]/m,
+ lookbehind: !0,
+ inside: {
+ quoted: {
+ pattern: /([$`])(?:(?!\1)[^\\]|\\.)*\1/,
+ inside: { punctuation: /^[$`]|[$`]$/ },
+ },
+ interpreted: {
+ pattern: /'(?:[^'\\]|\\.)*'/,
+ inside: { punctuation: /^'|'$/ },
+ },
+ string: /"(?:[^"\\]|\\.)*"/,
+ variable: /\w+(?==)/,
+ punctuation: /^\[|\]$|,/,
+ operator: /=/,
+ "attr-value": /(?!^\s+$).+/,
+ },
+ },
+ i = (t.languages.asciidoc = {
+ "comment-block": { pattern: /^(\/{4,})$[\s\S]*?^\1/m, alias: "comment" },
+ table: {
+ pattern: /^\|={3,}(?:(?:\r?\n|\r(?!\n)).*)*?(?:\r?\n|\r)\|={3,}$/m,
+ inside: {
+ specifiers: {
+ pattern:
+ /(?:(?:(?:\d+(?:\.\d+)?|\.\d+)[+*](?:[<^>](?:\.[<^>])?|\.[<^>])?|[<^>](?:\.[<^>])?|\.[<^>])[a-z]*|[a-z]+)(?=\|)/,
+ alias: "attr-value",
+ },
+ punctuation: { pattern: /(^|[^\\])[|!]=*/, lookbehind: !0 },
+ },
+ },
+ "passthrough-block": {
+ pattern: /^(\+{4,})$[\s\S]*?^\1$/m,
+ inside: { punctuation: /^\++|\++$/ },
+ },
+ "literal-block": {
+ pattern: /^(-{4,}|\.{4,})$[\s\S]*?^\1$/m,
+ inside: { punctuation: /^(?:-+|\.+)|(?:-+|\.+)$/ },
+ },
+ "other-block": {
+ pattern: /^(--|\*{4,}|_{4,}|={4,})$[\s\S]*?^\1$/m,
+ inside: { punctuation: /^(?:-+|\*+|_+|=+)|(?:-+|\*+|_+|=+)$/ },
+ },
+ "list-punctuation": {
+ pattern:
+ /(^[ \t]*)(?:-|\*{1,5}|\.{1,5}|(?:[a-z]|\d+)\.|[xvi]+\))(?= )/im,
+ lookbehind: !0,
+ alias: "punctuation",
+ },
+ "list-label": {
+ pattern: /(^[ \t]*)[a-z\d].+(?::{2,4}|;;)(?=\s)/im,
+ lookbehind: !0,
+ alias: "symbol",
+ },
+ "indented-block": {
+ pattern: /((\r?\n|\r)\2)([ \t]+)\S.*(?:(?:\r?\n|\r)\3.+)*(?=\2{2}|$)/,
+ lookbehind: !0,
+ },
+ comment: /^\/\/.*/m,
+ title: {
+ pattern:
+ /^.+(?:\r?\n|\r)(?:={3,}|-{3,}|~{3,}|\^{3,}|\+{3,})$|^={1,5} .+|^\.(?![\s.]).*/m,
+ alias: "important",
+ inside: { punctuation: /^(?:\.|=+)|(?:=+|-+|~+|\^+|\++)$/ },
+ },
+ "attribute-entry": {
+ pattern: /^:[^:\r\n]+:(?: .*?(?: \+(?:\r?\n|\r).*?)*)?$/m,
+ alias: "tag",
+ },
+ attributes: n,
+ hr: { pattern: /^'{3,}$/m, alias: "punctuation" },
+ "page-break": { pattern: /^<{3,}$/m, alias: "punctuation" },
+ admonition: {
+ pattern: /^(?:CAUTION|IMPORTANT|NOTE|TIP|WARNING):/m,
+ alias: "keyword",
+ },
+ callout: [
+ { pattern: /(^[ \t]*)\d*>/m, lookbehind: !0, alias: "symbol" },
+ { pattern: /<\d+>/, alias: "symbol" },
+ ],
+ macro: {
+ pattern:
+ /\b[a-z\d][a-z\d-]*::?(?:[^\s\[\]]*\[(?:[^\]\\"']|(["'])(?:(?!\1)[^\\]|\\.)*\1|\\.)*\])/,
+ inside: {
+ function: /^[a-z\d-]+(?=:)/,
+ punctuation: /^::?/,
+ attributes: {
+ pattern: /(?:\[(?:[^\]\\"']|(["'])(?:(?!\1)[^\\]|\\.)*\1|\\.)*\])/,
+ inside: n.inside,
+ },
+ },
+ },
+ inline: {
+ pattern:
+ /(^|[^\\])(?:(?:\B\[(?:[^\]\\"']|(["'])(?:(?!\2)[^\\]|\\.)*\2|\\.)*\])?(?:\b_(?!\s)(?: _|[^_\\\r\n]|\\.)+(?:(?:\r?\n|\r)(?: _|[^_\\\r\n]|\\.)+)*_\b|\B``(?!\s).+?(?:(?:\r?\n|\r).+?)*''\B|\B`(?!\s)(?:[^`'\s]|\s+\S)+['`]\B|\B(['*+#])(?!\s)(?: \3|(?!\3)[^\\\r\n]|\\.)+(?:(?:\r?\n|\r)(?: \3|(?!\3)[^\\\r\n]|\\.)+)*\3\B)|(?:\[(?:[^\]\\"']|(["'])(?:(?!\4)[^\\]|\\.)*\4|\\.)*\])?(?:(__|\*\*|\+\+\+?|##|\$\$|[~^]).+?(?:(?:\r?\n|\r).+?)*\5|\{[^}\r\n]+\}|\[\[\[?.+?(?:(?:\r?\n|\r).+?)*\]?\]\]|<<.+?(?:(?:\r?\n|\r).+?)*>>|\(\(\(?.+?(?:(?:\r?\n|\r).+?)*\)?\)\)))/m,
+ lookbehind: !0,
+ inside: {
+ attributes: n,
+ url: {
+ pattern: /^(?:\[\[\[?.+?\]?\]\]|<<.+?>>)$/,
+ inside: { punctuation: /^(?:\[\[\[?|<<)|(?:\]\]\]?|>>)$/ },
+ },
+ "attribute-ref": {
+ pattern: /^\{.+\}$/,
+ inside: {
+ variable: { pattern: /(^\{)[a-z\d,+_-]+/, lookbehind: !0 },
+ operator: /^[=?!#%@$]|!(?=[:}])/,
+ punctuation: /^\{|\}$|::?/,
+ },
+ },
+ italic: {
+ pattern: /^(['_])[\s\S]+\1$/,
+ inside: { punctuation: /^(?:''?|__?)|(?:''?|__?)$/ },
+ },
+ bold: {
+ pattern: /^\*[\s\S]+\*$/,
+ inside: { punctuation: /^\*\*?|\*\*?$/ },
+ },
+ punctuation:
+ /^(?:``?|\+{1,3}|##?|\$\$|[~^]|\(\(\(?)|(?:''?|\+{1,3}|##?|\$\$|[~^`]|\)?\)\))$/,
+ },
+ },
+ replacement: { pattern: /\((?:C|R|TM)\)/, alias: "builtin" },
+ entity: /?[\da-z]{1,8};/i,
+ "line-continuation": {
+ pattern: /(^| )\+$/m,
+ lookbehind: !0,
+ alias: "punctuation",
+ },
+ });
+ function e(t) {
+ for (var n = {}, e = 0, a = (t = t.split(" ")).length; e < a; e++)
+ n[t[e]] = i[t[e]];
+ return n;
+ }
+ (n.inside.interpreted.inside.rest = e("macro inline replacement entity")),
+ (i["passthrough-block"].inside.rest = e("macro")),
+ (i["literal-block"].inside.rest = e("callout")),
+ (i.table.inside.rest = e(
+ "comment-block passthrough-block literal-block other-block list-punctuation indented-block comment title attribute-entry attributes hr page-break admonition list-label callout macro inline replacement entity line-continuation"
+ )),
+ (i["other-block"].inside.rest = e(
+ "table list-punctuation indented-block comment attribute-entry attributes hr page-break admonition list-label macro inline replacement entity line-continuation"
+ )),
+ (i.title.inside.rest = e("macro inline replacement entity")),
+ t.hooks.add("wrap", function (t) {
+ "entity" === t.type &&
+ (t.attributes.title = t.content.replace(/&/, "&"));
+ }),
+ (t.languages.adoc = t.languages.asciidoc);
+})(Prism);
+!(function (e) {
+ function n(e, n) {
+ return e.replace(/<<(\d+)>>/g, function (e, s) {
+ return "(?:" + n[+s] + ")";
+ });
+ }
+ function s(e, s, a) {
+ return RegExp(n(e, s), a || "");
+ }
+ function a(e, n) {
+ for (var s = 0; s < n; s++)
+ e = e.replace(/<>/g, function () {
+ return "(?:" + e + ")";
+ });
+ return e.replace(/<>/g, "[^\\s\\S]");
+ }
+ var t =
+ "bool byte char decimal double dynamic float int long object sbyte short string uint ulong ushort var void",
+ r = "class enum interface record struct",
+ i =
+ "add alias and ascending async await by descending from(?=\\s*(?:\\w|$)) get global group into init(?=\\s*;) join let nameof not notnull on or orderby partial remove select set unmanaged value when where with(?=\\s*{)",
+ o =
+ "abstract as base break case catch checked const continue default delegate do else event explicit extern finally fixed for foreach goto if implicit in internal is lock namespace new null operator out override params private protected public readonly ref return sealed sizeof stackalloc static switch this throw try typeof unchecked unsafe using virtual volatile while yield";
+ function l(e) {
+ return "\\b(?:" + e.trim().replace(/ /g, "|") + ")\\b";
+ }
+ var d = l(r),
+ p = RegExp(l(t + " " + r + " " + i + " " + o)),
+ c = l(r + " " + i + " " + o),
+ u = l(t + " " + r + " " + o),
+ g = a("<(?:[^<>;=+\\-*/%&|^]|<>)*>", 2),
+ b = a("\\((?:[^()]|<>)*\\)", 2),
+ h = "@?\\b[A-Za-z_]\\w*\\b",
+ f = n("<<0>>(?:\\s*<<1>>)?", [h, g]),
+ m = n("(?!<<0>>)<<1>>(?:\\s*\\.\\s*<<1>>)*", [c, f]),
+ k = "\\[\\s*(?:,\\s*)*\\]",
+ y = n("<<0>>(?:\\s*(?:\\?\\s*)?<<1>>)*(?:\\s*\\?)?", [m, k]),
+ w = n("[^,()<>[\\];=+\\-*/%&|^]|<<0>>|<<1>>|<<2>>", [g, b, k]),
+ v = n("\\(<<0>>+(?:,<<0>>+)+\\)", [w]),
+ x = n("(?:<<0>>|<<1>>)(?:\\s*(?:\\?\\s*)?<<2>>)*(?:\\s*\\?)?", [v, m, k]),
+ $ = { keyword: p, punctuation: /[<>()?,.:[\]]/ },
+ _ = "'(?:[^\r\n'\\\\]|\\\\.|\\\\[Uux][\\da-fA-F]{1,8})'",
+ B = '"(?:\\\\.|[^\\\\"\r\n])*"';
+ (e.languages.csharp = e.languages.extend("clike", {
+ string: [
+ {
+ pattern: s("(^|[^$\\\\])<<0>>", ['@"(?:""|\\\\[^]|[^\\\\"])*"(?!")']),
+ lookbehind: !0,
+ greedy: !0,
+ },
+ { pattern: s("(^|[^@$\\\\])<<0>>", [B]), lookbehind: !0, greedy: !0 },
+ ],
+ "class-name": [
+ {
+ pattern: s("(\\busing\\s+static\\s+)<<0>>(?=\\s*;)", [m]),
+ lookbehind: !0,
+ inside: $,
+ },
+ {
+ pattern: s("(\\busing\\s+<<0>>\\s*=\\s*)<<1>>(?=\\s*;)", [h, x]),
+ lookbehind: !0,
+ inside: $,
+ },
+ { pattern: s("(\\busing\\s+)<<0>>(?=\\s*=)", [h]), lookbehind: !0 },
+ { pattern: s("(\\b<<0>>\\s+)<<1>>", [d, f]), lookbehind: !0, inside: $ },
+ {
+ pattern: s("(\\bcatch\\s*\\(\\s*)<<0>>", [m]),
+ lookbehind: !0,
+ inside: $,
+ },
+ { pattern: s("(\\bwhere\\s+)<<0>>", [h]), lookbehind: !0 },
+ {
+ pattern: s("(\\b(?:is(?:\\s+not)?|as)\\s+)<<0>>", [y]),
+ lookbehind: !0,
+ inside: $,
+ },
+ {
+ pattern: s(
+ "\\b<<0>>(?=\\s+(?!<<1>>|with\\s*\\{)<<2>>(?:\\s*[=,;:{)\\]]|\\s+(?:in|when)\\b))",
+ [x, u, h]
+ ),
+ inside: $,
+ },
+ ],
+ keyword: p,
+ number:
+ /(?:\b0(?:x[\da-f_]*[\da-f]|b[01_]*[01])|(?:\B\.\d+(?:_+\d+)*|\b\d+(?:_+\d+)*(?:\.\d+(?:_+\d+)*)?)(?:e[-+]?\d+(?:_+\d+)*)?)(?:[dflmu]|lu|ul)?\b/i,
+ operator: />>=?|<<=?|[-=]>|([-+&|])\1|~|\?\?=?|[-+*/%&|^!=<>]=?/,
+ punctuation: /\?\.?|::|[{}[\];(),.:]/,
+ })),
+ e.languages.insertBefore("csharp", "number", {
+ range: { pattern: /\.\./, alias: "operator" },
+ }),
+ e.languages.insertBefore("csharp", "punctuation", {
+ "named-parameter": {
+ pattern: s("([(,]\\s*)<<0>>(?=\\s*:)", [h]),
+ lookbehind: !0,
+ alias: "punctuation",
+ },
+ }),
+ e.languages.insertBefore("csharp", "class-name", {
+ namespace: {
+ pattern: s(
+ "(\\b(?:namespace|using)\\s+)<<0>>(?:\\s*\\.\\s*<<0>>)*(?=\\s*[;{])",
+ [h]
+ ),
+ lookbehind: !0,
+ inside: { punctuation: /\./ },
+ },
+ "type-expression": {
+ pattern: s(
+ "(\\b(?:default|sizeof|typeof)\\s*\\(\\s*(?!\\s))(?:[^()\\s]|\\s(?!\\s)|<<0>>)*(?=\\s*\\))",
+ [b]
+ ),
+ lookbehind: !0,
+ alias: "class-name",
+ inside: $,
+ },
+ "return-type": {
+ pattern: s(
+ "<<0>>(?=\\s+(?:<<1>>\\s*(?:=>|[({]|\\.\\s*this\\s*\\[)|this\\s*\\[))",
+ [x, m]
+ ),
+ inside: $,
+ alias: "class-name",
+ },
+ "constructor-invocation": {
+ pattern: s("(\\bnew\\s+)<<0>>(?=\\s*[[({])", [x]),
+ lookbehind: !0,
+ inside: $,
+ alias: "class-name",
+ },
+ "generic-method": {
+ pattern: s("<<0>>\\s*<<1>>(?=\\s*\\()", [h, g]),
+ inside: {
+ function: s("^<<0>>", [h]),
+ generic: { pattern: RegExp(g), alias: "class-name", inside: $ },
+ },
+ },
+ "type-list": {
+ pattern: s(
+ "\\b((?:<<0>>\\s+<<1>>|record\\s+<<1>>\\s*<<5>>|where\\s+<<2>>)\\s*:\\s*)(?:<<3>>|<<4>>|<<1>>\\s*<<5>>|<<6>>)(?:\\s*,\\s*(?:<<3>>|<<4>>|<<6>>))*(?=\\s*(?:where|[{;]|=>|$))",
+ [d, f, h, x, p.source, b, "\\bnew\\s*\\(\\s*\\)"]
+ ),
+ lookbehind: !0,
+ inside: {
+ "record-arguments": {
+ pattern: s("(^(?!new\\s*\\()<<0>>\\s*)<<1>>", [f, b]),
+ lookbehind: !0,
+ greedy: !0,
+ inside: e.languages.csharp,
+ },
+ keyword: p,
+ "class-name": { pattern: RegExp(x), greedy: !0, inside: $ },
+ punctuation: /[,()]/,
+ },
+ },
+ preprocessor: {
+ pattern: /(^[\t ]*)#.*/m,
+ lookbehind: !0,
+ alias: "property",
+ inside: {
+ directive: {
+ pattern:
+ /(#)\b(?:define|elif|else|endif|endregion|error|if|line|nullable|pragma|region|undef|warning)\b/,
+ lookbehind: !0,
+ alias: "keyword",
+ },
+ },
+ },
+ });
+ var E = B + "|" + _,
+ R = n("/(?![*/])|//[^\r\n]*[\r\n]|/\\*(?:[^*]|\\*(?!/))*\\*/|<<0>>", [E]),
+ z = a(n("[^\"'/()]|<<0>>|\\(<>*\\)", [R]), 2),
+ S =
+ "\\b(?:assembly|event|field|method|module|param|property|return|type)\\b",
+ j = n("<<0>>(?:\\s*\\(<<1>>*\\))?", [m, z]);
+ e.languages.insertBefore("csharp", "class-name", {
+ attribute: {
+ pattern: s(
+ "((?:^|[^\\s\\w>)?])\\s*\\[\\s*)(?:<<0>>\\s*:\\s*)?<<1>>(?:\\s*,\\s*<<1>>)*(?=\\s*\\])",
+ [S, j]
+ ),
+ lookbehind: !0,
+ greedy: !0,
+ inside: {
+ target: { pattern: s("^<<0>>(?=\\s*:)", [S]), alias: "keyword" },
+ "attribute-arguments": {
+ pattern: s("\\(<<0>>*\\)", [z]),
+ inside: e.languages.csharp,
+ },
+ "class-name": { pattern: RegExp(m), inside: { punctuation: /\./ } },
+ punctuation: /[:,]/,
+ },
+ },
+ });
+ var A = ":[^}\r\n]+",
+ F = a(n("[^\"'/()]|<<0>>|\\(<>*\\)", [R]), 2),
+ P = n("\\{(?!\\{)(?:(?![}:])<<0>>)*<<1>>?\\}", [F, A]),
+ U = a(
+ n("[^\"'/()]|/(?!\\*)|/\\*(?:[^*]|\\*(?!/))*\\*/|<<0>>|\\(<>*\\)", [
+ E,
+ ]),
+ 2
+ ),
+ Z = n("\\{(?!\\{)(?:(?![}:])<<0>>)*<<1>>?\\}", [U, A]);
+ function q(n, a) {
+ return {
+ interpolation: {
+ pattern: s("((?:^|[^{])(?:\\{\\{)*)<<0>>", [n]),
+ lookbehind: !0,
+ inside: {
+ "format-string": {
+ pattern: s("(^\\{(?:(?![}:])<<0>>)*)<<1>>(?=\\}$)", [a, A]),
+ lookbehind: !0,
+ inside: { punctuation: /^:/ },
+ },
+ punctuation: /^\{|\}$/,
+ expression: {
+ pattern: /[\s\S]+/,
+ alias: "language-csharp",
+ inside: e.languages.csharp,
+ },
+ },
+ },
+ string: /[\s\S]+/,
+ };
+ }
+ e.languages.insertBefore("csharp", "string", {
+ "interpolation-string": [
+ {
+ pattern: s(
+ '(^|[^\\\\])(?:\\$@|@\\$)"(?:""|\\\\[^]|\\{\\{|<<0>>|[^\\\\{"])*"',
+ [P]
+ ),
+ lookbehind: !0,
+ greedy: !0,
+ inside: q(P, F),
+ },
+ {
+ pattern: s('(^|[^@\\\\])\\$"(?:\\\\.|\\{\\{|<<0>>|[^\\\\"{])*"', [Z]),
+ lookbehind: !0,
+ greedy: !0,
+ inside: q(Z, U),
+ },
+ ],
+ char: { pattern: RegExp(_), greedy: !0 },
+ }),
+ (e.languages.dotnet = e.languages.cs = e.languages.csharp);
+})(Prism);
+(Prism.languages.aspnet = Prism.languages.extend("markup", {
+ "page-directive": {
+ pattern: /<%\s*@.*%>/,
+ alias: "tag",
+ inside: {
+ "page-directive": {
+ pattern:
+ /<%\s*@\s*(?:Assembly|Control|Implements|Import|Master(?:Type)?|OutputCache|Page|PreviousPageType|Reference|Register)?|%>/i,
+ alias: "tag",
+ },
+ rest: Prism.languages.markup.tag.inside,
+ },
+ },
+ directive: {
+ pattern: /<%.*%>/,
+ alias: "tag",
+ inside: {
+ directive: { pattern: /<%\s*?[$=%#:]{0,2}|%>/, alias: "tag" },
+ rest: Prism.languages.csharp,
+ },
+ },
+})),
+ (Prism.languages.aspnet.tag.pattern =
+ /<(?!%)\/?[^\s>\/]+(?:\s+[^\s>\/=]+(?:=(?:("|')(?:\\[\s\S]|(?!\1)[^\\])*\1|[^\s'">=]+))?)*\s*\/?>/),
+ Prism.languages.insertBefore(
+ "inside",
+ "punctuation",
+ { directive: Prism.languages.aspnet.directive },
+ Prism.languages.aspnet.tag.inside["attr-value"]
+ ),
+ Prism.languages.insertBefore("aspnet", "comment", {
+ "asp-comment": { pattern: /<%--[\s\S]*?--%>/, alias: ["asp", "comment"] },
+ }),
+ Prism.languages.insertBefore(
+ "aspnet",
+ Prism.languages.javascript ? "script" : "tag",
+ {
+ "asp-script": {
+ pattern:
+ /(