From 1fb8f83768b84bb29802a235ad7e621ea3a90a45 Mon Sep 17 00:00:00 2001 From: Li Guanglin <60415467+guanglinn@users.noreply.github.com> Date: Sun, 3 Dec 2023 21:51:06 +0800 Subject: [PATCH] Auto padding of code blocks (PR #2129) --- CONTRIBUTORS.md | 26 +++++----- .../markdown/MarkdownSyntaxHighlighter.java | 2 +- .../markdown/MarkdownTextConverter.java | 44 +++++++++-------- .../frontend/textview/HighlightingEditor.java | 6 +-- .../gsantner/markor/model/AppSettings.java | 2 +- .../res/drawable/ic_line_numbers_24dp.xml | 7 +-- app/src/main/res/raw/licenses_3rd_party.md | 4 +- app/thirdparty/assets/prism/Prism v1.29.0 | 0 .../prism/components/prism-batch.min.js | 1 + .../prism/components/prism-cmake.min.js | 1 + .../assets/prism/components/prism-css.min.js | 1 + .../assets/prism/components/prism-csv.min.js | 1 + .../assets/prism/components/prism-dart.min.js | 1 + .../prism/components/prism-elixir.min.js | 1 - .../prism/components/prism-fortran.min.js | 1 + .../prism/components/prism-groovy.min.js | 1 + .../prism/components/prism-haskell.min.js | 1 - .../prism/components/prism-liquid.min.js | 1 - .../prism/components/prism-makefile.min.js | 1 + .../prism/components/prism-markdown.min.js | 1 + .../prism/components/prism-matlab.min.js | 1 + .../prism/components/prism-pascal.min.js | 1 + .../assets/prism/components/prism-sql.min.js | 1 + .../prism/components/prism-visual-basic.js | 29 +++++++++++ .../prism/components/prism-xml-doc.min.js | 1 + .../assets/prism/components/prism-yaml.min.js | 1 + app/thirdparty/assets/prism/index.html | 24 --------- app/thirdparty/assets/prism/main.js | 7 +++ .../assets/prism/plugins/line-numbers/main.js | 41 ++++++++++++++++ .../line-numbers/prism-line-numbers.css | 40 --------------- .../prism/plugins/line-numbers/style.css | 28 +++++++++++ app/thirdparty/assets/prism/style.css | 11 +++++ app/thirdparty/assets/prism/version | 1 + .../LineNumbersAttributeProvider.java | 46 ------------------ .../ext/codeblocks/LineNumbersExtension.java | 29 ----------- doc/assets/2023-10-11-line-numbers.webp | Bin 14660 -> 57082 bytes 36 files changed, 179 insertions(+), 185 deletions(-) delete mode 100644 app/thirdparty/assets/prism/Prism v1.29.0 create mode 100644 app/thirdparty/assets/prism/components/prism-batch.min.js create mode 100644 app/thirdparty/assets/prism/components/prism-cmake.min.js create mode 100644 app/thirdparty/assets/prism/components/prism-css.min.js create mode 100644 app/thirdparty/assets/prism/components/prism-csv.min.js create mode 100644 app/thirdparty/assets/prism/components/prism-dart.min.js delete mode 100644 app/thirdparty/assets/prism/components/prism-elixir.min.js create mode 100644 app/thirdparty/assets/prism/components/prism-fortran.min.js create mode 100644 app/thirdparty/assets/prism/components/prism-groovy.min.js delete mode 100644 app/thirdparty/assets/prism/components/prism-haskell.min.js delete mode 100644 app/thirdparty/assets/prism/components/prism-liquid.min.js create mode 100644 app/thirdparty/assets/prism/components/prism-makefile.min.js create mode 100644 app/thirdparty/assets/prism/components/prism-markdown.min.js create mode 100644 app/thirdparty/assets/prism/components/prism-matlab.min.js create mode 100644 app/thirdparty/assets/prism/components/prism-pascal.min.js create mode 100644 app/thirdparty/assets/prism/components/prism-sql.min.js create mode 100644 app/thirdparty/assets/prism/components/prism-visual-basic.js create mode 100644 app/thirdparty/assets/prism/components/prism-xml-doc.min.js create mode 100644 app/thirdparty/assets/prism/components/prism-yaml.min.js delete mode 100644 app/thirdparty/assets/prism/index.html create mode 100644 app/thirdparty/assets/prism/main.js create mode 100644 app/thirdparty/assets/prism/plugins/line-numbers/main.js delete mode 100644 app/thirdparty/assets/prism/plugins/line-numbers/prism-line-numbers.css create mode 100644 app/thirdparty/assets/prism/plugins/line-numbers/style.css create mode 100644 app/thirdparty/assets/prism/style.css create mode 100644 app/thirdparty/assets/prism/version delete mode 100644 app/thirdparty/java/other/flexmark/ext/codeblocks/LineNumbersAttributeProvider.java delete mode 100644 app/thirdparty/java/other/flexmark/ext/codeblocks/LineNumbersExtension.java diff --git a/CONTRIBUTORS.md b/CONTRIBUTORS.md index deb31875f6..bfd07a5f0d 100644 --- a/CONTRIBUTORS.md +++ b/CONTRIBUTORS.md @@ -28,25 +28,25 @@ Where: * **[Dugite Code](https://github.com/dugite-code)**
~° Artwork * **[billchenchina](https://github.com/billchenchina)**
~° Simplified Chinese translation * **[Kanthi Subramanian](https://github.com/subkanthi)**
~° File Info Dialog -* **[Emanuele Petriglia](https://github.com/ema-pe)**
~° Italian translation +* **[Emanuele Petriglia](https://github.com/ema-pe)**
~° Italian translation * **[Tiago Danin](https://tiagodanin.github.io)**
~° Brazilian Portuguese translation * **[Jesica Chu](https://github.com/jesicachu)**
~° Spanish and Traiditonal Chinese translation * **[Ankush S Shetkar](https://www.linkedin.com/in/livelycoder/)**
~° Added Chrome custom tabs for urls * **[Lars Pontoppidan](https://github.com/larpon)**
~° Danish translation -* **[Amaya Lim](https://github.com/nightrainlily)**
~° Improve project description -* **[Jawkwon Im](https://github.com/jakeoneijk)**
~° Add keep screen on +* **[Amaya Lim](https://github.com/nightrainlily)**
~° Improved project description +* **[Jawkwon Im](https://github.com/jakeoneijk)**
~° Added keep screen on * **[Mark Goldman](https://github.com/goldmanm)**
~° Added sorting for todo.txt, improved wiki * **[natanelho](natanelho@gmail.com)**
~° Hebrew translation * **[Alexander Sachse](alexander.sachse@gmail.com)**
~° Added simple word counter * **[Kyle Phelps](kyle.phelps757@gmail.com)**
~° Added functionality to share multiple files from file browser * **[Vladislav Glinsky](https://github.com/cl0ne)**
~° Ukrainian/Russian translations -* **[David Hebbeker](https://david.hebbeker.info/)**
~° Added tooltips for text actions. -* **[Harshad Srinivasan](https://github.com/harshad1)**
~° Added functionality to handle leading spaces in lists. -* **[Niels](https://stackoverflow.com/users/432115/niels)**
~° Added encryption for textfile contents. -* **[Helguli](https://github.com/Helguli)**
~° Added fast scroll to editor. -* **[Patricia Heimfarth](https://github.com/PatriciaHeimfarth)**
~° Added checkbox for todo completion date -* **[Peter Schwede](https://github.com/pschwede)**
~° Added Zim-Wiki support. -* **[Frederic Jacob](https://github.com/fredericjacob)**
~° Added Zim-Wiki highlighting, text actions, view mode, page creation. -* **[Winston Feng](https://github.com/tifish)**
~° Support spaces in URL. -* **[k3b](https://github.com/k3b)**
~° Added CSV-Support. -* **[Ayowel](https://github.com/ayowel)**
~° Mermaid update. +* **[David Hebbeker](https://david.hebbeker.info/)**
~° Added tooltips for text actions +* **[Harshad Srinivasan](https://github.com/harshad1)**
~° Added functionality to handle leading spaces in lists +* **[Niels](https://stackoverflow.com/users/432115/niels)**
~° Added encryption for textfile contents +* **[Helguli](https://github.com/Helguli)**
~° Added fast scroll to editor +* **[Patricia Heimfarth](https://github.com/PatriciaHeimfarth)**
~° Added checkbox for todo completion date +* **[Peter Schwede](https://github.com/pschwede)**
~° Added Zim-Wiki support +* **[Frederic Jacob](https://github.com/fredericjacob)**
~° Added Zim-Wiki highlighting, text actions, view mode, page creation +* **[Winston Feng](https://github.com/tifish)**
~° Support spaces in URL +* **[k3b](https://github.com/k3b)**
~° Added CSV-Support +* **[Li Guanglin](https://github.com/guanglinn)**
~° Added line numbers support diff --git a/app/src/main/java/net/gsantner/markor/format/markdown/MarkdownSyntaxHighlighter.java b/app/src/main/java/net/gsantner/markor/format/markdown/MarkdownSyntaxHighlighter.java index 163b0531a8..2c547a4c35 100644 --- a/app/src/main/java/net/gsantner/markor/format/markdown/MarkdownSyntaxHighlighter.java +++ b/app/src/main/java/net/gsantner/markor/format/markdown/MarkdownSyntaxHighlighter.java @@ -37,7 +37,7 @@ public class MarkdownSyntaxHighlighter extends SyntaxHighlighterBase { private static final int MD_COLOR_LINK = 0xff1ea3fe; private static final int MD_COLOR_LIST = 0xffdaa521; private static final int MD_COLOR_QUOTE = 0xff88b04c; - private static final int MD_COLOR_CODEBLOCK = 0xff8c8c8c; + private static final int MD_COLOR_CODEBLOCK = 0x448c8c8c; public MarkdownSyntaxHighlighter(AppSettings as) { super(as); diff --git a/app/src/main/java/net/gsantner/markor/format/markdown/MarkdownTextConverter.java b/app/src/main/java/net/gsantner/markor/format/markdown/MarkdownTextConverter.java index ad3f50de2f..ecaff23170 100644 --- a/app/src/main/java/net/gsantner/markor/format/markdown/MarkdownTextConverter.java +++ b/app/src/main/java/net/gsantner/markor/format/markdown/MarkdownTextConverter.java @@ -52,7 +52,6 @@ import other.com.vladsch.flexmark.ext.katex.FlexmarkKatexExtension; import other.de.stanetz.jpencconverter.JavaPasswordbasedCryption; -import other.flexmark.ext.codeblocks.LineNumbersExtension; @SuppressWarnings({"unchecked", "WeakerAccess"}) public class MarkdownTextConverter extends TextConverterBase { @@ -83,7 +82,7 @@ public class MarkdownTextConverter extends TextConverterBase { //######################## //## Injected CSS / JS / HTML //######################## - public static final String CSS_BODY = CSS_S + "body{margin:0;padding:2.5vw}" + CSS_E; + public static final String CSS_BODY = CSS_S + "body{margin:0;padding:1.25vh 2.5vw}" + CSS_E; public static final String CSS_HEADER_UNDERLINE = CSS_S + " .header_no_underline { text-decoration: none; color: " + TOKEN_BW_INVERSE_OF_THEME + "; } h1 < a.header_no_underline { border-bottom: 2px solid #eaecef; } " + CSS_E; public static final String CSS_H1_H2_UNDERLINE = CSS_S + " h1,h2 { border-bottom: 2px solid " + TOKEN_BW_INVERSE_OF_THEME_HEADER_UNDERLINE + "; } " + CSS_E; public static final String CSS_BLOCKQUOTE_VERTICAL_LINE = CSS_S + "blockquote{padding:0px 14px;border-" + TOKEN_TEXT_DIRECTION + ":3.5px solid #dddddd;margin:4px 0}" + CSS_E; @@ -158,28 +157,22 @@ public class MarkdownTextConverter extends TextConverterBase { //######################## @Override - public String convertMarkup(String markup, Context context, boolean lightMode, boolean lineNum, File file) { + public String convertMarkup(String markup, Context context, boolean lightMode, boolean enableLineNumbers, File file) { String converted = "", onLoadJs = "", head = ""; - final MutableDataSet options = new MutableDataSet(); - if (lineNum) { - // Add code blocks Line numbers extension - final ArrayList extensions = new ArrayList<>(flexmarkExtensions); - extensions.add(LineNumbersExtension.create()); - options.set(Parser.EXTENSIONS, extensions); - } else { - options.set(Parser.EXTENSIONS, flexmarkExtensions); - } + options.set(Parser.EXTENSIONS, flexmarkExtensions); options.set(Parser.SPACE_IN_LINK_URLS, true); // allow links like [this](some filename with spaces.md) - //options.set(HtmlRenderer.SOFT_BREAK, "
\n"); // Add linefeed to html break + + // options.set(HtmlRenderer.SOFT_BREAK, "
\n"); // Add linefeed to HTML break + options.set(EmojiExtension.USE_IMAGE_TYPE, EmojiImageType.UNICODE_ONLY); // Use unicode (OS/browser images) // GitLab extension options.set(GitLabExtension.RENDER_BLOCK_MATH, false); - // gfm table parsing + // GFM table parsing options.set(TablesExtension.WITH_CAPTION, false) .set(TablesExtension.COLUMN_SPANS, true) .set(TablesExtension.MIN_HEADER_ROWS, 0) @@ -276,7 +269,7 @@ public String convertMarkup(String markup, Context context, boolean lightMode, b } // Enable View (block) code syntax highlighting - head += getViewHlPrismIncludes(GsContextUtils.instance.isDarkModeEnabled(context) ? "-tomorrow" : "", lineNum); + head += getViewHlPrismIncludes(GsContextUtils.instance.isDarkModeEnabled(context) ? "-tomorrow" : "", enableLineNumbers); // Jekyll: Replace {{ site.baseurl }} with ..--> usually used in Jekyll blog _posts folder which is one folder below repository root, for reference to e.g. pictures in assets folder markup = markup.replace("{{ site.baseurl }}", "..").replace(TOKEN_SITE_DATE_JEKYLL, TOKEN_POST_TODAY_DATE); @@ -323,6 +316,15 @@ public String convertMarkup(String markup, Context context, boolean lightMode, b } } + if (_appSettings.getDocumentWrapState(file.getAbsolutePath())) { + onLoadJs += "wrapCodeBlockWords();"; + } + + if (enableLineNumbers) { + // For Prism line numbers plugin + onLoadJs += "enableLineNumbers();adjustLineNumbers();"; + } + // Deliver result return putContentIntoTemplate(context, converted, lightMode, file, onLoadJs, head); } @@ -360,18 +362,22 @@ private String escapeSpacesInLink(final String markup) { } @SuppressWarnings({"StringConcatenationInsideStringBufferAppend"}) - private String getViewHlPrismIncludes(final String themeName, final boolean lineNum) { + private String getViewHlPrismIncludes(final String themeName, final boolean enableLineNumbers) { final StringBuilder sb = new StringBuilder(1000); sb.append(CSS_PREFIX + "prism/themes/prism" + themeName + ".min.css" + CSS_POSTFIX); + sb.append(CSS_PREFIX + "prism/style.css" + CSS_POSTFIX); sb.append(JS_PREFIX + "prism/prism.js" + JS_POSTFIX); sb.append(JS_PREFIX + "prism/plugins/autoloader/prism-autoloader.min.js" + JS_POSTFIX); + sb.append(JS_PREFIX + "prism/main.js" + JS_POSTFIX); - if (lineNum) { - sb.append(CSS_PREFIX + "prism/plugins/line-numbers/prism-line-numbers.css" + CSS_POSTFIX); + if (enableLineNumbers) { + sb.append(CSS_PREFIX + "prism/plugins/line-numbers/style.css" + CSS_POSTFIX); sb.append(JS_PREFIX + "prism/plugins/line-numbers/prism-line-numbers.min.js" + JS_POSTFIX); + sb.append(JS_PREFIX + "prism/plugins/line-numbers/main.js" + JS_POSTFIX); } + sb.append("\n"); - return sb.append("\n").toString(); + return sb.toString(); } @Override diff --git a/app/src/main/java/net/gsantner/markor/frontend/textview/HighlightingEditor.java b/app/src/main/java/net/gsantner/markor/frontend/textview/HighlightingEditor.java index 67020097c2..ae60ecbcf1 100644 --- a/app/src/main/java/net/gsantner/markor/frontend/textview/HighlightingEditor.java +++ b/app/src/main/java/net/gsantner/markor/frontend/textview/HighlightingEditor.java @@ -466,8 +466,8 @@ static class LineNumbersDrawer { private final Paint _paint = new Paint(); private final int _defaultPaddingLeft; - private static final int LINE_NUMBER_PADDING_LEFT = 12; - private static final int LINE_NUMBER_PADDING_RIGHT = 10; + private static final int LINE_NUMBER_PADDING_LEFT = 20; + private static final int LINE_NUMBER_PADDING_RIGHT = 12; private final Rect _visibleArea = new Rect(); private final Rect _lineNumbersArea = new Rect(); @@ -579,7 +579,7 @@ public void draw(final Canvas canvas) { if (isTextSizeChanged() || isMaxNumberDigitsChanged()) { _numberX = LINE_NUMBER_PADDING_LEFT + (int) _paint.measureText(String.valueOf(_maxNumber)); _gutterX = _numberX + LINE_NUMBER_PADDING_RIGHT; - _editor.setPadding(_gutterX + 10, _editor.getPaddingTop(), _editor.getPaddingRight(), _editor.getPaddingBottom()); + _editor.setPadding(_gutterX + 12, _editor.getPaddingTop(), _editor.getPaddingRight(), _editor.getPaddingBottom()); } int i = _startLine[0], number = _startLine[1]; diff --git a/app/src/main/java/net/gsantner/markor/model/AppSettings.java b/app/src/main/java/net/gsantner/markor/model/AppSettings.java index 39177190e4..63407e8abc 100644 --- a/app/src/main/java/net/gsantner/markor/model/AppSettings.java +++ b/app/src/main/java/net/gsantner/markor/model/AppSettings.java @@ -276,7 +276,7 @@ public boolean isFileBrowserFilterShowDotFiles() { } public boolean isShowSettingsOptionInMainToolbar() { - return true;//getBool(R.string.pref_key__show_settings_option_in_main_toolbar, true); + return false; // getBool(R.string.pref_key__show_settings_option_in_main_toolbar, true); } public boolean isHighlightingHexColorEnabled() { diff --git a/app/src/main/res/drawable/ic_line_numbers_24dp.xml b/app/src/main/res/drawable/ic_line_numbers_24dp.xml index 3df83d9afe..100f5f78b0 100644 --- a/app/src/main/res/drawable/ic_line_numbers_24dp.xml +++ b/app/src/main/res/drawable/ic_line_numbers_24dp.xml @@ -1,9 +1,10 @@ + android:viewportWidth="24" + android:viewportHeight="24"> + android:pathData="M9,17.938L21,17.938v2.375L9,20.313ZM9,10.813L21,10.813v2.375L9,13.188ZM9,3.688L21,3.688L21,6.063L9,6.063ZM5.4,2.5L5.4,7.25L4.2,7.25L4.2,3.687L3,3.687L3,2.5ZM4.2,12.26v0.928h2.4v1.188L3,14.376v-2.709L5.4,10.553L5.4,9.625L3,9.625L3,8.438h3.6v2.709zM6.6,15.563L6.6,21.5L3,21.5v-1.187h2.4v-1.188L3,19.125v-1.188L5.4,17.938L5.4,16.75L3,16.75v-1.188z" + android:strokeWidth="0.596867" /> diff --git a/app/src/main/res/raw/licenses_3rd_party.md b/app/src/main/res/raw/licenses_3rd_party.md index 1e0f560456..40d95f2b1e 100644 --- a/app/src/main/res/raw/licenses_3rd_party.md +++ b/app/src/main/res/raw/licenses_3rd_party.md @@ -17,11 +17,9 @@ * asciidoctor.js ~° Copyright asciidoctor.js authors -asciidoctor-skins +* asciidoctor-skins ~° Copyright asciidoctor-skins authors -* flexmark-ext-prism-linenumber -~° Copyright Tom Misawa `---------------` Permission is hereby granted, free of charge, to any person obtaining a copy diff --git a/app/thirdparty/assets/prism/Prism v1.29.0 b/app/thirdparty/assets/prism/Prism v1.29.0 deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/app/thirdparty/assets/prism/components/prism-batch.min.js b/app/thirdparty/assets/prism/components/prism-batch.min.js new file mode 100644 index 0000000000..886f10c7a2 --- /dev/null +++ b/app/thirdparty/assets/prism/components/prism-batch.min.js @@ -0,0 +1 @@ +!function(e){var r=/%%?[~:\w]+%?|!\S+!/,t={pattern:/\/[a-z?]+(?=[ :]|$):?|-[a-z]\b|--[a-z-]+\b/im,alias:"attr-name",inside:{punctuation:/:/}},n=/"(?:[\\"]"|[^"])*"(?!")/,i=/(?:\b|-)\d+\b/;e.languages.batch={comment:[/^::.*/m,{pattern:/((?:^|[&(])[ \t]*)rem\b(?:[^^&)\r\n]|\^(?:\r\n|[\s\S]))*/im,lookbehind:!0}],label:{pattern:/^:.*/m,alias:"property"},command:[{pattern:/((?:^|[&(])[ \t]*)for(?: \/[a-z?](?:[ :](?:"[^"]*"|[^\s"/]\S*))?)* \S+ in \([^)]+\) do/im,lookbehind:!0,inside:{keyword:/\b(?:do|in)\b|^for\b/i,string:n,parameter:t,variable:r,number:i,punctuation:/[()',]/}},{pattern:/((?:^|[&(])[ \t]*)if(?: \/[a-z?](?:[ :](?:"[^"]*"|[^\s"/]\S*))?)* (?:not )?(?:cmdextversion \d+|defined \w+|errorlevel \d+|exist \S+|(?:"[^"]*"|(?!")(?:(?!==)\S)+)?(?:==| (?:equ|geq|gtr|leq|lss|neq) )(?:"[^"]*"|[^\s"]\S*))/im,lookbehind:!0,inside:{keyword:/\b(?:cmdextversion|defined|errorlevel|exist|not)\b|^if\b/i,string:n,parameter:t,variable:r,number:i,operator:/\^|==|\b(?:equ|geq|gtr|leq|lss|neq)\b/i}},{pattern:/((?:^|[&()])[ \t]*)else\b/im,lookbehind:!0,inside:{keyword:/^else\b/i}},{pattern:/((?:^|[&(])[ \t]*)set(?: \/[a-z](?:[ :](?:"[^"]*"|[^\s"/]\S*))?)* (?:[^^&)\r\n]|\^(?:\r\n|[\s\S]))*/im,lookbehind:!0,inside:{keyword:/^set\b/i,string:n,parameter:t,variable:[r,/\w+(?=(?:[*\/%+\-&^|]|<<|>>)?=)/],number:i,operator:/[*\/%+\-&^|]=?|<<=?|>>=?|[!~_=]/,punctuation:/[()',]/}},{pattern:/((?:^|[&(])[ \t]*@?)\w+\b(?:"(?:[\\"]"|[^"])*"(?!")|[^"^&)\r\n]|\^(?:\r\n|[\s\S]))*/m,lookbehind:!0,inside:{keyword:/^\w+\b/,string:n,parameter:t,label:{pattern:/(^\s*):\S+/m,lookbehind:!0,alias:"property"},variable:r,number:i,operator:/\^/}}],operator:/[&@]/,punctuation:/[()']/}}(Prism); \ No newline at end of file diff --git a/app/thirdparty/assets/prism/components/prism-cmake.min.js b/app/thirdparty/assets/prism/components/prism-cmake.min.js new file mode 100644 index 0000000000..a223df57be --- /dev/null +++ b/app/thirdparty/assets/prism/components/prism-cmake.min.js @@ -0,0 +1 @@ +Prism.languages.cmake={comment:/#.*/,string:{pattern:/"(?:[^\\"]|\\.)*"/,greedy:!0,inside:{interpolation:{pattern:/\$\{(?:[^{}$]|\$\{[^{}$]*\})*\}/,inside:{punctuation:/\$\{|\}/,variable:/\w+/}}}},variable:/\b(?:CMAKE_\w+|\w+_(?:(?:BINARY|SOURCE)_DIR|DESCRIPTION|HOMEPAGE_URL|ROOT|VERSION(?:_MAJOR|_MINOR|_PATCH|_TWEAK)?)|(?:ANDROID|APPLE|BORLAND|BUILD_SHARED_LIBS|CACHE|CPACK_(?:ABSOLUTE_DESTINATION_FILES|COMPONENT_INCLUDE_TOPLEVEL_DIRECTORY|ERROR_ON_ABSOLUTE_INSTALL_DESTINATION|INCLUDE_TOPLEVEL_DIRECTORY|INSTALL_DEFAULT_DIRECTORY_PERMISSIONS|INSTALL_SCRIPT|PACKAGING_INSTALL_PREFIX|SET_DESTDIR|WARN_ON_ABSOLUTE_INSTALL_DESTINATION)|CTEST_(?:BINARY_DIRECTORY|BUILD_COMMAND|BUILD_NAME|BZR_COMMAND|BZR_UPDATE_OPTIONS|CHANGE_ID|CHECKOUT_COMMAND|CONFIGURATION_TYPE|CONFIGURE_COMMAND|COVERAGE_COMMAND|COVERAGE_EXTRA_FLAGS|CURL_OPTIONS|CUSTOM_(?:COVERAGE_EXCLUDE|ERROR_EXCEPTION|ERROR_MATCH|ERROR_POST_CONTEXT|ERROR_PRE_CONTEXT|MAXIMUM_FAILED_TEST_OUTPUT_SIZE|MAXIMUM_NUMBER_OF_(?:ERRORS|WARNINGS)|MAXIMUM_PASSED_TEST_OUTPUT_SIZE|MEMCHECK_IGNORE|POST_MEMCHECK|POST_TEST|PRE_MEMCHECK|PRE_TEST|TESTS_IGNORE|WARNING_EXCEPTION|WARNING_MATCH)|CVS_CHECKOUT|CVS_COMMAND|CVS_UPDATE_OPTIONS|DROP_LOCATION|DROP_METHOD|DROP_SITE|DROP_SITE_CDASH|DROP_SITE_PASSWORD|DROP_SITE_USER|EXTRA_COVERAGE_GLOB|GIT_COMMAND|GIT_INIT_SUBMODULES|GIT_UPDATE_CUSTOM|GIT_UPDATE_OPTIONS|HG_COMMAND|HG_UPDATE_OPTIONS|LABELS_FOR_SUBPROJECTS|MEMORYCHECK_(?:COMMAND|COMMAND_OPTIONS|SANITIZER_OPTIONS|SUPPRESSIONS_FILE|TYPE)|NIGHTLY_START_TIME|P4_CLIENT|P4_COMMAND|P4_OPTIONS|P4_UPDATE_OPTIONS|RUN_CURRENT_SCRIPT|SCP_COMMAND|SITE|SOURCE_DIRECTORY|SUBMIT_URL|SVN_COMMAND|SVN_OPTIONS|SVN_UPDATE_OPTIONS|TEST_LOAD|TEST_TIMEOUT|TRIGGER_SITE|UPDATE_COMMAND|UPDATE_OPTIONS|UPDATE_VERSION_ONLY|USE_LAUNCHERS)|CYGWIN|ENV|EXECUTABLE_OUTPUT_PATH|GHS-MULTI|IOS|LIBRARY_OUTPUT_PATH|MINGW|MSVC(?:10|11|12|14|60|70|71|80|90|_IDE|_TOOLSET_VERSION|_VERSION)?|MSYS|PROJECT_NAME|UNIX|WIN32|WINCE|WINDOWS_PHONE|WINDOWS_STORE|XCODE))\b/,property:/\b(?:cxx_\w+|(?:ARCHIVE_OUTPUT_(?:DIRECTORY|NAME)|COMPILE_DEFINITIONS|COMPILE_PDB_NAME|COMPILE_PDB_OUTPUT_DIRECTORY|EXCLUDE_FROM_DEFAULT_BUILD|IMPORTED_(?:IMPLIB|LIBNAME|LINK_DEPENDENT_LIBRARIES|LINK_INTERFACE_LANGUAGES|LINK_INTERFACE_LIBRARIES|LINK_INTERFACE_MULTIPLICITY|LOCATION|NO_SONAME|OBJECTS|SONAME)|INTERPROCEDURAL_OPTIMIZATION|LIBRARY_OUTPUT_DIRECTORY|LIBRARY_OUTPUT_NAME|LINK_FLAGS|LINK_INTERFACE_LIBRARIES|LINK_INTERFACE_MULTIPLICITY|LOCATION|MAP_IMPORTED_CONFIG|OSX_ARCHITECTURES|OUTPUT_NAME|PDB_NAME|PDB_OUTPUT_DIRECTORY|RUNTIME_OUTPUT_DIRECTORY|RUNTIME_OUTPUT_NAME|STATIC_LIBRARY_FLAGS|VS_CSHARP|VS_DOTNET_REFERENCEPROP|VS_DOTNET_REFERENCE|VS_GLOBAL_SECTION_POST|VS_GLOBAL_SECTION_PRE|VS_GLOBAL|XCODE_ATTRIBUTE)_\w+|\w+_(?:CLANG_TIDY|COMPILER_LAUNCHER|CPPCHECK|CPPLINT|INCLUDE_WHAT_YOU_USE|OUTPUT_NAME|POSTFIX|VISIBILITY_PRESET)|ABSTRACT|ADDITIONAL_MAKE_CLEAN_FILES|ADVANCED|ALIASED_TARGET|ALLOW_DUPLICATE_CUSTOM_TARGETS|ANDROID_(?:ANT_ADDITIONAL_OPTIONS|API|API_MIN|ARCH|ASSETS_DIRECTORIES|GUI|JAR_DEPENDENCIES|NATIVE_LIB_DEPENDENCIES|NATIVE_LIB_DIRECTORIES|PROCESS_MAX|PROGUARD|PROGUARD_CONFIG_PATH|SECURE_PROPS_PATH|SKIP_ANT_STEP|STL_TYPE)|ARCHIVE_OUTPUT_DIRECTORY|ATTACHED_FILES|ATTACHED_FILES_ON_FAIL|AUTOGEN_(?:BUILD_DIR|ORIGIN_DEPENDS|PARALLEL|SOURCE_GROUP|TARGETS_FOLDER|TARGET_DEPENDS)|AUTOMOC|AUTOMOC_(?:COMPILER_PREDEFINES|DEPEND_FILTERS|EXECUTABLE|MACRO_NAMES|MOC_OPTIONS|SOURCE_GROUP|TARGETS_FOLDER)|AUTORCC|AUTORCC_EXECUTABLE|AUTORCC_OPTIONS|AUTORCC_SOURCE_GROUP|AUTOUIC|AUTOUIC_EXECUTABLE|AUTOUIC_OPTIONS|AUTOUIC_SEARCH_PATHS|BINARY_DIR|BUILDSYSTEM_TARGETS|BUILD_RPATH|BUILD_RPATH_USE_ORIGIN|BUILD_WITH_INSTALL_NAME_DIR|BUILD_WITH_INSTALL_RPATH|BUNDLE|BUNDLE_EXTENSION|CACHE_VARIABLES|CLEAN_NO_CUSTOM|COMMON_LANGUAGE_RUNTIME|COMPATIBLE_INTERFACE_(?:BOOL|NUMBER_MAX|NUMBER_MIN|STRING)|COMPILE_(?:DEFINITIONS|FEATURES|FLAGS|OPTIONS|PDB_NAME|PDB_OUTPUT_DIRECTORY)|COST|CPACK_DESKTOP_SHORTCUTS|CPACK_NEVER_OVERWRITE|CPACK_PERMANENT|CPACK_STARTUP_SHORTCUTS|CPACK_START_MENU_SHORTCUTS|CPACK_WIX_ACL|CROSSCOMPILING_EMULATOR|CUDA_EXTENSIONS|CUDA_PTX_COMPILATION|CUDA_RESOLVE_DEVICE_SYMBOLS|CUDA_SEPARABLE_COMPILATION|CUDA_STANDARD|CUDA_STANDARD_REQUIRED|CXX_EXTENSIONS|CXX_STANDARD|CXX_STANDARD_REQUIRED|C_EXTENSIONS|C_STANDARD|C_STANDARD_REQUIRED|DEBUG_CONFIGURATIONS|DEFINE_SYMBOL|DEFINITIONS|DEPENDS|DEPLOYMENT_ADDITIONAL_FILES|DEPLOYMENT_REMOTE_DIRECTORY|DISABLED|DISABLED_FEATURES|ECLIPSE_EXTRA_CPROJECT_CONTENTS|ECLIPSE_EXTRA_NATURES|ENABLED_FEATURES|ENABLED_LANGUAGES|ENABLE_EXPORTS|ENVIRONMENT|EXCLUDE_FROM_ALL|EXCLUDE_FROM_DEFAULT_BUILD|EXPORT_NAME|EXPORT_PROPERTIES|EXTERNAL_OBJECT|EchoString|FAIL_REGULAR_EXPRESSION|FIND_LIBRARY_USE_LIB32_PATHS|FIND_LIBRARY_USE_LIB64_PATHS|FIND_LIBRARY_USE_LIBX32_PATHS|FIND_LIBRARY_USE_OPENBSD_VERSIONING|FIXTURES_CLEANUP|FIXTURES_REQUIRED|FIXTURES_SETUP|FOLDER|FRAMEWORK|Fortran_FORMAT|Fortran_MODULE_DIRECTORY|GENERATED|GENERATOR_FILE_NAME|GENERATOR_IS_MULTI_CONFIG|GHS_INTEGRITY_APP|GHS_NO_SOURCE_GROUP_FILE|GLOBAL_DEPENDS_DEBUG_MODE|GLOBAL_DEPENDS_NO_CYCLES|GNUtoMS|HAS_CXX|HEADER_FILE_ONLY|HELPSTRING|IMPLICIT_DEPENDS_INCLUDE_TRANSFORM|IMPORTED|IMPORTED_(?:COMMON_LANGUAGE_RUNTIME|CONFIGURATIONS|GLOBAL|IMPLIB|LIBNAME|LINK_DEPENDENT_LIBRARIES|LINK_INTERFACE_(?:LANGUAGES|LIBRARIES|MULTIPLICITY)|LOCATION|NO_SONAME|OBJECTS|SONAME)|IMPORT_PREFIX|IMPORT_SUFFIX|INCLUDE_DIRECTORIES|INCLUDE_REGULAR_EXPRESSION|INSTALL_NAME_DIR|INSTALL_RPATH|INSTALL_RPATH_USE_LINK_PATH|INTERFACE_(?:AUTOUIC_OPTIONS|COMPILE_DEFINITIONS|COMPILE_FEATURES|COMPILE_OPTIONS|INCLUDE_DIRECTORIES|LINK_DEPENDS|LINK_DIRECTORIES|LINK_LIBRARIES|LINK_OPTIONS|POSITION_INDEPENDENT_CODE|SOURCES|SYSTEM_INCLUDE_DIRECTORIES)|INTERPROCEDURAL_OPTIMIZATION|IN_TRY_COMPILE|IOS_INSTALL_COMBINED|JOB_POOLS|JOB_POOL_COMPILE|JOB_POOL_LINK|KEEP_EXTENSION|LABELS|LANGUAGE|LIBRARY_OUTPUT_DIRECTORY|LINKER_LANGUAGE|LINK_(?:DEPENDS|DEPENDS_NO_SHARED|DIRECTORIES|FLAGS|INTERFACE_LIBRARIES|INTERFACE_MULTIPLICITY|LIBRARIES|OPTIONS|SEARCH_END_STATIC|SEARCH_START_STATIC|WHAT_YOU_USE)|LISTFILE_STACK|LOCATION|MACOSX_BUNDLE|MACOSX_BUNDLE_INFO_PLIST|MACOSX_FRAMEWORK_INFO_PLIST|MACOSX_PACKAGE_LOCATION|MACOSX_RPATH|MACROS|MANUALLY_ADDED_DEPENDENCIES|MEASUREMENT|MODIFIED|NAME|NO_SONAME|NO_SYSTEM_FROM_IMPORTED|OBJECT_DEPENDS|OBJECT_OUTPUTS|OSX_ARCHITECTURES|OUTPUT_NAME|PACKAGES_FOUND|PACKAGES_NOT_FOUND|PARENT_DIRECTORY|PASS_REGULAR_EXPRESSION|PDB_NAME|PDB_OUTPUT_DIRECTORY|POSITION_INDEPENDENT_CODE|POST_INSTALL_SCRIPT|PREDEFINED_TARGETS_FOLDER|PREFIX|PRE_INSTALL_SCRIPT|PRIVATE_HEADER|PROCESSORS|PROCESSOR_AFFINITY|PROJECT_LABEL|PUBLIC_HEADER|REPORT_UNDEFINED_PROPERTIES|REQUIRED_FILES|RESOURCE|RESOURCE_LOCK|RULE_LAUNCH_COMPILE|RULE_LAUNCH_CUSTOM|RULE_LAUNCH_LINK|RULE_MESSAGES|RUNTIME_OUTPUT_DIRECTORY|RUN_SERIAL|SKIP_AUTOGEN|SKIP_AUTOMOC|SKIP_AUTORCC|SKIP_AUTOUIC|SKIP_BUILD_RPATH|SKIP_RETURN_CODE|SOURCES|SOURCE_DIR|SOVERSION|STATIC_LIBRARY_FLAGS|STATIC_LIBRARY_OPTIONS|STRINGS|SUBDIRECTORIES|SUFFIX|SYMBOLIC|TARGET_ARCHIVES_MAY_BE_SHARED_LIBS|TARGET_MESSAGES|TARGET_SUPPORTS_SHARED_LIBS|TESTS|TEST_INCLUDE_FILE|TEST_INCLUDE_FILES|TIMEOUT|TIMEOUT_AFTER_MATCH|TYPE|USE_FOLDERS|VALUE|VARIABLES|VERSION|VISIBILITY_INLINES_HIDDEN|VS_(?:CONFIGURATION_TYPE|COPY_TO_OUT_DIR|DEBUGGER_(?:COMMAND|COMMAND_ARGUMENTS|ENVIRONMENT|WORKING_DIRECTORY)|DEPLOYMENT_CONTENT|DEPLOYMENT_LOCATION|DOTNET_REFERENCES|DOTNET_REFERENCES_COPY_LOCAL|INCLUDE_IN_VSIX|IOT_STARTUP_TASK|KEYWORD|RESOURCE_GENERATOR|SCC_AUXPATH|SCC_LOCALPATH|SCC_PROJECTNAME|SCC_PROVIDER|SDK_REFERENCES|SHADER_(?:DISABLE_OPTIMIZATIONS|ENABLE_DEBUG|ENTRYPOINT|FLAGS|MODEL|OBJECT_FILE_NAME|OUTPUT_HEADER_FILE|TYPE|VARIABLE_NAME)|STARTUP_PROJECT|TOOL_OVERRIDE|USER_PROPS|WINRT_COMPONENT|WINRT_EXTENSIONS|WINRT_REFERENCES|XAML_TYPE)|WILL_FAIL|WIN32_EXECUTABLE|WINDOWS_EXPORT_ALL_SYMBOLS|WORKING_DIRECTORY|WRAP_EXCLUDE|XCODE_(?:EMIT_EFFECTIVE_PLATFORM_NAME|EXPLICIT_FILE_TYPE|FILE_ATTRIBUTES|LAST_KNOWN_FILE_TYPE|PRODUCT_TYPE|SCHEME_(?:ADDRESS_SANITIZER|ADDRESS_SANITIZER_USE_AFTER_RETURN|ARGUMENTS|DISABLE_MAIN_THREAD_CHECKER|DYNAMIC_LIBRARY_LOADS|DYNAMIC_LINKER_API_USAGE|ENVIRONMENT|EXECUTABLE|GUARD_MALLOC|MAIN_THREAD_CHECKER_STOP|MALLOC_GUARD_EDGES|MALLOC_SCRIBBLE|MALLOC_STACK|THREAD_SANITIZER(?:_STOP)?|UNDEFINED_BEHAVIOUR_SANITIZER(?:_STOP)?|ZOMBIE_OBJECTS))|XCTEST)\b/,keyword:/\b(?:add_compile_definitions|add_compile_options|add_custom_command|add_custom_target|add_definitions|add_dependencies|add_executable|add_library|add_link_options|add_subdirectory|add_test|aux_source_directory|break|build_command|build_name|cmake_host_system_information|cmake_minimum_required|cmake_parse_arguments|cmake_policy|configure_file|continue|create_test_sourcelist|ctest_build|ctest_configure|ctest_coverage|ctest_empty_binary_directory|ctest_memcheck|ctest_read_custom_files|ctest_run_script|ctest_sleep|ctest_start|ctest_submit|ctest_test|ctest_update|ctest_upload|define_property|else|elseif|enable_language|enable_testing|endforeach|endfunction|endif|endmacro|endwhile|exec_program|execute_process|export|export_library_dependencies|file|find_file|find_library|find_package|find_path|find_program|fltk_wrap_ui|foreach|function|get_cmake_property|get_directory_property|get_filename_component|get_property|get_source_file_property|get_target_property|get_test_property|if|include|include_directories|include_external_msproject|include_guard|include_regular_expression|install|install_files|install_programs|install_targets|link_directories|link_libraries|list|load_cache|load_command|macro|make_directory|mark_as_advanced|math|message|option|output_required_files|project|qt_wrap_cpp|qt_wrap_ui|remove|remove_definitions|return|separate_arguments|set|set_directory_properties|set_property|set_source_files_properties|set_target_properties|set_tests_properties|site_name|source_group|string|subdir_depends|subdirs|target_compile_definitions|target_compile_features|target_compile_options|target_include_directories|target_link_directories|target_link_libraries|target_link_options|target_sources|try_compile|try_run|unset|use_mangled_mesa|utility_source|variable_requires|variable_watch|while|write_file)(?=\s*\()\b/,boolean:/\b(?:FALSE|OFF|ON|TRUE)\b/,namespace:/\b(?:INTERFACE|PRIVATE|PROPERTIES|PUBLIC|SHARED|STATIC|TARGET_OBJECTS)\b/,operator:/\b(?:AND|DEFINED|EQUAL|GREATER|LESS|MATCHES|NOT|OR|STREQUAL|STRGREATER|STRLESS|VERSION_EQUAL|VERSION_GREATER|VERSION_LESS)\b/,inserted:{pattern:/\b\w+::\w+\b/,alias:"class-name"},number:/\b\d+(?:\.\d+)*\b/,function:/\b[a-z_]\w*(?=\s*\()\b/i,punctuation:/[()>}]|\$[<{]/}; \ No newline at end of file diff --git a/app/thirdparty/assets/prism/components/prism-css.min.js b/app/thirdparty/assets/prism/components/prism-css.min.js new file mode 100644 index 0000000000..3a9b628ebe --- /dev/null +++ b/app/thirdparty/assets/prism/components/prism-css.min.js @@ -0,0 +1 @@ +!function(s){var e=/(?:"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n])*')/;s.languages.css={comment:/\/\*[\s\S]*?\*\//,atrule:{pattern:RegExp("@[\\w-](?:[^;{\\s\"']|\\s+(?!\\s)|"+e.source+")*?(?:;|(?=\\s*\\{))"),inside:{rule:/^@[\w-]+/,"selector-function-argument":{pattern:/(\bselector\s*\(\s*(?![\s)]))(?:[^()\s]|\s+(?![\s)])|\((?:[^()]|\([^()]*\))*\))+(?=\s*\))/,lookbehind:!0,alias:"selector"},keyword:{pattern:/(^|[^\w-])(?:and|not|only|or)(?![\w-])/,lookbehind:!0}}},url:{pattern:RegExp("\\burl\\((?:"+e.source+"|(?:[^\\\\\r\n()\"']|\\\\[^])*)\\)","i"),greedy:!0,inside:{function:/^url/i,punctuation:/^\(|\)$/,string:{pattern:RegExp("^"+e.source+"$"),alias:"url"}}},selector:{pattern:RegExp("(^|[{}\\s])[^{}\\s](?:[^{};\"'\\s]|\\s+(?![\\s{])|"+e.source+")*(?=\\s*\\{)"),lookbehind:!0},string:{pattern:e,greedy:!0},property:{pattern:/(^|[^-\w\xA0-\uFFFF])(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*(?=\s*:)/i,lookbehind:!0},important:/!important\b/i,function:{pattern:/(^|[^-a-z0-9])[-a-z0-9]+(?=\()/i,lookbehind:!0},punctuation:/[(){};:,]/},s.languages.css.atrule.inside.rest=s.languages.css;var t=s.languages.markup;t&&(t.tag.addInlined("style","css"),t.tag.addAttribute("style","css"))}(Prism); \ No newline at end of file diff --git a/app/thirdparty/assets/prism/components/prism-csv.min.js b/app/thirdparty/assets/prism/components/prism-csv.min.js new file mode 100644 index 0000000000..259e1da569 --- /dev/null +++ b/app/thirdparty/assets/prism/components/prism-csv.min.js @@ -0,0 +1 @@ +Prism.languages.csv={value:/[^\r\n,"]+|"(?:[^"]|"")*"(?!")/,punctuation:/,/}; \ No newline at end of file diff --git a/app/thirdparty/assets/prism/components/prism-dart.min.js b/app/thirdparty/assets/prism/components/prism-dart.min.js new file mode 100644 index 0000000000..e16ca211d0 --- /dev/null +++ b/app/thirdparty/assets/prism/components/prism-dart.min.js @@ -0,0 +1 @@ +!function(e){var a=[/\b(?:async|sync|yield)\*/,/\b(?:abstract|assert|async|await|break|case|catch|class|const|continue|covariant|default|deferred|do|dynamic|else|enum|export|extends|extension|external|factory|final|finally|for|get|hide|if|implements|import|in|interface|library|mixin|new|null|on|operator|part|rethrow|return|set|show|static|super|switch|sync|this|throw|try|typedef|var|void|while|with|yield)\b/],n="(^|[^\\w.])(?:[a-z]\\w*\\s*\\.\\s*)*(?:[A-Z]\\w*\\s*\\.\\s*)*",s={pattern:RegExp(n+"[A-Z](?:[\\d_A-Z]*[a-z]\\w*)?\\b"),lookbehind:!0,inside:{namespace:{pattern:/^[a-z]\w*(?:\s*\.\s*[a-z]\w*)*(?:\s*\.)?/,inside:{punctuation:/\./}}}};e.languages.dart=e.languages.extend("clike",{"class-name":[s,{pattern:RegExp(n+"[A-Z]\\w*(?=\\s+\\w+\\s*[;,=()])"),lookbehind:!0,inside:s.inside}],keyword:a,operator:/\bis!|\b(?:as|is)\b|\+\+|--|&&|\|\||<<=?|>>=?|~(?:\/=?)?|[+\-*\/%&^|=!<>]=?|\?/}),e.languages.insertBefore("dart","string",{"string-literal":{pattern:/r?(?:("""|''')[\s\S]*?\1|(["'])(?:\\.|(?!\2)[^\\\r\n])*\2(?!\2))/,greedy:!0,inside:{interpolation:{pattern:/((?:^|[^\\])(?:\\{2})*)\$(?:\w+|\{(?:[^{}]|\{[^{}]*\})*\})/,lookbehind:!0,inside:{punctuation:/^\$\{?|\}$/,expression:{pattern:/[\s\S]+/,inside:e.languages.dart}}},string:/[\s\S]+/}},string:void 0}),e.languages.insertBefore("dart","class-name",{metadata:{pattern:/@\w+/,alias:"function"}}),e.languages.insertBefore("dart","class-name",{generics:{pattern:/<(?:[\w\s,.&?]|<(?:[\w\s,.&?]|<(?:[\w\s,.&?]|<[\w\s,.&?]*>)*>)*>)*>/,inside:{"class-name":s,keyword:a,punctuation:/[<>(),.:]/,operator:/[?&|]/}}})}(Prism); \ No newline at end of file diff --git a/app/thirdparty/assets/prism/components/prism-elixir.min.js b/app/thirdparty/assets/prism/components/prism-elixir.min.js deleted file mode 100644 index e885b9f134..0000000000 --- a/app/thirdparty/assets/prism/components/prism-elixir.min.js +++ /dev/null @@ -1 +0,0 @@ -Prism.languages.elixir={doc:{pattern:/@(?:doc|moduledoc)\s+(?:("""|''')[\s\S]*?\1|("|')(?:\\(?:\r\n|[\s\S])|(?!\2)[^\\\r\n])*\2)/,inside:{attribute:/^@\w+/,string:/['"][\s\S]+/}},comment:{pattern:/#.*/,greedy:!0},regex:{pattern:/~[rR](?:("""|''')(?:\\[\s\S]|(?!\1)[^\\])+\1|([\/|"'])(?:\\.|(?!\2)[^\\\r\n])+\2|\((?:\\.|[^\\)\r\n])+\)|\[(?:\\.|[^\\\]\r\n])+\]|\{(?:\\.|[^\\}\r\n])+\}|<(?:\\.|[^\\>\r\n])+>)[uismxfr]*/,greedy:!0},string:[{pattern:/~[cCsSwW](?:("""|''')(?:\\[\s\S]|(?!\1)[^\\])+\1|([\/|"'])(?:\\.|(?!\2)[^\\\r\n])+\2|\((?:\\.|[^\\)\r\n])+\)|\[(?:\\.|[^\\\]\r\n])+\]|\{(?:\\.|#\{[^}]+\}|#(?!\{)|[^#\\}\r\n])+\}|<(?:\\.|[^\\>\r\n])+>)[csa]?/,greedy:!0,inside:{}},{pattern:/("""|''')[\s\S]*?\1/,greedy:!0,inside:{}},{pattern:/("|')(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0,inside:{}}],atom:{pattern:/(^|[^:]):\w+/,lookbehind:!0,alias:"symbol"},module:{pattern:/\b[A-Z]\w*\b/,alias:"class-name"},"attr-name":/\b\w+\??:(?!:)/,argument:{pattern:/(^|[^&])&\d+/,lookbehind:!0,alias:"variable"},attribute:{pattern:/@\w+/,alias:"variable"},function:/\b[_a-zA-Z]\w*[?!]?(?:(?=\s*(?:\.\s*)?\()|(?=\/\d))/,number:/\b(?:0[box][a-f\d_]+|\d[\d_]*)(?:\.[\d_]+)?(?:e[+-]?[\d_]+)?\b/i,keyword:/\b(?:after|alias|and|case|catch|cond|def(?:callback|delegate|exception|impl|macro|module|n|np|p|protocol|struct)?|do|else|end|fn|for|if|import|not|or|quote|raise|require|rescue|try|unless|unquote|use|when)\b/,boolean:/\b(?:false|nil|true)\b/,operator:[/\bin\b|&&?|\|[|>]?|\\\\|::|\.\.\.?|\+\+?|-[->]?|<[-=>]|>=|!==?|\B!|=(?:==?|[>~])?|[*\/^]/,{pattern:/([^<])<(?!<)/,lookbehind:!0},{pattern:/([^>])>(?!>)/,lookbehind:!0}],punctuation:/<<|>>|[.,%\[\]{}()]/},Prism.languages.elixir.string.forEach((function(e){e.inside={interpolation:{pattern:/#\{[^}]+\}/,inside:{delimiter:{pattern:/^#\{|\}$/,alias:"punctuation"},rest:Prism.languages.elixir}}}})); \ No newline at end of file diff --git a/app/thirdparty/assets/prism/components/prism-fortran.min.js b/app/thirdparty/assets/prism/components/prism-fortran.min.js new file mode 100644 index 0000000000..f817c769c9 --- /dev/null +++ b/app/thirdparty/assets/prism/components/prism-fortran.min.js @@ -0,0 +1 @@ +Prism.languages.fortran={"quoted-number":{pattern:/[BOZ](['"])[A-F0-9]+\1/i,alias:"number"},string:{pattern:/(?:\b\w+_)?(['"])(?:\1\1|&(?:\r\n?|\n)(?:[ \t]*!.*(?:\r\n?|\n)|(?![ \t]*!))|(?!\1).)*(?:\1|&)/,inside:{comment:{pattern:/(&(?:\r\n?|\n)\s*)!.*/,lookbehind:!0}}},comment:{pattern:/!.*/,greedy:!0},boolean:/\.(?:FALSE|TRUE)\.(?:_\w+)?/i,number:/(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[ED][+-]?\d+)?(?:_\w+)?/i,keyword:[/\b(?:CHARACTER|COMPLEX|DOUBLE ?PRECISION|INTEGER|LOGICAL|REAL)\b/i,/\b(?:END ?)?(?:BLOCK ?DATA|DO|FILE|FORALL|FUNCTION|IF|INTERFACE|MODULE(?! PROCEDURE)|PROGRAM|SELECT|SUBROUTINE|TYPE|WHERE)\b/i,/\b(?:ALLOCATABLE|ALLOCATE|BACKSPACE|CALL|CASE|CLOSE|COMMON|CONTAINS|CONTINUE|CYCLE|DATA|DEALLOCATE|DIMENSION|DO|END|EQUIVALENCE|EXIT|EXTERNAL|FORMAT|GO ?TO|IMPLICIT(?: NONE)?|INQUIRE|INTENT|INTRINSIC|MODULE PROCEDURE|NAMELIST|NULLIFY|OPEN|OPTIONAL|PARAMETER|POINTER|PRINT|PRIVATE|PUBLIC|READ|RETURN|REWIND|SAVE|SELECT|STOP|TARGET|WHILE|WRITE)\b/i,/\b(?:ASSIGNMENT|DEFAULT|ELEMENTAL|ELSE|ELSEIF|ELSEWHERE|ENTRY|IN|INCLUDE|INOUT|KIND|NULL|ONLY|OPERATOR|OUT|PURE|RECURSIVE|RESULT|SEQUENCE|STAT|THEN|USE)\b/i],operator:[/\*\*|\/\/|=>|[=\/]=|[<>]=?|::|[+\-*=%]|\.[A-Z]+\./i,{pattern:/(^|(?!\().)\/(?!\))/,lookbehind:!0}],punctuation:/\(\/|\/\)|[(),;:&]/}; \ No newline at end of file diff --git a/app/thirdparty/assets/prism/components/prism-groovy.min.js b/app/thirdparty/assets/prism/components/prism-groovy.min.js new file mode 100644 index 0000000000..2242f9f61c --- /dev/null +++ b/app/thirdparty/assets/prism/components/prism-groovy.min.js @@ -0,0 +1 @@ +!function(e){var n={pattern:/((?:^|[^\\$])(?:\\{2})*)\$(?:\w+|\{[^{}]*\})/,lookbehind:!0,inside:{"interpolation-punctuation":{pattern:/^\$\{?|\}$/,alias:"punctuation"},expression:{pattern:/[\s\S]+/,inside:null}}};e.languages.groovy=e.languages.extend("clike",{string:{pattern:/'''(?:[^\\]|\\[\s\S])*?'''|'(?:\\.|[^\\'\r\n])*'/,greedy:!0},keyword:/\b(?:abstract|as|assert|boolean|break|byte|case|catch|char|class|const|continue|def|default|do|double|else|enum|extends|final|finally|float|for|goto|if|implements|import|in|instanceof|int|interface|long|native|new|package|private|protected|public|return|short|static|strictfp|super|switch|synchronized|this|throw|throws|trait|transient|try|void|volatile|while)\b/,number:/\b(?:0b[01_]+|0x[\da-f_]+(?:\.[\da-f_p\-]+)?|[\d_]+(?:\.[\d_]+)?(?:e[+-]?\d+)?)[glidf]?\b/i,operator:{pattern:/(^|[^.])(?:~|==?~?|\?[.:]?|\*(?:[.=]|\*=?)?|\.[@&]|\.\.<|\.\.(?!\.)|-[-=>]?|\+[+=]?|!=?|<(?:<=?|=>?)?|>(?:>>?=?|=)?|&[&=]?|\|[|=]?|\/=?|\^=?|%=?)/,lookbehind:!0},punctuation:/\.+|[{}[\];(),:$]/}),e.languages.insertBefore("groovy","string",{shebang:{pattern:/#!.+/,alias:"comment",greedy:!0},"interpolation-string":{pattern:/"""(?:[^\\]|\\[\s\S])*?"""|(["/])(?:\\.|(?!\1)[^\\\r\n])*\1|\$\/(?:[^/$]|\$(?:[/$]|(?![/$]))|\/(?!\$))*\/\$/,greedy:!0,inside:{interpolation:n,string:/[\s\S]+/}}}),e.languages.insertBefore("groovy","punctuation",{"spock-block":/\b(?:and|cleanup|expect|given|setup|then|when|where):/}),e.languages.insertBefore("groovy","function",{annotation:{pattern:/(^|[^.])@\w+/,lookbehind:!0,alias:"punctuation"}}),n.inside.expression.inside=e.languages.groovy}(Prism); \ No newline at end of file diff --git a/app/thirdparty/assets/prism/components/prism-haskell.min.js b/app/thirdparty/assets/prism/components/prism-haskell.min.js deleted file mode 100644 index 4753b0d27e..0000000000 --- a/app/thirdparty/assets/prism/components/prism-haskell.min.js +++ /dev/null @@ -1 +0,0 @@ -Prism.languages.haskell={comment:{pattern:/(^|[^-!#$%*+=?&@|~.:<>^\\\/])(?:--(?:(?=.)[^-!#$%*+=?&@|~.:<>^\\\/].*|$)|\{-[\s\S]*?-\})/m,lookbehind:!0},char:{pattern:/'(?:[^\\']|\\(?:[abfnrtv\\"'&]|\^[A-Z@[\]^_]|ACK|BEL|BS|CAN|CR|DC1|DC2|DC3|DC4|DEL|DLE|EM|ENQ|EOT|ESC|ETB|ETX|FF|FS|GS|HT|LF|NAK|NUL|RS|SI|SO|SOH|SP|STX|SUB|SYN|US|VT|\d+|o[0-7]+|x[0-9a-fA-F]+))'/,alias:"string"},string:{pattern:/"(?:[^\\"]|\\(?:\S|\s+\\))*"/,greedy:!0},keyword:/\b(?:case|class|data|deriving|do|else|if|in|infixl|infixr|instance|let|module|newtype|of|primitive|then|type|where)\b/,"import-statement":{pattern:/(^[\t ]*)import\s+(?:qualified\s+)?(?:[A-Z][\w']*)(?:\.[A-Z][\w']*)*(?:\s+as\s+(?:[A-Z][\w']*)(?:\.[A-Z][\w']*)*)?(?:\s+hiding\b)?/m,lookbehind:!0,inside:{keyword:/\b(?:as|hiding|import|qualified)\b/,punctuation:/\./}},builtin:/\b(?:abs|acos|acosh|all|and|any|appendFile|approxRational|asTypeOf|asin|asinh|atan|atan2|atanh|basicIORun|break|catch|ceiling|chr|compare|concat|concatMap|const|cos|cosh|curry|cycle|decodeFloat|denominator|digitToInt|div|divMod|drop|dropWhile|either|elem|encodeFloat|enumFrom|enumFromThen|enumFromThenTo|enumFromTo|error|even|exp|exponent|fail|filter|flip|floatDigits|floatRadix|floatRange|floor|fmap|foldl|foldl1|foldr|foldr1|fromDouble|fromEnum|fromInt|fromInteger|fromIntegral|fromRational|fst|gcd|getChar|getContents|getLine|group|head|id|inRange|index|init|intToDigit|interact|ioError|isAlpha|isAlphaNum|isAscii|isControl|isDenormalized|isDigit|isHexDigit|isIEEE|isInfinite|isLower|isNaN|isNegativeZero|isOctDigit|isPrint|isSpace|isUpper|iterate|last|lcm|length|lex|lexDigits|lexLitChar|lines|log|logBase|lookup|map|mapM|mapM_|max|maxBound|maximum|maybe|min|minBound|minimum|mod|negate|not|notElem|null|numerator|odd|or|ord|otherwise|pack|pi|pred|primExitWith|print|product|properFraction|putChar|putStr|putStrLn|quot|quotRem|range|rangeSize|read|readDec|readFile|readFloat|readHex|readIO|readInt|readList|readLitChar|readLn|readOct|readParen|readSigned|reads|readsPrec|realToFrac|recip|rem|repeat|replicate|return|reverse|round|scaleFloat|scanl|scanl1|scanr|scanr1|seq|sequence|sequence_|show|showChar|showInt|showList|showLitChar|showParen|showSigned|showString|shows|showsPrec|significand|signum|sin|sinh|snd|sort|span|splitAt|sqrt|subtract|succ|sum|tail|take|takeWhile|tan|tanh|threadToIOResult|toEnum|toInt|toInteger|toLower|toRational|toUpper|truncate|uncurry|undefined|unlines|until|unwords|unzip|unzip3|userError|words|writeFile|zip|zip3|zipWith|zipWith3)\b/,number:/\b(?:\d+(?:\.\d+)?(?:e[+-]?\d+)?|0o[0-7]+|0x[0-9a-f]+)\b/i,operator:[{pattern:/`(?:[A-Z][\w']*\.)*[_a-z][\w']*`/,greedy:!0},{pattern:/(\s)\.(?=\s)/,lookbehind:!0},/[-!#$%*+=?&@|~:<>^\\\/][-!#$%*+=?&@|~.:<>^\\\/]*|\.[-!#$%*+=?&@|~.:<>^\\\/]+/],hvariable:{pattern:/\b(?:[A-Z][\w']*\.)*[_a-z][\w']*/,inside:{punctuation:/\./}},constant:{pattern:/\b(?:[A-Z][\w']*\.)*[A-Z][\w']*/,inside:{punctuation:/\./}},punctuation:/[{}[\];(),.:]/},Prism.languages.hs=Prism.languages.haskell; \ No newline at end of file diff --git a/app/thirdparty/assets/prism/components/prism-liquid.min.js b/app/thirdparty/assets/prism/components/prism-liquid.min.js deleted file mode 100644 index 9829caedf7..0000000000 --- a/app/thirdparty/assets/prism/components/prism-liquid.min.js +++ /dev/null @@ -1 +0,0 @@ -Prism.languages.liquid={comment:{pattern:/(^\{%\s*comment\s*%\})[\s\S]+(?=\{%\s*endcomment\s*%\}$)/,lookbehind:!0},delimiter:{pattern:/^\{(?:\{\{|[%\{])-?|-?(?:\}\}|[%\}])\}$/,alias:"punctuation"},string:{pattern:/"[^"]*"|'[^']*'/,greedy:!0},keyword:/\b(?:as|assign|break|(?:end)?(?:capture|case|comment|for|form|if|paginate|raw|style|tablerow|unless)|continue|cycle|decrement|echo|else|elsif|in|include|increment|limit|liquid|offset|range|render|reversed|section|when|with)\b/,object:/\b(?:address|all_country_option_tags|article|block|blog|cart|checkout|collection|color|country|country_option_tags|currency|current_page|current_tags|customer|customer_address|date|discount_allocation|discount_application|external_video|filter|filter_value|font|forloop|fulfillment|generic_file|gift_card|group|handle|image|line_item|link|linklist|localization|location|measurement|media|metafield|model|model_source|order|page|page_description|page_image|page_title|part|policy|product|product_option|recommendations|request|robots|routes|rule|script|search|selling_plan|selling_plan_allocation|selling_plan_group|shipping_method|shop|shop_locale|sitemap|store_availability|tax_line|template|theme|transaction|unit_price_measurement|user_agent|variant|video|video_source)\b/,function:[{pattern:/(\|\s*)\w+/,lookbehind:!0,alias:"filter"},{pattern:/(\.\s*)(?:first|last|size)/,lookbehind:!0}],boolean:/\b(?:false|nil|true)\b/,range:{pattern:/\.\./,alias:"operator"},number:/\b\d+(?:\.\d+)?\b/,operator:/[!=]=|<>|[<>]=?|[|?:=-]|\b(?:and|contains(?=\s)|or)\b/,punctuation:/[.,\[\]()]/,empty:{pattern:/\bempty\b/,alias:"keyword"}},Prism.hooks.add("before-tokenize",(function(e){var t=!1;Prism.languages["markup-templating"].buildPlaceholders(e,"liquid",/\{%\s*comment\s*%\}[\s\S]*?\{%\s*endcomment\s*%\}|\{(?:%[\s\S]*?%|\{\{[\s\S]*?\}\}|\{[\s\S]*?\})\}/g,(function(e){var n=/^\{%-?\s*(\w+)/.exec(e);if(n){var i=n[1];if("raw"===i&&!t)return t=!0,!0;if("endraw"===i)return t=!1,!0}return!t}))})),Prism.hooks.add("after-tokenize",(function(e){Prism.languages["markup-templating"].tokenizePlaceholders(e,"liquid")})); \ No newline at end of file diff --git a/app/thirdparty/assets/prism/components/prism-makefile.min.js b/app/thirdparty/assets/prism/components/prism-makefile.min.js new file mode 100644 index 0000000000..43f317782f --- /dev/null +++ b/app/thirdparty/assets/prism/components/prism-makefile.min.js @@ -0,0 +1 @@ +Prism.languages.makefile={comment:{pattern:/(^|[^\\])#(?:\\(?:\r\n|[\s\S])|[^\\\r\n])*/,lookbehind:!0},string:{pattern:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},"builtin-target":{pattern:/\.[A-Z][^:#=\s]+(?=\s*:(?!=))/,alias:"builtin"},target:{pattern:/^(?:[^:=\s]|[ \t]+(?![\s:]))+(?=\s*:(?!=))/m,alias:"symbol",inside:{variable:/\$+(?:(?!\$)[^(){}:#=\s]+|(?=[({]))/}},variable:/\$+(?:(?!\$)[^(){}:#=\s]+|\([@*%<^+?][DF]\)|(?=[({]))/,keyword:/-include\b|\b(?:define|else|endef|endif|export|ifn?def|ifn?eq|include|override|private|sinclude|undefine|unexport|vpath)\b/,function:{pattern:/(\()(?:abspath|addsuffix|and|basename|call|dir|error|eval|file|filter(?:-out)?|findstring|firstword|flavor|foreach|guile|if|info|join|lastword|load|notdir|or|origin|patsubst|realpath|shell|sort|strip|subst|suffix|value|warning|wildcard|word(?:list|s)?)(?=[ \t])/,lookbehind:!0},operator:/(?:::|[?:+!])?=|[|@]/,punctuation:/[:;(){}]/}; \ No newline at end of file diff --git a/app/thirdparty/assets/prism/components/prism-markdown.min.js b/app/thirdparty/assets/prism/components/prism-markdown.min.js new file mode 100644 index 0000000000..2b16ba515f --- /dev/null +++ b/app/thirdparty/assets/prism/components/prism-markdown.min.js @@ -0,0 +1 @@ +!function(n){function e(n){return n=n.replace(//g,(function(){return"(?:\\\\.|[^\\\\\n\r]|(?:\n|\r\n?)(?![\r\n]))"})),RegExp("((?:^|[^\\\\])(?:\\\\{2})*)(?:"+n+")")}var t="(?:\\\\.|``(?:[^`\r\n]|`(?!`))+``|`[^`\r\n]+`|[^\\\\|\r\n`])+",a="\\|?__(?:\\|__)+\\|?(?:(?:\n|\r\n?)|(?![^]))".replace(/__/g,(function(){return t})),i="\\|?[ \t]*:?-{3,}:?[ \t]*(?:\\|[ \t]*:?-{3,}:?[ \t]*)+\\|?(?:\n|\r\n?)";n.languages.markdown=n.languages.extend("markup",{}),n.languages.insertBefore("markdown","prolog",{"front-matter-block":{pattern:/(^(?:\s*[\r\n])?)---(?!.)[\s\S]*?[\r\n]---(?!.)/,lookbehind:!0,greedy:!0,inside:{punctuation:/^---|---$/,"front-matter":{pattern:/\S+(?:\s+\S+)*/,alias:["yaml","language-yaml"],inside:n.languages.yaml}}},blockquote:{pattern:/^>(?:[\t ]*>)*/m,alias:"punctuation"},table:{pattern:RegExp("^"+a+i+"(?:"+a+")*","m"),inside:{"table-data-rows":{pattern:RegExp("^("+a+i+")(?:"+a+")*$"),lookbehind:!0,inside:{"table-data":{pattern:RegExp(t),inside:n.languages.markdown},punctuation:/\|/}},"table-line":{pattern:RegExp("^("+a+")"+i+"$"),lookbehind:!0,inside:{punctuation:/\||:?-{3,}:?/}},"table-header-row":{pattern:RegExp("^"+a+"$"),inside:{"table-header":{pattern:RegExp(t),alias:"important",inside:n.languages.markdown},punctuation:/\|/}}}},code:[{pattern:/((?:^|\n)[ \t]*\n|(?:^|\r\n?)[ \t]*\r\n?)(?: {4}|\t).+(?:(?:\n|\r\n?)(?: {4}|\t).+)*/,lookbehind:!0,alias:"keyword"},{pattern:/^```[\s\S]*?^```$/m,greedy:!0,inside:{"code-block":{pattern:/^(```.*(?:\n|\r\n?))[\s\S]+?(?=(?:\n|\r\n?)^```$)/m,lookbehind:!0},"code-language":{pattern:/^(```).+/,lookbehind:!0},punctuation:/```/}}],title:[{pattern:/\S.*(?:\n|\r\n?)(?:==+|--+)(?=[ \t]*$)/m,alias:"important",inside:{punctuation:/==+$|--+$/}},{pattern:/(^\s*)#.+/m,lookbehind:!0,alias:"important",inside:{punctuation:/^#+|#+$/}}],hr:{pattern:/(^\s*)([*-])(?:[\t ]*\2){2,}(?=\s*$)/m,lookbehind:!0,alias:"punctuation"},list:{pattern:/(^\s*)(?:[*+-]|\d+\.)(?=[\t ].)/m,lookbehind:!0,alias:"punctuation"},"url-reference":{pattern:/!?\[[^\]]+\]:[\t ]+(?:\S+|<(?:\\.|[^>\\])+>)(?:[\t ]+(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\)))?/,inside:{variable:{pattern:/^(!?\[)[^\]]+/,lookbehind:!0},string:/(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\))$/,punctuation:/^[\[\]!:]|[<>]/},alias:"url"},bold:{pattern:e("\\b__(?:(?!_)|_(?:(?!_))+_)+__\\b|\\*\\*(?:(?!\\*)|\\*(?:(?!\\*))+\\*)+\\*\\*"),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^..)[\s\S]+(?=..$)/,lookbehind:!0,inside:{}},punctuation:/\*\*|__/}},italic:{pattern:e("\\b_(?:(?!_)|__(?:(?!_))+__)+_\\b|\\*(?:(?!\\*)|\\*\\*(?:(?!\\*))+\\*\\*)+\\*"),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^.)[\s\S]+(?=.$)/,lookbehind:!0,inside:{}},punctuation:/[*_]/}},strike:{pattern:e("(~~?)(?:(?!~))+\\2"),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^~~?)[\s\S]+(?=\1$)/,lookbehind:!0,inside:{}},punctuation:/~~?/}},"code-snippet":{pattern:/(^|[^\\`])(?:``[^`\r\n]+(?:`[^`\r\n]+)*``(?!`)|`[^`\r\n]+`(?!`))/,lookbehind:!0,greedy:!0,alias:["code","keyword"]},url:{pattern:e('!?\\[(?:(?!\\]))+\\](?:\\([^\\s)]+(?:[\t ]+"(?:\\\\.|[^"\\\\])*")?\\)|[ \t]?\\[(?:(?!\\]))+\\])'),lookbehind:!0,greedy:!0,inside:{operator:/^!/,content:{pattern:/(^\[)[^\]]+(?=\])/,lookbehind:!0,inside:{}},variable:{pattern:/(^\][ \t]?\[)[^\]]+(?=\]$)/,lookbehind:!0},url:{pattern:/(^\]\()[^\s)]+/,lookbehind:!0},string:{pattern:/(^[ \t]+)"(?:\\.|[^"\\])*"(?=\)$)/,lookbehind:!0}}}}),["url","bold","italic","strike"].forEach((function(e){["url","bold","italic","strike","code-snippet"].forEach((function(t){e!==t&&(n.languages.markdown[e].inside.content.inside[t]=n.languages.markdown[t])}))})),n.hooks.add("after-tokenize",(function(n){"markdown"!==n.language&&"md"!==n.language||function n(e){if(e&&"string"!=typeof e)for(var t=0,a=e.length;t",quot:'"'},l=String.fromCodePoint||String.fromCharCode;n.languages.md=n.languages.markdown}(Prism); \ No newline at end of file diff --git a/app/thirdparty/assets/prism/components/prism-matlab.min.js b/app/thirdparty/assets/prism/components/prism-matlab.min.js new file mode 100644 index 0000000000..06d3a98112 --- /dev/null +++ b/app/thirdparty/assets/prism/components/prism-matlab.min.js @@ -0,0 +1 @@ +Prism.languages.matlab={comment:[/%\{[\s\S]*?\}%/,/%.+/],string:{pattern:/\B'(?:''|[^'\r\n])*'/,greedy:!0},number:/(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[eE][+-]?\d+)?(?:[ij])?|\b[ij]\b/,keyword:/\b(?:NaN|break|case|catch|continue|else|elseif|end|for|function|if|inf|otherwise|parfor|pause|pi|return|switch|try|while)\b/,function:/\b(?!\d)\w+(?=\s*\()/,operator:/\.?[*^\/\\']|[+\-:@]|[<>=~]=?|&&?|\|\|?/,punctuation:/\.{3}|[.,;\[\](){}!]/}; \ No newline at end of file diff --git a/app/thirdparty/assets/prism/components/prism-pascal.min.js b/app/thirdparty/assets/prism/components/prism-pascal.min.js new file mode 100644 index 0000000000..3f21ba69b3 --- /dev/null +++ b/app/thirdparty/assets/prism/components/prism-pascal.min.js @@ -0,0 +1 @@ +Prism.languages.pascal={directive:{pattern:/\{\$[\s\S]*?\}/,greedy:!0,alias:["marco","property"]},comment:{pattern:/\(\*[\s\S]*?\*\)|\{[\s\S]*?\}|\/\/.*/,greedy:!0},string:{pattern:/(?:'(?:''|[^'\r\n])*'(?!')|#[&$%]?[a-f\d]+)+|\^[a-z]/i,greedy:!0},asm:{pattern:/(\basm\b)[\s\S]+?(?=\bend\s*[;[])/i,lookbehind:!0,greedy:!0,inside:null},keyword:[{pattern:/(^|[^&])\b(?:absolute|array|asm|begin|case|const|constructor|destructor|do|downto|else|end|file|for|function|goto|if|implementation|inherited|inline|interface|label|nil|object|of|operator|packed|procedure|program|record|reintroduce|repeat|self|set|string|then|to|type|unit|until|uses|var|while|with)\b/i,lookbehind:!0},{pattern:/(^|[^&])\b(?:dispose|exit|false|new|true)\b/i,lookbehind:!0},{pattern:/(^|[^&])\b(?:class|dispinterface|except|exports|finalization|finally|initialization|inline|library|on|out|packed|property|raise|resourcestring|threadvar|try)\b/i,lookbehind:!0},{pattern:/(^|[^&])\b(?:absolute|abstract|alias|assembler|bitpacked|break|cdecl|continue|cppdecl|cvar|default|deprecated|dynamic|enumerator|experimental|export|external|far|far16|forward|generic|helper|implements|index|interrupt|iochecks|local|message|name|near|nodefault|noreturn|nostackframe|oldfpccall|otherwise|overload|override|pascal|platform|private|protected|public|published|read|register|reintroduce|result|safecall|saveregisters|softfloat|specialize|static|stdcall|stored|strict|unaligned|unimplemented|varargs|virtual|write)\b/i,lookbehind:!0}],number:[/(?:[&%]\d+|\$[a-f\d]+)/i,/\b\d+(?:\.\d+)?(?:e[+-]?\d+)?/i],operator:[/\.\.|\*\*|:=|<[<=>]?|>[>=]?|[+\-*\/]=?|[@^=]/,{pattern:/(^|[^&])\b(?:and|as|div|exclude|in|include|is|mod|not|or|shl|shr|xor)\b/,lookbehind:!0}],punctuation:/\(\.|\.\)|[()\[\]:;,.]/},Prism.languages.pascal.asm.inside=Prism.languages.extend("pascal",{asm:void 0,keyword:void 0,operator:void 0}),Prism.languages.objectpascal=Prism.languages.pascal; \ No newline at end of file diff --git a/app/thirdparty/assets/prism/components/prism-sql.min.js b/app/thirdparty/assets/prism/components/prism-sql.min.js new file mode 100644 index 0000000000..86259a6b4f --- /dev/null +++ b/app/thirdparty/assets/prism/components/prism-sql.min.js @@ -0,0 +1 @@ +Prism.languages.sql={comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|(?:--|\/\/|#).*)/,lookbehind:!0},variable:[{pattern:/@(["'`])(?:\\[\s\S]|(?!\1)[^\\])+\1/,greedy:!0},/@[\w.$]+/],string:{pattern:/(^|[^@\\])("|')(?:\\[\s\S]|(?!\2)[^\\]|\2\2)*\2/,greedy:!0,lookbehind:!0},identifier:{pattern:/(^|[^@\\])`(?:\\[\s\S]|[^`\\]|``)*`/,greedy:!0,lookbehind:!0,inside:{punctuation:/^`|`$/}},function:/\b(?:AVG|COUNT|FIRST|FORMAT|LAST|LCASE|LEN|MAX|MID|MIN|MOD|NOW|ROUND|SUM|UCASE)(?=\s*\()/i,keyword:/\b(?:ACTION|ADD|AFTER|ALGORITHM|ALL|ALTER|ANALYZE|ANY|APPLY|AS|ASC|AUTHORIZATION|AUTO_INCREMENT|BACKUP|BDB|BEGIN|BERKELEYDB|BIGINT|BINARY|BIT|BLOB|BOOL|BOOLEAN|BREAK|BROWSE|BTREE|BULK|BY|CALL|CASCADED?|CASE|CHAIN|CHAR(?:ACTER|SET)?|CHECK(?:POINT)?|CLOSE|CLUSTERED|COALESCE|COLLATE|COLUMNS?|COMMENT|COMMIT(?:TED)?|COMPUTE|CONNECT|CONSISTENT|CONSTRAINT|CONTAINS(?:TABLE)?|CONTINUE|CONVERT|CREATE|CROSS|CURRENT(?:_DATE|_TIME|_TIMESTAMP|_USER)?|CURSOR|CYCLE|DATA(?:BASES?)?|DATE(?:TIME)?|DAY|DBCC|DEALLOCATE|DEC|DECIMAL|DECLARE|DEFAULT|DEFINER|DELAYED|DELETE|DELIMITERS?|DENY|DESC|DESCRIBE|DETERMINISTIC|DISABLE|DISCARD|DISK|DISTINCT|DISTINCTROW|DISTRIBUTED|DO|DOUBLE|DROP|DUMMY|DUMP(?:FILE)?|DUPLICATE|ELSE(?:IF)?|ENABLE|ENCLOSED|END|ENGINE|ENUM|ERRLVL|ERRORS|ESCAPED?|EXCEPT|EXEC(?:UTE)?|EXISTS|EXIT|EXPLAIN|EXTENDED|FETCH|FIELDS|FILE|FILLFACTOR|FIRST|FIXED|FLOAT|FOLLOWING|FOR(?: EACH ROW)?|FORCE|FOREIGN|FREETEXT(?:TABLE)?|FROM|FULL|FUNCTION|GEOMETRY(?:COLLECTION)?|GLOBAL|GOTO|GRANT|GROUP|HANDLER|HASH|HAVING|HOLDLOCK|HOUR|IDENTITY(?:COL|_INSERT)?|IF|IGNORE|IMPORT|INDEX|INFILE|INNER|INNODB|INOUT|INSERT|INT|INTEGER|INTERSECT|INTERVAL|INTO|INVOKER|ISOLATION|ITERATE|JOIN|KEYS?|KILL|LANGUAGE|LAST|LEAVE|LEFT|LEVEL|LIMIT|LINENO|LINES|LINESTRING|LOAD|LOCAL|LOCK|LONG(?:BLOB|TEXT)|LOOP|MATCH(?:ED)?|MEDIUM(?:BLOB|INT|TEXT)|MERGE|MIDDLEINT|MINUTE|MODE|MODIFIES|MODIFY|MONTH|MULTI(?:LINESTRING|POINT|POLYGON)|NATIONAL|NATURAL|NCHAR|NEXT|NO|NONCLUSTERED|NULLIF|NUMERIC|OFF?|OFFSETS?|ON|OPEN(?:DATASOURCE|QUERY|ROWSET)?|OPTIMIZE|OPTION(?:ALLY)?|ORDER|OUT(?:ER|FILE)?|OVER|PARTIAL|PARTITION|PERCENT|PIVOT|PLAN|POINT|POLYGON|PRECEDING|PRECISION|PREPARE|PREV|PRIMARY|PRINT|PRIVILEGES|PROC(?:EDURE)?|PUBLIC|PURGE|QUICK|RAISERROR|READS?|REAL|RECONFIGURE|REFERENCES|RELEASE|RENAME|REPEAT(?:ABLE)?|REPLACE|REPLICATION|REQUIRE|RESIGNAL|RESTORE|RESTRICT|RETURN(?:ING|S)?|REVOKE|RIGHT|ROLLBACK|ROUTINE|ROW(?:COUNT|GUIDCOL|S)?|RTREE|RULE|SAVE(?:POINT)?|SCHEMA|SECOND|SELECT|SERIAL(?:IZABLE)?|SESSION(?:_USER)?|SET(?:USER)?|SHARE|SHOW|SHUTDOWN|SIMPLE|SMALLINT|SNAPSHOT|SOME|SONAME|SQL|START(?:ING)?|STATISTICS|STATUS|STRIPED|SYSTEM_USER|TABLES?|TABLESPACE|TEMP(?:ORARY|TABLE)?|TERMINATED|TEXT(?:SIZE)?|THEN|TIME(?:STAMP)?|TINY(?:BLOB|INT|TEXT)|TOP?|TRAN(?:SACTIONS?)?|TRIGGER|TRUNCATE|TSEQUAL|TYPES?|UNBOUNDED|UNCOMMITTED|UNDEFINED|UNION|UNIQUE|UNLOCK|UNPIVOT|UNSIGNED|UPDATE(?:TEXT)?|USAGE|USE|USER|USING|VALUES?|VAR(?:BINARY|CHAR|CHARACTER|YING)|VIEW|WAITFOR|WARNINGS|WHEN|WHERE|WHILE|WITH(?: ROLLUP|IN)?|WORK|WRITE(?:TEXT)?|YEAR)\b/i,boolean:/\b(?:FALSE|NULL|TRUE)\b/i,number:/\b0x[\da-f]+\b|\b\d+(?:\.\d*)?|\B\.\d+\b/i,operator:/[-+*\/=%^~]|&&?|\|\|?|!=?|<(?:=>?|<|>)?|>[>=]?|\b(?:AND|BETWEEN|DIV|ILIKE|IN|IS|LIKE|NOT|OR|REGEXP|RLIKE|SOUNDS LIKE|XOR)\b/i,punctuation:/[;[\]()`,.]/}; \ No newline at end of file diff --git a/app/thirdparty/assets/prism/components/prism-visual-basic.js b/app/thirdparty/assets/prism/components/prism-visual-basic.js new file mode 100644 index 0000000000..0afdb3ecf4 --- /dev/null +++ b/app/thirdparty/assets/prism/components/prism-visual-basic.js @@ -0,0 +1,29 @@ +Prism.languages['visual-basic'] = { + 'comment': { + pattern: /(?:['‘’]|REM\b)(?:[^\r\n_]|_(?:\r\n?|\n)?)*/i, + inside: { + 'keyword': /^REM/i + } + }, + 'directive': { + pattern: /#(?:Const|Else|ElseIf|End|ExternalChecksum|ExternalSource|If|Region)(?:\b_[ \t]*(?:\r\n?|\n)|.)+/i, + alias: 'property', + greedy: true + }, + 'string': { + pattern: /\$?["“”](?:["“”]{2}|[^"“”])*["“”]C?/i, + greedy: true + }, + 'date': { + pattern: /#[ \t]*(?:\d+([/-])\d+\1\d+(?:[ \t]+(?:\d+[ \t]*(?:AM|PM)|\d+:\d+(?::\d+)?(?:[ \t]*(?:AM|PM))?))?|\d+[ \t]*(?:AM|PM)|\d+:\d+(?::\d+)?(?:[ \t]*(?:AM|PM))?)[ \t]*#/i, + alias: 'number' + }, + 'number': /(?:(?:\b\d+(?:\.\d+)?|\.\d+)(?:E[+-]?\d+)?|&[HO][\dA-F]+)(?:[FRD]|U?[ILS])?/i, + 'boolean': /\b(?:False|Nothing|True)\b/i, + 'keyword': /\b(?:AddHandler|AddressOf|Alias|And(?:Also)?|As|Boolean|ByRef|Byte|ByVal|Call|Case|Catch|C(?:Bool|Byte|Char|Date|Dbl|Dec|Int|Lng|Obj|SByte|Short|Sng|Str|Type|UInt|ULng|UShort)|Char|Class|Const|Continue|Currency|Date|Decimal|Declare|Default|Delegate|Dim|DirectCast|Do|Double|Each|Else(?:If)?|End(?:If)?|Enum|Erase|Error|Event|Exit|Finally|For|Friend|Function|Get(?:Type|XMLNamespace)?|Global|GoSub|GoTo|Handles|If|Implements|Imports|In|Inherits|Integer|Interface|Is|IsNot|Let|Lib|Like|Long|Loop|Me|Mod|Module|Must(?:Inherit|Override)|My(?:Base|Class)|Namespace|Narrowing|New|Next|Not(?:Inheritable|Overridable)?|Object|Of|On|Operator|Option(?:al)?|Or(?:Else)?|Out|Overloads|Overridable|Overrides|ParamArray|Partial|Private|Property|Protected|Public|RaiseEvent|ReadOnly|ReDim|RemoveHandler|Resume|Return|SByte|Select|Set|Shadows|Shared|short|Single|Static|Step|Stop|String|Structure|Sub|SyncLock|Then|Throw|To|Try|TryCast|Type|TypeOf|U(?:Integer|Long|Short)|Until|Using|Variant|Wend|When|While|Widening|With(?:Events)?|WriteOnly|Xor)\b/i, + 'operator': /[+\-*/\\^<=>&#@$%!]|\b_(?=[ \t]*[\r\n])/, + 'punctuation': /[{}().,:?]/ +}; + +Prism.languages.vb = Prism.languages['visual-basic']; +Prism.languages.vba = Prism.languages['visual-basic']; diff --git a/app/thirdparty/assets/prism/components/prism-xml-doc.min.js b/app/thirdparty/assets/prism/components/prism-xml-doc.min.js new file mode 100644 index 0000000000..85074eb378 --- /dev/null +++ b/app/thirdparty/assets/prism/components/prism-xml-doc.min.js @@ -0,0 +1 @@ +!function(a){function e(e,n){a.languages[e]&&a.languages.insertBefore(e,"comment",{"doc-comment":n})}var n=a.languages.markup.tag,t={pattern:/\/\/\/.*/,greedy:!0,alias:"comment",inside:{tag:n}},g={pattern:/'''.*/,greedy:!0,alias:"comment",inside:{tag:n}};e("csharp",t),e("fsharp",t),e("vbnet",g)}(Prism); \ No newline at end of file diff --git a/app/thirdparty/assets/prism/components/prism-yaml.min.js b/app/thirdparty/assets/prism/components/prism-yaml.min.js new file mode 100644 index 0000000000..5cd16d3d7f --- /dev/null +++ b/app/thirdparty/assets/prism/components/prism-yaml.min.js @@ -0,0 +1 @@ +!function(e){var n=/[*&][^\s[\]{},]+/,r=/!(?:<[\w\-%#;/?:@&=+$,.!~*'()[\]]+>|(?:[a-zA-Z\d-]*!)?[\w\-%#;/?:@&=+$.~*'()]+)?/,t="(?:"+r.source+"(?:[ \t]+"+n.source+")?|"+n.source+"(?:[ \t]+"+r.source+")?)",a="(?:[^\\s\\x00-\\x08\\x0e-\\x1f!\"#%&'*,\\-:>?@[\\]`{|}\\x7f-\\x84\\x86-\\x9f\\ud800-\\udfff\\ufffe\\uffff]|[?:-])(?:[ \t]*(?:(?![#:])|:))*".replace(//g,(function(){return"[^\\s\\x00-\\x08\\x0e-\\x1f,[\\]{}\\x7f-\\x84\\x86-\\x9f\\ud800-\\udfff\\ufffe\\uffff]"})),d="\"(?:[^\"\\\\\r\n]|\\\\.)*\"|'(?:[^'\\\\\r\n]|\\\\.)*'";function o(e,n){n=(n||"").replace(/m/g,"")+"m";var r="([:\\-,[{]\\s*(?:\\s<>[ \t]+)?)(?:<>)(?=[ \t]*(?:$|,|\\]|\\}|(?:[\r\n]\\s*)?#))".replace(/<>/g,(function(){return t})).replace(/<>/g,(function(){return e}));return RegExp(r,n)}e.languages.yaml={scalar:{pattern:RegExp("([\\-:]\\s*(?:\\s<>[ \t]+)?[|>])[ \t]*(?:((?:\r?\n|\r)[ \t]+)\\S[^\r\n]*(?:\\2[^\r\n]+)*)".replace(/<>/g,(function(){return t}))),lookbehind:!0,alias:"string"},comment:/#.*/,key:{pattern:RegExp("((?:^|[:\\-,[{\r\n?])[ \t]*(?:<>[ \t]+)?)<>(?=\\s*:\\s)".replace(/<>/g,(function(){return t})).replace(/<>/g,(function(){return"(?:"+a+"|"+d+")"}))),lookbehind:!0,greedy:!0,alias:"atrule"},directive:{pattern:/(^[ \t]*)%.+/m,lookbehind:!0,alias:"important"},datetime:{pattern:o("\\d{4}-\\d\\d?-\\d\\d?(?:[tT]|[ \t]+)\\d\\d?:\\d{2}:\\d{2}(?:\\.\\d*)?(?:[ \t]*(?:Z|[-+]\\d\\d?(?::\\d{2})?))?|\\d{4}-\\d{2}-\\d{2}|\\d\\d?:\\d{2}(?::\\d{2}(?:\\.\\d*)?)?"),lookbehind:!0,alias:"number"},boolean:{pattern:o("false|true","i"),lookbehind:!0,alias:"important"},null:{pattern:o("null|~","i"),lookbehind:!0,alias:"important"},string:{pattern:o(d),lookbehind:!0,greedy:!0},number:{pattern:o("[+-]?(?:0x[\\da-f]+|0o[0-7]+|(?:\\d+(?:\\.\\d*)?|\\.\\d+)(?:e[+-]?\\d+)?|\\.inf|\\.nan)","i"),lookbehind:!0},tag:r,important:n,punctuation:/---|[:[\]{}\-,|>?]|\.\.\./},e.languages.yml=e.languages.yaml}(Prism); \ No newline at end of file diff --git a/app/thirdparty/assets/prism/index.html b/app/thirdparty/assets/prism/index.html deleted file mode 100644 index 029fe06d70..0000000000 --- a/app/thirdparty/assets/prism/index.html +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - - - -

Code

-

CPP code block

-
#include <iostream>
-using namespace std;
-
-int main()
-{
-    cout << "hello" << endl;
-    return 0;
-}
-
- - - - - diff --git a/app/thirdparty/assets/prism/main.js b/app/thirdparty/assets/prism/main.js new file mode 100644 index 0000000000..883ebef635 --- /dev/null +++ b/app/thirdparty/assets/prism/main.js @@ -0,0 +1,7 @@ +function wrapCodeBlockWords() { + let preElements = document.querySelectorAll("pre[class*='language-']"); + preElements.forEach((element) => { + element.style.whiteSpace = "pre-wrap"; + element.style.overflowWrap = "break-word"; + }); +} diff --git a/app/thirdparty/assets/prism/plugins/line-numbers/main.js b/app/thirdparty/assets/prism/plugins/line-numbers/main.js new file mode 100644 index 0000000000..0956d781d0 --- /dev/null +++ b/app/thirdparty/assets/prism/plugins/line-numbers/main.js @@ -0,0 +1,41 @@ +function enableLineNumbers() { + document.body.classList.add("line-numbers"); +} + +function adjustLineNumbers() { + const preElements = document.querySelectorAll("pre[class*='language-']"); + let fontWidth = -1; + + preElements.forEach((element) => { + let codeElement = element.querySelector("code"); + if (codeElement) { + const maxNumber = codeElement.textContent.split("\n").length - 1; + if (maxNumber == 0) { + return; + } + + if (fontWidth == -1) { + const canvasContext = document.createElement("canvas").getContext("2d"); + canvasContext.font = window.getComputedStyle(codeElement, null).getPropertyValue("font"); + fontWidth = canvasContext.measureText("0").width; + } + + const digits = getNumberDigits(maxNumber); + element.style.paddingLeft = 2 * fontWidth + digits * fontWidth - digits + "px"; + } + }); +} + +function getNumberDigits(number) { + if (number < 10) { + return 1; + } else if (number < 100) { + return 2; + } else if (number < 1000) { + return 3; + } else if (number < 10000) { + return 4; + } else { + return 5; + } +} diff --git a/app/thirdparty/assets/prism/plugins/line-numbers/prism-line-numbers.css b/app/thirdparty/assets/prism/plugins/line-numbers/prism-line-numbers.css deleted file mode 100644 index ace8f23ffa..0000000000 --- a/app/thirdparty/assets/prism/plugins/line-numbers/prism-line-numbers.css +++ /dev/null @@ -1,40 +0,0 @@ -pre[class*="language-"].line-numbers { - position: relative; - padding-left: 2.6em; - counter-reset: linenumber; -} - -pre[class*="language-"].line-numbers>code { - position: relative; - white-space: inherit; -} - -.line-numbers .line-numbers-rows { - position: absolute; - pointer-events: none; - top: 0; - font-size: 100%; - left: -3.4em; - width: 3em; - /* works for line-numbers below 1000 lines */ - letter-spacing: -1px; - border-right: 1px solid #999; - - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; -} - -.line-numbers-rows>span { - display: block; - counter-increment: linenumber; -} - -.line-numbers-rows>span:before { - content: counter(linenumber); - color: #999; - display: block; - padding-right: 0.4em; - text-align: right; -} diff --git a/app/thirdparty/assets/prism/plugins/line-numbers/style.css b/app/thirdparty/assets/prism/plugins/line-numbers/style.css new file mode 100644 index 0000000000..a5a6c0dfd2 --- /dev/null +++ b/app/thirdparty/assets/prism/plugins/line-numbers/style.css @@ -0,0 +1,28 @@ +.line-numbers .line-numbers-rows { + position: absolute; + pointer-events: none; + top: 0; + font-size: 100%; + left: -5.3em; + width: 5em; + letter-spacing: -1px; + border-right: 1px solid #999; + + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.line-numbers-rows > span { + display: block; + counter-increment: linenumber; +} + +.line-numbers-rows > span:before { + content: counter(linenumber); + color: #999; + display: block; + padding-right: 0.3em; /* padding right of line numbers */ + text-align: right; +} diff --git a/app/thirdparty/assets/prism/style.css b/app/thirdparty/assets/prism/style.css new file mode 100644 index 0000000000..8b612e2564 --- /dev/null +++ b/app/thirdparty/assets/prism/style.css @@ -0,0 +1,11 @@ +pre[class*="language-"] { + position: relative; + padding-left: 0.8em; /* padding left of codes */ + counter-reset: linenumber; +} + +pre[class*="language-"] > code { + position: relative; + white-space: inherit; + overflow-wrap: inherit; +} diff --git a/app/thirdparty/assets/prism/version b/app/thirdparty/assets/prism/version new file mode 100644 index 0000000000..ecacfbe84b --- /dev/null +++ b/app/thirdparty/assets/prism/version @@ -0,0 +1 @@ +Prism v1.29.0 \ No newline at end of file diff --git a/app/thirdparty/java/other/flexmark/ext/codeblocks/LineNumbersAttributeProvider.java b/app/thirdparty/java/other/flexmark/ext/codeblocks/LineNumbersAttributeProvider.java deleted file mode 100644 index 97fd8e8f28..0000000000 --- a/app/thirdparty/java/other/flexmark/ext/codeblocks/LineNumbersAttributeProvider.java +++ /dev/null @@ -1,46 +0,0 @@ -/*####################################################### - * flexmark-ext-prism-linenumber - * - * Copyright Tom Misawa - * Source: https://github.com/riversun/flexmark-ext-prism-linenumber - * License: MIT -#########################################################*/ - -package other.flexmark.ext.codeblocks; - -import com.vladsch.flexmark.ast.FencedCodeBlock; -import com.vladsch.flexmark.html.AttributeProvider; -import com.vladsch.flexmark.html.AttributeProviderFactory; -import com.vladsch.flexmark.html.IndependentAttributeProviderFactory; -import com.vladsch.flexmark.html.renderer.AttributablePart; -import com.vladsch.flexmark.html.renderer.LinkResolverContext; -import com.vladsch.flexmark.util.ast.Node; -import com.vladsch.flexmark.util.html.Attributes; - -import java.util.Objects; - -/** - * AttributeProvider of flexmark-java extension for prism syntax highlighter. - */ -public class LineNumbersAttributeProvider implements AttributeProvider { - - static AttributeProviderFactory Factory() { - return new IndependentAttributeProviderFactory() { - - @Override - public AttributeProvider create(LinkResolverContext context) { - return new LineNumbersAttributeProvider(); - } - }; - } - - @Override - public void setAttributes(Node node, AttributablePart part, Attributes attributes) { - if (node instanceof FencedCodeBlock && part == AttributablePart.NODE) { - if (Objects.equals(((FencedCodeBlock) node).getInfo(), "mermaid")) { - return; - } - attributes.replaceValue("class", "line-numbers"); - } - } -} \ No newline at end of file diff --git a/app/thirdparty/java/other/flexmark/ext/codeblocks/LineNumbersExtension.java b/app/thirdparty/java/other/flexmark/ext/codeblocks/LineNumbersExtension.java deleted file mode 100644 index 5162f71913..0000000000 --- a/app/thirdparty/java/other/flexmark/ext/codeblocks/LineNumbersExtension.java +++ /dev/null @@ -1,29 +0,0 @@ -/*####################################################### - * flexmark-ext-prism-linenumber - * - * Copyright Tom Misawa - * Source: https://github.com/riversun/flexmark-ext-prism-linenumber - * License: MIT -#########################################################*/ -package other.flexmark.ext.codeblocks; - -import com.vladsch.flexmark.html.HtmlRenderer; -import com.vladsch.flexmark.util.options.MutableDataHolder; - -/** - * flexmark-java extension for prism syntax highlighter. - */ -public class LineNumbersExtension implements HtmlRenderer.HtmlRendererExtension { - @Override - public void rendererOptions(final MutableDataHolder options) { - } - - @Override - public void extend(final HtmlRenderer.Builder rendererBuilder, final String rendererType) { - rendererBuilder.attributeProviderFactory(LineNumbersAttributeProvider.Factory()); - } - - public static LineNumbersExtension create() { - return new LineNumbersExtension(); - } -} \ No newline at end of file diff --git a/doc/assets/2023-10-11-line-numbers.webp b/doc/assets/2023-10-11-line-numbers.webp index e75161b638ac8d1024ea458ddc484100b66b63a4..c35ca568087e47e84d369b9a584740297d5ef356 100644 GIT binary patch literal 57082 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

@yviuDUq&{qEkmvaT0$*Gj3R8xSEN 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�p9yGQZ)VK(XiACRntxeN^n~_dhbBW-d=fzqp!bQtNFS|2@cP8rs zjvKDnWSAYY?9Df2>0(AUyI;MjGQP_9&q}~ul9V2lsj+m7&4#T9oI0EAj)+ng%$a$d zngL_YikA%N3NXsrVCRqRieZl$xwGlQh5TL5;@!hE(oEFQuE9Mk-QxUa!KFrv+`e!L z7S0?8ez15ZiRfEQ5Za;bkFTVx{)#*~c&3wRWyYRu`cs`z*vui78!n(4Yjf$mmR5Qr zU7TK#--`t|eZ7bN=g_@+Xayr&K|wE|r;o z(FDx;TuNmH|D*Avk+V98f*{uO$6tY(%LNf|G!Ijf3Ow5>+MDt!|4zEN;>%#h|12Nh zR&G(ue)iaD3~v2yENq28P}?z-^4gvc(@O2=64?Bv5rETht}@|c@jL@NBZHyJ)S$E? zlxg3eQgK$Zy#AVebM$C&xml2@JN_uyim-YMMquSqk+wdJ7AJQZG~5!wx7XZ^TC zo#VG%=Q45ode%A-<`?PR=W+(?%zbyRy-GAcyyG3FA`*?%P@h8VG^XE|6}$M6&2{3+ zhRGFk-n?2(L%_ecV$0IQ^O-nkX$!1T<=XPxs_X+Dd;R+(6j(28MM z{hZ6Xk%9ZwBAj*~ZR%IVT7nTHB7FPqu*DXvOlZ@&BqQJ4zA1{Y>djI^A(Yp1^rF(! z>~pV~qREknR7+&vgG-+HCfg}gcCHsf8{C23 z7Q2jiC&>%7#e9O!-+!?6ZO@fK*`Y)Natt|UJaHkFNDCa+3H`^WG{JiHaIZRdS5;X8 zNbC1jfuwV;2`affgz7qDjPLiaRdn_2s;Z8I0Vmo{k|n%OsO)_!{DWU;EyD&&oz+iuq;A8|dnLS=^W$lXZi=PLxRc-_L>cBs{E( zQ<-uTJSJ`g6O8;iN1f-wB^D^*bw}oO5mAQxdcgIa_SZK36)@E5*haDu!^TbK%wNVP zIF2m=Q@u@3bMOz!CT}feVi4u=`r?@9O@{bzcRvjyf)Si~x|%d=Q!8y%3FO`gyulaW8{;vd-nH`U^98jF-VU!g$d6rzTz%s2 z?gN2+7+3Un<#3}8Z&fcM6lSDA5CrpIAa$s?EMk3H?{saqc@1rs1VeK$%VT%$YH|1G z+_xhI@`ycw5e<$6I90CiJw1>ZWJ6(>S{>+Ie`5wsaZFOt3u|1De(CQ{lO9{YS(1Fx zjhUz3I+l~AvlP*S)*vs5veTU#{$#Z+YN(wS4C@0kGDyPyYQLEHI>X+_8B~BDN~hQs zyA!T=^9~7QPu@2*jRNhVJJ+;_BGQ>1nkyei0L=X63OFV1QLxEL_J75fk*{cW1>+4# zU&ESAQSvc#^CONi5yUe@eM)20K1?%L^3CH{^x$=}F+Ml`nBFrEXohvA4!0&5Tx2EG z!x3G%ZV3qG{AE6Z%1yHCi61Meo*-MJv9m7XMtFK>eKr`(88Y(;ZrR9L!Q{=Kq*TF) zH4*|yz0`NdE1w$}ug$lOOje=V4DI($A+7N(Qwc}URRGD~-zFacrXC!~u<1R!Wi;AC zd^YwE!BTo%#VY6Su)ma@;W$D!qNx>)wD*8cvc1Xs3I(@G50L%*h=Mnm$sxTZw7+#+ zVvoBF8qY)QVA{$bP!_l6?#*r?7x@cJbzMdP16HHB{M7}8TAsQbgow(y*E<2xl%58Zbb2vIL%bhe{X!@68#6eJL;cZD3ifp(fpi@Mk?MV1M=v*EHNd(w10nVomx{qG zeAHON8(!3O#kuU%AiXjzOT8}GlE^01&d8uW2@(3W30i%zrR*=kpKLh>%R#zc~R%s_Sl~C4+9#2)4G5{*ux$ zV~Q_HBhiUdMR5U1t@iu!bQ`a2q9y_QBrBMkFyiaDR(~{ONpk;*aqul_#NQ$|9Q2M% zf6sBeAmlp8@;)nWta>0P?;Erjt@^g^@BuEm`_n)sXn2xGFSWfWe*QS-L_oO<2qNvI zPieHfyEjhAd9286$}B)bXx%B`L_GALWcmV0H#gX{N8I+#_Pwlr)z3jc0Z_4# zqsMz1U>rsNnoQvr**G8v*Q*a4#Q5pRn6mn3SV6MqW0Gcd*?sR*tT)7Ad#h)N3ypG_ zZ+;#KrBKxZW2%vIPG>PAx;pepa_#zO8)w4gFF6DUve@=1;w1tErI2jg1 zj+{Ed(GJ8Z@b0QAktn)SA%`M<;ZnoS=OV^ZOU*3aCCSJ)ag;>h&iTO2)5>FKchSnr zO}U!sJ#syw@c~Pv?{C;J8;G66zndFmd+LfA+V@uNEEq_@Y8L#AuY zTz1h?*{dy;Le+nVz|XBOxHL|3qM;T((#Bc#9CIN>&LHRWGuwLhoWr!OqcA_c+_{W1 z#jzhIN8~qta5xJ1OKG%O9(O_mL{8y+4(oMWy12%PP)$b#M50?*d`8Wh+f|-M@v9>8 z+AXH1W+}l;UcA+@ZR{r-Q8F3139JxVrE*nN*T;f%sorr+6E0yV>YMbEemkRS9S)n$ zMb9)wgqYZr-exxUk#harOYVc30m$Y?@usY!^PZKfx#RtsmR6$O)M)H zcjeA^Zy}xK-S3qPlL~E6N+-rXX3=B@!zwXJVum4&2r76<$;?@I+ZV|pr(BH1JD5+w;LbvyRQ7%Z^4hXvnFijNevn@Lv@hEU5C$I9>-3DewFRFTLI zU1~dgw%Zw=X5Fut8S(=alFp3p!{Ok~>@>I{_Dzv~euxSMZh8u&*?cyQhDc+nzUZFT z8dP{x&cT(B140s6eixh|Qc-vEJdkU=AX ze@V8Wmdco6{GmwC19CC1qi&)8%zpk&M+yXkv53)WK^`n`C_{Nnvxt^$@l65xD?I7+ ztPM$hkTA`7Z6#sTWerGIvNq4DtK2#Bi_5RpKAFG&t-xX<$q4r5w22@QxE|Tv;P~+% z8gyY>{ZIV4)y1rObzDei0Y;efmFc@B|0n~esv_NY6~1{?zo+UB1=X=7TndQ=R+&OL z=H&OSxfM_#?Q(6;7L9*uuNCFdi0#Iuf}{g|ydyVr1h5nxptB{Aitfj1TuPTbV!9C6 z{@dGAT&c|S@nzPKJY0y=kaNCW)>2}A*`q3QGdm?@_j)9^>^ZNfC(}An=N;xJ!e{ks zu1UeiPo%_6v?2Ma#5Q3pUreqG>Bk_tze3K5JwMdE#Loh#^lTru30PxAGPYqbl_>ZY zPW|AwM@Sz+f}T!0moWq_79JUkP`FYv*N6;P5!bS-kqmmB?nkm^|Y7(aIPF0;|k)C&EYw^ zBoE@c)s?!O#0;sC(bHtYVz^Z%3Y*he z2YXqbE>8+WaiK$erZ-&S?af(w9sLqXwoSVS@+aF6@%V8>@Ab?$k#rEAYfasz;&%*H zca03=tPL_$!Pw#K?01Q0m$w<+WoqVW_D*9*AyXbHo+LA_dj>jxsjss9tiE`m+|p!4 z4wv3GN=F*#`{&*DjY;Px{+X+0nHB{ul{a==NKa~67>1pDpMQ9$YuE>7S2~~TBFI8H z+UPSCnBSY_8j+gpHqwc zs;Ava$c>HNjYR8P90<$0g5TJXulu~&L~pinmJ_k}^&6oVnY4i;Qd_4rWHK+<(3+^) z7nii}>?{t;#-~8-S_sLvliJx7HTEi%qwGy;j=RM~(8Z2Rm6^6>JTTXU*VUxpJ3&nN z1-P%fiyh%c16p6&)v ztzI!-s;F2_L6Dn;<$x;=1wvv%N&nsN5xr<3d>*5Ue-si>Nrh7vJ`kZe zX{TmB*AR0pY+g1T2wf@he5pnvjH-C>r4P<6;`;^%XUdb+Bb^_)@R)8)SRdfuvczQh z0Mf+f26%4#*s8E_M(}`~lb=Lsh6{nbJyKTeZFX`Nm*ndzRT(h7R)h0P5G%*ka9J*3%I-i%; zl4xntw#%n+pZH<1tUh8IGTxNL+B5ObKLQI07Q8nSk;EcaX-K0Ofr7<>(W|uEA0G&5 z{E5srj{`1T1e=jg?hcoy+FuK8-aLPhUE*V+HKW13qq89o= zo0}w%cf?_6$e7dQpZAFN*tPtpQWt~H!^j3_cN)gLqsJYo&gPwxg_55R>s8I(v}q%c z%|i>k&5tf9V+kDF#nAJzV(fEUWFVf;MB3t$Ow^Dd+dGo(2Fl|O+VwK%c-z|6v9T?z z3dL_%Nv#H`-yWUQqC+f3=W|q1RixJBZ_OtE3>Hjgdxu|JEwjhFAjX-FMi!KC5r}M( zCrm%DGCxU(`Gj~T0^ZgxNJ0eJ<|How!8C9!#5gKo_ru{%A*yT3?avFu)}W!9eoCu# z^pD#sIVqGOP)@j!aKlM^Ck==UF}1vJMoGdgn`}C&t8{-Dl^T!Y207;Q;))g`s4NLKk(h!6s8b65N7)eMxiEJw0%F$au%N4% zz!`iTyvcRVl7H1TrxmxPG95_@2wS`6;wv@@suXy{F&fyQUlT)N{DPt&k5^>C1C!n8 z&~`WEHNzVhfH^tF)mPE=XNk&N_-u=^my)6X8Jk2;shEp)vfP>V?FD8`X<$PV z1K43BLaJ5VLaS+e1`*pwrwCV&L-@_%$ag+7CPO#(P!9weK<^~VVmE>ABaSu_C4cVa zK)hS9lkxrp@*JQ=m|SE$J!a3=C?z5=h!ferr)baaM*UvM1VXr?_F(mIHThxe-l>I`CTpx(nDb{y_2A;|z%u9eHD1i3zHh5uXL9DBH zO5srwy-2f=16IRro7AYs@>S35d)(<;gYMTU`-QVnf-8fyU7^u