diff --git a/QuickLook.Plugin/QuickLook.Plugin.HtmlViewer/WebpagePanel.cs b/QuickLook.Plugin/QuickLook.Plugin.HtmlViewer/WebpagePanel.cs
index 50efad3..f0a7176 100644
--- a/QuickLook.Plugin/QuickLook.Plugin.HtmlViewer/WebpagePanel.cs
+++ b/QuickLook.Plugin/QuickLook.Plugin.HtmlViewer/WebpagePanel.cs
@@ -1,4 +1,4 @@
-// Copyright © 2021 Paddy Xu and Frank Becker
+// Copyright © 2021 Paddy Xu and Frank Becker
//
// This file is part of QuickLook program.
//
@@ -17,6 +17,7 @@
using System;
using System.Diagnostics;
+using System.Drawing;
using System.IO;
using System.Reflection;
using System.Windows;
@@ -29,8 +30,8 @@ namespace QuickLook.Plugin.HtmlViewer
{
public class WebpagePanel : UserControl
{
- private Uri _currentUri;
- private WebView2 _webView;
+ public Uri _currentUri;
+ public WebView2 _webView;
public WebpagePanel()
{
@@ -44,10 +45,12 @@ namespace QuickLook.Plugin.HtmlViewer
{
CreationProperties = new CoreWebView2CreationProperties
{
- UserDataFolder = Path.Combine(SettingHelper.LocalDataPath, @"WebView2_Data\\")
- }
+ UserDataFolder = Path.Combine(SettingHelper.LocalDataPath, @"WebView2_Data\\"),
+ },
+ DefaultBackgroundColor = OSThemeHelper.AppsUseDarkTheme() ? Color.FromArgb(255, 32, 32, 32) : Color.White, // Prevent white flash in dark mode
};
_webView.NavigationStarting += NavigationStarting_CancelNavigation;
+ _webView.NavigationCompleted += WebView_NavigationCompleted;
Content = _webView;
}
}
@@ -83,6 +86,11 @@ namespace QuickLook.Plugin.HtmlViewer
if (newUri != _currentUri) e.Cancel = true;
}
+ private void WebView_NavigationCompleted(object sender, CoreWebView2NavigationCompletedEventArgs e)
+ {
+ _webView.DefaultBackgroundColor = Color.White; // Reset to white after page load to match expected default behavior
+ }
+
public void Dispose()
{
_webView?.Dispose();
diff --git a/QuickLook.Plugin/QuickLook.Plugin.MarkdownViewer/Plugin.cs b/QuickLook.Plugin/QuickLook.Plugin.MarkdownViewer/Plugin.cs
index 7cd338c..b5d68c1 100644
--- a/QuickLook.Plugin/QuickLook.Plugin.MarkdownViewer/Plugin.cs
+++ b/QuickLook.Plugin/QuickLook.Plugin.MarkdownViewer/Plugin.cs
@@ -1,4 +1,4 @@
-// Copyright © 2017 Paddy Xu
+// Copyright © 2017 Paddy Xu
//
// This file is part of QuickLook program.
//
@@ -16,12 +16,17 @@
// along with this program. If not, see .
using System;
+using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Net;
+using System.Reflection;
+using System.Runtime.InteropServices;
using System.Text;
using System.Windows;
using System.Windows.Threading;
+using Microsoft.Web.WebView2.Core;
+using QuickLook.Common.Helpers;
using QuickLook.Common.Plugin;
using QuickLook.Plugin.HtmlViewer;
using UtfUnknown;
@@ -30,17 +35,90 @@ namespace QuickLook.Plugin.MarkdownViewer
{
public class Plugin : IViewer
{
- private WebpagePanel _panel;
+ private WebpagePanel? _panel;
+ private static string _resourcePath;
+ private static readonly string ResourcePrefix = "QuickLook.Plugin.MarkdownViewer.Resources.";
+ private string? _currentHtmlPath;
+
+ private static bool OverrideFilesInDevelopment => true && Debugger.IsAttached; // Debug setting
+
+ static Plugin()
+ {
+ // Set up resource path in AppData
+ _resourcePath = Path.Combine(SettingHelper.LocalDataPath, "QuickLook.Plugin.MarkdownViewer");
+ }
public int Priority => 0;
public void Init()
{
+ // Create directory if it doesn't exist
+ if (!Directory.Exists(_resourcePath) || OverrideFilesInDevelopment)
+ {
+ Directory.CreateDirectory(_resourcePath);
+ ExtractResources();
+ }
+
+ // Clean up any temporary HTML files if QuickLook was forcibly terminated
+ try
+ {
+ var tempFiles = Directory.GetFiles(_resourcePath, "temp_*.html");
+ foreach (var file in tempFiles)
+ {
+ try
+ {
+ File.Delete(file);
+ }
+ catch (IOException) { } // Ignore deletion errors
+ }
+ }
+ catch (Exception ex)
+ {
+ Debug.WriteLine($"Failed to clean up temporary HTML files: {ex.Message}");
+ }
+ }
+
+ private void ExtractResources()
+ {
+ var assembly = Assembly.GetExecutingAssembly();
+ var resourceNames = assembly.GetManifestResourceNames();
+
+ foreach (var resourceName in resourceNames)
+ {
+ if (!resourceName.StartsWith(ResourcePrefix)) continue;
+
+ var relativePath = resourceName.Substring(ResourcePrefix.Length);
+ if (relativePath.Equals("resources", StringComparison.OrdinalIgnoreCase)) continue; // Skip 'resources' binary file
+
+ var targetPath = Path.Combine(_resourcePath, relativePath.Replace('/', Path.DirectorySeparatorChar));
+
+ // Create directory if it doesn't exist
+ var directory = Path.GetDirectoryName(targetPath);
+ if (directory != null)
+ Directory.CreateDirectory(directory);
+
+ // Extract the resource (skip if it already exists, unless in debug mode)
+ if (File.Exists(targetPath) && !OverrideFilesInDevelopment)
+ continue;
+
+ using (var resourceStream = assembly.GetManifestResourceStream(resourceName))
+ using (var fileStream = File.Create(targetPath))
+ {
+ resourceStream?.CopyTo(fileStream);
+ }
+ }
+
+ // Verify that md2html.html was extracted
+ var htmlPath = Path.Combine(_resourcePath, "md2html.html");
+ if (!File.Exists(htmlPath))
+ {
+ throw new FileNotFoundException($"Required template file md2html.html not found in resources. Available resources: {string.Join(", ", resourceNames)}");
+ }
}
public bool CanHandle(string path)
{
- return !Directory.Exists(path) && new[] {".md", ".rmd", ".markdown"}.Any(path.ToLower().EndsWith);
+ return !Directory.Exists(path) && new[] { ".md", ".rmd", ".markdown" }.Any(path.ToLower().EndsWith);
}
public void Prepare(string path, ContextObject context)
@@ -54,29 +132,180 @@ namespace QuickLook.Plugin.MarkdownViewer
context.ViewerContent = _panel;
context.Title = Path.GetFileName(path);
- _panel.NavigateToHtml(GenerateMarkdownHtml(path));
+ var htmlPath = GenerateMarkdownHtml(path);
+ _panel.NavigateToFile(htmlPath);
_panel.Dispatcher.Invoke(() => { context.IsBusy = false; }, DispatcherPriority.Loaded);
+
+ _panel._webView.NavigationStarting += NavigationStarting_CancelNavigation;
+ }
+
+ private void NavigationStarting_CancelNavigation(object sender, CoreWebView2NavigationStartingEventArgs e)
+ {
+ if (e.Uri.StartsWith("data:")) // when using NavigateToString
+ return;
+
+ var newUri = new Uri(e.Uri);
+ if (newUri == _panel?._currentUri) return;
+ e.Cancel = true;
+
+ // Open in default browser
+ try
+ {
+ if (!Uri.TryCreate(e.Uri, UriKind.Absolute, out var uri))
+ {
+ Debug.WriteLine($"Invalid URI format: {e.Uri}");
+ return;
+ }
+
+ // Safe schemes can open directly
+ if (uri.Scheme == Uri.UriSchemeHttp ||
+ uri.Scheme == Uri.UriSchemeHttps ||
+ uri.Scheme == Uri.UriSchemeMailto)
+ {
+ Process.Start(uri.AbsoluteUri);
+ return;
+ }
+
+ // Ask user for unsafe schemes. Use dispatcher to avoid blocking thread.
+ var associatedApp = GetAssociatedAppForScheme(uri.Scheme);
+ Application.Current.Dispatcher.BeginInvoke(new Action(() =>
+ {
+ var result = MessageBox.Show(
+ !string.IsNullOrEmpty(associatedApp) ?
+ $"The following link will open in {associatedApp}:\n{e.Uri}" : $"The following link will open:\n{e.Uri}",
+ !string.IsNullOrEmpty(associatedApp) ?
+ $"Open {associatedApp}?" : "Open custom URI?",
+ MessageBoxButton.YesNo,
+ MessageBoxImage.Information);
+
+ if (result == MessageBoxResult.Yes)
+ {
+ Process.Start(e.Uri);
+ }
+ }));
+ }
+ catch (Exception ex)
+ {
+ Debug.WriteLine($"Failed to open URL in browser: {ex.Message}");
+ }
+ }
+
+ [DllImport("Shlwapi.dll", CharSet = CharSet.Unicode)]
+ private static extern uint AssocQueryString(
+ AssocF flags,
+ AssocStr str,
+ string pszAssoc,
+ string? pszExtra,
+ [Out] StringBuilder? pszOut,
+ ref uint pcchOut);
+
+ [Flags]
+ private enum AssocF
+ {
+ None = 0,
+ VerifyExists = 0x1
+ }
+
+ private enum AssocStr
+ {
+ Command = 1,
+ Executable = 2,
+ FriendlyAppName = 4
+ }
+
+ private string? GetAssociatedAppForScheme(string scheme)
+ {
+ try
+ {
+ // Try to get friendly app name first
+ uint pcchOut = 0;
+ AssocQueryString(AssocF.None, AssocStr.FriendlyAppName, scheme, null, null, ref pcchOut);
+
+ if (pcchOut > 0)
+ {
+ StringBuilder pszOut = new StringBuilder((int)pcchOut);
+ AssocQueryString(AssocF.None, AssocStr.FriendlyAppName, scheme, null, pszOut, ref pcchOut);
+
+ var appName = pszOut.ToString().Trim();
+ if (!string.IsNullOrEmpty(appName))
+ return appName;
+ }
+
+ // Fall back to executable name if friendly name is not available
+ pcchOut = 0;
+ AssocQueryString(AssocF.None, AssocStr.Executable, scheme, null, null, ref pcchOut);
+
+ if (pcchOut > 0)
+ {
+ StringBuilder pszOut = new StringBuilder((int)pcchOut);
+ AssocQueryString(AssocF.None, AssocStr.Executable, scheme, null, pszOut, ref pcchOut);
+
+ var exeName = pszOut.ToString().Trim();
+ if (!string.IsNullOrEmpty(exeName))
+ return Path.GetFileName(exeName);
+ }
+
+ return null;
+ }
+ catch (Exception ex)
+ {
+ Debug.WriteLine($"Failed to get associated app: {ex.Message}");
+ return null;
+ }
+ }
+
+ private string GenerateMarkdownHtml(string path)
+ {
+ var templatePath = Path.Combine(_resourcePath, "md2html.html");
+
+ if (!File.Exists(templatePath))
+ throw new FileNotFoundException($"Required template file md2html.html not found in extracted resources at {templatePath}");
+
+ var bytes = File.ReadAllBytes(path);
+ var encoding = CharsetDetector.DetectFromBytes(bytes).Detected?.Encoding ?? Encoding.Default;
+ var content = encoding.GetString(bytes);
+
+ var template = File.ReadAllText(templatePath);
+ var html = template.Replace("{{content}}", content);
+
+ // Generate unique filename and ensure it doesn't exist
+ string outputPath;
+ do
+ {
+ var uniqueId = Guid.NewGuid().ToString("N").Substring(0, 8);
+ var outputFileName = $"temp_{uniqueId}.html";
+ outputPath = Path.Combine(_resourcePath, outputFileName);
+ } while (File.Exists(outputPath));
+
+ // Clean up previous file if it exists
+ CleanupTempHtmlFile();
+
+ File.WriteAllText(outputPath, html);
+ _currentHtmlPath = outputPath;
+
+ return outputPath;
+ }
+
+ private void CleanupTempHtmlFile()
+ {
+ if (!string.IsNullOrEmpty(_currentHtmlPath) && File.Exists(_currentHtmlPath))
+ {
+ try
+ {
+ File.Delete(_currentHtmlPath);
+ }
+ catch (IOException) { } // Ignore deletion errors
+ }
}
public void Cleanup()
{
GC.SuppressFinalize(this);
+ CleanupTempHtmlFile();
+
_panel?.Dispose();
_panel = null;
}
-
- private string GenerateMarkdownHtml(string path)
- {
- var bytes = File.ReadAllBytes(path);
- var encoding = CharsetDetector.DetectFromBytes(bytes).Detected?.Encoding ?? Encoding.Default;
-
- var md = encoding.GetString(bytes);
- md = WebUtility.HtmlEncode(md);
-
- var html = Resources.md2html.Replace("{{content}}", md);
-
- return html;
- }
}
}
\ No newline at end of file
diff --git a/QuickLook.Plugin/QuickLook.Plugin.MarkdownViewer/QuickLook.Plugin.MarkdownViewer.csproj b/QuickLook.Plugin/QuickLook.Plugin.MarkdownViewer/QuickLook.Plugin.MarkdownViewer.csproj
index ee86a8f..9300258 100644
--- a/QuickLook.Plugin/QuickLook.Plugin.MarkdownViewer/QuickLook.Plugin.MarkdownViewer.csproj
+++ b/QuickLook.Plugin/QuickLook.Plugin.MarkdownViewer/QuickLook.Plugin.MarkdownViewer.csproj
@@ -70,11 +70,9 @@
-
-
-
-
-
+
+ QuickLook.Plugin.MarkdownViewer.Resources.%(RecursiveDir)%(Filename)%(Extension)
+
\ No newline at end of file
diff --git a/QuickLook.Plugin/QuickLook.Plugin.MarkdownViewer/Resources/css/github-markdown.css b/QuickLook.Plugin/QuickLook.Plugin.MarkdownViewer/Resources/css/github-markdown.css
new file mode 100644
index 0000000..8db1f5e
--- /dev/null
+++ b/QuickLook.Plugin/QuickLook.Plugin.MarkdownViewer/Resources/css/github-markdown.css
@@ -0,0 +1,1228 @@
+.markdown-body {
+ --base-size-4: 0.25rem;
+ --base-size-8: 0.5rem;
+ --base-size-16: 1rem;
+ --base-size-24: 1.5rem;
+ --base-size-40: 2.5rem;
+ --base-text-weight-normal: 400;
+ --base-text-weight-medium: 500;
+ --base-text-weight-semibold: 600;
+ --fontStack-monospace: ui-monospace, SFMono-Regular, SF Mono, Menlo, Consolas, Liberation Mono, monospace;
+ --fgColor-accent: Highlight;
+ }
+ @media (prefers-color-scheme: dark) {
+ .markdown-body, [data-theme="dark"] {
+ /* dark */
+ color-scheme: dark;
+ --focus-outlineColor: #1f6feb;
+ --fgColor-default: #f0f6fc;
+ --fgColor-muted: #9198a1;
+ --fgColor-accent: #4493f8;
+ --fgColor-success: #3fb950;
+ --fgColor-attention: #d29922;
+ --fgColor-danger: #f85149;
+ --fgColor-done: #ab7df8;
+ --bgColor-default: #0d1117;
+ --bgColor-muted: #151b23;
+ --bgColor-neutral-muted: #656c7633;
+ --bgColor-attention-muted: #bb800926;
+ --borderColor-default: #3d444d;
+ --borderColor-muted: #3d444db3;
+ --borderColor-neutral-muted: #3d444db3;
+ --borderColor-accent-emphasis: #1f6feb;
+ --borderColor-success-emphasis: #238636;
+ --borderColor-attention-emphasis: #9e6a03;
+ --borderColor-danger-emphasis: #da3633;
+ --borderColor-done-emphasis: #8957e5;
+ --color-prettylights-syntax-comment: #9198a1;
+ --color-prettylights-syntax-constant: #79c0ff;
+ --color-prettylights-syntax-constant-other-reference-link: #a5d6ff;
+ --color-prettylights-syntax-entity: #d2a8ff;
+ --color-prettylights-syntax-storage-modifier-import: #f0f6fc;
+ --color-prettylights-syntax-entity-tag: #7ee787;
+ --color-prettylights-syntax-keyword: #ff7b72;
+ --color-prettylights-syntax-string: #a5d6ff;
+ --color-prettylights-syntax-variable: #ffa657;
+ --color-prettylights-syntax-brackethighlighter-unmatched: #f85149;
+ --color-prettylights-syntax-brackethighlighter-angle: #9198a1;
+ --color-prettylights-syntax-invalid-illegal-text: #f0f6fc;
+ --color-prettylights-syntax-invalid-illegal-bg: #8e1519;
+ --color-prettylights-syntax-carriage-return-text: #f0f6fc;
+ --color-prettylights-syntax-carriage-return-bg: #b62324;
+ --color-prettylights-syntax-string-regexp: #7ee787;
+ --color-prettylights-syntax-markup-list: #f2cc60;
+ --color-prettylights-syntax-markup-heading: #1f6feb;
+ --color-prettylights-syntax-markup-italic: #f0f6fc;
+ --color-prettylights-syntax-markup-bold: #f0f6fc;
+ --color-prettylights-syntax-markup-deleted-text: #ffdcd7;
+ --color-prettylights-syntax-markup-deleted-bg: #67060c;
+ --color-prettylights-syntax-markup-inserted-text: #aff5b4;
+ --color-prettylights-syntax-markup-inserted-bg: #033a16;
+ --color-prettylights-syntax-markup-changed-text: #ffdfb6;
+ --color-prettylights-syntax-markup-changed-bg: #5a1e02;
+ --color-prettylights-syntax-markup-ignored-text: #f0f6fc;
+ --color-prettylights-syntax-markup-ignored-bg: #1158c7;
+ --color-prettylights-syntax-meta-diff-range: #d2a8ff;
+ --color-prettylights-syntax-sublimelinter-gutter-mark: #3d444d;
+ }
+ }
+ @media (prefers-color-scheme: light) {
+ .markdown-body, [data-theme="light"] {
+ /* light */
+ color-scheme: light;
+ --focus-outlineColor: #0969da;
+ --fgColor-default: #1f2328;
+ --fgColor-muted: #59636e;
+ --fgColor-accent: #0969da;
+ --fgColor-success: #1a7f37;
+ --fgColor-attention: #9a6700;
+ --fgColor-danger: #d1242f;
+ --fgColor-done: #8250df;
+ --bgColor-default: #ffffff;
+ --bgColor-muted: #f6f8fa;
+ --bgColor-neutral-muted: #818b981f;
+ --bgColor-attention-muted: #fff8c5;
+ --borderColor-default: #d1d9e0;
+ --borderColor-muted: #d1d9e0b3;
+ --borderColor-neutral-muted: #d1d9e0b3;
+ --borderColor-accent-emphasis: #0969da;
+ --borderColor-success-emphasis: #1a7f37;
+ --borderColor-attention-emphasis: #9a6700;
+ --borderColor-danger-emphasis: #cf222e;
+ --borderColor-done-emphasis: #8250df;
+ --color-prettylights-syntax-comment: #59636e;
+ --color-prettylights-syntax-constant: #0550ae;
+ --color-prettylights-syntax-constant-other-reference-link: #0a3069;
+ --color-prettylights-syntax-entity: #6639ba;
+ --color-prettylights-syntax-storage-modifier-import: #1f2328;
+ --color-prettylights-syntax-entity-tag: #0550ae;
+ --color-prettylights-syntax-keyword: #cf222e;
+ --color-prettylights-syntax-string: #0a3069;
+ --color-prettylights-syntax-variable: #953800;
+ --color-prettylights-syntax-brackethighlighter-unmatched: #82071e;
+ --color-prettylights-syntax-brackethighlighter-angle: #59636e;
+ --color-prettylights-syntax-invalid-illegal-text: #f6f8fa;
+ --color-prettylights-syntax-invalid-illegal-bg: #82071e;
+ --color-prettylights-syntax-carriage-return-text: #f6f8fa;
+ --color-prettylights-syntax-carriage-return-bg: #cf222e;
+ --color-prettylights-syntax-string-regexp: #116329;
+ --color-prettylights-syntax-markup-list: #3b2300;
+ --color-prettylights-syntax-markup-heading: #0550ae;
+ --color-prettylights-syntax-markup-italic: #1f2328;
+ --color-prettylights-syntax-markup-bold: #1f2328;
+ --color-prettylights-syntax-markup-deleted-text: #82071e;
+ --color-prettylights-syntax-markup-deleted-bg: #ffebe9;
+ --color-prettylights-syntax-markup-inserted-text: #116329;
+ --color-prettylights-syntax-markup-inserted-bg: #dafbe1;
+ --color-prettylights-syntax-markup-changed-text: #953800;
+ --color-prettylights-syntax-markup-changed-bg: #ffd8b5;
+ --color-prettylights-syntax-markup-ignored-text: #d1d9e0;
+ --color-prettylights-syntax-markup-ignored-bg: #0550ae;
+ --color-prettylights-syntax-meta-diff-range: #8250df;
+ --color-prettylights-syntax-sublimelinter-gutter-mark: #818b98;
+ }
+ }
+
+ .markdown-body {
+ -ms-text-size-adjust: 100%;
+ -webkit-text-size-adjust: 100%;
+ margin: 0;
+ color: var(--fgColor-default);
+ background-color: var(--bgColor-default);
+ font-family: -apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";
+ font-size: 16px;
+ line-height: 1.5;
+ word-wrap: break-word;
+ }
+
+ .markdown-body .octicon {
+ display: inline-block;
+ fill: currentColor;
+ vertical-align: text-bottom;
+ }
+
+ .markdown-body h1:hover .anchor .octicon-link:before,
+ .markdown-body h2:hover .anchor .octicon-link:before,
+ .markdown-body h3:hover .anchor .octicon-link:before,
+ .markdown-body h4:hover .anchor .octicon-link:before,
+ .markdown-body h5:hover .anchor .octicon-link:before,
+ .markdown-body h6:hover .anchor .octicon-link:before {
+ width: 16px;
+ height: 16px;
+ content: ' ';
+ display: inline-block;
+ background-color: currentColor;
+ -webkit-mask-image: url("data:image/svg+xml,");
+ mask-image: url("data:image/svg+xml,");
+ }
+
+ .markdown-body details,
+ .markdown-body figcaption,
+ .markdown-body figure {
+ display: block;
+ }
+
+ .markdown-body summary {
+ display: list-item;
+ }
+
+ .markdown-body [hidden] {
+ display: none !important;
+ }
+
+ .markdown-body a {
+ background-color: transparent;
+ color: var(--fgColor-accent);
+ text-decoration: none;
+ }
+
+ .markdown-body abbr[title] {
+ border-bottom: none;
+ -webkit-text-decoration: underline dotted;
+ text-decoration: underline dotted;
+ }
+
+ .markdown-body b,
+ .markdown-body strong {
+ font-weight: var(--base-text-weight-semibold, 600);
+ }
+
+ .markdown-body dfn {
+ font-style: italic;
+ }
+
+ .markdown-body h1 {
+ margin: .67em 0;
+ font-weight: var(--base-text-weight-semibold, 600);
+ padding-bottom: .3em;
+ font-size: 2em;
+ border-bottom: 1px solid var(--borderColor-muted);
+ }
+
+ .markdown-body mark {
+ background-color: var(--bgColor-attention-muted);
+ color: var(--fgColor-default);
+ }
+
+ .markdown-body small {
+ font-size: 90%;
+ }
+
+ .markdown-body sub,
+ .markdown-body sup {
+ font-size: 75%;
+ line-height: 0;
+ position: relative;
+ vertical-align: baseline;
+ }
+
+ .markdown-body sub {
+ bottom: -0.25em;
+ }
+
+ .markdown-body sup {
+ top: -0.5em;
+ }
+
+ .markdown-body img {
+ border-style: none;
+ max-width: 100%;
+ box-sizing: content-box;
+ }
+
+ .markdown-body code,
+ .markdown-body kbd,
+ .markdown-body pre,
+ .markdown-body samp {
+ font-family: monospace;
+ font-size: 1em;
+ }
+
+ .markdown-body figure {
+ margin: 1em var(--base-size-40);
+ }
+
+ .markdown-body hr {
+ box-sizing: content-box;
+ overflow: hidden;
+ background: transparent;
+ border-bottom: 1px solid var(--borderColor-muted);
+ height: .25em;
+ padding: 0;
+ margin: var(--base-size-24) 0;
+ background-color: var(--borderColor-default);
+ border: 0;
+ }
+
+ .markdown-body input {
+ font: inherit;
+ margin: 0;
+ overflow: visible;
+ font-family: inherit;
+ font-size: inherit;
+ line-height: inherit;
+ }
+
+ .markdown-body [type=button],
+ .markdown-body [type=reset],
+ .markdown-body [type=submit] {
+ -webkit-appearance: button;
+ appearance: button;
+ }
+
+ .markdown-body [type=checkbox],
+ .markdown-body [type=radio] {
+ box-sizing: border-box;
+ padding: 0;
+ }
+
+ .markdown-body [type=number]::-webkit-inner-spin-button,
+ .markdown-body [type=number]::-webkit-outer-spin-button {
+ height: auto;
+ }
+
+ .markdown-body [type=search]::-webkit-search-cancel-button,
+ .markdown-body [type=search]::-webkit-search-decoration {
+ -webkit-appearance: none;
+ appearance: none;
+ }
+
+ .markdown-body ::-webkit-input-placeholder {
+ color: inherit;
+ opacity: .54;
+ }
+
+ .markdown-body ::-webkit-file-upload-button {
+ -webkit-appearance: button;
+ appearance: button;
+ font: inherit;
+ }
+
+ .markdown-body a:hover {
+ text-decoration: underline;
+ }
+
+ .markdown-body ::placeholder {
+ color: var(--fgColor-muted);
+ opacity: 1;
+ }
+
+ .markdown-body hr::before {
+ display: table;
+ content: "";
+ }
+
+ .markdown-body hr::after {
+ display: table;
+ clear: both;
+ content: "";
+ }
+
+ .markdown-body table {
+ border-spacing: 0;
+ border-collapse: collapse;
+ display: block;
+ width: max-content;
+ max-width: 100%;
+ overflow: auto;
+ font-variant: tabular-nums;
+ }
+
+ .markdown-body td,
+ .markdown-body th {
+ padding: 0;
+ }
+
+ .markdown-body details summary {
+ cursor: pointer;
+ }
+
+ .markdown-body a:focus,
+ .markdown-body [role=button]:focus,
+ .markdown-body input[type=radio]:focus,
+ .markdown-body input[type=checkbox]:focus {
+ outline: 2px solid var(--focus-outlineColor);
+ outline-offset: -2px;
+ box-shadow: none;
+ }
+
+ .markdown-body a:focus:not(:focus-visible),
+ .markdown-body [role=button]:focus:not(:focus-visible),
+ .markdown-body input[type=radio]:focus:not(:focus-visible),
+ .markdown-body input[type=checkbox]:focus:not(:focus-visible) {
+ outline: solid 1px transparent;
+ }
+
+ .markdown-body a:focus-visible,
+ .markdown-body [role=button]:focus-visible,
+ .markdown-body input[type=radio]:focus-visible,
+ .markdown-body input[type=checkbox]:focus-visible {
+ outline: 2px solid var(--focus-outlineColor);
+ outline-offset: -2px;
+ box-shadow: none;
+ }
+
+ .markdown-body a:not([class]):focus,
+ .markdown-body a:not([class]):focus-visible,
+ .markdown-body input[type=radio]:focus,
+ .markdown-body input[type=radio]:focus-visible,
+ .markdown-body input[type=checkbox]:focus,
+ .markdown-body input[type=checkbox]:focus-visible {
+ outline-offset: 0;
+ }
+
+ .markdown-body kbd {
+ display: inline-block;
+ padding: var(--base-size-4);
+ font: 11px var(--fontStack-monospace, ui-monospace, SFMono-Regular, SF Mono, Menlo, Consolas, Liberation Mono, monospace);
+ line-height: 10px;
+ color: var(--fgColor-default);
+ vertical-align: middle;
+ background-color: var(--bgColor-muted);
+ border: solid 1px var(--borderColor-neutral-muted);
+ border-bottom-color: var(--borderColor-neutral-muted);
+ border-radius: 6px;
+ box-shadow: inset 0 -1px 0 var(--borderColor-neutral-muted);
+ }
+
+ .markdown-body h1,
+ .markdown-body h2,
+ .markdown-body h3,
+ .markdown-body h4,
+ .markdown-body h5,
+ .markdown-body h6 {
+ margin-top: var(--base-size-24);
+ margin-bottom: var(--base-size-16);
+ font-weight: var(--base-text-weight-semibold, 600);
+ line-height: 1.25;
+ }
+
+ .markdown-body h2 {
+ font-weight: var(--base-text-weight-semibold, 600);
+ padding-bottom: .3em;
+ font-size: 1.5em;
+ border-bottom: 1px solid var(--borderColor-muted);
+ }
+
+ .markdown-body h3 {
+ font-weight: var(--base-text-weight-semibold, 600);
+ font-size: 1.25em;
+ }
+
+ .markdown-body h4 {
+ font-weight: var(--base-text-weight-semibold, 600);
+ font-size: 1em;
+ }
+
+ .markdown-body h5 {
+ font-weight: var(--base-text-weight-semibold, 600);
+ font-size: .875em;
+ }
+
+ .markdown-body h6 {
+ font-weight: var(--base-text-weight-semibold, 600);
+ font-size: .85em;
+ color: var(--fgColor-muted);
+ }
+
+ .markdown-body p {
+ margin-top: 0;
+ margin-bottom: 10px;
+ }
+
+ .markdown-body blockquote {
+ margin: 0;
+ padding: 0 1em;
+ color: var(--fgColor-muted);
+ border-left: .25em solid var(--borderColor-default);
+ }
+
+ .markdown-body ul,
+ .markdown-body ol {
+ margin-top: 0;
+ margin-bottom: 0;
+ padding-left: 2em;
+ }
+
+ .markdown-body ol ol,
+ .markdown-body ul ol {
+ list-style-type: lower-roman;
+ }
+
+ .markdown-body ul ul ol,
+ .markdown-body ul ol ol,
+ .markdown-body ol ul ol,
+ .markdown-body ol ol ol {
+ list-style-type: lower-alpha;
+ }
+
+ .markdown-body dd {
+ margin-left: 0;
+ }
+
+ .markdown-body tt,
+ .markdown-body code,
+ .markdown-body samp {
+ font-family: var(--fontStack-monospace, ui-monospace, SFMono-Regular, SF Mono, Menlo, Consolas, Liberation Mono, monospace);
+ font-size: 12px;
+ }
+
+ .markdown-body pre {
+ margin-top: 0;
+ margin-bottom: 0;
+ font-family: var(--fontStack-monospace, ui-monospace, SFMono-Regular, SF Mono, Menlo, Consolas, Liberation Mono, monospace);
+ font-size: 12px;
+ word-wrap: normal;
+ }
+
+ .markdown-body .octicon {
+ display: inline-block;
+ overflow: visible !important;
+ vertical-align: text-bottom;
+ fill: currentColor;
+ }
+
+ .markdown-body input::-webkit-outer-spin-button,
+ .markdown-body input::-webkit-inner-spin-button {
+ margin: 0;
+ appearance: none;
+ }
+
+ .markdown-body .mr-2 {
+ margin-right: var(--base-size-8, 8px) !important;
+ }
+
+ .markdown-body::before {
+ display: table;
+ content: "";
+ }
+
+ .markdown-body::after {
+ display: table;
+ clear: both;
+ content: "";
+ }
+
+ .markdown-body>*:first-child {
+ margin-top: 0 !important;
+ }
+
+ .markdown-body>*:last-child {
+ margin-bottom: 0 !important;
+ }
+
+ .markdown-body a:not([href]) {
+ color: inherit;
+ text-decoration: none;
+ }
+
+ .markdown-body .absent {
+ color: var(--fgColor-danger);
+ }
+
+ .markdown-body .anchor {
+ float: left;
+ padding-right: var(--base-size-4);
+ margin-left: -20px;
+ line-height: 1;
+ }
+
+ .markdown-body .anchor:focus {
+ outline: none;
+ }
+
+ .markdown-body p,
+ .markdown-body blockquote,
+ .markdown-body ul,
+ .markdown-body ol,
+ .markdown-body dl,
+ .markdown-body table,
+ .markdown-body pre,
+ .markdown-body details {
+ margin-top: 0;
+ margin-bottom: var(--base-size-16);
+ }
+
+ .markdown-body blockquote>:first-child {
+ margin-top: 0;
+ }
+
+ .markdown-body blockquote>:last-child {
+ margin-bottom: 0;
+ }
+
+ .markdown-body h1 .octicon-link,
+ .markdown-body h2 .octicon-link,
+ .markdown-body h3 .octicon-link,
+ .markdown-body h4 .octicon-link,
+ .markdown-body h5 .octicon-link,
+ .markdown-body h6 .octicon-link {
+ color: var(--fgColor-default);
+ vertical-align: middle;
+ visibility: hidden;
+ }
+
+ .markdown-body h1:hover .anchor,
+ .markdown-body h2:hover .anchor,
+ .markdown-body h3:hover .anchor,
+ .markdown-body h4:hover .anchor,
+ .markdown-body h5:hover .anchor,
+ .markdown-body h6:hover .anchor {
+ text-decoration: none;
+ }
+
+ .markdown-body h1:hover .anchor .octicon-link,
+ .markdown-body h2:hover .anchor .octicon-link,
+ .markdown-body h3:hover .anchor .octicon-link,
+ .markdown-body h4:hover .anchor .octicon-link,
+ .markdown-body h5:hover .anchor .octicon-link,
+ .markdown-body h6:hover .anchor .octicon-link {
+ visibility: visible;
+ }
+
+ .markdown-body h1 tt,
+ .markdown-body h1 code,
+ .markdown-body h2 tt,
+ .markdown-body h2 code,
+ .markdown-body h3 tt,
+ .markdown-body h3 code,
+ .markdown-body h4 tt,
+ .markdown-body h4 code,
+ .markdown-body h5 tt,
+ .markdown-body h5 code,
+ .markdown-body h6 tt,
+ .markdown-body h6 code {
+ padding: 0 .2em;
+ font-size: inherit;
+ }
+
+ .markdown-body summary h1,
+ .markdown-body summary h2,
+ .markdown-body summary h3,
+ .markdown-body summary h4,
+ .markdown-body summary h5,
+ .markdown-body summary h6 {
+ display: inline-block;
+ }
+
+ .markdown-body summary h1 .anchor,
+ .markdown-body summary h2 .anchor,
+ .markdown-body summary h3 .anchor,
+ .markdown-body summary h4 .anchor,
+ .markdown-body summary h5 .anchor,
+ .markdown-body summary h6 .anchor {
+ margin-left: -40px;
+ }
+
+ .markdown-body summary h1,
+ .markdown-body summary h2 {
+ padding-bottom: 0;
+ border-bottom: 0;
+ }
+
+ .markdown-body ul.no-list,
+ .markdown-body ol.no-list {
+ padding: 0;
+ list-style-type: none;
+ }
+
+ .markdown-body ol[type="a s"] {
+ list-style-type: lower-alpha;
+ }
+
+ .markdown-body ol[type="A s"] {
+ list-style-type: upper-alpha;
+ }
+
+ .markdown-body ol[type="i s"] {
+ list-style-type: lower-roman;
+ }
+
+ .markdown-body ol[type="I s"] {
+ list-style-type: upper-roman;
+ }
+
+ .markdown-body ol[type="1"] {
+ list-style-type: decimal;
+ }
+
+ .markdown-body div>ol:not([type]) {
+ list-style-type: decimal;
+ }
+
+ .markdown-body ul ul,
+ .markdown-body ul ol,
+ .markdown-body ol ol,
+ .markdown-body ol ul {
+ margin-top: 0;
+ margin-bottom: 0;
+ }
+
+ .markdown-body li>p {
+ margin-top: var(--base-size-16);
+ }
+
+ .markdown-body li+li {
+ margin-top: .25em;
+ }
+
+ .markdown-body dl {
+ padding: 0;
+ }
+
+ .markdown-body dl dt {
+ padding: 0;
+ margin-top: var(--base-size-16);
+ font-size: 1em;
+ font-style: italic;
+ font-weight: var(--base-text-weight-semibold, 600);
+ }
+
+ .markdown-body dl dd {
+ padding: 0 var(--base-size-16);
+ margin-bottom: var(--base-size-16);
+ }
+
+ .markdown-body table th {
+ font-weight: var(--base-text-weight-semibold, 600);
+ }
+
+ .markdown-body table th,
+ .markdown-body table td {
+ padding: 6px 13px;
+ border: 1px solid var(--borderColor-default);
+ }
+
+ .markdown-body table td>:last-child {
+ margin-bottom: 0;
+ }
+
+ .markdown-body table tr {
+ background-color: var(--bgColor-default);
+ border-top: 1px solid var(--borderColor-muted);
+ }
+
+ .markdown-body table tr:nth-child(2n) {
+ background-color: var(--bgColor-muted);
+ }
+
+ .markdown-body table img {
+ background-color: transparent;
+ }
+
+ .markdown-body img[align=right] {
+ padding-left: 20px;
+ }
+
+ .markdown-body img[align=left] {
+ padding-right: 20px;
+ }
+
+ .markdown-body .emoji {
+ max-width: none;
+ vertical-align: text-top;
+ background-color: transparent;
+ }
+
+ .markdown-body span.frame {
+ display: block;
+ overflow: hidden;
+ }
+
+ .markdown-body span.frame>span {
+ display: block;
+ float: left;
+ width: auto;
+ padding: 7px;
+ margin: 13px 0 0;
+ overflow: hidden;
+ border: 1px solid var(--borderColor-default);
+ }
+
+ .markdown-body span.frame span img {
+ display: block;
+ float: left;
+ }
+
+ .markdown-body span.frame span span {
+ display: block;
+ padding: 5px 0 0;
+ clear: both;
+ color: var(--fgColor-default);
+ }
+
+ .markdown-body span.align-center {
+ display: block;
+ overflow: hidden;
+ clear: both;
+ }
+
+ .markdown-body span.align-center>span {
+ display: block;
+ margin: 13px auto 0;
+ overflow: hidden;
+ text-align: center;
+ }
+
+ .markdown-body span.align-center span img {
+ margin: 0 auto;
+ text-align: center;
+ }
+
+ .markdown-body span.align-right {
+ display: block;
+ overflow: hidden;
+ clear: both;
+ }
+
+ .markdown-body span.align-right>span {
+ display: block;
+ margin: 13px 0 0;
+ overflow: hidden;
+ text-align: right;
+ }
+
+ .markdown-body span.align-right span img {
+ margin: 0;
+ text-align: right;
+ }
+
+ .markdown-body span.float-left {
+ display: block;
+ float: left;
+ margin-right: 13px;
+ overflow: hidden;
+ }
+
+ .markdown-body span.float-left span {
+ margin: 13px 0 0;
+ }
+
+ .markdown-body span.float-right {
+ display: block;
+ float: right;
+ margin-left: 13px;
+ overflow: hidden;
+ }
+
+ .markdown-body span.float-right>span {
+ display: block;
+ margin: 13px auto 0;
+ overflow: hidden;
+ text-align: right;
+ }
+
+ .markdown-body code,
+ .markdown-body tt {
+ padding: .2em .4em;
+ margin: 0;
+ font-size: 85%;
+ white-space: break-spaces;
+ background-color: var(--bgColor-neutral-muted);
+ border-radius: 6px;
+ }
+
+ .markdown-body code br,
+ .markdown-body tt br {
+ display: none;
+ }
+
+ .markdown-body del code {
+ text-decoration: inherit;
+ }
+
+ .markdown-body samp {
+ font-size: 85%;
+ }
+
+ .markdown-body pre code {
+ font-size: 100%;
+ }
+
+ .markdown-body pre>code {
+ padding: 0;
+ margin: 0;
+ word-break: normal;
+ white-space: pre;
+ background: transparent;
+ border: 0;
+ }
+
+ .markdown-body .highlight {
+ margin-bottom: var(--base-size-16);
+ }
+
+ .markdown-body .highlight pre {
+ margin-bottom: 0;
+ word-break: normal;
+ }
+
+ .markdown-body .highlight pre,
+ .markdown-body pre {
+ padding: var(--base-size-16);
+ overflow: auto;
+ font-size: 85%;
+ line-height: 1.45;
+ color: var(--fgColor-default);
+ background-color: var(--bgColor-muted);
+ border-radius: 6px;
+ }
+
+ .markdown-body pre code,
+ .markdown-body pre tt {
+ display: inline;
+ max-width: auto;
+ padding: 0;
+ margin: 0;
+ overflow: visible;
+ line-height: inherit;
+ word-wrap: normal;
+ background-color: transparent;
+ border: 0;
+ }
+
+ .markdown-body .csv-data td,
+ .markdown-body .csv-data th {
+ padding: 5px;
+ overflow: hidden;
+ font-size: 12px;
+ line-height: 1;
+ text-align: left;
+ white-space: nowrap;
+ }
+
+ .markdown-body .csv-data .blob-num {
+ padding: 10px var(--base-size-8) 9px;
+ text-align: right;
+ background: var(--bgColor-default);
+ border: 0;
+ }
+
+ .markdown-body .csv-data tr {
+ border-top: 0;
+ }
+
+ .markdown-body .csv-data th {
+ font-weight: var(--base-text-weight-semibold, 600);
+ background: var(--bgColor-muted);
+ border-top: 0;
+ }
+
+ .markdown-body [data-footnote-ref]::before {
+ content: "[";
+ }
+
+ .markdown-body [data-footnote-ref]::after {
+ content: "]";
+ }
+
+ .markdown-body .footnotes {
+ font-size: 12px;
+ color: var(--fgColor-muted);
+ border-top: 1px solid var(--borderColor-default);
+ }
+
+ .markdown-body .footnotes ol {
+ padding-left: var(--base-size-16);
+ }
+
+ .markdown-body .footnotes ol ul {
+ display: inline-block;
+ padding-left: var(--base-size-16);
+ margin-top: var(--base-size-16);
+ }
+
+ .markdown-body .footnotes li {
+ position: relative;
+ }
+
+ .markdown-body .footnotes li:target::before {
+ position: absolute;
+ top: calc(var(--base-size-8)*-1);
+ right: calc(var(--base-size-8)*-1);
+ bottom: calc(var(--base-size-8)*-1);
+ left: calc(var(--base-size-24)*-1);
+ pointer-events: none;
+ content: "";
+ border: 2px solid var(--borderColor-accent-emphasis);
+ border-radius: 6px;
+ }
+
+ .markdown-body .footnotes li:target {
+ color: var(--fgColor-default);
+ }
+
+ .markdown-body .footnotes .data-footnote-backref g-emoji {
+ font-family: monospace;
+ }
+
+ .markdown-body body:has(:modal) {
+ padding-right: var(--dialog-scrollgutter) !important;
+ }
+
+ .markdown-body .pl-c {
+ color: var(--color-prettylights-syntax-comment);
+ }
+
+ .markdown-body .pl-c1,
+ .markdown-body .pl-s .pl-v {
+ color: var(--color-prettylights-syntax-constant);
+ }
+
+ .markdown-body .pl-e,
+ .markdown-body .pl-en {
+ color: var(--color-prettylights-syntax-entity);
+ }
+
+ .markdown-body .pl-smi,
+ .markdown-body .pl-s .pl-s1 {
+ color: var(--color-prettylights-syntax-storage-modifier-import);
+ }
+
+ .markdown-body .pl-ent {
+ color: var(--color-prettylights-syntax-entity-tag);
+ }
+
+ .markdown-body .pl-k {
+ color: var(--color-prettylights-syntax-keyword);
+ }
+
+ .markdown-body .pl-s,
+ .markdown-body .pl-pds,
+ .markdown-body .pl-s .pl-pse .pl-s1,
+ .markdown-body .pl-sr,
+ .markdown-body .pl-sr .pl-cce,
+ .markdown-body .pl-sr .pl-sre,
+ .markdown-body .pl-sr .pl-sra {
+ color: var(--color-prettylights-syntax-string);
+ }
+
+ .markdown-body .pl-v,
+ .markdown-body .pl-smw {
+ color: var(--color-prettylights-syntax-variable);
+ }
+
+ .markdown-body .pl-bu {
+ color: var(--color-prettylights-syntax-brackethighlighter-unmatched);
+ }
+
+ .markdown-body .pl-ii {
+ color: var(--color-prettylights-syntax-invalid-illegal-text);
+ background-color: var(--color-prettylights-syntax-invalid-illegal-bg);
+ }
+
+ .markdown-body .pl-c2 {
+ color: var(--color-prettylights-syntax-carriage-return-text);
+ background-color: var(--color-prettylights-syntax-carriage-return-bg);
+ }
+
+ .markdown-body .pl-sr .pl-cce {
+ font-weight: bold;
+ color: var(--color-prettylights-syntax-string-regexp);
+ }
+
+ .markdown-body .pl-ml {
+ color: var(--color-prettylights-syntax-markup-list);
+ }
+
+ .markdown-body .pl-mh,
+ .markdown-body .pl-mh .pl-en,
+ .markdown-body .pl-ms {
+ font-weight: bold;
+ color: var(--color-prettylights-syntax-markup-heading);
+ }
+
+ .markdown-body .pl-mi {
+ font-style: italic;
+ color: var(--color-prettylights-syntax-markup-italic);
+ }
+
+ .markdown-body .pl-mb {
+ font-weight: bold;
+ color: var(--color-prettylights-syntax-markup-bold);
+ }
+
+ .markdown-body .pl-md {
+ color: var(--color-prettylights-syntax-markup-deleted-text);
+ background-color: var(--color-prettylights-syntax-markup-deleted-bg);
+ }
+
+ .markdown-body .pl-mi1 {
+ color: var(--color-prettylights-syntax-markup-inserted-text);
+ background-color: var(--color-prettylights-syntax-markup-inserted-bg);
+ }
+
+ .markdown-body .pl-mc {
+ color: var(--color-prettylights-syntax-markup-changed-text);
+ background-color: var(--color-prettylights-syntax-markup-changed-bg);
+ }
+
+ .markdown-body .pl-mi2 {
+ color: var(--color-prettylights-syntax-markup-ignored-text);
+ background-color: var(--color-prettylights-syntax-markup-ignored-bg);
+ }
+
+ .markdown-body .pl-mdr {
+ font-weight: bold;
+ color: var(--color-prettylights-syntax-meta-diff-range);
+ }
+
+ .markdown-body .pl-ba {
+ color: var(--color-prettylights-syntax-brackethighlighter-angle);
+ }
+
+ .markdown-body .pl-sg {
+ color: var(--color-prettylights-syntax-sublimelinter-gutter-mark);
+ }
+
+ .markdown-body .pl-corl {
+ text-decoration: underline;
+ color: var(--color-prettylights-syntax-constant-other-reference-link);
+ }
+
+ .markdown-body [role=button]:focus:not(:focus-visible),
+ .markdown-body [role=tabpanel][tabindex="0"]:focus:not(:focus-visible),
+ .markdown-body button:focus:not(:focus-visible),
+ .markdown-body summary:focus:not(:focus-visible),
+ .markdown-body a:focus:not(:focus-visible) {
+ outline: none;
+ box-shadow: none;
+ }
+
+ .markdown-body [tabindex="0"]:focus:not(:focus-visible),
+ .markdown-body details-dialog:focus:not(:focus-visible) {
+ outline: none;
+ }
+
+ .markdown-body g-emoji {
+ display: inline-block;
+ min-width: 1ch;
+ font-family: "Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";
+ font-size: 1em;
+ font-style: normal !important;
+ font-weight: var(--base-text-weight-normal, 400);
+ line-height: 1;
+ vertical-align: -0.075em;
+ }
+
+ .markdown-body g-emoji img {
+ width: 1em;
+ height: 1em;
+ }
+
+ .markdown-body .task-list-item {
+ list-style-type: none;
+ }
+
+ .markdown-body .task-list-item label {
+ font-weight: var(--base-text-weight-normal, 400);
+ }
+
+ .markdown-body .task-list-item.enabled label {
+ cursor: pointer;
+ }
+
+ .markdown-body .task-list-item+.task-list-item {
+ margin-top: var(--base-size-4);
+ }
+
+ .markdown-body .task-list-item .handle {
+ display: none;
+ }
+
+ .markdown-body .task-list-item-checkbox {
+ margin: 0 .2em .25em -1.4em;
+ vertical-align: middle;
+ }
+
+ .markdown-body ul:dir(rtl) .task-list-item-checkbox {
+ margin: 0 -1.6em .25em .2em;
+ }
+
+ .markdown-body ol:dir(rtl) .task-list-item-checkbox {
+ margin: 0 -1.6em .25em .2em;
+ }
+
+ .markdown-body .contains-task-list:hover .task-list-item-convert-container,
+ .markdown-body .contains-task-list:focus-within .task-list-item-convert-container {
+ display: block;
+ width: auto;
+ height: 24px;
+ overflow: visible;
+ clip: auto;
+ }
+
+ .markdown-body ::-webkit-calendar-picker-indicator {
+ filter: invert(50%);
+ }
+
+ .markdown-body .markdown-alert {
+ padding: var(--base-size-8) var(--base-size-16);
+ margin-bottom: var(--base-size-16);
+ color: inherit;
+ border-left: .25em solid var(--borderColor-default);
+ }
+
+ .markdown-body .markdown-alert>:first-child {
+ margin-top: 0;
+ }
+
+ .markdown-body .markdown-alert>:last-child {
+ margin-bottom: 0;
+ }
+
+ .markdown-body .markdown-alert .markdown-alert-title {
+ display: flex;
+ font-weight: var(--base-text-weight-medium, 500);
+ align-items: center;
+ line-height: 1;
+ }
+
+ .markdown-body .markdown-alert.markdown-alert-note {
+ border-left-color: var(--borderColor-accent-emphasis);
+ }
+
+ .markdown-body .markdown-alert.markdown-alert-note .markdown-alert-title {
+ color: var(--fgColor-accent);
+ }
+
+ .markdown-body .markdown-alert.markdown-alert-important {
+ border-left-color: var(--borderColor-done-emphasis);
+ }
+
+ .markdown-body .markdown-alert.markdown-alert-important .markdown-alert-title {
+ color: var(--fgColor-done);
+ }
+
+ .markdown-body .markdown-alert.markdown-alert-warning {
+ border-left-color: var(--borderColor-attention-emphasis);
+ }
+
+ .markdown-body .markdown-alert.markdown-alert-warning .markdown-alert-title {
+ color: var(--fgColor-attention);
+ }
+
+ .markdown-body .markdown-alert.markdown-alert-tip {
+ border-left-color: var(--borderColor-success-emphasis);
+ }
+
+ .markdown-body .markdown-alert.markdown-alert-tip .markdown-alert-title {
+ color: var(--fgColor-success);
+ }
+
+ .markdown-body .markdown-alert.markdown-alert-caution {
+ border-left-color: var(--borderColor-danger-emphasis);
+ }
+
+ .markdown-body .markdown-alert.markdown-alert-caution .markdown-alert-title {
+ color: var(--fgColor-danger);
+ }
+
+ .markdown-body>*:first-child>.heading-element:first-child {
+ margin-top: 0 !important;
+ }
+
+ .markdown-body .highlight pre:has(+.zeroclipboard-container) {
+ min-height: 52px;
+ }
+
\ No newline at end of file
diff --git a/QuickLook.Plugin/QuickLook.Plugin.MarkdownViewer/Resources/highlight.js/highlight.min.js b/QuickLook.Plugin/QuickLook.Plugin.MarkdownViewer/Resources/highlight.js/highlight.min.js
new file mode 100644
index 0000000..27d11fb
--- /dev/null
+++ b/QuickLook.Plugin/QuickLook.Plugin.MarkdownViewer/Resources/highlight.js/highlight.min.js
@@ -0,0 +1,1207 @@
+/*!
+ Highlight.js v11.8.0 (git: 65687a907b)
+ (c) 2006-2023 undefined and other contributors
+ License: BSD-3-Clause
+ */
+ var hljs=function(){"use strict";function e(n){
+ return n instanceof Map?n.clear=n.delete=n.set=()=>{
+ throw Error("map is read-only")}:n instanceof Set&&(n.add=n.clear=n.delete=()=>{
+ throw Error("set is read-only")
+ }),Object.freeze(n),Object.getOwnPropertyNames(n).forEach((t=>{
+ const a=n[t],i=typeof a;"object"!==i&&"function"!==i||Object.isFrozen(a)||e(a)
+ })),n}class n{constructor(e){
+ void 0===e.data&&(e.data={}),this.data=e.data,this.isMatchIgnored=!1}
+ ignoreMatch(){this.isMatchIgnored=!0}}function t(e){
+ return e.replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'")
+ }function a(e,...n){const t=Object.create(null);for(const n in e)t[n]=e[n]
+ ;return n.forEach((e=>{for(const n in e)t[n]=e[n]})),t}const i=e=>!!e.scope
+ ;class r{constructor(e,n){
+ this.buffer="",this.classPrefix=n.classPrefix,e.walk(this)}addText(e){
+ this.buffer+=t(e)}openNode(e){if(!i(e))return;const n=((e,{prefix:n})=>{
+ if(e.startsWith("language:"))return e.replace("language:","language-")
+ ;if(e.includes(".")){const t=e.split(".")
+ ;return[`${n}${t.shift()}`,...t.map(((e,n)=>`${e}${"_".repeat(n+1)}`))].join(" ")
+ }return`${n}${e}`})(e.scope,{prefix:this.classPrefix});this.span(n)}
+ closeNode(e){i(e)&&(this.buffer+="")}value(){return this.buffer}span(e){
+ this.buffer+=``}}const s=(e={})=>{const n={children:[]}
+ ;return Object.assign(n,e),n};class o{constructor(){
+ this.rootNode=s(),this.stack=[this.rootNode]}get top(){
+ return this.stack[this.stack.length-1]}get root(){return this.rootNode}add(e){
+ this.top.children.push(e)}openNode(e){const n=s({scope:e})
+ ;this.add(n),this.stack.push(n)}closeNode(){
+ if(this.stack.length>1)return this.stack.pop()}closeAllNodes(){
+ for(;this.closeNode(););}toJSON(){return JSON.stringify(this.rootNode,null,4)}
+ walk(e){return this.constructor._walk(e,this.rootNode)}static _walk(e,n){
+ return"string"==typeof n?e.addText(n):n.children&&(e.openNode(n),
+ n.children.forEach((n=>this._walk(e,n))),e.closeNode(n)),e}static _collapse(e){
+ "string"!=typeof e&&e.children&&(e.children.every((e=>"string"==typeof e))?e.children=[e.children.join("")]:e.children.forEach((e=>{
+ o._collapse(e)})))}}class l extends o{constructor(e){super(),this.options=e}
+ addText(e){""!==e&&this.add(e)}startScope(e){this.openNode(e)}endScope(){
+ this.closeNode()}__addSublanguage(e,n){const t=e.root
+ ;n&&(t.scope="language:"+n),this.add(t)}toHTML(){
+ return new r(this,this.options).value()}finalize(){
+ return this.closeAllNodes(),!0}}function c(e){
+ return e?"string"==typeof e?e:e.source:null}function d(e){return b("(?=",e,")")}
+ function g(e){return b("(?:",e,")*")}function u(e){return b("(?:",e,")?")}
+ function b(...e){return e.map((e=>c(e))).join("")}function m(...e){const n=(e=>{
+ const n=e[e.length-1]
+ ;return"object"==typeof n&&n.constructor===Object?(e.splice(e.length-1,1),n):{}
+ })(e);return"("+(n.capture?"":"?:")+e.map((e=>c(e))).join("|")+")"}
+ function p(e){return RegExp(e.toString()+"|").exec("").length-1}
+ const _=/\[(?:[^\\\]]|\\.)*\]|\(\??|\\([1-9][0-9]*)|\\./
+ ;function h(e,{joinWith:n}){let t=0;return e.map((e=>{t+=1;const n=t
+ ;let a=c(e),i="";for(;a.length>0;){const e=_.exec(a);if(!e){i+=a;break}
+ i+=a.substring(0,e.index),
+ a=a.substring(e.index+e[0].length),"\\"===e[0][0]&&e[1]?i+="\\"+(Number(e[1])+n):(i+=e[0],
+ "("===e[0]&&t++)}return i})).map((e=>`(${e})`)).join(n)}
+ const f="[a-zA-Z]\\w*",E="[a-zA-Z_]\\w*",y="\\b\\d+(\\.\\d+)?",N="(-?)(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)",w="\\b(0b[01]+)",v={
+ begin:"\\\\[\\s\\S]",relevance:0},O={scope:"string",begin:"'",end:"'",
+ illegal:"\\n",contains:[v]},k={scope:"string",begin:'"',end:'"',illegal:"\\n",
+ contains:[v]},x=(e,n,t={})=>{const i=a({scope:"comment",begin:e,end:n,
+ contains:[]},t);i.contains.push({scope:"doctag",
+ begin:"[ ]*(?=(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):)",
+ end:/(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):/,excludeBegin:!0,relevance:0})
+ ;const r=m("I","a","is","so","us","to","at","if","in","it","on",/[A-Za-z]+['](d|ve|re|ll|t|s|n)/,/[A-Za-z]+[-][a-z]+/,/[A-Za-z][a-z]{2,}/)
+ ;return i.contains.push({begin:b(/[ ]+/,"(",r,/[.]?[:]?([.][ ]|[ ])/,"){3}")}),i
+ },M=x("//","$"),S=x("/\\*","\\*/"),A=x("#","$");var C=Object.freeze({
+ __proto__:null,MATCH_NOTHING_RE:/\b\B/,IDENT_RE:f,UNDERSCORE_IDENT_RE:E,
+ NUMBER_RE:y,C_NUMBER_RE:N,BINARY_NUMBER_RE:w,
+ RE_STARTERS_RE:"!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~",
+ SHEBANG:(e={})=>{const n=/^#![ ]*\//
+ ;return e.binary&&(e.begin=b(n,/.*\b/,e.binary,/\b.*/)),a({scope:"meta",begin:n,
+ end:/$/,relevance:0,"on:begin":(e,n)=>{0!==e.index&&n.ignoreMatch()}},e)},
+ BACKSLASH_ESCAPE:v,APOS_STRING_MODE:O,QUOTE_STRING_MODE:k,PHRASAL_WORDS_MODE:{
+ begin:/\b(a|an|the|are|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such|will|you|your|they|like|more)\b/
+ },COMMENT:x,C_LINE_COMMENT_MODE:M,C_BLOCK_COMMENT_MODE:S,HASH_COMMENT_MODE:A,
+ NUMBER_MODE:{scope:"number",begin:y,relevance:0},C_NUMBER_MODE:{scope:"number",
+ begin:N,relevance:0},BINARY_NUMBER_MODE:{scope:"number",begin:w,relevance:0},
+ REGEXP_MODE:{begin:/(?=\/[^/\n]*\/)/,contains:[{scope:"regexp",begin:/\//,
+ end:/\/[gimuy]*/,illegal:/\n/,contains:[v,{begin:/\[/,end:/\]/,relevance:0,
+ contains:[v]}]}]},TITLE_MODE:{scope:"title",begin:f,relevance:0},
+ UNDERSCORE_TITLE_MODE:{scope:"title",begin:E,relevance:0},METHOD_GUARD:{
+ begin:"\\.\\s*"+E,relevance:0},END_SAME_AS_BEGIN:e=>Object.assign(e,{
+ "on:begin":(e,n)=>{n.data._beginMatch=e[1]},"on:end":(e,n)=>{
+ n.data._beginMatch!==e[1]&&n.ignoreMatch()}})});function T(e,n){
+ "."===e.input[e.index-1]&&n.ignoreMatch()}function R(e,n){
+ void 0!==e.className&&(e.scope=e.className,delete e.className)}function D(e,n){
+ n&&e.beginKeywords&&(e.begin="\\b("+e.beginKeywords.split(" ").join("|")+")(?!\\.)(?=\\b|\\s)",
+ e.__beforeBegin=T,e.keywords=e.keywords||e.beginKeywords,delete e.beginKeywords,
+ void 0===e.relevance&&(e.relevance=0))}function I(e,n){
+ Array.isArray(e.illegal)&&(e.illegal=m(...e.illegal))}function L(e,n){
+ if(e.match){
+ if(e.begin||e.end)throw Error("begin & end are not supported with match")
+ ;e.begin=e.match,delete e.match}}function B(e,n){
+ void 0===e.relevance&&(e.relevance=1)}const $=(e,n)=>{if(!e.beforeMatch)return
+ ;if(e.starts)throw Error("beforeMatch cannot be used with starts")
+ ;const t=Object.assign({},e);Object.keys(e).forEach((n=>{delete e[n]
+ })),e.keywords=t.keywords,e.begin=b(t.beforeMatch,d(t.begin)),e.starts={
+ relevance:0,contains:[Object.assign(t,{endsParent:!0})]
+ },e.relevance=0,delete t.beforeMatch
+ },z=["of","and","for","in","not","or","if","then","parent","list","value"],F="keyword"
+ ;function U(e,n,t=F){const a=Object.create(null)
+ ;return"string"==typeof e?i(t,e.split(" ")):Array.isArray(e)?i(t,e):Object.keys(e).forEach((t=>{
+ Object.assign(a,U(e[t],n,t))})),a;function i(e,t){
+ n&&(t=t.map((e=>e.toLowerCase()))),t.forEach((n=>{const t=n.split("|")
+ ;a[t[0]]=[e,j(t[0],t[1])]}))}}function j(e,n){
+ return n?Number(n):(e=>z.includes(e.toLowerCase()))(e)?0:1}const P={},K=e=>{
+ console.error(e)},q=(e,...n)=>{console.log("WARN: "+e,...n)},H=(e,n)=>{
+ P[`${e}/${n}`]||(console.log(`Deprecated as of ${e}. ${n}`),P[`${e}/${n}`]=!0)
+ },G=Error();function Z(e,n,{key:t}){let a=0;const i=e[t],r={},s={}
+ ;for(let e=1;e<=n.length;e++)s[e+a]=i[e],r[e+a]=!0,a+=p(n[e-1])
+ ;e[t]=s,e[t]._emit=r,e[t]._multi=!0}function W(e){(e=>{
+ e.scope&&"object"==typeof e.scope&&null!==e.scope&&(e.beginScope=e.scope,
+ delete e.scope)})(e),"string"==typeof e.beginScope&&(e.beginScope={
+ _wrap:e.beginScope}),"string"==typeof e.endScope&&(e.endScope={_wrap:e.endScope
+ }),(e=>{if(Array.isArray(e.begin)){
+ if(e.skip||e.excludeBegin||e.returnBegin)throw K("skip, excludeBegin, returnBegin not compatible with beginScope: {}"),
+ G
+ ;if("object"!=typeof e.beginScope||null===e.beginScope)throw K("beginScope must be object"),
+ G;Z(e,e.begin,{key:"beginScope"}),e.begin=h(e.begin,{joinWith:""})}})(e),(e=>{
+ if(Array.isArray(e.end)){
+ if(e.skip||e.excludeEnd||e.returnEnd)throw K("skip, excludeEnd, returnEnd not compatible with endScope: {}"),
+ G
+ ;if("object"!=typeof e.endScope||null===e.endScope)throw K("endScope must be object"),
+ G;Z(e,e.end,{key:"endScope"}),e.end=h(e.end,{joinWith:""})}})(e)}function Q(e){
+ function n(n,t){
+ return RegExp(c(n),"m"+(e.case_insensitive?"i":"")+(e.unicodeRegex?"u":"")+(t?"g":""))
+ }class t{constructor(){
+ this.matchIndexes={},this.regexes=[],this.matchAt=1,this.position=0}
+ addRule(e,n){
+ n.position=this.position++,this.matchIndexes[this.matchAt]=n,this.regexes.push([n,e]),
+ this.matchAt+=p(e)+1}compile(){0===this.regexes.length&&(this.exec=()=>null)
+ ;const e=this.regexes.map((e=>e[1]));this.matcherRe=n(h(e,{joinWith:"|"
+ }),!0),this.lastIndex=0}exec(e){this.matcherRe.lastIndex=this.lastIndex
+ ;const n=this.matcherRe.exec(e);if(!n)return null
+ ;const t=n.findIndex(((e,n)=>n>0&&void 0!==e)),a=this.matchIndexes[t]
+ ;return n.splice(0,t),Object.assign(n,a)}}class i{constructor(){
+ this.rules=[],this.multiRegexes=[],
+ this.count=0,this.lastIndex=0,this.regexIndex=0}getMatcher(e){
+ if(this.multiRegexes[e])return this.multiRegexes[e];const n=new t
+ ;return this.rules.slice(e).forEach((([e,t])=>n.addRule(e,t))),
+ n.compile(),this.multiRegexes[e]=n,n}resumingScanAtSamePosition(){
+ return 0!==this.regexIndex}considerAll(){this.regexIndex=0}addRule(e,n){
+ this.rules.push([e,n]),"begin"===n.type&&this.count++}exec(e){
+ const n=this.getMatcher(this.regexIndex);n.lastIndex=this.lastIndex
+ ;let t=n.exec(e)
+ ;if(this.resumingScanAtSamePosition())if(t&&t.index===this.lastIndex);else{
+ const n=this.getMatcher(0);n.lastIndex=this.lastIndex+1,t=n.exec(e)}
+ return t&&(this.regexIndex+=t.position+1,
+ this.regexIndex===this.count&&this.considerAll()),t}}
+ if(e.compilerExtensions||(e.compilerExtensions=[]),
+ e.contains&&e.contains.includes("self"))throw Error("ERR: contains `self` is not supported at the top-level of a language. See documentation.")
+ ;return e.classNameAliases=a(e.classNameAliases||{}),function t(r,s){const o=r
+ ;if(r.isCompiled)return o
+ ;[R,L,W,$].forEach((e=>e(r,s))),e.compilerExtensions.forEach((e=>e(r,s))),
+ r.__beforeBegin=null,[D,I,B].forEach((e=>e(r,s))),r.isCompiled=!0;let l=null
+ ;return"object"==typeof r.keywords&&r.keywords.$pattern&&(r.keywords=Object.assign({},r.keywords),
+ l=r.keywords.$pattern,
+ delete r.keywords.$pattern),l=l||/\w+/,r.keywords&&(r.keywords=U(r.keywords,e.case_insensitive)),
+ o.keywordPatternRe=n(l,!0),
+ s&&(r.begin||(r.begin=/\B|\b/),o.beginRe=n(o.begin),r.end||r.endsWithParent||(r.end=/\B|\b/),
+ r.end&&(o.endRe=n(o.end)),
+ o.terminatorEnd=c(o.end)||"",r.endsWithParent&&s.terminatorEnd&&(o.terminatorEnd+=(r.end?"|":"")+s.terminatorEnd)),
+ r.illegal&&(o.illegalRe=n(r.illegal)),
+ r.contains||(r.contains=[]),r.contains=[].concat(...r.contains.map((e=>(e=>(e.variants&&!e.cachedVariants&&(e.cachedVariants=e.variants.map((n=>a(e,{
+ variants:null},n)))),e.cachedVariants?e.cachedVariants:X(e)?a(e,{
+ starts:e.starts?a(e.starts):null
+ }):Object.isFrozen(e)?a(e):e))("self"===e?r:e)))),r.contains.forEach((e=>{t(e,o)
+ })),r.starts&&t(r.starts,s),o.matcher=(e=>{const n=new i
+ ;return e.contains.forEach((e=>n.addRule(e.begin,{rule:e,type:"begin"
+ }))),e.terminatorEnd&&n.addRule(e.terminatorEnd,{type:"end"
+ }),e.illegal&&n.addRule(e.illegal,{type:"illegal"}),n})(o),o}(e)}function X(e){
+ return!!e&&(e.endsWithParent||X(e.starts))}class V extends Error{
+ constructor(e,n){super(e),this.name="HTMLInjectionError",this.html=n}}
+ const J=t,Y=a,ee=Symbol("nomatch"),ne=t=>{
+ const a=Object.create(null),i=Object.create(null),r=[];let s=!0
+ ;const o="Could not find the language '{}', did you forget to load/include a language module?",c={
+ disableAutodetect:!0,name:"Plain text",contains:[]};let p={
+ ignoreUnescapedHTML:!1,throwUnescapedHTML:!1,noHighlightRe:/^(no-?highlight)$/i,
+ languageDetectRe:/\blang(?:uage)?-([\w-]+)\b/i,classPrefix:"hljs-",
+ cssSelector:"pre code",languages:null,__emitter:l};function _(e){
+ return p.noHighlightRe.test(e)}function h(e,n,t){let a="",i=""
+ ;"object"==typeof n?(a=e,
+ t=n.ignoreIllegals,i=n.language):(H("10.7.0","highlight(lang, code, ...args) has been deprecated."),
+ H("10.7.0","Please use highlight(code, options) instead.\nhttps://github.com/highlightjs/highlight.js/issues/2277"),
+ i=e,a=n),void 0===t&&(t=!0);const r={code:a,language:i};x("before:highlight",r)
+ ;const s=r.result?r.result:f(r.language,r.code,t)
+ ;return s.code=r.code,x("after:highlight",s),s}function f(e,t,i,r){
+ const l=Object.create(null);function c(){if(!x.keywords)return void S.addText(A)
+ ;let e=0;x.keywordPatternRe.lastIndex=0;let n=x.keywordPatternRe.exec(A),t=""
+ ;for(;n;){t+=A.substring(e,n.index)
+ ;const i=w.case_insensitive?n[0].toLowerCase():n[0],r=(a=i,x.keywords[a]);if(r){
+ const[e,a]=r
+ ;if(S.addText(t),t="",l[i]=(l[i]||0)+1,l[i]<=7&&(C+=a),e.startsWith("_"))t+=n[0];else{
+ const t=w.classNameAliases[e]||e;g(n[0],t)}}else t+=n[0]
+ ;e=x.keywordPatternRe.lastIndex,n=x.keywordPatternRe.exec(A)}var a
+ ;t+=A.substring(e),S.addText(t)}function d(){null!=x.subLanguage?(()=>{
+ if(""===A)return;let e=null;if("string"==typeof x.subLanguage){
+ if(!a[x.subLanguage])return void S.addText(A)
+ ;e=f(x.subLanguage,A,!0,M[x.subLanguage]),M[x.subLanguage]=e._top
+ }else e=E(A,x.subLanguage.length?x.subLanguage:null)
+ ;x.relevance>0&&(C+=e.relevance),S.__addSublanguage(e._emitter,e.language)
+ })():c(),A=""}function g(e,n){
+ ""!==e&&(S.startScope(n),S.addText(e),S.endScope())}function u(e,n){let t=1
+ ;const a=n.length-1;for(;t<=a;){if(!e._emit[t]){t++;continue}
+ const a=w.classNameAliases[e[t]]||e[t],i=n[t];a?g(i,a):(A=i,c(),A=""),t++}}
+ function b(e,n){
+ return e.scope&&"string"==typeof e.scope&&S.openNode(w.classNameAliases[e.scope]||e.scope),
+ e.beginScope&&(e.beginScope._wrap?(g(A,w.classNameAliases[e.beginScope._wrap]||e.beginScope._wrap),
+ A=""):e.beginScope._multi&&(u(e.beginScope,n),A="")),x=Object.create(e,{parent:{
+ value:x}}),x}function m(e,t,a){let i=((e,n)=>{const t=e&&e.exec(n)
+ ;return t&&0===t.index})(e.endRe,a);if(i){if(e["on:end"]){const a=new n(e)
+ ;e["on:end"](t,a),a.isMatchIgnored&&(i=!1)}if(i){
+ for(;e.endsParent&&e.parent;)e=e.parent;return e}}
+ if(e.endsWithParent)return m(e.parent,t,a)}function _(e){
+ return 0===x.matcher.regexIndex?(A+=e[0],1):(D=!0,0)}function h(e){
+ const n=e[0],a=t.substring(e.index),i=m(x,e,a);if(!i)return ee;const r=x
+ ;x.endScope&&x.endScope._wrap?(d(),
+ g(n,x.endScope._wrap)):x.endScope&&x.endScope._multi?(d(),
+ u(x.endScope,e)):r.skip?A+=n:(r.returnEnd||r.excludeEnd||(A+=n),
+ d(),r.excludeEnd&&(A=n));do{
+ x.scope&&S.closeNode(),x.skip||x.subLanguage||(C+=x.relevance),x=x.parent
+ }while(x!==i.parent);return i.starts&&b(i.starts,e),r.returnEnd?0:n.length}
+ let y={};function N(a,r){const o=r&&r[0];if(A+=a,null==o)return d(),0
+ ;if("begin"===y.type&&"end"===r.type&&y.index===r.index&&""===o){
+ if(A+=t.slice(r.index,r.index+1),!s){const n=Error(`0 width match regex (${e})`)
+ ;throw n.languageName=e,n.badRule=y.rule,n}return 1}
+ if(y=r,"begin"===r.type)return(e=>{
+ const t=e[0],a=e.rule,i=new n(a),r=[a.__beforeBegin,a["on:begin"]]
+ ;for(const n of r)if(n&&(n(e,i),i.isMatchIgnored))return _(t)
+ ;return a.skip?A+=t:(a.excludeBegin&&(A+=t),
+ d(),a.returnBegin||a.excludeBegin||(A=t)),b(a,e),a.returnBegin?0:t.length})(r)
+ ;if("illegal"===r.type&&!i){
+ const e=Error('Illegal lexeme "'+o+'" for mode "'+(x.scope||"")+'"')
+ ;throw e.mode=x,e}if("end"===r.type){const e=h(r);if(e!==ee)return e}
+ if("illegal"===r.type&&""===o)return 1
+ ;if(R>1e5&&R>3*r.index)throw Error("potential infinite loop, way more iterations than matches")
+ ;return A+=o,o.length}const w=v(e)
+ ;if(!w)throw K(o.replace("{}",e)),Error('Unknown language: "'+e+'"')
+ ;const O=Q(w);let k="",x=r||O;const M={},S=new p.__emitter(p);(()=>{const e=[]
+ ;for(let n=x;n!==w;n=n.parent)n.scope&&e.unshift(n.scope)
+ ;e.forEach((e=>S.openNode(e)))})();let A="",C=0,T=0,R=0,D=!1;try{
+ if(w.__emitTokens)w.__emitTokens(t,S);else{for(x.matcher.considerAll();;){
+ R++,D?D=!1:x.matcher.considerAll(),x.matcher.lastIndex=T
+ ;const e=x.matcher.exec(t);if(!e)break;const n=N(t.substring(T,e.index),e)
+ ;T=e.index+n}N(t.substring(T))}return S.finalize(),k=S.toHTML(),{language:e,
+ value:k,relevance:C,illegal:!1,_emitter:S,_top:x}}catch(n){
+ if(n.message&&n.message.includes("Illegal"))return{language:e,value:J(t),
+ illegal:!0,relevance:0,_illegalBy:{message:n.message,index:T,
+ context:t.slice(T-100,T+100),mode:n.mode,resultSoFar:k},_emitter:S};if(s)return{
+ language:e,value:J(t),illegal:!1,relevance:0,errorRaised:n,_emitter:S,_top:x}
+ ;throw n}}function E(e,n){n=n||p.languages||Object.keys(a);const t=(e=>{
+ const n={value:J(e),illegal:!1,relevance:0,_top:c,_emitter:new p.__emitter(p)}
+ ;return n._emitter.addText(e),n})(e),i=n.filter(v).filter(k).map((n=>f(n,e,!1)))
+ ;i.unshift(t);const r=i.sort(((e,n)=>{
+ if(e.relevance!==n.relevance)return n.relevance-e.relevance
+ ;if(e.language&&n.language){if(v(e.language).supersetOf===n.language)return 1
+ ;if(v(n.language).supersetOf===e.language)return-1}return 0})),[s,o]=r,l=s
+ ;return l.secondBest=o,l}function y(e){let n=null;const t=(e=>{
+ let n=e.className+" ";n+=e.parentNode?e.parentNode.className:""
+ ;const t=p.languageDetectRe.exec(n);if(t){const n=v(t[1])
+ ;return n||(q(o.replace("{}",t[1])),
+ q("Falling back to no-highlight mode for this block.",e)),n?t[1]:"no-highlight"}
+ return n.split(/\s+/).find((e=>_(e)||v(e)))})(e);if(_(t))return
+ ;if(x("before:highlightElement",{el:e,language:t
+ }),e.children.length>0&&(p.ignoreUnescapedHTML||(console.warn("One of your code blocks includes unescaped HTML. This is a potentially serious security risk."),
+ console.warn("https://github.com/highlightjs/highlight.js/wiki/security"),
+ console.warn("The element with unescaped HTML:"),
+ console.warn(e)),p.throwUnescapedHTML))throw new V("One of your code blocks includes unescaped HTML.",e.innerHTML)
+ ;n=e;const a=n.textContent,r=t?h(a,{language:t,ignoreIllegals:!0}):E(a)
+ ;e.innerHTML=r.value,((e,n,t)=>{const a=n&&i[n]||t
+ ;e.classList.add("hljs"),e.classList.add("language-"+a)
+ })(e,t,r.language),e.result={language:r.language,re:r.relevance,
+ relevance:r.relevance},r.secondBest&&(e.secondBest={
+ language:r.secondBest.language,relevance:r.secondBest.relevance
+ }),x("after:highlightElement",{el:e,result:r,text:a})}let N=!1;function w(){
+ "loading"!==document.readyState?document.querySelectorAll(p.cssSelector).forEach(y):N=!0
+ }function v(e){return e=(e||"").toLowerCase(),a[e]||a[i[e]]}
+ function O(e,{languageName:n}){"string"==typeof e&&(e=[e]),e.forEach((e=>{
+ i[e.toLowerCase()]=n}))}function k(e){const n=v(e)
+ ;return n&&!n.disableAutodetect}function x(e,n){const t=e;r.forEach((e=>{
+ e[t]&&e[t](n)}))}
+ "undefined"!=typeof window&&window.addEventListener&&window.addEventListener("DOMContentLoaded",(()=>{
+ N&&w()}),!1),Object.assign(t,{highlight:h,highlightAuto:E,highlightAll:w,
+ highlightElement:y,
+ highlightBlock:e=>(H("10.7.0","highlightBlock will be removed entirely in v12.0"),
+ H("10.7.0","Please use highlightElement now."),y(e)),configure:e=>{p=Y(p,e)},
+ initHighlighting:()=>{
+ w(),H("10.6.0","initHighlighting() deprecated. Use highlightAll() now.")},
+ initHighlightingOnLoad:()=>{
+ w(),H("10.6.0","initHighlightingOnLoad() deprecated. Use highlightAll() now.")
+ },registerLanguage:(e,n)=>{let i=null;try{i=n(t)}catch(n){
+ if(K("Language definition for '{}' could not be registered.".replace("{}",e)),
+ !s)throw n;K(n),i=c}
+ i.name||(i.name=e),a[e]=i,i.rawDefinition=n.bind(null,t),i.aliases&&O(i.aliases,{
+ languageName:e})},unregisterLanguage:e=>{delete a[e]
+ ;for(const n of Object.keys(i))i[n]===e&&delete i[n]},
+ listLanguages:()=>Object.keys(a),getLanguage:v,registerAliases:O,
+ autoDetection:k,inherit:Y,addPlugin:e=>{(e=>{
+ e["before:highlightBlock"]&&!e["before:highlightElement"]&&(e["before:highlightElement"]=n=>{
+ e["before:highlightBlock"](Object.assign({block:n.el},n))
+ }),e["after:highlightBlock"]&&!e["after:highlightElement"]&&(e["after:highlightElement"]=n=>{
+ e["after:highlightBlock"](Object.assign({block:n.el},n))})})(e),r.push(e)},
+ removePlugin:e=>{const n=r.indexOf(e);-1!==n&&r.splice(n,1)}}),t.debugMode=()=>{
+ s=!1},t.safeMode=()=>{s=!0},t.versionString="11.8.0",t.regex={concat:b,
+ lookahead:d,either:m,optional:u,anyNumberOfTimes:g}
+ ;for(const n in C)"object"==typeof C[n]&&e(C[n]);return Object.assign(t,C),t
+ },te=ne({});te.newInstance=()=>ne({});var ae=te;const ie=e=>({IMPORTANT:{
+ scope:"meta",begin:"!important"},BLOCK_COMMENT:e.C_BLOCK_COMMENT_MODE,HEXCOLOR:{
+ scope:"number",begin:/#(([0-9a-fA-F]{3,4})|(([0-9a-fA-F]{2}){3,4}))\b/},
+ FUNCTION_DISPATCH:{className:"built_in",begin:/[\w-]+(?=\()/},
+ ATTRIBUTE_SELECTOR_MODE:{scope:"selector-attr",begin:/\[/,end:/\]/,illegal:"$",
+ contains:[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE]},CSS_NUMBER_MODE:{
+ scope:"number",
+ begin:e.NUMBER_RE+"(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?",
+ relevance:0},CSS_VARIABLE:{className:"attr",begin:/--[A-Za-z][A-Za-z0-9_-]*/}
+ }),re=["a","abbr","address","article","aside","audio","b","blockquote","body","button","canvas","caption","cite","code","dd","del","details","dfn","div","dl","dt","em","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6","header","hgroup","html","i","iframe","img","input","ins","kbd","label","legend","li","main","mark","menu","nav","object","ol","p","q","quote","samp","section","span","strong","summary","sup","table","tbody","td","textarea","tfoot","th","thead","time","tr","ul","var","video"],se=["any-hover","any-pointer","aspect-ratio","color","color-gamut","color-index","device-aspect-ratio","device-height","device-width","display-mode","forced-colors","grid","height","hover","inverted-colors","monochrome","orientation","overflow-block","overflow-inline","pointer","prefers-color-scheme","prefers-contrast","prefers-reduced-motion","prefers-reduced-transparency","resolution","scan","scripting","update","width","min-width","max-width","min-height","max-height"],oe=["active","any-link","blank","checked","current","default","defined","dir","disabled","drop","empty","enabled","first","first-child","first-of-type","fullscreen","future","focus","focus-visible","focus-within","has","host","host-context","hover","indeterminate","in-range","invalid","is","lang","last-child","last-of-type","left","link","local-link","not","nth-child","nth-col","nth-last-child","nth-last-col","nth-last-of-type","nth-of-type","only-child","only-of-type","optional","out-of-range","past","placeholder-shown","read-only","read-write","required","right","root","scope","target","target-within","user-invalid","valid","visited","where"],le=["after","backdrop","before","cue","cue-region","first-letter","first-line","grammar-error","marker","part","placeholder","selection","slotted","spelling-error"],ce=["align-content","align-items","align-self","all","animation","animation-delay","animation-direction","animation-duration","animation-fill-mode","animation-iteration-count","animation-name","animation-play-state","animation-timing-function","backface-visibility","background","background-attachment","background-blend-mode","background-clip","background-color","background-image","background-origin","background-position","background-repeat","background-size","block-size","border","border-block","border-block-color","border-block-end","border-block-end-color","border-block-end-style","border-block-end-width","border-block-start","border-block-start-color","border-block-start-style","border-block-start-width","border-block-style","border-block-width","border-bottom","border-bottom-color","border-bottom-left-radius","border-bottom-right-radius","border-bottom-style","border-bottom-width","border-collapse","border-color","border-image","border-image-outset","border-image-repeat","border-image-slice","border-image-source","border-image-width","border-inline","border-inline-color","border-inline-end","border-inline-end-color","border-inline-end-style","border-inline-end-width","border-inline-start","border-inline-start-color","border-inline-start-style","border-inline-start-width","border-inline-style","border-inline-width","border-left","border-left-color","border-left-style","border-left-width","border-radius","border-right","border-right-color","border-right-style","border-right-width","border-spacing","border-style","border-top","border-top-color","border-top-left-radius","border-top-right-radius","border-top-style","border-top-width","border-width","bottom","box-decoration-break","box-shadow","box-sizing","break-after","break-before","break-inside","caption-side","caret-color","clear","clip","clip-path","clip-rule","color","column-count","column-fill","column-gap","column-rule","column-rule-color","column-rule-style","column-rule-width","column-span","column-width","columns","contain","content","content-visibility","counter-increment","counter-reset","cue","cue-after","cue-before","cursor","direction","display","empty-cells","filter","flex","flex-basis","flex-direction","flex-flow","flex-grow","flex-shrink","flex-wrap","float","flow","font","font-display","font-family","font-feature-settings","font-kerning","font-language-override","font-size","font-size-adjust","font-smoothing","font-stretch","font-style","font-synthesis","font-variant","font-variant-caps","font-variant-east-asian","font-variant-ligatures","font-variant-numeric","font-variant-position","font-variation-settings","font-weight","gap","glyph-orientation-vertical","grid","grid-area","grid-auto-columns","grid-auto-flow","grid-auto-rows","grid-column","grid-column-end","grid-column-start","grid-gap","grid-row","grid-row-end","grid-row-start","grid-template","grid-template-areas","grid-template-columns","grid-template-rows","hanging-punctuation","height","hyphens","icon","image-orientation","image-rendering","image-resolution","ime-mode","inline-size","isolation","justify-content","left","letter-spacing","line-break","line-height","list-style","list-style-image","list-style-position","list-style-type","margin","margin-block","margin-block-end","margin-block-start","margin-bottom","margin-inline","margin-inline-end","margin-inline-start","margin-left","margin-right","margin-top","marks","mask","mask-border","mask-border-mode","mask-border-outset","mask-border-repeat","mask-border-slice","mask-border-source","mask-border-width","mask-clip","mask-composite","mask-image","mask-mode","mask-origin","mask-position","mask-repeat","mask-size","mask-type","max-block-size","max-height","max-inline-size","max-width","min-block-size","min-height","min-inline-size","min-width","mix-blend-mode","nav-down","nav-index","nav-left","nav-right","nav-up","none","normal","object-fit","object-position","opacity","order","orphans","outline","outline-color","outline-offset","outline-style","outline-width","overflow","overflow-wrap","overflow-x","overflow-y","padding","padding-block","padding-block-end","padding-block-start","padding-bottom","padding-inline","padding-inline-end","padding-inline-start","padding-left","padding-right","padding-top","page-break-after","page-break-before","page-break-inside","pause","pause-after","pause-before","perspective","perspective-origin","pointer-events","position","quotes","resize","rest","rest-after","rest-before","right","row-gap","scroll-margin","scroll-margin-block","scroll-margin-block-end","scroll-margin-block-start","scroll-margin-bottom","scroll-margin-inline","scroll-margin-inline-end","scroll-margin-inline-start","scroll-margin-left","scroll-margin-right","scroll-margin-top","scroll-padding","scroll-padding-block","scroll-padding-block-end","scroll-padding-block-start","scroll-padding-bottom","scroll-padding-inline","scroll-padding-inline-end","scroll-padding-inline-start","scroll-padding-left","scroll-padding-right","scroll-padding-top","scroll-snap-align","scroll-snap-stop","scroll-snap-type","scrollbar-color","scrollbar-gutter","scrollbar-width","shape-image-threshold","shape-margin","shape-outside","speak","speak-as","src","tab-size","table-layout","text-align","text-align-all","text-align-last","text-combine-upright","text-decoration","text-decoration-color","text-decoration-line","text-decoration-style","text-emphasis","text-emphasis-color","text-emphasis-position","text-emphasis-style","text-indent","text-justify","text-orientation","text-overflow","text-rendering","text-shadow","text-transform","text-underline-position","top","transform","transform-box","transform-origin","transform-style","transition","transition-delay","transition-duration","transition-property","transition-timing-function","unicode-bidi","vertical-align","visibility","voice-balance","voice-duration","voice-family","voice-pitch","voice-range","voice-rate","voice-stress","voice-volume","white-space","widows","width","will-change","word-break","word-spacing","word-wrap","writing-mode","z-index"].reverse(),de=oe.concat(le)
+ ;var ge="[0-9](_*[0-9])*",ue=`\\.(${ge})`,be="[0-9a-fA-F](_*[0-9a-fA-F])*",me={
+ className:"number",variants:[{
+ begin:`(\\b(${ge})((${ue})|\\.)?|(${ue}))[eE][+-]?(${ge})[fFdD]?\\b`},{
+ begin:`\\b(${ge})((${ue})[fFdD]?\\b|\\.([fFdD]\\b)?)`},{
+ begin:`(${ue})[fFdD]?\\b`},{begin:`\\b(${ge})[fFdD]\\b`},{
+ begin:`\\b0[xX]((${be})\\.?|(${be})?\\.(${be}))[pP][+-]?(${ge})[fFdD]?\\b`},{
+ begin:"\\b(0|[1-9](_*[0-9])*)[lL]?\\b"},{begin:`\\b0[xX](${be})[lL]?\\b`},{
+ begin:"\\b0(_*[0-7])*[lL]?\\b"},{begin:"\\b0[bB][01](_*[01])*[lL]?\\b"}],
+ relevance:0};function pe(e,n,t){return-1===t?"":e.replace(n,(a=>pe(e,n,t-1)))}
+ const _e="[A-Za-z$_][0-9A-Za-z$_]*",he=["as","in","of","if","for","while","finally","var","new","function","do","return","void","else","break","catch","instanceof","with","throw","case","default","try","switch","continue","typeof","delete","let","yield","const","class","debugger","async","await","static","import","from","export","extends"],fe=["true","false","null","undefined","NaN","Infinity"],Ee=["Object","Function","Boolean","Symbol","Math","Date","Number","BigInt","String","RegExp","Array","Float32Array","Float64Array","Int8Array","Uint8Array","Uint8ClampedArray","Int16Array","Int32Array","Uint16Array","Uint32Array","BigInt64Array","BigUint64Array","Set","Map","WeakSet","WeakMap","ArrayBuffer","SharedArrayBuffer","Atomics","DataView","JSON","Promise","Generator","GeneratorFunction","AsyncFunction","Reflect","Proxy","Intl","WebAssembly"],ye=["Error","EvalError","InternalError","RangeError","ReferenceError","SyntaxError","TypeError","URIError"],Ne=["setInterval","setTimeout","clearInterval","clearTimeout","require","exports","eval","isFinite","isNaN","parseFloat","parseInt","decodeURI","decodeURIComponent","encodeURI","encodeURIComponent","escape","unescape"],we=["arguments","this","super","console","window","document","localStorage","sessionStorage","module","global"],ve=[].concat(Ne,Ee,ye)
+ ;function Oe(e){const n=e.regex,t=_e,a={begin:/<[A-Za-z0-9\\._:-]+/,
+ end:/\/[A-Za-z0-9\\._:-]+>|\/>/,isTrulyOpeningTag:(e,n)=>{
+ const t=e[0].length+e.index,a=e.input[t]
+ ;if("<"===a||","===a)return void n.ignoreMatch();let i
+ ;">"===a&&(((e,{after:n})=>{const t=""+e[0].slice(1)
+ ;return-1!==e.input.indexOf(t,n)})(e,{after:t})||n.ignoreMatch())
+ ;const r=e.input.substring(t)
+ ;((i=r.match(/^\s*=/))||(i=r.match(/^\s+extends\s+/))&&0===i.index)&&n.ignoreMatch()
+ }},i={$pattern:_e,keyword:he,literal:fe,built_in:ve,"variable.language":we
+ },r="[0-9](_?[0-9])*",s=`\\.(${r})`,o="0|[1-9](_?[0-9])*|0[0-7]*[89][0-9]*",l={
+ className:"number",variants:[{
+ begin:`(\\b(${o})((${s})|\\.)?|(${s}))[eE][+-]?(${r})\\b`},{
+ begin:`\\b(${o})\\b((${s})\\b|\\.)?|(${s})\\b`},{
+ begin:"\\b(0|[1-9](_?[0-9])*)n\\b"},{
+ begin:"\\b0[xX][0-9a-fA-F](_?[0-9a-fA-F])*n?\\b"},{
+ begin:"\\b0[bB][0-1](_?[0-1])*n?\\b"},{begin:"\\b0[oO][0-7](_?[0-7])*n?\\b"},{
+ begin:"\\b0[0-7]+n?\\b"}],relevance:0},c={className:"subst",begin:"\\$\\{",
+ end:"\\}",keywords:i,contains:[]},d={begin:"html`",end:"",starts:{end:"`",
+ returnEnd:!1,contains:[e.BACKSLASH_ESCAPE,c],subLanguage:"xml"}},g={
+ begin:"css`",end:"",starts:{end:"`",returnEnd:!1,
+ contains:[e.BACKSLASH_ESCAPE,c],subLanguage:"css"}},u={begin:"gql`",end:"",
+ starts:{end:"`",returnEnd:!1,contains:[e.BACKSLASH_ESCAPE,c],
+ subLanguage:"graphql"}},b={className:"string",begin:"`",end:"`",
+ contains:[e.BACKSLASH_ESCAPE,c]},m={className:"comment",
+ variants:[e.COMMENT(/\/\*\*(?!\/)/,"\\*/",{relevance:0,contains:[{
+ begin:"(?=@[A-Za-z]+)",relevance:0,contains:[{className:"doctag",
+ begin:"@[A-Za-z]+"},{className:"type",begin:"\\{",end:"\\}",excludeEnd:!0,
+ excludeBegin:!0,relevance:0},{className:"variable",begin:t+"(?=\\s*(-)|$)",
+ endsParent:!0,relevance:0},{begin:/(?=[^\n])\s/,relevance:0}]}]
+ }),e.C_BLOCK_COMMENT_MODE,e.C_LINE_COMMENT_MODE]
+ },p=[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,d,g,u,b,{match:/\$\d+/},l]
+ ;c.contains=p.concat({begin:/\{/,end:/\}/,keywords:i,contains:["self"].concat(p)
+ });const _=[].concat(m,c.contains),h=_.concat([{begin:/\(/,end:/\)/,keywords:i,
+ contains:["self"].concat(_)}]),f={className:"params",begin:/\(/,end:/\)/,
+ excludeBegin:!0,excludeEnd:!0,keywords:i,contains:h},E={variants:[{
+ match:[/class/,/\s+/,t,/\s+/,/extends/,/\s+/,n.concat(t,"(",n.concat(/\./,t),")*")],
+ scope:{1:"keyword",3:"title.class",5:"keyword",7:"title.class.inherited"}},{
+ match:[/class/,/\s+/,t],scope:{1:"keyword",3:"title.class"}}]},y={relevance:0,
+ match:n.either(/\bJSON/,/\b[A-Z][a-z]+([A-Z][a-z]*|\d)*/,/\b[A-Z]{2,}([A-Z][a-z]+|\d)+([A-Z][a-z]*)*/,/\b[A-Z]{2,}[a-z]+([A-Z][a-z]+|\d)*([A-Z][a-z]*)*/),
+ className:"title.class",keywords:{_:[...Ee,...ye]}},N={variants:[{
+ match:[/function/,/\s+/,t,/(?=\s*\()/]},{match:[/function/,/\s*(?=\()/]}],
+ className:{1:"keyword",3:"title.function"},label:"func.def",contains:[f],
+ illegal:/%/},w={
+ match:n.concat(/\b/,(v=[...Ne,"super","import"],n.concat("(?!",v.join("|"),")")),t,n.lookahead(/\(/)),
+ className:"title.function",relevance:0};var v;const O={
+ begin:n.concat(/\./,n.lookahead(n.concat(t,/(?![0-9A-Za-z$_(])/))),end:t,
+ excludeBegin:!0,keywords:"prototype",className:"property",relevance:0},k={
+ match:[/get|set/,/\s+/,t,/(?=\()/],className:{1:"keyword",3:"title.function"},
+ contains:[{begin:/\(\)/},f]
+ },x="(\\([^()]*(\\([^()]*(\\([^()]*\\)[^()]*)*\\)[^()]*)*\\)|"+e.UNDERSCORE_IDENT_RE+")\\s*=>",M={
+ match:[/const|var|let/,/\s+/,t,/\s*/,/=\s*/,/(async\s*)?/,n.lookahead(x)],
+ keywords:"async",className:{1:"keyword",3:"title.function"},contains:[f]}
+ ;return{name:"JavaScript",aliases:["js","jsx","mjs","cjs"],keywords:i,exports:{
+ PARAMS_CONTAINS:h,CLASS_REFERENCE:y},illegal:/#(?![$_A-z])/,
+ contains:[e.SHEBANG({label:"shebang",binary:"node",relevance:5}),{
+ label:"use_strict",className:"meta",relevance:10,
+ begin:/^\s*['"]use (strict|asm)['"]/
+ },e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,d,g,u,b,m,{match:/\$\d+/},l,y,{
+ className:"attr",begin:t+n.lookahead(":"),relevance:0},M,{
+ begin:"("+e.RE_STARTERS_RE+"|\\b(case|return|throw)\\b)\\s*",
+ keywords:"return throw case",relevance:0,contains:[m,e.REGEXP_MODE,{
+ className:"function",begin:x,returnBegin:!0,end:"\\s*=>",contains:[{
+ className:"params",variants:[{begin:e.UNDERSCORE_IDENT_RE,relevance:0},{
+ className:null,begin:/\(\s*\)/,skip:!0},{begin:/\(/,end:/\)/,excludeBegin:!0,
+ excludeEnd:!0,keywords:i,contains:h}]}]},{begin:/,/,relevance:0},{match:/\s+/,
+ relevance:0},{variants:[{begin:"<>",end:">"},{
+ match:/<[A-Za-z0-9\\._:-]+\s*\/>/},{begin:a.begin,
+ "on:begin":a.isTrulyOpeningTag,end:a.end}],subLanguage:"xml",contains:[{
+ begin:a.begin,end:a.end,skip:!0,contains:["self"]}]}]},N,{
+ beginKeywords:"while if switch catch for"},{
+ begin:"\\b(?!function)"+e.UNDERSCORE_IDENT_RE+"\\([^()]*(\\([^()]*(\\([^()]*\\)[^()]*)*\\)[^()]*)*\\)\\s*\\{",
+ returnBegin:!0,label:"func.def",contains:[f,e.inherit(e.TITLE_MODE,{begin:t,
+ className:"title.function"})]},{match:/\.\.\./,relevance:0},O,{match:"\\$"+t,
+ relevance:0},{match:[/\bconstructor(?=\s*\()/],className:{1:"title.function"},
+ contains:[f]},w,{relevance:0,match:/\b[A-Z][A-Z_0-9]+\b/,
+ className:"variable.constant"},E,k,{match:/\$[(.]/}]}}
+ const ke=e=>b(/\b/,e,/\w$/.test(e)?/\b/:/\B/),xe=["Protocol","Type"].map(ke),Me=["init","self"].map(ke),Se=["Any","Self"],Ae=["actor","any","associatedtype","async","await",/as\?/,/as!/,"as","break","case","catch","class","continue","convenience","default","defer","deinit","didSet","distributed","do","dynamic","else","enum","extension","fallthrough",/fileprivate\(set\)/,"fileprivate","final","for","func","get","guard","if","import","indirect","infix",/init\?/,/init!/,"inout",/internal\(set\)/,"internal","in","is","isolated","nonisolated","lazy","let","mutating","nonmutating",/open\(set\)/,"open","operator","optional","override","postfix","precedencegroup","prefix",/private\(set\)/,"private","protocol",/public\(set\)/,"public","repeat","required","rethrows","return","set","some","static","struct","subscript","super","switch","throws","throw",/try\?/,/try!/,"try","typealias",/unowned\(safe\)/,/unowned\(unsafe\)/,"unowned","var","weak","where","while","willSet"],Ce=["false","nil","true"],Te=["assignment","associativity","higherThan","left","lowerThan","none","right"],Re=["#colorLiteral","#column","#dsohandle","#else","#elseif","#endif","#error","#file","#fileID","#fileLiteral","#filePath","#function","#if","#imageLiteral","#keyPath","#line","#selector","#sourceLocation","#warn_unqualified_access","#warning"],De=["abs","all","any","assert","assertionFailure","debugPrint","dump","fatalError","getVaList","isKnownUniquelyReferenced","max","min","numericCast","pointwiseMax","pointwiseMin","precondition","preconditionFailure","print","readLine","repeatElement","sequence","stride","swap","swift_unboxFromSwiftValueWithType","transcode","type","unsafeBitCast","unsafeDowncast","withExtendedLifetime","withUnsafeMutablePointer","withUnsafePointer","withVaList","withoutActuallyEscaping","zip"],Ie=m(/[/=\-+!*%<>&|^~?]/,/[\u00A1-\u00A7]/,/[\u00A9\u00AB]/,/[\u00AC\u00AE]/,/[\u00B0\u00B1]/,/[\u00B6\u00BB\u00BF\u00D7\u00F7]/,/[\u2016-\u2017]/,/[\u2020-\u2027]/,/[\u2030-\u203E]/,/[\u2041-\u2053]/,/[\u2055-\u205E]/,/[\u2190-\u23FF]/,/[\u2500-\u2775]/,/[\u2794-\u2BFF]/,/[\u2E00-\u2E7F]/,/[\u3001-\u3003]/,/[\u3008-\u3020]/,/[\u3030]/),Le=m(Ie,/[\u0300-\u036F]/,/[\u1DC0-\u1DFF]/,/[\u20D0-\u20FF]/,/[\uFE00-\uFE0F]/,/[\uFE20-\uFE2F]/),Be=b(Ie,Le,"*"),$e=m(/[a-zA-Z_]/,/[\u00A8\u00AA\u00AD\u00AF\u00B2-\u00B5\u00B7-\u00BA]/,/[\u00BC-\u00BE\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u00FF]/,/[\u0100-\u02FF\u0370-\u167F\u1681-\u180D\u180F-\u1DBF]/,/[\u1E00-\u1FFF]/,/[\u200B-\u200D\u202A-\u202E\u203F-\u2040\u2054\u2060-\u206F]/,/[\u2070-\u20CF\u2100-\u218F\u2460-\u24FF\u2776-\u2793]/,/[\u2C00-\u2DFF\u2E80-\u2FFF]/,/[\u3004-\u3007\u3021-\u302F\u3031-\u303F\u3040-\uD7FF]/,/[\uF900-\uFD3D\uFD40-\uFDCF\uFDF0-\uFE1F\uFE30-\uFE44]/,/[\uFE47-\uFEFE\uFF00-\uFFFD]/),ze=m($e,/\d/,/[\u0300-\u036F\u1DC0-\u1DFF\u20D0-\u20FF\uFE20-\uFE2F]/),Fe=b($e,ze,"*"),Ue=b(/[A-Z]/,ze,"*"),je=["autoclosure",b(/convention\(/,m("swift","block","c"),/\)/),"discardableResult","dynamicCallable","dynamicMemberLookup","escaping","frozen","GKInspectable","IBAction","IBDesignable","IBInspectable","IBOutlet","IBSegueAction","inlinable","main","nonobjc","NSApplicationMain","NSCopying","NSManaged",b(/objc\(/,Fe,/\)/),"objc","objcMembers","propertyWrapper","requires_stored_property_inits","resultBuilder","testable","UIApplicationMain","unknown","usableFromInline"],Pe=["iOS","iOSApplicationExtension","macOS","macOSApplicationExtension","macCatalyst","macCatalystApplicationExtension","watchOS","watchOSApplicationExtension","tvOS","tvOSApplicationExtension","swift"]
+ ;var Ke=Object.freeze({__proto__:null,grmr_bash:e=>{const n=e.regex,t={},a={
+ begin:/\$\{/,end:/\}/,contains:["self",{begin:/:-/,contains:[t]}]}
+ ;Object.assign(t,{className:"variable",variants:[{
+ begin:n.concat(/\$[\w\d#@][\w\d_]*/,"(?![\\w\\d])(?![$])")},a]});const i={
+ className:"subst",begin:/\$\(/,end:/\)/,contains:[e.BACKSLASH_ESCAPE]},r={
+ begin:/<<-?\s*(?=\w+)/,starts:{contains:[e.END_SAME_AS_BEGIN({begin:/(\w+)/,
+ end:/(\w+)/,className:"string"})]}},s={className:"string",begin:/"/,end:/"/,
+ contains:[e.BACKSLASH_ESCAPE,t,i]};i.contains.push(s);const o={begin:/\$?\(\(/,
+ end:/\)\)/,contains:[{begin:/\d+#[0-9a-f]+/,className:"number"},e.NUMBER_MODE,t]
+ },l=e.SHEBANG({binary:"(fish|bash|zsh|sh|csh|ksh|tcsh|dash|scsh)",relevance:10
+ }),c={className:"function",begin:/\w[\w\d_]*\s*\(\s*\)\s*\{/,returnBegin:!0,
+ contains:[e.inherit(e.TITLE_MODE,{begin:/\w[\w\d_]*/})],relevance:0};return{
+ name:"Bash",aliases:["sh"],keywords:{$pattern:/\b[a-z][a-z0-9._-]+\b/,
+ keyword:["if","then","else","elif","fi","for","while","until","in","do","done","case","esac","function","select"],
+ literal:["true","false"],
+ built_in:["break","cd","continue","eval","exec","exit","export","getopts","hash","pwd","readonly","return","shift","test","times","trap","umask","unset","alias","bind","builtin","caller","command","declare","echo","enable","help","let","local","logout","mapfile","printf","read","readarray","source","type","typeset","ulimit","unalias","set","shopt","autoload","bg","bindkey","bye","cap","chdir","clone","comparguments","compcall","compctl","compdescribe","compfiles","compgroups","compquote","comptags","comptry","compvalues","dirs","disable","disown","echotc","echoti","emulate","fc","fg","float","functions","getcap","getln","history","integer","jobs","kill","limit","log","noglob","popd","print","pushd","pushln","rehash","sched","setcap","setopt","stat","suspend","ttyctl","unfunction","unhash","unlimit","unsetopt","vared","wait","whence","where","which","zcompile","zformat","zftp","zle","zmodload","zparseopts","zprof","zpty","zregexparse","zsocket","zstyle","ztcp","chcon","chgrp","chown","chmod","cp","dd","df","dir","dircolors","ln","ls","mkdir","mkfifo","mknod","mktemp","mv","realpath","rm","rmdir","shred","sync","touch","truncate","vdir","b2sum","base32","base64","cat","cksum","comm","csplit","cut","expand","fmt","fold","head","join","md5sum","nl","numfmt","od","paste","ptx","pr","sha1sum","sha224sum","sha256sum","sha384sum","sha512sum","shuf","sort","split","sum","tac","tail","tr","tsort","unexpand","uniq","wc","arch","basename","chroot","date","dirname","du","echo","env","expr","factor","groups","hostid","id","link","logname","nice","nohup","nproc","pathchk","pinky","printenv","printf","pwd","readlink","runcon","seq","sleep","stat","stdbuf","stty","tee","test","timeout","tty","uname","unlink","uptime","users","who","whoami","yes"]
+ },contains:[l,e.SHEBANG(),c,o,e.HASH_COMMENT_MODE,r,{match:/(\/[a-z._-]+)+/},s,{
+ className:"",begin:/\\"/},{className:"string",begin:/'/,end:/'/},t]}},
+ grmr_c:e=>{const n=e.regex,t=e.COMMENT("//","$",{contains:[{begin:/\\\n/}]
+ }),a="decltype\\(auto\\)",i="[a-zA-Z_]\\w*::",r="("+a+"|"+n.optional(i)+"[a-zA-Z_]\\w*"+n.optional("<[^<>]+>")+")",s={
+ className:"type",variants:[{begin:"\\b[a-z\\d_]*_t\\b"},{
+ match:/\batomic_[a-z]{3,6}\b/}]},o={className:"string",variants:[{
+ begin:'(u8?|U|L)?"',end:'"',illegal:"\\n",contains:[e.BACKSLASH_ESCAPE]},{
+ begin:"(u8?|U|L)?'(\\\\(x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4,8}|[0-7]{3}|\\S)|.)",
+ end:"'",illegal:"."},e.END_SAME_AS_BEGIN({
+ begin:/(?:u8?|U|L)?R"([^()\\ ]{0,16})\(/,end:/\)([^()\\ ]{0,16})"/})]},l={
+ className:"number",variants:[{begin:"\\b(0b[01']+)"},{
+ begin:"(-?)\\b([\\d']+(\\.[\\d']*)?|\\.[\\d']+)((ll|LL|l|L)(u|U)?|(u|U)(ll|LL|l|L)?|f|F|b|B)"
+ },{
+ begin:"(-?)(\\b0[xX][a-fA-F0-9']+|(\\b[\\d']+(\\.[\\d']*)?|\\.[\\d']+)([eE][-+]?[\\d']+)?)"
+ }],relevance:0},c={className:"meta",begin:/#\s*[a-z]+\b/,end:/$/,keywords:{
+ keyword:"if else elif endif define undef warning error line pragma _Pragma ifdef ifndef include"
+ },contains:[{begin:/\\\n/,relevance:0},e.inherit(o,{className:"string"}),{
+ className:"string",begin:/<.*?>/},t,e.C_BLOCK_COMMENT_MODE]},d={
+ className:"title",begin:n.optional(i)+e.IDENT_RE,relevance:0
+ },g=n.optional(i)+e.IDENT_RE+"\\s*\\(",u={
+ keyword:["asm","auto","break","case","continue","default","do","else","enum","extern","for","fortran","goto","if","inline","register","restrict","return","sizeof","struct","switch","typedef","union","volatile","while","_Alignas","_Alignof","_Atomic","_Generic","_Noreturn","_Static_assert","_Thread_local","alignas","alignof","noreturn","static_assert","thread_local","_Pragma"],
+ type:["float","double","signed","unsigned","int","short","long","char","void","_Bool","_Complex","_Imaginary","_Decimal32","_Decimal64","_Decimal128","const","static","complex","bool","imaginary"],
+ literal:"true false NULL",
+ built_in:"std string wstring cin cout cerr clog stdin stdout stderr stringstream istringstream ostringstream auto_ptr deque list queue stack vector map set pair bitset multiset multimap unordered_set unordered_map unordered_multiset unordered_multimap priority_queue make_pair array shared_ptr abort terminate abs acos asin atan2 atan calloc ceil cosh cos exit exp fabs floor fmod fprintf fputs free frexp fscanf future isalnum isalpha iscntrl isdigit isgraph islower isprint ispunct isspace isupper isxdigit tolower toupper labs ldexp log10 log malloc realloc memchr memcmp memcpy memset modf pow printf putchar puts scanf sinh sin snprintf sprintf sqrt sscanf strcat strchr strcmp strcpy strcspn strlen strncat strncmp strncpy strpbrk strrchr strspn strstr tanh tan vfprintf vprintf vsprintf endl initializer_list unique_ptr"
+ },b=[c,s,t,e.C_BLOCK_COMMENT_MODE,l,o],m={variants:[{begin:/=/,end:/;/},{
+ begin:/\(/,end:/\)/},{beginKeywords:"new throw return else",end:/;/}],
+ keywords:u,contains:b.concat([{begin:/\(/,end:/\)/,keywords:u,
+ contains:b.concat(["self"]),relevance:0}]),relevance:0},p={
+ begin:"("+r+"[\\*&\\s]+)+"+g,returnBegin:!0,end:/[{;=]/,excludeEnd:!0,
+ keywords:u,illegal:/[^\w\s\*&:<>.]/,contains:[{begin:a,keywords:u,relevance:0},{
+ begin:g,returnBegin:!0,contains:[e.inherit(d,{className:"title.function"})],
+ relevance:0},{relevance:0,match:/,/},{className:"params",begin:/\(/,end:/\)/,
+ keywords:u,relevance:0,contains:[t,e.C_BLOCK_COMMENT_MODE,o,l,s,{begin:/\(/,
+ end:/\)/,keywords:u,relevance:0,contains:["self",t,e.C_BLOCK_COMMENT_MODE,o,l,s]
+ }]},s,t,e.C_BLOCK_COMMENT_MODE,c]};return{name:"C",aliases:["h"],keywords:u,
+ disableAutodetect:!0,illegal:"",contains:[].concat(m,p,b,[c,{
+ begin:e.IDENT_RE+"::",keywords:u},{className:"class",
+ beginKeywords:"enum class struct union",end:/[{;:<>=]/,contains:[{
+ beginKeywords:"final class struct"},e.TITLE_MODE]}]),exports:{preprocessor:c,
+ strings:o,keywords:u}}},grmr_cpp:e=>{const n=e.regex,t=e.COMMENT("//","$",{
+ contains:[{begin:/\\\n/}]
+ }),a="decltype\\(auto\\)",i="[a-zA-Z_]\\w*::",r="(?!struct)("+a+"|"+n.optional(i)+"[a-zA-Z_]\\w*"+n.optional("<[^<>]+>")+")",s={
+ className:"type",begin:"\\b[a-z\\d_]*_t\\b"},o={className:"string",variants:[{
+ begin:'(u8?|U|L)?"',end:'"',illegal:"\\n",contains:[e.BACKSLASH_ESCAPE]},{
+ begin:"(u8?|U|L)?'(\\\\(x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4,8}|[0-7]{3}|\\S)|.)",
+ end:"'",illegal:"."},e.END_SAME_AS_BEGIN({
+ begin:/(?:u8?|U|L)?R"([^()\\ ]{0,16})\(/,end:/\)([^()\\ ]{0,16})"/})]},l={
+ className:"number",variants:[{begin:"\\b(0b[01']+)"},{
+ begin:"(-?)\\b([\\d']+(\\.[\\d']*)?|\\.[\\d']+)((ll|LL|l|L)(u|U)?|(u|U)(ll|LL|l|L)?|f|F|b|B)"
+ },{
+ begin:"(-?)(\\b0[xX][a-fA-F0-9']+|(\\b[\\d']+(\\.[\\d']*)?|\\.[\\d']+)([eE][-+]?[\\d']+)?)"
+ }],relevance:0},c={className:"meta",begin:/#\s*[a-z]+\b/,end:/$/,keywords:{
+ keyword:"if else elif endif define undef warning error line pragma _Pragma ifdef ifndef include"
+ },contains:[{begin:/\\\n/,relevance:0},e.inherit(o,{className:"string"}),{
+ className:"string",begin:/<.*?>/},t,e.C_BLOCK_COMMENT_MODE]},d={
+ className:"title",begin:n.optional(i)+e.IDENT_RE,relevance:0
+ },g=n.optional(i)+e.IDENT_RE+"\\s*\\(",u={
+ type:["bool","char","char16_t","char32_t","char8_t","double","float","int","long","short","void","wchar_t","unsigned","signed","const","static"],
+ keyword:["alignas","alignof","and","and_eq","asm","atomic_cancel","atomic_commit","atomic_noexcept","auto","bitand","bitor","break","case","catch","class","co_await","co_return","co_yield","compl","concept","const_cast|10","consteval","constexpr","constinit","continue","decltype","default","delete","do","dynamic_cast|10","else","enum","explicit","export","extern","false","final","for","friend","goto","if","import","inline","module","mutable","namespace","new","noexcept","not","not_eq","nullptr","operator","or","or_eq","override","private","protected","public","reflexpr","register","reinterpret_cast|10","requires","return","sizeof","static_assert","static_cast|10","struct","switch","synchronized","template","this","thread_local","throw","transaction_safe","transaction_safe_dynamic","true","try","typedef","typeid","typename","union","using","virtual","volatile","while","xor","xor_eq"],
+ literal:["NULL","false","nullopt","nullptr","true"],built_in:["_Pragma"],
+ _type_hints:["any","auto_ptr","barrier","binary_semaphore","bitset","complex","condition_variable","condition_variable_any","counting_semaphore","deque","false_type","future","imaginary","initializer_list","istringstream","jthread","latch","lock_guard","multimap","multiset","mutex","optional","ostringstream","packaged_task","pair","promise","priority_queue","queue","recursive_mutex","recursive_timed_mutex","scoped_lock","set","shared_future","shared_lock","shared_mutex","shared_timed_mutex","shared_ptr","stack","string_view","stringstream","timed_mutex","thread","true_type","tuple","unique_lock","unique_ptr","unordered_map","unordered_multimap","unordered_multiset","unordered_set","variant","vector","weak_ptr","wstring","wstring_view"]
+ },b={className:"function.dispatch",relevance:0,keywords:{
+ _hint:["abort","abs","acos","apply","as_const","asin","atan","atan2","calloc","ceil","cerr","cin","clog","cos","cosh","cout","declval","endl","exchange","exit","exp","fabs","floor","fmod","forward","fprintf","fputs","free","frexp","fscanf","future","invoke","isalnum","isalpha","iscntrl","isdigit","isgraph","islower","isprint","ispunct","isspace","isupper","isxdigit","labs","launder","ldexp","log","log10","make_pair","make_shared","make_shared_for_overwrite","make_tuple","make_unique","malloc","memchr","memcmp","memcpy","memset","modf","move","pow","printf","putchar","puts","realloc","scanf","sin","sinh","snprintf","sprintf","sqrt","sscanf","std","stderr","stdin","stdout","strcat","strchr","strcmp","strcpy","strcspn","strlen","strncat","strncmp","strncpy","strpbrk","strrchr","strspn","strstr","swap","tan","tanh","terminate","to_underlying","tolower","toupper","vfprintf","visit","vprintf","vsprintf"]
+ },
+ begin:n.concat(/\b/,/(?!decltype)/,/(?!if)/,/(?!for)/,/(?!switch)/,/(?!while)/,e.IDENT_RE,n.lookahead(/(<[^<>]+>|)\s*\(/))
+ },m=[b,c,s,t,e.C_BLOCK_COMMENT_MODE,l,o],p={variants:[{begin:/=/,end:/;/},{
+ begin:/\(/,end:/\)/},{beginKeywords:"new throw return else",end:/;/}],
+ keywords:u,contains:m.concat([{begin:/\(/,end:/\)/,keywords:u,
+ contains:m.concat(["self"]),relevance:0}]),relevance:0},_={className:"function",
+ begin:"("+r+"[\\*&\\s]+)+"+g,returnBegin:!0,end:/[{;=]/,excludeEnd:!0,
+ keywords:u,illegal:/[^\w\s\*&:<>.]/,contains:[{begin:a,keywords:u,relevance:0},{
+ begin:g,returnBegin:!0,contains:[d],relevance:0},{begin:/::/,relevance:0},{
+ begin:/:/,endsWithParent:!0,contains:[o,l]},{relevance:0,match:/,/},{
+ className:"params",begin:/\(/,end:/\)/,keywords:u,relevance:0,
+ contains:[t,e.C_BLOCK_COMMENT_MODE,o,l,s,{begin:/\(/,end:/\)/,keywords:u,
+ relevance:0,contains:["self",t,e.C_BLOCK_COMMENT_MODE,o,l,s]}]
+ },s,t,e.C_BLOCK_COMMENT_MODE,c]};return{name:"C++",
+ aliases:["cc","c++","h++","hpp","hh","hxx","cxx"],keywords:u,illegal:"",
+ classNameAliases:{"function.dispatch":"built_in"},
+ contains:[].concat(p,_,b,m,[c,{
+ begin:"\\b(deque|list|queue|priority_queue|pair|stack|vector|map|set|bitset|multiset|multimap|unordered_map|unordered_set|unordered_multiset|unordered_multimap|array|tuple|optional|variant|function)\\s*<(?!<)",
+ end:">",keywords:u,contains:["self",s]},{begin:e.IDENT_RE+"::",keywords:u},{
+ match:[/\b(?:enum(?:\s+(?:class|struct))?|class|struct|union)/,/\s+/,/\w+/],
+ className:{1:"keyword",3:"title.class"}}])}},grmr_csharp:e=>{const n={
+ keyword:["abstract","as","base","break","case","catch","class","const","continue","do","else","event","explicit","extern","finally","fixed","for","foreach","goto","if","implicit","in","interface","internal","is","lock","namespace","new","operator","out","override","params","private","protected","public","readonly","record","ref","return","scoped","sealed","sizeof","stackalloc","static","struct","switch","this","throw","try","typeof","unchecked","unsafe","using","virtual","void","volatile","while"].concat(["add","alias","and","ascending","async","await","by","descending","equals","from","get","global","group","init","into","join","let","nameof","not","notnull","on","or","orderby","partial","remove","select","set","unmanaged","value|0","var","when","where","with","yield"]),
+ built_in:["bool","byte","char","decimal","delegate","double","dynamic","enum","float","int","long","nint","nuint","object","sbyte","short","string","ulong","uint","ushort"],
+ literal:["default","false","null","true"]},t=e.inherit(e.TITLE_MODE,{
+ begin:"[a-zA-Z](\\.?\\w)*"}),a={className:"number",variants:[{
+ begin:"\\b(0b[01']+)"},{
+ begin:"(-?)\\b([\\d']+(\\.[\\d']*)?|\\.[\\d']+)(u|U|l|L|ul|UL|f|F|b|B)"},{
+ begin:"(-?)(\\b0[xX][a-fA-F0-9']+|(\\b[\\d']+(\\.[\\d']*)?|\\.[\\d']+)([eE][-+]?[\\d']+)?)"
+ }],relevance:0},i={className:"string",begin:'@"',end:'"',contains:[{begin:'""'}]
+ },r=e.inherit(i,{illegal:/\n/}),s={className:"subst",begin:/\{/,end:/\}/,
+ keywords:n},o=e.inherit(s,{illegal:/\n/}),l={className:"string",begin:/\$"/,
+ end:'"',illegal:/\n/,contains:[{begin:/\{\{/},{begin:/\}\}/
+ },e.BACKSLASH_ESCAPE,o]},c={className:"string",begin:/\$@"/,end:'"',contains:[{
+ begin:/\{\{/},{begin:/\}\}/},{begin:'""'},s]},d=e.inherit(c,{illegal:/\n/,
+ contains:[{begin:/\{\{/},{begin:/\}\}/},{begin:'""'},o]})
+ ;s.contains=[c,l,i,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,a,e.C_BLOCK_COMMENT_MODE],
+ o.contains=[d,l,r,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,a,e.inherit(e.C_BLOCK_COMMENT_MODE,{
+ illegal:/\n/})];const g={variants:[c,l,i,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE]
+ },u={begin:"<",end:">",contains:[{beginKeywords:"in out"},t]
+ },b=e.IDENT_RE+"(<"+e.IDENT_RE+"(\\s*,\\s*"+e.IDENT_RE+")*>)?(\\[\\])?",m={
+ begin:"@"+e.IDENT_RE,relevance:0};return{name:"C#",aliases:["cs","c#"],
+ keywords:n,illegal:/::/,contains:[e.COMMENT("///","$",{returnBegin:!0,
+ contains:[{className:"doctag",variants:[{begin:"///",relevance:0},{
+ begin:"\x3c!--|--\x3e"},{begin:"?",end:">"}]}]
+ }),e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,{className:"meta",begin:"#",
+ end:"$",keywords:{
+ keyword:"if else elif endif define undef warning error line region endregion pragma checksum"
+ }},g,a,{beginKeywords:"class interface",relevance:0,end:/[{;=]/,
+ illegal:/[^\s:,]/,contains:[{beginKeywords:"where class"
+ },t,u,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},{beginKeywords:"namespace",
+ relevance:0,end:/[{;=]/,illegal:/[^\s:]/,
+ contains:[t,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},{
+ beginKeywords:"record",relevance:0,end:/[{;=]/,illegal:/[^\s:]/,
+ contains:[t,u,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},{className:"meta",
+ begin:"^\\s*\\[(?=[\\w])",excludeBegin:!0,end:"\\]",excludeEnd:!0,contains:[{
+ className:"string",begin:/"/,end:/"/}]},{
+ beginKeywords:"new return throw await else",relevance:0},{className:"function",
+ begin:"("+b+"\\s+)+"+e.IDENT_RE+"\\s*(<[^=]+>\\s*)?\\(",returnBegin:!0,
+ end:/\s*[{;=]/,excludeEnd:!0,keywords:n,contains:[{
+ beginKeywords:"public private protected static internal protected abstract async extern override unsafe virtual new sealed partial",
+ relevance:0},{begin:e.IDENT_RE+"\\s*(<[^=]+>\\s*)?\\(",returnBegin:!0,
+ contains:[e.TITLE_MODE,u],relevance:0},{match:/\(\)/},{className:"params",
+ begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:n,relevance:0,
+ contains:[g,a,e.C_BLOCK_COMMENT_MODE]
+ },e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},m]}},grmr_css:e=>{
+ const n=e.regex,t=ie(e),a=[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE];return{
+ name:"CSS",case_insensitive:!0,illegal:/[=|'\$]/,keywords:{
+ keyframePosition:"from to"},classNameAliases:{keyframePosition:"selector-tag"},
+ contains:[t.BLOCK_COMMENT,{begin:/-(webkit|moz|ms|o)-(?=[a-z])/
+ },t.CSS_NUMBER_MODE,{className:"selector-id",begin:/#[A-Za-z0-9_-]+/,relevance:0
+ },{className:"selector-class",begin:"\\.[a-zA-Z-][a-zA-Z0-9_-]*",relevance:0
+ },t.ATTRIBUTE_SELECTOR_MODE,{className:"selector-pseudo",variants:[{
+ begin:":("+oe.join("|")+")"},{begin:":(:)?("+le.join("|")+")"}]
+ },t.CSS_VARIABLE,{className:"attribute",begin:"\\b("+ce.join("|")+")\\b"},{
+ begin:/:/,end:/[;}{]/,
+ contains:[t.BLOCK_COMMENT,t.HEXCOLOR,t.IMPORTANT,t.CSS_NUMBER_MODE,...a,{
+ begin:/(url|data-uri)\(/,end:/\)/,relevance:0,keywords:{built_in:"url data-uri"
+ },contains:[...a,{className:"string",begin:/[^)]/,endsWithParent:!0,
+ excludeEnd:!0}]},t.FUNCTION_DISPATCH]},{begin:n.lookahead(/@/),end:"[{;]",
+ relevance:0,illegal:/:/,contains:[{className:"keyword",begin:/@-?\w[\w]*(-\w+)*/
+ },{begin:/\s/,endsWithParent:!0,excludeEnd:!0,relevance:0,keywords:{
+ $pattern:/[a-z-]+/,keyword:"and or not only",attribute:se.join(" ")},contains:[{
+ begin:/[a-z-]+(?=:)/,className:"attribute"},...a,t.CSS_NUMBER_MODE]}]},{
+ className:"selector-tag",begin:"\\b("+re.join("|")+")\\b"}]}},grmr_diff:e=>{
+ const n=e.regex;return{name:"Diff",aliases:["patch"],contains:[{
+ className:"meta",relevance:10,
+ match:n.either(/^@@ +-\d+,\d+ +\+\d+,\d+ +@@/,/^\*\*\* +\d+,\d+ +\*\*\*\*$/,/^--- +\d+,\d+ +----$/)
+ },{className:"comment",variants:[{
+ begin:n.either(/Index: /,/^index/,/={3,}/,/^-{3}/,/^\*{3} /,/^\+{3}/,/^diff --git/),
+ end:/$/},{match:/^\*{15}$/}]},{className:"addition",begin:/^\+/,end:/$/},{
+ className:"deletion",begin:/^-/,end:/$/},{className:"addition",begin:/^!/,
+ end:/$/}]}},grmr_go:e=>{const n={
+ keyword:["break","case","chan","const","continue","default","defer","else","fallthrough","for","func","go","goto","if","import","interface","map","package","range","return","select","struct","switch","type","var"],
+ type:["bool","byte","complex64","complex128","error","float32","float64","int8","int16","int32","int64","string","uint8","uint16","uint32","uint64","int","uint","uintptr","rune"],
+ literal:["true","false","iota","nil"],
+ built_in:["append","cap","close","complex","copy","imag","len","make","new","panic","print","println","real","recover","delete"]
+ };return{name:"Go",aliases:["golang"],keywords:n,illegal:"",
+ contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,{className:"string",
+ variants:[e.QUOTE_STRING_MODE,e.APOS_STRING_MODE,{begin:"`",end:"`"}]},{
+ className:"number",variants:[{begin:e.C_NUMBER_RE+"[i]",relevance:1
+ },e.C_NUMBER_MODE]},{begin:/:=/},{className:"function",beginKeywords:"func",
+ end:"\\s*(\\{|$)",excludeEnd:!0,contains:[e.TITLE_MODE,{className:"params",
+ begin:/\(/,end:/\)/,endsParent:!0,keywords:n,illegal:/["']/}]}]}},
+ grmr_graphql:e=>{const n=e.regex;return{name:"GraphQL",aliases:["gql"],
+ case_insensitive:!0,disableAutodetect:!1,keywords:{
+ keyword:["query","mutation","subscription","type","input","schema","directive","interface","union","scalar","fragment","enum","on"],
+ literal:["true","false","null"]},
+ contains:[e.HASH_COMMENT_MODE,e.QUOTE_STRING_MODE,e.NUMBER_MODE,{
+ scope:"punctuation",match:/[.]{3}/,relevance:0},{scope:"punctuation",
+ begin:/[\!\(\)\:\=\[\]\{\|\}]{1}/,relevance:0},{scope:"variable",begin:/\$/,
+ end:/\W/,excludeEnd:!0,relevance:0},{scope:"meta",match:/@\w+/,excludeEnd:!0},{
+ scope:"symbol",begin:n.concat(/[_A-Za-z][_0-9A-Za-z]*/,n.lookahead(/\s*:/)),
+ relevance:0}],illegal:[/[;<']/,/BEGIN/]}},grmr_ini:e=>{const n=e.regex,t={
+ className:"number",relevance:0,variants:[{begin:/([+-]+)?[\d]+_[\d_]+/},{
+ begin:e.NUMBER_RE}]},a=e.COMMENT();a.variants=[{begin:/;/,end:/$/},{begin:/#/,
+ end:/$/}];const i={className:"variable",variants:[{begin:/\$[\w\d"][\w\d_]*/},{
+ begin:/\$\{(.*?)\}/}]},r={className:"literal",
+ begin:/\bon|off|true|false|yes|no\b/},s={className:"string",
+ contains:[e.BACKSLASH_ESCAPE],variants:[{begin:"'''",end:"'''",relevance:10},{
+ begin:'"""',end:'"""',relevance:10},{begin:'"',end:'"'},{begin:"'",end:"'"}]
+ },o={begin:/\[/,end:/\]/,contains:[a,r,i,s,t,"self"],relevance:0
+ },l=n.either(/[A-Za-z0-9_-]+/,/"(\\"|[^"])*"/,/'[^']*'/);return{
+ name:"TOML, also INI",aliases:["toml"],case_insensitive:!0,illegal:/\S/,
+ contains:[a,{className:"section",begin:/\[+/,end:/\]+/},{
+ begin:n.concat(l,"(\\s*\\.\\s*",l,")*",n.lookahead(/\s*=\s*[^#\s]/)),
+ className:"attr",starts:{end:/$/,contains:[a,o,r,i,s,t]}}]}},grmr_java:e=>{
+ const n=e.regex,t="[\xc0-\u02b8a-zA-Z_$][\xc0-\u02b8a-zA-Z_$0-9]*",a=t+pe("(?:<"+t+"~~~(?:\\s*,\\s*"+t+"~~~)*>)?",/~~~/g,2),i={
+ keyword:["synchronized","abstract","private","var","static","if","const ","for","while","strictfp","finally","protected","import","native","final","void","enum","else","break","transient","catch","instanceof","volatile","case","assert","package","default","public","try","switch","continue","throws","protected","public","private","module","requires","exports","do","sealed","yield","permits"],
+ literal:["false","true","null"],
+ type:["char","boolean","long","float","int","byte","short","double"],
+ built_in:["super","this"]},r={className:"meta",begin:"@"+t,contains:[{
+ begin:/\(/,end:/\)/,contains:["self"]}]},s={className:"params",begin:/\(/,
+ end:/\)/,keywords:i,relevance:0,contains:[e.C_BLOCK_COMMENT_MODE],endsParent:!0}
+ ;return{name:"Java",aliases:["jsp"],keywords:i,illegal:/<\/|#/,
+ contains:[e.COMMENT("/\\*\\*","\\*/",{relevance:0,contains:[{begin:/\w+@/,
+ relevance:0},{className:"doctag",begin:"@[A-Za-z]+"}]}),{
+ begin:/import java\.[a-z]+\./,keywords:"import",relevance:2
+ },e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,{begin:/"""/,end:/"""/,
+ className:"string",contains:[e.BACKSLASH_ESCAPE]
+ },e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,{
+ match:[/\b(?:class|interface|enum|extends|implements|new)/,/\s+/,t],className:{
+ 1:"keyword",3:"title.class"}},{match:/non-sealed/,scope:"keyword"},{
+ begin:[n.concat(/(?!else)/,t),/\s+/,t,/\s+/,/=(?!=)/],className:{1:"type",
+ 3:"variable",5:"operator"}},{begin:[/record/,/\s+/,t],className:{1:"keyword",
+ 3:"title.class"},contains:[s,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},{
+ beginKeywords:"new throw return else",relevance:0},{
+ begin:["(?:"+a+"\\s+)",e.UNDERSCORE_IDENT_RE,/\s*(?=\()/],className:{
+ 2:"title.function"},keywords:i,contains:[{className:"params",begin:/\(/,
+ end:/\)/,keywords:i,relevance:0,
+ contains:[r,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,me,e.C_BLOCK_COMMENT_MODE]
+ },e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},me,r]}},grmr_javascript:Oe,
+ grmr_json:e=>{const n=["true","false","null"],t={scope:"literal",
+ beginKeywords:n.join(" ")};return{name:"JSON",keywords:{literal:n},contains:[{
+ className:"attr",begin:/"(\\.|[^\\"\r\n])*"(?=\s*:)/,relevance:1.01},{
+ match:/[{}[\],:]/,className:"punctuation",relevance:0
+ },e.QUOTE_STRING_MODE,t,e.C_NUMBER_MODE,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE],
+ illegal:"\\S"}},grmr_kotlin:e=>{const n={
+ keyword:"abstract as val var vararg get set class object open private protected public noinline crossinline dynamic final enum if else do while for when throw try catch finally import package is in fun override companion reified inline lateinit init interface annotation data sealed internal infix operator out by constructor super tailrec where const inner suspend typealias external expect actual",
+ built_in:"Byte Short Char Int Long Boolean Float Double Void Unit Nothing",
+ literal:"true false null"},t={className:"symbol",begin:e.UNDERSCORE_IDENT_RE+"@"
+ },a={className:"subst",begin:/\$\{/,end:/\}/,contains:[e.C_NUMBER_MODE]},i={
+ className:"variable",begin:"\\$"+e.UNDERSCORE_IDENT_RE},r={className:"string",
+ variants:[{begin:'"""',end:'"""(?=[^"])',contains:[i,a]},{begin:"'",end:"'",
+ illegal:/\n/,contains:[e.BACKSLASH_ESCAPE]},{begin:'"',end:'"',illegal:/\n/,
+ contains:[e.BACKSLASH_ESCAPE,i,a]}]};a.contains.push(r);const s={
+ className:"meta",
+ begin:"@(?:file|property|field|get|set|receiver|param|setparam|delegate)\\s*:(?:\\s*"+e.UNDERSCORE_IDENT_RE+")?"
+ },o={className:"meta",begin:"@"+e.UNDERSCORE_IDENT_RE,contains:[{begin:/\(/,
+ end:/\)/,contains:[e.inherit(r,{className:"string"}),"self"]}]
+ },l=me,c=e.COMMENT("/\\*","\\*/",{contains:[e.C_BLOCK_COMMENT_MODE]}),d={
+ variants:[{className:"type",begin:e.UNDERSCORE_IDENT_RE},{begin:/\(/,end:/\)/,
+ contains:[]}]},g=d;return g.variants[1].contains=[d],d.variants[1].contains=[g],
+ {name:"Kotlin",aliases:["kt","kts"],keywords:n,
+ contains:[e.COMMENT("/\\*\\*","\\*/",{relevance:0,contains:[{className:"doctag",
+ begin:"@[A-Za-z]+"}]}),e.C_LINE_COMMENT_MODE,c,{className:"keyword",
+ begin:/\b(break|continue|return|this)\b/,starts:{contains:[{className:"symbol",
+ begin:/@\w+/}]}},t,s,o,{className:"function",beginKeywords:"fun",end:"[(]|$",
+ returnBegin:!0,excludeEnd:!0,keywords:n,relevance:5,contains:[{
+ begin:e.UNDERSCORE_IDENT_RE+"\\s*\\(",returnBegin:!0,relevance:0,
+ contains:[e.UNDERSCORE_TITLE_MODE]},{className:"type",begin:/,end:/>/,
+ keywords:"reified",relevance:0},{className:"params",begin:/\(/,end:/\)/,
+ endsParent:!0,keywords:n,relevance:0,contains:[{begin:/:/,end:/[=,\/]/,
+ endsWithParent:!0,contains:[d,e.C_LINE_COMMENT_MODE,c],relevance:0
+ },e.C_LINE_COMMENT_MODE,c,s,o,r,e.C_NUMBER_MODE]},c]},{
+ begin:[/class|interface|trait/,/\s+/,e.UNDERSCORE_IDENT_RE],beginScope:{
+ 3:"title.class"},keywords:"class interface trait",end:/[:\{(]|$/,excludeEnd:!0,
+ illegal:"extends implements",contains:[{
+ beginKeywords:"public protected internal private constructor"
+ },e.UNDERSCORE_TITLE_MODE,{className:"type",begin:/,end:/>/,excludeBegin:!0,
+ excludeEnd:!0,relevance:0},{className:"type",begin:/[,:]\s*/,end:/[<\(,){\s]|$/,
+ excludeBegin:!0,returnEnd:!0},s,o]},r,{className:"meta",begin:"^#!/usr/bin/env",
+ end:"$",illegal:"\n"},l]}},grmr_less:e=>{
+ const n=ie(e),t=de,a="[\\w-]+",i="("+a+"|@\\{"+a+"\\})",r=[],s=[],o=e=>({
+ className:"string",begin:"~?"+e+".*?"+e}),l=(e,n,t)=>({className:e,begin:n,
+ relevance:t}),c={$pattern:/[a-z-]+/,keyword:"and or not only",
+ attribute:se.join(" ")},d={begin:"\\(",end:"\\)",contains:s,keywords:c,
+ relevance:0}
+ ;s.push(e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,o("'"),o('"'),n.CSS_NUMBER_MODE,{
+ begin:"(url|data-uri)\\(",starts:{className:"string",end:"[\\)\\n]",
+ excludeEnd:!0}
+ },n.HEXCOLOR,d,l("variable","@@?"+a,10),l("variable","@\\{"+a+"\\}"),l("built_in","~?`[^`]*?`"),{
+ className:"attribute",begin:a+"\\s*:",end:":",returnBegin:!0,excludeEnd:!0
+ },n.IMPORTANT,{beginKeywords:"and not"},n.FUNCTION_DISPATCH);const g=s.concat({
+ begin:/\{/,end:/\}/,contains:r}),u={beginKeywords:"when",endsWithParent:!0,
+ contains:[{beginKeywords:"and not"}].concat(s)},b={begin:i+"\\s*:",
+ returnBegin:!0,end:/[;}]/,relevance:0,contains:[{begin:/-(webkit|moz|ms|o)-/
+ },n.CSS_VARIABLE,{className:"attribute",begin:"\\b("+ce.join("|")+")\\b",
+ end:/(?=:)/,starts:{endsWithParent:!0,illegal:"[<=$]",relevance:0,contains:s}}]
+ },m={className:"keyword",
+ begin:"@(import|media|charset|font-face|(-[a-z]+-)?keyframes|supports|document|namespace|page|viewport|host)\\b",
+ starts:{end:"[;{}]",keywords:c,returnEnd:!0,contains:s,relevance:0}},p={
+ className:"variable",variants:[{begin:"@"+a+"\\s*:",relevance:15},{begin:"@"+a
+ }],starts:{end:"[;}]",returnEnd:!0,contains:g}},_={variants:[{
+ begin:"[\\.#:&\\[>]",end:"[;{}]"},{begin:i,end:/\{/}],returnBegin:!0,
+ returnEnd:!0,illegal:"[<='$\"]",relevance:0,
+ contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,u,l("keyword","all\\b"),l("variable","@\\{"+a+"\\}"),{
+ begin:"\\b("+re.join("|")+")\\b",className:"selector-tag"
+ },n.CSS_NUMBER_MODE,l("selector-tag",i,0),l("selector-id","#"+i),l("selector-class","\\."+i,0),l("selector-tag","&",0),n.ATTRIBUTE_SELECTOR_MODE,{
+ className:"selector-pseudo",begin:":("+oe.join("|")+")"},{
+ className:"selector-pseudo",begin:":(:)?("+le.join("|")+")"},{begin:/\(/,
+ end:/\)/,relevance:0,contains:g},{begin:"!important"},n.FUNCTION_DISPATCH]},h={
+ begin:a+":(:)?"+`(${t.join("|")})`,returnBegin:!0,contains:[_]}
+ ;return r.push(e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,m,p,h,b,_,u,n.FUNCTION_DISPATCH),
+ {name:"Less",case_insensitive:!0,illegal:"[=>'/<($\"]",contains:r}},
+ grmr_lua:e=>{const n="\\[=*\\[",t="\\]=*\\]",a={begin:n,end:t,contains:["self"]
+ },i=[e.COMMENT("--(?!"+n+")","$"),e.COMMENT("--"+n,t,{contains:[a],relevance:10
+ })];return{name:"Lua",keywords:{$pattern:e.UNDERSCORE_IDENT_RE,
+ literal:"true false nil",
+ keyword:"and break do else elseif end for goto if in local not or repeat return then until while",
+ built_in:"_G _ENV _VERSION __index __newindex __mode __call __metatable __tostring __len __gc __add __sub __mul __div __mod __pow __concat __unm __eq __lt __le assert collectgarbage dofile error getfenv getmetatable ipairs load loadfile loadstring module next pairs pcall print rawequal rawget rawset require select setfenv setmetatable tonumber tostring type unpack xpcall arg self coroutine resume yield status wrap create running debug getupvalue debug sethook getmetatable gethook setmetatable setlocal traceback setfenv getinfo setupvalue getlocal getregistry getfenv io lines write close flush open output type read stderr stdin input stdout popen tmpfile math log max acos huge ldexp pi cos tanh pow deg tan cosh sinh random randomseed frexp ceil floor rad abs sqrt modf asin min mod fmod log10 atan2 exp sin atan os exit setlocale date getenv difftime remove time clock tmpname rename execute package preload loadlib loaded loaders cpath config path seeall string sub upper len gfind rep find match char dump gmatch reverse byte format gsub lower table setn insert getn foreachi maxn foreach concat sort remove"
+ },contains:i.concat([{className:"function",beginKeywords:"function",end:"\\)",
+ contains:[e.inherit(e.TITLE_MODE,{
+ begin:"([_a-zA-Z]\\w*\\.)*([_a-zA-Z]\\w*:)?[_a-zA-Z]\\w*"}),{className:"params",
+ begin:"\\(",endsWithParent:!0,contains:i}].concat(i)
+ },e.C_NUMBER_MODE,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,{className:"string",
+ begin:n,end:t,contains:[a],relevance:5}])}},grmr_makefile:e=>{const n={
+ className:"variable",variants:[{begin:"\\$\\("+e.UNDERSCORE_IDENT_RE+"\\)",
+ contains:[e.BACKSLASH_ESCAPE]},{begin:/\$[@%\^\+\*]/}]},t={className:"string",
+ begin:/"/,end:/"/,contains:[e.BACKSLASH_ESCAPE,n]},a={className:"variable",
+ begin:/\$\([\w-]+\s/,end:/\)/,keywords:{
+ built_in:"subst patsubst strip findstring filter filter-out sort word wordlist firstword lastword dir notdir suffix basename addsuffix addprefix join wildcard realpath abspath error warning shell origin flavor foreach if or and call eval file value"
+ },contains:[n]},i={begin:"^"+e.UNDERSCORE_IDENT_RE+"\\s*(?=[:+?]?=)"},r={
+ className:"section",begin:/^[^\s]+:/,end:/$/,contains:[n]};return{
+ name:"Makefile",aliases:["mk","mak","make"],keywords:{$pattern:/[\w-]+/,
+ keyword:"define endef undefine ifdef ifndef ifeq ifneq else endif include -include sinclude override export unexport private vpath"
+ },contains:[e.HASH_COMMENT_MODE,n,t,a,i,{className:"meta",begin:/^\.PHONY:/,
+ end:/$/,keywords:{$pattern:/[\.\w]+/,keyword:".PHONY"}},r]}},grmr_xml:e=>{
+ const n=e.regex,t=n.concat(/[\p{L}_]/u,n.optional(/[\p{L}0-9_.-]*:/u),/[\p{L}0-9_.-]*/u),a={
+ className:"symbol",begin:/&[a-z]+;|[0-9]+;|[a-f0-9]+;/},i={begin:/\s/,
+ contains:[{className:"keyword",begin:/#?[a-z_][a-z1-9_-]+/,illegal:/\n/}]
+ },r=e.inherit(i,{begin:/\(/,end:/\)/}),s=e.inherit(e.APOS_STRING_MODE,{
+ className:"string"}),o=e.inherit(e.QUOTE_STRING_MODE,{className:"string"}),l={
+ endsWithParent:!0,illegal:/,relevance:0,contains:[{className:"attr",
+ begin:/[\p{L}0-9._:-]+/u,relevance:0},{begin:/=\s*/,relevance:0,contains:[{
+ className:"string",endsParent:!0,variants:[{begin:/"/,end:/"/,contains:[a]},{
+ begin:/'/,end:/'/,contains:[a]},{begin:/[^\s"'=<>`]+/}]}]}]};return{
+ name:"HTML, XML",
+ aliases:["html","xhtml","rss","atom","xjb","xsd","xsl","plist","wsf","svg"],
+ case_insensitive:!0,unicodeRegex:!0,contains:[{className:"meta",begin://,relevance:10,contains:[i,o,s,r,{begin:/\[/,end:/\]/,contains:[{
+ className:"meta",begin://,contains:[i,r,o,s]}]}]
+ },e.COMMENT(//,{relevance:10}),{begin://,
+ relevance:10},a,{className:"meta",end:/\?>/,variants:[{begin:/<\?xml/,
+ relevance:10,contains:[o]},{begin:/<\?[a-z][a-z0-9]+/}]},{className:"tag",
+ begin:/
-
-
+
+
+
+
-
-
-
+
+
+
+
+
-
-
+
+
+
+
+
+
-