diff --git a/docs/website/CNAME b/docs/CNAME similarity index 100% rename from docs/website/CNAME rename to docs/CNAME diff --git a/docs/website/_config.yml b/docs/_config.yml similarity index 100% rename from docs/website/_config.yml rename to docs/_config.yml diff --git a/docs/website/_site/images/GitHub_Logo.png b/docs/images/GitHub_Logo.png similarity index 100% rename from docs/website/_site/images/GitHub_Logo.png rename to docs/images/GitHub_Logo.png diff --git a/docs/website/_site/images/autokeras_logo.png b/docs/images/autokeras_logo.png similarity index 100% rename from docs/website/_site/images/autokeras_logo.png rename to docs/images/autokeras_logo.png diff --git a/docs/website/_site/images/automl_logos.png b/docs/images/automl_logos.png similarity index 100% rename from docs/website/_site/images/automl_logos.png rename to docs/images/automl_logos.png diff --git a/docs/website/_site/images/bball_favicon.png b/docs/images/bball_favicon.png similarity index 100% rename from docs/website/_site/images/bball_favicon.png rename to docs/images/bball_favicon.png diff --git a/docs/website/_site/images/bet_decisions.png b/docs/images/bet_decisions.png similarity index 100% rename from docs/website/_site/images/bet_decisions.png rename to docs/images/bet_decisions.png diff --git a/docs/website/_site/images/cls_model_accuracy.png b/docs/images/cls_model_accuracy.png similarity index 100% rename from docs/website/_site/images/cls_model_accuracy.png rename to docs/images/cls_model_accuracy.png diff --git a/docs/website/_site/images/custom_model_overview.png b/docs/images/custom_model_overview.png similarity index 100% rename from docs/website/_site/images/custom_model_overview.png rename to docs/images/custom_model_overview.png diff --git a/docs/website/_site/images/custom_model_requirements.png b/docs/images/custom_model_requirements.png similarity index 100% rename from docs/website/_site/images/custom_model_requirements.png rename to docs/images/custom_model_requirements.png diff --git a/docs/website/_site/images/daily_update_data_flow_diagram.png b/docs/images/daily_update_data_flow_diagram.png similarity index 100% rename from docs/website/_site/images/daily_update_data_flow_diagram.png rename to docs/images/daily_update_data_flow_diagram.png diff --git a/docs/website/_site/images/dashboard.png b/docs/images/dashboard.png similarity index 100% rename from docs/website/_site/images/dashboard.png rename to docs/images/dashboard.png diff --git a/docs/website/_site/images/data_engineering_flowchart_1.png b/docs/images/data_engineering_flowchart_1.png similarity index 100% rename from docs/website/_site/images/data_engineering_flowchart_1.png rename to docs/images/data_engineering_flowchart_1.png diff --git a/docs/website/_site/images/data_engineering_flowchart_2.png b/docs/images/data_engineering_flowchart_2.png similarity index 100% rename from docs/website/_site/images/data_engineering_flowchart_2.png rename to docs/images/data_engineering_flowchart_2.png diff --git a/docs/website/_site/images/github-mark.png b/docs/images/github-mark.png similarity index 100% rename from docs/website/_site/images/github-mark.png rename to docs/images/github-mark.png diff --git a/docs/website/_site/images/nba_header.png b/docs/images/nba_header.png similarity index 100% rename from docs/website/_site/images/nba_header.png rename to docs/images/nba_header.png diff --git a/docs/website/_site/images/vegas_miss_abs.png b/docs/images/vegas_miss_abs.png similarity index 100% rename from docs/website/_site/images/vegas_miss_abs.png rename to docs/images/vegas_miss_abs.png diff --git a/docs/website/_site/images/vegas_miss_by_week.png b/docs/images/vegas_miss_by_week.png similarity index 100% rename from docs/website/_site/images/vegas_miss_by_week.png rename to docs/images/vegas_miss_by_week.png diff --git a/docs/website/_site/images/vegas_miss_statistics.png b/docs/images/vegas_miss_statistics.png similarity index 100% rename from docs/website/_site/images/vegas_miss_statistics.png rename to docs/images/vegas_miss_statistics.png diff --git a/docs/website/_site/images/web_app.png b/docs/images/web_app.png similarity index 100% rename from docs/website/_site/images/web_app.png rename to docs/images/web_app.png diff --git a/docs/website/_site/index.html b/docs/index.html similarity index 100% rename from docs/website/_site/index.html rename to docs/index.html diff --git a/docs/website/_site/style.css b/docs/style.css similarity index 100% rename from docs/website/_site/style.css rename to docs/style.css diff --git a/docs/website/.bundle/config b/docs/website/.bundle/config deleted file mode 100644 index 2369228..0000000 --- a/docs/website/.bundle/config +++ /dev/null @@ -1,2 +0,0 @@ ---- -BUNDLE_PATH: "vendor/bundle" diff --git a/docs/website/Gemfile b/docs/website/Gemfile deleted file mode 100644 index d74d7c0..0000000 --- a/docs/website/Gemfile +++ /dev/null @@ -1,3 +0,0 @@ -source 'https://rubygems.org' -gem 'github-pages', group: :jekyll_plugins -gem 'webrick', '~> 1.7' diff --git a/docs/website/Gemfile.lock b/docs/website/Gemfile.lock deleted file mode 100644 index 025e7af..0000000 --- a/docs/website/Gemfile.lock +++ /dev/null @@ -1,272 +0,0 @@ -GEM - remote: https://rubygems.org/ - specs: - activesupport (7.1.1) - base64 - bigdecimal - concurrent-ruby (~> 1.0, >= 1.0.2) - connection_pool (>= 2.2.5) - drb - i18n (>= 1.6, < 2) - minitest (>= 5.1) - mutex_m - tzinfo (~> 2.0) - addressable (2.8.5) - public_suffix (>= 2.0.2, < 6.0) - base64 (0.1.1) - bigdecimal (3.1.4) - coffee-script (2.4.1) - coffee-script-source - execjs - coffee-script-source (1.11.1) - colorator (1.1.0) - commonmarker (0.23.10) - concurrent-ruby (1.2.2) - connection_pool (2.4.1) - dnsruby (1.70.0) - simpleidn (~> 0.2.1) - drb (2.1.1) - ruby2_keywords - em-websocket (0.5.3) - eventmachine (>= 0.12.9) - http_parser.rb (~> 0) - ethon (0.16.0) - ffi (>= 1.15.0) - eventmachine (1.2.7) - execjs (2.9.1) - faraday (2.7.11) - base64 - faraday-net_http (>= 2.0, < 3.1) - ruby2_keywords (>= 0.0.4) - faraday-net_http (3.0.2) - ffi (1.16.3) - forwardable-extended (2.6.0) - gemoji (3.0.1) - github-pages (228) - github-pages-health-check (= 1.17.9) - jekyll (= 3.9.3) - jekyll-avatar (= 0.7.0) - jekyll-coffeescript (= 1.1.1) - jekyll-commonmark-ghpages (= 0.4.0) - jekyll-default-layout (= 0.1.4) - jekyll-feed (= 0.15.1) - jekyll-gist (= 1.5.0) - jekyll-github-metadata (= 2.13.0) - jekyll-include-cache (= 0.2.1) - jekyll-mentions (= 1.6.0) - jekyll-optional-front-matter (= 0.3.2) - jekyll-paginate (= 1.1.0) - jekyll-readme-index (= 0.3.0) - jekyll-redirect-from (= 0.16.0) - jekyll-relative-links (= 0.6.1) - jekyll-remote-theme (= 0.4.3) - jekyll-sass-converter (= 1.5.2) - jekyll-seo-tag (= 2.8.0) - jekyll-sitemap (= 1.4.0) - jekyll-swiss (= 1.0.0) - jekyll-theme-architect (= 0.2.0) - jekyll-theme-cayman (= 0.2.0) - jekyll-theme-dinky (= 0.2.0) - jekyll-theme-hacker (= 0.2.0) - jekyll-theme-leap-day (= 0.2.0) - jekyll-theme-merlot (= 0.2.0) - jekyll-theme-midnight (= 0.2.0) - jekyll-theme-minimal (= 0.2.0) - jekyll-theme-modernist (= 0.2.0) - jekyll-theme-primer (= 0.6.0) - jekyll-theme-slate (= 0.2.0) - jekyll-theme-tactile (= 0.2.0) - jekyll-theme-time-machine (= 0.2.0) - jekyll-titles-from-headings (= 0.5.3) - jemoji (= 0.12.0) - kramdown (= 2.3.2) - kramdown-parser-gfm (= 1.1.0) - liquid (= 4.0.4) - mercenary (~> 0.3) - minima (= 2.5.1) - nokogiri (>= 1.13.6, < 2.0) - rouge (= 3.26.0) - terminal-table (~> 1.4) - github-pages-health-check (1.17.9) - addressable (~> 2.3) - dnsruby (~> 1.60) - octokit (~> 4.0) - public_suffix (>= 3.0, < 5.0) - typhoeus (~> 1.3) - html-pipeline (2.14.3) - activesupport (>= 2) - nokogiri (>= 1.4) - http_parser.rb (0.8.0) - i18n (1.14.1) - concurrent-ruby (~> 1.0) - jekyll (3.9.3) - addressable (~> 2.4) - colorator (~> 1.0) - em-websocket (~> 0.5) - i18n (>= 0.7, < 2) - jekyll-sass-converter (~> 1.0) - jekyll-watch (~> 2.0) - kramdown (>= 1.17, < 3) - liquid (~> 4.0) - mercenary (~> 0.3.3) - pathutil (~> 0.9) - rouge (>= 1.7, < 4) - safe_yaml (~> 1.0) - jekyll-avatar (0.7.0) - jekyll (>= 3.0, < 5.0) - jekyll-coffeescript (1.1.1) - coffee-script (~> 2.2) - coffee-script-source (~> 1.11.1) - jekyll-commonmark (1.4.0) - commonmarker (~> 0.22) - jekyll-commonmark-ghpages (0.4.0) - commonmarker (~> 0.23.7) - jekyll (~> 3.9.0) - jekyll-commonmark (~> 1.4.0) - rouge (>= 2.0, < 5.0) - jekyll-default-layout (0.1.4) - jekyll (~> 3.0) - jekyll-feed (0.15.1) - jekyll (>= 3.7, < 5.0) - jekyll-gist (1.5.0) - octokit (~> 4.2) - jekyll-github-metadata (2.13.0) - jekyll (>= 3.4, < 5.0) - octokit (~> 4.0, != 4.4.0) - jekyll-include-cache (0.2.1) - jekyll (>= 3.7, < 5.0) - jekyll-mentions (1.6.0) - html-pipeline (~> 2.3) - jekyll (>= 3.7, < 5.0) - jekyll-optional-front-matter (0.3.2) - jekyll (>= 3.0, < 5.0) - jekyll-paginate (1.1.0) - jekyll-readme-index (0.3.0) - jekyll (>= 3.0, < 5.0) - jekyll-redirect-from (0.16.0) - jekyll (>= 3.3, < 5.0) - jekyll-relative-links (0.6.1) - jekyll (>= 3.3, < 5.0) - jekyll-remote-theme (0.4.3) - addressable (~> 2.0) - jekyll (>= 3.5, < 5.0) - jekyll-sass-converter (>= 1.0, <= 3.0.0, != 2.0.0) - rubyzip (>= 1.3.0, < 3.0) - jekyll-sass-converter (1.5.2) - sass (~> 3.4) - jekyll-seo-tag (2.8.0) - jekyll (>= 3.8, < 5.0) - jekyll-sitemap (1.4.0) - jekyll (>= 3.7, < 5.0) - jekyll-swiss (1.0.0) - jekyll-theme-architect (0.2.0) - jekyll (> 3.5, < 5.0) - jekyll-seo-tag (~> 2.0) - jekyll-theme-cayman (0.2.0) - jekyll (> 3.5, < 5.0) - jekyll-seo-tag (~> 2.0) - jekyll-theme-dinky (0.2.0) - jekyll (> 3.5, < 5.0) - jekyll-seo-tag (~> 2.0) - jekyll-theme-hacker (0.2.0) - jekyll (> 3.5, < 5.0) - jekyll-seo-tag (~> 2.0) - jekyll-theme-leap-day (0.2.0) - jekyll (> 3.5, < 5.0) - jekyll-seo-tag (~> 2.0) - jekyll-theme-merlot (0.2.0) - jekyll (> 3.5, < 5.0) - jekyll-seo-tag (~> 2.0) - jekyll-theme-midnight (0.2.0) - jekyll (> 3.5, < 5.0) - jekyll-seo-tag (~> 2.0) - jekyll-theme-minimal (0.2.0) - jekyll (> 3.5, < 5.0) - jekyll-seo-tag (~> 2.0) - jekyll-theme-modernist (0.2.0) - jekyll (> 3.5, < 5.0) - jekyll-seo-tag (~> 2.0) - jekyll-theme-primer (0.6.0) - jekyll (> 3.5, < 5.0) - jekyll-github-metadata (~> 2.9) - jekyll-seo-tag (~> 2.0) - jekyll-theme-slate (0.2.0) - jekyll (> 3.5, < 5.0) - jekyll-seo-tag (~> 2.0) - jekyll-theme-tactile (0.2.0) - jekyll (> 3.5, < 5.0) - jekyll-seo-tag (~> 2.0) - jekyll-theme-time-machine (0.2.0) - jekyll (> 3.5, < 5.0) - jekyll-seo-tag (~> 2.0) - jekyll-titles-from-headings (0.5.3) - jekyll (>= 3.3, < 5.0) - jekyll-watch (2.2.1) - listen (~> 3.0) - jemoji (0.12.0) - gemoji (~> 3.0) - html-pipeline (~> 2.2) - jekyll (>= 3.0, < 5.0) - kramdown (2.3.2) - rexml - kramdown-parser-gfm (1.1.0) - kramdown (~> 2.0) - liquid (4.0.4) - listen (3.8.0) - rb-fsevent (~> 0.10, >= 0.10.3) - rb-inotify (~> 0.9, >= 0.9.10) - mercenary (0.3.6) - minima (2.5.1) - jekyll (>= 3.5, < 5.0) - jekyll-feed (~> 0.9) - jekyll-seo-tag (~> 2.1) - minitest (5.20.0) - mutex_m (0.1.2) - nokogiri (1.15.4-x86_64-linux) - racc (~> 1.4) - octokit (4.25.1) - faraday (>= 1, < 3) - sawyer (~> 0.9) - pathutil (0.16.2) - forwardable-extended (~> 2.6) - public_suffix (4.0.7) - racc (1.7.3) - rb-fsevent (0.11.2) - rb-inotify (0.10.1) - ffi (~> 1.0) - rexml (3.2.6) - rouge (3.26.0) - ruby2_keywords (0.0.5) - rubyzip (2.3.2) - safe_yaml (1.0.5) - sass (3.7.4) - sass-listen (~> 4.0.0) - sass-listen (4.0.0) - rb-fsevent (~> 0.9, >= 0.9.4) - rb-inotify (~> 0.9, >= 0.9.7) - sawyer (0.9.2) - addressable (>= 2.3.5) - faraday (>= 0.17.3, < 3) - simpleidn (0.2.1) - unf (~> 0.1.4) - terminal-table (1.8.0) - unicode-display_width (~> 1.1, >= 1.1.1) - typhoeus (1.4.0) - ethon (>= 0.9.0) - tzinfo (2.0.6) - concurrent-ruby (~> 1.0) - unf (0.1.4) - unf_ext - unf_ext (0.0.8.2) - unicode-display_width (1.8.0) - webrick (1.8.1) - -PLATFORMS - x86_64-linux - -DEPENDENCIES - github-pages - webrick (~> 1.7) - -BUNDLED WITH - 2.2.22 diff --git a/docs/website/_site/assets/css/style.css b/docs/website/_site/assets/css/style.css deleted file mode 100644 index bc2033b..0000000 --- a/docs/website/_site/assets/css/style.css +++ /dev/null @@ -1,2883 +0,0 @@ -/*! normalize.css v4.1.1 | MIT License | github.com/necolas/normalize.css */ -/** 1. Change the default font family in all browsers (opinionated). 2. Prevent adjustments of font size after orientation changes in IE and iOS. */ -html { font-family: sans-serif; /* 1 */ -ms-text-size-adjust: 100%; /* 2 */ -webkit-text-size-adjust: 100%; /* 2 */ } - -/** Remove the margin in all browsers (opinionated). */ -body { margin: 0; } - -/* HTML5 display definitions ========================================================================== */ -/** Add the correct display in IE 9-. 1. Add the correct display in Edge, IE, and Firefox. 2. Add the correct display in IE. */ -article, aside, details, figcaption, figure, footer, header, main, menu, nav, section { /* 1 */ display: block; } - -summary { display: list-item; } - -/** Add the correct display in IE 9-. */ -audio, canvas, progress, video { display: inline-block; } - -/** Add the correct display in iOS 4-7. */ -audio:not([controls]) { display: none; height: 0; } - -/** Add the correct vertical alignment in Chrome, Firefox, and Opera. */ -progress { vertical-align: baseline; } - -/** Add the correct display in IE 10-. 1. Add the correct display in IE. */ -template, [hidden] { display: none !important; } - -/* Links ========================================================================== */ -/** Remove the gray background on active links in IE 10. */ -a { background-color: transparent; /* 1 */ } - -/** Remove the outline on focused links when they are also active or hovered in all browsers (opinionated). */ -a:active, a:hover { outline-width: 0; } - -/* Text-level semantics ========================================================================== */ -/** 1. Remove the bottom border in Firefox 39-. 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari. */ -abbr[title] { border-bottom: none; /* 1 */ text-decoration: underline; /* 2 */ text-decoration: underline dotted; /* 2 */ } - -/** Prevent the duplicate application of `bolder` by the next rule in Safari 6. */ -b, strong { font-weight: inherit; } - -/** Add the correct font weight in Chrome, Edge, and Safari. */ -b, strong { font-weight: bolder; } - -/** Add the correct font style in Android 4.3-. */ -dfn { font-style: italic; } - -/** Correct the font size and margin on `h1` elements within `section` and `article` contexts in Chrome, Firefox, and Safari. */ -h1 { font-size: 2em; margin: 0.67em 0; } - -/** Add the correct background and color in IE 9-. */ -mark { background-color: #ff0; color: #000; } - -/** Add the correct font size in all browsers. */ -small { font-size: 80%; } - -/** Prevent `sub` and `sup` elements from affecting the line height in all browsers. */ -sub, sup { font-size: 75%; line-height: 0; position: relative; vertical-align: baseline; } - -sub { bottom: -0.25em; } - -sup { top: -0.5em; } - -/* Embedded content ========================================================================== */ -/** Remove the border on images inside links in IE 10-. */ -img { border-style: none; } - -/** Hide the overflow in IE. */ -svg:not(:root) { overflow: hidden; } - -/* Grouping content ========================================================================== */ -/** 1. Correct the inheritance and scaling of font size in all browsers. 2. Correct the odd `em` font sizing in all browsers. */ -code, kbd, pre, samp { font-family: monospace, monospace; /* 1 */ font-size: 1em; /* 2 */ } - -/** Add the correct margin in IE 8. */ -figure { margin: 1em 40px; } - -/** 1. Add the correct box sizing in Firefox. 2. Show the overflow in Edge and IE. */ -hr { box-sizing: content-box; /* 1 */ height: 0; /* 1 */ overflow: visible; /* 2 */ } - -/* Forms ========================================================================== */ -/** 1. Change font properties to `inherit` in all browsers (opinionated). 2. Remove the margin in Firefox and Safari. */ -button, input, select, textarea { font: inherit; /* 1 */ margin: 0; /* 2 */ } - -/** Restore the font weight unset by the previous rule. */ -optgroup { font-weight: bold; } - -/** Show the overflow in IE. 1. Show the overflow in Edge. */ -button, input { /* 1 */ overflow: visible; } - -/** Remove the inheritance of text transform in Edge, Firefox, and IE. 1. Remove the inheritance of text transform in Firefox. */ -button, select { /* 1 */ text-transform: none; } - -/** 1. Prevent a WebKit bug where (2) destroys native `audio` and `video` controls in Android 4. 2. Correct the inability to style clickable types in iOS and Safari. */ -button, html [type="button"], [type="reset"], [type="submit"] { -webkit-appearance: button; /* 2 */ } - -/** Remove the inner border and padding in Firefox. */ -button::-moz-focus-inner, [type="button"]::-moz-focus-inner, [type="reset"]::-moz-focus-inner, [type="submit"]::-moz-focus-inner { border-style: none; padding: 0; } - -/** Restore the focus styles unset by the previous rule. */ -button:-moz-focusring, [type="button"]:-moz-focusring, [type="reset"]:-moz-focusring, [type="submit"]:-moz-focusring { outline: 1px dotted ButtonText; } - -/** Change the border, margin, and padding in all browsers (opinionated). */ -fieldset { border: 1px solid #c0c0c0; margin: 0 2px; padding: 0.35em 0.625em 0.75em; } - -/** 1. Correct the text wrapping in Edge and IE. 2. Correct the color inheritance from `fieldset` elements in IE. 3. Remove the padding so developers are not caught out when they zero out `fieldset` elements in all browsers. */ -legend { box-sizing: border-box; /* 1 */ color: inherit; /* 2 */ display: table; /* 1 */ max-width: 100%; /* 1 */ padding: 0; /* 3 */ white-space: normal; /* 1 */ } - -/** Remove the default vertical scrollbar in IE. */ -textarea { overflow: auto; } - -/** 1. Add the correct box sizing in IE 10-. 2. Remove the padding in IE 10-. */ -[type="checkbox"], [type="radio"] { box-sizing: border-box; /* 1 */ padding: 0; /* 2 */ } - -/** Correct the cursor style of increment and decrement buttons in Chrome. */ -[type="number"]::-webkit-inner-spin-button, [type="number"]::-webkit-outer-spin-button { height: auto; } - -/** 1. Correct the odd appearance in Chrome and Safari. 2. Correct the outline style in Safari. */ -[type="search"] { -webkit-appearance: textfield; /* 1 */ outline-offset: -2px; /* 2 */ } - -/** Remove the inner padding and cancel buttons in Chrome and Safari on OS X. */ -[type="search"]::-webkit-search-cancel-button, [type="search"]::-webkit-search-decoration { -webkit-appearance: none; } - -/** Correct the text style of placeholders in Chrome, Edge, and Safari. */ -::-webkit-input-placeholder { color: inherit; opacity: 0.54; } - -/** 1. Correct the inability to style clickable types in iOS and Safari. 2. Change font properties to `inherit` in Safari. */ -::-webkit-file-upload-button { -webkit-appearance: button; /* 1 */ font: inherit; /* 2 */ } - -* { box-sizing: border-box; } - -input, select, textarea, button { font-family: inherit; font-size: inherit; line-height: inherit; } - -body { font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; font-size: 14px; line-height: 1.5; color: #24292e; background-color: #fff; } - -a { color: #0366d6; text-decoration: none; } -a:hover { text-decoration: underline; } - -b, strong { font-weight: 600; } - -hr, .rule { height: 0; margin: 15px 0; overflow: hidden; background: transparent; border: 0; border-bottom: 1px solid #dfe2e5; } -hr::before, .rule::before { display: table; content: ""; } -hr::after, .rule::after { display: table; clear: both; content: ""; } - -table { border-spacing: 0; border-collapse: collapse; } - -td, th { padding: 0; } - -button { cursor: pointer; border-radius: 0; } - -[hidden][hidden] { display: none !important; } - -details summary { cursor: pointer; } -details:not([open]) > *:not(summary) { display: none !important; } - -h1, h2, h3, h4, h5, h6 { margin-top: 0; margin-bottom: 0; } - -h1 { font-size: 32px; font-weight: 600; } - -h2 { font-size: 24px; font-weight: 600; } - -h3 { font-size: 20px; font-weight: 600; } - -h4 { font-size: 16px; font-weight: 600; } - -h5 { font-size: 14px; font-weight: 600; } - -h6 { font-size: 12px; font-weight: 600; } - -p { margin-top: 0; margin-bottom: 10px; } - -small { font-size: 90%; } - -blockquote { margin: 0; } - -ul, ol { padding-left: 0; margin-top: 0; margin-bottom: 0; } - -ol ol, ul ol { list-style-type: lower-roman; } - -ul ul ol, ul ol ol, ol ul ol, ol ol ol { list-style-type: lower-alpha; } - -dd { margin-left: 0; } - -tt, code { font-family: "SFMono-Regular", Consolas, "Liberation Mono", Menlo, Courier, monospace; font-size: 12px; } - -pre { margin-top: 0; margin-bottom: 0; font-family: "SFMono-Regular", Consolas, "Liberation Mono", Menlo, Courier, monospace; font-size: 12px; } - -.octicon { vertical-align: text-bottom; } - -/* Fade in an element */ -.anim-fade-in { animation-name: fade-in; animation-duration: 1s; animation-timing-function: ease-in-out; } -.anim-fade-in.fast { animation-duration: 300ms; } - -@keyframes fade-in { 0% { opacity: 0; } - 100% { opacity: 1; } } -/* Fade out an element */ -.anim-fade-out { animation-name: fade-out; animation-duration: 1s; animation-timing-function: ease-out; } -.anim-fade-out.fast { animation-duration: 0.3s; } - -@keyframes fade-out { 0% { opacity: 1; } - 100% { opacity: 0; } } -/* Fade in and slide up an element */ -.anim-fade-up { opacity: 0; animation-name: fade-up; animation-duration: 0.3s; animation-fill-mode: forwards; animation-timing-function: ease-out; animation-delay: 1s; } - -@keyframes fade-up { 0% { opacity: 0.8; transform: translateY(100%); } - 100% { opacity: 1; transform: translateY(0); } } -/* Fade an element out and slide down */ -.anim-fade-down { animation-name: fade-down; animation-duration: 0.3s; animation-fill-mode: forwards; animation-timing-function: ease-in; } - -@keyframes fade-down { 0% { opacity: 1; transform: translateY(0); } - 100% { opacity: 0.5; transform: translateY(100%); } } -/* Grow an element width from 0 to 100% */ -.anim-grow-x { width: 0%; animation-name: grow-x; animation-duration: 0.3s; animation-fill-mode: forwards; animation-timing-function: ease; animation-delay: 0.5s; } - -@keyframes grow-x { to { width: 100%; } } -/* Shrink an element from 100% to 0% */ -.anim-shrink-x { animation-name: shrink-x; animation-duration: 0.3s; animation-fill-mode: forwards; animation-timing-function: ease-in-out; animation-delay: 0.5s; } - -@keyframes shrink-x { to { width: 0%; } } -/* Fade in an element and scale it fast */ -.anim-scale-in { animation-name: scale-in; animation-duration: 0.15s; animation-timing-function: cubic-bezier(0.2, 0, 0.13, 1.5); } - -@keyframes scale-in { 0% { opacity: 0; transform: scale(0.5); } - 100% { opacity: 1; transform: scale(1); } } -/* Pulse an element's opacity */ -.anim-pulse { animation-name: pulse; animation-duration: 2s; animation-timing-function: linear; animation-iteration-count: infinite; } - -@keyframes pulse { 0% { opacity: 0.3; } - 10% { opacity: 1; } - 100% { opacity: 0.3; } } -/* Pulse in an element */ -.anim-pulse-in { animation-name: pulse-in; animation-duration: 0.5s; } - -@keyframes pulse-in { 0% { transform: scale3d(1, 1, 1); } - 50% { transform: scale3d(1.1, 1.1, 1.1); } - 100% { transform: scale3d(1, 1, 1); } } -/* Increase scale of an element on hover */ -.hover-grow { transition: transform 0.3s; backface-visibility: hidden; } -.hover-grow:hover { transform: scale(1.025); } - -/* Add a gray border on all sides */ -.border { border: 1px #e1e4e8 solid !important; } - -/* Add a gray border to the left and right */ -.border-y { border-top: 1px #e1e4e8 solid !important; border-bottom: 1px #e1e4e8 solid !important; } - -/* Remove borders from all sides */ -.border-0 { border: 0 !important; } - -.border-dashed { border-style: dashed !important; } - -/* Use with .border to turn the border blue */ -.border-blue { border-color: #0366d6 !important; } - -/* Use with .border to turn the border blue-light */ -.border-blue-light { border-color: #c8e1ff !important; } - -/* Use with .border to turn the border green */ -.border-green { border-color: #34d058 !important; } - -/* Use with .border to turn the border green light */ -.border-green-light { border-color: #a2cbac !important; } - -/* Use with .border to turn the border red */ -.border-red { border-color: #d73a49 !important; } - -/* Use with .border to turn the border red-light */ -.border-red-light { border-color: #cea0a5 !important; } - -/* Use with .border to turn the border purple */ -.border-purple { border-color: #6f42c1 !important; } - -/* Use with .border to turn the border yellow */ -.border-yellow { border-color: #d9d0a5 !important; } - -/* Use with .border to turn the border gray-light */ -.border-gray-light { border-color: #eaecef !important; } - -/* Use with .border to turn the border gray-dark */ -.border-gray-dark { border-color: #d1d5da !important; } - -/* Use with .border to turn the border rgba black 0.15 */ -.border-black-fade { border-color: rgba(27, 31, 35, 0.15) !important; } - -/* Add a gray border */ -/* Add a gray border to the top */ -.border-top { border-top: 1px #e1e4e8 solid !important; } - -/* Add a gray border to the right */ -.border-right { border-right: 1px #e1e4e8 solid !important; } - -/* Add a gray border to the bottom */ -.border-bottom { border-bottom: 1px #e1e4e8 solid !important; } - -/* Add a gray border to the left */ -.border-left { border-left: 1px #e1e4e8 solid !important; } - -/* Remove the top border */ -.border-top-0 { border-top: 0 !important; } - -/* Remove the right border */ -.border-right-0 { border-right: 0 !important; } - -/* Remove the bottom border */ -.border-bottom-0 { border-bottom: 0 !important; } - -/* Remove the left border */ -.border-left-0 { border-left: 0 !important; } - -/* Remove the border-radius */ -.rounded-0 { border-radius: 0 !important; } - -/* Add a border-radius to all corners */ -.rounded-1 { border-radius: 3px !important; } - -/* Add a 2x border-radius to all corners */ -.rounded-2 { border-radius: 6px !important; } - -.rounded-top-0 { border-top-left-radius: 0 !important; border-top-right-radius: 0 !important; } - -.rounded-top-1 { border-top-left-radius: 3px !important; border-top-right-radius: 3px !important; } - -.rounded-top-2 { border-top-left-radius: 6px !important; border-top-right-radius: 6px !important; } - -.rounded-right-0 { border-top-right-radius: 0 !important; border-bottom-right-radius: 0 !important; } - -.rounded-right-1 { border-top-right-radius: 3px !important; border-bottom-right-radius: 3px !important; } - -.rounded-right-2 { border-top-right-radius: 6px !important; border-bottom-right-radius: 6px !important; } - -.rounded-bottom-0 { border-bottom-right-radius: 0 !important; border-bottom-left-radius: 0 !important; } - -.rounded-bottom-1 { border-bottom-right-radius: 3px !important; border-bottom-left-radius: 3px !important; } - -.rounded-bottom-2 { border-bottom-right-radius: 6px !important; border-bottom-left-radius: 6px !important; } - -.rounded-left-0 { border-bottom-left-radius: 0 !important; border-top-left-radius: 0 !important; } - -.rounded-left-1 { border-bottom-left-radius: 3px !important; border-top-left-radius: 3px !important; } - -.rounded-left-2 { border-bottom-left-radius: 6px !important; border-top-left-radius: 6px !important; } - -@media (min-width: 544px) { /* Add a gray border */ - /* Add a gray border to the top */ - .border-sm-top { border-top: 1px #e1e4e8 solid !important; } - /* Add a gray border to the right */ - .border-sm-right { border-right: 1px #e1e4e8 solid !important; } - /* Add a gray border to the bottom */ - .border-sm-bottom { border-bottom: 1px #e1e4e8 solid !important; } - /* Add a gray border to the left */ - .border-sm-left { border-left: 1px #e1e4e8 solid !important; } - /* Remove the top border */ - .border-sm-top-0 { border-top: 0 !important; } - /* Remove the right border */ - .border-sm-right-0 { border-right: 0 !important; } - /* Remove the bottom border */ - .border-sm-bottom-0 { border-bottom: 0 !important; } - /* Remove the left border */ - .border-sm-left-0 { border-left: 0 !important; } - /* Remove the border-radius */ - .rounded-sm-0 { border-radius: 0 !important; } - /* Add a border-radius to all corners */ - .rounded-sm-1 { border-radius: 3px !important; } - /* Add a 2x border-radius to all corners */ - .rounded-sm-2 { border-radius: 6px !important; } - .rounded-sm-top-0 { border-top-left-radius: 0 !important; border-top-right-radius: 0 !important; } - .rounded-sm-top-1 { border-top-left-radius: 3px !important; border-top-right-radius: 3px !important; } - .rounded-sm-top-2 { border-top-left-radius: 6px !important; border-top-right-radius: 6px !important; } - .rounded-sm-right-0 { border-top-right-radius: 0 !important; border-bottom-right-radius: 0 !important; } - .rounded-sm-right-1 { border-top-right-radius: 3px !important; border-bottom-right-radius: 3px !important; } - .rounded-sm-right-2 { border-top-right-radius: 6px !important; border-bottom-right-radius: 6px !important; } - .rounded-sm-bottom-0 { border-bottom-right-radius: 0 !important; border-bottom-left-radius: 0 !important; } - .rounded-sm-bottom-1 { border-bottom-right-radius: 3px !important; border-bottom-left-radius: 3px !important; } - .rounded-sm-bottom-2 { border-bottom-right-radius: 6px !important; border-bottom-left-radius: 6px !important; } - .rounded-sm-left-0 { border-bottom-left-radius: 0 !important; border-top-left-radius: 0 !important; } - .rounded-sm-left-1 { border-bottom-left-radius: 3px !important; border-top-left-radius: 3px !important; } - .rounded-sm-left-2 { border-bottom-left-radius: 6px !important; border-top-left-radius: 6px !important; } } -@media (min-width: 768px) { /* Add a gray border */ - /* Add a gray border to the top */ - .border-md-top { border-top: 1px #e1e4e8 solid !important; } - /* Add a gray border to the right */ - .border-md-right { border-right: 1px #e1e4e8 solid !important; } - /* Add a gray border to the bottom */ - .border-md-bottom { border-bottom: 1px #e1e4e8 solid !important; } - /* Add a gray border to the left */ - .border-md-left { border-left: 1px #e1e4e8 solid !important; } - /* Remove the top border */ - .border-md-top-0 { border-top: 0 !important; } - /* Remove the right border */ - .border-md-right-0 { border-right: 0 !important; } - /* Remove the bottom border */ - .border-md-bottom-0 { border-bottom: 0 !important; } - /* Remove the left border */ - .border-md-left-0 { border-left: 0 !important; } - /* Remove the border-radius */ - .rounded-md-0 { border-radius: 0 !important; } - /* Add a border-radius to all corners */ - .rounded-md-1 { border-radius: 3px !important; } - /* Add a 2x border-radius to all corners */ - .rounded-md-2 { border-radius: 6px !important; } - .rounded-md-top-0 { border-top-left-radius: 0 !important; border-top-right-radius: 0 !important; } - .rounded-md-top-1 { border-top-left-radius: 3px !important; border-top-right-radius: 3px !important; } - .rounded-md-top-2 { border-top-left-radius: 6px !important; border-top-right-radius: 6px !important; } - .rounded-md-right-0 { border-top-right-radius: 0 !important; border-bottom-right-radius: 0 !important; } - .rounded-md-right-1 { border-top-right-radius: 3px !important; border-bottom-right-radius: 3px !important; } - .rounded-md-right-2 { border-top-right-radius: 6px !important; border-bottom-right-radius: 6px !important; } - .rounded-md-bottom-0 { border-bottom-right-radius: 0 !important; border-bottom-left-radius: 0 !important; } - .rounded-md-bottom-1 { border-bottom-right-radius: 3px !important; border-bottom-left-radius: 3px !important; } - .rounded-md-bottom-2 { border-bottom-right-radius: 6px !important; border-bottom-left-radius: 6px !important; } - .rounded-md-left-0 { border-bottom-left-radius: 0 !important; border-top-left-radius: 0 !important; } - .rounded-md-left-1 { border-bottom-left-radius: 3px !important; border-top-left-radius: 3px !important; } - .rounded-md-left-2 { border-bottom-left-radius: 6px !important; border-top-left-radius: 6px !important; } } -@media (min-width: 1012px) { /* Add a gray border */ - /* Add a gray border to the top */ - .border-lg-top { border-top: 1px #e1e4e8 solid !important; } - /* Add a gray border to the right */ - .border-lg-right { border-right: 1px #e1e4e8 solid !important; } - /* Add a gray border to the bottom */ - .border-lg-bottom { border-bottom: 1px #e1e4e8 solid !important; } - /* Add a gray border to the left */ - .border-lg-left { border-left: 1px #e1e4e8 solid !important; } - /* Remove the top border */ - .border-lg-top-0 { border-top: 0 !important; } - /* Remove the right border */ - .border-lg-right-0 { border-right: 0 !important; } - /* Remove the bottom border */ - .border-lg-bottom-0 { border-bottom: 0 !important; } - /* Remove the left border */ - .border-lg-left-0 { border-left: 0 !important; } - /* Remove the border-radius */ - .rounded-lg-0 { border-radius: 0 !important; } - /* Add a border-radius to all corners */ - .rounded-lg-1 { border-radius: 3px !important; } - /* Add a 2x border-radius to all corners */ - .rounded-lg-2 { border-radius: 6px !important; } - .rounded-lg-top-0 { border-top-left-radius: 0 !important; border-top-right-radius: 0 !important; } - .rounded-lg-top-1 { border-top-left-radius: 3px !important; border-top-right-radius: 3px !important; } - .rounded-lg-top-2 { border-top-left-radius: 6px !important; border-top-right-radius: 6px !important; } - .rounded-lg-right-0 { border-top-right-radius: 0 !important; border-bottom-right-radius: 0 !important; } - .rounded-lg-right-1 { border-top-right-radius: 3px !important; border-bottom-right-radius: 3px !important; } - .rounded-lg-right-2 { border-top-right-radius: 6px !important; border-bottom-right-radius: 6px !important; } - .rounded-lg-bottom-0 { border-bottom-right-radius: 0 !important; border-bottom-left-radius: 0 !important; } - .rounded-lg-bottom-1 { border-bottom-right-radius: 3px !important; border-bottom-left-radius: 3px !important; } - .rounded-lg-bottom-2 { border-bottom-right-radius: 6px !important; border-bottom-left-radius: 6px !important; } - .rounded-lg-left-0 { border-bottom-left-radius: 0 !important; border-top-left-radius: 0 !important; } - .rounded-lg-left-1 { border-bottom-left-radius: 3px !important; border-top-left-radius: 3px !important; } - .rounded-lg-left-2 { border-bottom-left-radius: 6px !important; border-top-left-radius: 6px !important; } } -@media (min-width: 1280px) { /* Add a gray border */ - /* Add a gray border to the top */ - .border-xl-top { border-top: 1px #e1e4e8 solid !important; } - /* Add a gray border to the right */ - .border-xl-right { border-right: 1px #e1e4e8 solid !important; } - /* Add a gray border to the bottom */ - .border-xl-bottom { border-bottom: 1px #e1e4e8 solid !important; } - /* Add a gray border to the left */ - .border-xl-left { border-left: 1px #e1e4e8 solid !important; } - /* Remove the top border */ - .border-xl-top-0 { border-top: 0 !important; } - /* Remove the right border */ - .border-xl-right-0 { border-right: 0 !important; } - /* Remove the bottom border */ - .border-xl-bottom-0 { border-bottom: 0 !important; } - /* Remove the left border */ - .border-xl-left-0 { border-left: 0 !important; } - /* Remove the border-radius */ - .rounded-xl-0 { border-radius: 0 !important; } - /* Add a border-radius to all corners */ - .rounded-xl-1 { border-radius: 3px !important; } - /* Add a 2x border-radius to all corners */ - .rounded-xl-2 { border-radius: 6px !important; } - .rounded-xl-top-0 { border-top-left-radius: 0 !important; border-top-right-radius: 0 !important; } - .rounded-xl-top-1 { border-top-left-radius: 3px !important; border-top-right-radius: 3px !important; } - .rounded-xl-top-2 { border-top-left-radius: 6px !important; border-top-right-radius: 6px !important; } - .rounded-xl-right-0 { border-top-right-radius: 0 !important; border-bottom-right-radius: 0 !important; } - .rounded-xl-right-1 { border-top-right-radius: 3px !important; border-bottom-right-radius: 3px !important; } - .rounded-xl-right-2 { border-top-right-radius: 6px !important; border-bottom-right-radius: 6px !important; } - .rounded-xl-bottom-0 { border-bottom-right-radius: 0 !important; border-bottom-left-radius: 0 !important; } - .rounded-xl-bottom-1 { border-bottom-right-radius: 3px !important; border-bottom-left-radius: 3px !important; } - .rounded-xl-bottom-2 { border-bottom-right-radius: 6px !important; border-bottom-left-radius: 6px !important; } - .rounded-xl-left-0 { border-bottom-left-radius: 0 !important; border-top-left-radius: 0 !important; } - .rounded-xl-left-1 { border-bottom-left-radius: 3px !important; border-top-left-radius: 3px !important; } - .rounded-xl-left-2 { border-bottom-left-radius: 6px !important; border-top-left-radius: 6px !important; } } -/* Add a 50% border-radius to make something into a circle */ -.circle { border-radius: 50% !important; } - -.box-shadow { box-shadow: 0 1px 1px rgba(27, 31, 35, 0.1) !important; } - -.box-shadow-medium { box-shadow: 0 1px 5px rgba(27, 31, 35, 0.15) !important; } - -.box-shadow-large { box-shadow: 0 1px 15px rgba(27, 31, 35, 0.15) !important; } - -.box-shadow-extra-large { box-shadow: 0 10px 50px rgba(27, 31, 35, 0.07) !important; } - -.box-shadow-none { box-shadow: none !important; } - -/* Set the background to $bg-white */ -.bg-white { background-color: #fff !important; } - -/* Set the background to $bg-blue */ -.bg-blue { background-color: #0366d6 !important; } - -/* Set the background to $bg-blue-light */ -.bg-blue-light { background-color: #f1f8ff !important; } - -/* Set the background to $bg-gray-dark */ -.bg-gray-dark { background-color: #24292e !important; } - -/* Set the background to $bg-gray */ -.bg-gray { background-color: #f6f8fa !important; } - -/* Set the background to $bg-gray-light */ -.bg-gray-light { background-color: #fafbfc !important; } - -/* Set the background to $bg-green */ -.bg-green { background-color: #28a745 !important; } - -/* Set the background to $bg-green-light */ -.bg-green-light { background-color: #dcffe4 !important; } - -/* Set the background to $bg-red */ -.bg-red { background-color: #d73a49 !important; } - -/* Set the background to $bg-red-light */ -.bg-red-light { background-color: #ffdce0 !important; } - -/* Set the background to $bg-yellow */ -.bg-yellow { background-color: #ffd33d !important; } - -/* Set the background to $bg-yellow-light */ -.bg-yellow-light { background-color: #fff5b1 !important; } - -/* Set the background to $bg-purple */ -.bg-purple { background-color: #6f42c1 !important; } - -/* Set the background to $bg-purple-light */ -.bg-purple-light { background-color: #f5f0ff !important; } - -.bg-shade-gradient { background-image: linear-gradient(180deg, rgba(27, 31, 35, 0.065), rgba(27, 31, 35, 0)) !important; background-repeat: no-repeat !important; background-size: 100% 200px !important; } - -/* Set the text color to $text-blue */ -.text-blue { color: #0366d6 !important; } - -/* Set the text color to $text-red */ -.text-red { color: #cb2431 !important; } - -/* Set the text color to $text-gray-light */ -.text-gray-light { color: #6a737d !important; } - -/* Set the text color to $text-gray */ -.text-gray { color: #586069 !important; } - -/* Set the text color to $text-gray-dark */ -.text-gray-dark { color: #24292e !important; } - -/* Set the text color to $text-green */ -.text-green { color: #28a745 !important; } - -/* Set the text color to $text-orange */ -.text-orange { color: #a04100 !important; } - -/* Set the text color to $text-orange-light */ -.text-orange-light { color: #e36209 !important; } - -/* Set the text color to $text-purple */ -.text-purple { color: #6f42c1 !important; } - -/* Set the text color to $text-white */ -.text-white { color: #fff !important; } - -/* Set the text color to inherit */ -.text-inherit { color: inherit !important; } - -.text-pending { color: #b08800 !important; } - -.bg-pending { color: #dbab09 !important; } - -.link-gray { color: #586069 !important; } -.link-gray:hover { color: #0366d6 !important; } - -.link-gray-dark { color: #24292e !important; } -.link-gray-dark:hover { color: #0366d6 !important; } - -/* Set the link color to $text-blue on hover Useful when you want only part of a link to turn blue on hover */ -.link-hover-blue:hover { color: #0366d6 !important; } - -/* Make a link $text-gray, then $text-blue on hover and removes the underline */ -.muted-link { color: #586069 !important; } -.muted-link:hover { color: #0366d6 !important; text-decoration: none; } - -.details-overlay[open] > summary::before { position: fixed; top: 0; right: 0; bottom: 0; left: 0; z-index: 80; display: block; cursor: default; content: " "; background: transparent; } - -.details-overlay-dark[open] > summary::before { z-index: 99; background: rgba(27, 31, 35, 0.5); } - -.flex-row { flex-direction: row !important; } - -.flex-row-reverse { flex-direction: row-reverse !important; } - -.flex-column { flex-direction: column !important; } - -.flex-wrap { flex-wrap: wrap !important; } - -.flex-nowrap { flex-wrap: nowrap !important; } - -.flex-justify-start { justify-content: flex-start !important; } - -.flex-justify-end { justify-content: flex-end !important; } - -.flex-justify-center { justify-content: center !important; } - -.flex-justify-between { justify-content: space-between !important; } - -.flex-justify-around { justify-content: space-around !important; } - -.flex-items-start { align-items: flex-start !important; } - -.flex-items-end { align-items: flex-end !important; } - -.flex-items-center { align-items: center !important; } - -.flex-items-baseline { align-items: baseline !important; } - -.flex-items-stretch { align-items: stretch !important; } - -.flex-content-start { align-content: flex-start !important; } - -.flex-content-end { align-content: flex-end !important; } - -.flex-content-center { align-content: center !important; } - -.flex-content-between { align-content: space-between !important; } - -.flex-content-around { align-content: space-around !important; } - -.flex-content-stretch { align-content: stretch !important; } - -.flex-auto { flex: 1 1 auto !important; } - -.flex-shrink-0 { flex-shrink: 0 !important; } - -.flex-self-auto { align-self: auto !important; } - -.flex-self-start { align-self: flex-start !important; } - -.flex-self-end { align-self: flex-end !important; } - -.flex-self-center { align-self: center !important; } - -.flex-self-baseline { align-self: baseline !important; } - -.flex-self-stretch { align-self: stretch !important; } - -.flex-item-equal { flex-grow: 1; flex-basis: 0; } - -@media (min-width: 544px) { .flex-sm-row { flex-direction: row !important; } - .flex-sm-row-reverse { flex-direction: row-reverse !important; } - .flex-sm-column { flex-direction: column !important; } - .flex-sm-wrap { flex-wrap: wrap !important; } - .flex-sm-nowrap { flex-wrap: nowrap !important; } - .flex-sm-justify-start { justify-content: flex-start !important; } - .flex-sm-justify-end { justify-content: flex-end !important; } - .flex-sm-justify-center { justify-content: center !important; } - .flex-sm-justify-between { justify-content: space-between !important; } - .flex-sm-justify-around { justify-content: space-around !important; } - .flex-sm-items-start { align-items: flex-start !important; } - .flex-sm-items-end { align-items: flex-end !important; } - .flex-sm-items-center { align-items: center !important; } - .flex-sm-items-baseline { align-items: baseline !important; } - .flex-sm-items-stretch { align-items: stretch !important; } - .flex-sm-content-start { align-content: flex-start !important; } - .flex-sm-content-end { align-content: flex-end !important; } - .flex-sm-content-center { align-content: center !important; } - .flex-sm-content-between { align-content: space-between !important; } - .flex-sm-content-around { align-content: space-around !important; } - .flex-sm-content-stretch { align-content: stretch !important; } - .flex-sm-auto { flex: 1 1 auto !important; } - .flex-sm-shrink-0 { flex-shrink: 0 !important; } - .flex-sm-self-auto { align-self: auto !important; } - .flex-sm-self-start { align-self: flex-start !important; } - .flex-sm-self-end { align-self: flex-end !important; } - .flex-sm-self-center { align-self: center !important; } - .flex-sm-self-baseline { align-self: baseline !important; } - .flex-sm-self-stretch { align-self: stretch !important; } - .flex-sm-item-equal { flex-grow: 1; flex-basis: 0; } } -@media (min-width: 768px) { .flex-md-row { flex-direction: row !important; } - .flex-md-row-reverse { flex-direction: row-reverse !important; } - .flex-md-column { flex-direction: column !important; } - .flex-md-wrap { flex-wrap: wrap !important; } - .flex-md-nowrap { flex-wrap: nowrap !important; } - .flex-md-justify-start { justify-content: flex-start !important; } - .flex-md-justify-end { justify-content: flex-end !important; } - .flex-md-justify-center { justify-content: center !important; } - .flex-md-justify-between { justify-content: space-between !important; } - .flex-md-justify-around { justify-content: space-around !important; } - .flex-md-items-start { align-items: flex-start !important; } - .flex-md-items-end { align-items: flex-end !important; } - .flex-md-items-center { align-items: center !important; } - .flex-md-items-baseline { align-items: baseline !important; } - .flex-md-items-stretch { align-items: stretch !important; } - .flex-md-content-start { align-content: flex-start !important; } - .flex-md-content-end { align-content: flex-end !important; } - .flex-md-content-center { align-content: center !important; } - .flex-md-content-between { align-content: space-between !important; } - .flex-md-content-around { align-content: space-around !important; } - .flex-md-content-stretch { align-content: stretch !important; } - .flex-md-auto { flex: 1 1 auto !important; } - .flex-md-shrink-0 { flex-shrink: 0 !important; } - .flex-md-self-auto { align-self: auto !important; } - .flex-md-self-start { align-self: flex-start !important; } - .flex-md-self-end { align-self: flex-end !important; } - .flex-md-self-center { align-self: center !important; } - .flex-md-self-baseline { align-self: baseline !important; } - .flex-md-self-stretch { align-self: stretch !important; } - .flex-md-item-equal { flex-grow: 1; flex-basis: 0; } } -@media (min-width: 1012px) { .flex-lg-row { flex-direction: row !important; } - .flex-lg-row-reverse { flex-direction: row-reverse !important; } - .flex-lg-column { flex-direction: column !important; } - .flex-lg-wrap { flex-wrap: wrap !important; } - .flex-lg-nowrap { flex-wrap: nowrap !important; } - .flex-lg-justify-start { justify-content: flex-start !important; } - .flex-lg-justify-end { justify-content: flex-end !important; } - .flex-lg-justify-center { justify-content: center !important; } - .flex-lg-justify-between { justify-content: space-between !important; } - .flex-lg-justify-around { justify-content: space-around !important; } - .flex-lg-items-start { align-items: flex-start !important; } - .flex-lg-items-end { align-items: flex-end !important; } - .flex-lg-items-center { align-items: center !important; } - .flex-lg-items-baseline { align-items: baseline !important; } - .flex-lg-items-stretch { align-items: stretch !important; } - .flex-lg-content-start { align-content: flex-start !important; } - .flex-lg-content-end { align-content: flex-end !important; } - .flex-lg-content-center { align-content: center !important; } - .flex-lg-content-between { align-content: space-between !important; } - .flex-lg-content-around { align-content: space-around !important; } - .flex-lg-content-stretch { align-content: stretch !important; } - .flex-lg-auto { flex: 1 1 auto !important; } - .flex-lg-shrink-0 { flex-shrink: 0 !important; } - .flex-lg-self-auto { align-self: auto !important; } - .flex-lg-self-start { align-self: flex-start !important; } - .flex-lg-self-end { align-self: flex-end !important; } - .flex-lg-self-center { align-self: center !important; } - .flex-lg-self-baseline { align-self: baseline !important; } - .flex-lg-self-stretch { align-self: stretch !important; } - .flex-lg-item-equal { flex-grow: 1; flex-basis: 0; } } -@media (min-width: 1280px) { .flex-xl-row { flex-direction: row !important; } - .flex-xl-row-reverse { flex-direction: row-reverse !important; } - .flex-xl-column { flex-direction: column !important; } - .flex-xl-wrap { flex-wrap: wrap !important; } - .flex-xl-nowrap { flex-wrap: nowrap !important; } - .flex-xl-justify-start { justify-content: flex-start !important; } - .flex-xl-justify-end { justify-content: flex-end !important; } - .flex-xl-justify-center { justify-content: center !important; } - .flex-xl-justify-between { justify-content: space-between !important; } - .flex-xl-justify-around { justify-content: space-around !important; } - .flex-xl-items-start { align-items: flex-start !important; } - .flex-xl-items-end { align-items: flex-end !important; } - .flex-xl-items-center { align-items: center !important; } - .flex-xl-items-baseline { align-items: baseline !important; } - .flex-xl-items-stretch { align-items: stretch !important; } - .flex-xl-content-start { align-content: flex-start !important; } - .flex-xl-content-end { align-content: flex-end !important; } - .flex-xl-content-center { align-content: center !important; } - .flex-xl-content-between { align-content: space-between !important; } - .flex-xl-content-around { align-content: space-around !important; } - .flex-xl-content-stretch { align-content: stretch !important; } - .flex-xl-auto { flex: 1 1 auto !important; } - .flex-xl-shrink-0 { flex-shrink: 0 !important; } - .flex-xl-self-auto { align-self: auto !important; } - .flex-xl-self-start { align-self: flex-start !important; } - .flex-xl-self-end { align-self: flex-end !important; } - .flex-xl-self-center { align-self: center !important; } - .flex-xl-self-baseline { align-self: baseline !important; } - .flex-xl-self-stretch { align-self: stretch !important; } - .flex-xl-item-equal { flex-grow: 1; flex-basis: 0; } } -/* Set position to static */ -.position-static { position: static !important; } - -/* Set position to relative */ -.position-relative { position: relative !important; } - -/* Set position to absolute */ -.position-absolute { position: absolute !important; } - -/* Set position to fixed */ -.position-fixed { position: fixed !important; } - -/* Set top 0 */ -.top-0 { top: 0 !important; } - -/* Set right 0 */ -.right-0 { right: 0 !important; } - -/* Set bottom 0 */ -.bottom-0 { bottom: 0 !important; } - -/* Set left 0 */ -.left-0 { left: 0 !important; } - -/* Vertical align middle */ -.v-align-middle { vertical-align: middle !important; } - -/* Vertical align top */ -.v-align-top { vertical-align: top !important; } - -/* Vertical align bottom */ -.v-align-bottom { vertical-align: bottom !important; } - -/* Vertical align to the top of the text */ -.v-align-text-top { vertical-align: text-top !important; } - -/* Vertical align to the bottom of the text */ -.v-align-text-bottom { vertical-align: text-bottom !important; } - -/* Vertical align to the parent's baseline */ -.v-align-baseline { vertical-align: baseline !important; } - -/* Set the overflow hidden */ -.overflow-hidden { overflow: hidden !important; } - -/* Set the overflow scroll */ -.overflow-scroll { overflow: scroll !important; } - -/* Set the overflow auto */ -.overflow-auto { overflow: auto !important; } - -/* Clear floats around the element */ -.clearfix::before { display: table; content: ""; } -.clearfix::after { display: table; clear: both; content: ""; } - -/* Float to the left */ -.float-left { float: left !important; } - -/* Float to the right */ -.float-right { float: right !important; } - -/* No float */ -.float-none { float: none !important; } - -@media (min-width: 544px) { /* Float to the left */ - .float-sm-left { float: left !important; } - /* Float to the right */ - .float-sm-right { float: right !important; } - /* No float */ - .float-sm-none { float: none !important; } } -@media (min-width: 768px) { /* Float to the left */ - .float-md-left { float: left !important; } - /* Float to the right */ - .float-md-right { float: right !important; } - /* No float */ - .float-md-none { float: none !important; } } -@media (min-width: 1012px) { /* Float to the left */ - .float-lg-left { float: left !important; } - /* Float to the right */ - .float-lg-right { float: right !important; } - /* No float */ - .float-lg-none { float: none !important; } } -@media (min-width: 1280px) { /* Float to the left */ - .float-xl-left { float: left !important; } - /* Float to the right */ - .float-xl-right { float: right !important; } - /* No float */ - .float-xl-none { float: none !important; } } -/* Max width 100% */ -.width-fit { max-width: 100% !important; } - -/* Set the width to 100% */ -.width-full { width: 100% !important; } - -/* Max height 100% */ -.height-fit { max-height: 100% !important; } - -/* Set the height to 100% */ -.height-full { height: 100% !important; } - -/* Remove min-width from element */ -.min-width-0 { min-width: 0 !important; } - -/* Set the direction to rtl */ -.direction-rtl { direction: rtl !important; } - -/* Set the direction to ltr */ -.direction-ltr { direction: ltr !important; } - -@media (min-width: 544px) { /* Set the direction to rtl */ - .direction-sm-rtl { direction: rtl !important; } - /* Set the direction to ltr */ - .direction-sm-ltr { direction: ltr !important; } } -@media (min-width: 768px) { /* Set the direction to rtl */ - .direction-md-rtl { direction: rtl !important; } - /* Set the direction to ltr */ - .direction-md-ltr { direction: ltr !important; } } -@media (min-width: 1012px) { /* Set the direction to rtl */ - .direction-lg-rtl { direction: rtl !important; } - /* Set the direction to ltr */ - .direction-lg-ltr { direction: ltr !important; } } -@media (min-width: 1280px) { /* Set the direction to rtl */ - .direction-xl-rtl { direction: rtl !important; } - /* Set the direction to ltr */ - .direction-xl-ltr { direction: ltr !important; } } -/* Set a $size margin to all sides at $breakpoint */ -.m-0 { margin: 0 !important; } - -/* Set a $size margin on the top at $breakpoint */ -.mt-0 { margin-top: 0 !important; } - -/* Set a $size margin on the right at $breakpoint */ -.mr-0 { margin-right: 0 !important; } - -/* Set a $size margin on the bottom at $breakpoint */ -.mb-0 { margin-bottom: 0 !important; } - -/* Set a $size margin on the left at $breakpoint */ -.ml-0 { margin-left: 0 !important; } - -/* Set a $size margin on the left & right at $breakpoint */ -.mx-0 { margin-right: 0 !important; margin-left: 0 !important; } - -/* Set a $size margin on the top & bottom at $breakpoint */ -.my-0 { margin-top: 0 !important; margin-bottom: 0 !important; } - -/* Set a $size margin to all sides at $breakpoint */ -.m-1 { margin: 4px !important; } - -/* Set a $size margin on the top at $breakpoint */ -.mt-1 { margin-top: 4px !important; } - -/* Set a $size margin on the right at $breakpoint */ -.mr-1 { margin-right: 4px !important; } - -/* Set a $size margin on the bottom at $breakpoint */ -.mb-1 { margin-bottom: 4px !important; } - -/* Set a $size margin on the left at $breakpoint */ -.ml-1 { margin-left: 4px !important; } - -/* Set a negative $size margin on top at $breakpoint */ -.mt-n1 { margin-top: -4px !important; } - -/* Set a negative $size margin on the right at $breakpoint */ -.mr-n1 { margin-right: -4px !important; } - -/* Set a negative $size margin on the bottom at $breakpoint */ -.mb-n1 { margin-bottom: -4px !important; } - -/* Set a negative $size margin on the left at $breakpoint */ -.ml-n1 { margin-left: -4px !important; } - -/* Set a $size margin on the left & right at $breakpoint */ -.mx-1 { margin-right: 4px !important; margin-left: 4px !important; } - -/* Set a $size margin on the top & bottom at $breakpoint */ -.my-1 { margin-top: 4px !important; margin-bottom: 4px !important; } - -/* Set a $size margin to all sides at $breakpoint */ -.m-2 { margin: 8px !important; } - -/* Set a $size margin on the top at $breakpoint */ -.mt-2 { margin-top: 8px !important; } - -/* Set a $size margin on the right at $breakpoint */ -.mr-2 { margin-right: 8px !important; } - -/* Set a $size margin on the bottom at $breakpoint */ -.mb-2 { margin-bottom: 8px !important; } - -/* Set a $size margin on the left at $breakpoint */ -.ml-2 { margin-left: 8px !important; } - -/* Set a negative $size margin on top at $breakpoint */ -.mt-n2 { margin-top: -8px !important; } - -/* Set a negative $size margin on the right at $breakpoint */ -.mr-n2 { margin-right: -8px !important; } - -/* Set a negative $size margin on the bottom at $breakpoint */ -.mb-n2 { margin-bottom: -8px !important; } - -/* Set a negative $size margin on the left at $breakpoint */ -.ml-n2 { margin-left: -8px !important; } - -/* Set a $size margin on the left & right at $breakpoint */ -.mx-2 { margin-right: 8px !important; margin-left: 8px !important; } - -/* Set a $size margin on the top & bottom at $breakpoint */ -.my-2 { margin-top: 8px !important; margin-bottom: 8px !important; } - -/* Set a $size margin to all sides at $breakpoint */ -.m-3 { margin: 16px !important; } - -/* Set a $size margin on the top at $breakpoint */ -.mt-3 { margin-top: 16px !important; } - -/* Set a $size margin on the right at $breakpoint */ -.mr-3 { margin-right: 16px !important; } - -/* Set a $size margin on the bottom at $breakpoint */ -.mb-3 { margin-bottom: 16px !important; } - -/* Set a $size margin on the left at $breakpoint */ -.ml-3 { margin-left: 16px !important; } - -/* Set a negative $size margin on top at $breakpoint */ -.mt-n3 { margin-top: -16px !important; } - -/* Set a negative $size margin on the right at $breakpoint */ -.mr-n3 { margin-right: -16px !important; } - -/* Set a negative $size margin on the bottom at $breakpoint */ -.mb-n3 { margin-bottom: -16px !important; } - -/* Set a negative $size margin on the left at $breakpoint */ -.ml-n3 { margin-left: -16px !important; } - -/* Set a $size margin on the left & right at $breakpoint */ -.mx-3 { margin-right: 16px !important; margin-left: 16px !important; } - -/* Set a $size margin on the top & bottom at $breakpoint */ -.my-3 { margin-top: 16px !important; margin-bottom: 16px !important; } - -/* Set a $size margin to all sides at $breakpoint */ -.m-4 { margin: 24px !important; } - -/* Set a $size margin on the top at $breakpoint */ -.mt-4 { margin-top: 24px !important; } - -/* Set a $size margin on the right at $breakpoint */ -.mr-4 { margin-right: 24px !important; } - -/* Set a $size margin on the bottom at $breakpoint */ -.mb-4 { margin-bottom: 24px !important; } - -/* Set a $size margin on the left at $breakpoint */ -.ml-4 { margin-left: 24px !important; } - -/* Set a negative $size margin on top at $breakpoint */ -.mt-n4 { margin-top: -24px !important; } - -/* Set a negative $size margin on the right at $breakpoint */ -.mr-n4 { margin-right: -24px !important; } - -/* Set a negative $size margin on the bottom at $breakpoint */ -.mb-n4 { margin-bottom: -24px !important; } - -/* Set a negative $size margin on the left at $breakpoint */ -.ml-n4 { margin-left: -24px !important; } - -/* Set a $size margin on the left & right at $breakpoint */ -.mx-4 { margin-right: 24px !important; margin-left: 24px !important; } - -/* Set a $size margin on the top & bottom at $breakpoint */ -.my-4 { margin-top: 24px !important; margin-bottom: 24px !important; } - -/* Set a $size margin to all sides at $breakpoint */ -.m-5 { margin: 32px !important; } - -/* Set a $size margin on the top at $breakpoint */ -.mt-5 { margin-top: 32px !important; } - -/* Set a $size margin on the right at $breakpoint */ -.mr-5 { margin-right: 32px !important; } - -/* Set a $size margin on the bottom at $breakpoint */ -.mb-5 { margin-bottom: 32px !important; } - -/* Set a $size margin on the left at $breakpoint */ -.ml-5 { margin-left: 32px !important; } - -/* Set a negative $size margin on top at $breakpoint */ -.mt-n5 { margin-top: -32px !important; } - -/* Set a negative $size margin on the right at $breakpoint */ -.mr-n5 { margin-right: -32px !important; } - -/* Set a negative $size margin on the bottom at $breakpoint */ -.mb-n5 { margin-bottom: -32px !important; } - -/* Set a negative $size margin on the left at $breakpoint */ -.ml-n5 { margin-left: -32px !important; } - -/* Set a $size margin on the left & right at $breakpoint */ -.mx-5 { margin-right: 32px !important; margin-left: 32px !important; } - -/* Set a $size margin on the top & bottom at $breakpoint */ -.my-5 { margin-top: 32px !important; margin-bottom: 32px !important; } - -/* Set a $size margin to all sides at $breakpoint */ -.m-6 { margin: 40px !important; } - -/* Set a $size margin on the top at $breakpoint */ -.mt-6 { margin-top: 40px !important; } - -/* Set a $size margin on the right at $breakpoint */ -.mr-6 { margin-right: 40px !important; } - -/* Set a $size margin on the bottom at $breakpoint */ -.mb-6 { margin-bottom: 40px !important; } - -/* Set a $size margin on the left at $breakpoint */ -.ml-6 { margin-left: 40px !important; } - -/* Set a negative $size margin on top at $breakpoint */ -.mt-n6 { margin-top: -40px !important; } - -/* Set a negative $size margin on the right at $breakpoint */ -.mr-n6 { margin-right: -40px !important; } - -/* Set a negative $size margin on the bottom at $breakpoint */ -.mb-n6 { margin-bottom: -40px !important; } - -/* Set a negative $size margin on the left at $breakpoint */ -.ml-n6 { margin-left: -40px !important; } - -/* Set a $size margin on the left & right at $breakpoint */ -.mx-6 { margin-right: 40px !important; margin-left: 40px !important; } - -/* Set a $size margin on the top & bottom at $breakpoint */ -.my-6 { margin-top: 40px !important; margin-bottom: 40px !important; } - -/* responsive horizontal auto margins */ -.mx-auto { margin-right: auto !important; margin-left: auto !important; } - -@media (min-width: 544px) { /* Set a $size margin to all sides at $breakpoint */ - .m-sm-0 { margin: 0 !important; } - /* Set a $size margin on the top at $breakpoint */ - .mt-sm-0 { margin-top: 0 !important; } - /* Set a $size margin on the right at $breakpoint */ - .mr-sm-0 { margin-right: 0 !important; } - /* Set a $size margin on the bottom at $breakpoint */ - .mb-sm-0 { margin-bottom: 0 !important; } - /* Set a $size margin on the left at $breakpoint */ - .ml-sm-0 { margin-left: 0 !important; } - /* Set a $size margin on the left & right at $breakpoint */ - .mx-sm-0 { margin-right: 0 !important; margin-left: 0 !important; } - /* Set a $size margin on the top & bottom at $breakpoint */ - .my-sm-0 { margin-top: 0 !important; margin-bottom: 0 !important; } - /* Set a $size margin to all sides at $breakpoint */ - .m-sm-1 { margin: 4px !important; } - /* Set a $size margin on the top at $breakpoint */ - .mt-sm-1 { margin-top: 4px !important; } - /* Set a $size margin on the right at $breakpoint */ - .mr-sm-1 { margin-right: 4px !important; } - /* Set a $size margin on the bottom at $breakpoint */ - .mb-sm-1 { margin-bottom: 4px !important; } - /* Set a $size margin on the left at $breakpoint */ - .ml-sm-1 { margin-left: 4px !important; } - /* Set a negative $size margin on top at $breakpoint */ - .mt-sm-n1 { margin-top: -4px !important; } - /* Set a negative $size margin on the right at $breakpoint */ - .mr-sm-n1 { margin-right: -4px !important; } - /* Set a negative $size margin on the bottom at $breakpoint */ - .mb-sm-n1 { margin-bottom: -4px !important; } - /* Set a negative $size margin on the left at $breakpoint */ - .ml-sm-n1 { margin-left: -4px !important; } - /* Set a $size margin on the left & right at $breakpoint */ - .mx-sm-1 { margin-right: 4px !important; margin-left: 4px !important; } - /* Set a $size margin on the top & bottom at $breakpoint */ - .my-sm-1 { margin-top: 4px !important; margin-bottom: 4px !important; } - /* Set a $size margin to all sides at $breakpoint */ - .m-sm-2 { margin: 8px !important; } - /* Set a $size margin on the top at $breakpoint */ - .mt-sm-2 { margin-top: 8px !important; } - /* Set a $size margin on the right at $breakpoint */ - .mr-sm-2 { margin-right: 8px !important; } - /* Set a $size margin on the bottom at $breakpoint */ - .mb-sm-2 { margin-bottom: 8px !important; } - /* Set a $size margin on the left at $breakpoint */ - .ml-sm-2 { margin-left: 8px !important; } - /* Set a negative $size margin on top at $breakpoint */ - .mt-sm-n2 { margin-top: -8px !important; } - /* Set a negative $size margin on the right at $breakpoint */ - .mr-sm-n2 { margin-right: -8px !important; } - /* Set a negative $size margin on the bottom at $breakpoint */ - .mb-sm-n2 { margin-bottom: -8px !important; } - /* Set a negative $size margin on the left at $breakpoint */ - .ml-sm-n2 { margin-left: -8px !important; } - /* Set a $size margin on the left & right at $breakpoint */ - .mx-sm-2 { margin-right: 8px !important; margin-left: 8px !important; } - /* Set a $size margin on the top & bottom at $breakpoint */ - .my-sm-2 { margin-top: 8px !important; margin-bottom: 8px !important; } - /* Set a $size margin to all sides at $breakpoint */ - .m-sm-3 { margin: 16px !important; } - /* Set a $size margin on the top at $breakpoint */ - .mt-sm-3 { margin-top: 16px !important; } - /* Set a $size margin on the right at $breakpoint */ - .mr-sm-3 { margin-right: 16px !important; } - /* Set a $size margin on the bottom at $breakpoint */ - .mb-sm-3 { margin-bottom: 16px !important; } - /* Set a $size margin on the left at $breakpoint */ - .ml-sm-3 { margin-left: 16px !important; } - /* Set a negative $size margin on top at $breakpoint */ - .mt-sm-n3 { margin-top: -16px !important; } - /* Set a negative $size margin on the right at $breakpoint */ - .mr-sm-n3 { margin-right: -16px !important; } - /* Set a negative $size margin on the bottom at $breakpoint */ - .mb-sm-n3 { margin-bottom: -16px !important; } - /* Set a negative $size margin on the left at $breakpoint */ - .ml-sm-n3 { margin-left: -16px !important; } - /* Set a $size margin on the left & right at $breakpoint */ - .mx-sm-3 { margin-right: 16px !important; margin-left: 16px !important; } - /* Set a $size margin on the top & bottom at $breakpoint */ - .my-sm-3 { margin-top: 16px !important; margin-bottom: 16px !important; } - /* Set a $size margin to all sides at $breakpoint */ - .m-sm-4 { margin: 24px !important; } - /* Set a $size margin on the top at $breakpoint */ - .mt-sm-4 { margin-top: 24px !important; } - /* Set a $size margin on the right at $breakpoint */ - .mr-sm-4 { margin-right: 24px !important; } - /* Set a $size margin on the bottom at $breakpoint */ - .mb-sm-4 { margin-bottom: 24px !important; } - /* Set a $size margin on the left at $breakpoint */ - .ml-sm-4 { margin-left: 24px !important; } - /* Set a negative $size margin on top at $breakpoint */ - .mt-sm-n4 { margin-top: -24px !important; } - /* Set a negative $size margin on the right at $breakpoint */ - .mr-sm-n4 { margin-right: -24px !important; } - /* Set a negative $size margin on the bottom at $breakpoint */ - .mb-sm-n4 { margin-bottom: -24px !important; } - /* Set a negative $size margin on the left at $breakpoint */ - .ml-sm-n4 { margin-left: -24px !important; } - /* Set a $size margin on the left & right at $breakpoint */ - .mx-sm-4 { margin-right: 24px !important; margin-left: 24px !important; } - /* Set a $size margin on the top & bottom at $breakpoint */ - .my-sm-4 { margin-top: 24px !important; margin-bottom: 24px !important; } - /* Set a $size margin to all sides at $breakpoint */ - .m-sm-5 { margin: 32px !important; } - /* Set a $size margin on the top at $breakpoint */ - .mt-sm-5 { margin-top: 32px !important; } - /* Set a $size margin on the right at $breakpoint */ - .mr-sm-5 { margin-right: 32px !important; } - /* Set a $size margin on the bottom at $breakpoint */ - .mb-sm-5 { margin-bottom: 32px !important; } - /* Set a $size margin on the left at $breakpoint */ - .ml-sm-5 { margin-left: 32px !important; } - /* Set a negative $size margin on top at $breakpoint */ - .mt-sm-n5 { margin-top: -32px !important; } - /* Set a negative $size margin on the right at $breakpoint */ - .mr-sm-n5 { margin-right: -32px !important; } - /* Set a negative $size margin on the bottom at $breakpoint */ - .mb-sm-n5 { margin-bottom: -32px !important; } - /* Set a negative $size margin on the left at $breakpoint */ - .ml-sm-n5 { margin-left: -32px !important; } - /* Set a $size margin on the left & right at $breakpoint */ - .mx-sm-5 { margin-right: 32px !important; margin-left: 32px !important; } - /* Set a $size margin on the top & bottom at $breakpoint */ - .my-sm-5 { margin-top: 32px !important; margin-bottom: 32px !important; } - /* Set a $size margin to all sides at $breakpoint */ - .m-sm-6 { margin: 40px !important; } - /* Set a $size margin on the top at $breakpoint */ - .mt-sm-6 { margin-top: 40px !important; } - /* Set a $size margin on the right at $breakpoint */ - .mr-sm-6 { margin-right: 40px !important; } - /* Set a $size margin on the bottom at $breakpoint */ - .mb-sm-6 { margin-bottom: 40px !important; } - /* Set a $size margin on the left at $breakpoint */ - .ml-sm-6 { margin-left: 40px !important; } - /* Set a negative $size margin on top at $breakpoint */ - .mt-sm-n6 { margin-top: -40px !important; } - /* Set a negative $size margin on the right at $breakpoint */ - .mr-sm-n6 { margin-right: -40px !important; } - /* Set a negative $size margin on the bottom at $breakpoint */ - .mb-sm-n6 { margin-bottom: -40px !important; } - /* Set a negative $size margin on the left at $breakpoint */ - .ml-sm-n6 { margin-left: -40px !important; } - /* Set a $size margin on the left & right at $breakpoint */ - .mx-sm-6 { margin-right: 40px !important; margin-left: 40px !important; } - /* Set a $size margin on the top & bottom at $breakpoint */ - .my-sm-6 { margin-top: 40px !important; margin-bottom: 40px !important; } - /* responsive horizontal auto margins */ - .mx-sm-auto { margin-right: auto !important; margin-left: auto !important; } } -@media (min-width: 768px) { /* Set a $size margin to all sides at $breakpoint */ - .m-md-0 { margin: 0 !important; } - /* Set a $size margin on the top at $breakpoint */ - .mt-md-0 { margin-top: 0 !important; } - /* Set a $size margin on the right at $breakpoint */ - .mr-md-0 { margin-right: 0 !important; } - /* Set a $size margin on the bottom at $breakpoint */ - .mb-md-0 { margin-bottom: 0 !important; } - /* Set a $size margin on the left at $breakpoint */ - .ml-md-0 { margin-left: 0 !important; } - /* Set a $size margin on the left & right at $breakpoint */ - .mx-md-0 { margin-right: 0 !important; margin-left: 0 !important; } - /* Set a $size margin on the top & bottom at $breakpoint */ - .my-md-0 { margin-top: 0 !important; margin-bottom: 0 !important; } - /* Set a $size margin to all sides at $breakpoint */ - .m-md-1 { margin: 4px !important; } - /* Set a $size margin on the top at $breakpoint */ - .mt-md-1 { margin-top: 4px !important; } - /* Set a $size margin on the right at $breakpoint */ - .mr-md-1 { margin-right: 4px !important; } - /* Set a $size margin on the bottom at $breakpoint */ - .mb-md-1 { margin-bottom: 4px !important; } - /* Set a $size margin on the left at $breakpoint */ - .ml-md-1 { margin-left: 4px !important; } - /* Set a negative $size margin on top at $breakpoint */ - .mt-md-n1 { margin-top: -4px !important; } - /* Set a negative $size margin on the right at $breakpoint */ - .mr-md-n1 { margin-right: -4px !important; } - /* Set a negative $size margin on the bottom at $breakpoint */ - .mb-md-n1 { margin-bottom: -4px !important; } - /* Set a negative $size margin on the left at $breakpoint */ - .ml-md-n1 { margin-left: -4px !important; } - /* Set a $size margin on the left & right at $breakpoint */ - .mx-md-1 { margin-right: 4px !important; margin-left: 4px !important; } - /* Set a $size margin on the top & bottom at $breakpoint */ - .my-md-1 { margin-top: 4px !important; margin-bottom: 4px !important; } - /* Set a $size margin to all sides at $breakpoint */ - .m-md-2 { margin: 8px !important; } - /* Set a $size margin on the top at $breakpoint */ - .mt-md-2 { margin-top: 8px !important; } - /* Set a $size margin on the right at $breakpoint */ - .mr-md-2 { margin-right: 8px !important; } - /* Set a $size margin on the bottom at $breakpoint */ - .mb-md-2 { margin-bottom: 8px !important; } - /* Set a $size margin on the left at $breakpoint */ - .ml-md-2 { margin-left: 8px !important; } - /* Set a negative $size margin on top at $breakpoint */ - .mt-md-n2 { margin-top: -8px !important; } - /* Set a negative $size margin on the right at $breakpoint */ - .mr-md-n2 { margin-right: -8px !important; } - /* Set a negative $size margin on the bottom at $breakpoint */ - .mb-md-n2 { margin-bottom: -8px !important; } - /* Set a negative $size margin on the left at $breakpoint */ - .ml-md-n2 { margin-left: -8px !important; } - /* Set a $size margin on the left & right at $breakpoint */ - .mx-md-2 { margin-right: 8px !important; margin-left: 8px !important; } - /* Set a $size margin on the top & bottom at $breakpoint */ - .my-md-2 { margin-top: 8px !important; margin-bottom: 8px !important; } - /* Set a $size margin to all sides at $breakpoint */ - .m-md-3 { margin: 16px !important; } - /* Set a $size margin on the top at $breakpoint */ - .mt-md-3 { margin-top: 16px !important; } - /* Set a $size margin on the right at $breakpoint */ - .mr-md-3 { margin-right: 16px !important; } - /* Set a $size margin on the bottom at $breakpoint */ - .mb-md-3 { margin-bottom: 16px !important; } - /* Set a $size margin on the left at $breakpoint */ - .ml-md-3 { margin-left: 16px !important; } - /* Set a negative $size margin on top at $breakpoint */ - .mt-md-n3 { margin-top: -16px !important; } - /* Set a negative $size margin on the right at $breakpoint */ - .mr-md-n3 { margin-right: -16px !important; } - /* Set a negative $size margin on the bottom at $breakpoint */ - .mb-md-n3 { margin-bottom: -16px !important; } - /* Set a negative $size margin on the left at $breakpoint */ - .ml-md-n3 { margin-left: -16px !important; } - /* Set a $size margin on the left & right at $breakpoint */ - .mx-md-3 { margin-right: 16px !important; margin-left: 16px !important; } - /* Set a $size margin on the top & bottom at $breakpoint */ - .my-md-3 { margin-top: 16px !important; margin-bottom: 16px !important; } - /* Set a $size margin to all sides at $breakpoint */ - .m-md-4 { margin: 24px !important; } - /* Set a $size margin on the top at $breakpoint */ - .mt-md-4 { margin-top: 24px !important; } - /* Set a $size margin on the right at $breakpoint */ - .mr-md-4 { margin-right: 24px !important; } - /* Set a $size margin on the bottom at $breakpoint */ - .mb-md-4 { margin-bottom: 24px !important; } - /* Set a $size margin on the left at $breakpoint */ - .ml-md-4 { margin-left: 24px !important; } - /* Set a negative $size margin on top at $breakpoint */ - .mt-md-n4 { margin-top: -24px !important; } - /* Set a negative $size margin on the right at $breakpoint */ - .mr-md-n4 { margin-right: -24px !important; } - /* Set a negative $size margin on the bottom at $breakpoint */ - .mb-md-n4 { margin-bottom: -24px !important; } - /* Set a negative $size margin on the left at $breakpoint */ - .ml-md-n4 { margin-left: -24px !important; } - /* Set a $size margin on the left & right at $breakpoint */ - .mx-md-4 { margin-right: 24px !important; margin-left: 24px !important; } - /* Set a $size margin on the top & bottom at $breakpoint */ - .my-md-4 { margin-top: 24px !important; margin-bottom: 24px !important; } - /* Set a $size margin to all sides at $breakpoint */ - .m-md-5 { margin: 32px !important; } - /* Set a $size margin on the top at $breakpoint */ - .mt-md-5 { margin-top: 32px !important; } - /* Set a $size margin on the right at $breakpoint */ - .mr-md-5 { margin-right: 32px !important; } - /* Set a $size margin on the bottom at $breakpoint */ - .mb-md-5 { margin-bottom: 32px !important; } - /* Set a $size margin on the left at $breakpoint */ - .ml-md-5 { margin-left: 32px !important; } - /* Set a negative $size margin on top at $breakpoint */ - .mt-md-n5 { margin-top: -32px !important; } - /* Set a negative $size margin on the right at $breakpoint */ - .mr-md-n5 { margin-right: -32px !important; } - /* Set a negative $size margin on the bottom at $breakpoint */ - .mb-md-n5 { margin-bottom: -32px !important; } - /* Set a negative $size margin on the left at $breakpoint */ - .ml-md-n5 { margin-left: -32px !important; } - /* Set a $size margin on the left & right at $breakpoint */ - .mx-md-5 { margin-right: 32px !important; margin-left: 32px !important; } - /* Set a $size margin on the top & bottom at $breakpoint */ - .my-md-5 { margin-top: 32px !important; margin-bottom: 32px !important; } - /* Set a $size margin to all sides at $breakpoint */ - .m-md-6 { margin: 40px !important; } - /* Set a $size margin on the top at $breakpoint */ - .mt-md-6 { margin-top: 40px !important; } - /* Set a $size margin on the right at $breakpoint */ - .mr-md-6 { margin-right: 40px !important; } - /* Set a $size margin on the bottom at $breakpoint */ - .mb-md-6 { margin-bottom: 40px !important; } - /* Set a $size margin on the left at $breakpoint */ - .ml-md-6 { margin-left: 40px !important; } - /* Set a negative $size margin on top at $breakpoint */ - .mt-md-n6 { margin-top: -40px !important; } - /* Set a negative $size margin on the right at $breakpoint */ - .mr-md-n6 { margin-right: -40px !important; } - /* Set a negative $size margin on the bottom at $breakpoint */ - .mb-md-n6 { margin-bottom: -40px !important; } - /* Set a negative $size margin on the left at $breakpoint */ - .ml-md-n6 { margin-left: -40px !important; } - /* Set a $size margin on the left & right at $breakpoint */ - .mx-md-6 { margin-right: 40px !important; margin-left: 40px !important; } - /* Set a $size margin on the top & bottom at $breakpoint */ - .my-md-6 { margin-top: 40px !important; margin-bottom: 40px !important; } - /* responsive horizontal auto margins */ - .mx-md-auto { margin-right: auto !important; margin-left: auto !important; } } -@media (min-width: 1012px) { /* Set a $size margin to all sides at $breakpoint */ - .m-lg-0 { margin: 0 !important; } - /* Set a $size margin on the top at $breakpoint */ - .mt-lg-0 { margin-top: 0 !important; } - /* Set a $size margin on the right at $breakpoint */ - .mr-lg-0 { margin-right: 0 !important; } - /* Set a $size margin on the bottom at $breakpoint */ - .mb-lg-0 { margin-bottom: 0 !important; } - /* Set a $size margin on the left at $breakpoint */ - .ml-lg-0 { margin-left: 0 !important; } - /* Set a $size margin on the left & right at $breakpoint */ - .mx-lg-0 { margin-right: 0 !important; margin-left: 0 !important; } - /* Set a $size margin on the top & bottom at $breakpoint */ - .my-lg-0 { margin-top: 0 !important; margin-bottom: 0 !important; } - /* Set a $size margin to all sides at $breakpoint */ - .m-lg-1 { margin: 4px !important; } - /* Set a $size margin on the top at $breakpoint */ - .mt-lg-1 { margin-top: 4px !important; } - /* Set a $size margin on the right at $breakpoint */ - .mr-lg-1 { margin-right: 4px !important; } - /* Set a $size margin on the bottom at $breakpoint */ - .mb-lg-1 { margin-bottom: 4px !important; } - /* Set a $size margin on the left at $breakpoint */ - .ml-lg-1 { margin-left: 4px !important; } - /* Set a negative $size margin on top at $breakpoint */ - .mt-lg-n1 { margin-top: -4px !important; } - /* Set a negative $size margin on the right at $breakpoint */ - .mr-lg-n1 { margin-right: -4px !important; } - /* Set a negative $size margin on the bottom at $breakpoint */ - .mb-lg-n1 { margin-bottom: -4px !important; } - /* Set a negative $size margin on the left at $breakpoint */ - .ml-lg-n1 { margin-left: -4px !important; } - /* Set a $size margin on the left & right at $breakpoint */ - .mx-lg-1 { margin-right: 4px !important; margin-left: 4px !important; } - /* Set a $size margin on the top & bottom at $breakpoint */ - .my-lg-1 { margin-top: 4px !important; margin-bottom: 4px !important; } - /* Set a $size margin to all sides at $breakpoint */ - .m-lg-2 { margin: 8px !important; } - /* Set a $size margin on the top at $breakpoint */ - .mt-lg-2 { margin-top: 8px !important; } - /* Set a $size margin on the right at $breakpoint */ - .mr-lg-2 { margin-right: 8px !important; } - /* Set a $size margin on the bottom at $breakpoint */ - .mb-lg-2 { margin-bottom: 8px !important; } - /* Set a $size margin on the left at $breakpoint */ - .ml-lg-2 { margin-left: 8px !important; } - /* Set a negative $size margin on top at $breakpoint */ - .mt-lg-n2 { margin-top: -8px !important; } - /* Set a negative $size margin on the right at $breakpoint */ - .mr-lg-n2 { margin-right: -8px !important; } - /* Set a negative $size margin on the bottom at $breakpoint */ - .mb-lg-n2 { margin-bottom: -8px !important; } - /* Set a negative $size margin on the left at $breakpoint */ - .ml-lg-n2 { margin-left: -8px !important; } - /* Set a $size margin on the left & right at $breakpoint */ - .mx-lg-2 { margin-right: 8px !important; margin-left: 8px !important; } - /* Set a $size margin on the top & bottom at $breakpoint */ - .my-lg-2 { margin-top: 8px !important; margin-bottom: 8px !important; } - /* Set a $size margin to all sides at $breakpoint */ - .m-lg-3 { margin: 16px !important; } - /* Set a $size margin on the top at $breakpoint */ - .mt-lg-3 { margin-top: 16px !important; } - /* Set a $size margin on the right at $breakpoint */ - .mr-lg-3 { margin-right: 16px !important; } - /* Set a $size margin on the bottom at $breakpoint */ - .mb-lg-3 { margin-bottom: 16px !important; } - /* Set a $size margin on the left at $breakpoint */ - .ml-lg-3 { margin-left: 16px !important; } - /* Set a negative $size margin on top at $breakpoint */ - .mt-lg-n3 { margin-top: -16px !important; } - /* Set a negative $size margin on the right at $breakpoint */ - .mr-lg-n3 { margin-right: -16px !important; } - /* Set a negative $size margin on the bottom at $breakpoint */ - .mb-lg-n3 { margin-bottom: -16px !important; } - /* Set a negative $size margin on the left at $breakpoint */ - .ml-lg-n3 { margin-left: -16px !important; } - /* Set a $size margin on the left & right at $breakpoint */ - .mx-lg-3 { margin-right: 16px !important; margin-left: 16px !important; } - /* Set a $size margin on the top & bottom at $breakpoint */ - .my-lg-3 { margin-top: 16px !important; margin-bottom: 16px !important; } - /* Set a $size margin to all sides at $breakpoint */ - .m-lg-4 { margin: 24px !important; } - /* Set a $size margin on the top at $breakpoint */ - .mt-lg-4 { margin-top: 24px !important; } - /* Set a $size margin on the right at $breakpoint */ - .mr-lg-4 { margin-right: 24px !important; } - /* Set a $size margin on the bottom at $breakpoint */ - .mb-lg-4 { margin-bottom: 24px !important; } - /* Set a $size margin on the left at $breakpoint */ - .ml-lg-4 { margin-left: 24px !important; } - /* Set a negative $size margin on top at $breakpoint */ - .mt-lg-n4 { margin-top: -24px !important; } - /* Set a negative $size margin on the right at $breakpoint */ - .mr-lg-n4 { margin-right: -24px !important; } - /* Set a negative $size margin on the bottom at $breakpoint */ - .mb-lg-n4 { margin-bottom: -24px !important; } - /* Set a negative $size margin on the left at $breakpoint */ - .ml-lg-n4 { margin-left: -24px !important; } - /* Set a $size margin on the left & right at $breakpoint */ - .mx-lg-4 { margin-right: 24px !important; margin-left: 24px !important; } - /* Set a $size margin on the top & bottom at $breakpoint */ - .my-lg-4 { margin-top: 24px !important; margin-bottom: 24px !important; } - /* Set a $size margin to all sides at $breakpoint */ - .m-lg-5 { margin: 32px !important; } - /* Set a $size margin on the top at $breakpoint */ - .mt-lg-5 { margin-top: 32px !important; } - /* Set a $size margin on the right at $breakpoint */ - .mr-lg-5 { margin-right: 32px !important; } - /* Set a $size margin on the bottom at $breakpoint */ - .mb-lg-5 { margin-bottom: 32px !important; } - /* Set a $size margin on the left at $breakpoint */ - .ml-lg-5 { margin-left: 32px !important; } - /* Set a negative $size margin on top at $breakpoint */ - .mt-lg-n5 { margin-top: -32px !important; } - /* Set a negative $size margin on the right at $breakpoint */ - .mr-lg-n5 { margin-right: -32px !important; } - /* Set a negative $size margin on the bottom at $breakpoint */ - .mb-lg-n5 { margin-bottom: -32px !important; } - /* Set a negative $size margin on the left at $breakpoint */ - .ml-lg-n5 { margin-left: -32px !important; } - /* Set a $size margin on the left & right at $breakpoint */ - .mx-lg-5 { margin-right: 32px !important; margin-left: 32px !important; } - /* Set a $size margin on the top & bottom at $breakpoint */ - .my-lg-5 { margin-top: 32px !important; margin-bottom: 32px !important; } - /* Set a $size margin to all sides at $breakpoint */ - .m-lg-6 { margin: 40px !important; } - /* Set a $size margin on the top at $breakpoint */ - .mt-lg-6 { margin-top: 40px !important; } - /* Set a $size margin on the right at $breakpoint */ - .mr-lg-6 { margin-right: 40px !important; } - /* Set a $size margin on the bottom at $breakpoint */ - .mb-lg-6 { margin-bottom: 40px !important; } - /* Set a $size margin on the left at $breakpoint */ - .ml-lg-6 { margin-left: 40px !important; } - /* Set a negative $size margin on top at $breakpoint */ - .mt-lg-n6 { margin-top: -40px !important; } - /* Set a negative $size margin on the right at $breakpoint */ - .mr-lg-n6 { margin-right: -40px !important; } - /* Set a negative $size margin on the bottom at $breakpoint */ - .mb-lg-n6 { margin-bottom: -40px !important; } - /* Set a negative $size margin on the left at $breakpoint */ - .ml-lg-n6 { margin-left: -40px !important; } - /* Set a $size margin on the left & right at $breakpoint */ - .mx-lg-6 { margin-right: 40px !important; margin-left: 40px !important; } - /* Set a $size margin on the top & bottom at $breakpoint */ - .my-lg-6 { margin-top: 40px !important; margin-bottom: 40px !important; } - /* responsive horizontal auto margins */ - .mx-lg-auto { margin-right: auto !important; margin-left: auto !important; } } -@media (min-width: 1280px) { /* Set a $size margin to all sides at $breakpoint */ - .m-xl-0 { margin: 0 !important; } - /* Set a $size margin on the top at $breakpoint */ - .mt-xl-0 { margin-top: 0 !important; } - /* Set a $size margin on the right at $breakpoint */ - .mr-xl-0 { margin-right: 0 !important; } - /* Set a $size margin on the bottom at $breakpoint */ - .mb-xl-0 { margin-bottom: 0 !important; } - /* Set a $size margin on the left at $breakpoint */ - .ml-xl-0 { margin-left: 0 !important; } - /* Set a $size margin on the left & right at $breakpoint */ - .mx-xl-0 { margin-right: 0 !important; margin-left: 0 !important; } - /* Set a $size margin on the top & bottom at $breakpoint */ - .my-xl-0 { margin-top: 0 !important; margin-bottom: 0 !important; } - /* Set a $size margin to all sides at $breakpoint */ - .m-xl-1 { margin: 4px !important; } - /* Set a $size margin on the top at $breakpoint */ - .mt-xl-1 { margin-top: 4px !important; } - /* Set a $size margin on the right at $breakpoint */ - .mr-xl-1 { margin-right: 4px !important; } - /* Set a $size margin on the bottom at $breakpoint */ - .mb-xl-1 { margin-bottom: 4px !important; } - /* Set a $size margin on the left at $breakpoint */ - .ml-xl-1 { margin-left: 4px !important; } - /* Set a negative $size margin on top at $breakpoint */ - .mt-xl-n1 { margin-top: -4px !important; } - /* Set a negative $size margin on the right at $breakpoint */ - .mr-xl-n1 { margin-right: -4px !important; } - /* Set a negative $size margin on the bottom at $breakpoint */ - .mb-xl-n1 { margin-bottom: -4px !important; } - /* Set a negative $size margin on the left at $breakpoint */ - .ml-xl-n1 { margin-left: -4px !important; } - /* Set a $size margin on the left & right at $breakpoint */ - .mx-xl-1 { margin-right: 4px !important; margin-left: 4px !important; } - /* Set a $size margin on the top & bottom at $breakpoint */ - .my-xl-1 { margin-top: 4px !important; margin-bottom: 4px !important; } - /* Set a $size margin to all sides at $breakpoint */ - .m-xl-2 { margin: 8px !important; } - /* Set a $size margin on the top at $breakpoint */ - .mt-xl-2 { margin-top: 8px !important; } - /* Set a $size margin on the right at $breakpoint */ - .mr-xl-2 { margin-right: 8px !important; } - /* Set a $size margin on the bottom at $breakpoint */ - .mb-xl-2 { margin-bottom: 8px !important; } - /* Set a $size margin on the left at $breakpoint */ - .ml-xl-2 { margin-left: 8px !important; } - /* Set a negative $size margin on top at $breakpoint */ - .mt-xl-n2 { margin-top: -8px !important; } - /* Set a negative $size margin on the right at $breakpoint */ - .mr-xl-n2 { margin-right: -8px !important; } - /* Set a negative $size margin on the bottom at $breakpoint */ - .mb-xl-n2 { margin-bottom: -8px !important; } - /* Set a negative $size margin on the left at $breakpoint */ - .ml-xl-n2 { margin-left: -8px !important; } - /* Set a $size margin on the left & right at $breakpoint */ - .mx-xl-2 { margin-right: 8px !important; margin-left: 8px !important; } - /* Set a $size margin on the top & bottom at $breakpoint */ - .my-xl-2 { margin-top: 8px !important; margin-bottom: 8px !important; } - /* Set a $size margin to all sides at $breakpoint */ - .m-xl-3 { margin: 16px !important; } - /* Set a $size margin on the top at $breakpoint */ - .mt-xl-3 { margin-top: 16px !important; } - /* Set a $size margin on the right at $breakpoint */ - .mr-xl-3 { margin-right: 16px !important; } - /* Set a $size margin on the bottom at $breakpoint */ - .mb-xl-3 { margin-bottom: 16px !important; } - /* Set a $size margin on the left at $breakpoint */ - .ml-xl-3 { margin-left: 16px !important; } - /* Set a negative $size margin on top at $breakpoint */ - .mt-xl-n3 { margin-top: -16px !important; } - /* Set a negative $size margin on the right at $breakpoint */ - .mr-xl-n3 { margin-right: -16px !important; } - /* Set a negative $size margin on the bottom at $breakpoint */ - .mb-xl-n3 { margin-bottom: -16px !important; } - /* Set a negative $size margin on the left at $breakpoint */ - .ml-xl-n3 { margin-left: -16px !important; } - /* Set a $size margin on the left & right at $breakpoint */ - .mx-xl-3 { margin-right: 16px !important; margin-left: 16px !important; } - /* Set a $size margin on the top & bottom at $breakpoint */ - .my-xl-3 { margin-top: 16px !important; margin-bottom: 16px !important; } - /* Set a $size margin to all sides at $breakpoint */ - .m-xl-4 { margin: 24px !important; } - /* Set a $size margin on the top at $breakpoint */ - .mt-xl-4 { margin-top: 24px !important; } - /* Set a $size margin on the right at $breakpoint */ - .mr-xl-4 { margin-right: 24px !important; } - /* Set a $size margin on the bottom at $breakpoint */ - .mb-xl-4 { margin-bottom: 24px !important; } - /* Set a $size margin on the left at $breakpoint */ - .ml-xl-4 { margin-left: 24px !important; } - /* Set a negative $size margin on top at $breakpoint */ - .mt-xl-n4 { margin-top: -24px !important; } - /* Set a negative $size margin on the right at $breakpoint */ - .mr-xl-n4 { margin-right: -24px !important; } - /* Set a negative $size margin on the bottom at $breakpoint */ - .mb-xl-n4 { margin-bottom: -24px !important; } - /* Set a negative $size margin on the left at $breakpoint */ - .ml-xl-n4 { margin-left: -24px !important; } - /* Set a $size margin on the left & right at $breakpoint */ - .mx-xl-4 { margin-right: 24px !important; margin-left: 24px !important; } - /* Set a $size margin on the top & bottom at $breakpoint */ - .my-xl-4 { margin-top: 24px !important; margin-bottom: 24px !important; } - /* Set a $size margin to all sides at $breakpoint */ - .m-xl-5 { margin: 32px !important; } - /* Set a $size margin on the top at $breakpoint */ - .mt-xl-5 { margin-top: 32px !important; } - /* Set a $size margin on the right at $breakpoint */ - .mr-xl-5 { margin-right: 32px !important; } - /* Set a $size margin on the bottom at $breakpoint */ - .mb-xl-5 { margin-bottom: 32px !important; } - /* Set a $size margin on the left at $breakpoint */ - .ml-xl-5 { margin-left: 32px !important; } - /* Set a negative $size margin on top at $breakpoint */ - .mt-xl-n5 { margin-top: -32px !important; } - /* Set a negative $size margin on the right at $breakpoint */ - .mr-xl-n5 { margin-right: -32px !important; } - /* Set a negative $size margin on the bottom at $breakpoint */ - .mb-xl-n5 { margin-bottom: -32px !important; } - /* Set a negative $size margin on the left at $breakpoint */ - .ml-xl-n5 { margin-left: -32px !important; } - /* Set a $size margin on the left & right at $breakpoint */ - .mx-xl-5 { margin-right: 32px !important; margin-left: 32px !important; } - /* Set a $size margin on the top & bottom at $breakpoint */ - .my-xl-5 { margin-top: 32px !important; margin-bottom: 32px !important; } - /* Set a $size margin to all sides at $breakpoint */ - .m-xl-6 { margin: 40px !important; } - /* Set a $size margin on the top at $breakpoint */ - .mt-xl-6 { margin-top: 40px !important; } - /* Set a $size margin on the right at $breakpoint */ - .mr-xl-6 { margin-right: 40px !important; } - /* Set a $size margin on the bottom at $breakpoint */ - .mb-xl-6 { margin-bottom: 40px !important; } - /* Set a $size margin on the left at $breakpoint */ - .ml-xl-6 { margin-left: 40px !important; } - /* Set a negative $size margin on top at $breakpoint */ - .mt-xl-n6 { margin-top: -40px !important; } - /* Set a negative $size margin on the right at $breakpoint */ - .mr-xl-n6 { margin-right: -40px !important; } - /* Set a negative $size margin on the bottom at $breakpoint */ - .mb-xl-n6 { margin-bottom: -40px !important; } - /* Set a negative $size margin on the left at $breakpoint */ - .ml-xl-n6 { margin-left: -40px !important; } - /* Set a $size margin on the left & right at $breakpoint */ - .mx-xl-6 { margin-right: 40px !important; margin-left: 40px !important; } - /* Set a $size margin on the top & bottom at $breakpoint */ - .my-xl-6 { margin-top: 40px !important; margin-bottom: 40px !important; } - /* responsive horizontal auto margins */ - .mx-xl-auto { margin-right: auto !important; margin-left: auto !important; } } -/* Set a $size padding to all sides at $breakpoint */ -.p-0 { padding: 0 !important; } - -/* Set a $size padding to the top at $breakpoint */ -.pt-0 { padding-top: 0 !important; } - -/* Set a $size padding to the right at $breakpoint */ -.pr-0 { padding-right: 0 !important; } - -/* Set a $size padding to the bottom at $breakpoint */ -.pb-0 { padding-bottom: 0 !important; } - -/* Set a $size padding to the left at $breakpoint */ -.pl-0 { padding-left: 0 !important; } - -/* Set a $size padding to the left & right at $breakpoint */ -.px-0 { padding-right: 0 !important; padding-left: 0 !important; } - -/* Set a $size padding to the top & bottom at $breakpoint */ -.py-0 { padding-top: 0 !important; padding-bottom: 0 !important; } - -/* Set a $size padding to all sides at $breakpoint */ -.p-1 { padding: 4px !important; } - -/* Set a $size padding to the top at $breakpoint */ -.pt-1 { padding-top: 4px !important; } - -/* Set a $size padding to the right at $breakpoint */ -.pr-1 { padding-right: 4px !important; } - -/* Set a $size padding to the bottom at $breakpoint */ -.pb-1 { padding-bottom: 4px !important; } - -/* Set a $size padding to the left at $breakpoint */ -.pl-1 { padding-left: 4px !important; } - -/* Set a $size padding to the left & right at $breakpoint */ -.px-1 { padding-right: 4px !important; padding-left: 4px !important; } - -/* Set a $size padding to the top & bottom at $breakpoint */ -.py-1 { padding-top: 4px !important; padding-bottom: 4px !important; } - -/* Set a $size padding to all sides at $breakpoint */ -.p-2 { padding: 8px !important; } - -/* Set a $size padding to the top at $breakpoint */ -.pt-2 { padding-top: 8px !important; } - -/* Set a $size padding to the right at $breakpoint */ -.pr-2 { padding-right: 8px !important; } - -/* Set a $size padding to the bottom at $breakpoint */ -.pb-2 { padding-bottom: 8px !important; } - -/* Set a $size padding to the left at $breakpoint */ -.pl-2 { padding-left: 8px !important; } - -/* Set a $size padding to the left & right at $breakpoint */ -.px-2 { padding-right: 8px !important; padding-left: 8px !important; } - -/* Set a $size padding to the top & bottom at $breakpoint */ -.py-2 { padding-top: 8px !important; padding-bottom: 8px !important; } - -/* Set a $size padding to all sides at $breakpoint */ -.p-3 { padding: 16px !important; } - -/* Set a $size padding to the top at $breakpoint */ -.pt-3 { padding-top: 16px !important; } - -/* Set a $size padding to the right at $breakpoint */ -.pr-3 { padding-right: 16px !important; } - -/* Set a $size padding to the bottom at $breakpoint */ -.pb-3 { padding-bottom: 16px !important; } - -/* Set a $size padding to the left at $breakpoint */ -.pl-3 { padding-left: 16px !important; } - -/* Set a $size padding to the left & right at $breakpoint */ -.px-3 { padding-right: 16px !important; padding-left: 16px !important; } - -/* Set a $size padding to the top & bottom at $breakpoint */ -.py-3 { padding-top: 16px !important; padding-bottom: 16px !important; } - -/* Set a $size padding to all sides at $breakpoint */ -.p-4 { padding: 24px !important; } - -/* Set a $size padding to the top at $breakpoint */ -.pt-4 { padding-top: 24px !important; } - -/* Set a $size padding to the right at $breakpoint */ -.pr-4 { padding-right: 24px !important; } - -/* Set a $size padding to the bottom at $breakpoint */ -.pb-4 { padding-bottom: 24px !important; } - -/* Set a $size padding to the left at $breakpoint */ -.pl-4 { padding-left: 24px !important; } - -/* Set a $size padding to the left & right at $breakpoint */ -.px-4 { padding-right: 24px !important; padding-left: 24px !important; } - -/* Set a $size padding to the top & bottom at $breakpoint */ -.py-4 { padding-top: 24px !important; padding-bottom: 24px !important; } - -/* Set a $size padding to all sides at $breakpoint */ -.p-5 { padding: 32px !important; } - -/* Set a $size padding to the top at $breakpoint */ -.pt-5 { padding-top: 32px !important; } - -/* Set a $size padding to the right at $breakpoint */ -.pr-5 { padding-right: 32px !important; } - -/* Set a $size padding to the bottom at $breakpoint */ -.pb-5 { padding-bottom: 32px !important; } - -/* Set a $size padding to the left at $breakpoint */ -.pl-5 { padding-left: 32px !important; } - -/* Set a $size padding to the left & right at $breakpoint */ -.px-5 { padding-right: 32px !important; padding-left: 32px !important; } - -/* Set a $size padding to the top & bottom at $breakpoint */ -.py-5 { padding-top: 32px !important; padding-bottom: 32px !important; } - -/* Set a $size padding to all sides at $breakpoint */ -.p-6 { padding: 40px !important; } - -/* Set a $size padding to the top at $breakpoint */ -.pt-6 { padding-top: 40px !important; } - -/* Set a $size padding to the right at $breakpoint */ -.pr-6 { padding-right: 40px !important; } - -/* Set a $size padding to the bottom at $breakpoint */ -.pb-6 { padding-bottom: 40px !important; } - -/* Set a $size padding to the left at $breakpoint */ -.pl-6 { padding-left: 40px !important; } - -/* Set a $size padding to the left & right at $breakpoint */ -.px-6 { padding-right: 40px !important; padding-left: 40px !important; } - -/* Set a $size padding to the top & bottom at $breakpoint */ -.py-6 { padding-top: 40px !important; padding-bottom: 40px !important; } - -@media (min-width: 544px) { /* Set a $size padding to all sides at $breakpoint */ - .p-sm-0 { padding: 0 !important; } - /* Set a $size padding to the top at $breakpoint */ - .pt-sm-0 { padding-top: 0 !important; } - /* Set a $size padding to the right at $breakpoint */ - .pr-sm-0 { padding-right: 0 !important; } - /* Set a $size padding to the bottom at $breakpoint */ - .pb-sm-0 { padding-bottom: 0 !important; } - /* Set a $size padding to the left at $breakpoint */ - .pl-sm-0 { padding-left: 0 !important; } - /* Set a $size padding to the left & right at $breakpoint */ - .px-sm-0 { padding-right: 0 !important; padding-left: 0 !important; } - /* Set a $size padding to the top & bottom at $breakpoint */ - .py-sm-0 { padding-top: 0 !important; padding-bottom: 0 !important; } - /* Set a $size padding to all sides at $breakpoint */ - .p-sm-1 { padding: 4px !important; } - /* Set a $size padding to the top at $breakpoint */ - .pt-sm-1 { padding-top: 4px !important; } - /* Set a $size padding to the right at $breakpoint */ - .pr-sm-1 { padding-right: 4px !important; } - /* Set a $size padding to the bottom at $breakpoint */ - .pb-sm-1 { padding-bottom: 4px !important; } - /* Set a $size padding to the left at $breakpoint */ - .pl-sm-1 { padding-left: 4px !important; } - /* Set a $size padding to the left & right at $breakpoint */ - .px-sm-1 { padding-right: 4px !important; padding-left: 4px !important; } - /* Set a $size padding to the top & bottom at $breakpoint */ - .py-sm-1 { padding-top: 4px !important; padding-bottom: 4px !important; } - /* Set a $size padding to all sides at $breakpoint */ - .p-sm-2 { padding: 8px !important; } - /* Set a $size padding to the top at $breakpoint */ - .pt-sm-2 { padding-top: 8px !important; } - /* Set a $size padding to the right at $breakpoint */ - .pr-sm-2 { padding-right: 8px !important; } - /* Set a $size padding to the bottom at $breakpoint */ - .pb-sm-2 { padding-bottom: 8px !important; } - /* Set a $size padding to the left at $breakpoint */ - .pl-sm-2 { padding-left: 8px !important; } - /* Set a $size padding to the left & right at $breakpoint */ - .px-sm-2 { padding-right: 8px !important; padding-left: 8px !important; } - /* Set a $size padding to the top & bottom at $breakpoint */ - .py-sm-2 { padding-top: 8px !important; padding-bottom: 8px !important; } - /* Set a $size padding to all sides at $breakpoint */ - .p-sm-3 { padding: 16px !important; } - /* Set a $size padding to the top at $breakpoint */ - .pt-sm-3 { padding-top: 16px !important; } - /* Set a $size padding to the right at $breakpoint */ - .pr-sm-3 { padding-right: 16px !important; } - /* Set a $size padding to the bottom at $breakpoint */ - .pb-sm-3 { padding-bottom: 16px !important; } - /* Set a $size padding to the left at $breakpoint */ - .pl-sm-3 { padding-left: 16px !important; } - /* Set a $size padding to the left & right at $breakpoint */ - .px-sm-3 { padding-right: 16px !important; padding-left: 16px !important; } - /* Set a $size padding to the top & bottom at $breakpoint */ - .py-sm-3 { padding-top: 16px !important; padding-bottom: 16px !important; } - /* Set a $size padding to all sides at $breakpoint */ - .p-sm-4 { padding: 24px !important; } - /* Set a $size padding to the top at $breakpoint */ - .pt-sm-4 { padding-top: 24px !important; } - /* Set a $size padding to the right at $breakpoint */ - .pr-sm-4 { padding-right: 24px !important; } - /* Set a $size padding to the bottom at $breakpoint */ - .pb-sm-4 { padding-bottom: 24px !important; } - /* Set a $size padding to the left at $breakpoint */ - .pl-sm-4 { padding-left: 24px !important; } - /* Set a $size padding to the left & right at $breakpoint */ - .px-sm-4 { padding-right: 24px !important; padding-left: 24px !important; } - /* Set a $size padding to the top & bottom at $breakpoint */ - .py-sm-4 { padding-top: 24px !important; padding-bottom: 24px !important; } - /* Set a $size padding to all sides at $breakpoint */ - .p-sm-5 { padding: 32px !important; } - /* Set a $size padding to the top at $breakpoint */ - .pt-sm-5 { padding-top: 32px !important; } - /* Set a $size padding to the right at $breakpoint */ - .pr-sm-5 { padding-right: 32px !important; } - /* Set a $size padding to the bottom at $breakpoint */ - .pb-sm-5 { padding-bottom: 32px !important; } - /* Set a $size padding to the left at $breakpoint */ - .pl-sm-5 { padding-left: 32px !important; } - /* Set a $size padding to the left & right at $breakpoint */ - .px-sm-5 { padding-right: 32px !important; padding-left: 32px !important; } - /* Set a $size padding to the top & bottom at $breakpoint */ - .py-sm-5 { padding-top: 32px !important; padding-bottom: 32px !important; } - /* Set a $size padding to all sides at $breakpoint */ - .p-sm-6 { padding: 40px !important; } - /* Set a $size padding to the top at $breakpoint */ - .pt-sm-6 { padding-top: 40px !important; } - /* Set a $size padding to the right at $breakpoint */ - .pr-sm-6 { padding-right: 40px !important; } - /* Set a $size padding to the bottom at $breakpoint */ - .pb-sm-6 { padding-bottom: 40px !important; } - /* Set a $size padding to the left at $breakpoint */ - .pl-sm-6 { padding-left: 40px !important; } - /* Set a $size padding to the left & right at $breakpoint */ - .px-sm-6 { padding-right: 40px !important; padding-left: 40px !important; } - /* Set a $size padding to the top & bottom at $breakpoint */ - .py-sm-6 { padding-top: 40px !important; padding-bottom: 40px !important; } } -@media (min-width: 768px) { /* Set a $size padding to all sides at $breakpoint */ - .p-md-0 { padding: 0 !important; } - /* Set a $size padding to the top at $breakpoint */ - .pt-md-0 { padding-top: 0 !important; } - /* Set a $size padding to the right at $breakpoint */ - .pr-md-0 { padding-right: 0 !important; } - /* Set a $size padding to the bottom at $breakpoint */ - .pb-md-0 { padding-bottom: 0 !important; } - /* Set a $size padding to the left at $breakpoint */ - .pl-md-0 { padding-left: 0 !important; } - /* Set a $size padding to the left & right at $breakpoint */ - .px-md-0 { padding-right: 0 !important; padding-left: 0 !important; } - /* Set a $size padding to the top & bottom at $breakpoint */ - .py-md-0 { padding-top: 0 !important; padding-bottom: 0 !important; } - /* Set a $size padding to all sides at $breakpoint */ - .p-md-1 { padding: 4px !important; } - /* Set a $size padding to the top at $breakpoint */ - .pt-md-1 { padding-top: 4px !important; } - /* Set a $size padding to the right at $breakpoint */ - .pr-md-1 { padding-right: 4px !important; } - /* Set a $size padding to the bottom at $breakpoint */ - .pb-md-1 { padding-bottom: 4px !important; } - /* Set a $size padding to the left at $breakpoint */ - .pl-md-1 { padding-left: 4px !important; } - /* Set a $size padding to the left & right at $breakpoint */ - .px-md-1 { padding-right: 4px !important; padding-left: 4px !important; } - /* Set a $size padding to the top & bottom at $breakpoint */ - .py-md-1 { padding-top: 4px !important; padding-bottom: 4px !important; } - /* Set a $size padding to all sides at $breakpoint */ - .p-md-2 { padding: 8px !important; } - /* Set a $size padding to the top at $breakpoint */ - .pt-md-2 { padding-top: 8px !important; } - /* Set a $size padding to the right at $breakpoint */ - .pr-md-2 { padding-right: 8px !important; } - /* Set a $size padding to the bottom at $breakpoint */ - .pb-md-2 { padding-bottom: 8px !important; } - /* Set a $size padding to the left at $breakpoint */ - .pl-md-2 { padding-left: 8px !important; } - /* Set a $size padding to the left & right at $breakpoint */ - .px-md-2 { padding-right: 8px !important; padding-left: 8px !important; } - /* Set a $size padding to the top & bottom at $breakpoint */ - .py-md-2 { padding-top: 8px !important; padding-bottom: 8px !important; } - /* Set a $size padding to all sides at $breakpoint */ - .p-md-3 { padding: 16px !important; } - /* Set a $size padding to the top at $breakpoint */ - .pt-md-3 { padding-top: 16px !important; } - /* Set a $size padding to the right at $breakpoint */ - .pr-md-3 { padding-right: 16px !important; } - /* Set a $size padding to the bottom at $breakpoint */ - .pb-md-3 { padding-bottom: 16px !important; } - /* Set a $size padding to the left at $breakpoint */ - .pl-md-3 { padding-left: 16px !important; } - /* Set a $size padding to the left & right at $breakpoint */ - .px-md-3 { padding-right: 16px !important; padding-left: 16px !important; } - /* Set a $size padding to the top & bottom at $breakpoint */ - .py-md-3 { padding-top: 16px !important; padding-bottom: 16px !important; } - /* Set a $size padding to all sides at $breakpoint */ - .p-md-4 { padding: 24px !important; } - /* Set a $size padding to the top at $breakpoint */ - .pt-md-4 { padding-top: 24px !important; } - /* Set a $size padding to the right at $breakpoint */ - .pr-md-4 { padding-right: 24px !important; } - /* Set a $size padding to the bottom at $breakpoint */ - .pb-md-4 { padding-bottom: 24px !important; } - /* Set a $size padding to the left at $breakpoint */ - .pl-md-4 { padding-left: 24px !important; } - /* Set a $size padding to the left & right at $breakpoint */ - .px-md-4 { padding-right: 24px !important; padding-left: 24px !important; } - /* Set a $size padding to the top & bottom at $breakpoint */ - .py-md-4 { padding-top: 24px !important; padding-bottom: 24px !important; } - /* Set a $size padding to all sides at $breakpoint */ - .p-md-5 { padding: 32px !important; } - /* Set a $size padding to the top at $breakpoint */ - .pt-md-5 { padding-top: 32px !important; } - /* Set a $size padding to the right at $breakpoint */ - .pr-md-5 { padding-right: 32px !important; } - /* Set a $size padding to the bottom at $breakpoint */ - .pb-md-5 { padding-bottom: 32px !important; } - /* Set a $size padding to the left at $breakpoint */ - .pl-md-5 { padding-left: 32px !important; } - /* Set a $size padding to the left & right at $breakpoint */ - .px-md-5 { padding-right: 32px !important; padding-left: 32px !important; } - /* Set a $size padding to the top & bottom at $breakpoint */ - .py-md-5 { padding-top: 32px !important; padding-bottom: 32px !important; } - /* Set a $size padding to all sides at $breakpoint */ - .p-md-6 { padding: 40px !important; } - /* Set a $size padding to the top at $breakpoint */ - .pt-md-6 { padding-top: 40px !important; } - /* Set a $size padding to the right at $breakpoint */ - .pr-md-6 { padding-right: 40px !important; } - /* Set a $size padding to the bottom at $breakpoint */ - .pb-md-6 { padding-bottom: 40px !important; } - /* Set a $size padding to the left at $breakpoint */ - .pl-md-6 { padding-left: 40px !important; } - /* Set a $size padding to the left & right at $breakpoint */ - .px-md-6 { padding-right: 40px !important; padding-left: 40px !important; } - /* Set a $size padding to the top & bottom at $breakpoint */ - .py-md-6 { padding-top: 40px !important; padding-bottom: 40px !important; } } -@media (min-width: 1012px) { /* Set a $size padding to all sides at $breakpoint */ - .p-lg-0 { padding: 0 !important; } - /* Set a $size padding to the top at $breakpoint */ - .pt-lg-0 { padding-top: 0 !important; } - /* Set a $size padding to the right at $breakpoint */ - .pr-lg-0 { padding-right: 0 !important; } - /* Set a $size padding to the bottom at $breakpoint */ - .pb-lg-0 { padding-bottom: 0 !important; } - /* Set a $size padding to the left at $breakpoint */ - .pl-lg-0 { padding-left: 0 !important; } - /* Set a $size padding to the left & right at $breakpoint */ - .px-lg-0 { padding-right: 0 !important; padding-left: 0 !important; } - /* Set a $size padding to the top & bottom at $breakpoint */ - .py-lg-0 { padding-top: 0 !important; padding-bottom: 0 !important; } - /* Set a $size padding to all sides at $breakpoint */ - .p-lg-1 { padding: 4px !important; } - /* Set a $size padding to the top at $breakpoint */ - .pt-lg-1 { padding-top: 4px !important; } - /* Set a $size padding to the right at $breakpoint */ - .pr-lg-1 { padding-right: 4px !important; } - /* Set a $size padding to the bottom at $breakpoint */ - .pb-lg-1 { padding-bottom: 4px !important; } - /* Set a $size padding to the left at $breakpoint */ - .pl-lg-1 { padding-left: 4px !important; } - /* Set a $size padding to the left & right at $breakpoint */ - .px-lg-1 { padding-right: 4px !important; padding-left: 4px !important; } - /* Set a $size padding to the top & bottom at $breakpoint */ - .py-lg-1 { padding-top: 4px !important; padding-bottom: 4px !important; } - /* Set a $size padding to all sides at $breakpoint */ - .p-lg-2 { padding: 8px !important; } - /* Set a $size padding to the top at $breakpoint */ - .pt-lg-2 { padding-top: 8px !important; } - /* Set a $size padding to the right at $breakpoint */ - .pr-lg-2 { padding-right: 8px !important; } - /* Set a $size padding to the bottom at $breakpoint */ - .pb-lg-2 { padding-bottom: 8px !important; } - /* Set a $size padding to the left at $breakpoint */ - .pl-lg-2 { padding-left: 8px !important; } - /* Set a $size padding to the left & right at $breakpoint */ - .px-lg-2 { padding-right: 8px !important; padding-left: 8px !important; } - /* Set a $size padding to the top & bottom at $breakpoint */ - .py-lg-2 { padding-top: 8px !important; padding-bottom: 8px !important; } - /* Set a $size padding to all sides at $breakpoint */ - .p-lg-3 { padding: 16px !important; } - /* Set a $size padding to the top at $breakpoint */ - .pt-lg-3 { padding-top: 16px !important; } - /* Set a $size padding to the right at $breakpoint */ - .pr-lg-3 { padding-right: 16px !important; } - /* Set a $size padding to the bottom at $breakpoint */ - .pb-lg-3 { padding-bottom: 16px !important; } - /* Set a $size padding to the left at $breakpoint */ - .pl-lg-3 { padding-left: 16px !important; } - /* Set a $size padding to the left & right at $breakpoint */ - .px-lg-3 { padding-right: 16px !important; padding-left: 16px !important; } - /* Set a $size padding to the top & bottom at $breakpoint */ - .py-lg-3 { padding-top: 16px !important; padding-bottom: 16px !important; } - /* Set a $size padding to all sides at $breakpoint */ - .p-lg-4 { padding: 24px !important; } - /* Set a $size padding to the top at $breakpoint */ - .pt-lg-4 { padding-top: 24px !important; } - /* Set a $size padding to the right at $breakpoint */ - .pr-lg-4 { padding-right: 24px !important; } - /* Set a $size padding to the bottom at $breakpoint */ - .pb-lg-4 { padding-bottom: 24px !important; } - /* Set a $size padding to the left at $breakpoint */ - .pl-lg-4 { padding-left: 24px !important; } - /* Set a $size padding to the left & right at $breakpoint */ - .px-lg-4 { padding-right: 24px !important; padding-left: 24px !important; } - /* Set a $size padding to the top & bottom at $breakpoint */ - .py-lg-4 { padding-top: 24px !important; padding-bottom: 24px !important; } - /* Set a $size padding to all sides at $breakpoint */ - .p-lg-5 { padding: 32px !important; } - /* Set a $size padding to the top at $breakpoint */ - .pt-lg-5 { padding-top: 32px !important; } - /* Set a $size padding to the right at $breakpoint */ - .pr-lg-5 { padding-right: 32px !important; } - /* Set a $size padding to the bottom at $breakpoint */ - .pb-lg-5 { padding-bottom: 32px !important; } - /* Set a $size padding to the left at $breakpoint */ - .pl-lg-5 { padding-left: 32px !important; } - /* Set a $size padding to the left & right at $breakpoint */ - .px-lg-5 { padding-right: 32px !important; padding-left: 32px !important; } - /* Set a $size padding to the top & bottom at $breakpoint */ - .py-lg-5 { padding-top: 32px !important; padding-bottom: 32px !important; } - /* Set a $size padding to all sides at $breakpoint */ - .p-lg-6 { padding: 40px !important; } - /* Set a $size padding to the top at $breakpoint */ - .pt-lg-6 { padding-top: 40px !important; } - /* Set a $size padding to the right at $breakpoint */ - .pr-lg-6 { padding-right: 40px !important; } - /* Set a $size padding to the bottom at $breakpoint */ - .pb-lg-6 { padding-bottom: 40px !important; } - /* Set a $size padding to the left at $breakpoint */ - .pl-lg-6 { padding-left: 40px !important; } - /* Set a $size padding to the left & right at $breakpoint */ - .px-lg-6 { padding-right: 40px !important; padding-left: 40px !important; } - /* Set a $size padding to the top & bottom at $breakpoint */ - .py-lg-6 { padding-top: 40px !important; padding-bottom: 40px !important; } } -@media (min-width: 1280px) { /* Set a $size padding to all sides at $breakpoint */ - .p-xl-0 { padding: 0 !important; } - /* Set a $size padding to the top at $breakpoint */ - .pt-xl-0 { padding-top: 0 !important; } - /* Set a $size padding to the right at $breakpoint */ - .pr-xl-0 { padding-right: 0 !important; } - /* Set a $size padding to the bottom at $breakpoint */ - .pb-xl-0 { padding-bottom: 0 !important; } - /* Set a $size padding to the left at $breakpoint */ - .pl-xl-0 { padding-left: 0 !important; } - /* Set a $size padding to the left & right at $breakpoint */ - .px-xl-0 { padding-right: 0 !important; padding-left: 0 !important; } - /* Set a $size padding to the top & bottom at $breakpoint */ - .py-xl-0 { padding-top: 0 !important; padding-bottom: 0 !important; } - /* Set a $size padding to all sides at $breakpoint */ - .p-xl-1 { padding: 4px !important; } - /* Set a $size padding to the top at $breakpoint */ - .pt-xl-1 { padding-top: 4px !important; } - /* Set a $size padding to the right at $breakpoint */ - .pr-xl-1 { padding-right: 4px !important; } - /* Set a $size padding to the bottom at $breakpoint */ - .pb-xl-1 { padding-bottom: 4px !important; } - /* Set a $size padding to the left at $breakpoint */ - .pl-xl-1 { padding-left: 4px !important; } - /* Set a $size padding to the left & right at $breakpoint */ - .px-xl-1 { padding-right: 4px !important; padding-left: 4px !important; } - /* Set a $size padding to the top & bottom at $breakpoint */ - .py-xl-1 { padding-top: 4px !important; padding-bottom: 4px !important; } - /* Set a $size padding to all sides at $breakpoint */ - .p-xl-2 { padding: 8px !important; } - /* Set a $size padding to the top at $breakpoint */ - .pt-xl-2 { padding-top: 8px !important; } - /* Set a $size padding to the right at $breakpoint */ - .pr-xl-2 { padding-right: 8px !important; } - /* Set a $size padding to the bottom at $breakpoint */ - .pb-xl-2 { padding-bottom: 8px !important; } - /* Set a $size padding to the left at $breakpoint */ - .pl-xl-2 { padding-left: 8px !important; } - /* Set a $size padding to the left & right at $breakpoint */ - .px-xl-2 { padding-right: 8px !important; padding-left: 8px !important; } - /* Set a $size padding to the top & bottom at $breakpoint */ - .py-xl-2 { padding-top: 8px !important; padding-bottom: 8px !important; } - /* Set a $size padding to all sides at $breakpoint */ - .p-xl-3 { padding: 16px !important; } - /* Set a $size padding to the top at $breakpoint */ - .pt-xl-3 { padding-top: 16px !important; } - /* Set a $size padding to the right at $breakpoint */ - .pr-xl-3 { padding-right: 16px !important; } - /* Set a $size padding to the bottom at $breakpoint */ - .pb-xl-3 { padding-bottom: 16px !important; } - /* Set a $size padding to the left at $breakpoint */ - .pl-xl-3 { padding-left: 16px !important; } - /* Set a $size padding to the left & right at $breakpoint */ - .px-xl-3 { padding-right: 16px !important; padding-left: 16px !important; } - /* Set a $size padding to the top & bottom at $breakpoint */ - .py-xl-3 { padding-top: 16px !important; padding-bottom: 16px !important; } - /* Set a $size padding to all sides at $breakpoint */ - .p-xl-4 { padding: 24px !important; } - /* Set a $size padding to the top at $breakpoint */ - .pt-xl-4 { padding-top: 24px !important; } - /* Set a $size padding to the right at $breakpoint */ - .pr-xl-4 { padding-right: 24px !important; } - /* Set a $size padding to the bottom at $breakpoint */ - .pb-xl-4 { padding-bottom: 24px !important; } - /* Set a $size padding to the left at $breakpoint */ - .pl-xl-4 { padding-left: 24px !important; } - /* Set a $size padding to the left & right at $breakpoint */ - .px-xl-4 { padding-right: 24px !important; padding-left: 24px !important; } - /* Set a $size padding to the top & bottom at $breakpoint */ - .py-xl-4 { padding-top: 24px !important; padding-bottom: 24px !important; } - /* Set a $size padding to all sides at $breakpoint */ - .p-xl-5 { padding: 32px !important; } - /* Set a $size padding to the top at $breakpoint */ - .pt-xl-5 { padding-top: 32px !important; } - /* Set a $size padding to the right at $breakpoint */ - .pr-xl-5 { padding-right: 32px !important; } - /* Set a $size padding to the bottom at $breakpoint */ - .pb-xl-5 { padding-bottom: 32px !important; } - /* Set a $size padding to the left at $breakpoint */ - .pl-xl-5 { padding-left: 32px !important; } - /* Set a $size padding to the left & right at $breakpoint */ - .px-xl-5 { padding-right: 32px !important; padding-left: 32px !important; } - /* Set a $size padding to the top & bottom at $breakpoint */ - .py-xl-5 { padding-top: 32px !important; padding-bottom: 32px !important; } - /* Set a $size padding to all sides at $breakpoint */ - .p-xl-6 { padding: 40px !important; } - /* Set a $size padding to the top at $breakpoint */ - .pt-xl-6 { padding-top: 40px !important; } - /* Set a $size padding to the right at $breakpoint */ - .pr-xl-6 { padding-right: 40px !important; } - /* Set a $size padding to the bottom at $breakpoint */ - .pb-xl-6 { padding-bottom: 40px !important; } - /* Set a $size padding to the left at $breakpoint */ - .pl-xl-6 { padding-left: 40px !important; } - /* Set a $size padding to the left & right at $breakpoint */ - .px-xl-6 { padding-right: 40px !important; padding-left: 40px !important; } - /* Set a $size padding to the top & bottom at $breakpoint */ - .py-xl-6 { padding-top: 40px !important; padding-bottom: 40px !important; } } -.p-responsive { padding-right: 16px !important; padding-left: 16px !important; } -@media (min-width: 544px) { .p-responsive { padding-right: 40px !important; padding-left: 40px !important; } } -@media (min-width: 1012px) { .p-responsive { padding-right: 16px !important; padding-left: 16px !important; } } - -/* Set the font size to 26px */ -.h1 { font-size: 26px !important; } -@media (min-width: 768px) { .h1 { font-size: 32px !important; } } - -/* Set the font size to 22px */ -.h2 { font-size: 22px !important; } -@media (min-width: 768px) { .h2 { font-size: 24px !important; } } - -/* Set the font size to 18px */ -.h3 { font-size: 18px !important; } -@media (min-width: 768px) { .h3 { font-size: 20px !important; } } - -/* Set the font size to 16px */ -.h4 { font-size: 16px !important; } - -/* Set the font size to 14px */ -.h5 { font-size: 14px !important; } - -/* Set the font size to 12px */ -.h6 { font-size: 12px !important; } - -.h1, .h2, .h3, .h4, .h5, .h6 { font-weight: 600 !important; } - -/* Set the font size to 26px */ -.f1 { font-size: 26px !important; } -@media (min-width: 768px) { .f1 { font-size: 32px !important; } } - -/* Set the font size to 22px */ -.f2 { font-size: 22px !important; } -@media (min-width: 768px) { .f2 { font-size: 24px !important; } } - -/* Set the font size to 18px */ -.f3 { font-size: 18px !important; } -@media (min-width: 768px) { .f3 { font-size: 20px !important; } } - -/* Set the font size to 16px */ -.f4 { font-size: 16px !important; } -@media (min-width: 768px) { .f4 { font-size: 16px !important; } } - -/* Set the font size to 14px */ -.f5 { font-size: 14px !important; } - -/* Set the font size to 12px */ -.f6 { font-size: 12px !important; } - -/* Set the font size to 40px and weight to light */ -.f00-light { font-size: 40px !important; font-weight: 300 !important; } -@media (min-width: 768px) { .f00-light { font-size: 48px !important; } } - -/* Set the font size to 32px and weight to light */ -.f0-light { font-size: 32px !important; font-weight: 300 !important; } -@media (min-width: 768px) { .f0-light { font-size: 40px !important; } } - -/* Set the font size to 26px and weight to light */ -.f1-light { font-size: 26px !important; font-weight: 300 !important; } -@media (min-width: 768px) { .f1-light { font-size: 32px !important; } } - -/* Set the font size to 22px and weight to light */ -.f2-light { font-size: 22px !important; font-weight: 300 !important; } -@media (min-width: 768px) { .f2-light { font-size: 24px !important; } } - -/* Set the font size to 18px and weight to light */ -.f3-light { font-size: 18px !important; font-weight: 300 !important; } -@media (min-width: 768px) { .f3-light { font-size: 20px !important; } } - -/* Set the font size to ${#h6-size} */ -.text-small { font-size: 12px !important; } - -/* Large leading paragraphs */ -.lead { margin-bottom: 30px; font-size: 20px; font-weight: 300; color: #586069; } - -/* Set the line height to ultra condensed */ -.lh-condensed-ultra { line-height: 1 !important; } - -/* Set the line height to condensed */ -.lh-condensed { line-height: 1.25 !important; } - -/* Set the line height to default */ -.lh-default { line-height: 1.5 !important; } - -/* Set the line height to zero */ -.lh-0 { line-height: 0 !important; } - -/* Text align to the right */ -.text-right { text-align: right !important; } - -/* Text align to the left */ -.text-left { text-align: left !important; } - -/* Text align to the center */ -.text-center { text-align: center !important; } - -@media (min-width: 544px) { /* Text align to the right */ - .text-sm-right { text-align: right !important; } - /* Text align to the left */ - .text-sm-left { text-align: left !important; } - /* Text align to the center */ - .text-sm-center { text-align: center !important; } } -@media (min-width: 768px) { /* Text align to the right */ - .text-md-right { text-align: right !important; } - /* Text align to the left */ - .text-md-left { text-align: left !important; } - /* Text align to the center */ - .text-md-center { text-align: center !important; } } -@media (min-width: 1012px) { /* Text align to the right */ - .text-lg-right { text-align: right !important; } - /* Text align to the left */ - .text-lg-left { text-align: left !important; } - /* Text align to the center */ - .text-lg-center { text-align: center !important; } } -@media (min-width: 1280px) { /* Text align to the right */ - .text-xl-right { text-align: right !important; } - /* Text align to the left */ - .text-xl-left { text-align: left !important; } - /* Text align to the center */ - .text-xl-center { text-align: center !important; } } -/* Set the font weight to normal */ -.text-normal { font-weight: 400 !important; } - -/* Set the font weight to bold */ -.text-bold { font-weight: 600 !important; } - -/* Set the font to italic */ -.text-italic { font-style: italic !important; } - -/* Make text uppercase */ -.text-uppercase { text-transform: uppercase !important; } - -/* Underline text */ -.text-underline { text-decoration: underline !important; } - -/* Don't underline text */ -.no-underline { text-decoration: none !important; } - -/* Don't wrap white space */ -.no-wrap { white-space: nowrap !important; } - -/* Normal white space */ -.ws-normal { white-space: normal !important; } - -/* Allow long lines with no spaces to line break */ -.wb-break-all { word-break: break-all !important; } - -.text-emphasized { font-weight: 600; color: #24292e; } - -.list-style-none { list-style: none !important; } - -/* Add a dark text shadow */ -.text-shadow-dark { text-shadow: 0 1px 1px rgba(27, 31, 35, 0.25), 0 1px 25px rgba(27, 31, 35, 0.75); } - -/* Add a light text shadow */ -.text-shadow-light { text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); } - -/* Set to monospace font */ -.text-mono { font-family: "SFMono-Regular", Consolas, "Liberation Mono", Menlo, Courier, monospace; } - -/* Disallow user from selecting text */ -.user-select-none { user-select: none !important; } - -.d-block { display: block !important; } - -.d-flex { display: flex !important; } - -.d-inline { display: inline !important; } - -.d-inline-block { display: inline-block !important; } - -.d-inline-flex { display: inline-flex !important; } - -.d-none { display: none !important; } - -.d-table { display: table !important; } - -.d-table-cell { display: table-cell !important; } - -@media (min-width: 544px) { .d-sm-block { display: block !important; } - .d-sm-flex { display: flex !important; } - .d-sm-inline { display: inline !important; } - .d-sm-inline-block { display: inline-block !important; } - .d-sm-inline-flex { display: inline-flex !important; } - .d-sm-none { display: none !important; } - .d-sm-table { display: table !important; } - .d-sm-table-cell { display: table-cell !important; } } -@media (min-width: 768px) { .d-md-block { display: block !important; } - .d-md-flex { display: flex !important; } - .d-md-inline { display: inline !important; } - .d-md-inline-block { display: inline-block !important; } - .d-md-inline-flex { display: inline-flex !important; } - .d-md-none { display: none !important; } - .d-md-table { display: table !important; } - .d-md-table-cell { display: table-cell !important; } } -@media (min-width: 1012px) { .d-lg-block { display: block !important; } - .d-lg-flex { display: flex !important; } - .d-lg-inline { display: inline !important; } - .d-lg-inline-block { display: inline-block !important; } - .d-lg-inline-flex { display: inline-flex !important; } - .d-lg-none { display: none !important; } - .d-lg-table { display: table !important; } - .d-lg-table-cell { display: table-cell !important; } } -@media (min-width: 1280px) { .d-xl-block { display: block !important; } - .d-xl-flex { display: flex !important; } - .d-xl-inline { display: inline !important; } - .d-xl-inline-block { display: inline-block !important; } - .d-xl-inline-flex { display: inline-flex !important; } - .d-xl-none { display: none !important; } - .d-xl-table { display: table !important; } - .d-xl-table-cell { display: table-cell !important; } } -.v-hidden { visibility: hidden !important; } - -.v-visible { visibility: visible !important; } - -@media (max-width: 544px) { .hide-sm { display: none !important; } } -@media (min-width: 544px) and (max-width: 768px) { .hide-md { display: none !important; } } -@media (min-width: 768px) and (max-width: 1012px) { .hide-lg { display: none !important; } } -@media (min-width: 1012px) { .hide-xl { display: none !important; } } -/* Set the table-layout to fixed */ -.table-fixed { table-layout: fixed !important; } - -.sr-only { position: absolute; width: 1px; height: 1px; padding: 0; overflow: hidden; clip: rect(0, 0, 0, 0); word-wrap: normal; border: 0; } - -.show-on-focus { position: absolute; width: 1px; height: 1px; margin: 0; overflow: hidden; clip: rect(1px, 1px, 1px, 1px); } -.show-on-focus:focus { z-index: 20; width: auto; height: auto; clip: auto; } - -.container { width: 980px; margin-right: auto; margin-left: auto; } -.container::before { display: table; content: ""; } -.container::after { display: table; clear: both; content: ""; } - -.container-md { max-width: 768px; margin-right: auto; margin-left: auto; } - -.container-lg { max-width: 1012px; margin-right: auto; margin-left: auto; } - -.container-xl { max-width: 1280px; margin-right: auto; margin-left: auto; } - -.columns { margin-right: -10px; margin-left: -10px; } -.columns::before { display: table; content: ""; } -.columns::after { display: table; clear: both; content: ""; } - -.column { float: left; padding-right: 10px; padding-left: 10px; } - -.one-third { width: 33.333333%; } - -.two-thirds { width: 66.666667%; } - -.one-fourth { width: 25%; } - -.one-half { width: 50%; } - -.three-fourths { width: 75%; } - -.one-fifth { width: 20%; } - -.four-fifths { width: 80%; } - -.centered { display: block; float: none; margin-right: auto; margin-left: auto; } - -.col-1 { width: 8.3333333333%; } - -.col-2 { width: 16.6666666667%; } - -.col-3 { width: 25%; } - -.col-4 { width: 33.3333333333%; } - -.col-5 { width: 41.6666666667%; } - -.col-6 { width: 50%; } - -.col-7 { width: 58.3333333333%; } - -.col-8 { width: 66.6666666667%; } - -.col-9 { width: 75%; } - -.col-10 { width: 83.3333333333%; } - -.col-11 { width: 91.6666666667%; } - -.col-12 { width: 100%; } - -@media (min-width: 544px) { .col-sm-1 { width: 8.3333333333%; } - .col-sm-2 { width: 16.6666666667%; } - .col-sm-3 { width: 25%; } - .col-sm-4 { width: 33.3333333333%; } - .col-sm-5 { width: 41.6666666667%; } - .col-sm-6 { width: 50%; } - .col-sm-7 { width: 58.3333333333%; } - .col-sm-8 { width: 66.6666666667%; } - .col-sm-9 { width: 75%; } - .col-sm-10 { width: 83.3333333333%; } - .col-sm-11 { width: 91.6666666667%; } - .col-sm-12 { width: 100%; } } -@media (min-width: 768px) { .col-md-1 { width: 8.3333333333%; } - .col-md-2 { width: 16.6666666667%; } - .col-md-3 { width: 25%; } - .col-md-4 { width: 33.3333333333%; } - .col-md-5 { width: 41.6666666667%; } - .col-md-6 { width: 50%; } - .col-md-7 { width: 58.3333333333%; } - .col-md-8 { width: 66.6666666667%; } - .col-md-9 { width: 75%; } - .col-md-10 { width: 83.3333333333%; } - .col-md-11 { width: 91.6666666667%; } - .col-md-12 { width: 100%; } } -@media (min-width: 1012px) { .col-lg-1 { width: 8.3333333333%; } - .col-lg-2 { width: 16.6666666667%; } - .col-lg-3 { width: 25%; } - .col-lg-4 { width: 33.3333333333%; } - .col-lg-5 { width: 41.6666666667%; } - .col-lg-6 { width: 50%; } - .col-lg-7 { width: 58.3333333333%; } - .col-lg-8 { width: 66.6666666667%; } - .col-lg-9 { width: 75%; } - .col-lg-10 { width: 83.3333333333%; } - .col-lg-11 { width: 91.6666666667%; } - .col-lg-12 { width: 100%; } } -@media (min-width: 1280px) { .col-xl-1 { width: 8.3333333333%; } - .col-xl-2 { width: 16.6666666667%; } - .col-xl-3 { width: 25%; } - .col-xl-4 { width: 33.3333333333%; } - .col-xl-5 { width: 41.6666666667%; } - .col-xl-6 { width: 50%; } - .col-xl-7 { width: 58.3333333333%; } - .col-xl-8 { width: 66.6666666667%; } - .col-xl-9 { width: 75%; } - .col-xl-10 { width: 83.3333333333%; } - .col-xl-11 { width: 91.6666666667%; } - .col-xl-12 { width: 100%; } } -.gutter { margin-right: -16px; margin-left: -16px; } -.gutter > [class*="col-"] { padding-right: 16px !important; padding-left: 16px !important; } - -.gutter-condensed { margin-right: -8px; margin-left: -8px; } -.gutter-condensed > [class*="col-"] { padding-right: 8px !important; padding-left: 8px !important; } - -.gutter-spacious { margin-right: -24px; margin-left: -24px; } -.gutter-spacious > [class*="col-"] { padding-right: 24px !important; padding-left: 24px !important; } - -@media (min-width: 544px) { .gutter-sm { margin-right: -16px; margin-left: -16px; } - .gutter-sm > [class*="col-"] { padding-right: 16px !important; padding-left: 16px !important; } - .gutter-sm-condensed { margin-right: -8px; margin-left: -8px; } - .gutter-sm-condensed > [class*="col-"] { padding-right: 8px !important; padding-left: 8px !important; } - .gutter-sm-spacious { margin-right: -24px; margin-left: -24px; } - .gutter-sm-spacious > [class*="col-"] { padding-right: 24px !important; padding-left: 24px !important; } } -@media (min-width: 768px) { .gutter-md { margin-right: -16px; margin-left: -16px; } - .gutter-md > [class*="col-"] { padding-right: 16px !important; padding-left: 16px !important; } - .gutter-md-condensed { margin-right: -8px; margin-left: -8px; } - .gutter-md-condensed > [class*="col-"] { padding-right: 8px !important; padding-left: 8px !important; } - .gutter-md-spacious { margin-right: -24px; margin-left: -24px; } - .gutter-md-spacious > [class*="col-"] { padding-right: 24px !important; padding-left: 24px !important; } } -@media (min-width: 1012px) { .gutter-lg { margin-right: -16px; margin-left: -16px; } - .gutter-lg > [class*="col-"] { padding-right: 16px !important; padding-left: 16px !important; } - .gutter-lg-condensed { margin-right: -8px; margin-left: -8px; } - .gutter-lg-condensed > [class*="col-"] { padding-right: 8px !important; padding-left: 8px !important; } - .gutter-lg-spacious { margin-right: -24px; margin-left: -24px; } - .gutter-lg-spacious > [class*="col-"] { padding-right: 24px !important; padding-left: 24px !important; } } -@media (min-width: 1280px) { .gutter-xl { margin-right: -16px; margin-left: -16px; } - .gutter-xl > [class*="col-"] { padding-right: 16px !important; padding-left: 16px !important; } - .gutter-xl-condensed { margin-right: -8px; margin-left: -8px; } - .gutter-xl-condensed > [class*="col-"] { padding-right: 8px !important; padding-left: 8px !important; } - .gutter-xl-spacious { margin-right: -24px; margin-left: -24px; } - .gutter-xl-spacious > [class*="col-"] { padding-right: 24px !important; padding-left: 24px !important; } } -.offset-1 { margin-left: 8.3333333333% !important; } - -.offset-2 { margin-left: 16.6666666667% !important; } - -.offset-3 { margin-left: 25% !important; } - -.offset-4 { margin-left: 33.3333333333% !important; } - -.offset-5 { margin-left: 41.6666666667% !important; } - -.offset-6 { margin-left: 50% !important; } - -.offset-7 { margin-left: 58.3333333333% !important; } - -.offset-8 { margin-left: 66.6666666667% !important; } - -.offset-9 { margin-left: 75% !important; } - -.offset-10 { margin-left: 83.3333333333% !important; } - -.offset-11 { margin-left: 91.6666666667% !important; } - -@media (min-width: 544px) { .offset-sm-1 { margin-left: 8.3333333333% !important; } - .offset-sm-2 { margin-left: 16.6666666667% !important; } - .offset-sm-3 { margin-left: 25% !important; } - .offset-sm-4 { margin-left: 33.3333333333% !important; } - .offset-sm-5 { margin-left: 41.6666666667% !important; } - .offset-sm-6 { margin-left: 50% !important; } - .offset-sm-7 { margin-left: 58.3333333333% !important; } - .offset-sm-8 { margin-left: 66.6666666667% !important; } - .offset-sm-9 { margin-left: 75% !important; } - .offset-sm-10 { margin-left: 83.3333333333% !important; } - .offset-sm-11 { margin-left: 91.6666666667% !important; } } -@media (min-width: 768px) { .offset-md-1 { margin-left: 8.3333333333% !important; } - .offset-md-2 { margin-left: 16.6666666667% !important; } - .offset-md-3 { margin-left: 25% !important; } - .offset-md-4 { margin-left: 33.3333333333% !important; } - .offset-md-5 { margin-left: 41.6666666667% !important; } - .offset-md-6 { margin-left: 50% !important; } - .offset-md-7 { margin-left: 58.3333333333% !important; } - .offset-md-8 { margin-left: 66.6666666667% !important; } - .offset-md-9 { margin-left: 75% !important; } - .offset-md-10 { margin-left: 83.3333333333% !important; } - .offset-md-11 { margin-left: 91.6666666667% !important; } } -@media (min-width: 1012px) { .offset-lg-1 { margin-left: 8.3333333333% !important; } - .offset-lg-2 { margin-left: 16.6666666667% !important; } - .offset-lg-3 { margin-left: 25% !important; } - .offset-lg-4 { margin-left: 33.3333333333% !important; } - .offset-lg-5 { margin-left: 41.6666666667% !important; } - .offset-lg-6 { margin-left: 50% !important; } - .offset-lg-7 { margin-left: 58.3333333333% !important; } - .offset-lg-8 { margin-left: 66.6666666667% !important; } - .offset-lg-9 { margin-left: 75% !important; } - .offset-lg-10 { margin-left: 83.3333333333% !important; } - .offset-lg-11 { margin-left: 91.6666666667% !important; } } -@media (min-width: 1280px) { .offset-xl-1 { margin-left: 8.3333333333% !important; } - .offset-xl-2 { margin-left: 16.6666666667% !important; } - .offset-xl-3 { margin-left: 25% !important; } - .offset-xl-4 { margin-left: 33.3333333333% !important; } - .offset-xl-5 { margin-left: 41.6666666667% !important; } - .offset-xl-6 { margin-left: 50% !important; } - .offset-xl-7 { margin-left: 58.3333333333% !important; } - .offset-xl-8 { margin-left: 66.6666666667% !important; } - .offset-xl-9 { margin-left: 75% !important; } - .offset-xl-10 { margin-left: 83.3333333333% !important; } - .offset-xl-11 { margin-left: 91.6666666667% !important; } } -.markdown-body { font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; font-size: 16px; line-height: 1.5; word-wrap: break-word; } -.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: #cb2431; } -.markdown-body .anchor { float: left; padding-right: 4px; 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 { margin-top: 0; margin-bottom: 16px; } -.markdown-body hr { height: 0.25em; padding: 0; margin: 24px 0; background-color: #e1e4e8; border: 0; } -.markdown-body blockquote { padding: 0 1em; color: #6a737d; border-left: 0.25em solid #dfe2e5; } -.markdown-body blockquote > :first-child { margin-top: 0; } -.markdown-body blockquote > :last-child { margin-bottom: 0; } -.markdown-body kbd { display: inline-block; padding: 3px 5px; font-size: 11px; line-height: 10px; color: #444d56; vertical-align: middle; background-color: #fafbfc; border: solid 1px #c6cbd1; border-bottom-color: #959da5; border-radius: 3px; box-shadow: inset 0 -1px 0 #959da5; } - -.markdown-body h1, .markdown-body h2, .markdown-body h3, .markdown-body h4, .markdown-body h5, .markdown-body h6 { margin-top: 24px; margin-bottom: 16px; font-weight: 600; line-height: 1.25; } -.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: #1b1f23; 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 { font-size: inherit; } -.markdown-body h1 { padding-bottom: 0.3em; font-size: 2em; border-bottom: 1px solid #eaecef; } -.markdown-body h2 { padding-bottom: 0.3em; font-size: 1.5em; border-bottom: 1px solid #eaecef; } -.markdown-body h3 { font-size: 1.25em; } -.markdown-body h4 { font-size: 1em; } -.markdown-body h5 { font-size: 0.875em; } -.markdown-body h6 { font-size: 0.85em; color: #6a737d; } - -.markdown-body ul, .markdown-body ol { padding-left: 2em; } -.markdown-body ul.no-list, .markdown-body ol.no-list { padding: 0; list-style-type: none; } -.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 { word-wrap: break-all; } -.markdown-body li > p { margin-top: 16px; } -.markdown-body li + li { margin-top: 0.25em; } -.markdown-body dl { padding: 0; } -.markdown-body dl dt { padding: 0; margin-top: 16px; font-size: 1em; font-style: italic; font-weight: 600; } -.markdown-body dl dd { padding: 0 16px; margin-bottom: 16px; } - -.markdown-body table { display: block; width: 100%; overflow: auto; } -.markdown-body table th { font-weight: 600; } -.markdown-body table th, .markdown-body table td { padding: 6px 13px; border: 1px solid #dfe2e5; } -.markdown-body table tr { background-color: #fff; border-top: 1px solid #c6cbd1; } -.markdown-body table tr:nth-child(2n) { background-color: #f6f8fa; } -.markdown-body table img { background-color: transparent; } - -.markdown-body img { max-width: 100%; box-sizing: content-box; background-color: #fff; } -.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 #dfe2e5; } -.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: #24292e; } -.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: 0.2em 0.4em; margin: 0; font-size: 85%; background-color: rgba(27, 31, 35, 0.05); border-radius: 3px; } -.markdown-body code br, .markdown-body tt br { display: none; } -.markdown-body del code { text-decoration: inherit; } -.markdown-body pre { word-wrap: normal; } -.markdown-body pre > code { padding: 0; margin: 0; font-size: 100%; word-break: normal; white-space: pre; background: transparent; border: 0; } -.markdown-body .highlight { margin-bottom: 16px; } -.markdown-body .highlight pre { margin-bottom: 0; word-break: normal; } -.markdown-body .highlight pre, .markdown-body pre { padding: 16px; overflow: auto; font-size: 85%; line-height: 1.45; background-color: #f6f8fa; border-radius: 3px; } -.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 8px 9px; text-align: right; background: #fff; border: 0; } -.markdown-body .csv-data tr { border-top: 0; } -.markdown-body .csv-data th { font-weight: 600; background: #f6f8fa; border-top: 0; } - -.highlight table td { padding: 5px; } - -.highlight table pre { margin: 0; } - -.highlight .cm { color: #999988; font-style: italic; } - -.highlight .cp { color: #999999; font-weight: bold; } - -.highlight .c1 { color: #999988; font-style: italic; } - -.highlight .cs { color: #999999; font-weight: bold; font-style: italic; } - -.highlight .c, .highlight .cd { color: #999988; font-style: italic; } - -.highlight .err { color: #a61717; background-color: #e3d2d2; } - -.highlight .gd { color: #000000; background-color: #ffdddd; } - -.highlight .ge { color: #000000; font-style: italic; } - -.highlight .gr { color: #aa0000; } - -.highlight .gh { color: #999999; } - -.highlight .gi { color: #000000; background-color: #ddffdd; } - -.highlight .go { color: #888888; } - -.highlight .gp { color: #555555; } - -.highlight .gs { font-weight: bold; } - -.highlight .gu { color: #aaaaaa; } - -.highlight .gt { color: #aa0000; } - -.highlight .kc { color: #000000; font-weight: bold; } - -.highlight .kd { color: #000000; font-weight: bold; } - -.highlight .kn { color: #000000; font-weight: bold; } - -.highlight .kp { color: #000000; font-weight: bold; } - -.highlight .kr { color: #000000; font-weight: bold; } - -.highlight .kt { color: #445588; font-weight: bold; } - -.highlight .k, .highlight .kv { color: #000000; font-weight: bold; } - -.highlight .mf { color: #009999; } - -.highlight .mh { color: #009999; } - -.highlight .il { color: #009999; } - -.highlight .mi { color: #009999; } - -.highlight .mo { color: #009999; } - -.highlight .m, .highlight .mb, .highlight .mx { color: #009999; } - -.highlight .sb { color: #d14; } - -.highlight .sc { color: #d14; } - -.highlight .sd { color: #d14; } - -.highlight .s2 { color: #d14; } - -.highlight .se { color: #d14; } - -.highlight .sh { color: #d14; } - -.highlight .si { color: #d14; } - -.highlight .sx { color: #d14; } - -.highlight .sr { color: #009926; } - -.highlight .s1 { color: #d14; } - -.highlight .ss { color: #990073; } - -.highlight .s { color: #d14; } - -.highlight .na { color: #008080; } - -.highlight .bp { color: #999999; } - -.highlight .nb { color: #0086B3; } - -.highlight .nc { color: #445588; font-weight: bold; } - -.highlight .no { color: #008080; } - -.highlight .nd { color: #3c5d5d; font-weight: bold; } - -.highlight .ni { color: #800080; } - -.highlight .ne { color: #990000; font-weight: bold; } - -.highlight .nf { color: #990000; font-weight: bold; } - -.highlight .nl { color: #990000; font-weight: bold; } - -.highlight .nn { color: #555555; } - -.highlight .nt { color: #000080; } - -.highlight .vc { color: #008080; } - -.highlight .vg { color: #008080; } - -.highlight .vi { color: #008080; } - -.highlight .nv { color: #008080; } - -.highlight .ow { color: #000000; font-weight: bold; } - -.highlight .o { color: #000000; font-weight: bold; } - -.highlight .w { color: #bbbbbb; } - -.highlight { background-color: #f8f8f8; } diff --git a/docs/website/images/GitHub_Logo.png b/docs/website/images/GitHub_Logo.png deleted file mode 100644 index 4372f52..0000000 Binary files a/docs/website/images/GitHub_Logo.png and /dev/null differ diff --git a/docs/website/images/autokeras_logo.png b/docs/website/images/autokeras_logo.png deleted file mode 100644 index 3916b8b..0000000 Binary files a/docs/website/images/autokeras_logo.png and /dev/null differ diff --git a/docs/website/images/automl_logos.png b/docs/website/images/automl_logos.png deleted file mode 100644 index abd9fba..0000000 Binary files a/docs/website/images/automl_logos.png and /dev/null differ diff --git a/docs/website/images/bball_favicon.png b/docs/website/images/bball_favicon.png deleted file mode 100644 index 937a99c..0000000 Binary files a/docs/website/images/bball_favicon.png and /dev/null differ diff --git a/docs/website/images/bet_decisions.png b/docs/website/images/bet_decisions.png deleted file mode 100644 index 7aa911e..0000000 Binary files a/docs/website/images/bet_decisions.png and /dev/null differ diff --git a/docs/website/images/cls_model_accuracy.png b/docs/website/images/cls_model_accuracy.png deleted file mode 100644 index 07d6da2..0000000 Binary files a/docs/website/images/cls_model_accuracy.png and /dev/null differ diff --git a/docs/website/images/custom_model_overview.png b/docs/website/images/custom_model_overview.png deleted file mode 100644 index 704429f..0000000 Binary files a/docs/website/images/custom_model_overview.png and /dev/null differ diff --git a/docs/website/images/custom_model_requirements.png b/docs/website/images/custom_model_requirements.png deleted file mode 100644 index 0965016..0000000 Binary files a/docs/website/images/custom_model_requirements.png and /dev/null differ diff --git a/docs/website/images/daily_update_data_flow_diagram.png b/docs/website/images/daily_update_data_flow_diagram.png deleted file mode 100644 index 14fd93b..0000000 Binary files a/docs/website/images/daily_update_data_flow_diagram.png and /dev/null differ diff --git a/docs/website/images/dashboard.png b/docs/website/images/dashboard.png deleted file mode 100644 index 0dfad33..0000000 Binary files a/docs/website/images/dashboard.png and /dev/null differ diff --git a/docs/website/images/data_engineering_flowchart_1.png b/docs/website/images/data_engineering_flowchart_1.png deleted file mode 100644 index b3ab18a..0000000 Binary files a/docs/website/images/data_engineering_flowchart_1.png and /dev/null differ diff --git a/docs/website/images/data_engineering_flowchart_2.png b/docs/website/images/data_engineering_flowchart_2.png deleted file mode 100644 index 58bc362..0000000 Binary files a/docs/website/images/data_engineering_flowchart_2.png and /dev/null differ diff --git a/docs/website/images/github-mark.png b/docs/website/images/github-mark.png deleted file mode 100644 index 6cb3b70..0000000 Binary files a/docs/website/images/github-mark.png and /dev/null differ diff --git a/docs/website/images/nba_header.png b/docs/website/images/nba_header.png deleted file mode 100644 index c021c95..0000000 Binary files a/docs/website/images/nba_header.png and /dev/null differ diff --git a/docs/website/images/vegas_miss_abs.png b/docs/website/images/vegas_miss_abs.png deleted file mode 100644 index 14385f6..0000000 Binary files a/docs/website/images/vegas_miss_abs.png and /dev/null differ diff --git a/docs/website/images/vegas_miss_by_week.png b/docs/website/images/vegas_miss_by_week.png deleted file mode 100644 index 2856707..0000000 Binary files a/docs/website/images/vegas_miss_by_week.png and /dev/null differ diff --git a/docs/website/images/vegas_miss_statistics.png b/docs/website/images/vegas_miss_statistics.png deleted file mode 100644 index e6af3a9..0000000 Binary files a/docs/website/images/vegas_miss_statistics.png and /dev/null differ diff --git a/docs/website/images/web_app.png b/docs/website/images/web_app.png deleted file mode 100644 index 830bc9b..0000000 Binary files a/docs/website/images/web_app.png and /dev/null differ diff --git a/docs/website/index.html b/docs/website/index.html deleted file mode 100644 index a1fd322..0000000 --- a/docs/website/index.html +++ /dev/null @@ -1,588 +0,0 @@ - - - -
- -Create a Comprehensive and Profitable System for Predicting the - Outcomes of NBA Games. -
- -Under the 'comprehensive' aspect, the project will explore and test all plausible prediction methods, - ensuring an evolving scope and prioritization based on the utility of the results. This creates a - potentially never-ending project scope, focusing on the most impactful methods first.
- -The 'profitable' aspect aims to transcend theoretical exercises, focusing on generating direct financial - gains or actionable insights for profitable betting decisions. However, consistent success in - outperforming betting markets presents challenges, including the potential erosion of profitability if - widely accessible. Therefore, while aiming for profitability, the project will be strategically managed - to balance public access and financial viability.
- -Initially, the project will focus on predicting the final score margins. In its long-term vision, it will - expand to cover other betting domains like over/under and player props, embracing a broad definition of - 'outcomes'.
- -This project is not just an analysis or a static model, but a continuously evolving resource aimed at - setting new standards in predictive analytics for NBA games.
- -NBA betting uniquely aligns with my interests, knowledge, skills, and goals, making it an exciting and - beneficial project for me - a fortunate convergence of passions!
- -How do we predict the outcome of an NBA game? What are the inputs, and how do they interplay to yield - accurate predictions? From a data science viewpoint, the challenge lies in identifying the optimal - feature set and designing an effective model architecture.
- -Given the structured nature of sports and the abundant public data, the approach to this problem can vary - significantly. The vast amount of data available for a single NBA game outstrips what is typically found - in fields like finance, manufacturing, or IoT in terms of both breadth and depth. This abundance is both - a blessing and a challenge: the options are plentiful, but selecting the right ones and managing them - effectively is crucial.
- -Below is the current framework for organizing this project. It outlines the proposed methodology, data - sources, and model structure. This framework is open to evolution, and I welcome suggestions for - refinement or alternative approaches.
- -Organizing and conceptualizing approaches to NBA game predictions involves multiple layers, each - influenced by data sources and model architectures. We've divided this complex question into four - distinct levels. Each level can function independently for predictions or be aggregated as part of a - higher-level framework.
- -Join the discussion on our approach: GitHub Discussion - - Frameworks
- -Deciding which data points to pursue is a complex yet crucial part of this project. The challenge lies in - identifying the most relevant and impactful types of data from a plethora of available sources. This - includes determining the optimal format and granularity of the data, whether it be raw data, traditional - stats, advanced metrics, or even public perception and power rankings.
- -Initially, the project aimed to collect a broad array of data categories, but it quickly became evident - that each data point carries its own set of challenges, especially in terms of acquisition and - management. Consequently, a more strategic approach is needed, focusing on the most beneficial data in - terms of time and resources.
- -Data acquisition has been the most time-consuming phase so far, further complicated by the time series - nature of sports data. Predictive metrics vary in their utility based on the timeframe considered - be - it team history, season-to-date stats, recent performance, or data from the last game. Additionally, - machine learning and deep learning models require point-in-time data, which poses its own set of - challenges in terms of availability and structuring.
- -Join the discussion and share your insights on data points: GitHub - Discussion - Data Points
- -Below are examples of the types of data points being considered, showcasing the breadth and depth of the - information landscape we're navigating.
- -Raw Data | -Traditional Statistics | -Advanced Statistics | -Subjective | -Other | -
---|---|---|---|---|
-
|
-
-
|
-
-
|
-
-
|
-
-
|
-
The overarching objective of this project is to develop a sophisticated system to tackle the challenging - goal of predicting NBA game outcomes. Initially, the focus is narrowed down to predicting the point - spread using the team prediction framework. This approach aligns with the most common method in betting - markets and offers a tangible starting point.
- -The aim is to surpass the accuracy of betting lines set by Vegas, which predict the game winner and - margin. While these lines are a strong benchmark, there's an average discrepancy of over 9 points per - game compared to actual results, highlighting a significant room for improvement. The graph below - illustrates the evolution of this average discrepancy over time.
- - - -However, before delving into the methodology, it's important to acknowledge a unique challenge in this - endeavor. Vegas, with its extensive resources and data, sets a high bar for predictive accuracy. - Simultaneously, the public availability of Vegas lines offers a valuable data source for modeling. This - dual nature creates a tight performance range, making it a delicate balance to measure real progress and - achieve tangible improvements.
-The project's architecture is built around a relational database, integrated with a series of data - processing and model training steps. The core database, currently hosted on Amazon RDS, utilizes - PostgreSQL, but the system is designed to be adaptable to other platforms. The daily workflow involves - updating the database with the latest data, followed by data processing, feature engineering, model - training, and ultimately, using the model for predictions to inform betting strategies. This entire - process is encapsulated within a web application and dashboard, providing a comprehensive and - user-friendly interface. Below is a flowchart that outlines this data science workflow.
- - -The data sourcing and storage phase is arguably the most challenging and time-intensive aspect of this - project. The data needed falls into three primary categories:
-While acquiring current data is relatively straightforward, the real challenge lies in sourcing - historical data for training and testing machine learning and deep learning models.
-Initially, the approach involved using web scraping tools like Scrapy to gather data at minimal costs. - However, this method proved to be laborious and fraught with complexities. To streamline the process, - the project will transition to using paid data services, allowing a sharper focus on modeling and - prediction. Below is a flowchart detailing the data sourcing and storage process, along with links to - the current and future data sources and the relevant project code.
- - - -This section delves into the critical steps of data preparation and feature engineering, which form the - backbone of our predictive modeling. The main steps include:
-Important considerations in this phase:
-src/etl - - Repository link for Data Prep and Feature Engineering code.
-An in-depth analysis of the Vegas miss data revealed a consistent average miss amount across various - categorizations. This uniformity, while somewhat unexpected, underlines the robustness of the Vegas - lines. A hypothesis about higher miss amounts early in the season due to data scarcity and uncertain - team dynamics was explored. While the first month showed the highest average miss, the difference was - not markedly significant. Weekly analysis further indicates that the miss average fluctuates randomly - around the overall mean.
- - - -In addressing the challenge of selecting from a vast array of potential features for the modeling - process, methods such as correlation, mutual information, and feature importance ranking were employed. - However, no single feature emerged as a standout predictor. This result may reflect the inherent - complexity of accurately predicting game outcomes against Vegas lines. A significant ongoing aspect of - this project is identifying the most effective feature set for prediction accuracy.
- -This project's modeling stage is divided into two distinct approaches. The first involves leveraging - AutoML to explore a range of possibilities in the basic tabular format of the problem. The second - approach focuses on developing a custom model architecture, tailored specifically to the nuances of this - challenge.
- -As indicated by the results, consistently outperforming the Vegas lines remains a challenge. This is not - unexpected, given the complexity of the task and the additional hurdle of overcoming the vig (the - bookmaker's charge). While a fully successful model has yet to be realized, the AutoML process has - proven to be an enlightening and potentially valuable first step in many ML/DL projects.
- -The journey towards a custom model architecture initially centered around a traditional data science - approach – combining various features from different sources. While this approach aligns with - conventional methods and may still hold potential, it faces several challenges, including complex data - collection and potentially mirroring the algorithms used by line setters. To move beyond these - limitations and add an element of innovation, I am exploring a second approach, which includes the - following key requirements:
- - -This crucial segment of the project involves the strategic application of model predictions in real-world - betting scenarios. The process begins with the integration of predictive outputs from our models with - supplementary data that was not directly factored into the model. This additional data can include current - trends, team news, player conditions, and other relevant information that might influence game outcomes. The - aim is to enhance the predictive power of our models by combining their statistical insights with real-time - contextual data.
- -Once the comprehensive decision-making dataset is assembled, it feeds into a sophisticated bet and bankroll - management system. This system is designed to optimize bet recommendations based on a balance of risk and - reward, considering factors like betting odds, potential returns, and the overall health of the betting - bankroll. The ultimate goal is to provide well-informed, data-driven betting recommendations that maximize - profitability while mitigating risk.
- - - -The project includes a user-friendly web application and a companion dashboard, designed to facilitate the - monitoring and analysis of betting performance. The web app provides real-time and recent game data along - with prediction information, while the dashboard offers comprehensive metrics on both suggested and actual - bets (for logged-in users). Although previously hosted on AWS, the operation costs and maintenance - requirements have led to a shift in strategy, prioritizing a more sustainable approach for this side - project. Below are screenshots showcasing the web app and dashboard interfaces.
- -<%= html_escape_once("this & that & the other") %>
- ``` - - Before this change, that would be double-escaped and render as: - - ```html -this & that & the other
- ``` - - After this change, it renders correctly as: - - ```html -this & that & the other
- ``` - - Fixes #48256 - - *Mike Dalessio* - -* Deprecate `SafeBuffer#clone_empty`. - - This method has not been used internally since Rails 4.2.0. - - *Mike Dalessio* - -* `MessageEncryptor`, `MessageVerifier`, and `config.active_support.message_serializer` - now accept `:message_pack` and `:message_pack_allow_marshal` as serializers. - These serializers require the [`msgpack` gem](https://rubygems.org/gems/msgpack) - (>= 1.7.0). - - The Message Pack format can provide improved performance and smaller payload - sizes. It also supports round-tripping some Ruby types that are not supported - by JSON. For example: - - ```ruby - verifier = ActiveSupport::MessageVerifier.new("secret") - data = [{ a: 1 }, { b: 2 }.with_indifferent_access, 1.to_d, Time.at(0, 123)] - message = verifier.generate(data) - - # BEFORE with config.active_support.message_serializer = :json - verifier.verified(message) - # => [{"a"=>1}, {"b"=>2}, "1.0", "1969-12-31T18:00:00.000-06:00"] - verifier.verified(message).map(&:class) - # => [Hash, Hash, String, String] - - # AFTER with config.active_support.message_serializer = :message_pack - verifier.verified(message) - # => [{:a=>1}, {"b"=>2}, 0.1e1, 1969-12-31 18:00:00.000123 -0600] - verifier.verified(message).map(&:class) - # => [Hash, ActiveSupport::HashWithIndifferentAccess, BigDecimal, Time] - ``` - - The `:message_pack` serializer can fall back to deserializing with - `ActiveSupport::JSON` when necessary, and the `:message_pack_allow_marshal` - serializer can fall back to deserializing with `Marshal` as well as - `ActiveSupport::JSON`. Additionally, the `:marshal`, `:json`, and - `:json_allow_marshal` serializers can now fall back to deserializing with - `ActiveSupport::MessagePack` when necessary. These behaviors ensure old - messages can still be read so that migration is easier. - - *Jonathan Hefner* - -* A new `7.1` cache format is available which includes an optimization for - bare string values such as view fragments. - - The `7.1` cache format is used by default for new apps, and existing apps - can enable the format by setting `config.load_defaults 7.1` or by setting - `config.active_support.cache_format_version = 7.1` in `config/application.rb` - or a `config/environments/*.rb` file. - - Cache entries written using the `6.1` or `7.0` cache formats can be read - when using the `7.1` format. To perform a rolling deploy of a Rails 7.1 - upgrade, wherein servers that have not yet been upgraded must be able to - read caches from upgraded servers, leave the cache format unchanged on the - first deploy, then enable the `7.1` cache format on a subsequent deploy. - - *Jonathan Hefner* - -* Active Support cache stores can now use a preconfigured serializer based on - `ActiveSupport::MessagePack` via the `:serializer` option: - - ```ruby - config.cache_store = :redis_cache_store, { serializer: :message_pack } - ``` - - The `:message_pack` serializer can reduce cache entry sizes and improve - performance, but requires the [`msgpack` gem](https://rubygems.org/gems/msgpack) - (>= 1.7.0). - - The `:message_pack` serializer can read cache entries written by the default - serializer, and the default serializer can now read entries written by the - `:message_pack` serializer. These behaviors make it easy to migrate between - serializer without invalidating the entire cache. - - *Jonathan Hefner* - -* `Object#deep_dup` no longer duplicate named classes and modules. - - Before: - - ```ruby - hash = { class: Object, module: Kernel } - hash.deep_dup # => {:class=>#'Infinity'
, '+Infinity'
and
- * '-Infinity'
(case-sensitive)
- *
- * === Not a Number
- *
- * When a computation results in an undefined value, the special value +NaN+
- * (for 'not a number') is returned.
- *
- * Example:
- *
- * BigDecimal("0.0") / BigDecimal("0.0") #=> NaN
- *
- * You can also create undefined values.
- *
- * NaN is never considered to be the same as any other value, even NaN itself:
- *
- * n = BigDecimal('NaN')
- * n == 0.0 #=> false
- * n == n #=> false
- *
- * === Positive and negative zero
- *
- * If a computation results in a value which is too small to be represented as
- * a BigDecimal within the currently specified limits of precision, zero must
- * be returned.
- *
- * If the value which is too small to be represented is negative, a BigDecimal
- * value of negative zero is returned.
- *
- * BigDecimal("1.0") / BigDecimal("-Infinity") #=> -0.0
- *
- * If the value is positive, a value of positive zero is returned.
- *
- * BigDecimal("1.0") / BigDecimal("Infinity") #=> 0.0
- *
- * (See BigDecimal.mode for how to specify limits of precision.)
- *
- * Note that +-0.0+ and +0.0+ are considered to be the same for the purposes of
- * comparison.
- *
- * Note also that in mathematics, there is no particular concept of negative
- * or positive zero; true mathematical zero has no sign.
- *
- * == bigdecimal/util
- *
- * When you require +bigdecimal/util+, the #to_d method will be
- * available on BigDecimal and the native Integer, Float, Rational,
- * and String classes:
- *
- * require 'bigdecimal/util'
- *
- * 42.to_d # => 0.42e2
- * 0.5.to_d # => 0.5e0
- * (2/3r).to_d(3) # => 0.667e0
- * "0.5".to_d # => 0.5e0
- *
- * == License
- *
- * Copyright (C) 2002 by Shigeo Kobayashi Hi there
\n -``` - -The second argument is optional--[see below](#options) for more information. - -### Generating a document - -You can also parse a string to receive a `Document` node. You can then print that node to HTML, iterate over the children, and other fun node stuff. For example: - -``` ruby -require 'commonmarker' - -doc = CommonMarker.render_doc('*Hello* world', :DEFAULT) -puts(doc.to_html) #Hi there
\n - -doc.walk do |node| - puts node.type # [:document, :paragraph, :text, :emph, :text] -end -``` - -The second argument is optional--[see below](#options) for more information. - -#### Example: walking the AST - -You can use `walk` or `each` to iterate over nodes: - -- `walk` will iterate on a node and recursively iterate on a node's children. -- `each` will iterate on a node and its children, but no further. - -``` ruby -require 'commonmarker' - -# parse the files specified on the command line -doc = CommonMarker.render_doc("# The site\n\n [GitHub](https://www.github.com)") - -# Walk tree and print out URLs for links -doc.walk do |node| - if node.type == :link - printf("URL = %s\n", node.url) - end -end - -# Capitalize all regular text in headers -doc.walk do |node| - if node.type == :header - node.each do |subnode| - if subnode.type == :text - subnode.string_content = subnode.string_content.upcase - end - end - end -end - -# Transform links to regular text -doc.walk do |node| - if node.type == :link - node.insert_before(node.first_child) - node.delete - end -end -``` - -### Creating a custom renderer - -You can also derive a class from CommonMarker's `HtmlRenderer` class. This produces slower output, but is far more customizable. For example: - -``` ruby -class MyHtmlRenderer < CommonMarker::HtmlRenderer - def initialize - super - @headerid = 1 - end - - def header(node) - block do - out("` for fenced code blocks. | -| `:LIBERAL_HTML_TAG` | Support liberal parsing of inline HTML tags. | -| `:FOOTNOTES` | Render footnotes. | -| `:STRIKETHROUGH_DOUBLE_TILDE` | Parse strikethroughs by double tildes (compatibility with [redcarpet](https://github.com/vmg/redcarpet)) | -| `:TABLE_PREFER_STYLE_ATTRIBUTES` | Use `style` insted of `align` for table cells. | -| `:FULL_INFO_STRING` | Include full info strings of code blocks in separate attribute. | - -### Passing options - -To apply a single option, pass it in as a symbol argument: - -``` ruby -CommonMarker.render_doc("\"Hello,\" said the spider.", :SMART) -#- matches_end_condition = - scan_html_block_end_1(input, parser->first_nonspace); - break; - case 2: - // --> - matches_end_condition = - scan_html_block_end_2(input, parser->first_nonspace); - break; - case 3: - // ?> - matches_end_condition = - scan_html_block_end_3(input, parser->first_nonspace); - break; - case 4: - // > - matches_end_condition = - scan_html_block_end_4(input, parser->first_nonspace); - break; - case 5: - // ]]> - matches_end_condition = - scan_html_block_end_5(input, parser->first_nonspace); - break; - default: - matches_end_condition = 0; - break; - } - - if (matches_end_condition) { - container = finalize(parser, container); - assert(parser->current != NULL); - } - } else if (parser->blank) { - // ??? do nothing - } else if (accepts_lines(S_type(container))) { - if (S_type(container) == CMARK_NODE_HEADING && - container->as.heading.setext == false) { - chop_trailing_hashtags(input); - } - S_advance_offset(parser, input, parser->first_nonspace - parser->offset, - false); - add_line(container, input, parser); - } else { - // create paragraph container for line - container = add_child(parser, container, CMARK_NODE_PARAGRAPH, - parser->first_nonspace + 1); - S_advance_offset(parser, input, parser->first_nonspace - parser->offset, - false); - add_line(container, input, parser); - } - - parser->current = container; - } -} - -/* See http://spec.commonmark.org/0.24/#phase-1-block-structure */ -static void S_process_line(cmark_parser *parser, const unsigned char *buffer, - bufsize_t bytes) { - cmark_node *last_matched_container; - bool all_matched = true; - cmark_node *container; - cmark_chunk input; - cmark_node *current; - - cmark_strbuf_clear(&parser->curline); - - if (parser->options & CMARK_OPT_VALIDATE_UTF8) - cmark_utf8proc_check(&parser->curline, buffer, bytes); - else - cmark_strbuf_put(&parser->curline, buffer, bytes); - - bytes = parser->curline.size; - - // ensure line ends with a newline: - if (bytes == 0 || !S_is_line_end_char(parser->curline.ptr[bytes - 1])) - cmark_strbuf_putc(&parser->curline, '\n'); - - parser->offset = 0; - parser->column = 0; - parser->first_nonspace = 0; - parser->first_nonspace_column = 0; - parser->thematic_break_kill_pos = 0; - parser->indent = 0; - parser->blank = false; - parser->partially_consumed_tab = false; - - input.data = parser->curline.ptr; - input.len = parser->curline.size; - input.alloc = 0; - - // Skip UTF-8 BOM. - if (parser->line_number == 0 && - input.len >= 3 && - memcmp(input.data, "\xef\xbb\xbf", 3) == 0) - parser->offset += 3; - - parser->line_number++; - - last_matched_container = check_open_blocks(parser, &input, &all_matched); - - if (!last_matched_container) - goto finished; - - container = last_matched_container; - - current = parser->current; - - open_new_blocks(parser, &container, &input, all_matched); - - /* parser->current might have changed if feed_reentrant was called */ - if (current == parser->current) - add_text_to_container(parser, container, last_matched_container, &input); - -finished: - parser->last_line_length = input.len; - if (parser->last_line_length && - input.data[parser->last_line_length - 1] == '\n') - parser->last_line_length -= 1; - if (parser->last_line_length && - input.data[parser->last_line_length - 1] == '\r') - parser->last_line_length -= 1; - - cmark_strbuf_clear(&parser->curline); -} - -cmark_node *cmark_parser_finish(cmark_parser *parser) { - cmark_node *res; - cmark_llist *extensions; - - /* Parser was already finished once */ - if (parser->root == NULL) - return NULL; - - if (parser->linebuf.size) { - S_process_line(parser, parser->linebuf.ptr, parser->linebuf.size); - cmark_strbuf_clear(&parser->linebuf); - } - - finalize_document(parser); - - cmark_consolidate_text_nodes(parser->root); - - cmark_strbuf_free(&parser->curline); - cmark_strbuf_free(&parser->linebuf); - -#if CMARK_DEBUG_NODES - if (cmark_node_check(parser->root, stderr)) { - abort(); - } -#endif - - for (extensions = parser->syntax_extensions; extensions; extensions = extensions->next) { - cmark_syntax_extension *ext = (cmark_syntax_extension *) extensions->data; - if (ext->postprocess_func) { - cmark_node *processed = ext->postprocess_func(ext, parser, parser->root); - if (processed) - parser->root = processed; - } - } - - res = parser->root; - parser->root = NULL; - - cmark_parser_reset(parser); - - return res; -} - -int cmark_parser_get_line_number(cmark_parser *parser) { - return parser->line_number; -} - -bufsize_t cmark_parser_get_offset(cmark_parser *parser) { - return parser->offset; -} - -bufsize_t cmark_parser_get_column(cmark_parser *parser) { - return parser->column; -} - -int cmark_parser_get_first_nonspace(cmark_parser *parser) { - return parser->first_nonspace; -} - -int cmark_parser_get_first_nonspace_column(cmark_parser *parser) { - return parser->first_nonspace_column; -} - -int cmark_parser_get_indent(cmark_parser *parser) { - return parser->indent; -} - -int cmark_parser_is_blank(cmark_parser *parser) { - return parser->blank; -} - -int cmark_parser_has_partially_consumed_tab(cmark_parser *parser) { - return parser->partially_consumed_tab; -} - -int cmark_parser_get_last_line_length(cmark_parser *parser) { - return parser->last_line_length; -} - -cmark_node *cmark_parser_add_child(cmark_parser *parser, - cmark_node *parent, - cmark_node_type block_type, - int start_column) { - return add_child(parser, parent, block_type, start_column); -} - -void cmark_parser_advance_offset(cmark_parser *parser, - const char *input, - int count, - int columns) { - cmark_chunk input_chunk = cmark_chunk_literal(input); - - S_advance_offset(parser, &input_chunk, count, columns != 0); -} - -void cmark_parser_set_backslash_ispunct_func(cmark_parser *parser, - cmark_ispunct_func func) { - parser->backslash_ispunct = func; -} - -cmark_llist *cmark_parser_get_syntax_extensions(cmark_parser *parser) { - return parser->syntax_extensions; -} diff --git a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/blocks.o b/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/blocks.o deleted file mode 100644 index 9ecdb1f..0000000 Binary files a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/blocks.o and /dev/null differ diff --git a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/buffer.c b/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/buffer.c deleted file mode 100644 index c7934e5..0000000 --- a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/buffer.c +++ /dev/null @@ -1,278 +0,0 @@ -#include“Hello,” said the spider.
\n -``` - -To have multiple options applied, pass in an array of symbols: - -``` ruby -CommonMarker.render_html("\"'Shelob' is my name.\"", [:HARDBREAKS, :SOURCEPOS]) -``` - -For more information on these options, see [the CMark documentation](https://git.io/v7nh1). - -## Extensions - -Both `render_html` and `render_doc` take an optional third argument defining the extensions you want enabled as your CommonMark document is being processed. The documentation for these extensions are [defined in this spec](https://github.github.com/gfm/), and the rationale is provided [in this blog post](https://githubengineering.com/a-formal-spec-for-github-markdown/). - -The available extensions are: - -* `:table` - This provides support for tables. -* `:tasklist` - This provides support for task list items. -* `:strikethrough` - This provides support for strikethroughs. -* `:autolink` - This provides support for automatically converting URLs to anchor tags. -* `:tagfilter` - This escapes [several "unsafe" HTML tags](https://github.github.com/gfm/#disallowed-raw-html-extension-), causing them to not have any effect. - -## Output formats - -Like CMark, CommonMarker can generate output in several formats: HTML, XML, plaintext, and commonmark are currently supported. - -### HTML - -The default output format, HTML, will be generated when calling `to_html` or using `--to=html` on the command line. - -```ruby -doc = CommonMarker.render_doc('*Hello* world!', :DEFAULT) -puts(doc.to_html) - -Hello world!
-``` - -### XML - -XML will be generated when calling `to_xml` or using `--to=xml` on the command line. - -```ruby -doc = CommonMarker.render_doc('*Hello* world!', :DEFAULT) -puts(doc.to_xml) - - - -- -``` - -### Plaintext - -Plaintext will be generated when calling `to_plaintext` or using `--to=plaintext` on the command line. - -```ruby -doc = CommonMarker.render_doc('*Hello* world!', :DEFAULT) -puts(doc.to_plaintext) - -Hello world! -``` - -### Commonmark - -Commonmark will be generated when calling `to_commonmark` or using `--to=commonmark` on the command line. - -``` ruby -text = <<-TEXT -1. I am a numeric list. -2. I continue the list. -* Suddenly, an unordered list! -* What fun! -TEXT - -doc = CommonMarker.render_doc(text, :DEFAULT) -puts(doc.to_commonmark) - -1. I am a numeric list. -2. I continue the list. - - - - - Suddenly, an unordered list\! - - What fun\! -``` - -## Developing locally - -After cloning the repo: - -``` -script/bootstrap -bundle exec rake compile -``` - -If there were no errors, you're done! Otherwise, make sure to follow the CMark dependency instructions. - -## Benchmarks - -Some rough benchmarks: - -``` -$ bundle exec rake benchmark - -input size = 11063727 bytes - -redcarpet - 0.070000 0.020000 0.090000 ( 0.079641) -github-markdown - 0.070000 0.010000 0.080000 ( 0.083535) -commonmarker with to_html - 0.100000 0.010000 0.110000 ( 0.111947) -commonmarker with ruby HtmlRenderer - 1.830000 0.030000 1.860000 ( 1.866203) -kramdown - 4.610000 0.070000 4.680000 ( 4.678398) -``` diff --git a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/Rakefile b/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/Rakefile deleted file mode 100644 index 4daed66..0000000 --- a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/Rakefile +++ /dev/null @@ -1,109 +0,0 @@ -# frozen_string_literal: true - -require "date" -require "rake/clean" -require "rake/extensiontask" -require "digest/md5" - -host_os = RbConfig::CONFIG["host_os"] -require "devkit" if host_os == "mingw32" - -task default: [:test] - -# Gem Spec -gem_spec = Gem::Specification.load("commonmarker.gemspec") - -# Ruby Extension -Rake::ExtensionTask.new("commonmarker", gem_spec) do |ext| - ext.lib_dir = File.join("lib", "commonmarker") -end - -# Packaging -require "bundler/gem_tasks" - -# Testing -require "rake/testtask" - -Rake::TestTask.new("test:unit") do |t| - t.libs << "lib" - t.libs << "test" - t.pattern = "test/test_*.rb" - t.verbose = true - t.warning = false -end - -desc "Run unit tests" -task "test:unit" => :compile - -desc "Run unit and conformance tests" -task test: ["test:unit"] - -require "rubocop/rake_task" - -RuboCop::RakeTask.new(:rubocop) - -desc "Run benchmarks" -task :benchmark do - if ENV["FETCH_PROGIT"] - %x(rm -rf test/progit) - %x(git clone https://github.com/progit/progit.git test/progit) - langs = ["ar", "az", "be", "ca", "cs", "de", "en", "eo", "es", "es-ni", "fa", "fi", "fr", "hi", "hu", "id", "it", "ja", "ko", "mk", "nl", "no-nb", "pl", "pt-br", "ro", "ru", "sr", "th", "tr", "uk", "vi", "zh", "zh-tw"] - langs.each do |lang| - %x(cat test/progit/#{lang}/*/*.markdown >> test/benchinput.md) - end - end - $LOAD_PATH.unshift("lib") - load "test/benchmark.rb" -end - -desc "Match C style of cmark" -task :format do - sh "clang-format -style llvm -i ext/commonmarker/*.c ext/commonmarker/*.h" -end - -# Documentation -require "rdoc/task" - -desc "Generate API documentation" -RDoc::Task.new do |rd| - rd.rdoc_dir = "docs" - rd.main = "README.md" - rd.rdoc_files.include("README.md", "lib/**/*.rb", "ext/commonmarker/commonmarker.c") - - rd.options << "--markup tomdoc" - rd.options << "--inline-source" - rd.options << "--line-numbers" - rd.options << "--all" - rd.options << "--fileboxes" -end - -desc "Generate the documentation and run a web server" -task serve: [:rdoc] do - require "webrick" - - puts "Navigate to http://localhost:3000 to see the docs" - - server = WEBrick::HTTPServer.new(Port: 3000) - server.mount("/", WEBrick::HTTPServlet::FileHandler, "docs") - trap("INT") { server.stop } - server.start -end - -desc "Generate and publish docs to gh-pages" -task publish: [:rdoc] do - require "tmpdir" - require "shellwords" - - Dir.mktmpdir do |tmp| - system "mv docs/* #{tmp}" - system "git checkout origin/gh-pages" - system "rm -rf *" - system "mv #{tmp}/* ." - message = Shellwords.escape("Site updated at #{Time.now.utc}") - system "git add ." - system "git commit -am #{message}" - system "git push origin gh-pages --force" - system "git checkout master" - system "echo yolo" - end -end diff --git a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/bin/commonmarker b/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/bin/commonmarker deleted file mode 100755 index 3bfabe0..0000000 --- a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/bin/commonmarker +++ /dev/null @@ -1,118 +0,0 @@ -#!/usr/bin/env ruby -# frozen_string_literal: true - -require 'optparse' - -$LOAD_PATH.unshift File.join(File.dirname(__FILE__), '..', 'lib') -require 'commonmarker' - -root = File.expand_path('..', __dir__) -$LOAD_PATH.unshift File.expand_path('lib', root) - -def parse_options - options = Struct.new(:active_extensions, :active_parse_options, :active_render_options, :output_format, :renderer) - .new([], [:DEFAULT], [:DEFAULT], :html) - extensions = CommonMarker.extensions - parse_options = CommonMarker::Config::OPTS.fetch(:parse) - render_options = CommonMarker::Config::OPTS.fetch(:render) - format_options = CommonMarker::Config::OPTS.fetch(:format) - - option_parser = OptionParser.new do |opts| - opts.banner = 'Usage: commonmarker [--html-renderer] [--extension=EXTENSION]' - opts.separator ' [--to=FORMAT]' - opts.separator ' [--parse-option=OPTION]' - opts.separator ' [--render-option=OPTION]' - opts.separator ' [FILE..]' - opts.separator '' - opts.separator 'Convert one or more CommonMark files to HTML and write to standard output.' - opts.separator 'If no FILE argument is provided, text will be read from STDIN.' - opts.separator '' - - opts.on('--extension=EXTENSION', Array, 'Use EXTENSION for parsing and HTML output (unless --html-renderer is specified)') do |values| - values.each do |value| - if extensions.include?(value) - options.active_extensions << value.to_sym - else - abort("extension '#{value}' not found") - end - end - end - - opts.on('-h', '--help', 'Prints this help') do - puts opts - puts - puts "Available formats: #{format_options.join(', ')}" - puts "Available extentions: #{extensions.join(', ')}" - puts "Available parse options: #{parse_options.keys.join(', ')}" - puts "Available render options: #{render_options.keys.join(', ')}" - puts - puts 'See the README for more information on these.' - exit - end - - opts.on('-tFORMAT', '--to=FORMAT', String, 'Specify output FORMAT') do |value| - value = value.to_sym - if format_options.include?(value) - options.output_format = value - else - abort("format '#{value}' not found") - end - end - - opts.on('--html-renderer', 'Use the HtmlRenderer renderer rather than the native C renderer (only valid when format is html)') do - options.renderer = true - end - - opts.on('--parse-option=OPTION', Array, 'OPTION passed during parsing') do |values| - values.each do |value| - if parse_options.key?(value.to_sym) - options.active_parse_options << value.to_sym - else - abort("parse-option '#{value}' not found") - end - end - end - - opts.on('--render-option=OPTION', Array, 'OPTION passed during rendering') do |values| - values.each do |value| - if render_options.key?(value.to_sym) - options.active_render_options << value.to_sym - else - abort("render-option '#{value}' not found") - end - end - end - - opts.on('-v', '--version', 'Version information') do - puts "commonmarker #{CommonMarker::VERSION}" - exit - end - end - - option_parser.parse! - - options -end - -options = parse_options - -abort("format '#{options.output_format}' does not support using the HtmlRenderer renderer") if - options.renderer && options.output_format != :html - -doc = CommonMarker.render_doc(ARGF.read, options.active_parse_options, options.active_extensions) - -case options.output_format -when :html - if options.renderer - renderer = CommonMarker::HtmlRenderer.new(options: options.active_render_options, extensions: options.active_extensions) - $stdout.write(renderer.render(doc)) - else - $stdout.write(doc.to_html(options.active_render_options, options.active_extensions)) - end -when :xml - $stdout.write(doc.to_xml(options.active_render_options)) -when :commonmark - $stdout.write(doc.to_commonmark(options.active_render_options)) -when :plaintext - $stdout.write(doc.to_plaintext(options.active_render_options)) -end diff --git a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/commonmarker.gemspec b/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/commonmarker.gemspec deleted file mode 100644 index b2d5884..0000000 --- a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/commonmarker.gemspec +++ /dev/null @@ -1,38 +0,0 @@ -# frozen_string_literal: true - -lib = File.expand_path("lib", __dir__) -$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib) -require "commonmarker/version" - -Gem::Specification.new do |s| - s.name = "commonmarker" - s.version = CommonMarker::VERSION - s.summary = "CommonMark parser and renderer. Written in C, wrapped in Ruby." - s.description = "A fast, safe, extensible parser for CommonMark. This wraps the official libcmark library." - s.authors = ["Garen Torikian", "Ashe Connor"] - s.homepage = "https://github.com/gjtorikian/commonmarker" - s.license = "MIT" - - s.files = ["LICENSE.txt", "README.md", "Rakefile", "commonmarker.gemspec", "bin/commonmarker"] - s.files += Dir.glob("lib/**/*.rb") - s.files += Dir.glob("ext/commonmarker/*.*") - s.extensions = ["ext/commonmarker/extconf.rb"] - - s.executables = ["commonmarker"] - s.require_paths = ["lib", "ext"] - s.required_ruby_version = [">= 2.6", "< 4.0"] - - s.metadata["rubygems_mfa_required"] = "true" - - s.rdoc_options += ["-x", "ext/commonmarker/cmark/.*"] - - s.add_development_dependency("awesome_print") - s.add_development_dependency("json", "~> 2.3") - s.add_development_dependency("minitest", "~> 5.6") - s.add_development_dependency("minitest-focus", "~> 1.1") - s.add_development_dependency("rake") - s.add_development_dependency("rake-compiler", "~> 0.9") - s.add_development_dependency("rdoc", "~> 6.2") - s.add_development_dependency("rubocop") - s.add_development_dependency("rubocop-standard") -end diff --git a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/.sitearchdir.-.commonmarker.time b/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/.sitearchdir.-.commonmarker.time deleted file mode 100644 index e69de29..0000000 diff --git a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/Makefile b/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/Makefile deleted file mode 100644 index a0ec3fd..0000000 --- a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/Makefile +++ /dev/null @@ -1,266 +0,0 @@ - -SHELL = /bin/sh - -# V=0 quiet, V=1 verbose. other values don't work. -V = 0 -Q1 = $(V:1=) -Q = $(Q1:0=@) -ECHO1 = $(V:1=@ :) -ECHO = $(ECHO1:0=@ echo) -NULLCMD = : - -#### Start of system configuration section. #### - -srcdir = . -topdir = /usr/include/ruby-3.0.0 -hdrdir = $(topdir) -arch_hdrdir = /usr/include/x86_64-linux-gnu/ruby-3.0.0 -PATH_SEPARATOR = : -VPATH = $(srcdir):$(arch_hdrdir)/ruby:$(hdrdir)/ruby -prefix = $(DESTDIR)/usr -rubysitearchprefix = $(sitearchlibdir)/$(RUBY_BASE_NAME) -rubyarchprefix = $(archlibdir)/$(RUBY_BASE_NAME) -rubylibprefix = $(libdir)/$(RUBY_BASE_NAME) -exec_prefix = $(prefix) -vendorarchhdrdir = $(sitearchincludedir)/$(RUBY_VERSION_NAME)/vendor_ruby -sitearchhdrdir = $(sitearchincludedir)/$(RUBY_VERSION_NAME)/site_ruby -rubyarchhdrdir = $(archincludedir)/$(RUBY_VERSION_NAME) -vendorhdrdir = $(rubyhdrdir)/vendor_ruby -sitehdrdir = $(rubyhdrdir)/site_ruby -rubyhdrdir = $(includedir)/$(RUBY_VERSION_NAME) -vendorarchdir = $(rubysitearchprefix)/vendor_ruby/$(ruby_version) -vendorlibdir = $(vendordir)/$(ruby_version) -vendordir = $(rubylibprefix)/vendor_ruby -sitearchdir = $(DESTDIR)./.gem.20231104-11184-9modoq -sitelibdir = $(DESTDIR)./.gem.20231104-11184-9modoq -sitedir = $(DESTDIR)/usr/local/lib/site_ruby -rubyarchdir = $(rubyarchprefix)/$(ruby_version) -rubylibdir = $(rubylibprefix)/$(ruby_version) -sitearchincludedir = $(includedir)/$(sitearch) -archincludedir = $(includedir)/$(arch) -sitearchlibdir = $(libdir)/$(sitearch) -archlibdir = $(libdir)/$(arch) -ridir = $(datarootdir)/$(RI_BASE_NAME) -mandir = $(datarootdir)/man -localedir = $(datarootdir)/locale -libdir = $(exec_prefix)/lib -psdir = $(docdir) -pdfdir = $(docdir) -dvidir = $(docdir) -htmldir = $(docdir) -infodir = $(datarootdir)/info -docdir = $(datarootdir)/doc/$(PACKAGE) -oldincludedir = $(DESTDIR)/usr/include -includedir = $(prefix)/include -runstatedir = $(DESTDIR)/var/run -localstatedir = $(DESTDIR)/var -sharedstatedir = $(prefix)/com -sysconfdir = $(DESTDIR)/etc -datadir = $(datarootdir) -datarootdir = $(prefix)/share -libexecdir = $(exec_prefix)/libexec -sbindir = $(exec_prefix)/sbin -bindir = $(exec_prefix)/bin -archdir = $(rubyarchdir) - - -CC_WRAPPER = -CC = x86_64-linux-gnu-gcc -CXX = x86_64-linux-gnu-g++ -LIBRUBY = $(LIBRUBY_SO) -LIBRUBY_A = lib$(RUBY_SO_NAME)-static.a -LIBRUBYARG_SHARED = -l$(RUBY_SO_NAME) -LIBRUBYARG_STATIC = -l$(RUBY_SO_NAME)-static $(MAINLIBS) -empty = -OUTFLAG = -o $(empty) -COUTFLAG = -o $(empty) -CSRCFLAG = $(empty) - -RUBY_EXTCONF_H = -cflags = $(optflags) $(debugflags) $(warnflags) -cxxflags = -optflags = -O3 -debugflags = -ggdb3 -warnflags = -Wall -Wextra -Wdeprecated-declarations -Wduplicated-cond -Wimplicit-function-declaration -Wimplicit-int -Wmisleading-indentation -Wpointer-arith -Wwrite-strings -Wimplicit-fallthrough=0 -Wmissing-noreturn -Wno-cast-function-type -Wno-constant-logical-operand -Wno-long-long -Wno-missing-field-initializers -Wno-overlength-strings -Wno-packed-bitfield-compat -Wno-parentheses-equality -Wno-self-assign -Wno-tautological-compare -Wno-unused-parameter -Wno-unused-value -Wsuggest-attribute=format -Wsuggest-attribute=noreturn -Wunused-variable -cppflags = -CCDLFLAGS = -fPIC -CFLAGS = $(CCDLFLAGS) -g -O2 -ffile-prefix-map=/build/ruby3.0-ohOwi0/ruby3.0-3.0.2=. -fstack-protector-strong -Wformat -Werror=format-security -fPIC -std=c99 $(ARCH_FLAG) -INCFLAGS = -I. -I$(arch_hdrdir) -I$(hdrdir)/ruby/backward -I$(hdrdir) -I$(srcdir) -DEFS = -CPPFLAGS = -Wdate-time -D_FORTIFY_SOURCE=2 $(DEFS) $(cppflags) -CXXFLAGS = $(CCDLFLAGS) -g -O2 -ffile-prefix-map=/build/ruby3.0-ohOwi0/ruby3.0-3.0.2=. -fstack-protector-strong -Wformat -Werror=format-security $(ARCH_FLAG) -ldflags = -L. -Wl,-Bsymbolic-functions -Wl,-z,relro -Wl,-z,now -fstack-protector-strong -rdynamic -Wl,-export-dynamic -dldflags = -Wl,-Bsymbolic-functions -Wl,-z,relro -Wl,-z,now -ARCH_FLAG = -DLDFLAGS = $(ldflags) $(dldflags) $(ARCH_FLAG) -LDSHARED = $(CC) -shared -LDSHAREDXX = $(CXX) -shared -AR = x86_64-linux-gnu-gcc-ar -EXEEXT = - -RUBY_INSTALL_NAME = $(RUBY_BASE_NAME)3.0 -RUBY_SO_NAME = ruby-3.0 -RUBYW_INSTALL_NAME = -RUBY_VERSION_NAME = $(RUBY_BASE_NAME)-$(ruby_version) -RUBYW_BASE_NAME = rubyw -RUBY_BASE_NAME = ruby - -arch = x86_64-linux-gnu -sitearch = $(arch) -ruby_version = 3.0.0 -ruby = $(bindir)/$(RUBY_BASE_NAME)3.0 -RUBY = $(ruby) -ruby_headers = $(hdrdir)/ruby.h $(hdrdir)/ruby/backward.h $(hdrdir)/ruby/ruby.h $(hdrdir)/ruby/defines.h $(hdrdir)/ruby/missing.h $(hdrdir)/ruby/intern.h $(hdrdir)/ruby/st.h $(hdrdir)/ruby/subst.h $(arch_hdrdir)/ruby/config.h - -RM = rm -f -RM_RF = $(RUBY) -run -e rm -- -rf -RMDIRS = rmdir --ignore-fail-on-non-empty -p -MAKEDIRS = /usr/bin/mkdir -p -INSTALL = /usr/bin/install -c -INSTALL_PROG = $(INSTALL) -m 0755 -INSTALL_DATA = $(INSTALL) -m 644 -COPY = cp -TOUCH = exit > - -#### End of system configuration section. #### - -preload = -libpath = . $(archlibdir) -LIBPATH = -L. -L$(archlibdir) -DEFFILE = - -CLEANFILES = mkmf.log -DISTCLEANFILES = -DISTCLEANDIRS = - -extout = -extout_prefix = -target_prefix = /commonmarker -LOCAL_LIBS = -LIBS = $(LIBRUBYARG_SHARED) -lm -lc -ORIG_SRCS = arena.c autolink.c blocks.c buffer.c cmark.c cmark_ctype.c commonmark.c commonmarker.c core-extensions.c ext_scanners.c footnotes.c houdini_href_e.c houdini_html_e.c houdini_html_u.c html.c inlines.c iterator.c latex.c linked_list.c man.c map.c node.c plaintext.c plugin.c references.c registry.c render.c scanners.c strikethrough.c syntax_extension.c table.c tagfilter.c tasklist.c utf8.c xml.c -SRCS = $(ORIG_SRCS) -OBJS = arena.o autolink.o blocks.o buffer.o cmark.o cmark_ctype.o commonmark.o commonmarker.o core-extensions.o ext_scanners.o footnotes.o houdini_href_e.o houdini_html_e.o houdini_html_u.o html.o inlines.o iterator.o latex.o linked_list.o man.o map.o node.o plaintext.o plugin.o references.o registry.o render.o scanners.o strikethrough.o syntax_extension.o table.o tagfilter.o tasklist.o utf8.o xml.o -HDRS = $(srcdir)/autolink.h $(srcdir)/buffer.h $(srcdir)/chunk.h $(srcdir)/cmark-gfm-core-extensions.h $(srcdir)/cmark-gfm-extension_api.h $(srcdir)/cmark-gfm-extensions_export.h $(srcdir)/cmark-gfm.h $(srcdir)/cmark-gfm_export.h $(srcdir)/cmark-gfm_version.h $(srcdir)/cmark_ctype.h $(srcdir)/commonmarker.h $(srcdir)/config.h $(srcdir)/ext_scanners.h $(srcdir)/footnotes.h $(srcdir)/houdini.h $(srcdir)/html.h $(srcdir)/inlines.h $(srcdir)/iterator.h $(srcdir)/map.h $(srcdir)/node.h $(srcdir)/parser.h $(srcdir)/plugin.h $(srcdir)/references.h $(srcdir)/registry.h $(srcdir)/render.h $(srcdir)/scanners.h $(srcdir)/strikethrough.h $(srcdir)/syntax_extension.h $(srcdir)/table.h $(srcdir)/tagfilter.h $(srcdir)/tasklist.h $(srcdir)/utf8.h -LOCAL_HDRS = -TARGET = commonmarker -TARGET_NAME = commonmarker -TARGET_ENTRY = Init_$(TARGET_NAME) -DLLIB = $(TARGET).so -EXTSTATIC = -STATIC_LIB = - -TIMESTAMP_DIR = . -BINDIR = $(bindir) -RUBYCOMMONDIR = $(sitedir)$(target_prefix) -RUBYLIBDIR = $(sitelibdir)$(target_prefix) -RUBYARCHDIR = $(sitearchdir)$(target_prefix) -HDRDIR = $(sitehdrdir)$(target_prefix) -ARCHHDRDIR = $(sitearchhdrdir)$(target_prefix) -TARGET_SO_DIR = -TARGET_SO = $(TARGET_SO_DIR)$(DLLIB) -CLEANLIBS = $(TARGET_SO) -CLEANOBJS = *.o *.bak - -all: $(DLLIB) -static: $(STATIC_LIB) -.PHONY: all install static install-so install-rb -.PHONY: clean clean-so clean-static clean-rb - -clean-static:: -clean-rb-default:: -clean-rb:: -clean-so:: -clean: clean-so clean-static clean-rb-default clean-rb - -$(Q)$(RM) $(CLEANLIBS) $(CLEANOBJS) $(CLEANFILES) .*.time - -distclean-rb-default:: -distclean-rb:: -distclean-so:: -distclean-static:: -distclean: clean distclean-so distclean-static distclean-rb-default distclean-rb - -$(Q)$(RM) Makefile $(RUBY_EXTCONF_H) conftest.* mkmf.log - -$(Q)$(RM) core ruby$(EXEEXT) *~ $(DISTCLEANFILES) - -$(Q)$(RMDIRS) $(DISTCLEANDIRS) 2> /dev/null || true - -realclean: distclean -install: install-so install-rb - -install-so: $(DLLIB) $(TIMESTAMP_DIR)/.sitearchdir.-.commonmarker.time - $(INSTALL_PROG) $(DLLIB) $(RUBYARCHDIR) -clean-static:: - -$(Q)$(RM) $(STATIC_LIB) -install-rb: pre-install-rb do-install-rb install-rb-default -install-rb-default: pre-install-rb-default do-install-rb-default -pre-install-rb: Makefile -pre-install-rb-default: Makefile -do-install-rb: -do-install-rb-default: -pre-install-rb-default: - @$(NULLCMD) -$(TIMESTAMP_DIR)/.sitearchdir.-.commonmarker.time: - $(Q) $(MAKEDIRS) $(@D) $(RUBYARCHDIR) - $(Q) $(TOUCH) $@ - -site-install: site-install-so site-install-rb -site-install-so: install-so -site-install-rb: install-rb - -.SUFFIXES: .c .m .cc .mm .cxx .cpp .o .S - -.cc.o: - $(ECHO) compiling $(<) - $(Q) $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(COUTFLAG)$@ -c $(CSRCFLAG)$< - -.cc.S: - $(ECHO) translating $(<) - $(Q) $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(COUTFLAG)$@ -S $(CSRCFLAG)$< - -.mm.o: - $(ECHO) compiling $(<) - $(Q) $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(COUTFLAG)$@ -c $(CSRCFLAG)$< - -.mm.S: - $(ECHO) translating $(<) - $(Q) $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(COUTFLAG)$@ -S $(CSRCFLAG)$< - -.cxx.o: - $(ECHO) compiling $(<) - $(Q) $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(COUTFLAG)$@ -c $(CSRCFLAG)$< - -.cxx.S: - $(ECHO) translating $(<) - $(Q) $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(COUTFLAG)$@ -S $(CSRCFLAG)$< - -.cpp.o: - $(ECHO) compiling $(<) - $(Q) $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(COUTFLAG)$@ -c $(CSRCFLAG)$< - -.cpp.S: - $(ECHO) translating $(<) - $(Q) $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(COUTFLAG)$@ -S $(CSRCFLAG)$< - -.c.o: - $(ECHO) compiling $(<) - $(Q) $(CC) $(INCFLAGS) $(CPPFLAGS) $(CFLAGS) $(COUTFLAG)$@ -c $(CSRCFLAG)$< - -.c.S: - $(ECHO) translating $(<) - $(Q) $(CC) $(INCFLAGS) $(CPPFLAGS) $(CFLAGS) $(COUTFLAG)$@ -S $(CSRCFLAG)$< - -.m.o: - $(ECHO) compiling $(<) - $(Q) $(CC) $(INCFLAGS) $(CPPFLAGS) $(CFLAGS) $(COUTFLAG)$@ -c $(CSRCFLAG)$< - -.m.S: - $(ECHO) translating $(<) - $(Q) $(CC) $(INCFLAGS) $(CPPFLAGS) $(CFLAGS) $(COUTFLAG)$@ -S $(CSRCFLAG)$< - -$(TARGET_SO): $(OBJS) Makefile - $(ECHO) linking shared-object commonmarker/$(DLLIB) - -$(Q)$(RM) $(@) - $(Q) $(LDSHARED) -o $@ $(OBJS) $(LIBPATH) $(DLDFLAGS) $(LOCAL_LIBS) $(LIBS) - - - -$(OBJS): $(HDRS) $(ruby_headers) diff --git a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/arena.c b/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/arena.c deleted file mode 100644 index da1a70e..0000000 --- a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/arena.c +++ /dev/null @@ -1,104 +0,0 @@ -#include- -- -Hello -world! --#include -#include -#include "cmark-gfm.h" -#include "cmark-gfm-extension_api.h" - -static struct arena_chunk { - size_t sz, used; - uint8_t push_point; - void *ptr; - struct arena_chunk *prev; -} *A = NULL; - -static struct arena_chunk *alloc_arena_chunk(size_t sz, struct arena_chunk *prev) { - struct arena_chunk *c = (struct arena_chunk *)calloc(1, sizeof(*c)); - if (!c) - abort(); - c->sz = sz; - c->ptr = calloc(1, sz); - if (!c->ptr) - abort(); - c->prev = prev; - return c; -} - -void cmark_arena_push(void) { - if (!A) - return; - A->push_point = 1; - A = alloc_arena_chunk(10240, A); -} - -int cmark_arena_pop(void) { - if (!A) - return 0; - while (A && !A->push_point) { - free(A->ptr); - struct arena_chunk *n = A->prev; - free(A); - A = n; - } - if (A) - A->push_point = 0; - return 1; -} - -static void init_arena(void) { - A = alloc_arena_chunk(4 * 1048576, NULL); -} - -void cmark_arena_reset(void) { - while (A) { - free(A->ptr); - struct arena_chunk *n = A->prev; - free(A); - A = n; - } -} - -static void *arena_calloc(size_t nmem, size_t size) { - if (!A) - init_arena(); - - size_t sz = nmem * size + sizeof(size_t); - - // Round allocation sizes to largest integer size to - // ensure returned memory is correctly aligned - const size_t align = sizeof(size_t) - 1; - sz = (sz + align) & ~align; - - struct arena_chunk *chunk; - if (sz > A->sz) { - A->prev = chunk = alloc_arena_chunk(sz, A->prev); - } else if (sz > A->sz - A->used) { - A = chunk = alloc_arena_chunk(A->sz + A->sz / 2, A); - } else { - chunk = A; - } - void *ptr = (uint8_t *) chunk->ptr + chunk->used; - chunk->used += sz; - *((size_t *) ptr) = sz - sizeof(size_t); - return (uint8_t *) ptr + sizeof(size_t); -} - -static void *arena_realloc(void *ptr, size_t size) { - if (!A) - init_arena(); - - void *new_ptr = arena_calloc(1, size); - if (ptr) - memcpy(new_ptr, ptr, ((size_t *) ptr)[-1]); - return new_ptr; -} - -static void arena_free(void *ptr) { - (void) ptr; - /* no-op */ -} - -cmark_mem CMARK_ARENA_MEM_ALLOCATOR = {arena_calloc, arena_realloc, arena_free}; - -cmark_mem *cmark_get_arena_mem_allocator(void) { - return &CMARK_ARENA_MEM_ALLOCATOR; -} diff --git a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/arena.o b/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/arena.o deleted file mode 100644 index e514221..0000000 Binary files a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/arena.o and /dev/null differ diff --git a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/autolink.c b/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/autolink.c deleted file mode 100644 index d898cd2..0000000 --- a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/autolink.c +++ /dev/null @@ -1,508 +0,0 @@ -#include "autolink.h" -#include -#include -#include -#include - -#if defined(_WIN32) -#define strncasecmp _strnicmp -#else -#include -#endif - -static int is_valid_hostchar(const uint8_t *link, size_t link_len) { - int32_t ch; - int r = cmark_utf8proc_iterate(link, (bufsize_t)link_len, &ch); - if (r < 0) - return 0; - return !cmark_utf8proc_is_space(ch) && !cmark_utf8proc_is_punctuation(ch); -} - -static int sd_autolink_issafe(const uint8_t *link, size_t link_len) { - static const size_t valid_uris_count = 3; - static const char *valid_uris[] = {"http://", "https://", "ftp://"}; - - size_t i; - - for (i = 0; i < valid_uris_count; ++i) { - size_t len = strlen(valid_uris[i]); - - if (link_len > len && strncasecmp((char *)link, valid_uris[i], len) == 0 && - is_valid_hostchar(link + len, link_len - len)) - return 1; - } - - return 0; -} - -static size_t autolink_delim(uint8_t *data, size_t link_end) { - size_t i; - size_t closing = 0; - size_t opening = 0; - - for (i = 0; i < link_end; ++i) { - const uint8_t c = data[i]; - if (c == '<') { - link_end = i; - break; - } else if (c == '(') { - opening++; - } else if (c == ')') { - closing++; - } - } - - while (link_end > 0) { - switch (data[link_end - 1]) { - case ')': - /* Allow any number of matching brackets (as recognised in copen/cclose) - * at the end of the URL. If there is a greater number of closing - * brackets than opening ones, we remove one character from the end of - * the link. - * - * Examples (input text => output linked portion): - * - * http://www.pokemon.com/Pikachu_(Electric) - * => http://www.pokemon.com/Pikachu_(Electric) - * - * http://www.pokemon.com/Pikachu_((Electric) - * => http://www.pokemon.com/Pikachu_((Electric) - * - * http://www.pokemon.com/Pikachu_(Electric)) - * => http://www.pokemon.com/Pikachu_(Electric) - * - * http://www.pokemon.com/Pikachu_((Electric)) - * => http://www.pokemon.com/Pikachu_((Electric)) - */ - if (closing <= opening) { - return link_end; - } - closing--; - link_end--; - break; - case '?': - case '!': - case '.': - case ',': - case ':': - case '*': - case '_': - case '~': - case '\'': - case '"': - link_end--; - break; - case ';': { - size_t new_end = link_end - 2; - - while (new_end > 0 && cmark_isalpha(data[new_end])) - new_end--; - - if (new_end < link_end - 2 && data[new_end] == '&') - link_end = new_end; - else - link_end--; - break; - } - - default: - return link_end; - } - } - - return link_end; -} - -static size_t check_domain(uint8_t *data, size_t size, int allow_short) { - size_t i, np = 0, uscore1 = 0, uscore2 = 0; - - /* The purpose of this code is to reject urls that contain an underscore - * in one of the last two segments. Examples: - * - * www.xxx.yyy.zzz autolinked - * www.xxx.yyy._zzz not autolinked - * www.xxx._yyy.zzz not autolinked - * www._xxx.yyy.zzz autolinked - * - * The reason is that domain names are allowed to include underscores, - * but host names are not. See: https://stackoverflow.com/a/2183140 - */ - for (i = 1; i < size - 1; i++) { - if (data[i] == '\\' && i < size - 2) - i++; - if (data[i] == '_') - uscore2++; - else if (data[i] == '.') { - uscore1 = uscore2; - uscore2 = 0; - np++; - } else if (!is_valid_hostchar(data + i, size - i) && data[i] != '-') - break; - } - - if (uscore1 > 0 || uscore2 > 0) { - /* If the url is very long then accept it despite the underscores, - * to avoid quadratic behavior causing a denial of service. See: - * https://github.com/github/cmark-gfm/security/advisories/GHSA-29g3-96g3-jg6c - * Reasonable urls are unlikely to have more than 10 segments, so - * this extra condition shouldn't have any impact on normal usage. - */ - if (np <= 10) { - return 0; - } - } - - if (allow_short) { - /* We don't need a valid domain in the strict sense (with - * least one dot; so just make sure it's composed of valid - * domain characters and return the length of the the valid - * sequence. */ - return i; - } else { - /* a valid domain needs to have at least a dot. - * that's as far as we get */ - return np ? i : 0; - } -} - -static cmark_node *www_match(cmark_parser *parser, cmark_node *parent, - cmark_inline_parser *inline_parser) { - cmark_chunk *chunk = cmark_inline_parser_get_chunk(inline_parser); - size_t max_rewind = cmark_inline_parser_get_offset(inline_parser); - uint8_t *data = chunk->data + max_rewind; - size_t size = chunk->len - max_rewind; - int start = cmark_inline_parser_get_column(inline_parser); - - size_t link_end; - - if (max_rewind > 0 && strchr("*_~(", data[-1]) == NULL && - !cmark_isspace(data[-1])) - return 0; - - if (size < 4 || memcmp(data, "www.", strlen("www.")) != 0) - return 0; - - link_end = check_domain(data, size, 0); - - if (link_end == 0) - return NULL; - - while (link_end < size && !cmark_isspace(data[link_end]) && data[link_end] != '<') - link_end++; - - link_end = autolink_delim(data, link_end); - - if (link_end == 0) - return NULL; - - cmark_inline_parser_set_offset(inline_parser, (int)(max_rewind + link_end)); - - cmark_node *node = cmark_node_new_with_mem(CMARK_NODE_LINK, parser->mem); - - cmark_strbuf buf; - cmark_strbuf_init(parser->mem, &buf, 10); - cmark_strbuf_puts(&buf, "http://"); - cmark_strbuf_put(&buf, data, (bufsize_t)link_end); - node->as.link.url = cmark_chunk_buf_detach(&buf); - - cmark_node *text = cmark_node_new_with_mem(CMARK_NODE_TEXT, parser->mem); - text->as.literal = - cmark_chunk_dup(chunk, (bufsize_t)max_rewind, (bufsize_t)link_end); - cmark_node_append_child(node, text); - - node->start_line = text->start_line = - node->end_line = text->end_line = - cmark_inline_parser_get_line(inline_parser); - - node->start_column = text->start_column = start - 1; - node->end_column = text->end_column = cmark_inline_parser_get_column(inline_parser) - 1; - - return node; -} - -static cmark_node *url_match(cmark_parser *parser, cmark_node *parent, - cmark_inline_parser *inline_parser) { - size_t link_end, domain_len; - int rewind = 0; - - cmark_chunk *chunk = cmark_inline_parser_get_chunk(inline_parser); - int max_rewind = cmark_inline_parser_get_offset(inline_parser); - uint8_t *data = chunk->data + max_rewind; - size_t size = chunk->len - max_rewind; - - if (size < 4 || data[1] != '/' || data[2] != '/') - return 0; - - while (rewind < max_rewind && cmark_isalpha(data[-rewind - 1])) - rewind++; - - if (!sd_autolink_issafe(data - rewind, size + rewind)) - return 0; - - link_end = strlen("://"); - - domain_len = check_domain(data + link_end, size - link_end, 1); - - if (domain_len == 0) - return 0; - - link_end += domain_len; - while (link_end < size && !cmark_isspace(data[link_end]) && data[link_end] != '<') - link_end++; - - link_end = autolink_delim(data, link_end); - - if (link_end == 0) - return NULL; - - cmark_inline_parser_set_offset(inline_parser, (int)(max_rewind + link_end)); - cmark_node_unput(parent, rewind); - - cmark_node *node = cmark_node_new_with_mem(CMARK_NODE_LINK, parser->mem); - - cmark_chunk url = cmark_chunk_dup(chunk, max_rewind - rewind, - (bufsize_t)(link_end + rewind)); - node->as.link.url = url; - - cmark_node *text = cmark_node_new_with_mem(CMARK_NODE_TEXT, parser->mem); - text->as.literal = url; - cmark_node_append_child(node, text); - - node->start_line = text->start_line = node->end_line = text->end_line = cmark_inline_parser_get_line(inline_parser); - - node->start_column = text->start_column = max_rewind - rewind; - node->end_column = text->end_column = cmark_inline_parser_get_column(inline_parser) - 1; - - return node; -} - -static cmark_node *match(cmark_syntax_extension *ext, cmark_parser *parser, - cmark_node *parent, unsigned char c, - cmark_inline_parser *inline_parser) { - if (cmark_inline_parser_in_bracket(inline_parser, false) || - cmark_inline_parser_in_bracket(inline_parser, true)) - return NULL; - - if (c == ':') - return url_match(parser, parent, inline_parser); - - if (c == 'w') - return www_match(parser, parent, inline_parser); - - return NULL; - - // note that we could end up re-consuming something already a - // part of an inline, because we don't track when the last - // inline was finished in inlines.c. -} - -static bool validate_protocol(const char protocol[], uint8_t *data, size_t rewind, size_t max_rewind) { - size_t len = strlen(protocol); - - if (len > (max_rewind - rewind)) { - return false; - } - - // Check that the protocol matches - if (memcmp(data - rewind - len, protocol, len) != 0) { - return false; - } - - if (len == (max_rewind - rewind)) { - return true; - } - - char prev_char = data[-((ptrdiff_t)rewind) - len - 1]; - - // Make sure the character before the protocol is non-alphanumeric - return !cmark_isalnum(prev_char); -} - -static void postprocess_text(cmark_parser *parser, cmark_node *text) { - size_t start = 0; - size_t offset = 0; - // `text` is going to be split into a list of nodes containing shorter segments - // of text, so we detach the memory buffer from text and use `cmark_chunk_dup` to - // create references to it. Later, `cmark_chunk_to_cstr` is used to convert - // the references into allocated buffers. The detached buffer is freed before we - // return. - cmark_chunk detached_chunk = text->as.literal; - text->as.literal = cmark_chunk_dup(&detached_chunk, 0, detached_chunk.len); - - uint8_t *data = text->as.literal.data; - size_t remaining = text->as.literal.len; - - while (true) { - size_t link_end; - uint8_t *at; - bool auto_mailto = true; - bool is_xmpp = false; - size_t rewind; - size_t max_rewind; - size_t np = 0; - - if (offset >= remaining) - break; - - at = (uint8_t *)memchr(data + start + offset, '@', remaining - offset); - if (!at) - break; - - max_rewind = at - (data + start + offset); - -found_at: - for (rewind = 0; rewind < max_rewind; ++rewind) { - uint8_t c = data[start + offset + max_rewind - rewind - 1]; - - if (cmark_isalnum(c)) - continue; - - if (strchr(".+-_", c) != NULL) - continue; - - if (strchr(":", c) != NULL) { - if (validate_protocol("mailto:", data + start + offset + max_rewind, rewind, max_rewind)) { - auto_mailto = false; - continue; - } - - if (validate_protocol("xmpp:", data + start + offset + max_rewind, rewind, max_rewind)) { - auto_mailto = false; - is_xmpp = true; - continue; - } - } - - break; - } - - if (rewind == 0) { - offset += max_rewind + 1; - continue; - } - - assert(data[start + offset + max_rewind] == '@'); - for (link_end = 1; link_end < remaining - offset - max_rewind; ++link_end) { - uint8_t c = data[start + offset + max_rewind + link_end]; - - if (cmark_isalnum(c)) - continue; - - if (c == '@') { - // Found another '@', so go back and try again with an updated offset and max_rewind. - offset += max_rewind + 1; - max_rewind = link_end - 1; - goto found_at; - } else if (c == '.' && link_end < remaining - offset - max_rewind - 1 && - cmark_isalnum(data[start + offset + max_rewind + link_end + 1])) - np++; - else if (c == '/' && is_xmpp) - continue; - else if (c != '-' && c != '_') - break; - } - - if (link_end < 2 || np == 0 || - (!cmark_isalpha(data[start + offset + max_rewind + link_end - 1]) && - data[start + offset + max_rewind + link_end - 1] != '.')) { - offset += max_rewind + link_end; - continue; - } - - link_end = autolink_delim(data + start + offset + max_rewind, link_end); - - if (link_end == 0) { - offset += max_rewind + 1; - continue; - } - - cmark_node *link_node = cmark_node_new_with_mem(CMARK_NODE_LINK, parser->mem); - cmark_strbuf buf; - cmark_strbuf_init(parser->mem, &buf, 10); - if (auto_mailto) - cmark_strbuf_puts(&buf, "mailto:"); - cmark_strbuf_put(&buf, data + start + offset + max_rewind - rewind, (bufsize_t)(link_end + rewind)); - link_node->as.link.url = cmark_chunk_buf_detach(&buf); - - cmark_node *link_text = cmark_node_new_with_mem(CMARK_NODE_TEXT, parser->mem); - cmark_chunk email = cmark_chunk_dup( - &detached_chunk, - (bufsize_t)(start + offset + max_rewind - rewind), - (bufsize_t)(link_end + rewind)); - cmark_chunk_to_cstr(parser->mem, &email); - link_text->as.literal = email; - cmark_node_append_child(link_node, link_text); - - cmark_node_insert_after(text, link_node); - - cmark_node *post = cmark_node_new_with_mem(CMARK_NODE_TEXT, parser->mem); - post->as.literal = cmark_chunk_dup(&detached_chunk, - (bufsize_t)(start + offset + max_rewind + link_end), - (bufsize_t)(remaining - offset - max_rewind - link_end)); - - cmark_node_insert_after(link_node, post); - - text->as.literal = cmark_chunk_dup(&detached_chunk, (bufsize_t)start, (bufsize_t)(offset + max_rewind - rewind)); - cmark_chunk_to_cstr(parser->mem, &text->as.literal); - - text = post; - start += offset + max_rewind + link_end; - remaining -= offset + max_rewind + link_end; - offset = 0; - } - - // Convert the reference to allocated memory. - assert(!text->as.literal.alloc); - cmark_chunk_to_cstr(parser->mem, &text->as.literal); - - // Free the detached buffer. - cmark_chunk_free(parser->mem, &detached_chunk); -} - -static cmark_node *postprocess(cmark_syntax_extension *ext, cmark_parser *parser, cmark_node *root) { - cmark_iter *iter; - cmark_event_type ev; - cmark_node *node; - bool in_link = false; - - cmark_consolidate_text_nodes(root); - iter = cmark_iter_new(root); - - while ((ev = cmark_iter_next(iter)) != CMARK_EVENT_DONE) { - node = cmark_iter_get_node(iter); - if (in_link) { - if (ev == CMARK_EVENT_EXIT && node->type == CMARK_NODE_LINK) { - in_link = false; - } - continue; - } - - if (ev == CMARK_EVENT_ENTER && node->type == CMARK_NODE_LINK) { - in_link = true; - continue; - } - - if (ev == CMARK_EVENT_ENTER && node->type == CMARK_NODE_TEXT) { - postprocess_text(parser, node); - } - } - - cmark_iter_free(iter); - - return root; -} - -cmark_syntax_extension *create_autolink_extension(void) { - cmark_syntax_extension *ext = cmark_syntax_extension_new("autolink"); - cmark_llist *special_chars = NULL; - - cmark_syntax_extension_set_match_inline_func(ext, match); - cmark_syntax_extension_set_postprocess_func(ext, postprocess); - - cmark_mem *mem = cmark_get_default_mem_allocator(); - special_chars = cmark_llist_append(mem, special_chars, (void *)':'); - special_chars = cmark_llist_append(mem, special_chars, (void *)'w'); - cmark_syntax_extension_set_special_inline_chars(ext, special_chars); - - return ext; -} diff --git a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/autolink.h b/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/autolink.h deleted file mode 100644 index 4e17937..0000000 --- a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/autolink.h +++ /dev/null @@ -1,8 +0,0 @@ -#ifndef CMARK_GFM_AUTOLINK_H -#define CMARK_GFM_AUTOLINK_H - -#include "cmark-gfm-core-extensions.h" - -cmark_syntax_extension *create_autolink_extension(void); - -#endif diff --git a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/autolink.o b/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/autolink.o deleted file mode 100644 index cba3c69..0000000 Binary files a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/autolink.o and /dev/null differ diff --git a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/blocks.c b/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/blocks.c deleted file mode 100644 index 3b5da56..0000000 --- a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/blocks.c +++ /dev/null @@ -1,1622 +0,0 @@ -/** - * Block parsing implementation. - * - * For a high-level overview of the block parsing process, - * see http://spec.commonmark.org/0.24/#phase-1-block-structure - */ - -#include -#include -#include -#include - -#include "cmark_ctype.h" -#include "syntax_extension.h" -#include "config.h" -#include "parser.h" -#include "cmark-gfm.h" -#include "node.h" -#include "references.h" -#include "utf8.h" -#include "scanners.h" -#include "inlines.h" -#include "houdini.h" -#include "buffer.h" -#include "footnotes.h" - -#define CODE_INDENT 4 -#define TAB_STOP 4 - -/** - * Very deeply nested lists can cause quadratic performance issues. - * This constant is used in open_new_blocks() to limit the nesting - * depth. It is unlikely that a non-contrived markdown document will - * be nested this deeply. - */ -#define MAX_LIST_DEPTH 100 - -#ifndef MIN -#define MIN(x, y) ((x < y) ? x : y) -#endif - -#define peek_at(i, n) (i)->data[n] - -static bool S_last_line_blank(const cmark_node *node) { - return (node->flags & CMARK_NODE__LAST_LINE_BLANK) != 0; -} - -static bool S_last_line_checked(const cmark_node *node) { - return (node->flags & CMARK_NODE__LAST_LINE_CHECKED) != 0; -} - -static CMARK_INLINE cmark_node_type S_type(const cmark_node *node) { - return (cmark_node_type)node->type; -} - -static void S_set_last_line_blank(cmark_node *node, bool is_blank) { - if (is_blank) - node->flags |= CMARK_NODE__LAST_LINE_BLANK; - else - node->flags &= ~CMARK_NODE__LAST_LINE_BLANK; -} - -static void S_set_last_line_checked(cmark_node *node) { - node->flags |= CMARK_NODE__LAST_LINE_CHECKED; -} - -static CMARK_INLINE bool S_is_line_end_char(char c) { - return (c == '\n' || c == '\r'); -} - -static CMARK_INLINE bool S_is_space_or_tab(char c) { - return (c == ' ' || c == '\t'); -} - -static void S_parser_feed(cmark_parser *parser, const unsigned char *buffer, - size_t len, bool eof); - -static void S_process_line(cmark_parser *parser, const unsigned char *buffer, - bufsize_t bytes); - -static cmark_node *make_block(cmark_mem *mem, cmark_node_type tag, - int start_line, int start_column) { - cmark_node *e; - - e = (cmark_node *)mem->calloc(1, sizeof(*e)); - cmark_strbuf_init(mem, &e->content, 32); - e->type = (uint16_t)tag; - e->flags = CMARK_NODE__OPEN; - e->start_line = start_line; - e->start_column = start_column; - e->end_line = start_line; - - return e; -} - -// Create a root document node. -static cmark_node *make_document(cmark_mem *mem) { - cmark_node *e = make_block(mem, CMARK_NODE_DOCUMENT, 1, 1); - return e; -} - -int cmark_parser_attach_syntax_extension(cmark_parser *parser, - cmark_syntax_extension *extension) { - parser->syntax_extensions = cmark_llist_append(parser->mem, parser->syntax_extensions, extension); - if (extension->match_inline || extension->insert_inline_from_delim) { - parser->inline_syntax_extensions = cmark_llist_append( - parser->mem, parser->inline_syntax_extensions, extension); - } - - return 1; -} - -static void cmark_parser_dispose(cmark_parser *parser) { - if (parser->root) - cmark_node_free(parser->root); - - if (parser->refmap) - cmark_map_free(parser->refmap); -} - -static void cmark_parser_reset(cmark_parser *parser) { - cmark_llist *saved_exts = parser->syntax_extensions; - cmark_llist *saved_inline_exts = parser->inline_syntax_extensions; - int saved_options = parser->options; - cmark_mem *saved_mem = parser->mem; - - cmark_parser_dispose(parser); - - memset(parser, 0, sizeof(cmark_parser)); - parser->mem = saved_mem; - - cmark_strbuf_init(parser->mem, &parser->curline, 256); - cmark_strbuf_init(parser->mem, &parser->linebuf, 0); - - cmark_node *document = make_document(parser->mem); - - parser->refmap = cmark_reference_map_new(parser->mem); - parser->root = document; - parser->current = document; - - parser->syntax_extensions = saved_exts; - parser->inline_syntax_extensions = saved_inline_exts; - parser->options = saved_options; -} - -cmark_parser *cmark_parser_new_with_mem(int options, cmark_mem *mem) { - cmark_parser *parser = (cmark_parser *)mem->calloc(1, sizeof(cmark_parser)); - parser->mem = mem; - parser->options = options; - cmark_parser_reset(parser); - return parser; -} - -cmark_parser *cmark_parser_new(int options) { - extern cmark_mem CMARK_DEFAULT_MEM_ALLOCATOR; - return cmark_parser_new_with_mem(options, &CMARK_DEFAULT_MEM_ALLOCATOR); -} - -void cmark_parser_free(cmark_parser *parser) { - cmark_mem *mem = parser->mem; - cmark_parser_dispose(parser); - cmark_strbuf_free(&parser->curline); - cmark_strbuf_free(&parser->linebuf); - cmark_llist_free(parser->mem, parser->syntax_extensions); - cmark_llist_free(parser->mem, parser->inline_syntax_extensions); - mem->free(parser); -} - -static cmark_node *finalize(cmark_parser *parser, cmark_node *b); - -// Returns true if line has only space characters, else false. -static bool is_blank(cmark_strbuf *s, bufsize_t offset) { - while (offset < s->size) { - switch (s->ptr[offset]) { - case '\r': - case '\n': - return true; - case ' ': - offset++; - break; - case '\t': - offset++; - break; - default: - return false; - } - } - - return true; -} - -static CMARK_INLINE bool accepts_lines(cmark_node_type block_type) { - return (block_type == CMARK_NODE_PARAGRAPH || - block_type == CMARK_NODE_HEADING || - block_type == CMARK_NODE_CODE_BLOCK); -} - -static CMARK_INLINE bool contains_inlines(cmark_node *node) { - if (node->extension && node->extension->contains_inlines_func) { - return node->extension->contains_inlines_func(node->extension, node) != 0; - } - - return (node->type == CMARK_NODE_PARAGRAPH || - node->type == CMARK_NODE_HEADING); -} - -static void add_line(cmark_node *node, cmark_chunk *ch, cmark_parser *parser) { - int chars_to_tab; - int i; - assert(node->flags & CMARK_NODE__OPEN); - if (parser->partially_consumed_tab) { - parser->offset += 1; // skip over tab - // add space characters: - chars_to_tab = TAB_STOP - (parser->column % TAB_STOP); - for (i = 0; i < chars_to_tab; i++) { - cmark_strbuf_putc(&node->content, ' '); - } - } - cmark_strbuf_put(&node->content, ch->data + parser->offset, - ch->len - parser->offset); -} - -static void remove_trailing_blank_lines(cmark_strbuf *ln) { - bufsize_t i; - unsigned char c; - - for (i = ln->size - 1; i >= 0; --i) { - c = ln->ptr[i]; - - if (c != ' ' && c != '\t' && !S_is_line_end_char(c)) - break; - } - - if (i < 0) { - cmark_strbuf_clear(ln); - return; - } - - for (; i < ln->size; ++i) { - c = ln->ptr[i]; - - if (!S_is_line_end_char(c)) - continue; - - cmark_strbuf_truncate(ln, i); - break; - } -} - -// Check to see if a node ends with a blank line, descending -// if needed into lists and sublists. -static bool S_ends_with_blank_line(cmark_node *node) { - if (S_last_line_checked(node)) { - return(S_last_line_blank(node)); - } else if ((S_type(node) == CMARK_NODE_LIST || - S_type(node) == CMARK_NODE_ITEM) && node->last_child) { - S_set_last_line_checked(node); - return(S_ends_with_blank_line(node->last_child)); - } else { - S_set_last_line_checked(node); - return (S_last_line_blank(node)); - } -} - -// returns true if content remains after link defs are resolved. -static bool resolve_reference_link_definitions( - cmark_parser *parser, - cmark_node *b) { - bufsize_t pos; - cmark_strbuf *node_content = &b->content; - cmark_chunk chunk = {node_content->ptr, node_content->size, 0}; - while (chunk.len && chunk.data[0] == '[' && - (pos = cmark_parse_reference_inline(parser->mem, &chunk, - parser->refmap))) { - - chunk.data += pos; - chunk.len -= pos; - } - cmark_strbuf_drop(node_content, (node_content->size - chunk.len)); - return !is_blank(&b->content, 0); -} - -static cmark_node *finalize(cmark_parser *parser, cmark_node *b) { - bufsize_t pos; - cmark_node *item; - cmark_node *subitem; - cmark_node *parent; - bool has_content; - - parent = b->parent; - assert(b->flags & - CMARK_NODE__OPEN); // shouldn't call finalize on closed blocks - b->flags &= ~CMARK_NODE__OPEN; - - if (parser->curline.size == 0) { - // end of input - line number has not been incremented - b->end_line = parser->line_number; - b->end_column = parser->last_line_length; - } else if (S_type(b) == CMARK_NODE_DOCUMENT || - (S_type(b) == CMARK_NODE_CODE_BLOCK && b->as.code.fenced) || - (S_type(b) == CMARK_NODE_HEADING && b->as.heading.setext)) { - b->end_line = parser->line_number; - b->end_column = parser->curline.size; - if (b->end_column && parser->curline.ptr[b->end_column - 1] == '\n') - b->end_column -= 1; - if (b->end_column && parser->curline.ptr[b->end_column - 1] == '\r') - b->end_column -= 1; - } else { - b->end_line = parser->line_number - 1; - b->end_column = parser->last_line_length; - } - - cmark_strbuf *node_content = &b->content; - - switch (S_type(b)) { - case CMARK_NODE_PARAGRAPH: - { - has_content = resolve_reference_link_definitions(parser, b); - if (!has_content) { - // remove blank node (former reference def) - cmark_node_free(b); - } - break; - } - - case CMARK_NODE_CODE_BLOCK: - if (!b->as.code.fenced) { // indented code - remove_trailing_blank_lines(node_content); - cmark_strbuf_putc(node_content, '\n'); - } else { - // first line of contents becomes info - for (pos = 0; pos < node_content->size; ++pos) { - if (S_is_line_end_char(node_content->ptr[pos])) - break; - } - assert(pos < node_content->size); - - cmark_strbuf tmp = CMARK_BUF_INIT(parser->mem); - houdini_unescape_html_f(&tmp, node_content->ptr, pos); - cmark_strbuf_trim(&tmp); - cmark_strbuf_unescape(&tmp); - b->as.code.info = cmark_chunk_buf_detach(&tmp); - - if (node_content->ptr[pos] == '\r') - pos += 1; - if (node_content->ptr[pos] == '\n') - pos += 1; - cmark_strbuf_drop(node_content, pos); - } - b->as.code.literal = cmark_chunk_buf_detach(node_content); - break; - - case CMARK_NODE_HTML_BLOCK: - b->as.literal = cmark_chunk_buf_detach(node_content); - break; - - case CMARK_NODE_LIST: // determine tight/loose status - b->as.list.tight = true; // tight by default - item = b->first_child; - - while (item) { - // check for non-final non-empty list item ending with blank line: - if (S_last_line_blank(item) && item->next) { - b->as.list.tight = false; - break; - } - // recurse into children of list item, to see if there are - // spaces between them: - subitem = item->first_child; - while (subitem) { - if ((item->next || subitem->next) && - S_ends_with_blank_line(subitem)) { - b->as.list.tight = false; - break; - } - subitem = subitem->next; - } - if (!(b->as.list.tight)) { - break; - } - item = item->next; - } - - break; - - default: - break; - } - - return parent; -} - -// Add a node as child of another. Return pointer to child. -static cmark_node *add_child(cmark_parser *parser, cmark_node *parent, - cmark_node_type block_type, int start_column) { - assert(parent); - - // if 'parent' isn't the kind of node that can accept this child, - // then back up til we hit a node that can. - while (!cmark_node_can_contain_type(parent, block_type)) { - parent = finalize(parser, parent); - } - - cmark_node *child = - make_block(parser->mem, block_type, parser->line_number, start_column); - child->parent = parent; - - if (parent->last_child) { - parent->last_child->next = child; - child->prev = parent->last_child; - } else { - parent->first_child = child; - child->prev = NULL; - } - parent->last_child = child; - return child; -} - -void cmark_manage_extensions_special_characters(cmark_parser *parser, int add) { - cmark_llist *tmp_ext; - - for (tmp_ext = parser->inline_syntax_extensions; tmp_ext; tmp_ext=tmp_ext->next) { - cmark_syntax_extension *ext = (cmark_syntax_extension *) tmp_ext->data; - cmark_llist *tmp_char; - for (tmp_char = ext->special_inline_chars; tmp_char; tmp_char=tmp_char->next) { - unsigned char c = (unsigned char)(size_t)tmp_char->data; - if (add) - cmark_inlines_add_special_character(c, ext->emphasis); - else - cmark_inlines_remove_special_character(c, ext->emphasis); - } - } -} - -// Walk through node and all children, recursively, parsing -// string content into inline content where appropriate. -static void process_inlines(cmark_parser *parser, - cmark_map *refmap, int options) { - cmark_iter *iter = cmark_iter_new(parser->root); - cmark_node *cur; - cmark_event_type ev_type; - - cmark_manage_extensions_special_characters(parser, true); - - while ((ev_type = cmark_iter_next(iter)) != CMARK_EVENT_DONE) { - cur = cmark_iter_get_node(iter); - if (ev_type == CMARK_EVENT_ENTER) { - if (contains_inlines(cur)) { - cmark_parse_inlines(parser, cur, refmap, options); - } - } - } - - cmark_manage_extensions_special_characters(parser, false); - - cmark_iter_free(iter); -} - -static int sort_footnote_by_ix(const void *_a, const void *_b) { - cmark_footnote *a = *(cmark_footnote **)_a; - cmark_footnote *b = *(cmark_footnote **)_b; - return (int)a->ix - (int)b->ix; -} - -static void process_footnotes(cmark_parser *parser) { - // * Collect definitions in a map. - // * Iterate the references in the document in order, assigning indices to - // definitions in the order they're seen. - // * Write out the footnotes at the bottom of the document in index order. - - cmark_map *map = cmark_footnote_map_new(parser->mem); - - cmark_iter *iter = cmark_iter_new(parser->root); - cmark_node *cur; - cmark_event_type ev_type; - - while ((ev_type = cmark_iter_next(iter)) != CMARK_EVENT_DONE) { - cur = cmark_iter_get_node(iter); - if (ev_type == CMARK_EVENT_EXIT && cur->type == CMARK_NODE_FOOTNOTE_DEFINITION) { - cmark_footnote_create(map, cur); - } - } - - cmark_iter_free(iter); - iter = cmark_iter_new(parser->root); - unsigned int ix = 0; - - while ((ev_type = cmark_iter_next(iter)) != CMARK_EVENT_DONE) { - cur = cmark_iter_get_node(iter); - if (ev_type == CMARK_EVENT_EXIT && cur->type == CMARK_NODE_FOOTNOTE_REFERENCE) { - cmark_footnote *footnote = (cmark_footnote *)cmark_map_lookup(map, &cur->as.literal); - if (footnote) { - if (!footnote->ix) - footnote->ix = ++ix; - - // store a reference to this footnote reference's footnote definition - // this is used by renderers when generating label ids - cur->parent_footnote_def = footnote->node; - - // keep track of a) count of how many times this footnote def has been - // referenced, and b) which reference index this footnote ref is at. - // this is used by renderers when generating links and backreferences. - cur->footnote.ref_ix = ++footnote->node->footnote.def_count; - - char n[32]; - snprintf(n, sizeof(n), "%d", footnote->ix); - cmark_chunk_free(parser->mem, &cur->as.literal); - cmark_strbuf buf = CMARK_BUF_INIT(parser->mem); - cmark_strbuf_puts(&buf, n); - - cur->as.literal = cmark_chunk_buf_detach(&buf); - } else { - cmark_node *text = (cmark_node *)parser->mem->calloc(1, sizeof(*text)); - cmark_strbuf_init(parser->mem, &text->content, 0); - text->type = (uint16_t) CMARK_NODE_TEXT; - - cmark_strbuf buf = CMARK_BUF_INIT(parser->mem); - cmark_strbuf_puts(&buf, "[^"); - cmark_strbuf_put(&buf, cur->as.literal.data, cur->as.literal.len); - cmark_strbuf_putc(&buf, ']'); - - text->as.literal = cmark_chunk_buf_detach(&buf); - cmark_node_insert_after(cur, text); - cmark_node_free(cur); - } - } - } - - cmark_iter_free(iter); - - if (map->sorted) { - qsort(map->sorted, map->size, sizeof(cmark_map_entry *), sort_footnote_by_ix); - for (unsigned int i = 0; i < map->size; ++i) { - cmark_footnote *footnote = (cmark_footnote *)map->sorted[i]; - if (!footnote->ix) { - cmark_node_unlink(footnote->node); - continue; - } - cmark_node_append_child(parser->root, footnote->node); - footnote->node = NULL; - } - } - - cmark_unlink_footnotes_map(map); - cmark_map_free(map); -} - -// Attempts to parse a list item marker (bullet or enumerated). -// On success, returns length of the marker, and populates -// data with the details. On failure, returns 0. -static bufsize_t parse_list_marker(cmark_mem *mem, cmark_chunk *input, - bufsize_t pos, bool interrupts_paragraph, - cmark_list **dataptr) { - unsigned char c; - bufsize_t startpos; - cmark_list *data; - bufsize_t i; - - startpos = pos; - c = peek_at(input, pos); - - if (c == '*' || c == '-' || c == '+') { - pos++; - if (!cmark_isspace(peek_at(input, pos))) { - return 0; - } - - if (interrupts_paragraph) { - i = pos; - // require non-blank content after list marker: - while (S_is_space_or_tab(peek_at(input, i))) { - i++; - } - if (peek_at(input, i) == '\n') { - return 0; - } - } - - data = (cmark_list *)mem->calloc(1, sizeof(*data)); - data->marker_offset = 0; // will be adjusted later - data->list_type = CMARK_BULLET_LIST; - data->bullet_char = c; - data->start = 0; - data->delimiter = CMARK_NO_DELIM; - data->tight = false; - } else if (cmark_isdigit(c)) { - int start = 0; - int digits = 0; - - do { - start = (10 * start) + (peek_at(input, pos) - '0'); - pos++; - digits++; - // We limit to 9 digits to avoid overflow, - // assuming max int is 2^31 - 1 - // This also seems to be the limit for 'start' in some browsers. - } while (digits < 9 && cmark_isdigit(peek_at(input, pos))); - - if (interrupts_paragraph && start != 1) { - return 0; - } - c = peek_at(input, pos); - if (c == '.' || c == ')') { - pos++; - if (!cmark_isspace(peek_at(input, pos))) { - return 0; - } - if (interrupts_paragraph) { - // require non-blank content after list marker: - i = pos; - while (S_is_space_or_tab(peek_at(input, i))) { - i++; - } - if (S_is_line_end_char(peek_at(input, i))) { - return 0; - } - } - - data = (cmark_list *)mem->calloc(1, sizeof(*data)); - data->marker_offset = 0; // will be adjusted later - data->list_type = CMARK_ORDERED_LIST; - data->bullet_char = 0; - data->start = start; - data->delimiter = (c == '.' ? CMARK_PERIOD_DELIM : CMARK_PAREN_DELIM); - data->tight = false; - } else { - return 0; - } - } else { - return 0; - } - - *dataptr = data; - return (pos - startpos); -} - -// Return 1 if list item belongs in list, else 0. -static int lists_match(cmark_list *list_data, cmark_list *item_data) { - return (list_data->list_type == item_data->list_type && - list_data->delimiter == item_data->delimiter && - // list_data->marker_offset == item_data.marker_offset && - list_data->bullet_char == item_data->bullet_char); -} - -static cmark_node *finalize_document(cmark_parser *parser) { - while (parser->current != parser->root) { - parser->current = finalize(parser, parser->current); - } - - finalize(parser, parser->root); - - // Limit total size of extra content created from reference links to - // document size to avoid superlinear growth. Always allow 100KB. - if (parser->total_size > 100000) - parser->refmap->max_ref_size = parser->total_size; - else - parser->refmap->max_ref_size = 100000; - - process_inlines(parser, parser->refmap, parser->options); - if (parser->options & CMARK_OPT_FOOTNOTES) - process_footnotes(parser); - - return parser->root; -} - -cmark_node *cmark_parse_file(FILE *f, int options) { - unsigned char buffer[4096]; - cmark_parser *parser = cmark_parser_new(options); - size_t bytes; - cmark_node *document; - - while ((bytes = fread(buffer, 1, sizeof(buffer), f)) > 0) { - bool eof = bytes < sizeof(buffer); - S_parser_feed(parser, buffer, bytes, eof); - if (eof) { - break; - } - } - - document = cmark_parser_finish(parser); - cmark_parser_free(parser); - return document; -} - -cmark_node *cmark_parse_document(const char *buffer, size_t len, int options) { - cmark_parser *parser = cmark_parser_new(options); - cmark_node *document; - - S_parser_feed(parser, (const unsigned char *)buffer, len, true); - - document = cmark_parser_finish(parser); - cmark_parser_free(parser); - return document; -} - -void cmark_parser_feed(cmark_parser *parser, const char *buffer, size_t len) { - S_parser_feed(parser, (const unsigned char *)buffer, len, false); -} - -void cmark_parser_feed_reentrant(cmark_parser *parser, const char *buffer, size_t len) { - cmark_strbuf saved_linebuf; - - cmark_strbuf_init(parser->mem, &saved_linebuf, 0); - cmark_strbuf_puts(&saved_linebuf, cmark_strbuf_cstr(&parser->linebuf)); - cmark_strbuf_clear(&parser->linebuf); - - S_parser_feed(parser, (const unsigned char *)buffer, len, true); - - cmark_strbuf_sets(&parser->linebuf, cmark_strbuf_cstr(&saved_linebuf)); - cmark_strbuf_free(&saved_linebuf); -} - -static void S_parser_feed(cmark_parser *parser, const unsigned char *buffer, - size_t len, bool eof) { - const unsigned char *end = buffer + len; - static const uint8_t repl[] = {239, 191, 189}; - - if (len > UINT_MAX - parser->total_size) - parser->total_size = UINT_MAX; - else - parser->total_size += len; - - if (parser->last_buffer_ended_with_cr && *buffer == '\n') { - // skip NL if last buffer ended with CR ; see #117 - buffer++; - } - parser->last_buffer_ended_with_cr = false; - while (buffer < end) { - const unsigned char *eol; - bufsize_t chunk_len; - bool process = false; - for (eol = buffer; eol < end; ++eol) { - if (S_is_line_end_char(*eol)) { - process = true; - break; - } - if (*eol == '\0' && eol < end) { - break; - } - } - if (eol >= end && eof) { - process = true; - } - - chunk_len = (bufsize_t)(eol - buffer); - if (process) { - if (parser->linebuf.size > 0) { - cmark_strbuf_put(&parser->linebuf, buffer, chunk_len); - S_process_line(parser, parser->linebuf.ptr, parser->linebuf.size); - cmark_strbuf_clear(&parser->linebuf); - } else { - S_process_line(parser, buffer, chunk_len); - } - } else { - if (eol < end && *eol == '\0') { - // omit NULL byte - cmark_strbuf_put(&parser->linebuf, buffer, chunk_len); - // add replacement character - cmark_strbuf_put(&parser->linebuf, repl, 3); - } else { - cmark_strbuf_put(&parser->linebuf, buffer, chunk_len); - } - } - - buffer += chunk_len; - if (buffer < end) { - if (*buffer == '\0') { - // skip over NULL - buffer++; - } else { - // skip over line ending characters - if (*buffer == '\r') { - buffer++; - if (buffer == end) - parser->last_buffer_ended_with_cr = true; - } - if (buffer < end && *buffer == '\n') - buffer++; - } - } - } -} - -static void chop_trailing_hashtags(cmark_chunk *ch) { - bufsize_t n, orig_n; - - cmark_chunk_rtrim(ch); - orig_n = n = ch->len - 1; - - // if string ends in space followed by #s, remove these: - while (n >= 0 && peek_at(ch, n) == '#') - n--; - - // Check for a space before the final #s: - if (n != orig_n && n >= 0 && S_is_space_or_tab(peek_at(ch, n))) { - ch->len = n; - cmark_chunk_rtrim(ch); - } -} - -// Check for thematic break. On failure, return 0 and update -// thematic_break_kill_pos with the index at which the -// parse fails. On success, return length of match. -// "...three or more hyphens, asterisks, -// or underscores on a line by themselves. If you wish, you may use -// spaces between the hyphens or asterisks." -static int S_scan_thematic_break(cmark_parser *parser, cmark_chunk *input, - bufsize_t offset) { - bufsize_t i; - char c; - char nextc = '\0'; - int count; - i = offset; - c = peek_at(input, i); - if (!(c == '*' || c == '_' || c == '-')) { - parser->thematic_break_kill_pos = i; - return 0; - } - count = 1; - while ((nextc = peek_at(input, ++i))) { - if (nextc == c) { - count++; - } else if (nextc != ' ' && nextc != '\t') { - break; - } - } - if (count >= 3 && (nextc == '\r' || nextc == '\n')) { - return (i - offset) + 1; - } else { - parser->thematic_break_kill_pos = i; - return 0; - } -} - -// Find first nonspace character from current offset, setting -// parser->first_nonspace, parser->first_nonspace_column, -// parser->indent, and parser->blank. Does not advance parser->offset. -static void S_find_first_nonspace(cmark_parser *parser, cmark_chunk *input) { - char c; - int chars_to_tab = TAB_STOP - (parser->column % TAB_STOP); - - if (parser->first_nonspace <= parser->offset) { - parser->first_nonspace = parser->offset; - parser->first_nonspace_column = parser->column; - while ((c = peek_at(input, parser->first_nonspace))) { - if (c == ' ') { - parser->first_nonspace += 1; - parser->first_nonspace_column += 1; - chars_to_tab = chars_to_tab - 1; - if (chars_to_tab == 0) { - chars_to_tab = TAB_STOP; - } - } else if (c == '\t') { - parser->first_nonspace += 1; - parser->first_nonspace_column += chars_to_tab; - chars_to_tab = TAB_STOP; - } else { - break; - } - } - } - - parser->indent = parser->first_nonspace_column - parser->column; - parser->blank = S_is_line_end_char(peek_at(input, parser->first_nonspace)); -} - -// Advance parser->offset and parser->column. parser->offset is the -// byte position in input; parser->column is a virtual column number -// that takes into account tabs. (Multibyte characters are not taken -// into account, because the Markdown line prefixes we are interested in -// analyzing are entirely ASCII.) The count parameter indicates -// how far to advance the offset. If columns is true, then count -// indicates a number of columns; otherwise, a number of bytes. -// If advancing a certain number of columns partially consumes -// a tab character, parser->partially_consumed_tab is set to true. -static void S_advance_offset(cmark_parser *parser, cmark_chunk *input, - bufsize_t count, bool columns) { - char c; - int chars_to_tab; - int chars_to_advance; - while (count > 0 && (c = peek_at(input, parser->offset))) { - if (c == '\t') { - chars_to_tab = TAB_STOP - (parser->column % TAB_STOP); - if (columns) { - parser->partially_consumed_tab = chars_to_tab > count; - chars_to_advance = MIN(count, chars_to_tab); - parser->column += chars_to_advance; - parser->offset += (parser->partially_consumed_tab ? 0 : 1); - count -= chars_to_advance; - } else { - parser->partially_consumed_tab = false; - parser->column += chars_to_tab; - parser->offset += 1; - count -= 1; - } - } else { - parser->partially_consumed_tab = false; - parser->offset += 1; - parser->column += 1; // assume ascii; block starts are ascii - count -= 1; - } - } -} - -static bool S_last_child_is_open(cmark_node *container) { - return container->last_child && - (container->last_child->flags & CMARK_NODE__OPEN); -} - -static bool parse_block_quote_prefix(cmark_parser *parser, cmark_chunk *input) { - bool res = false; - bufsize_t matched = 0; - - matched = - parser->indent <= 3 && peek_at(input, parser->first_nonspace) == '>'; - if (matched) { - - S_advance_offset(parser, input, parser->indent + 1, true); - - if (S_is_space_or_tab(peek_at(input, parser->offset))) { - S_advance_offset(parser, input, 1, true); - } - - res = true; - } - return res; -} - -static bool parse_footnote_definition_block_prefix(cmark_parser *parser, cmark_chunk *input, - cmark_node *container) { - if (parser->indent >= 4) { - S_advance_offset(parser, input, 4, true); - return true; - } else if (input->len > 0 && (input->data[0] == '\n' || (input->data[0] == '\r' && input->data[1] == '\n'))) { - return true; - } - - return false; -} - -static bool parse_node_item_prefix(cmark_parser *parser, cmark_chunk *input, - cmark_node *container) { - bool res = false; - - if (parser->indent >= - container->as.list.marker_offset + container->as.list.padding) { - S_advance_offset(parser, input, container->as.list.marker_offset + - container->as.list.padding, - true); - res = true; - } else if (parser->blank && container->first_child != NULL) { - // if container->first_child is NULL, then the opening line - // of the list item was blank after the list marker; in this - // case, we are done with the list item. - S_advance_offset(parser, input, parser->first_nonspace - parser->offset, - false); - res = true; - } - return res; -} - -static bool parse_code_block_prefix(cmark_parser *parser, cmark_chunk *input, - cmark_node *container, - bool *should_continue) { - bool res = false; - - if (!container->as.code.fenced) { // indented - if (parser->indent >= CODE_INDENT) { - S_advance_offset(parser, input, CODE_INDENT, true); - res = true; - } else if (parser->blank) { - S_advance_offset(parser, input, parser->first_nonspace - parser->offset, - false); - res = true; - } - } else { // fenced - bufsize_t matched = 0; - - if (parser->indent <= 3 && (peek_at(input, parser->first_nonspace) == - container->as.code.fence_char)) { - matched = scan_close_code_fence(input, parser->first_nonspace); - } - - if (matched >= container->as.code.fence_length) { - // closing fence - and since we're at - // the end of a line, we can stop processing it: - *should_continue = false; - S_advance_offset(parser, input, matched, false); - parser->current = finalize(parser, container); - } else { - // skip opt. spaces of fence parser->offset - int i = container->as.code.fence_offset; - - while (i > 0 && S_is_space_or_tab(peek_at(input, parser->offset))) { - S_advance_offset(parser, input, 1, true); - i--; - } - res = true; - } - } - - return res; -} - -static bool parse_html_block_prefix(cmark_parser *parser, - cmark_node *container) { - bool res = false; - int html_block_type = container->as.html_block_type; - - assert(html_block_type >= 1 && html_block_type <= 7); - switch (html_block_type) { - case 1: - case 2: - case 3: - case 4: - case 5: - // these types of blocks can accept blanks - res = true; - break; - case 6: - case 7: - res = !parser->blank; - break; - } - - return res; -} - -static bool parse_extension_block(cmark_parser *parser, - cmark_node *container, - cmark_chunk *input) -{ - bool res = false; - - if (container->extension->last_block_matches) { - if (container->extension->last_block_matches( - container->extension, parser, input->data, input->len, container)) - res = true; - } - - return res; -} - -/** - * For each containing node, try to parse the associated line start. - * - * Will not close unmatched blocks, as we may have a lazy continuation - * line -> http://spec.commonmark.org/0.24/#lazy-continuation-line - * - * Returns: The last matching node, or NULL - */ -static cmark_node *check_open_blocks(cmark_parser *parser, cmark_chunk *input, - bool *all_matched) { - bool should_continue = true; - *all_matched = false; - cmark_node *container = parser->root; - cmark_node_type cont_type; - - while (S_last_child_is_open(container)) { - container = container->last_child; - cont_type = S_type(container); - - S_find_first_nonspace(parser, input); - - if (container->extension) { - if (!parse_extension_block(parser, container, input)) - goto done; - continue; - } - - switch (cont_type) { - case CMARK_NODE_BLOCK_QUOTE: - if (!parse_block_quote_prefix(parser, input)) - goto done; - break; - case CMARK_NODE_ITEM: - if (!parse_node_item_prefix(parser, input, container)) - goto done; - break; - case CMARK_NODE_CODE_BLOCK: - if (!parse_code_block_prefix(parser, input, container, &should_continue)) - goto done; - break; - case CMARK_NODE_HEADING: - // a heading can never contain more than one line - goto done; - case CMARK_NODE_HTML_BLOCK: - if (!parse_html_block_prefix(parser, container)) - goto done; - break; - case CMARK_NODE_PARAGRAPH: - if (parser->blank) - goto done; - break; - case CMARK_NODE_FOOTNOTE_DEFINITION: - if (!parse_footnote_definition_block_prefix(parser, input, container)) - goto done; - break; - default: - break; - } - } - - *all_matched = true; - -done: - if (!*all_matched) { - container = container->parent; // back up to last matching node - } - - if (!should_continue) { - container = NULL; - } - - return container; -} - -static void open_new_blocks(cmark_parser *parser, cmark_node **container, - cmark_chunk *input, bool all_matched) { - bool indented; - cmark_list *data = NULL; - bool maybe_lazy = S_type(parser->current) == CMARK_NODE_PARAGRAPH; - cmark_node_type cont_type = S_type(*container); - bufsize_t matched = 0; - int lev = 0; - bool save_partially_consumed_tab; - bool has_content; - int save_offset; - int save_column; - size_t depth = 0; - - while (cont_type != CMARK_NODE_CODE_BLOCK && - cont_type != CMARK_NODE_HTML_BLOCK) { - depth++; - S_find_first_nonspace(parser, input); - indented = parser->indent >= CODE_INDENT; - - if (!indented && peek_at(input, parser->first_nonspace) == '>') { - - bufsize_t blockquote_startpos = parser->first_nonspace; - - S_advance_offset(parser, input, - parser->first_nonspace + 1 - parser->offset, false); - // optional following character - if (S_is_space_or_tab(peek_at(input, parser->offset))) { - S_advance_offset(parser, input, 1, true); - } - *container = add_child(parser, *container, CMARK_NODE_BLOCK_QUOTE, - blockquote_startpos + 1); - - } else if (!indented && (matched = scan_atx_heading_start( - input, parser->first_nonspace))) { - bufsize_t hashpos; - int level = 0; - bufsize_t heading_startpos = parser->first_nonspace; - - S_advance_offset(parser, input, - parser->first_nonspace + matched - parser->offset, - false); - *container = add_child(parser, *container, CMARK_NODE_HEADING, - heading_startpos + 1); - - hashpos = cmark_chunk_strchr(input, '#', parser->first_nonspace); - - while (peek_at(input, hashpos) == '#') { - level++; - hashpos++; - } - - (*container)->as.heading.level = level; - (*container)->as.heading.setext = false; - (*container)->internal_offset = matched; - - } else if (!indented && (matched = scan_open_code_fence( - input, parser->first_nonspace))) { - *container = add_child(parser, *container, CMARK_NODE_CODE_BLOCK, - parser->first_nonspace + 1); - (*container)->as.code.fenced = true; - (*container)->as.code.fence_char = peek_at(input, parser->first_nonspace); - (*container)->as.code.fence_length = (matched > 255) ? 255 : (uint8_t)matched; - (*container)->as.code.fence_offset = - (int8_t)(parser->first_nonspace - parser->offset); - (*container)->as.code.info = cmark_chunk_literal(""); - S_advance_offset(parser, input, - parser->first_nonspace + matched - parser->offset, - false); - - } else if (!indented && ((matched = scan_html_block_start( - input, parser->first_nonspace)) || - (cont_type != CMARK_NODE_PARAGRAPH && - (matched = scan_html_block_start_7( - input, parser->first_nonspace))))) { - *container = add_child(parser, *container, CMARK_NODE_HTML_BLOCK, - parser->first_nonspace + 1); - (*container)->as.html_block_type = matched; - // note, we don't adjust parser->offset because the tag is part of the - // text - } else if (!indented && cont_type == CMARK_NODE_PARAGRAPH && - (lev = - scan_setext_heading_line(input, parser->first_nonspace))) { - // finalize paragraph, resolving reference links - has_content = resolve_reference_link_definitions(parser, *container); - - if (has_content) { - - (*container)->type = (uint16_t)CMARK_NODE_HEADING; - (*container)->as.heading.level = lev; - (*container)->as.heading.setext = true; - S_advance_offset(parser, input, input->len - 1 - parser->offset, false); - } - } else if (!indented && - !(cont_type == CMARK_NODE_PARAGRAPH && !all_matched) && - (parser->thematic_break_kill_pos <= parser->first_nonspace) && - (matched = S_scan_thematic_break(parser, input, parser->first_nonspace))) { - // it's only now that we know the line is not part of a setext heading: - *container = add_child(parser, *container, CMARK_NODE_THEMATIC_BREAK, - parser->first_nonspace + 1); - S_advance_offset(parser, input, input->len - 1 - parser->offset, false); - } else if (!indented && - (parser->options & CMARK_OPT_FOOTNOTES) && - depth < MAX_LIST_DEPTH && - (matched = scan_footnote_definition(input, parser->first_nonspace))) { - cmark_chunk c = cmark_chunk_dup(input, parser->first_nonspace + 2, matched - 2); - - while (c.data[c.len - 1] != ']') - --c.len; - --c.len; - - cmark_chunk_to_cstr(parser->mem, &c); - - S_advance_offset(parser, input, parser->first_nonspace + matched - parser->offset, false); - *container = add_child(parser, *container, CMARK_NODE_FOOTNOTE_DEFINITION, parser->first_nonspace + matched + 1); - (*container)->as.literal = c; - - (*container)->internal_offset = matched; - } else if ((!indented || cont_type == CMARK_NODE_LIST) && - parser->indent < 4 && - depth < MAX_LIST_DEPTH && - (matched = parse_list_marker( - parser->mem, input, parser->first_nonspace, - (*container)->type == CMARK_NODE_PARAGRAPH, &data))) { - - // Note that we can have new list items starting with >= 4 - // spaces indent, as long as the list container is still open. - int i = 0; - - // compute padding: - S_advance_offset(parser, input, - parser->first_nonspace + matched - parser->offset, - false); - - save_partially_consumed_tab = parser->partially_consumed_tab; - save_offset = parser->offset; - save_column = parser->column; - - while (parser->column - save_column <= 5 && - S_is_space_or_tab(peek_at(input, parser->offset))) { - S_advance_offset(parser, input, 1, true); - } - - i = parser->column - save_column; - if (i >= 5 || i < 1 || - // only spaces after list marker: - S_is_line_end_char(peek_at(input, parser->offset))) { - data->padding = matched + 1; - parser->offset = save_offset; - parser->column = save_column; - parser->partially_consumed_tab = save_partially_consumed_tab; - if (i > 0) { - S_advance_offset(parser, input, 1, true); - } - } else { - data->padding = matched + i; - } - - // check container; if it's a list, see if this list item - // can continue the list; otherwise, create a list container. - - data->marker_offset = parser->indent; - - if (cont_type != CMARK_NODE_LIST || - !lists_match(&((*container)->as.list), data)) { - *container = add_child(parser, *container, CMARK_NODE_LIST, - parser->first_nonspace + 1); - - memcpy(&((*container)->as.list), data, sizeof(*data)); - } - - // add the list item - *container = add_child(parser, *container, CMARK_NODE_ITEM, - parser->first_nonspace + 1); - /* TODO: static */ - memcpy(&((*container)->as.list), data, sizeof(*data)); - parser->mem->free(data); - } else if (indented && !maybe_lazy && !parser->blank) { - S_advance_offset(parser, input, CODE_INDENT, true); - *container = add_child(parser, *container, CMARK_NODE_CODE_BLOCK, - parser->offset + 1); - (*container)->as.code.fenced = false; - (*container)->as.code.fence_char = 0; - (*container)->as.code.fence_length = 0; - (*container)->as.code.fence_offset = 0; - (*container)->as.code.info = cmark_chunk_literal(""); - } else { - cmark_llist *tmp; - cmark_node *new_container = NULL; - - for (tmp = parser->syntax_extensions; tmp; tmp=tmp->next) { - cmark_syntax_extension *ext = (cmark_syntax_extension *) tmp->data; - - if (ext->try_opening_block) { - new_container = ext->try_opening_block( - ext, indented, parser, *container, input->data, input->len); - - if (new_container) { - *container = new_container; - break; - } - } - } - - if (!new_container) { - break; - } - } - - if (accepts_lines(S_type(*container))) { - // if it's a line container, it can't contain other containers - break; - } - - cont_type = S_type(*container); - maybe_lazy = false; - } -} - -static void add_text_to_container(cmark_parser *parser, cmark_node *container, - cmark_node *last_matched_container, - cmark_chunk *input) { - cmark_node *tmp; - // what remains at parser->offset is a text line. add the text to the - // appropriate container. - - S_find_first_nonspace(parser, input); - - if (parser->blank && container->last_child) - S_set_last_line_blank(container->last_child, true); - - // block quote lines are never blank as they start with > - // and we don't count blanks in fenced code for purposes of tight/loose - // lists or breaking out of lists. we also don't set last_line_blank - // on an empty list item. - const cmark_node_type ctype = S_type(container); - const bool last_line_blank = - (parser->blank && ctype != CMARK_NODE_BLOCK_QUOTE && - ctype != CMARK_NODE_HEADING && ctype != CMARK_NODE_THEMATIC_BREAK && - !(ctype == CMARK_NODE_CODE_BLOCK && container->as.code.fenced) && - !(ctype == CMARK_NODE_ITEM && container->first_child == NULL && - container->start_line == parser->line_number)); - - S_set_last_line_blank(container, last_line_blank); - - tmp = container; - while (tmp->parent) { - S_set_last_line_blank(tmp->parent, false); - tmp = tmp->parent; - } - - // If the last line processed belonged to a paragraph node, - // and we didn't match all of the line prefixes for the open containers, - // and we didn't start any new containers, - // and the line isn't blank, - // then treat this as a "lazy continuation line" and add it to - // the open paragraph. - if (parser->current != last_matched_container && - container == last_matched_container && !parser->blank && - S_type(parser->current) == CMARK_NODE_PARAGRAPH) { - add_line(parser->current, input, parser); - } else { // not a lazy continuation - // Finalize any blocks that were not matched and set cur to container: - while (parser->current != last_matched_container) { - parser->current = finalize(parser, parser->current); - assert(parser->current != NULL); - } - - if (S_type(container) == CMARK_NODE_CODE_BLOCK) { - add_line(container, input, parser); - } else if (S_type(container) == CMARK_NODE_HTML_BLOCK) { - add_line(container, input, parser); - - int matches_end_condition; - switch (container->as.html_block_type) { - case 1: - // , ,
tags for code blocks instead of .
- */
-#define CMARK_OPT_GITHUB_PRE_LANG (1 << 11)
-
-/** Be liberal in interpreting inline HTML tags.
- */
-#define CMARK_OPT_LIBERAL_HTML_TAG (1 << 12)
-
-/** Parse footnotes.
- */
-#define CMARK_OPT_FOOTNOTES (1 << 13)
-
-/** Only parse strikethroughs if surrounded by exactly 2 tildes.
- * Gives some compatibility with redcarpet.
- */
-#define CMARK_OPT_STRIKETHROUGH_DOUBLE_TILDE (1 << 14)
-
-/** Use style attributes to align table cells instead of align attributes.
- */
-#define CMARK_OPT_TABLE_PREFER_STYLE_ATTRIBUTES (1 << 15)
-
-/** Include the remainder of the info string in code blocks in
- * a separate attribute.
- */
-#define CMARK_OPT_FULL_INFO_STRING (1 << 16)
-
-/**
- * ## Version information
- */
-
-/** The library version as integer for runtime checks. Also available as
- * macro CMARK_VERSION for compile time checks.
- *
- * * Bits 16-23 contain the major version.
- * * Bits 8-15 contain the minor version.
- * * Bits 0-7 contain the patchlevel.
- *
- * In hexadecimal format, the number 0x010203 represents version 1.2.3.
- */
-CMARK_GFM_EXPORT
-int cmark_version(void);
-
-/** The library version string for runtime checks. Also available as
- * macro CMARK_VERSION_STRING for compile time checks.
- */
-CMARK_GFM_EXPORT
-const char *cmark_version_string(void);
-
-/** # AUTHORS
- *
- * John MacFarlane, Vicent Marti, Kārlis Gaņģis, Nick Wellnhofer.
- */
-
-#ifndef CMARK_NO_SHORT_NAMES
-#define NODE_DOCUMENT CMARK_NODE_DOCUMENT
-#define NODE_BLOCK_QUOTE CMARK_NODE_BLOCK_QUOTE
-#define NODE_LIST CMARK_NODE_LIST
-#define NODE_ITEM CMARK_NODE_ITEM
-#define NODE_CODE_BLOCK CMARK_NODE_CODE_BLOCK
-#define NODE_HTML_BLOCK CMARK_NODE_HTML_BLOCK
-#define NODE_CUSTOM_BLOCK CMARK_NODE_CUSTOM_BLOCK
-#define NODE_PARAGRAPH CMARK_NODE_PARAGRAPH
-#define NODE_HEADING CMARK_NODE_HEADING
-#define NODE_HEADER CMARK_NODE_HEADER
-#define NODE_THEMATIC_BREAK CMARK_NODE_THEMATIC_BREAK
-#define NODE_HRULE CMARK_NODE_HRULE
-#define NODE_TEXT CMARK_NODE_TEXT
-#define NODE_SOFTBREAK CMARK_NODE_SOFTBREAK
-#define NODE_LINEBREAK CMARK_NODE_LINEBREAK
-#define NODE_CODE CMARK_NODE_CODE
-#define NODE_HTML_INLINE CMARK_NODE_HTML_INLINE
-#define NODE_CUSTOM_INLINE CMARK_NODE_CUSTOM_INLINE
-#define NODE_EMPH CMARK_NODE_EMPH
-#define NODE_STRONG CMARK_NODE_STRONG
-#define NODE_LINK CMARK_NODE_LINK
-#define NODE_IMAGE CMARK_NODE_IMAGE
-#define BULLET_LIST CMARK_BULLET_LIST
-#define ORDERED_LIST CMARK_ORDERED_LIST
-#define PERIOD_DELIM CMARK_PERIOD_DELIM
-#define PAREN_DELIM CMARK_PAREN_DELIM
-#endif
-
-typedef int32_t bufsize_t;
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/cmark-gfm_export.h b/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/cmark-gfm_export.h
deleted file mode 100644
index 699d737..0000000
--- a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/cmark-gfm_export.h
+++ /dev/null
@@ -1,42 +0,0 @@
-
-#ifndef CMARK_GFM_EXPORT_H
-#define CMARK_GFM_EXPORT_H
-
-#ifdef CMARK_GFM_STATIC_DEFINE
-# define CMARK_GFM_EXPORT
-# define CMARK_GFM_NO_EXPORT
-#else
-# ifndef CMARK_GFM_EXPORT
-# ifdef libcmark_gfm_EXPORTS
- /* We are building this library */
-# define CMARK_GFM_EXPORT __attribute__((visibility("default")))
-# else
- /* We are using this library */
-# define CMARK_GFM_EXPORT __attribute__((visibility("default")))
-# endif
-# endif
-
-# ifndef CMARK_GFM_NO_EXPORT
-# define CMARK_GFM_NO_EXPORT __attribute__((visibility("hidden")))
-# endif
-#endif
-
-#ifndef CMARK_GFM_DEPRECATED
-# define CMARK_GFM_DEPRECATED __attribute__ ((__deprecated__))
-#endif
-
-#ifndef CMARK_GFM_DEPRECATED_EXPORT
-# define CMARK_GFM_DEPRECATED_EXPORT CMARK_GFM_EXPORT CMARK_GFM_DEPRECATED
-#endif
-
-#ifndef CMARK_GFM_DEPRECATED_NO_EXPORT
-# define CMARK_GFM_DEPRECATED_NO_EXPORT CMARK_GFM_NO_EXPORT CMARK_GFM_DEPRECATED
-#endif
-
-#if 0 /* DEFINE_NO_DEPRECATED */
-# ifndef CMARK_GFM_NO_DEPRECATED
-# define CMARK_GFM_NO_DEPRECATED
-# endif
-#endif
-
-#endif /* CMARK_GFM_EXPORT_H */
diff --git a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/cmark-gfm_version.h b/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/cmark-gfm_version.h
deleted file mode 100644
index 19e67d8..0000000
--- a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/cmark-gfm_version.h
+++ /dev/null
@@ -1,7 +0,0 @@
-#ifndef CMARK_GFM_VERSION_H
-#define CMARK_GFM_VERSION_H
-
-#define CMARK_GFM_VERSION ((0 << 24) | (29 << 16) | (0 << 8) | 11)
-#define CMARK_GFM_VERSION_STRING "0.29.0.gfm.11"
-
-#endif
diff --git a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/cmark.c b/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/cmark.c
deleted file mode 100644
index 68c40c4..0000000
--- a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/cmark.c
+++ /dev/null
@@ -1,55 +0,0 @@
-#include
-#include
-#include
-#include "registry.h"
-#include "node.h"
-#include "houdini.h"
-#include "cmark-gfm.h"
-#include "buffer.h"
-
-cmark_node_type CMARK_NODE_LAST_BLOCK = CMARK_NODE_FOOTNOTE_DEFINITION;
-cmark_node_type CMARK_NODE_LAST_INLINE = CMARK_NODE_FOOTNOTE_REFERENCE;
-
-int cmark_version(void) { return CMARK_GFM_VERSION; }
-
-const char *cmark_version_string(void) { return CMARK_GFM_VERSION_STRING; }
-
-static void *xcalloc(size_t nmem, size_t size) {
- void *ptr = calloc(nmem, size);
- if (!ptr) {
- fprintf(stderr, "[cmark] calloc returned null pointer, aborting\n");
- abort();
- }
- return ptr;
-}
-
-static void *xrealloc(void *ptr, size_t size) {
- void *new_ptr = realloc(ptr, size);
- if (!new_ptr) {
- fprintf(stderr, "[cmark] realloc returned null pointer, aborting\n");
- abort();
- }
- return new_ptr;
-}
-
-static void xfree(void *ptr) {
- free(ptr);
-}
-
-cmark_mem CMARK_DEFAULT_MEM_ALLOCATOR = {xcalloc, xrealloc, xfree};
-
-cmark_mem *cmark_get_default_mem_allocator(void) {
- return &CMARK_DEFAULT_MEM_ALLOCATOR;
-}
-
-char *cmark_markdown_to_html(const char *text, size_t len, int options) {
- cmark_node *doc;
- char *result;
-
- doc = cmark_parse_document(text, len, options);
-
- result = cmark_render_html(doc, options, NULL);
- cmark_node_free(doc);
-
- return result;
-}
diff --git a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/cmark.o b/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/cmark.o
deleted file mode 100644
index 9f6cc23..0000000
Binary files a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/cmark.o and /dev/null differ
diff --git a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/cmark_ctype.c b/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/cmark_ctype.c
deleted file mode 100644
index c0c4d5b..0000000
--- a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/cmark_ctype.c
+++ /dev/null
@@ -1,44 +0,0 @@
-#include
-
-#include "cmark_ctype.h"
-
-/** 1 = space, 2 = punct, 3 = digit, 4 = alpha, 0 = other
- */
-static const uint8_t cmark_ctype_class[256] = {
- /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */
- /* 0 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0,
- /* 1 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- /* 2 */ 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- /* 3 */ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2,
- /* 4 */ 2, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- /* 5 */ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 2, 2, 2, 2, 2,
- /* 6 */ 2, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- /* 7 */ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 2, 2, 2, 2, 0,
- /* 8 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- /* 9 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- /* a */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- /* b */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- /* c */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- /* d */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- /* e */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- /* f */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
-
-/**
- * Returns 1 if c is a "whitespace" character as defined by the spec.
- */
-int cmark_isspace(char c) { return cmark_ctype_class[(uint8_t)c] == 1; }
-
-/**
- * Returns 1 if c is an ascii punctuation character.
- */
-int cmark_ispunct(char c) { return cmark_ctype_class[(uint8_t)c] == 2; }
-
-int cmark_isalnum(char c) {
- uint8_t result;
- result = cmark_ctype_class[(uint8_t)c];
- return (result == 3 || result == 4);
-}
-
-int cmark_isdigit(char c) { return cmark_ctype_class[(uint8_t)c] == 3; }
-
-int cmark_isalpha(char c) { return cmark_ctype_class[(uint8_t)c] == 4; }
diff --git a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/cmark_ctype.h b/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/cmark_ctype.h
deleted file mode 100644
index 67c1cb0..0000000
--- a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/cmark_ctype.h
+++ /dev/null
@@ -1,33 +0,0 @@
-#ifndef CMARK_CMARK_CTYPE_H
-#define CMARK_CMARK_CTYPE_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include "cmark-gfm_export.h"
-
-/** Locale-independent versions of functions from ctype.h.
- * We want cmark to behave the same no matter what the system locale.
- */
-
-CMARK_GFM_EXPORT
-int cmark_isspace(char c);
-
-CMARK_GFM_EXPORT
-int cmark_ispunct(char c);
-
-CMARK_GFM_EXPORT
-int cmark_isalnum(char c);
-
-CMARK_GFM_EXPORT
-int cmark_isdigit(char c);
-
-CMARK_GFM_EXPORT
-int cmark_isalpha(char c);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/cmark_ctype.o b/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/cmark_ctype.o
deleted file mode 100644
index 7a226a5..0000000
Binary files a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/cmark_ctype.o and /dev/null differ
diff --git a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/commonmark.c b/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/commonmark.c
deleted file mode 100644
index 987b473..0000000
--- a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/commonmark.c
+++ /dev/null
@@ -1,514 +0,0 @@
-#include
-#include
-#include
-#include
-#include
-
-#include "config.h"
-#include "cmark-gfm.h"
-#include "node.h"
-#include "buffer.h"
-#include "utf8.h"
-#include "scanners.h"
-#include "render.h"
-#include "syntax_extension.h"
-
-#define OUT(s, wrap, escaping) renderer->out(renderer, node, s, wrap, escaping)
-#define LIT(s) renderer->out(renderer, node, s, false, LITERAL)
-#define CR() renderer->cr(renderer)
-#define BLANKLINE() renderer->blankline(renderer)
-#define ENCODED_SIZE 20
-#define LISTMARKER_SIZE 20
-
-// Functions to convert cmark_nodes to commonmark strings.
-
-static CMARK_INLINE void outc(cmark_renderer *renderer, cmark_node *node,
- cmark_escaping escape,
- int32_t c, unsigned char nextc) {
- bool needs_escaping = false;
- bool follows_digit =
- renderer->buffer->size > 0 &&
- cmark_isdigit(renderer->buffer->ptr[renderer->buffer->size - 1]);
- char encoded[ENCODED_SIZE];
-
- needs_escaping =
- c < 0x80 && escape != LITERAL &&
- ((escape == NORMAL &&
- (c < 0x20 ||
- c == '*' || c == '_' || c == '[' || c == ']' || c == '#' || c == '<' ||
- c == '>' || c == '\\' || c == '`' || c == '~' || c == '!' ||
- (c == '&' && cmark_isalpha(nextc)) || (c == '!' && nextc == '[') ||
- (renderer->begin_content && (c == '-' || c == '+' || c == '=') &&
- // begin_content doesn't get set to false til we've passed digits
- // at the beginning of line, so...
- !follows_digit) ||
- (renderer->begin_content && (c == '.' || c == ')') && follows_digit &&
- (nextc == 0 || cmark_isspace(nextc))))) ||
- (escape == URL &&
- (c == '`' || c == '<' || c == '>' || cmark_isspace((char)c) || c == '\\' ||
- c == ')' || c == '(')) ||
- (escape == TITLE &&
- (c == '`' || c == '<' || c == '>' || c == '"' || c == '\\')));
-
- if (needs_escaping) {
- if (escape == URL && cmark_isspace((char)c)) {
- // use percent encoding for spaces
- snprintf(encoded, ENCODED_SIZE, "%%%2X", c);
- cmark_strbuf_puts(renderer->buffer, encoded);
- renderer->column += 3;
- } else if (cmark_ispunct((char)c)) {
- cmark_render_ascii(renderer, "\\");
- cmark_render_code_point(renderer, c);
- } else { // render as entity
- snprintf(encoded, ENCODED_SIZE, "%d;", c);
- cmark_strbuf_puts(renderer->buffer, encoded);
- renderer->column += (int)strlen(encoded);
- }
- } else {
- cmark_render_code_point(renderer, c);
- }
-}
-
-static int longest_backtick_sequence(const char *code) {
- int longest = 0;
- int current = 0;
- size_t i = 0;
- size_t code_len = strlen(code);
- while (i <= code_len) {
- if (code[i] == '`') {
- current++;
- } else {
- if (current > longest) {
- longest = current;
- }
- current = 0;
- }
- i++;
- }
- return longest;
-}
-
-static int shortest_unused_backtick_sequence(const char *code) {
- // note: if the shortest sequence is >= 32, this returns 32
- // so as not to overflow the bit array.
- uint32_t used = 1;
- int current = 0;
- size_t i = 0;
- size_t code_len = strlen(code);
- while (i <= code_len) {
- if (code[i] == '`') {
- current++;
- } else {
- if (current > 0 && current < 32) {
- used |= (1U << current);
- }
- current = 0;
- }
- i++;
- }
- // return number of first bit that is 0:
- i = 0;
- while (i < 32 && used & 1) {
- used = used >> 1;
- i++;
- }
- return (int)i;
-}
-
-static bool is_autolink(cmark_node *node) {
- cmark_chunk *title;
- cmark_chunk *url;
- cmark_node *link_text;
- char *realurl;
- int realurllen;
-
- if (node->type != CMARK_NODE_LINK) {
- return false;
- }
-
- url = &node->as.link.url;
- if (url->len == 0 || scan_scheme(url, 0) == 0) {
- return false;
- }
-
- title = &node->as.link.title;
- // if it has a title, we can't treat it as an autolink:
- if (title->len > 0) {
- return false;
- }
-
- link_text = node->first_child;
- if (link_text == NULL) {
- return false;
- }
- cmark_consolidate_text_nodes(link_text);
- realurl = (char *)url->data;
- realurllen = url->len;
- if (strncmp(realurl, "mailto:", 7) == 0) {
- realurl += 7;
- realurllen -= 7;
- }
- return (realurllen == link_text->as.literal.len &&
- strncmp(realurl, (char *)link_text->as.literal.data,
- link_text->as.literal.len) == 0);
-}
-
-static int S_render_node(cmark_renderer *renderer, cmark_node *node,
- cmark_event_type ev_type, int options) {
- int list_number;
- cmark_delim_type list_delim;
- int numticks;
- bool extra_spaces;
- int i;
- bool entering = (ev_type == CMARK_EVENT_ENTER);
- const char *info, *code, *title;
- char fencechar[2] = {'\0', '\0'};
- size_t info_len, code_len;
- char listmarker[LISTMARKER_SIZE];
- const char *emph_delim;
- bool first_in_list_item;
- bufsize_t marker_width;
- bool allow_wrap = renderer->width > 0 && !(CMARK_OPT_NOBREAKS & options) &&
- !(CMARK_OPT_HARDBREAKS & options);
-
- // Don't adjust tight list status til we've started the list.
- // Otherwise we loose the blank line between a paragraph and
- // a following list.
- if (entering) {
- if (node->parent && node->parent->type == CMARK_NODE_ITEM) {
- renderer->in_tight_list_item = node->parent->parent->as.list.tight;
- }
- } else {
- if (node->type == CMARK_NODE_LIST) {
- renderer->in_tight_list_item =
- node->parent &&
- node->parent->type == CMARK_NODE_ITEM &&
- node->parent->parent->as.list.tight;
- }
- }
-
- if (node->extension && node->extension->commonmark_render_func) {
- node->extension->commonmark_render_func(node->extension, renderer, node, ev_type, options);
- return 1;
- }
-
- switch (node->type) {
- case CMARK_NODE_DOCUMENT:
- break;
-
- case CMARK_NODE_BLOCK_QUOTE:
- if (entering) {
- LIT("> ");
- renderer->begin_content = true;
- cmark_strbuf_puts(renderer->prefix, "> ");
- } else {
- cmark_strbuf_truncate(renderer->prefix, renderer->prefix->size - 2);
- BLANKLINE();
- }
- break;
-
- case CMARK_NODE_LIST:
- if (!entering && node->next && (node->next->type == CMARK_NODE_CODE_BLOCK ||
- node->next->type == CMARK_NODE_LIST)) {
- // this ensures that a following indented code block or list will be
- // inteprereted correctly.
- CR();
- LIT("");
- BLANKLINE();
- }
- break;
-
- case CMARK_NODE_ITEM:
- if (cmark_node_get_list_type(node->parent) == CMARK_BULLET_LIST) {
- marker_width = 4;
- } else {
- list_number = cmark_node_get_item_index(node);
- list_delim = cmark_node_get_list_delim(node->parent);
- // we ensure a width of at least 4 so
- // we get nice transition from single digits
- // to double
- snprintf(listmarker, LISTMARKER_SIZE, "%d%s%s", list_number,
- list_delim == CMARK_PAREN_DELIM ? ")" : ".",
- list_number < 10 ? " " : " ");
- marker_width = (bufsize_t)strlen(listmarker);
- }
- if (entering) {
- if (cmark_node_get_list_type(node->parent) == CMARK_BULLET_LIST) {
- LIT(" - ");
- renderer->begin_content = true;
- } else {
- LIT(listmarker);
- renderer->begin_content = true;
- }
- for (i = marker_width; i--;) {
- cmark_strbuf_putc(renderer->prefix, ' ');
- }
- } else {
- cmark_strbuf_truncate(renderer->prefix,
- renderer->prefix->size - marker_width);
- CR();
- }
- break;
-
- case CMARK_NODE_HEADING:
- if (entering) {
- for (i = cmark_node_get_heading_level(node); i > 0; i--) {
- LIT("#");
- }
- LIT(" ");
- renderer->begin_content = true;
- renderer->no_linebreaks = true;
- } else {
- renderer->no_linebreaks = false;
- BLANKLINE();
- }
- break;
-
- case CMARK_NODE_CODE_BLOCK:
- first_in_list_item = node->prev == NULL && node->parent &&
- node->parent->type == CMARK_NODE_ITEM;
-
- if (!first_in_list_item) {
- BLANKLINE();
- }
- info = cmark_node_get_fence_info(node);
- info_len = strlen(info);
- fencechar[0] = strchr(info, '`') == NULL ? '`' : '~';
- code = cmark_node_get_literal(node);
- code_len = strlen(code);
- // use indented form if no info, and code doesn't
- // begin or end with a blank line, and code isn't
- // first thing in a list item
- if (info_len == 0 && (code_len > 2 && !cmark_isspace(code[0]) &&
- !(cmark_isspace(code[code_len - 1]) &&
- cmark_isspace(code[code_len - 2]))) &&
- !first_in_list_item) {
- LIT(" ");
- cmark_strbuf_puts(renderer->prefix, " ");
- OUT(cmark_node_get_literal(node), false, LITERAL);
- cmark_strbuf_truncate(renderer->prefix, renderer->prefix->size - 4);
- } else {
- numticks = longest_backtick_sequence(code) + 1;
- if (numticks < 3) {
- numticks = 3;
- }
- for (i = 0; i < numticks; i++) {
- LIT(fencechar);
- }
- LIT(" ");
- OUT(info, false, LITERAL);
- CR();
- OUT(cmark_node_get_literal(node), false, LITERAL);
- CR();
- for (i = 0; i < numticks; i++) {
- LIT(fencechar);
- }
- }
- BLANKLINE();
- break;
-
- case CMARK_NODE_HTML_BLOCK:
- BLANKLINE();
- OUT(cmark_node_get_literal(node), false, LITERAL);
- BLANKLINE();
- break;
-
- case CMARK_NODE_CUSTOM_BLOCK:
- BLANKLINE();
- OUT(entering ? cmark_node_get_on_enter(node) : cmark_node_get_on_exit(node),
- false, LITERAL);
- BLANKLINE();
- break;
-
- case CMARK_NODE_THEMATIC_BREAK:
- BLANKLINE();
- LIT("-----");
- BLANKLINE();
- break;
-
- case CMARK_NODE_PARAGRAPH:
- if (!entering) {
- BLANKLINE();
- }
- break;
-
- case CMARK_NODE_TEXT:
- OUT(cmark_node_get_literal(node), allow_wrap, NORMAL);
- break;
-
- case CMARK_NODE_LINEBREAK:
- if (!(CMARK_OPT_HARDBREAKS & options)) {
- LIT(" ");
- }
- CR();
- break;
-
- case CMARK_NODE_SOFTBREAK:
- if (CMARK_OPT_HARDBREAKS & options) {
- LIT(" ");
- CR();
- } else if (!renderer->no_linebreaks && renderer->width == 0 &&
- !(CMARK_OPT_HARDBREAKS & options) &&
- !(CMARK_OPT_NOBREAKS & options)) {
- CR();
- } else {
- OUT(" ", allow_wrap, LITERAL);
- }
- break;
-
- case CMARK_NODE_CODE:
- code = cmark_node_get_literal(node);
- code_len = strlen(code);
- numticks = shortest_unused_backtick_sequence(code);
- extra_spaces = code_len == 0 ||
- code[0] == '`' || code[code_len - 1] == '`' ||
- code[0] == ' ' || code[code_len - 1] == ' ';
- for (i = 0; i < numticks; i++) {
- LIT("`");
- }
- if (extra_spaces) {
- LIT(" ");
- }
- OUT(cmark_node_get_literal(node), allow_wrap, LITERAL);
- if (extra_spaces) {
- LIT(" ");
- }
- for (i = 0; i < numticks; i++) {
- LIT("`");
- }
- break;
-
- case CMARK_NODE_HTML_INLINE:
- OUT(cmark_node_get_literal(node), false, LITERAL);
- break;
-
- case CMARK_NODE_CUSTOM_INLINE:
- OUT(entering ? cmark_node_get_on_enter(node) : cmark_node_get_on_exit(node),
- false, LITERAL);
- break;
-
- case CMARK_NODE_STRONG:
- if (node->parent == NULL || node->parent->type != CMARK_NODE_STRONG) {
- if (entering) {
- LIT("**");
- } else {
- LIT("**");
- }
- }
- break;
-
- case CMARK_NODE_EMPH:
- // If we have EMPH(EMPH(x)), we need to use *_x_*
- // because **x** is STRONG(x):
- if (node->parent && node->parent->type == CMARK_NODE_EMPH &&
- node->next == NULL && node->prev == NULL) {
- emph_delim = "_";
- } else {
- emph_delim = "*";
- }
- if (entering) {
- LIT(emph_delim);
- } else {
- LIT(emph_delim);
- }
- break;
-
- case CMARK_NODE_LINK:
- if (is_autolink(node)) {
- if (entering) {
- LIT("<");
- if (strncmp(cmark_node_get_url(node), "mailto:", 7) == 0) {
- LIT((const char *)cmark_node_get_url(node) + 7);
- } else {
- LIT((const char *)cmark_node_get_url(node));
- }
- LIT(">");
- // return signal to skip contents of node...
- return 0;
- }
- } else {
- if (entering) {
- LIT("[");
- } else {
- LIT("](");
- OUT(cmark_node_get_url(node), false, URL);
- title = cmark_node_get_title(node);
- if (strlen(title) > 0) {
- LIT(" \"");
- OUT(title, false, TITLE);
- LIT("\"");
- }
- LIT(")");
- }
- }
- break;
-
- case CMARK_NODE_IMAGE:
- if (entering) {
- LIT("![");
- } else {
- LIT("](");
- OUT(cmark_node_get_url(node), false, URL);
- title = cmark_node_get_title(node);
- if (strlen(title) > 0) {
- OUT(" \"", allow_wrap, LITERAL);
- OUT(title, false, TITLE);
- LIT("\"");
- }
- LIT(")");
- }
- break;
-
- case CMARK_NODE_FOOTNOTE_REFERENCE:
- if (entering) {
- LIT("[^");
-
- char *footnote_label = renderer->mem->calloc(node->parent_footnote_def->as.literal.len + 1, sizeof(char));
- memmove(footnote_label, node->parent_footnote_def->as.literal.data, node->parent_footnote_def->as.literal.len);
-
- OUT(footnote_label, false, LITERAL);
- renderer->mem->free(footnote_label);
-
- LIT("]");
- }
- break;
-
- case CMARK_NODE_FOOTNOTE_DEFINITION:
- if (entering) {
- renderer->footnote_ix += 1;
- LIT("[^");
-
- char *footnote_label = renderer->mem->calloc(node->as.literal.len + 1, sizeof(char));
- memmove(footnote_label, node->as.literal.data, node->as.literal.len);
-
- OUT(footnote_label, false, LITERAL);
- renderer->mem->free(footnote_label);
-
- LIT("]:\n");
-
- cmark_strbuf_puts(renderer->prefix, " ");
- } else {
- cmark_strbuf_truncate(renderer->prefix, renderer->prefix->size - 4);
- }
- break;
-
- default:
- assert(false);
- break;
- }
-
- return 1;
-}
-
-char *cmark_render_commonmark(cmark_node *root, int options, int width) {
- return cmark_render_commonmark_with_mem(root, options, width, cmark_node_mem(root));
-}
-
-char *cmark_render_commonmark_with_mem(cmark_node *root, int options, int width, cmark_mem *mem) {
- if (options & CMARK_OPT_HARDBREAKS) {
- // disable breaking on width, since it has
- // a different meaning with OPT_HARDBREAKS
- width = 0;
- }
- return cmark_render(mem, root, options, width, outc, S_render_node);
-}
diff --git a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/commonmark.o b/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/commonmark.o
deleted file mode 100644
index f6b4d9d..0000000
Binary files a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/commonmark.o and /dev/null differ
diff --git a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/commonmarker.c b/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/commonmarker.c
deleted file mode 100644
index 7f094fd..0000000
--- a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/commonmarker.c
+++ /dev/null
@@ -1,1308 +0,0 @@
-#include "commonmarker.h"
-#include "cmark-gfm.h"
-#include "houdini.h"
-#include "node.h"
-#include "registry.h"
-#include "parser.h"
-#include "syntax_extension.h"
-#include "cmark-gfm-core-extensions.h"
-
-static VALUE rb_eNodeError;
-static VALUE rb_cNode;
-
-static VALUE sym_document;
-static VALUE sym_blockquote;
-static VALUE sym_list;
-static VALUE sym_list_item;
-static VALUE sym_code_block;
-static VALUE sym_html;
-static VALUE sym_paragraph;
-static VALUE sym_header;
-static VALUE sym_hrule;
-static VALUE sym_text;
-static VALUE sym_softbreak;
-static VALUE sym_linebreak;
-static VALUE sym_code;
-static VALUE sym_inline_html;
-static VALUE sym_emph;
-static VALUE sym_strong;
-static VALUE sym_link;
-static VALUE sym_image;
-static VALUE sym_footnote_reference;
-static VALUE sym_footnote_definition;
-
-static VALUE sym_bullet_list;
-static VALUE sym_ordered_list;
-
-static VALUE sym_left;
-static VALUE sym_right;
-static VALUE sym_center;
-
-static VALUE encode_utf8_string(const char *c_string) {
- VALUE string = rb_str_new2(c_string);
- int enc = rb_enc_find_index("UTF-8");
- rb_enc_associate_index(string, enc);
- return string;
-}
-
-/* Encode a C string using the encoding from Ruby string +source+. */
-static VALUE encode_source_string(const char *c_string, VALUE source) {
- VALUE string = rb_str_new2(c_string);
- rb_enc_copy(string, source);
- return string;
-}
-
-static void rb_mark_c_struct(void *data) {
- cmark_node *node = data;
- cmark_node *child;
-
- /* Mark the parent to make sure that the tree won't be freed as
- long as a child node is referenced. */
- cmark_node *parent = cmark_node_parent(node);
- if (parent) {
- void *user_data = cmark_node_get_user_data(parent);
- if (!user_data) {
- /* This should never happen. Child can nodes can only
- be returned from parents that already are
- associated with a Ruby object. */
- fprintf(stderr, "parent without user_data\n");
- abort();
- }
- rb_gc_mark((VALUE)user_data);
- }
-
- /* Mark all children to make sure their cached Ruby objects won't
- be freed. */
- for (child = cmark_node_first_child(node); child != NULL;
- child = cmark_node_next(child)) {
- void *user_data = cmark_node_get_user_data(child);
- if (user_data)
- rb_gc_mark((VALUE)user_data);
- }
-}
-
-static void rb_free_c_struct(void *data) {
- /* It's important that the `free` function does not inspect the
- node data, as it may be part of a tree that was already freed. */
- cmark_node_free(data);
-}
-
-static VALUE rb_node_to_value(cmark_node *node) {
- void *user_data;
- RUBY_DATA_FUNC free_func;
- VALUE val;
-
- if (node == NULL)
- return Qnil;
-
- user_data = cmark_node_get_user_data(node);
- if (user_data)
- return (VALUE)user_data;
-
- /* Only free tree roots. */
- free_func = cmark_node_parent(node) ? NULL : rb_free_c_struct;
- val = Data_Wrap_Struct(rb_cNode, rb_mark_c_struct, free_func, node);
- cmark_node_set_user_data(node, (void *)val);
-
- return val;
-}
-
-/* If the node structure is changed, the finalizers must be updated. */
-
-static void rb_parent_added(VALUE val) { RDATA(val)->dfree = NULL; }
-
-static void rb_parent_removed(VALUE val) {
- RDATA(val)->dfree = rb_free_c_struct;
-}
-
-static cmark_parser *prepare_parser(VALUE rb_options, VALUE rb_extensions) {
- int options;
- VALUE rb_ext_name;
- int i;
-
- FIXNUM_P(rb_options);
- options = FIX2INT(rb_options);
-
- Check_Type(rb_extensions, T_ARRAY);
-
- cmark_parser *parser = cmark_parser_new(options);
-
- for (i = 0; i < RARRAY_LEN(rb_extensions); ++i) {
- rb_ext_name = rb_ary_entry(rb_extensions, i);
-
- if (!SYMBOL_P(rb_ext_name)) {
- cmark_parser_free(parser);
- rb_raise(rb_eTypeError, "extension names should be Symbols; got a %"PRIsVALUE"", rb_obj_class(rb_ext_name));
- }
-
- cmark_syntax_extension *syntax_extension =
- cmark_find_syntax_extension(rb_id2name(SYM2ID(rb_ext_name)));
-
- if (!syntax_extension) {
- cmark_parser_free(parser);
- rb_raise(rb_eArgError, "extension %s not found", rb_id2name(SYM2ID(rb_ext_name)));
- }
-
- cmark_parser_attach_syntax_extension(parser, syntax_extension);
- }
-
- return parser;
-}
-
-/*
- * Internal: Parses a Markdown string into an HTML string.
- *
- */
-static VALUE rb_markdown_to_html(VALUE self, VALUE rb_text, VALUE rb_options, VALUE rb_extensions) {
- char *html;
- cmark_parser *parser;
- cmark_node *doc;
-
- Check_Type(rb_text, T_STRING);
-
- parser = prepare_parser(rb_options, rb_extensions);
-
- cmark_parser_feed(parser, StringValuePtr(rb_text), RSTRING_LEN(rb_text));
- doc = cmark_parser_finish(parser);
-
- if (doc == NULL) {
- cmark_parser_free(parser);
- rb_raise(rb_eNodeError, "error parsing document");
- }
-
- html = cmark_render_html(doc, parser->options, parser->syntax_extensions);
-
- cmark_parser_free(parser);
- cmark_node_free(doc);
-
- return rb_utf8_str_new_cstr(html);
-}
-
-/*
- * Internal: Parses a Markdown string into an HTML string.
- *
- */
-static VALUE rb_markdown_to_xml(VALUE self, VALUE rb_text, VALUE rb_options, VALUE rb_extensions) {
- char *xml;
- cmark_parser *parser;
- cmark_node *doc;
-
- Check_Type(rb_text, T_STRING);
-
- parser = prepare_parser(rb_options, rb_extensions);
-
- cmark_parser_feed(parser, StringValuePtr(rb_text), RSTRING_LEN(rb_text));
- doc = cmark_parser_finish(parser);
-
- if (doc == NULL) {
- cmark_parser_free(parser);
- rb_raise(rb_eNodeError, "error parsing document");
- }
-
- xml = cmark_render_xml(doc, parser->options);
-
- cmark_parser_free(parser);
- cmark_node_free(doc);
-
- return rb_utf8_str_new_cstr(xml);
-}
-
-/*
- * Internal: Creates a node based on a node type.
- *
- * type - A {Symbol} representing the node to be created. Must be one of the
- * following:
- * - `:document`
- * - `:blockquote`
- * - `:list`
- * - `:list_item`
- * - `:code_block`
- * - `:html`
- * - `:paragraph`
- * - `:header`
- * - `:hrule`
- * - `:text`
- * - `:softbreak`
- * - `:linebreak`
- * - `:code`
- * - `:inline_html`
- * - `:emph`
- * - `:strong`
- * - `:link`
- * - `:image`
- */
-static VALUE rb_node_new(VALUE self, VALUE type) {
- cmark_node_type node_type = 0;
- cmark_node *node;
-
- Check_Type(type, T_SYMBOL);
-
- if (type == sym_document)
- node_type = CMARK_NODE_DOCUMENT;
- else if (type == sym_blockquote)
- node_type = CMARK_NODE_BLOCK_QUOTE;
- else if (type == sym_list)
- node_type = CMARK_NODE_LIST;
- else if (type == sym_list_item)
- node_type = CMARK_NODE_ITEM;
- else if (type == sym_code_block)
- node_type = CMARK_NODE_CODE_BLOCK;
- else if (type == sym_html)
- node_type = CMARK_NODE_HTML;
- else if (type == sym_paragraph)
- node_type = CMARK_NODE_PARAGRAPH;
- else if (type == sym_header)
- node_type = CMARK_NODE_HEADER;
- else if (type == sym_hrule)
- node_type = CMARK_NODE_HRULE;
- else if (type == sym_text)
- node_type = CMARK_NODE_TEXT;
- else if (type == sym_softbreak)
- node_type = CMARK_NODE_SOFTBREAK;
- else if (type == sym_linebreak)
- node_type = CMARK_NODE_LINEBREAK;
- else if (type == sym_code)
- node_type = CMARK_NODE_CODE;
- else if (type == sym_inline_html)
- node_type = CMARK_NODE_INLINE_HTML;
- else if (type == sym_emph)
- node_type = CMARK_NODE_EMPH;
- else if (type == sym_strong)
- node_type = CMARK_NODE_STRONG;
- else if (type == sym_link)
- node_type = CMARK_NODE_LINK;
- else if (type == sym_image)
- node_type = CMARK_NODE_IMAGE;
- else if (type == sym_footnote_reference)
- node_type = CMARK_NODE_FOOTNOTE_REFERENCE;
- else if (type == sym_footnote_definition)
- node_type = CMARK_NODE_FOOTNOTE_DEFINITION;
- else
- rb_raise(rb_eNodeError, "invalid node of type %d", node_type);
-
- node = cmark_node_new(node_type);
- if (node == NULL) {
- rb_raise(rb_eNodeError, "could not create node of type %d", node_type);
- }
-
- return rb_node_to_value(node);
-}
-
-/*
- * Internal: Parses a Markdown string into a document.
- *
- */
-static VALUE rb_parse_document(VALUE self, VALUE rb_text, VALUE rb_len,
- VALUE rb_options, VALUE rb_extensions) {
- char *text;
- int len;
- cmark_parser *parser;
- cmark_node *doc;
- Check_Type(rb_text, T_STRING);
- Check_Type(rb_len, T_FIXNUM);
- Check_Type(rb_options, T_FIXNUM);
-
- parser = prepare_parser(rb_options, rb_extensions);
-
- text = (char *)RSTRING_PTR(rb_text);
- len = FIX2INT(rb_len);
-
- cmark_parser_feed(parser, text, len);
- doc = cmark_parser_finish(parser);
- if (doc == NULL) {
- rb_raise(rb_eNodeError, "error parsing document");
- }
- cmark_parser_free(parser);
-
- return rb_node_to_value(doc);
-}
-
-/*
- * Public: Fetch the string contents of the node.
- *
- * Returns a {String}.
- */
-static VALUE rb_node_get_string_content(VALUE self) {
- const char *text;
- cmark_node *node;
- Data_Get_Struct(self, cmark_node, node);
-
- text = cmark_node_get_literal(node);
- if (text == NULL) {
- rb_raise(rb_eNodeError, "could not get string content");
- }
-
- return encode_utf8_string(text);
-}
-
-/*
- * Public: Sets the string content of the node.
- *
- * string - A {String} containing new content.
- *
- * Raises NodeError if the string content can't be set.
- */
-static VALUE rb_node_set_string_content(VALUE self, VALUE s) {
- char *text;
- cmark_node *node;
- Check_Type(s, T_STRING);
-
- Data_Get_Struct(self, cmark_node, node);
- text = StringValueCStr(s);
-
- if (!cmark_node_set_literal(node, text)) {
- rb_raise(rb_eNodeError, "could not set string content");
- }
-
- return Qnil;
-}
-
-/*
- * Public: Fetches the list type of the node.
- *
- * Returns a {Symbol} representing the node's type.
- */
-static VALUE rb_node_get_type(VALUE self) {
- int node_type;
- cmark_node *node;
- VALUE symbol;
- const char *s;
-
- Data_Get_Struct(self, cmark_node, node);
-
- node_type = cmark_node_get_type(node);
- symbol = Qnil;
-
- switch (node_type) {
- case CMARK_NODE_DOCUMENT:
- symbol = sym_document;
- break;
- case CMARK_NODE_BLOCK_QUOTE:
- symbol = sym_blockquote;
- break;
- case CMARK_NODE_LIST:
- symbol = sym_list;
- break;
- case CMARK_NODE_ITEM:
- symbol = sym_list_item;
- break;
- case CMARK_NODE_CODE_BLOCK:
- symbol = sym_code_block;
- break;
- case CMARK_NODE_HTML:
- symbol = sym_html;
- break;
- case CMARK_NODE_PARAGRAPH:
- symbol = sym_paragraph;
- break;
- case CMARK_NODE_HEADER:
- symbol = sym_header;
- break;
- case CMARK_NODE_HRULE:
- symbol = sym_hrule;
- break;
- case CMARK_NODE_TEXT:
- symbol = sym_text;
- break;
- case CMARK_NODE_SOFTBREAK:
- symbol = sym_softbreak;
- break;
- case CMARK_NODE_LINEBREAK:
- symbol = sym_linebreak;
- break;
- case CMARK_NODE_CODE:
- symbol = sym_code;
- break;
- case CMARK_NODE_INLINE_HTML:
- symbol = sym_inline_html;
- break;
- case CMARK_NODE_EMPH:
- symbol = sym_emph;
- break;
- case CMARK_NODE_STRONG:
- symbol = sym_strong;
- break;
- case CMARK_NODE_LINK:
- symbol = sym_link;
- break;
- case CMARK_NODE_IMAGE:
- symbol = sym_image;
- break;
- case CMARK_NODE_FOOTNOTE_REFERENCE:
- symbol = sym_footnote_reference;
- break;
- case CMARK_NODE_FOOTNOTE_DEFINITION:
- symbol = sym_footnote_definition;
- break;
- default:
- if (node->extension) {
- s = node->extension->get_type_string_func(node->extension, node);
- return ID2SYM(rb_intern(s));
- }
- rb_raise(rb_eNodeError, "invalid node type %d", node_type);
- }
-
- return symbol;
-}
-
-/*
- * Public: Fetches the sourcepos of the node.
- *
- * Returns a {Hash} containing {Symbol} keys of the positions.
- */
-static VALUE rb_node_get_sourcepos(VALUE self) {
- int start_line, start_column, end_line, end_column;
- VALUE result;
-
- cmark_node *node;
- Data_Get_Struct(self, cmark_node, node);
-
- start_line = cmark_node_get_start_line(node);
- start_column = cmark_node_get_start_column(node);
- end_line = cmark_node_get_end_line(node);
- end_column = cmark_node_get_end_column(node);
-
- result = rb_hash_new();
- rb_hash_aset(result, CSTR2SYM("start_line"), INT2NUM(start_line));
- rb_hash_aset(result, CSTR2SYM("start_column"), INT2NUM(start_column));
- rb_hash_aset(result, CSTR2SYM("end_line"), INT2NUM(end_line));
- rb_hash_aset(result, CSTR2SYM("end_column"), INT2NUM(end_column));
-
- return result;
-}
-
-/*
- * Public: Returns the type of the current pointer as a string.
- *
- * Returns a {String}.
- */
-static VALUE rb_node_get_type_string(VALUE self) {
- cmark_node *node;
- Data_Get_Struct(self, cmark_node, node);
-
- return rb_str_new2(cmark_node_get_type_string(node));
-}
-
-/*
- * Internal: Unlinks the node from the tree (fixing pointers in
- * parents and siblings appropriately).
- */
-static VALUE rb_node_unlink(VALUE self) {
- cmark_node *node;
- Data_Get_Struct(self, cmark_node, node);
-
- cmark_node_unlink(node);
-
- rb_parent_removed(self);
-
- return Qnil;
-}
-
-/* Public: Fetches the first child of the node.
- *
- * Returns a {Node} if a child exists, `nil` otherise.
- */
-static VALUE rb_node_first_child(VALUE self) {
- cmark_node *node, *child;
- Data_Get_Struct(self, cmark_node, node);
-
- child = cmark_node_first_child(node);
-
- return rb_node_to_value(child);
-}
-
-/* Public: Fetches the next sibling of the node.
- *
- * Returns a {Node} if a sibling exists, `nil` otherwise.
- */
-static VALUE rb_node_next(VALUE self) {
- cmark_node *node, *next;
- Data_Get_Struct(self, cmark_node, node);
-
- next = cmark_node_next(node);
-
- return rb_node_to_value(next);
-}
-
-/*
- * Public: Inserts a node as a sibling before the current node.
- *
- * sibling - A sibling {Node} to insert.
- *
- * Returns `true` if successful.
- * Raises NodeError if the node can't be inserted.
- */
-static VALUE rb_node_insert_before(VALUE self, VALUE sibling) {
- cmark_node *node1, *node2;
- Data_Get_Struct(self, cmark_node, node1);
-
- Data_Get_Struct(sibling, cmark_node, node2);
-
- if (!cmark_node_insert_before(node1, node2)) {
- rb_raise(rb_eNodeError, "could not insert before");
- }
-
- rb_parent_added(sibling);
-
- return Qtrue;
-}
-
-/* Internal: Convert the node to an HTML string.
- *
- * Returns a {String}.
- */
-static VALUE rb_render_html(VALUE self, VALUE rb_options, VALUE rb_extensions) {
- int options, extensions_len;
- VALUE rb_ext_name;
- int i;
- cmark_node *node;
- cmark_llist *extensions = NULL;
- cmark_mem *mem = cmark_get_default_mem_allocator();
- Check_Type(rb_options, T_FIXNUM);
- Check_Type(rb_extensions, T_ARRAY);
-
- options = FIX2INT(rb_options);
- extensions_len = RARRAY_LEN(rb_extensions);
-
- Data_Get_Struct(self, cmark_node, node);
-
- for (i = 0; i < extensions_len; ++i) {
- rb_ext_name = RARRAY_PTR(rb_extensions)[i];
-
- if (!SYMBOL_P(rb_ext_name)) {
- cmark_llist_free(mem, extensions);
- rb_raise(rb_eTypeError, "extension names should be Symbols; got a %"PRIsVALUE"", rb_obj_class(rb_ext_name));
- }
-
- cmark_syntax_extension *syntax_extension =
- cmark_find_syntax_extension(rb_id2name(SYM2ID(rb_ext_name)));
-
- if (!syntax_extension) {
- cmark_llist_free(mem, extensions);
- rb_raise(rb_eArgError, "extension %s not found\n", rb_id2name(SYM2ID(rb_ext_name)));
- }
-
- extensions = cmark_llist_append(mem, extensions, syntax_extension);
- }
-
- char *html = cmark_render_html(node, options, extensions);
- VALUE ruby_html = rb_str_new2(html);
-
- cmark_llist_free(mem, extensions);
- free(html);
-
- return ruby_html;
-}
-
-/* Internal: Convert the node to an XML string.
- *
- * Returns a {String}.
- */
-static VALUE rb_render_xml(VALUE self, VALUE rb_options) {
- int options;
- cmark_node *node;
- Check_Type(rb_options, T_FIXNUM);
-
- options = FIX2INT(rb_options);
-
- Data_Get_Struct(self, cmark_node, node);
-
- char *xml = cmark_render_xml(node, options);
- VALUE ruby_xml = rb_str_new2(xml);
-
- free(xml);
-
- return ruby_xml;
-}
-
-/* Internal: Convert the node to a CommonMark string.
- *
- * Returns a {String}.
- */
-static VALUE rb_render_commonmark(int argc, VALUE *argv, VALUE self) {
- VALUE rb_options, rb_width;
- rb_scan_args(argc, argv, "11", &rb_options, &rb_width);
-
- int width = 120;
- if (!NIL_P(rb_width)) {
- Check_Type(rb_width, T_FIXNUM);
- width = FIX2INT(rb_width);
- }
-
- int options;
- cmark_node *node;
- Check_Type(rb_options, T_FIXNUM);
-
- options = FIX2INT(rb_options);
- Data_Get_Struct(self, cmark_node, node);
-
- char *cmark = cmark_render_commonmark(node, options, width);
- VALUE ruby_cmark = rb_str_new2(cmark);
- free(cmark);
-
- return ruby_cmark;
-}
-
-/* Internal: Convert the node to a plain textstring.
- *
- * Returns a {String}.
- */
-static VALUE rb_render_plaintext(int argc, VALUE *argv, VALUE self) {
- VALUE rb_options, rb_width;
- rb_scan_args(argc, argv, "11", &rb_options, &rb_width);
-
- int width = 120;
- if (!NIL_P(rb_width)) {
- Check_Type(rb_width, T_FIXNUM);
- width = FIX2INT(rb_width);
- }
-
- int options;
- cmark_node *node;
- Check_Type(rb_options, T_FIXNUM);
-
- options = FIX2INT(rb_options);
- Data_Get_Struct(self, cmark_node, node);
-
- char *text = cmark_render_plaintext(node, options, width);
- VALUE ruby_text = rb_str_new2(text);
- free(text);
-
- return ruby_text;
-}
-
-/*
- * Public: Inserts a node as a sibling after the current node.
- *
- * sibling - A sibling {Node} to insert.
- *
- * Returns `true` if successful.
- * Raises NodeError if the node can't be inserted.
- */
-static VALUE rb_node_insert_after(VALUE self, VALUE sibling) {
- cmark_node *node1, *node2;
- Data_Get_Struct(self, cmark_node, node1);
-
- Data_Get_Struct(sibling, cmark_node, node2);
-
- if (!cmark_node_insert_after(node1, node2)) {
- rb_raise(rb_eNodeError, "could not insert after");
- }
-
- rb_parent_added(sibling);
-
- return Qtrue;
-}
-
-/*
- * Public: Inserts a node as the first child of the current node.
- *
- * child - A child {Node} to insert.
- *
- * Returns `true` if successful.
- * Raises NodeError if the node can't be inserted.
- */
-static VALUE rb_node_prepend_child(VALUE self, VALUE child) {
- cmark_node *node1, *node2;
- Data_Get_Struct(self, cmark_node, node1);
-
- Data_Get_Struct(child, cmark_node, node2);
-
- if (!cmark_node_prepend_child(node1, node2)) {
- rb_raise(rb_eNodeError, "could not prepend child");
- }
-
- rb_parent_added(child);
-
- return Qtrue;
-}
-
-/*
- * Public: Inserts a node as the last child of the current node.
- *
- * child - A child {Node} to insert.
- *
- * Returns `true` if successful.
- * Raises NodeError if the node can't be inserted.
- */
-static VALUE rb_node_append_child(VALUE self, VALUE child) {
- cmark_node *node1, *node2;
- Data_Get_Struct(self, cmark_node, node1);
-
- Data_Get_Struct(child, cmark_node, node2);
-
- if (!cmark_node_append_child(node1, node2)) {
- rb_raise(rb_eNodeError, "could not append child");
- }
-
- rb_parent_added(child);
-
- return Qtrue;
-}
-
-/* Public: Fetches the first child of the current node.
- *
- * Returns a {Node} if a child exists, `nil` otherise.
- */
-static VALUE rb_node_last_child(VALUE self) {
- cmark_node *node, *child;
- Data_Get_Struct(self, cmark_node, node);
-
- child = cmark_node_last_child(node);
-
- return rb_node_to_value(child);
-}
-
-/* Public: Fetches the parent of the current node.
- *
- * Returns a {Node} if a parent exists, `nil` otherise.
- */
-static VALUE rb_node_parent(VALUE self) {
- cmark_node *node, *parent;
- Data_Get_Struct(self, cmark_node, node);
-
- parent = cmark_node_parent(node);
-
- return rb_node_to_value(parent);
-}
-
-/* Public: Fetches the previous sibling of the current node.
- *
- * Returns a {Node} if a parent exists, `nil` otherise.
- */
-static VALUE rb_node_previous(VALUE self) {
- cmark_node *node, *previous;
- Data_Get_Struct(self, cmark_node, node);
-
- previous = cmark_node_previous(node);
-
- return rb_node_to_value(previous);
-}
-
-/*
- * Public: Gets the URL of the current node (must be a `:link` or `:image`).
- *
- * Returns a {String}.
- * Raises a NodeError if the URL can't be retrieved.
- */
-static VALUE rb_node_get_url(VALUE self) {
- const char *text;
- cmark_node *node;
- Data_Get_Struct(self, cmark_node, node);
-
- text = cmark_node_get_url(node);
- if (text == NULL) {
- rb_raise(rb_eNodeError, "could not get url");
- }
-
- return rb_str_new2(text);
-}
-
-/*
- * Public: Sets the URL of the current node (must be a `:link` or `:image`).
- *
- * url - A {String} representing the new URL
- *
- * Raises a NodeError if the URL can't be set.
- */
-static VALUE rb_node_set_url(VALUE self, VALUE url) {
- cmark_node *node;
- char *text;
- Check_Type(url, T_STRING);
-
- Data_Get_Struct(self, cmark_node, node);
- text = StringValueCStr(url);
-
- if (!cmark_node_set_url(node, text)) {
- rb_raise(rb_eNodeError, "could not set url");
- }
-
- return Qnil;
-}
-
-/*
- * Public: Gets the title of the current node (must be a `:link` or `:image`).
- *
- * Returns a {String}.
- * Raises a NodeError if the title can't be retrieved.
- */
-static VALUE rb_node_get_title(VALUE self) {
- const char *text;
- cmark_node *node;
- Data_Get_Struct(self, cmark_node, node);
-
- text = cmark_node_get_title(node);
- if (text == NULL) {
- rb_raise(rb_eNodeError, "could not get title");
- }
-
- return rb_str_new2(text);
-}
-
-/*
- * Public: Sets the title of the current node (must be a `:link` or `:image`).
- *
- * title - A {String} representing the new title
- *
- * Raises a NodeError if the title can't be set.
- */
-static VALUE rb_node_set_title(VALUE self, VALUE title) {
- char *text;
- cmark_node *node;
- Check_Type(title, T_STRING);
-
- Data_Get_Struct(self, cmark_node, node);
- text = StringValueCStr(title);
-
- if (!cmark_node_set_title(node, text)) {
- rb_raise(rb_eNodeError, "could not set title");
- }
-
- return Qnil;
-}
-
-/*
- * Public: Gets the header level of the current node (must be a `:header`).
- *
- * Returns a {Number} representing the header level.
- * Raises a NodeError if the header level can't be retrieved.
- */
-static VALUE rb_node_get_header_level(VALUE self) {
- int header_level;
- cmark_node *node;
- Data_Get_Struct(self, cmark_node, node);
-
- header_level = cmark_node_get_header_level(node);
-
- if (header_level == 0) {
- rb_raise(rb_eNodeError, "could not get header_level");
- }
-
- return INT2NUM(header_level);
-}
-
-/*
- * Public: Sets the header level of the current node (must be a `:header`).
- *
- * level - A {Number} representing the new header level
- *
- * Raises a NodeError if the header level can't be set.
- */
-static VALUE rb_node_set_header_level(VALUE self, VALUE level) {
- int l;
- cmark_node *node;
- Check_Type(level, T_FIXNUM);
-
- Data_Get_Struct(self, cmark_node, node);
- l = FIX2INT(level);
-
- if (!cmark_node_set_header_level(node, l)) {
- rb_raise(rb_eNodeError, "could not set header_level");
- }
-
- return Qnil;
-}
-
-/*
- * Public: Gets the list type of the current node (must be a `:list`).
- *
- * Returns a {Symbol}.
- * Raises a NodeError if the title can't be retrieved.
- */
-static VALUE rb_node_get_list_type(VALUE self) {
- int list_type;
- cmark_node *node;
- VALUE symbol;
- Data_Get_Struct(self, cmark_node, node);
-
- list_type = cmark_node_get_list_type(node);
-
- if (list_type == CMARK_BULLET_LIST) {
- symbol = sym_bullet_list;
- } else if (list_type == CMARK_ORDERED_LIST) {
- symbol = sym_ordered_list;
- } else {
- rb_raise(rb_eNodeError, "could not get list_type");
- }
-
- return symbol;
-}
-
-/*
- * Public: Sets the list type of the current node (must be a `:list`).
- *
- * level - A {Symbol} representing the new list type
- *
- * Raises a NodeError if the list type can't be set.
- */
-static VALUE rb_node_set_list_type(VALUE self, VALUE list_type) {
- int type = 0;
- cmark_node *node;
- Check_Type(list_type, T_SYMBOL);
-
- Data_Get_Struct(self, cmark_node, node);
-
- if (list_type == sym_bullet_list) {
- type = CMARK_BULLET_LIST;
- } else if (list_type == sym_ordered_list) {
- type = CMARK_ORDERED_LIST;
- } else {
- rb_raise(rb_eNodeError, "invalid list_type");
- }
-
- if (!cmark_node_set_list_type(node, type)) {
- rb_raise(rb_eNodeError, "could not set list_type");
- }
-
- return Qnil;
-}
-
-/*
- * Public: Gets the starting number the current node (must be an
- * `:ordered_list`).
- *
- * Returns a {Number} representing the starting number.
- * Raises a NodeError if the starting number can't be retrieved.
- */
-static VALUE rb_node_get_list_start(VALUE self) {
- cmark_node *node;
- Data_Get_Struct(self, cmark_node, node);
-
- if (cmark_node_get_type(node) != CMARK_NODE_LIST ||
- cmark_node_get_list_type(node) != CMARK_ORDERED_LIST) {
- rb_raise(rb_eNodeError, "can't get list_start for non-ordered list %d",
- cmark_node_get_list_type(node));
- }
-
- return INT2NUM(cmark_node_get_list_start(node));
-}
-
-/*
- * Public: Sets the starting number of the current node (must be an
- * `:ordered_list`).
- *
- * level - A {Number} representing the new starting number
- *
- * Raises a NodeError if the starting number can't be set.
- */
-static VALUE rb_node_set_list_start(VALUE self, VALUE start) {
- int s;
- cmark_node *node;
- Check_Type(start, T_FIXNUM);
-
- Data_Get_Struct(self, cmark_node, node);
- s = FIX2INT(start);
-
- if (!cmark_node_set_list_start(node, s)) {
- rb_raise(rb_eNodeError, "could not set list_start");
- }
-
- return Qnil;
-}
-
-/*
- * Public: Gets the tight status the current node (must be a `:list`).
- *
- * Returns a `true` if the list is tight, `false` otherwise.
- * Raises a NodeError if the starting number can't be retrieved.
- */
-static VALUE rb_node_get_list_tight(VALUE self) {
- int flag;
- cmark_node *node;
- Data_Get_Struct(self, cmark_node, node);
-
- if (cmark_node_get_type(node) != CMARK_NODE_LIST) {
- rb_raise(rb_eNodeError, "can't get list_tight for non-list");
- }
-
- flag = cmark_node_get_list_tight(node);
-
- return flag ? Qtrue : Qfalse;
-}
-
-/*
- * Public: Sets the tight status of the current node (must be a `:list`).
- *
- * tight - A {Boolean} representing the new tightness
- *
- * Raises a NodeError if the tightness can't be set.
- */
-static VALUE rb_node_set_list_tight(VALUE self, VALUE tight) {
- int t;
- cmark_node *node;
- Data_Get_Struct(self, cmark_node, node);
- t = RTEST(tight);
-
- if (!cmark_node_set_list_tight(node, t)) {
- rb_raise(rb_eNodeError, "could not set list_tight");
- }
-
- return Qnil;
-}
-
-/*
- * Public: Gets the fence info of the current node (must be a `:code_block`).
- *
- * Returns a {String} representing the fence info.
- * Raises a NodeError if the fence info can't be retrieved.
- */
-static VALUE rb_node_get_fence_info(VALUE self) {
- const char *fence_info;
- cmark_node *node;
- Data_Get_Struct(self, cmark_node, node);
-
- fence_info = cmark_node_get_fence_info(node);
-
- if (fence_info == NULL) {
- rb_raise(rb_eNodeError, "could not get fence_info");
- }
-
- return rb_str_new2(fence_info);
-}
-
-/*
- * Public: Sets the fence info of the current node (must be a `:code_block`).
- *
- * info - A {String} representing the new fence info
- *
- * Raises a NodeError if the fence info can't be set.
- */
-static VALUE rb_node_set_fence_info(VALUE self, VALUE info) {
- char *text;
- cmark_node *node;
- Check_Type(info, T_STRING);
-
- Data_Get_Struct(self, cmark_node, node);
- text = StringValueCStr(info);
-
- if (!cmark_node_set_fence_info(node, text)) {
- rb_raise(rb_eNodeError, "could not set fence_info");
- }
-
- return Qnil;
-}
-
-static VALUE rb_node_get_tasklist_item_checked(VALUE self) {
- int tasklist_state;
- cmark_node *node;
- Data_Get_Struct(self, cmark_node, node);
-
- tasklist_state = cmark_gfm_extensions_get_tasklist_item_checked(node);
-
- if (tasklist_state == 1) {
- return Qtrue;
- } else {
- return Qfalse;
- }
-}
-
-/*
- * Public: Sets the checkbox state of the current node (must be a `:tasklist`).
- *
- * item_checked - A {Boolean} representing the new checkbox state
- *
- * Returns a {Boolean} representing the new checkbox state.
- * Raises a NodeError if the checkbox state can't be set.
- */
-static VALUE rb_node_set_tasklist_item_checked(VALUE self, VALUE item_checked) {
- int tasklist_state;
- cmark_node *node;
- Data_Get_Struct(self, cmark_node, node);
- tasklist_state = RTEST(item_checked);
-
- if (!cmark_gfm_extensions_set_tasklist_item_checked(node, tasklist_state)) {
- rb_raise(rb_eNodeError, "could not set tasklist_item_checked");
- };
-
- if (tasklist_state) {
- return Qtrue;
- } else {
- return Qfalse;
- }
-}
-
-// TODO: remove this, superseded by the above method
-static VALUE rb_node_get_tasklist_state(VALUE self) {
- int tasklist_state;
- cmark_node *node;
- Data_Get_Struct(self, cmark_node, node);
-
- tasklist_state = cmark_gfm_extensions_get_tasklist_item_checked(node);
-
- if (tasklist_state == 1) {
- return rb_str_new2("checked");
- } else {
- return rb_str_new2("unchecked");
- }
-}
-
-static VALUE rb_node_get_table_alignments(VALUE self) {
- uint16_t column_count, i;
- uint8_t *alignments;
- cmark_node *node;
- VALUE ary;
- Data_Get_Struct(self, cmark_node, node);
-
- column_count = cmark_gfm_extensions_get_table_columns(node);
- alignments = cmark_gfm_extensions_get_table_alignments(node);
-
- if (!column_count || !alignments) {
- rb_raise(rb_eNodeError, "could not get column_count or alignments");
- }
-
- ary = rb_ary_new();
- for (i = 0; i < column_count; ++i) {
- if (alignments[i] == 'l')
- rb_ary_push(ary, sym_left);
- else if (alignments[i] == 'c')
- rb_ary_push(ary, sym_center);
- else if (alignments[i] == 'r')
- rb_ary_push(ary, sym_right);
- else
- rb_ary_push(ary, Qnil);
- }
- return ary;
-}
-
-/* Internal: Escapes href URLs safely. */
-static VALUE rb_html_escape_href(VALUE self, VALUE rb_text) {
- char *result;
- cmark_node *node;
- Check_Type(rb_text, T_STRING);
-
- Data_Get_Struct(self, cmark_node, node);
-
- cmark_mem *mem = cmark_node_mem(node);
- cmark_strbuf buf = CMARK_BUF_INIT(mem);
-
- if (houdini_escape_href(&buf, (const uint8_t *)RSTRING_PTR(rb_text),
- RSTRING_LEN(rb_text))) {
- result = (char *)cmark_strbuf_detach(&buf);
- return encode_source_string(result, rb_text);
-
- }
-
- return rb_text;
-}
-
-/* Internal: Escapes HTML content safely. */
-static VALUE rb_html_escape_html(VALUE self, VALUE rb_text) {
- char *result;
- cmark_node *node;
- Check_Type(rb_text, T_STRING);
-
- Data_Get_Struct(self, cmark_node, node);
-
- cmark_mem *mem = cmark_node_mem(node);
- cmark_strbuf buf = CMARK_BUF_INIT(mem);
-
- if (houdini_escape_html0(&buf, (const uint8_t *)RSTRING_PTR(rb_text),
- RSTRING_LEN(rb_text), 0)) {
- result = (char *)cmark_strbuf_detach(&buf);
- return encode_source_string(result, rb_text);
- }
-
- return rb_text;
-}
-
-VALUE rb_extensions(VALUE self) {
- cmark_llist *exts, *it;
- cmark_syntax_extension *ext;
- VALUE ary = rb_ary_new();
-
- cmark_mem *mem = cmark_get_default_mem_allocator();
- exts = cmark_list_syntax_extensions(mem);
- for (it = exts; it; it = it->next) {
- ext = it->data;
- rb_ary_push(ary, rb_str_new2(ext->name));
- }
- cmark_llist_free(mem, exts);
-
- return ary;
-}
-
-__attribute__((visibility("default"))) void Init_commonmarker() {
- VALUE module;
- sym_document = ID2SYM(rb_intern("document"));
- sym_blockquote = ID2SYM(rb_intern("blockquote"));
- sym_list = ID2SYM(rb_intern("list"));
- sym_list_item = ID2SYM(rb_intern("list_item"));
- sym_code_block = ID2SYM(rb_intern("code_block"));
- sym_html = ID2SYM(rb_intern("html"));
- sym_paragraph = ID2SYM(rb_intern("paragraph"));
- sym_header = ID2SYM(rb_intern("header"));
- sym_hrule = ID2SYM(rb_intern("hrule"));
- sym_text = ID2SYM(rb_intern("text"));
- sym_softbreak = ID2SYM(rb_intern("softbreak"));
- sym_linebreak = ID2SYM(rb_intern("linebreak"));
- sym_code = ID2SYM(rb_intern("code"));
- sym_inline_html = ID2SYM(rb_intern("inline_html"));
- sym_emph = ID2SYM(rb_intern("emph"));
- sym_strong = ID2SYM(rb_intern("strong"));
- sym_link = ID2SYM(rb_intern("link"));
- sym_image = ID2SYM(rb_intern("image"));
- sym_footnote_reference = ID2SYM(rb_intern("footnote_reference"));
- sym_footnote_definition = ID2SYM(rb_intern("footnote_definition"));
-
- sym_bullet_list = ID2SYM(rb_intern("bullet_list"));
- sym_ordered_list = ID2SYM(rb_intern("ordered_list"));
-
- sym_left = ID2SYM(rb_intern("left"));
- sym_right = ID2SYM(rb_intern("right"));
- sym_center = ID2SYM(rb_intern("center"));
-
- module = rb_define_module("CommonMarker");
- rb_define_singleton_method(module, "extensions", rb_extensions, 0);
- rb_eNodeError = rb_define_class_under(module, "NodeError", rb_eStandardError);
- rb_cNode = rb_define_class_under(module, "Node", rb_cObject);
- rb_undef_alloc_func(rb_cNode);
- rb_define_singleton_method(rb_cNode, "markdown_to_html", rb_markdown_to_html,
- 3);
- rb_define_singleton_method(rb_cNode, "markdown_to_xml", rb_markdown_to_xml,
- 3);
- rb_define_singleton_method(rb_cNode, "new", rb_node_new, 1);
- rb_define_singleton_method(rb_cNode, "parse_document", rb_parse_document, 4);
- rb_define_method(rb_cNode, "string_content", rb_node_get_string_content, 0);
- rb_define_method(rb_cNode, "string_content=", rb_node_set_string_content, 1);
- rb_define_method(rb_cNode, "type", rb_node_get_type, 0);
- rb_define_method(rb_cNode, "type_string", rb_node_get_type_string, 0);
- rb_define_method(rb_cNode, "sourcepos", rb_node_get_sourcepos, 0);
- rb_define_method(rb_cNode, "delete", rb_node_unlink, 0);
- rb_define_method(rb_cNode, "first_child", rb_node_first_child, 0);
- rb_define_method(rb_cNode, "next", rb_node_next, 0);
- rb_define_method(rb_cNode, "insert_before", rb_node_insert_before, 1);
- rb_define_method(rb_cNode, "_render_html", rb_render_html, 2);
- rb_define_method(rb_cNode, "_render_xml", rb_render_xml, 1);
- rb_define_method(rb_cNode, "_render_commonmark", rb_render_commonmark, -1);
- rb_define_method(rb_cNode, "_render_plaintext", rb_render_plaintext, -1);
- rb_define_method(rb_cNode, "insert_after", rb_node_insert_after, 1);
- rb_define_method(rb_cNode, "prepend_child", rb_node_prepend_child, 1);
- rb_define_method(rb_cNode, "append_child", rb_node_append_child, 1);
- rb_define_method(rb_cNode, "last_child", rb_node_last_child, 0);
- rb_define_method(rb_cNode, "parent", rb_node_parent, 0);
- rb_define_method(rb_cNode, "previous", rb_node_previous, 0);
- rb_define_method(rb_cNode, "url", rb_node_get_url, 0);
- rb_define_method(rb_cNode, "url=", rb_node_set_url, 1);
- rb_define_method(rb_cNode, "title", rb_node_get_title, 0);
- rb_define_method(rb_cNode, "title=", rb_node_set_title, 1);
- rb_define_method(rb_cNode, "header_level", rb_node_get_header_level, 0);
- rb_define_method(rb_cNode, "header_level=", rb_node_set_header_level, 1);
- rb_define_method(rb_cNode, "list_type", rb_node_get_list_type, 0);
- rb_define_method(rb_cNode, "list_type=", rb_node_set_list_type, 1);
- rb_define_method(rb_cNode, "list_start", rb_node_get_list_start, 0);
- rb_define_method(rb_cNode, "list_start=", rb_node_set_list_start, 1);
- rb_define_method(rb_cNode, "list_tight", rb_node_get_list_tight, 0);
- rb_define_method(rb_cNode, "list_tight=", rb_node_set_list_tight, 1);
- rb_define_method(rb_cNode, "fence_info", rb_node_get_fence_info, 0);
- rb_define_method(rb_cNode, "fence_info=", rb_node_set_fence_info, 1);
- rb_define_method(rb_cNode, "table_alignments", rb_node_get_table_alignments, 0);
- rb_define_method(rb_cNode, "tasklist_state", rb_node_get_tasklist_state, 0);
- rb_define_method(rb_cNode, "tasklist_item_checked?", rb_node_get_tasklist_item_checked, 0);
- rb_define_method(rb_cNode, "tasklist_item_checked=", rb_node_set_tasklist_item_checked, 1);
-
- rb_define_method(rb_cNode, "html_escape_href", rb_html_escape_href, 1);
- rb_define_method(rb_cNode, "html_escape_html", rb_html_escape_html, 1);
-
- cmark_gfm_core_extensions_ensure_registered();
- cmark_init_standard_node_flags();
-}
diff --git a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/commonmarker.h b/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/commonmarker.h
deleted file mode 100644
index da05dc4..0000000
--- a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/commonmarker.h
+++ /dev/null
@@ -1,16 +0,0 @@
-#ifndef COMMONMARKER_H
-#define COMMONMARKER_H
-
-#ifndef __MSXML_LIBRARY_DEFINED__
-#define __MSXML_LIBRARY_DEFINED__
-#endif
-
-#include "cmark-gfm.h"
-#include "ruby.h"
-#include "ruby/encoding.h"
-
-#define CSTR2SYM(s) (ID2SYM(rb_intern((s))))
-
-void Init_commonmarker();
-
-#endif
diff --git a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/commonmarker.o b/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/commonmarker.o
deleted file mode 100644
index 3863df2..0000000
Binary files a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/commonmarker.o and /dev/null differ
diff --git a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/config.h b/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/config.h
deleted file mode 100644
index d38c7c7..0000000
--- a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/config.h
+++ /dev/null
@@ -1,76 +0,0 @@
-#ifndef CMARK_CONFIG_H
-#define CMARK_CONFIG_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#define HAVE_STDBOOL_H
-
-#ifdef HAVE_STDBOOL_H
- #include
-#elif !defined(__cplusplus)
- typedef char bool;
-#endif
-
-#define HAVE___BUILTIN_EXPECT
-
-#define HAVE___ATTRIBUTE__
-
-#ifdef HAVE___ATTRIBUTE__
- #define CMARK_ATTRIBUTE(list) __attribute__ (list)
-#else
- #define CMARK_ATTRIBUTE(list)
-#endif
-
-#ifndef CMARK_INLINE
- #if defined(_MSC_VER) && !defined(__cplusplus)
- #define CMARK_INLINE __inline
- #else
- #define CMARK_INLINE inline
- #endif
-#endif
-
-/* snprintf and vsnprintf fallbacks for MSVC before 2015,
- due to Valentin Milea http://stackoverflow.com/questions/2915672/
-*/
-
-#if defined(_MSC_VER) && _MSC_VER < 1900
-
-#include
-#include
-
-#define snprintf c99_snprintf
-#define vsnprintf c99_vsnprintf
-
-CMARK_INLINE int c99_vsnprintf(char *outBuf, size_t size, const char *format, va_list ap)
-{
- int count = -1;
-
- if (size != 0)
- count = _vsnprintf_s(outBuf, size, _TRUNCATE, format, ap);
- if (count == -1)
- count = _vscprintf(format, ap);
-
- return count;
-}
-
-CMARK_INLINE int c99_snprintf(char *outBuf, size_t size, const char *format, ...)
-{
- int count;
- va_list ap;
-
- va_start(ap, format);
- count = c99_vsnprintf(outBuf, size, format, ap);
- va_end(ap);
-
- return count;
-}
-
-#endif
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/core-extensions.c b/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/core-extensions.c
deleted file mode 100644
index 846e2bc..0000000
--- a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/core-extensions.c
+++ /dev/null
@@ -1,27 +0,0 @@
-#include "cmark-gfm-core-extensions.h"
-#include "autolink.h"
-#include "strikethrough.h"
-#include "table.h"
-#include "tagfilter.h"
-#include "tasklist.h"
-#include "registry.h"
-#include "plugin.h"
-
-static int core_extensions_registration(cmark_plugin *plugin) {
- cmark_plugin_register_syntax_extension(plugin, create_table_extension());
- cmark_plugin_register_syntax_extension(plugin,
- create_strikethrough_extension());
- cmark_plugin_register_syntax_extension(plugin, create_autolink_extension());
- cmark_plugin_register_syntax_extension(plugin, create_tagfilter_extension());
- cmark_plugin_register_syntax_extension(plugin, create_tasklist_extension());
- return 1;
-}
-
-void cmark_gfm_core_extensions_ensure_registered(void) {
- static int registered = 0;
-
- if (!registered) {
- cmark_register_plugin(core_extensions_registration);
- registered = 1;
- }
-}
diff --git a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/core-extensions.o b/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/core-extensions.o
deleted file mode 100644
index 32a1058..0000000
Binary files a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/core-extensions.o and /dev/null differ
diff --git a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/entities.inc b/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/entities.inc
deleted file mode 100644
index a7c36e2..0000000
--- a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/entities.inc
+++ /dev/null
@@ -1,2138 +0,0 @@
-/* Autogenerated by tools/make_headers_inc.py */
-
-struct cmark_entity_node {
- unsigned char *entity;
- unsigned char bytes[8];
-};
-
-#define CMARK_ENTITY_MIN_LENGTH 2
-#define CMARK_ENTITY_MAX_LENGTH 32
-#define CMARK_NUM_ENTITIES 2125
-
-static const struct cmark_entity_node cmark_entities[] = {
-{(unsigned char*)"AElig", {195, 134, 0}},
-{(unsigned char*)"AMP", {38, 0}},
-{(unsigned char*)"Aacute", {195, 129, 0}},
-{(unsigned char*)"Abreve", {196, 130, 0}},
-{(unsigned char*)"Acirc", {195, 130, 0}},
-{(unsigned char*)"Acy", {208, 144, 0}},
-{(unsigned char*)"Afr", {240, 157, 148, 132, 0}},
-{(unsigned char*)"Agrave", {195, 128, 0}},
-{(unsigned char*)"Alpha", {206, 145, 0}},
-{(unsigned char*)"Amacr", {196, 128, 0}},
-{(unsigned char*)"And", {226, 169, 147, 0}},
-{(unsigned char*)"Aogon", {196, 132, 0}},
-{(unsigned char*)"Aopf", {240, 157, 148, 184, 0}},
-{(unsigned char*)"ApplyFunction", {226, 129, 161, 0}},
-{(unsigned char*)"Aring", {195, 133, 0}},
-{(unsigned char*)"Ascr", {240, 157, 146, 156, 0}},
-{(unsigned char*)"Assign", {226, 137, 148, 0}},
-{(unsigned char*)"Atilde", {195, 131, 0}},
-{(unsigned char*)"Auml", {195, 132, 0}},
-{(unsigned char*)"Backslash", {226, 136, 150, 0}},
-{(unsigned char*)"Barv", {226, 171, 167, 0}},
-{(unsigned char*)"Barwed", {226, 140, 134, 0}},
-{(unsigned char*)"Bcy", {208, 145, 0}},
-{(unsigned char*)"Because", {226, 136, 181, 0}},
-{(unsigned char*)"Bernoullis", {226, 132, 172, 0}},
-{(unsigned char*)"Beta", {206, 146, 0}},
-{(unsigned char*)"Bfr", {240, 157, 148, 133, 0}},
-{(unsigned char*)"Bopf", {240, 157, 148, 185, 0}},
-{(unsigned char*)"Breve", {203, 152, 0}},
-{(unsigned char*)"Bscr", {226, 132, 172, 0}},
-{(unsigned char*)"Bumpeq", {226, 137, 142, 0}},
-{(unsigned char*)"CHcy", {208, 167, 0}},
-{(unsigned char*)"COPY", {194, 169, 0}},
-{(unsigned char*)"Cacute", {196, 134, 0}},
-{(unsigned char*)"Cap", {226, 139, 146, 0}},
-{(unsigned char*)"CapitalDifferentialD", {226, 133, 133, 0}},
-{(unsigned char*)"Cayleys", {226, 132, 173, 0}},
-{(unsigned char*)"Ccaron", {196, 140, 0}},
-{(unsigned char*)"Ccedil", {195, 135, 0}},
-{(unsigned char*)"Ccirc", {196, 136, 0}},
-{(unsigned char*)"Cconint", {226, 136, 176, 0}},
-{(unsigned char*)"Cdot", {196, 138, 0}},
-{(unsigned char*)"Cedilla", {194, 184, 0}},
-{(unsigned char*)"CenterDot", {194, 183, 0}},
-{(unsigned char*)"Cfr", {226, 132, 173, 0}},
-{(unsigned char*)"Chi", {206, 167, 0}},
-{(unsigned char*)"CircleDot", {226, 138, 153, 0}},
-{(unsigned char*)"CircleMinus", {226, 138, 150, 0}},
-{(unsigned char*)"CirclePlus", {226, 138, 149, 0}},
-{(unsigned char*)"CircleTimes", {226, 138, 151, 0}},
-{(unsigned char*)"ClockwiseContourIntegral", {226, 136, 178, 0}},
-{(unsigned char*)"CloseCurlyDoubleQuote", {226, 128, 157, 0}},
-{(unsigned char*)"CloseCurlyQuote", {226, 128, 153, 0}},
-{(unsigned char*)"Colon", {226, 136, 183, 0}},
-{(unsigned char*)"Colone", {226, 169, 180, 0}},
-{(unsigned char*)"Congruent", {226, 137, 161, 0}},
-{(unsigned char*)"Conint", {226, 136, 175, 0}},
-{(unsigned char*)"ContourIntegral", {226, 136, 174, 0}},
-{(unsigned char*)"Copf", {226, 132, 130, 0}},
-{(unsigned char*)"Coproduct", {226, 136, 144, 0}},
-{(unsigned char*)"CounterClockwiseContourIntegral", {226, 136, 179, 0}},
-{(unsigned char*)"Cross", {226, 168, 175, 0}},
-{(unsigned char*)"Cscr", {240, 157, 146, 158, 0}},
-{(unsigned char*)"Cup", {226, 139, 147, 0}},
-{(unsigned char*)"CupCap", {226, 137, 141, 0}},
-{(unsigned char*)"DD", {226, 133, 133, 0}},
-{(unsigned char*)"DDotrahd", {226, 164, 145, 0}},
-{(unsigned char*)"DJcy", {208, 130, 0}},
-{(unsigned char*)"DScy", {208, 133, 0}},
-{(unsigned char*)"DZcy", {208, 143, 0}},
-{(unsigned char*)"Dagger", {226, 128, 161, 0}},
-{(unsigned char*)"Darr", {226, 134, 161, 0}},
-{(unsigned char*)"Dashv", {226, 171, 164, 0}},
-{(unsigned char*)"Dcaron", {196, 142, 0}},
-{(unsigned char*)"Dcy", {208, 148, 0}},
-{(unsigned char*)"Del", {226, 136, 135, 0}},
-{(unsigned char*)"Delta", {206, 148, 0}},
-{(unsigned char*)"Dfr", {240, 157, 148, 135, 0}},
-{(unsigned char*)"DiacriticalAcute", {194, 180, 0}},
-{(unsigned char*)"DiacriticalDot", {203, 153, 0}},
-{(unsigned char*)"DiacriticalDoubleAcute", {203, 157, 0}},
-{(unsigned char*)"DiacriticalGrave", {96, 0}},
-{(unsigned char*)"DiacriticalTilde", {203, 156, 0}},
-{(unsigned char*)"Diamond", {226, 139, 132, 0}},
-{(unsigned char*)"DifferentialD", {226, 133, 134, 0}},
-{(unsigned char*)"Dopf", {240, 157, 148, 187, 0}},
-{(unsigned char*)"Dot", {194, 168, 0}},
-{(unsigned char*)"DotDot", {226, 131, 156, 0}},
-{(unsigned char*)"DotEqual", {226, 137, 144, 0}},
-{(unsigned char*)"DoubleContourIntegral", {226, 136, 175, 0}},
-{(unsigned char*)"DoubleDot", {194, 168, 0}},
-{(unsigned char*)"DoubleDownArrow", {226, 135, 147, 0}},
-{(unsigned char*)"DoubleLeftArrow", {226, 135, 144, 0}},
-{(unsigned char*)"DoubleLeftRightArrow", {226, 135, 148, 0}},
-{(unsigned char*)"DoubleLeftTee", {226, 171, 164, 0}},
-{(unsigned char*)"DoubleLongLeftArrow", {226, 159, 184, 0}},
-{(unsigned char*)"DoubleLongLeftRightArrow", {226, 159, 186, 0}},
-{(unsigned char*)"DoubleLongRightArrow", {226, 159, 185, 0}},
-{(unsigned char*)"DoubleRightArrow", {226, 135, 146, 0}},
-{(unsigned char*)"DoubleRightTee", {226, 138, 168, 0}},
-{(unsigned char*)"DoubleUpArrow", {226, 135, 145, 0}},
-{(unsigned char*)"DoubleUpDownArrow", {226, 135, 149, 0}},
-{(unsigned char*)"DoubleVerticalBar", {226, 136, 165, 0}},
-{(unsigned char*)"DownArrow", {226, 134, 147, 0}},
-{(unsigned char*)"DownArrowBar", {226, 164, 147, 0}},
-{(unsigned char*)"DownArrowUpArrow", {226, 135, 181, 0}},
-{(unsigned char*)"DownBreve", {204, 145, 0}},
-{(unsigned char*)"DownLeftRightVector", {226, 165, 144, 0}},
-{(unsigned char*)"DownLeftTeeVector", {226, 165, 158, 0}},
-{(unsigned char*)"DownLeftVector", {226, 134, 189, 0}},
-{(unsigned char*)"DownLeftVectorBar", {226, 165, 150, 0}},
-{(unsigned char*)"DownRightTeeVector", {226, 165, 159, 0}},
-{(unsigned char*)"DownRightVector", {226, 135, 129, 0}},
-{(unsigned char*)"DownRightVectorBar", {226, 165, 151, 0}},
-{(unsigned char*)"DownTee", {226, 138, 164, 0}},
-{(unsigned char*)"DownTeeArrow", {226, 134, 167, 0}},
-{(unsigned char*)"Downarrow", {226, 135, 147, 0}},
-{(unsigned char*)"Dscr", {240, 157, 146, 159, 0}},
-{(unsigned char*)"Dstrok", {196, 144, 0}},
-{(unsigned char*)"ENG", {197, 138, 0}},
-{(unsigned char*)"ETH", {195, 144, 0}},
-{(unsigned char*)"Eacute", {195, 137, 0}},
-{(unsigned char*)"Ecaron", {196, 154, 0}},
-{(unsigned char*)"Ecirc", {195, 138, 0}},
-{(unsigned char*)"Ecy", {208, 173, 0}},
-{(unsigned char*)"Edot", {196, 150, 0}},
-{(unsigned char*)"Efr", {240, 157, 148, 136, 0}},
-{(unsigned char*)"Egrave", {195, 136, 0}},
-{(unsigned char*)"Element", {226, 136, 136, 0}},
-{(unsigned char*)"Emacr", {196, 146, 0}},
-{(unsigned char*)"EmptySmallSquare", {226, 151, 187, 0}},
-{(unsigned char*)"EmptyVerySmallSquare", {226, 150, 171, 0}},
-{(unsigned char*)"Eogon", {196, 152, 0}},
-{(unsigned char*)"Eopf", {240, 157, 148, 188, 0}},
-{(unsigned char*)"Epsilon", {206, 149, 0}},
-{(unsigned char*)"Equal", {226, 169, 181, 0}},
-{(unsigned char*)"EqualTilde", {226, 137, 130, 0}},
-{(unsigned char*)"Equilibrium", {226, 135, 140, 0}},
-{(unsigned char*)"Escr", {226, 132, 176, 0}},
-{(unsigned char*)"Esim", {226, 169, 179, 0}},
-{(unsigned char*)"Eta", {206, 151, 0}},
-{(unsigned char*)"Euml", {195, 139, 0}},
-{(unsigned char*)"Exists", {226, 136, 131, 0}},
-{(unsigned char*)"ExponentialE", {226, 133, 135, 0}},
-{(unsigned char*)"Fcy", {208, 164, 0}},
-{(unsigned char*)"Ffr", {240, 157, 148, 137, 0}},
-{(unsigned char*)"FilledSmallSquare", {226, 151, 188, 0}},
-{(unsigned char*)"FilledVerySmallSquare", {226, 150, 170, 0}},
-{(unsigned char*)"Fopf", {240, 157, 148, 189, 0}},
-{(unsigned char*)"ForAll", {226, 136, 128, 0}},
-{(unsigned char*)"Fouriertrf", {226, 132, 177, 0}},
-{(unsigned char*)"Fscr", {226, 132, 177, 0}},
-{(unsigned char*)"GJcy", {208, 131, 0}},
-{(unsigned char*)"GT", {62, 0}},
-{(unsigned char*)"Gamma", {206, 147, 0}},
-{(unsigned char*)"Gammad", {207, 156, 0}},
-{(unsigned char*)"Gbreve", {196, 158, 0}},
-{(unsigned char*)"Gcedil", {196, 162, 0}},
-{(unsigned char*)"Gcirc", {196, 156, 0}},
-{(unsigned char*)"Gcy", {208, 147, 0}},
-{(unsigned char*)"Gdot", {196, 160, 0}},
-{(unsigned char*)"Gfr", {240, 157, 148, 138, 0}},
-{(unsigned char*)"Gg", {226, 139, 153, 0}},
-{(unsigned char*)"Gopf", {240, 157, 148, 190, 0}},
-{(unsigned char*)"GreaterEqual", {226, 137, 165, 0}},
-{(unsigned char*)"GreaterEqualLess", {226, 139, 155, 0}},
-{(unsigned char*)"GreaterFullEqual", {226, 137, 167, 0}},
-{(unsigned char*)"GreaterGreater", {226, 170, 162, 0}},
-{(unsigned char*)"GreaterLess", {226, 137, 183, 0}},
-{(unsigned char*)"GreaterSlantEqual", {226, 169, 190, 0}},
-{(unsigned char*)"GreaterTilde", {226, 137, 179, 0}},
-{(unsigned char*)"Gscr", {240, 157, 146, 162, 0}},
-{(unsigned char*)"Gt", {226, 137, 171, 0}},
-{(unsigned char*)"HARDcy", {208, 170, 0}},
-{(unsigned char*)"Hacek", {203, 135, 0}},
-{(unsigned char*)"Hat", {94, 0}},
-{(unsigned char*)"Hcirc", {196, 164, 0}},
-{(unsigned char*)"Hfr", {226, 132, 140, 0}},
-{(unsigned char*)"HilbertSpace", {226, 132, 139, 0}},
-{(unsigned char*)"Hopf", {226, 132, 141, 0}},
-{(unsigned char*)"HorizontalLine", {226, 148, 128, 0}},
-{(unsigned char*)"Hscr", {226, 132, 139, 0}},
-{(unsigned char*)"Hstrok", {196, 166, 0}},
-{(unsigned char*)"HumpDownHump", {226, 137, 142, 0}},
-{(unsigned char*)"HumpEqual", {226, 137, 143, 0}},
-{(unsigned char*)"IEcy", {208, 149, 0}},
-{(unsigned char*)"IJlig", {196, 178, 0}},
-{(unsigned char*)"IOcy", {208, 129, 0}},
-{(unsigned char*)"Iacute", {195, 141, 0}},
-{(unsigned char*)"Icirc", {195, 142, 0}},
-{(unsigned char*)"Icy", {208, 152, 0}},
-{(unsigned char*)"Idot", {196, 176, 0}},
-{(unsigned char*)"Ifr", {226, 132, 145, 0}},
-{(unsigned char*)"Igrave", {195, 140, 0}},
-{(unsigned char*)"Im", {226, 132, 145, 0}},
-{(unsigned char*)"Imacr", {196, 170, 0}},
-{(unsigned char*)"ImaginaryI", {226, 133, 136, 0}},
-{(unsigned char*)"Implies", {226, 135, 146, 0}},
-{(unsigned char*)"Int", {226, 136, 172, 0}},
-{(unsigned char*)"Integral", {226, 136, 171, 0}},
-{(unsigned char*)"Intersection", {226, 139, 130, 0}},
-{(unsigned char*)"InvisibleComma", {226, 129, 163, 0}},
-{(unsigned char*)"InvisibleTimes", {226, 129, 162, 0}},
-{(unsigned char*)"Iogon", {196, 174, 0}},
-{(unsigned char*)"Iopf", {240, 157, 149, 128, 0}},
-{(unsigned char*)"Iota", {206, 153, 0}},
-{(unsigned char*)"Iscr", {226, 132, 144, 0}},
-{(unsigned char*)"Itilde", {196, 168, 0}},
-{(unsigned char*)"Iukcy", {208, 134, 0}},
-{(unsigned char*)"Iuml", {195, 143, 0}},
-{(unsigned char*)"Jcirc", {196, 180, 0}},
-{(unsigned char*)"Jcy", {208, 153, 0}},
-{(unsigned char*)"Jfr", {240, 157, 148, 141, 0}},
-{(unsigned char*)"Jopf", {240, 157, 149, 129, 0}},
-{(unsigned char*)"Jscr", {240, 157, 146, 165, 0}},
-{(unsigned char*)"Jsercy", {208, 136, 0}},
-{(unsigned char*)"Jukcy", {208, 132, 0}},
-{(unsigned char*)"KHcy", {208, 165, 0}},
-{(unsigned char*)"KJcy", {208, 140, 0}},
-{(unsigned char*)"Kappa", {206, 154, 0}},
-{(unsigned char*)"Kcedil", {196, 182, 0}},
-{(unsigned char*)"Kcy", {208, 154, 0}},
-{(unsigned char*)"Kfr", {240, 157, 148, 142, 0}},
-{(unsigned char*)"Kopf", {240, 157, 149, 130, 0}},
-{(unsigned char*)"Kscr", {240, 157, 146, 166, 0}},
-{(unsigned char*)"LJcy", {208, 137, 0}},
-{(unsigned char*)"LT", {60, 0}},
-{(unsigned char*)"Lacute", {196, 185, 0}},
-{(unsigned char*)"Lambda", {206, 155, 0}},
-{(unsigned char*)"Lang", {226, 159, 170, 0}},
-{(unsigned char*)"Laplacetrf", {226, 132, 146, 0}},
-{(unsigned char*)"Larr", {226, 134, 158, 0}},
-{(unsigned char*)"Lcaron", {196, 189, 0}},
-{(unsigned char*)"Lcedil", {196, 187, 0}},
-{(unsigned char*)"Lcy", {208, 155, 0}},
-{(unsigned char*)"LeftAngleBracket", {226, 159, 168, 0}},
-{(unsigned char*)"LeftArrow", {226, 134, 144, 0}},
-{(unsigned char*)"LeftArrowBar", {226, 135, 164, 0}},
-{(unsigned char*)"LeftArrowRightArrow", {226, 135, 134, 0}},
-{(unsigned char*)"LeftCeiling", {226, 140, 136, 0}},
-{(unsigned char*)"LeftDoubleBracket", {226, 159, 166, 0}},
-{(unsigned char*)"LeftDownTeeVector", {226, 165, 161, 0}},
-{(unsigned char*)"LeftDownVector", {226, 135, 131, 0}},
-{(unsigned char*)"LeftDownVectorBar", {226, 165, 153, 0}},
-{(unsigned char*)"LeftFloor", {226, 140, 138, 0}},
-{(unsigned char*)"LeftRightArrow", {226, 134, 148, 0}},
-{(unsigned char*)"LeftRightVector", {226, 165, 142, 0}},
-{(unsigned char*)"LeftTee", {226, 138, 163, 0}},
-{(unsigned char*)"LeftTeeArrow", {226, 134, 164, 0}},
-{(unsigned char*)"LeftTeeVector", {226, 165, 154, 0}},
-{(unsigned char*)"LeftTriangle", {226, 138, 178, 0}},
-{(unsigned char*)"LeftTriangleBar", {226, 167, 143, 0}},
-{(unsigned char*)"LeftTriangleEqual", {226, 138, 180, 0}},
-{(unsigned char*)"LeftUpDownVector", {226, 165, 145, 0}},
-{(unsigned char*)"LeftUpTeeVector", {226, 165, 160, 0}},
-{(unsigned char*)"LeftUpVector", {226, 134, 191, 0}},
-{(unsigned char*)"LeftUpVectorBar", {226, 165, 152, 0}},
-{(unsigned char*)"LeftVector", {226, 134, 188, 0}},
-{(unsigned char*)"LeftVectorBar", {226, 165, 146, 0}},
-{(unsigned char*)"Leftarrow", {226, 135, 144, 0}},
-{(unsigned char*)"Leftrightarrow", {226, 135, 148, 0}},
-{(unsigned char*)"LessEqualGreater", {226, 139, 154, 0}},
-{(unsigned char*)"LessFullEqual", {226, 137, 166, 0}},
-{(unsigned char*)"LessGreater", {226, 137, 182, 0}},
-{(unsigned char*)"LessLess", {226, 170, 161, 0}},
-{(unsigned char*)"LessSlantEqual", {226, 169, 189, 0}},
-{(unsigned char*)"LessTilde", {226, 137, 178, 0}},
-{(unsigned char*)"Lfr", {240, 157, 148, 143, 0}},
-{(unsigned char*)"Ll", {226, 139, 152, 0}},
-{(unsigned char*)"Lleftarrow", {226, 135, 154, 0}},
-{(unsigned char*)"Lmidot", {196, 191, 0}},
-{(unsigned char*)"LongLeftArrow", {226, 159, 181, 0}},
-{(unsigned char*)"LongLeftRightArrow", {226, 159, 183, 0}},
-{(unsigned char*)"LongRightArrow", {226, 159, 182, 0}},
-{(unsigned char*)"Longleftarrow", {226, 159, 184, 0}},
-{(unsigned char*)"Longleftrightarrow", {226, 159, 186, 0}},
-{(unsigned char*)"Longrightarrow", {226, 159, 185, 0}},
-{(unsigned char*)"Lopf", {240, 157, 149, 131, 0}},
-{(unsigned char*)"LowerLeftArrow", {226, 134, 153, 0}},
-{(unsigned char*)"LowerRightArrow", {226, 134, 152, 0}},
-{(unsigned char*)"Lscr", {226, 132, 146, 0}},
-{(unsigned char*)"Lsh", {226, 134, 176, 0}},
-{(unsigned char*)"Lstrok", {197, 129, 0}},
-{(unsigned char*)"Lt", {226, 137, 170, 0}},
-{(unsigned char*)"Map", {226, 164, 133, 0}},
-{(unsigned char*)"Mcy", {208, 156, 0}},
-{(unsigned char*)"MediumSpace", {226, 129, 159, 0}},
-{(unsigned char*)"Mellintrf", {226, 132, 179, 0}},
-{(unsigned char*)"Mfr", {240, 157, 148, 144, 0}},
-{(unsigned char*)"MinusPlus", {226, 136, 147, 0}},
-{(unsigned char*)"Mopf", {240, 157, 149, 132, 0}},
-{(unsigned char*)"Mscr", {226, 132, 179, 0}},
-{(unsigned char*)"Mu", {206, 156, 0}},
-{(unsigned char*)"NJcy", {208, 138, 0}},
-{(unsigned char*)"Nacute", {197, 131, 0}},
-{(unsigned char*)"Ncaron", {197, 135, 0}},
-{(unsigned char*)"Ncedil", {197, 133, 0}},
-{(unsigned char*)"Ncy", {208, 157, 0}},
-{(unsigned char*)"NegativeMediumSpace", {226, 128, 139, 0}},
-{(unsigned char*)"NegativeThickSpace", {226, 128, 139, 0}},
-{(unsigned char*)"NegativeThinSpace", {226, 128, 139, 0}},
-{(unsigned char*)"NegativeVeryThinSpace", {226, 128, 139, 0}},
-{(unsigned char*)"NestedGreaterGreater", {226, 137, 171, 0}},
-{(unsigned char*)"NestedLessLess", {226, 137, 170, 0}},
-{(unsigned char*)"NewLine", {10, 0}},
-{(unsigned char*)"Nfr", {240, 157, 148, 145, 0}},
-{(unsigned char*)"NoBreak", {226, 129, 160, 0}},
-{(unsigned char*)"NonBreakingSpace", {194, 160, 0}},
-{(unsigned char*)"Nopf", {226, 132, 149, 0}},
-{(unsigned char*)"Not", {226, 171, 172, 0}},
-{(unsigned char*)"NotCongruent", {226, 137, 162, 0}},
-{(unsigned char*)"NotCupCap", {226, 137, 173, 0}},
-{(unsigned char*)"NotDoubleVerticalBar", {226, 136, 166, 0}},
-{(unsigned char*)"NotElement", {226, 136, 137, 0}},
-{(unsigned char*)"NotEqual", {226, 137, 160, 0}},
-{(unsigned char*)"NotEqualTilde", {226, 137, 130, 204, 184, 0}},
-{(unsigned char*)"NotExists", {226, 136, 132, 0}},
-{(unsigned char*)"NotGreater", {226, 137, 175, 0}},
-{(unsigned char*)"NotGreaterEqual", {226, 137, 177, 0}},
-{(unsigned char*)"NotGreaterFullEqual", {226, 137, 167, 204, 184, 0}},
-{(unsigned char*)"NotGreaterGreater", {226, 137, 171, 204, 184, 0}},
-{(unsigned char*)"NotGreaterLess", {226, 137, 185, 0}},
-{(unsigned char*)"NotGreaterSlantEqual", {226, 169, 190, 204, 184, 0}},
-{(unsigned char*)"NotGreaterTilde", {226, 137, 181, 0}},
-{(unsigned char*)"NotHumpDownHump", {226, 137, 142, 204, 184, 0}},
-{(unsigned char*)"NotHumpEqual", {226, 137, 143, 204, 184, 0}},
-{(unsigned char*)"NotLeftTriangle", {226, 139, 170, 0}},
-{(unsigned char*)"NotLeftTriangleBar", {226, 167, 143, 204, 184, 0}},
-{(unsigned char*)"NotLeftTriangleEqual", {226, 139, 172, 0}},
-{(unsigned char*)"NotLess", {226, 137, 174, 0}},
-{(unsigned char*)"NotLessEqual", {226, 137, 176, 0}},
-{(unsigned char*)"NotLessGreater", {226, 137, 184, 0}},
-{(unsigned char*)"NotLessLess", {226, 137, 170, 204, 184, 0}},
-{(unsigned char*)"NotLessSlantEqual", {226, 169, 189, 204, 184, 0}},
-{(unsigned char*)"NotLessTilde", {226, 137, 180, 0}},
-{(unsigned char*)"NotNestedGreaterGreater", {226, 170, 162, 204, 184, 0}},
-{(unsigned char*)"NotNestedLessLess", {226, 170, 161, 204, 184, 0}},
-{(unsigned char*)"NotPrecedes", {226, 138, 128, 0}},
-{(unsigned char*)"NotPrecedesEqual", {226, 170, 175, 204, 184, 0}},
-{(unsigned char*)"NotPrecedesSlantEqual", {226, 139, 160, 0}},
-{(unsigned char*)"NotReverseElement", {226, 136, 140, 0}},
-{(unsigned char*)"NotRightTriangle", {226, 139, 171, 0}},
-{(unsigned char*)"NotRightTriangleBar", {226, 167, 144, 204, 184, 0}},
-{(unsigned char*)"NotRightTriangleEqual", {226, 139, 173, 0}},
-{(unsigned char*)"NotSquareSubset", {226, 138, 143, 204, 184, 0}},
-{(unsigned char*)"NotSquareSubsetEqual", {226, 139, 162, 0}},
-{(unsigned char*)"NotSquareSuperset", {226, 138, 144, 204, 184, 0}},
-{(unsigned char*)"NotSquareSupersetEqual", {226, 139, 163, 0}},
-{(unsigned char*)"NotSubset", {226, 138, 130, 226, 131, 146, 0}},
-{(unsigned char*)"NotSubsetEqual", {226, 138, 136, 0}},
-{(unsigned char*)"NotSucceeds", {226, 138, 129, 0}},
-{(unsigned char*)"NotSucceedsEqual", {226, 170, 176, 204, 184, 0}},
-{(unsigned char*)"NotSucceedsSlantEqual", {226, 139, 161, 0}},
-{(unsigned char*)"NotSucceedsTilde", {226, 137, 191, 204, 184, 0}},
-{(unsigned char*)"NotSuperset", {226, 138, 131, 226, 131, 146, 0}},
-{(unsigned char*)"NotSupersetEqual", {226, 138, 137, 0}},
-{(unsigned char*)"NotTilde", {226, 137, 129, 0}},
-{(unsigned char*)"NotTildeEqual", {226, 137, 132, 0}},
-{(unsigned char*)"NotTildeFullEqual", {226, 137, 135, 0}},
-{(unsigned char*)"NotTildeTilde", {226, 137, 137, 0}},
-{(unsigned char*)"NotVerticalBar", {226, 136, 164, 0}},
-{(unsigned char*)"Nscr", {240, 157, 146, 169, 0}},
-{(unsigned char*)"Ntilde", {195, 145, 0}},
-{(unsigned char*)"Nu", {206, 157, 0}},
-{(unsigned char*)"OElig", {197, 146, 0}},
-{(unsigned char*)"Oacute", {195, 147, 0}},
-{(unsigned char*)"Ocirc", {195, 148, 0}},
-{(unsigned char*)"Ocy", {208, 158, 0}},
-{(unsigned char*)"Odblac", {197, 144, 0}},
-{(unsigned char*)"Ofr", {240, 157, 148, 146, 0}},
-{(unsigned char*)"Ograve", {195, 146, 0}},
-{(unsigned char*)"Omacr", {197, 140, 0}},
-{(unsigned char*)"Omega", {206, 169, 0}},
-{(unsigned char*)"Omicron", {206, 159, 0}},
-{(unsigned char*)"Oopf", {240, 157, 149, 134, 0}},
-{(unsigned char*)"OpenCurlyDoubleQuote", {226, 128, 156, 0}},
-{(unsigned char*)"OpenCurlyQuote", {226, 128, 152, 0}},
-{(unsigned char*)"Or", {226, 169, 148, 0}},
-{(unsigned char*)"Oscr", {240, 157, 146, 170, 0}},
-{(unsigned char*)"Oslash", {195, 152, 0}},
-{(unsigned char*)"Otilde", {195, 149, 0}},
-{(unsigned char*)"Otimes", {226, 168, 183, 0}},
-{(unsigned char*)"Ouml", {195, 150, 0}},
-{(unsigned char*)"OverBar", {226, 128, 190, 0}},
-{(unsigned char*)"OverBrace", {226, 143, 158, 0}},
-{(unsigned char*)"OverBracket", {226, 142, 180, 0}},
-{(unsigned char*)"OverParenthesis", {226, 143, 156, 0}},
-{(unsigned char*)"PartialD", {226, 136, 130, 0}},
-{(unsigned char*)"Pcy", {208, 159, 0}},
-{(unsigned char*)"Pfr", {240, 157, 148, 147, 0}},
-{(unsigned char*)"Phi", {206, 166, 0}},
-{(unsigned char*)"Pi", {206, 160, 0}},
-{(unsigned char*)"PlusMinus", {194, 177, 0}},
-{(unsigned char*)"Poincareplane", {226, 132, 140, 0}},
-{(unsigned char*)"Popf", {226, 132, 153, 0}},
-{(unsigned char*)"Pr", {226, 170, 187, 0}},
-{(unsigned char*)"Precedes", {226, 137, 186, 0}},
-{(unsigned char*)"PrecedesEqual", {226, 170, 175, 0}},
-{(unsigned char*)"PrecedesSlantEqual", {226, 137, 188, 0}},
-{(unsigned char*)"PrecedesTilde", {226, 137, 190, 0}},
-{(unsigned char*)"Prime", {226, 128, 179, 0}},
-{(unsigned char*)"Product", {226, 136, 143, 0}},
-{(unsigned char*)"Proportion", {226, 136, 183, 0}},
-{(unsigned char*)"Proportional", {226, 136, 157, 0}},
-{(unsigned char*)"Pscr", {240, 157, 146, 171, 0}},
-{(unsigned char*)"Psi", {206, 168, 0}},
-{(unsigned char*)"QUOT", {34, 0}},
-{(unsigned char*)"Qfr", {240, 157, 148, 148, 0}},
-{(unsigned char*)"Qopf", {226, 132, 154, 0}},
-{(unsigned char*)"Qscr", {240, 157, 146, 172, 0}},
-{(unsigned char*)"RBarr", {226, 164, 144, 0}},
-{(unsigned char*)"REG", {194, 174, 0}},
-{(unsigned char*)"Racute", {197, 148, 0}},
-{(unsigned char*)"Rang", {226, 159, 171, 0}},
-{(unsigned char*)"Rarr", {226, 134, 160, 0}},
-{(unsigned char*)"Rarrtl", {226, 164, 150, 0}},
-{(unsigned char*)"Rcaron", {197, 152, 0}},
-{(unsigned char*)"Rcedil", {197, 150, 0}},
-{(unsigned char*)"Rcy", {208, 160, 0}},
-{(unsigned char*)"Re", {226, 132, 156, 0}},
-{(unsigned char*)"ReverseElement", {226, 136, 139, 0}},
-{(unsigned char*)"ReverseEquilibrium", {226, 135, 139, 0}},
-{(unsigned char*)"ReverseUpEquilibrium", {226, 165, 175, 0}},
-{(unsigned char*)"Rfr", {226, 132, 156, 0}},
-{(unsigned char*)"Rho", {206, 161, 0}},
-{(unsigned char*)"RightAngleBracket", {226, 159, 169, 0}},
-{(unsigned char*)"RightArrow", {226, 134, 146, 0}},
-{(unsigned char*)"RightArrowBar", {226, 135, 165, 0}},
-{(unsigned char*)"RightArrowLeftArrow", {226, 135, 132, 0}},
-{(unsigned char*)"RightCeiling", {226, 140, 137, 0}},
-{(unsigned char*)"RightDoubleBracket", {226, 159, 167, 0}},
-{(unsigned char*)"RightDownTeeVector", {226, 165, 157, 0}},
-{(unsigned char*)"RightDownVector", {226, 135, 130, 0}},
-{(unsigned char*)"RightDownVectorBar", {226, 165, 149, 0}},
-{(unsigned char*)"RightFloor", {226, 140, 139, 0}},
-{(unsigned char*)"RightTee", {226, 138, 162, 0}},
-{(unsigned char*)"RightTeeArrow", {226, 134, 166, 0}},
-{(unsigned char*)"RightTeeVector", {226, 165, 155, 0}},
-{(unsigned char*)"RightTriangle", {226, 138, 179, 0}},
-{(unsigned char*)"RightTriangleBar", {226, 167, 144, 0}},
-{(unsigned char*)"RightTriangleEqual", {226, 138, 181, 0}},
-{(unsigned char*)"RightUpDownVector", {226, 165, 143, 0}},
-{(unsigned char*)"RightUpTeeVector", {226, 165, 156, 0}},
-{(unsigned char*)"RightUpVector", {226, 134, 190, 0}},
-{(unsigned char*)"RightUpVectorBar", {226, 165, 148, 0}},
-{(unsigned char*)"RightVector", {226, 135, 128, 0}},
-{(unsigned char*)"RightVectorBar", {226, 165, 147, 0}},
-{(unsigned char*)"Rightarrow", {226, 135, 146, 0}},
-{(unsigned char*)"Ropf", {226, 132, 157, 0}},
-{(unsigned char*)"RoundImplies", {226, 165, 176, 0}},
-{(unsigned char*)"Rrightarrow", {226, 135, 155, 0}},
-{(unsigned char*)"Rscr", {226, 132, 155, 0}},
-{(unsigned char*)"Rsh", {226, 134, 177, 0}},
-{(unsigned char*)"RuleDelayed", {226, 167, 180, 0}},
-{(unsigned char*)"SHCHcy", {208, 169, 0}},
-{(unsigned char*)"SHcy", {208, 168, 0}},
-{(unsigned char*)"SOFTcy", {208, 172, 0}},
-{(unsigned char*)"Sacute", {197, 154, 0}},
-{(unsigned char*)"Sc", {226, 170, 188, 0}},
-{(unsigned char*)"Scaron", {197, 160, 0}},
-{(unsigned char*)"Scedil", {197, 158, 0}},
-{(unsigned char*)"Scirc", {197, 156, 0}},
-{(unsigned char*)"Scy", {208, 161, 0}},
-{(unsigned char*)"Sfr", {240, 157, 148, 150, 0}},
-{(unsigned char*)"ShortDownArrow", {226, 134, 147, 0}},
-{(unsigned char*)"ShortLeftArrow", {226, 134, 144, 0}},
-{(unsigned char*)"ShortRightArrow", {226, 134, 146, 0}},
-{(unsigned char*)"ShortUpArrow", {226, 134, 145, 0}},
-{(unsigned char*)"Sigma", {206, 163, 0}},
-{(unsigned char*)"SmallCircle", {226, 136, 152, 0}},
-{(unsigned char*)"Sopf", {240, 157, 149, 138, 0}},
-{(unsigned char*)"Sqrt", {226, 136, 154, 0}},
-{(unsigned char*)"Square", {226, 150, 161, 0}},
-{(unsigned char*)"SquareIntersection", {226, 138, 147, 0}},
-{(unsigned char*)"SquareSubset", {226, 138, 143, 0}},
-{(unsigned char*)"SquareSubsetEqual", {226, 138, 145, 0}},
-{(unsigned char*)"SquareSuperset", {226, 138, 144, 0}},
-{(unsigned char*)"SquareSupersetEqual", {226, 138, 146, 0}},
-{(unsigned char*)"SquareUnion", {226, 138, 148, 0}},
-{(unsigned char*)"Sscr", {240, 157, 146, 174, 0}},
-{(unsigned char*)"Star", {226, 139, 134, 0}},
-{(unsigned char*)"Sub", {226, 139, 144, 0}},
-{(unsigned char*)"Subset", {226, 139, 144, 0}},
-{(unsigned char*)"SubsetEqual", {226, 138, 134, 0}},
-{(unsigned char*)"Succeeds", {226, 137, 187, 0}},
-{(unsigned char*)"SucceedsEqual", {226, 170, 176, 0}},
-{(unsigned char*)"SucceedsSlantEqual", {226, 137, 189, 0}},
-{(unsigned char*)"SucceedsTilde", {226, 137, 191, 0}},
-{(unsigned char*)"SuchThat", {226, 136, 139, 0}},
-{(unsigned char*)"Sum", {226, 136, 145, 0}},
-{(unsigned char*)"Sup", {226, 139, 145, 0}},
-{(unsigned char*)"Superset", {226, 138, 131, 0}},
-{(unsigned char*)"SupersetEqual", {226, 138, 135, 0}},
-{(unsigned char*)"Supset", {226, 139, 145, 0}},
-{(unsigned char*)"THORN", {195, 158, 0}},
-{(unsigned char*)"TRADE", {226, 132, 162, 0}},
-{(unsigned char*)"TSHcy", {208, 139, 0}},
-{(unsigned char*)"TScy", {208, 166, 0}},
-{(unsigned char*)"Tab", {9, 0}},
-{(unsigned char*)"Tau", {206, 164, 0}},
-{(unsigned char*)"Tcaron", {197, 164, 0}},
-{(unsigned char*)"Tcedil", {197, 162, 0}},
-{(unsigned char*)"Tcy", {208, 162, 0}},
-{(unsigned char*)"Tfr", {240, 157, 148, 151, 0}},
-{(unsigned char*)"Therefore", {226, 136, 180, 0}},
-{(unsigned char*)"Theta", {206, 152, 0}},
-{(unsigned char*)"ThickSpace", {226, 129, 159, 226, 128, 138, 0}},
-{(unsigned char*)"ThinSpace", {226, 128, 137, 0}},
-{(unsigned char*)"Tilde", {226, 136, 188, 0}},
-{(unsigned char*)"TildeEqual", {226, 137, 131, 0}},
-{(unsigned char*)"TildeFullEqual", {226, 137, 133, 0}},
-{(unsigned char*)"TildeTilde", {226, 137, 136, 0}},
-{(unsigned char*)"Topf", {240, 157, 149, 139, 0}},
-{(unsigned char*)"TripleDot", {226, 131, 155, 0}},
-{(unsigned char*)"Tscr", {240, 157, 146, 175, 0}},
-{(unsigned char*)"Tstrok", {197, 166, 0}},
-{(unsigned char*)"Uacute", {195, 154, 0}},
-{(unsigned char*)"Uarr", {226, 134, 159, 0}},
-{(unsigned char*)"Uarrocir", {226, 165, 137, 0}},
-{(unsigned char*)"Ubrcy", {208, 142, 0}},
-{(unsigned char*)"Ubreve", {197, 172, 0}},
-{(unsigned char*)"Ucirc", {195, 155, 0}},
-{(unsigned char*)"Ucy", {208, 163, 0}},
-{(unsigned char*)"Udblac", {197, 176, 0}},
-{(unsigned char*)"Ufr", {240, 157, 148, 152, 0}},
-{(unsigned char*)"Ugrave", {195, 153, 0}},
-{(unsigned char*)"Umacr", {197, 170, 0}},
-{(unsigned char*)"UnderBar", {95, 0}},
-{(unsigned char*)"UnderBrace", {226, 143, 159, 0}},
-{(unsigned char*)"UnderBracket", {226, 142, 181, 0}},
-{(unsigned char*)"UnderParenthesis", {226, 143, 157, 0}},
-{(unsigned char*)"Union", {226, 139, 131, 0}},
-{(unsigned char*)"UnionPlus", {226, 138, 142, 0}},
-{(unsigned char*)"Uogon", {197, 178, 0}},
-{(unsigned char*)"Uopf", {240, 157, 149, 140, 0}},
-{(unsigned char*)"UpArrow", {226, 134, 145, 0}},
-{(unsigned char*)"UpArrowBar", {226, 164, 146, 0}},
-{(unsigned char*)"UpArrowDownArrow", {226, 135, 133, 0}},
-{(unsigned char*)"UpDownArrow", {226, 134, 149, 0}},
-{(unsigned char*)"UpEquilibrium", {226, 165, 174, 0}},
-{(unsigned char*)"UpTee", {226, 138, 165, 0}},
-{(unsigned char*)"UpTeeArrow", {226, 134, 165, 0}},
-{(unsigned char*)"Uparrow", {226, 135, 145, 0}},
-{(unsigned char*)"Updownarrow", {226, 135, 149, 0}},
-{(unsigned char*)"UpperLeftArrow", {226, 134, 150, 0}},
-{(unsigned char*)"UpperRightArrow", {226, 134, 151, 0}},
-{(unsigned char*)"Upsi", {207, 146, 0}},
-{(unsigned char*)"Upsilon", {206, 165, 0}},
-{(unsigned char*)"Uring", {197, 174, 0}},
-{(unsigned char*)"Uscr", {240, 157, 146, 176, 0}},
-{(unsigned char*)"Utilde", {197, 168, 0}},
-{(unsigned char*)"Uuml", {195, 156, 0}},
-{(unsigned char*)"VDash", {226, 138, 171, 0}},
-{(unsigned char*)"Vbar", {226, 171, 171, 0}},
-{(unsigned char*)"Vcy", {208, 146, 0}},
-{(unsigned char*)"Vdash", {226, 138, 169, 0}},
-{(unsigned char*)"Vdashl", {226, 171, 166, 0}},
-{(unsigned char*)"Vee", {226, 139, 129, 0}},
-{(unsigned char*)"Verbar", {226, 128, 150, 0}},
-{(unsigned char*)"Vert", {226, 128, 150, 0}},
-{(unsigned char*)"VerticalBar", {226, 136, 163, 0}},
-{(unsigned char*)"VerticalLine", {124, 0}},
-{(unsigned char*)"VerticalSeparator", {226, 157, 152, 0}},
-{(unsigned char*)"VerticalTilde", {226, 137, 128, 0}},
-{(unsigned char*)"VeryThinSpace", {226, 128, 138, 0}},
-{(unsigned char*)"Vfr", {240, 157, 148, 153, 0}},
-{(unsigned char*)"Vopf", {240, 157, 149, 141, 0}},
-{(unsigned char*)"Vscr", {240, 157, 146, 177, 0}},
-{(unsigned char*)"Vvdash", {226, 138, 170, 0}},
-{(unsigned char*)"Wcirc", {197, 180, 0}},
-{(unsigned char*)"Wedge", {226, 139, 128, 0}},
-{(unsigned char*)"Wfr", {240, 157, 148, 154, 0}},
-{(unsigned char*)"Wopf", {240, 157, 149, 142, 0}},
-{(unsigned char*)"Wscr", {240, 157, 146, 178, 0}},
-{(unsigned char*)"Xfr", {240, 157, 148, 155, 0}},
-{(unsigned char*)"Xi", {206, 158, 0}},
-{(unsigned char*)"Xopf", {240, 157, 149, 143, 0}},
-{(unsigned char*)"Xscr", {240, 157, 146, 179, 0}},
-{(unsigned char*)"YAcy", {208, 175, 0}},
-{(unsigned char*)"YIcy", {208, 135, 0}},
-{(unsigned char*)"YUcy", {208, 174, 0}},
-{(unsigned char*)"Yacute", {195, 157, 0}},
-{(unsigned char*)"Ycirc", {197, 182, 0}},
-{(unsigned char*)"Ycy", {208, 171, 0}},
-{(unsigned char*)"Yfr", {240, 157, 148, 156, 0}},
-{(unsigned char*)"Yopf", {240, 157, 149, 144, 0}},
-{(unsigned char*)"Yscr", {240, 157, 146, 180, 0}},
-{(unsigned char*)"Yuml", {197, 184, 0}},
-{(unsigned char*)"ZHcy", {208, 150, 0}},
-{(unsigned char*)"Zacute", {197, 185, 0}},
-{(unsigned char*)"Zcaron", {197, 189, 0}},
-{(unsigned char*)"Zcy", {208, 151, 0}},
-{(unsigned char*)"Zdot", {197, 187, 0}},
-{(unsigned char*)"ZeroWidthSpace", {226, 128, 139, 0}},
-{(unsigned char*)"Zeta", {206, 150, 0}},
-{(unsigned char*)"Zfr", {226, 132, 168, 0}},
-{(unsigned char*)"Zopf", {226, 132, 164, 0}},
-{(unsigned char*)"Zscr", {240, 157, 146, 181, 0}},
-{(unsigned char*)"aacute", {195, 161, 0}},
-{(unsigned char*)"abreve", {196, 131, 0}},
-{(unsigned char*)"ac", {226, 136, 190, 0}},
-{(unsigned char*)"acE", {226, 136, 190, 204, 179, 0}},
-{(unsigned char*)"acd", {226, 136, 191, 0}},
-{(unsigned char*)"acirc", {195, 162, 0}},
-{(unsigned char*)"acute", {194, 180, 0}},
-{(unsigned char*)"acy", {208, 176, 0}},
-{(unsigned char*)"aelig", {195, 166, 0}},
-{(unsigned char*)"af", {226, 129, 161, 0}},
-{(unsigned char*)"afr", {240, 157, 148, 158, 0}},
-{(unsigned char*)"agrave", {195, 160, 0}},
-{(unsigned char*)"alefsym", {226, 132, 181, 0}},
-{(unsigned char*)"aleph", {226, 132, 181, 0}},
-{(unsigned char*)"alpha", {206, 177, 0}},
-{(unsigned char*)"amacr", {196, 129, 0}},
-{(unsigned char*)"amalg", {226, 168, 191, 0}},
-{(unsigned char*)"amp", {38, 0}},
-{(unsigned char*)"and", {226, 136, 167, 0}},
-{(unsigned char*)"andand", {226, 169, 149, 0}},
-{(unsigned char*)"andd", {226, 169, 156, 0}},
-{(unsigned char*)"andslope", {226, 169, 152, 0}},
-{(unsigned char*)"andv", {226, 169, 154, 0}},
-{(unsigned char*)"ang", {226, 136, 160, 0}},
-{(unsigned char*)"ange", {226, 166, 164, 0}},
-{(unsigned char*)"angle", {226, 136, 160, 0}},
-{(unsigned char*)"angmsd", {226, 136, 161, 0}},
-{(unsigned char*)"angmsdaa", {226, 166, 168, 0}},
-{(unsigned char*)"angmsdab", {226, 166, 169, 0}},
-{(unsigned char*)"angmsdac", {226, 166, 170, 0}},
-{(unsigned char*)"angmsdad", {226, 166, 171, 0}},
-{(unsigned char*)"angmsdae", {226, 166, 172, 0}},
-{(unsigned char*)"angmsdaf", {226, 166, 173, 0}},
-{(unsigned char*)"angmsdag", {226, 166, 174, 0}},
-{(unsigned char*)"angmsdah", {226, 166, 175, 0}},
-{(unsigned char*)"angrt", {226, 136, 159, 0}},
-{(unsigned char*)"angrtvb", {226, 138, 190, 0}},
-{(unsigned char*)"angrtvbd", {226, 166, 157, 0}},
-{(unsigned char*)"angsph", {226, 136, 162, 0}},
-{(unsigned char*)"angst", {195, 133, 0}},
-{(unsigned char*)"angzarr", {226, 141, 188, 0}},
-{(unsigned char*)"aogon", {196, 133, 0}},
-{(unsigned char*)"aopf", {240, 157, 149, 146, 0}},
-{(unsigned char*)"ap", {226, 137, 136, 0}},
-{(unsigned char*)"apE", {226, 169, 176, 0}},
-{(unsigned char*)"apacir", {226, 169, 175, 0}},
-{(unsigned char*)"ape", {226, 137, 138, 0}},
-{(unsigned char*)"apid", {226, 137, 139, 0}},
-{(unsigned char*)"apos", {39, 0}},
-{(unsigned char*)"approx", {226, 137, 136, 0}},
-{(unsigned char*)"approxeq", {226, 137, 138, 0}},
-{(unsigned char*)"aring", {195, 165, 0}},
-{(unsigned char*)"ascr", {240, 157, 146, 182, 0}},
-{(unsigned char*)"ast", {42, 0}},
-{(unsigned char*)"asymp", {226, 137, 136, 0}},
-{(unsigned char*)"asympeq", {226, 137, 141, 0}},
-{(unsigned char*)"atilde", {195, 163, 0}},
-{(unsigned char*)"auml", {195, 164, 0}},
-{(unsigned char*)"awconint", {226, 136, 179, 0}},
-{(unsigned char*)"awint", {226, 168, 145, 0}},
-{(unsigned char*)"bNot", {226, 171, 173, 0}},
-{(unsigned char*)"backcong", {226, 137, 140, 0}},
-{(unsigned char*)"backepsilon", {207, 182, 0}},
-{(unsigned char*)"backprime", {226, 128, 181, 0}},
-{(unsigned char*)"backsim", {226, 136, 189, 0}},
-{(unsigned char*)"backsimeq", {226, 139, 141, 0}},
-{(unsigned char*)"barvee", {226, 138, 189, 0}},
-{(unsigned char*)"barwed", {226, 140, 133, 0}},
-{(unsigned char*)"barwedge", {226, 140, 133, 0}},
-{(unsigned char*)"bbrk", {226, 142, 181, 0}},
-{(unsigned char*)"bbrktbrk", {226, 142, 182, 0}},
-{(unsigned char*)"bcong", {226, 137, 140, 0}},
-{(unsigned char*)"bcy", {208, 177, 0}},
-{(unsigned char*)"bdquo", {226, 128, 158, 0}},
-{(unsigned char*)"becaus", {226, 136, 181, 0}},
-{(unsigned char*)"because", {226, 136, 181, 0}},
-{(unsigned char*)"bemptyv", {226, 166, 176, 0}},
-{(unsigned char*)"bepsi", {207, 182, 0}},
-{(unsigned char*)"bernou", {226, 132, 172, 0}},
-{(unsigned char*)"beta", {206, 178, 0}},
-{(unsigned char*)"beth", {226, 132, 182, 0}},
-{(unsigned char*)"between", {226, 137, 172, 0}},
-{(unsigned char*)"bfr", {240, 157, 148, 159, 0}},
-{(unsigned char*)"bigcap", {226, 139, 130, 0}},
-{(unsigned char*)"bigcirc", {226, 151, 175, 0}},
-{(unsigned char*)"bigcup", {226, 139, 131, 0}},
-{(unsigned char*)"bigodot", {226, 168, 128, 0}},
-{(unsigned char*)"bigoplus", {226, 168, 129, 0}},
-{(unsigned char*)"bigotimes", {226, 168, 130, 0}},
-{(unsigned char*)"bigsqcup", {226, 168, 134, 0}},
-{(unsigned char*)"bigstar", {226, 152, 133, 0}},
-{(unsigned char*)"bigtriangledown", {226, 150, 189, 0}},
-{(unsigned char*)"bigtriangleup", {226, 150, 179, 0}},
-{(unsigned char*)"biguplus", {226, 168, 132, 0}},
-{(unsigned char*)"bigvee", {226, 139, 129, 0}},
-{(unsigned char*)"bigwedge", {226, 139, 128, 0}},
-{(unsigned char*)"bkarow", {226, 164, 141, 0}},
-{(unsigned char*)"blacklozenge", {226, 167, 171, 0}},
-{(unsigned char*)"blacksquare", {226, 150, 170, 0}},
-{(unsigned char*)"blacktriangle", {226, 150, 180, 0}},
-{(unsigned char*)"blacktriangledown", {226, 150, 190, 0}},
-{(unsigned char*)"blacktriangleleft", {226, 151, 130, 0}},
-{(unsigned char*)"blacktriangleright", {226, 150, 184, 0}},
-{(unsigned char*)"blank", {226, 144, 163, 0}},
-{(unsigned char*)"blk12", {226, 150, 146, 0}},
-{(unsigned char*)"blk14", {226, 150, 145, 0}},
-{(unsigned char*)"blk34", {226, 150, 147, 0}},
-{(unsigned char*)"block", {226, 150, 136, 0}},
-{(unsigned char*)"bne", {61, 226, 131, 165, 0}},
-{(unsigned char*)"bnequiv", {226, 137, 161, 226, 131, 165, 0}},
-{(unsigned char*)"bnot", {226, 140, 144, 0}},
-{(unsigned char*)"bopf", {240, 157, 149, 147, 0}},
-{(unsigned char*)"bot", {226, 138, 165, 0}},
-{(unsigned char*)"bottom", {226, 138, 165, 0}},
-{(unsigned char*)"bowtie", {226, 139, 136, 0}},
-{(unsigned char*)"boxDL", {226, 149, 151, 0}},
-{(unsigned char*)"boxDR", {226, 149, 148, 0}},
-{(unsigned char*)"boxDl", {226, 149, 150, 0}},
-{(unsigned char*)"boxDr", {226, 149, 147, 0}},
-{(unsigned char*)"boxH", {226, 149, 144, 0}},
-{(unsigned char*)"boxHD", {226, 149, 166, 0}},
-{(unsigned char*)"boxHU", {226, 149, 169, 0}},
-{(unsigned char*)"boxHd", {226, 149, 164, 0}},
-{(unsigned char*)"boxHu", {226, 149, 167, 0}},
-{(unsigned char*)"boxUL", {226, 149, 157, 0}},
-{(unsigned char*)"boxUR", {226, 149, 154, 0}},
-{(unsigned char*)"boxUl", {226, 149, 156, 0}},
-{(unsigned char*)"boxUr", {226, 149, 153, 0}},
-{(unsigned char*)"boxV", {226, 149, 145, 0}},
-{(unsigned char*)"boxVH", {226, 149, 172, 0}},
-{(unsigned char*)"boxVL", {226, 149, 163, 0}},
-{(unsigned char*)"boxVR", {226, 149, 160, 0}},
-{(unsigned char*)"boxVh", {226, 149, 171, 0}},
-{(unsigned char*)"boxVl", {226, 149, 162, 0}},
-{(unsigned char*)"boxVr", {226, 149, 159, 0}},
-{(unsigned char*)"boxbox", {226, 167, 137, 0}},
-{(unsigned char*)"boxdL", {226, 149, 149, 0}},
-{(unsigned char*)"boxdR", {226, 149, 146, 0}},
-{(unsigned char*)"boxdl", {226, 148, 144, 0}},
-{(unsigned char*)"boxdr", {226, 148, 140, 0}},
-{(unsigned char*)"boxh", {226, 148, 128, 0}},
-{(unsigned char*)"boxhD", {226, 149, 165, 0}},
-{(unsigned char*)"boxhU", {226, 149, 168, 0}},
-{(unsigned char*)"boxhd", {226, 148, 172, 0}},
-{(unsigned char*)"boxhu", {226, 148, 180, 0}},
-{(unsigned char*)"boxminus", {226, 138, 159, 0}},
-{(unsigned char*)"boxplus", {226, 138, 158, 0}},
-{(unsigned char*)"boxtimes", {226, 138, 160, 0}},
-{(unsigned char*)"boxuL", {226, 149, 155, 0}},
-{(unsigned char*)"boxuR", {226, 149, 152, 0}},
-{(unsigned char*)"boxul", {226, 148, 152, 0}},
-{(unsigned char*)"boxur", {226, 148, 148, 0}},
-{(unsigned char*)"boxv", {226, 148, 130, 0}},
-{(unsigned char*)"boxvH", {226, 149, 170, 0}},
-{(unsigned char*)"boxvL", {226, 149, 161, 0}},
-{(unsigned char*)"boxvR", {226, 149, 158, 0}},
-{(unsigned char*)"boxvh", {226, 148, 188, 0}},
-{(unsigned char*)"boxvl", {226, 148, 164, 0}},
-{(unsigned char*)"boxvr", {226, 148, 156, 0}},
-{(unsigned char*)"bprime", {226, 128, 181, 0}},
-{(unsigned char*)"breve", {203, 152, 0}},
-{(unsigned char*)"brvbar", {194, 166, 0}},
-{(unsigned char*)"bscr", {240, 157, 146, 183, 0}},
-{(unsigned char*)"bsemi", {226, 129, 143, 0}},
-{(unsigned char*)"bsim", {226, 136, 189, 0}},
-{(unsigned char*)"bsime", {226, 139, 141, 0}},
-{(unsigned char*)"bsol", {92, 0}},
-{(unsigned char*)"bsolb", {226, 167, 133, 0}},
-{(unsigned char*)"bsolhsub", {226, 159, 136, 0}},
-{(unsigned char*)"bull", {226, 128, 162, 0}},
-{(unsigned char*)"bullet", {226, 128, 162, 0}},
-{(unsigned char*)"bump", {226, 137, 142, 0}},
-{(unsigned char*)"bumpE", {226, 170, 174, 0}},
-{(unsigned char*)"bumpe", {226, 137, 143, 0}},
-{(unsigned char*)"bumpeq", {226, 137, 143, 0}},
-{(unsigned char*)"cacute", {196, 135, 0}},
-{(unsigned char*)"cap", {226, 136, 169, 0}},
-{(unsigned char*)"capand", {226, 169, 132, 0}},
-{(unsigned char*)"capbrcup", {226, 169, 137, 0}},
-{(unsigned char*)"capcap", {226, 169, 139, 0}},
-{(unsigned char*)"capcup", {226, 169, 135, 0}},
-{(unsigned char*)"capdot", {226, 169, 128, 0}},
-{(unsigned char*)"caps", {226, 136, 169, 239, 184, 128, 0}},
-{(unsigned char*)"caret", {226, 129, 129, 0}},
-{(unsigned char*)"caron", {203, 135, 0}},
-{(unsigned char*)"ccaps", {226, 169, 141, 0}},
-{(unsigned char*)"ccaron", {196, 141, 0}},
-{(unsigned char*)"ccedil", {195, 167, 0}},
-{(unsigned char*)"ccirc", {196, 137, 0}},
-{(unsigned char*)"ccups", {226, 169, 140, 0}},
-{(unsigned char*)"ccupssm", {226, 169, 144, 0}},
-{(unsigned char*)"cdot", {196, 139, 0}},
-{(unsigned char*)"cedil", {194, 184, 0}},
-{(unsigned char*)"cemptyv", {226, 166, 178, 0}},
-{(unsigned char*)"cent", {194, 162, 0}},
-{(unsigned char*)"centerdot", {194, 183, 0}},
-{(unsigned char*)"cfr", {240, 157, 148, 160, 0}},
-{(unsigned char*)"chcy", {209, 135, 0}},
-{(unsigned char*)"check", {226, 156, 147, 0}},
-{(unsigned char*)"checkmark", {226, 156, 147, 0}},
-{(unsigned char*)"chi", {207, 135, 0}},
-{(unsigned char*)"cir", {226, 151, 139, 0}},
-{(unsigned char*)"cirE", {226, 167, 131, 0}},
-{(unsigned char*)"circ", {203, 134, 0}},
-{(unsigned char*)"circeq", {226, 137, 151, 0}},
-{(unsigned char*)"circlearrowleft", {226, 134, 186, 0}},
-{(unsigned char*)"circlearrowright", {226, 134, 187, 0}},
-{(unsigned char*)"circledR", {194, 174, 0}},
-{(unsigned char*)"circledS", {226, 147, 136, 0}},
-{(unsigned char*)"circledast", {226, 138, 155, 0}},
-{(unsigned char*)"circledcirc", {226, 138, 154, 0}},
-{(unsigned char*)"circleddash", {226, 138, 157, 0}},
-{(unsigned char*)"cire", {226, 137, 151, 0}},
-{(unsigned char*)"cirfnint", {226, 168, 144, 0}},
-{(unsigned char*)"cirmid", {226, 171, 175, 0}},
-{(unsigned char*)"cirscir", {226, 167, 130, 0}},
-{(unsigned char*)"clubs", {226, 153, 163, 0}},
-{(unsigned char*)"clubsuit", {226, 153, 163, 0}},
-{(unsigned char*)"colon", {58, 0}},
-{(unsigned char*)"colone", {226, 137, 148, 0}},
-{(unsigned char*)"coloneq", {226, 137, 148, 0}},
-{(unsigned char*)"comma", {44, 0}},
-{(unsigned char*)"commat", {64, 0}},
-{(unsigned char*)"comp", {226, 136, 129, 0}},
-{(unsigned char*)"compfn", {226, 136, 152, 0}},
-{(unsigned char*)"complement", {226, 136, 129, 0}},
-{(unsigned char*)"complexes", {226, 132, 130, 0}},
-{(unsigned char*)"cong", {226, 137, 133, 0}},
-{(unsigned char*)"congdot", {226, 169, 173, 0}},
-{(unsigned char*)"conint", {226, 136, 174, 0}},
-{(unsigned char*)"copf", {240, 157, 149, 148, 0}},
-{(unsigned char*)"coprod", {226, 136, 144, 0}},
-{(unsigned char*)"copy", {194, 169, 0}},
-{(unsigned char*)"copysr", {226, 132, 151, 0}},
-{(unsigned char*)"crarr", {226, 134, 181, 0}},
-{(unsigned char*)"cross", {226, 156, 151, 0}},
-{(unsigned char*)"cscr", {240, 157, 146, 184, 0}},
-{(unsigned char*)"csub", {226, 171, 143, 0}},
-{(unsigned char*)"csube", {226, 171, 145, 0}},
-{(unsigned char*)"csup", {226, 171, 144, 0}},
-{(unsigned char*)"csupe", {226, 171, 146, 0}},
-{(unsigned char*)"ctdot", {226, 139, 175, 0}},
-{(unsigned char*)"cudarrl", {226, 164, 184, 0}},
-{(unsigned char*)"cudarrr", {226, 164, 181, 0}},
-{(unsigned char*)"cuepr", {226, 139, 158, 0}},
-{(unsigned char*)"cuesc", {226, 139, 159, 0}},
-{(unsigned char*)"cularr", {226, 134, 182, 0}},
-{(unsigned char*)"cularrp", {226, 164, 189, 0}},
-{(unsigned char*)"cup", {226, 136, 170, 0}},
-{(unsigned char*)"cupbrcap", {226, 169, 136, 0}},
-{(unsigned char*)"cupcap", {226, 169, 134, 0}},
-{(unsigned char*)"cupcup", {226, 169, 138, 0}},
-{(unsigned char*)"cupdot", {226, 138, 141, 0}},
-{(unsigned char*)"cupor", {226, 169, 133, 0}},
-{(unsigned char*)"cups", {226, 136, 170, 239, 184, 128, 0}},
-{(unsigned char*)"curarr", {226, 134, 183, 0}},
-{(unsigned char*)"curarrm", {226, 164, 188, 0}},
-{(unsigned char*)"curlyeqprec", {226, 139, 158, 0}},
-{(unsigned char*)"curlyeqsucc", {226, 139, 159, 0}},
-{(unsigned char*)"curlyvee", {226, 139, 142, 0}},
-{(unsigned char*)"curlywedge", {226, 139, 143, 0}},
-{(unsigned char*)"curren", {194, 164, 0}},
-{(unsigned char*)"curvearrowleft", {226, 134, 182, 0}},
-{(unsigned char*)"curvearrowright", {226, 134, 183, 0}},
-{(unsigned char*)"cuvee", {226, 139, 142, 0}},
-{(unsigned char*)"cuwed", {226, 139, 143, 0}},
-{(unsigned char*)"cwconint", {226, 136, 178, 0}},
-{(unsigned char*)"cwint", {226, 136, 177, 0}},
-{(unsigned char*)"cylcty", {226, 140, 173, 0}},
-{(unsigned char*)"dArr", {226, 135, 147, 0}},
-{(unsigned char*)"dHar", {226, 165, 165, 0}},
-{(unsigned char*)"dagger", {226, 128, 160, 0}},
-{(unsigned char*)"daleth", {226, 132, 184, 0}},
-{(unsigned char*)"darr", {226, 134, 147, 0}},
-{(unsigned char*)"dash", {226, 128, 144, 0}},
-{(unsigned char*)"dashv", {226, 138, 163, 0}},
-{(unsigned char*)"dbkarow", {226, 164, 143, 0}},
-{(unsigned char*)"dblac", {203, 157, 0}},
-{(unsigned char*)"dcaron", {196, 143, 0}},
-{(unsigned char*)"dcy", {208, 180, 0}},
-{(unsigned char*)"dd", {226, 133, 134, 0}},
-{(unsigned char*)"ddagger", {226, 128, 161, 0}},
-{(unsigned char*)"ddarr", {226, 135, 138, 0}},
-{(unsigned char*)"ddotseq", {226, 169, 183, 0}},
-{(unsigned char*)"deg", {194, 176, 0}},
-{(unsigned char*)"delta", {206, 180, 0}},
-{(unsigned char*)"demptyv", {226, 166, 177, 0}},
-{(unsigned char*)"dfisht", {226, 165, 191, 0}},
-{(unsigned char*)"dfr", {240, 157, 148, 161, 0}},
-{(unsigned char*)"dharl", {226, 135, 131, 0}},
-{(unsigned char*)"dharr", {226, 135, 130, 0}},
-{(unsigned char*)"diam", {226, 139, 132, 0}},
-{(unsigned char*)"diamond", {226, 139, 132, 0}},
-{(unsigned char*)"diamondsuit", {226, 153, 166, 0}},
-{(unsigned char*)"diams", {226, 153, 166, 0}},
-{(unsigned char*)"die", {194, 168, 0}},
-{(unsigned char*)"digamma", {207, 157, 0}},
-{(unsigned char*)"disin", {226, 139, 178, 0}},
-{(unsigned char*)"div", {195, 183, 0}},
-{(unsigned char*)"divide", {195, 183, 0}},
-{(unsigned char*)"divideontimes", {226, 139, 135, 0}},
-{(unsigned char*)"divonx", {226, 139, 135, 0}},
-{(unsigned char*)"djcy", {209, 146, 0}},
-{(unsigned char*)"dlcorn", {226, 140, 158, 0}},
-{(unsigned char*)"dlcrop", {226, 140, 141, 0}},
-{(unsigned char*)"dollar", {36, 0}},
-{(unsigned char*)"dopf", {240, 157, 149, 149, 0}},
-{(unsigned char*)"dot", {203, 153, 0}},
-{(unsigned char*)"doteq", {226, 137, 144, 0}},
-{(unsigned char*)"doteqdot", {226, 137, 145, 0}},
-{(unsigned char*)"dotminus", {226, 136, 184, 0}},
-{(unsigned char*)"dotplus", {226, 136, 148, 0}},
-{(unsigned char*)"dotsquare", {226, 138, 161, 0}},
-{(unsigned char*)"doublebarwedge", {226, 140, 134, 0}},
-{(unsigned char*)"downarrow", {226, 134, 147, 0}},
-{(unsigned char*)"downdownarrows", {226, 135, 138, 0}},
-{(unsigned char*)"downharpoonleft", {226, 135, 131, 0}},
-{(unsigned char*)"downharpoonright", {226, 135, 130, 0}},
-{(unsigned char*)"drbkarow", {226, 164, 144, 0}},
-{(unsigned char*)"drcorn", {226, 140, 159, 0}},
-{(unsigned char*)"drcrop", {226, 140, 140, 0}},
-{(unsigned char*)"dscr", {240, 157, 146, 185, 0}},
-{(unsigned char*)"dscy", {209, 149, 0}},
-{(unsigned char*)"dsol", {226, 167, 182, 0}},
-{(unsigned char*)"dstrok", {196, 145, 0}},
-{(unsigned char*)"dtdot", {226, 139, 177, 0}},
-{(unsigned char*)"dtri", {226, 150, 191, 0}},
-{(unsigned char*)"dtrif", {226, 150, 190, 0}},
-{(unsigned char*)"duarr", {226, 135, 181, 0}},
-{(unsigned char*)"duhar", {226, 165, 175, 0}},
-{(unsigned char*)"dwangle", {226, 166, 166, 0}},
-{(unsigned char*)"dzcy", {209, 159, 0}},
-{(unsigned char*)"dzigrarr", {226, 159, 191, 0}},
-{(unsigned char*)"eDDot", {226, 169, 183, 0}},
-{(unsigned char*)"eDot", {226, 137, 145, 0}},
-{(unsigned char*)"eacute", {195, 169, 0}},
-{(unsigned char*)"easter", {226, 169, 174, 0}},
-{(unsigned char*)"ecaron", {196, 155, 0}},
-{(unsigned char*)"ecir", {226, 137, 150, 0}},
-{(unsigned char*)"ecirc", {195, 170, 0}},
-{(unsigned char*)"ecolon", {226, 137, 149, 0}},
-{(unsigned char*)"ecy", {209, 141, 0}},
-{(unsigned char*)"edot", {196, 151, 0}},
-{(unsigned char*)"ee", {226, 133, 135, 0}},
-{(unsigned char*)"efDot", {226, 137, 146, 0}},
-{(unsigned char*)"efr", {240, 157, 148, 162, 0}},
-{(unsigned char*)"eg", {226, 170, 154, 0}},
-{(unsigned char*)"egrave", {195, 168, 0}},
-{(unsigned char*)"egs", {226, 170, 150, 0}},
-{(unsigned char*)"egsdot", {226, 170, 152, 0}},
-{(unsigned char*)"el", {226, 170, 153, 0}},
-{(unsigned char*)"elinters", {226, 143, 167, 0}},
-{(unsigned char*)"ell", {226, 132, 147, 0}},
-{(unsigned char*)"els", {226, 170, 149, 0}},
-{(unsigned char*)"elsdot", {226, 170, 151, 0}},
-{(unsigned char*)"emacr", {196, 147, 0}},
-{(unsigned char*)"empty", {226, 136, 133, 0}},
-{(unsigned char*)"emptyset", {226, 136, 133, 0}},
-{(unsigned char*)"emptyv", {226, 136, 133, 0}},
-{(unsigned char*)"emsp", {226, 128, 131, 0}},
-{(unsigned char*)"emsp13", {226, 128, 132, 0}},
-{(unsigned char*)"emsp14", {226, 128, 133, 0}},
-{(unsigned char*)"eng", {197, 139, 0}},
-{(unsigned char*)"ensp", {226, 128, 130, 0}},
-{(unsigned char*)"eogon", {196, 153, 0}},
-{(unsigned char*)"eopf", {240, 157, 149, 150, 0}},
-{(unsigned char*)"epar", {226, 139, 149, 0}},
-{(unsigned char*)"eparsl", {226, 167, 163, 0}},
-{(unsigned char*)"eplus", {226, 169, 177, 0}},
-{(unsigned char*)"epsi", {206, 181, 0}},
-{(unsigned char*)"epsilon", {206, 181, 0}},
-{(unsigned char*)"epsiv", {207, 181, 0}},
-{(unsigned char*)"eqcirc", {226, 137, 150, 0}},
-{(unsigned char*)"eqcolon", {226, 137, 149, 0}},
-{(unsigned char*)"eqsim", {226, 137, 130, 0}},
-{(unsigned char*)"eqslantgtr", {226, 170, 150, 0}},
-{(unsigned char*)"eqslantless", {226, 170, 149, 0}},
-{(unsigned char*)"equals", {61, 0}},
-{(unsigned char*)"equest", {226, 137, 159, 0}},
-{(unsigned char*)"equiv", {226, 137, 161, 0}},
-{(unsigned char*)"equivDD", {226, 169, 184, 0}},
-{(unsigned char*)"eqvparsl", {226, 167, 165, 0}},
-{(unsigned char*)"erDot", {226, 137, 147, 0}},
-{(unsigned char*)"erarr", {226, 165, 177, 0}},
-{(unsigned char*)"escr", {226, 132, 175, 0}},
-{(unsigned char*)"esdot", {226, 137, 144, 0}},
-{(unsigned char*)"esim", {226, 137, 130, 0}},
-{(unsigned char*)"eta", {206, 183, 0}},
-{(unsigned char*)"eth", {195, 176, 0}},
-{(unsigned char*)"euml", {195, 171, 0}},
-{(unsigned char*)"euro", {226, 130, 172, 0}},
-{(unsigned char*)"excl", {33, 0}},
-{(unsigned char*)"exist", {226, 136, 131, 0}},
-{(unsigned char*)"expectation", {226, 132, 176, 0}},
-{(unsigned char*)"exponentiale", {226, 133, 135, 0}},
-{(unsigned char*)"fallingdotseq", {226, 137, 146, 0}},
-{(unsigned char*)"fcy", {209, 132, 0}},
-{(unsigned char*)"female", {226, 153, 128, 0}},
-{(unsigned char*)"ffilig", {239, 172, 131, 0}},
-{(unsigned char*)"fflig", {239, 172, 128, 0}},
-{(unsigned char*)"ffllig", {239, 172, 132, 0}},
-{(unsigned char*)"ffr", {240, 157, 148, 163, 0}},
-{(unsigned char*)"filig", {239, 172, 129, 0}},
-{(unsigned char*)"fjlig", {102, 106, 0}},
-{(unsigned char*)"flat", {226, 153, 173, 0}},
-{(unsigned char*)"fllig", {239, 172, 130, 0}},
-{(unsigned char*)"fltns", {226, 150, 177, 0}},
-{(unsigned char*)"fnof", {198, 146, 0}},
-{(unsigned char*)"fopf", {240, 157, 149, 151, 0}},
-{(unsigned char*)"forall", {226, 136, 128, 0}},
-{(unsigned char*)"fork", {226, 139, 148, 0}},
-{(unsigned char*)"forkv", {226, 171, 153, 0}},
-{(unsigned char*)"fpartint", {226, 168, 141, 0}},
-{(unsigned char*)"frac12", {194, 189, 0}},
-{(unsigned char*)"frac13", {226, 133, 147, 0}},
-{(unsigned char*)"frac14", {194, 188, 0}},
-{(unsigned char*)"frac15", {226, 133, 149, 0}},
-{(unsigned char*)"frac16", {226, 133, 153, 0}},
-{(unsigned char*)"frac18", {226, 133, 155, 0}},
-{(unsigned char*)"frac23", {226, 133, 148, 0}},
-{(unsigned char*)"frac25", {226, 133, 150, 0}},
-{(unsigned char*)"frac34", {194, 190, 0}},
-{(unsigned char*)"frac35", {226, 133, 151, 0}},
-{(unsigned char*)"frac38", {226, 133, 156, 0}},
-{(unsigned char*)"frac45", {226, 133, 152, 0}},
-{(unsigned char*)"frac56", {226, 133, 154, 0}},
-{(unsigned char*)"frac58", {226, 133, 157, 0}},
-{(unsigned char*)"frac78", {226, 133, 158, 0}},
-{(unsigned char*)"frasl", {226, 129, 132, 0}},
-{(unsigned char*)"frown", {226, 140, 162, 0}},
-{(unsigned char*)"fscr", {240, 157, 146, 187, 0}},
-{(unsigned char*)"gE", {226, 137, 167, 0}},
-{(unsigned char*)"gEl", {226, 170, 140, 0}},
-{(unsigned char*)"gacute", {199, 181, 0}},
-{(unsigned char*)"gamma", {206, 179, 0}},
-{(unsigned char*)"gammad", {207, 157, 0}},
-{(unsigned char*)"gap", {226, 170, 134, 0}},
-{(unsigned char*)"gbreve", {196, 159, 0}},
-{(unsigned char*)"gcirc", {196, 157, 0}},
-{(unsigned char*)"gcy", {208, 179, 0}},
-{(unsigned char*)"gdot", {196, 161, 0}},
-{(unsigned char*)"ge", {226, 137, 165, 0}},
-{(unsigned char*)"gel", {226, 139, 155, 0}},
-{(unsigned char*)"geq", {226, 137, 165, 0}},
-{(unsigned char*)"geqq", {226, 137, 167, 0}},
-{(unsigned char*)"geqslant", {226, 169, 190, 0}},
-{(unsigned char*)"ges", {226, 169, 190, 0}},
-{(unsigned char*)"gescc", {226, 170, 169, 0}},
-{(unsigned char*)"gesdot", {226, 170, 128, 0}},
-{(unsigned char*)"gesdoto", {226, 170, 130, 0}},
-{(unsigned char*)"gesdotol", {226, 170, 132, 0}},
-{(unsigned char*)"gesl", {226, 139, 155, 239, 184, 128, 0}},
-{(unsigned char*)"gesles", {226, 170, 148, 0}},
-{(unsigned char*)"gfr", {240, 157, 148, 164, 0}},
-{(unsigned char*)"gg", {226, 137, 171, 0}},
-{(unsigned char*)"ggg", {226, 139, 153, 0}},
-{(unsigned char*)"gimel", {226, 132, 183, 0}},
-{(unsigned char*)"gjcy", {209, 147, 0}},
-{(unsigned char*)"gl", {226, 137, 183, 0}},
-{(unsigned char*)"glE", {226, 170, 146, 0}},
-{(unsigned char*)"gla", {226, 170, 165, 0}},
-{(unsigned char*)"glj", {226, 170, 164, 0}},
-{(unsigned char*)"gnE", {226, 137, 169, 0}},
-{(unsigned char*)"gnap", {226, 170, 138, 0}},
-{(unsigned char*)"gnapprox", {226, 170, 138, 0}},
-{(unsigned char*)"gne", {226, 170, 136, 0}},
-{(unsigned char*)"gneq", {226, 170, 136, 0}},
-{(unsigned char*)"gneqq", {226, 137, 169, 0}},
-{(unsigned char*)"gnsim", {226, 139, 167, 0}},
-{(unsigned char*)"gopf", {240, 157, 149, 152, 0}},
-{(unsigned char*)"grave", {96, 0}},
-{(unsigned char*)"gscr", {226, 132, 138, 0}},
-{(unsigned char*)"gsim", {226, 137, 179, 0}},
-{(unsigned char*)"gsime", {226, 170, 142, 0}},
-{(unsigned char*)"gsiml", {226, 170, 144, 0}},
-{(unsigned char*)"gt", {62, 0}},
-{(unsigned char*)"gtcc", {226, 170, 167, 0}},
-{(unsigned char*)"gtcir", {226, 169, 186, 0}},
-{(unsigned char*)"gtdot", {226, 139, 151, 0}},
-{(unsigned char*)"gtlPar", {226, 166, 149, 0}},
-{(unsigned char*)"gtquest", {226, 169, 188, 0}},
-{(unsigned char*)"gtrapprox", {226, 170, 134, 0}},
-{(unsigned char*)"gtrarr", {226, 165, 184, 0}},
-{(unsigned char*)"gtrdot", {226, 139, 151, 0}},
-{(unsigned char*)"gtreqless", {226, 139, 155, 0}},
-{(unsigned char*)"gtreqqless", {226, 170, 140, 0}},
-{(unsigned char*)"gtrless", {226, 137, 183, 0}},
-{(unsigned char*)"gtrsim", {226, 137, 179, 0}},
-{(unsigned char*)"gvertneqq", {226, 137, 169, 239, 184, 128, 0}},
-{(unsigned char*)"gvnE", {226, 137, 169, 239, 184, 128, 0}},
-{(unsigned char*)"hArr", {226, 135, 148, 0}},
-{(unsigned char*)"hairsp", {226, 128, 138, 0}},
-{(unsigned char*)"half", {194, 189, 0}},
-{(unsigned char*)"hamilt", {226, 132, 139, 0}},
-{(unsigned char*)"hardcy", {209, 138, 0}},
-{(unsigned char*)"harr", {226, 134, 148, 0}},
-{(unsigned char*)"harrcir", {226, 165, 136, 0}},
-{(unsigned char*)"harrw", {226, 134, 173, 0}},
-{(unsigned char*)"hbar", {226, 132, 143, 0}},
-{(unsigned char*)"hcirc", {196, 165, 0}},
-{(unsigned char*)"hearts", {226, 153, 165, 0}},
-{(unsigned char*)"heartsuit", {226, 153, 165, 0}},
-{(unsigned char*)"hellip", {226, 128, 166, 0}},
-{(unsigned char*)"hercon", {226, 138, 185, 0}},
-{(unsigned char*)"hfr", {240, 157, 148, 165, 0}},
-{(unsigned char*)"hksearow", {226, 164, 165, 0}},
-{(unsigned char*)"hkswarow", {226, 164, 166, 0}},
-{(unsigned char*)"hoarr", {226, 135, 191, 0}},
-{(unsigned char*)"homtht", {226, 136, 187, 0}},
-{(unsigned char*)"hookleftarrow", {226, 134, 169, 0}},
-{(unsigned char*)"hookrightarrow", {226, 134, 170, 0}},
-{(unsigned char*)"hopf", {240, 157, 149, 153, 0}},
-{(unsigned char*)"horbar", {226, 128, 149, 0}},
-{(unsigned char*)"hscr", {240, 157, 146, 189, 0}},
-{(unsigned char*)"hslash", {226, 132, 143, 0}},
-{(unsigned char*)"hstrok", {196, 167, 0}},
-{(unsigned char*)"hybull", {226, 129, 131, 0}},
-{(unsigned char*)"hyphen", {226, 128, 144, 0}},
-{(unsigned char*)"iacute", {195, 173, 0}},
-{(unsigned char*)"ic", {226, 129, 163, 0}},
-{(unsigned char*)"icirc", {195, 174, 0}},
-{(unsigned char*)"icy", {208, 184, 0}},
-{(unsigned char*)"iecy", {208, 181, 0}},
-{(unsigned char*)"iexcl", {194, 161, 0}},
-{(unsigned char*)"iff", {226, 135, 148, 0}},
-{(unsigned char*)"ifr", {240, 157, 148, 166, 0}},
-{(unsigned char*)"igrave", {195, 172, 0}},
-{(unsigned char*)"ii", {226, 133, 136, 0}},
-{(unsigned char*)"iiiint", {226, 168, 140, 0}},
-{(unsigned char*)"iiint", {226, 136, 173, 0}},
-{(unsigned char*)"iinfin", {226, 167, 156, 0}},
-{(unsigned char*)"iiota", {226, 132, 169, 0}},
-{(unsigned char*)"ijlig", {196, 179, 0}},
-{(unsigned char*)"imacr", {196, 171, 0}},
-{(unsigned char*)"image", {226, 132, 145, 0}},
-{(unsigned char*)"imagline", {226, 132, 144, 0}},
-{(unsigned char*)"imagpart", {226, 132, 145, 0}},
-{(unsigned char*)"imath", {196, 177, 0}},
-{(unsigned char*)"imof", {226, 138, 183, 0}},
-{(unsigned char*)"imped", {198, 181, 0}},
-{(unsigned char*)"in", {226, 136, 136, 0}},
-{(unsigned char*)"incare", {226, 132, 133, 0}},
-{(unsigned char*)"infin", {226, 136, 158, 0}},
-{(unsigned char*)"infintie", {226, 167, 157, 0}},
-{(unsigned char*)"inodot", {196, 177, 0}},
-{(unsigned char*)"int", {226, 136, 171, 0}},
-{(unsigned char*)"intcal", {226, 138, 186, 0}},
-{(unsigned char*)"integers", {226, 132, 164, 0}},
-{(unsigned char*)"intercal", {226, 138, 186, 0}},
-{(unsigned char*)"intlarhk", {226, 168, 151, 0}},
-{(unsigned char*)"intprod", {226, 168, 188, 0}},
-{(unsigned char*)"iocy", {209, 145, 0}},
-{(unsigned char*)"iogon", {196, 175, 0}},
-{(unsigned char*)"iopf", {240, 157, 149, 154, 0}},
-{(unsigned char*)"iota", {206, 185, 0}},
-{(unsigned char*)"iprod", {226, 168, 188, 0}},
-{(unsigned char*)"iquest", {194, 191, 0}},
-{(unsigned char*)"iscr", {240, 157, 146, 190, 0}},
-{(unsigned char*)"isin", {226, 136, 136, 0}},
-{(unsigned char*)"isinE", {226, 139, 185, 0}},
-{(unsigned char*)"isindot", {226, 139, 181, 0}},
-{(unsigned char*)"isins", {226, 139, 180, 0}},
-{(unsigned char*)"isinsv", {226, 139, 179, 0}},
-{(unsigned char*)"isinv", {226, 136, 136, 0}},
-{(unsigned char*)"it", {226, 129, 162, 0}},
-{(unsigned char*)"itilde", {196, 169, 0}},
-{(unsigned char*)"iukcy", {209, 150, 0}},
-{(unsigned char*)"iuml", {195, 175, 0}},
-{(unsigned char*)"jcirc", {196, 181, 0}},
-{(unsigned char*)"jcy", {208, 185, 0}},
-{(unsigned char*)"jfr", {240, 157, 148, 167, 0}},
-{(unsigned char*)"jmath", {200, 183, 0}},
-{(unsigned char*)"jopf", {240, 157, 149, 155, 0}},
-{(unsigned char*)"jscr", {240, 157, 146, 191, 0}},
-{(unsigned char*)"jsercy", {209, 152, 0}},
-{(unsigned char*)"jukcy", {209, 148, 0}},
-{(unsigned char*)"kappa", {206, 186, 0}},
-{(unsigned char*)"kappav", {207, 176, 0}},
-{(unsigned char*)"kcedil", {196, 183, 0}},
-{(unsigned char*)"kcy", {208, 186, 0}},
-{(unsigned char*)"kfr", {240, 157, 148, 168, 0}},
-{(unsigned char*)"kgreen", {196, 184, 0}},
-{(unsigned char*)"khcy", {209, 133, 0}},
-{(unsigned char*)"kjcy", {209, 156, 0}},
-{(unsigned char*)"kopf", {240, 157, 149, 156, 0}},
-{(unsigned char*)"kscr", {240, 157, 147, 128, 0}},
-{(unsigned char*)"lAarr", {226, 135, 154, 0}},
-{(unsigned char*)"lArr", {226, 135, 144, 0}},
-{(unsigned char*)"lAtail", {226, 164, 155, 0}},
-{(unsigned char*)"lBarr", {226, 164, 142, 0}},
-{(unsigned char*)"lE", {226, 137, 166, 0}},
-{(unsigned char*)"lEg", {226, 170, 139, 0}},
-{(unsigned char*)"lHar", {226, 165, 162, 0}},
-{(unsigned char*)"lacute", {196, 186, 0}},
-{(unsigned char*)"laemptyv", {226, 166, 180, 0}},
-{(unsigned char*)"lagran", {226, 132, 146, 0}},
-{(unsigned char*)"lambda", {206, 187, 0}},
-{(unsigned char*)"lang", {226, 159, 168, 0}},
-{(unsigned char*)"langd", {226, 166, 145, 0}},
-{(unsigned char*)"langle", {226, 159, 168, 0}},
-{(unsigned char*)"lap", {226, 170, 133, 0}},
-{(unsigned char*)"laquo", {194, 171, 0}},
-{(unsigned char*)"larr", {226, 134, 144, 0}},
-{(unsigned char*)"larrb", {226, 135, 164, 0}},
-{(unsigned char*)"larrbfs", {226, 164, 159, 0}},
-{(unsigned char*)"larrfs", {226, 164, 157, 0}},
-{(unsigned char*)"larrhk", {226, 134, 169, 0}},
-{(unsigned char*)"larrlp", {226, 134, 171, 0}},
-{(unsigned char*)"larrpl", {226, 164, 185, 0}},
-{(unsigned char*)"larrsim", {226, 165, 179, 0}},
-{(unsigned char*)"larrtl", {226, 134, 162, 0}},
-{(unsigned char*)"lat", {226, 170, 171, 0}},
-{(unsigned char*)"latail", {226, 164, 153, 0}},
-{(unsigned char*)"late", {226, 170, 173, 0}},
-{(unsigned char*)"lates", {226, 170, 173, 239, 184, 128, 0}},
-{(unsigned char*)"lbarr", {226, 164, 140, 0}},
-{(unsigned char*)"lbbrk", {226, 157, 178, 0}},
-{(unsigned char*)"lbrace", {123, 0}},
-{(unsigned char*)"lbrack", {91, 0}},
-{(unsigned char*)"lbrke", {226, 166, 139, 0}},
-{(unsigned char*)"lbrksld", {226, 166, 143, 0}},
-{(unsigned char*)"lbrkslu", {226, 166, 141, 0}},
-{(unsigned char*)"lcaron", {196, 190, 0}},
-{(unsigned char*)"lcedil", {196, 188, 0}},
-{(unsigned char*)"lceil", {226, 140, 136, 0}},
-{(unsigned char*)"lcub", {123, 0}},
-{(unsigned char*)"lcy", {208, 187, 0}},
-{(unsigned char*)"ldca", {226, 164, 182, 0}},
-{(unsigned char*)"ldquo", {226, 128, 156, 0}},
-{(unsigned char*)"ldquor", {226, 128, 158, 0}},
-{(unsigned char*)"ldrdhar", {226, 165, 167, 0}},
-{(unsigned char*)"ldrushar", {226, 165, 139, 0}},
-{(unsigned char*)"ldsh", {226, 134, 178, 0}},
-{(unsigned char*)"le", {226, 137, 164, 0}},
-{(unsigned char*)"leftarrow", {226, 134, 144, 0}},
-{(unsigned char*)"leftarrowtail", {226, 134, 162, 0}},
-{(unsigned char*)"leftharpoondown", {226, 134, 189, 0}},
-{(unsigned char*)"leftharpoonup", {226, 134, 188, 0}},
-{(unsigned char*)"leftleftarrows", {226, 135, 135, 0}},
-{(unsigned char*)"leftrightarrow", {226, 134, 148, 0}},
-{(unsigned char*)"leftrightarrows", {226, 135, 134, 0}},
-{(unsigned char*)"leftrightharpoons", {226, 135, 139, 0}},
-{(unsigned char*)"leftrightsquigarrow", {226, 134, 173, 0}},
-{(unsigned char*)"leftthreetimes", {226, 139, 139, 0}},
-{(unsigned char*)"leg", {226, 139, 154, 0}},
-{(unsigned char*)"leq", {226, 137, 164, 0}},
-{(unsigned char*)"leqq", {226, 137, 166, 0}},
-{(unsigned char*)"leqslant", {226, 169, 189, 0}},
-{(unsigned char*)"les", {226, 169, 189, 0}},
-{(unsigned char*)"lescc", {226, 170, 168, 0}},
-{(unsigned char*)"lesdot", {226, 169, 191, 0}},
-{(unsigned char*)"lesdoto", {226, 170, 129, 0}},
-{(unsigned char*)"lesdotor", {226, 170, 131, 0}},
-{(unsigned char*)"lesg", {226, 139, 154, 239, 184, 128, 0}},
-{(unsigned char*)"lesges", {226, 170, 147, 0}},
-{(unsigned char*)"lessapprox", {226, 170, 133, 0}},
-{(unsigned char*)"lessdot", {226, 139, 150, 0}},
-{(unsigned char*)"lesseqgtr", {226, 139, 154, 0}},
-{(unsigned char*)"lesseqqgtr", {226, 170, 139, 0}},
-{(unsigned char*)"lessgtr", {226, 137, 182, 0}},
-{(unsigned char*)"lesssim", {226, 137, 178, 0}},
-{(unsigned char*)"lfisht", {226, 165, 188, 0}},
-{(unsigned char*)"lfloor", {226, 140, 138, 0}},
-{(unsigned char*)"lfr", {240, 157, 148, 169, 0}},
-{(unsigned char*)"lg", {226, 137, 182, 0}},
-{(unsigned char*)"lgE", {226, 170, 145, 0}},
-{(unsigned char*)"lhard", {226, 134, 189, 0}},
-{(unsigned char*)"lharu", {226, 134, 188, 0}},
-{(unsigned char*)"lharul", {226, 165, 170, 0}},
-{(unsigned char*)"lhblk", {226, 150, 132, 0}},
-{(unsigned char*)"ljcy", {209, 153, 0}},
-{(unsigned char*)"ll", {226, 137, 170, 0}},
-{(unsigned char*)"llarr", {226, 135, 135, 0}},
-{(unsigned char*)"llcorner", {226, 140, 158, 0}},
-{(unsigned char*)"llhard", {226, 165, 171, 0}},
-{(unsigned char*)"lltri", {226, 151, 186, 0}},
-{(unsigned char*)"lmidot", {197, 128, 0}},
-{(unsigned char*)"lmoust", {226, 142, 176, 0}},
-{(unsigned char*)"lmoustache", {226, 142, 176, 0}},
-{(unsigned char*)"lnE", {226, 137, 168, 0}},
-{(unsigned char*)"lnap", {226, 170, 137, 0}},
-{(unsigned char*)"lnapprox", {226, 170, 137, 0}},
-{(unsigned char*)"lne", {226, 170, 135, 0}},
-{(unsigned char*)"lneq", {226, 170, 135, 0}},
-{(unsigned char*)"lneqq", {226, 137, 168, 0}},
-{(unsigned char*)"lnsim", {226, 139, 166, 0}},
-{(unsigned char*)"loang", {226, 159, 172, 0}},
-{(unsigned char*)"loarr", {226, 135, 189, 0}},
-{(unsigned char*)"lobrk", {226, 159, 166, 0}},
-{(unsigned char*)"longleftarrow", {226, 159, 181, 0}},
-{(unsigned char*)"longleftrightarrow", {226, 159, 183, 0}},
-{(unsigned char*)"longmapsto", {226, 159, 188, 0}},
-{(unsigned char*)"longrightarrow", {226, 159, 182, 0}},
-{(unsigned char*)"looparrowleft", {226, 134, 171, 0}},
-{(unsigned char*)"looparrowright", {226, 134, 172, 0}},
-{(unsigned char*)"lopar", {226, 166, 133, 0}},
-{(unsigned char*)"lopf", {240, 157, 149, 157, 0}},
-{(unsigned char*)"loplus", {226, 168, 173, 0}},
-{(unsigned char*)"lotimes", {226, 168, 180, 0}},
-{(unsigned char*)"lowast", {226, 136, 151, 0}},
-{(unsigned char*)"lowbar", {95, 0}},
-{(unsigned char*)"loz", {226, 151, 138, 0}},
-{(unsigned char*)"lozenge", {226, 151, 138, 0}},
-{(unsigned char*)"lozf", {226, 167, 171, 0}},
-{(unsigned char*)"lpar", {40, 0}},
-{(unsigned char*)"lparlt", {226, 166, 147, 0}},
-{(unsigned char*)"lrarr", {226, 135, 134, 0}},
-{(unsigned char*)"lrcorner", {226, 140, 159, 0}},
-{(unsigned char*)"lrhar", {226, 135, 139, 0}},
-{(unsigned char*)"lrhard", {226, 165, 173, 0}},
-{(unsigned char*)"lrm", {226, 128, 142, 0}},
-{(unsigned char*)"lrtri", {226, 138, 191, 0}},
-{(unsigned char*)"lsaquo", {226, 128, 185, 0}},
-{(unsigned char*)"lscr", {240, 157, 147, 129, 0}},
-{(unsigned char*)"lsh", {226, 134, 176, 0}},
-{(unsigned char*)"lsim", {226, 137, 178, 0}},
-{(unsigned char*)"lsime", {226, 170, 141, 0}},
-{(unsigned char*)"lsimg", {226, 170, 143, 0}},
-{(unsigned char*)"lsqb", {91, 0}},
-{(unsigned char*)"lsquo", {226, 128, 152, 0}},
-{(unsigned char*)"lsquor", {226, 128, 154, 0}},
-{(unsigned char*)"lstrok", {197, 130, 0}},
-{(unsigned char*)"lt", {60, 0}},
-{(unsigned char*)"ltcc", {226, 170, 166, 0}},
-{(unsigned char*)"ltcir", {226, 169, 185, 0}},
-{(unsigned char*)"ltdot", {226, 139, 150, 0}},
-{(unsigned char*)"lthree", {226, 139, 139, 0}},
-{(unsigned char*)"ltimes", {226, 139, 137, 0}},
-{(unsigned char*)"ltlarr", {226, 165, 182, 0}},
-{(unsigned char*)"ltquest", {226, 169, 187, 0}},
-{(unsigned char*)"ltrPar", {226, 166, 150, 0}},
-{(unsigned char*)"ltri", {226, 151, 131, 0}},
-{(unsigned char*)"ltrie", {226, 138, 180, 0}},
-{(unsigned char*)"ltrif", {226, 151, 130, 0}},
-{(unsigned char*)"lurdshar", {226, 165, 138, 0}},
-{(unsigned char*)"luruhar", {226, 165, 166, 0}},
-{(unsigned char*)"lvertneqq", {226, 137, 168, 239, 184, 128, 0}},
-{(unsigned char*)"lvnE", {226, 137, 168, 239, 184, 128, 0}},
-{(unsigned char*)"mDDot", {226, 136, 186, 0}},
-{(unsigned char*)"macr", {194, 175, 0}},
-{(unsigned char*)"male", {226, 153, 130, 0}},
-{(unsigned char*)"malt", {226, 156, 160, 0}},
-{(unsigned char*)"maltese", {226, 156, 160, 0}},
-{(unsigned char*)"map", {226, 134, 166, 0}},
-{(unsigned char*)"mapsto", {226, 134, 166, 0}},
-{(unsigned char*)"mapstodown", {226, 134, 167, 0}},
-{(unsigned char*)"mapstoleft", {226, 134, 164, 0}},
-{(unsigned char*)"mapstoup", {226, 134, 165, 0}},
-{(unsigned char*)"marker", {226, 150, 174, 0}},
-{(unsigned char*)"mcomma", {226, 168, 169, 0}},
-{(unsigned char*)"mcy", {208, 188, 0}},
-{(unsigned char*)"mdash", {226, 128, 148, 0}},
-{(unsigned char*)"measuredangle", {226, 136, 161, 0}},
-{(unsigned char*)"mfr", {240, 157, 148, 170, 0}},
-{(unsigned char*)"mho", {226, 132, 167, 0}},
-{(unsigned char*)"micro", {194, 181, 0}},
-{(unsigned char*)"mid", {226, 136, 163, 0}},
-{(unsigned char*)"midast", {42, 0}},
-{(unsigned char*)"midcir", {226, 171, 176, 0}},
-{(unsigned char*)"middot", {194, 183, 0}},
-{(unsigned char*)"minus", {226, 136, 146, 0}},
-{(unsigned char*)"minusb", {226, 138, 159, 0}},
-{(unsigned char*)"minusd", {226, 136, 184, 0}},
-{(unsigned char*)"minusdu", {226, 168, 170, 0}},
-{(unsigned char*)"mlcp", {226, 171, 155, 0}},
-{(unsigned char*)"mldr", {226, 128, 166, 0}},
-{(unsigned char*)"mnplus", {226, 136, 147, 0}},
-{(unsigned char*)"models", {226, 138, 167, 0}},
-{(unsigned char*)"mopf", {240, 157, 149, 158, 0}},
-{(unsigned char*)"mp", {226, 136, 147, 0}},
-{(unsigned char*)"mscr", {240, 157, 147, 130, 0}},
-{(unsigned char*)"mstpos", {226, 136, 190, 0}},
-{(unsigned char*)"mu", {206, 188, 0}},
-{(unsigned char*)"multimap", {226, 138, 184, 0}},
-{(unsigned char*)"mumap", {226, 138, 184, 0}},
-{(unsigned char*)"nGg", {226, 139, 153, 204, 184, 0}},
-{(unsigned char*)"nGt", {226, 137, 171, 226, 131, 146, 0}},
-{(unsigned char*)"nGtv", {226, 137, 171, 204, 184, 0}},
-{(unsigned char*)"nLeftarrow", {226, 135, 141, 0}},
-{(unsigned char*)"nLeftrightarrow", {226, 135, 142, 0}},
-{(unsigned char*)"nLl", {226, 139, 152, 204, 184, 0}},
-{(unsigned char*)"nLt", {226, 137, 170, 226, 131, 146, 0}},
-{(unsigned char*)"nLtv", {226, 137, 170, 204, 184, 0}},
-{(unsigned char*)"nRightarrow", {226, 135, 143, 0}},
-{(unsigned char*)"nVDash", {226, 138, 175, 0}},
-{(unsigned char*)"nVdash", {226, 138, 174, 0}},
-{(unsigned char*)"nabla", {226, 136, 135, 0}},
-{(unsigned char*)"nacute", {197, 132, 0}},
-{(unsigned char*)"nang", {226, 136, 160, 226, 131, 146, 0}},
-{(unsigned char*)"nap", {226, 137, 137, 0}},
-{(unsigned char*)"napE", {226, 169, 176, 204, 184, 0}},
-{(unsigned char*)"napid", {226, 137, 139, 204, 184, 0}},
-{(unsigned char*)"napos", {197, 137, 0}},
-{(unsigned char*)"napprox", {226, 137, 137, 0}},
-{(unsigned char*)"natur", {226, 153, 174, 0}},
-{(unsigned char*)"natural", {226, 153, 174, 0}},
-{(unsigned char*)"naturals", {226, 132, 149, 0}},
-{(unsigned char*)"nbsp", {194, 160, 0}},
-{(unsigned char*)"nbump", {226, 137, 142, 204, 184, 0}},
-{(unsigned char*)"nbumpe", {226, 137, 143, 204, 184, 0}},
-{(unsigned char*)"ncap", {226, 169, 131, 0}},
-{(unsigned char*)"ncaron", {197, 136, 0}},
-{(unsigned char*)"ncedil", {197, 134, 0}},
-{(unsigned char*)"ncong", {226, 137, 135, 0}},
-{(unsigned char*)"ncongdot", {226, 169, 173, 204, 184, 0}},
-{(unsigned char*)"ncup", {226, 169, 130, 0}},
-{(unsigned char*)"ncy", {208, 189, 0}},
-{(unsigned char*)"ndash", {226, 128, 147, 0}},
-{(unsigned char*)"ne", {226, 137, 160, 0}},
-{(unsigned char*)"neArr", {226, 135, 151, 0}},
-{(unsigned char*)"nearhk", {226, 164, 164, 0}},
-{(unsigned char*)"nearr", {226, 134, 151, 0}},
-{(unsigned char*)"nearrow", {226, 134, 151, 0}},
-{(unsigned char*)"nedot", {226, 137, 144, 204, 184, 0}},
-{(unsigned char*)"nequiv", {226, 137, 162, 0}},
-{(unsigned char*)"nesear", {226, 164, 168, 0}},
-{(unsigned char*)"nesim", {226, 137, 130, 204, 184, 0}},
-{(unsigned char*)"nexist", {226, 136, 132, 0}},
-{(unsigned char*)"nexists", {226, 136, 132, 0}},
-{(unsigned char*)"nfr", {240, 157, 148, 171, 0}},
-{(unsigned char*)"ngE", {226, 137, 167, 204, 184, 0}},
-{(unsigned char*)"nge", {226, 137, 177, 0}},
-{(unsigned char*)"ngeq", {226, 137, 177, 0}},
-{(unsigned char*)"ngeqq", {226, 137, 167, 204, 184, 0}},
-{(unsigned char*)"ngeqslant", {226, 169, 190, 204, 184, 0}},
-{(unsigned char*)"nges", {226, 169, 190, 204, 184, 0}},
-{(unsigned char*)"ngsim", {226, 137, 181, 0}},
-{(unsigned char*)"ngt", {226, 137, 175, 0}},
-{(unsigned char*)"ngtr", {226, 137, 175, 0}},
-{(unsigned char*)"nhArr", {226, 135, 142, 0}},
-{(unsigned char*)"nharr", {226, 134, 174, 0}},
-{(unsigned char*)"nhpar", {226, 171, 178, 0}},
-{(unsigned char*)"ni", {226, 136, 139, 0}},
-{(unsigned char*)"nis", {226, 139, 188, 0}},
-{(unsigned char*)"nisd", {226, 139, 186, 0}},
-{(unsigned char*)"niv", {226, 136, 139, 0}},
-{(unsigned char*)"njcy", {209, 154, 0}},
-{(unsigned char*)"nlArr", {226, 135, 141, 0}},
-{(unsigned char*)"nlE", {226, 137, 166, 204, 184, 0}},
-{(unsigned char*)"nlarr", {226, 134, 154, 0}},
-{(unsigned char*)"nldr", {226, 128, 165, 0}},
-{(unsigned char*)"nle", {226, 137, 176, 0}},
-{(unsigned char*)"nleftarrow", {226, 134, 154, 0}},
-{(unsigned char*)"nleftrightarrow", {226, 134, 174, 0}},
-{(unsigned char*)"nleq", {226, 137, 176, 0}},
-{(unsigned char*)"nleqq", {226, 137, 166, 204, 184, 0}},
-{(unsigned char*)"nleqslant", {226, 169, 189, 204, 184, 0}},
-{(unsigned char*)"nles", {226, 169, 189, 204, 184, 0}},
-{(unsigned char*)"nless", {226, 137, 174, 0}},
-{(unsigned char*)"nlsim", {226, 137, 180, 0}},
-{(unsigned char*)"nlt", {226, 137, 174, 0}},
-{(unsigned char*)"nltri", {226, 139, 170, 0}},
-{(unsigned char*)"nltrie", {226, 139, 172, 0}},
-{(unsigned char*)"nmid", {226, 136, 164, 0}},
-{(unsigned char*)"nopf", {240, 157, 149, 159, 0}},
-{(unsigned char*)"not", {194, 172, 0}},
-{(unsigned char*)"notin", {226, 136, 137, 0}},
-{(unsigned char*)"notinE", {226, 139, 185, 204, 184, 0}},
-{(unsigned char*)"notindot", {226, 139, 181, 204, 184, 0}},
-{(unsigned char*)"notinva", {226, 136, 137, 0}},
-{(unsigned char*)"notinvb", {226, 139, 183, 0}},
-{(unsigned char*)"notinvc", {226, 139, 182, 0}},
-{(unsigned char*)"notni", {226, 136, 140, 0}},
-{(unsigned char*)"notniva", {226, 136, 140, 0}},
-{(unsigned char*)"notnivb", {226, 139, 190, 0}},
-{(unsigned char*)"notnivc", {226, 139, 189, 0}},
-{(unsigned char*)"npar", {226, 136, 166, 0}},
-{(unsigned char*)"nparallel", {226, 136, 166, 0}},
-{(unsigned char*)"nparsl", {226, 171, 189, 226, 131, 165, 0}},
-{(unsigned char*)"npart", {226, 136, 130, 204, 184, 0}},
-{(unsigned char*)"npolint", {226, 168, 148, 0}},
-{(unsigned char*)"npr", {226, 138, 128, 0}},
-{(unsigned char*)"nprcue", {226, 139, 160, 0}},
-{(unsigned char*)"npre", {226, 170, 175, 204, 184, 0}},
-{(unsigned char*)"nprec", {226, 138, 128, 0}},
-{(unsigned char*)"npreceq", {226, 170, 175, 204, 184, 0}},
-{(unsigned char*)"nrArr", {226, 135, 143, 0}},
-{(unsigned char*)"nrarr", {226, 134, 155, 0}},
-{(unsigned char*)"nrarrc", {226, 164, 179, 204, 184, 0}},
-{(unsigned char*)"nrarrw", {226, 134, 157, 204, 184, 0}},
-{(unsigned char*)"nrightarrow", {226, 134, 155, 0}},
-{(unsigned char*)"nrtri", {226, 139, 171, 0}},
-{(unsigned char*)"nrtrie", {226, 139, 173, 0}},
-{(unsigned char*)"nsc", {226, 138, 129, 0}},
-{(unsigned char*)"nsccue", {226, 139, 161, 0}},
-{(unsigned char*)"nsce", {226, 170, 176, 204, 184, 0}},
-{(unsigned char*)"nscr", {240, 157, 147, 131, 0}},
-{(unsigned char*)"nshortmid", {226, 136, 164, 0}},
-{(unsigned char*)"nshortparallel", {226, 136, 166, 0}},
-{(unsigned char*)"nsim", {226, 137, 129, 0}},
-{(unsigned char*)"nsime", {226, 137, 132, 0}},
-{(unsigned char*)"nsimeq", {226, 137, 132, 0}},
-{(unsigned char*)"nsmid", {226, 136, 164, 0}},
-{(unsigned char*)"nspar", {226, 136, 166, 0}},
-{(unsigned char*)"nsqsube", {226, 139, 162, 0}},
-{(unsigned char*)"nsqsupe", {226, 139, 163, 0}},
-{(unsigned char*)"nsub", {226, 138, 132, 0}},
-{(unsigned char*)"nsubE", {226, 171, 133, 204, 184, 0}},
-{(unsigned char*)"nsube", {226, 138, 136, 0}},
-{(unsigned char*)"nsubset", {226, 138, 130, 226, 131, 146, 0}},
-{(unsigned char*)"nsubseteq", {226, 138, 136, 0}},
-{(unsigned char*)"nsubseteqq", {226, 171, 133, 204, 184, 0}},
-{(unsigned char*)"nsucc", {226, 138, 129, 0}},
-{(unsigned char*)"nsucceq", {226, 170, 176, 204, 184, 0}},
-{(unsigned char*)"nsup", {226, 138, 133, 0}},
-{(unsigned char*)"nsupE", {226, 171, 134, 204, 184, 0}},
-{(unsigned char*)"nsupe", {226, 138, 137, 0}},
-{(unsigned char*)"nsupset", {226, 138, 131, 226, 131, 146, 0}},
-{(unsigned char*)"nsupseteq", {226, 138, 137, 0}},
-{(unsigned char*)"nsupseteqq", {226, 171, 134, 204, 184, 0}},
-{(unsigned char*)"ntgl", {226, 137, 185, 0}},
-{(unsigned char*)"ntilde", {195, 177, 0}},
-{(unsigned char*)"ntlg", {226, 137, 184, 0}},
-{(unsigned char*)"ntriangleleft", {226, 139, 170, 0}},
-{(unsigned char*)"ntrianglelefteq", {226, 139, 172, 0}},
-{(unsigned char*)"ntriangleright", {226, 139, 171, 0}},
-{(unsigned char*)"ntrianglerighteq", {226, 139, 173, 0}},
-{(unsigned char*)"nu", {206, 189, 0}},
-{(unsigned char*)"num", {35, 0}},
-{(unsigned char*)"numero", {226, 132, 150, 0}},
-{(unsigned char*)"numsp", {226, 128, 135, 0}},
-{(unsigned char*)"nvDash", {226, 138, 173, 0}},
-{(unsigned char*)"nvHarr", {226, 164, 132, 0}},
-{(unsigned char*)"nvap", {226, 137, 141, 226, 131, 146, 0}},
-{(unsigned char*)"nvdash", {226, 138, 172, 0}},
-{(unsigned char*)"nvge", {226, 137, 165, 226, 131, 146, 0}},
-{(unsigned char*)"nvgt", {62, 226, 131, 146, 0}},
-{(unsigned char*)"nvinfin", {226, 167, 158, 0}},
-{(unsigned char*)"nvlArr", {226, 164, 130, 0}},
-{(unsigned char*)"nvle", {226, 137, 164, 226, 131, 146, 0}},
-{(unsigned char*)"nvlt", {60, 226, 131, 146, 0}},
-{(unsigned char*)"nvltrie", {226, 138, 180, 226, 131, 146, 0}},
-{(unsigned char*)"nvrArr", {226, 164, 131, 0}},
-{(unsigned char*)"nvrtrie", {226, 138, 181, 226, 131, 146, 0}},
-{(unsigned char*)"nvsim", {226, 136, 188, 226, 131, 146, 0}},
-{(unsigned char*)"nwArr", {226, 135, 150, 0}},
-{(unsigned char*)"nwarhk", {226, 164, 163, 0}},
-{(unsigned char*)"nwarr", {226, 134, 150, 0}},
-{(unsigned char*)"nwarrow", {226, 134, 150, 0}},
-{(unsigned char*)"nwnear", {226, 164, 167, 0}},
-{(unsigned char*)"oS", {226, 147, 136, 0}},
-{(unsigned char*)"oacute", {195, 179, 0}},
-{(unsigned char*)"oast", {226, 138, 155, 0}},
-{(unsigned char*)"ocir", {226, 138, 154, 0}},
-{(unsigned char*)"ocirc", {195, 180, 0}},
-{(unsigned char*)"ocy", {208, 190, 0}},
-{(unsigned char*)"odash", {226, 138, 157, 0}},
-{(unsigned char*)"odblac", {197, 145, 0}},
-{(unsigned char*)"odiv", {226, 168, 184, 0}},
-{(unsigned char*)"odot", {226, 138, 153, 0}},
-{(unsigned char*)"odsold", {226, 166, 188, 0}},
-{(unsigned char*)"oelig", {197, 147, 0}},
-{(unsigned char*)"ofcir", {226, 166, 191, 0}},
-{(unsigned char*)"ofr", {240, 157, 148, 172, 0}},
-{(unsigned char*)"ogon", {203, 155, 0}},
-{(unsigned char*)"ograve", {195, 178, 0}},
-{(unsigned char*)"ogt", {226, 167, 129, 0}},
-{(unsigned char*)"ohbar", {226, 166, 181, 0}},
-{(unsigned char*)"ohm", {206, 169, 0}},
-{(unsigned char*)"oint", {226, 136, 174, 0}},
-{(unsigned char*)"olarr", {226, 134, 186, 0}},
-{(unsigned char*)"olcir", {226, 166, 190, 0}},
-{(unsigned char*)"olcross", {226, 166, 187, 0}},
-{(unsigned char*)"oline", {226, 128, 190, 0}},
-{(unsigned char*)"olt", {226, 167, 128, 0}},
-{(unsigned char*)"omacr", {197, 141, 0}},
-{(unsigned char*)"omega", {207, 137, 0}},
-{(unsigned char*)"omicron", {206, 191, 0}},
-{(unsigned char*)"omid", {226, 166, 182, 0}},
-{(unsigned char*)"ominus", {226, 138, 150, 0}},
-{(unsigned char*)"oopf", {240, 157, 149, 160, 0}},
-{(unsigned char*)"opar", {226, 166, 183, 0}},
-{(unsigned char*)"operp", {226, 166, 185, 0}},
-{(unsigned char*)"oplus", {226, 138, 149, 0}},
-{(unsigned char*)"or", {226, 136, 168, 0}},
-{(unsigned char*)"orarr", {226, 134, 187, 0}},
-{(unsigned char*)"ord", {226, 169, 157, 0}},
-{(unsigned char*)"order", {226, 132, 180, 0}},
-{(unsigned char*)"orderof", {226, 132, 180, 0}},
-{(unsigned char*)"ordf", {194, 170, 0}},
-{(unsigned char*)"ordm", {194, 186, 0}},
-{(unsigned char*)"origof", {226, 138, 182, 0}},
-{(unsigned char*)"oror", {226, 169, 150, 0}},
-{(unsigned char*)"orslope", {226, 169, 151, 0}},
-{(unsigned char*)"orv", {226, 169, 155, 0}},
-{(unsigned char*)"oscr", {226, 132, 180, 0}},
-{(unsigned char*)"oslash", {195, 184, 0}},
-{(unsigned char*)"osol", {226, 138, 152, 0}},
-{(unsigned char*)"otilde", {195, 181, 0}},
-{(unsigned char*)"otimes", {226, 138, 151, 0}},
-{(unsigned char*)"otimesas", {226, 168, 182, 0}},
-{(unsigned char*)"ouml", {195, 182, 0}},
-{(unsigned char*)"ovbar", {226, 140, 189, 0}},
-{(unsigned char*)"par", {226, 136, 165, 0}},
-{(unsigned char*)"para", {194, 182, 0}},
-{(unsigned char*)"parallel", {226, 136, 165, 0}},
-{(unsigned char*)"parsim", {226, 171, 179, 0}},
-{(unsigned char*)"parsl", {226, 171, 189, 0}},
-{(unsigned char*)"part", {226, 136, 130, 0}},
-{(unsigned char*)"pcy", {208, 191, 0}},
-{(unsigned char*)"percnt", {37, 0}},
-{(unsigned char*)"period", {46, 0}},
-{(unsigned char*)"permil", {226, 128, 176, 0}},
-{(unsigned char*)"perp", {226, 138, 165, 0}},
-{(unsigned char*)"pertenk", {226, 128, 177, 0}},
-{(unsigned char*)"pfr", {240, 157, 148, 173, 0}},
-{(unsigned char*)"phi", {207, 134, 0}},
-{(unsigned char*)"phiv", {207, 149, 0}},
-{(unsigned char*)"phmmat", {226, 132, 179, 0}},
-{(unsigned char*)"phone", {226, 152, 142, 0}},
-{(unsigned char*)"pi", {207, 128, 0}},
-{(unsigned char*)"pitchfork", {226, 139, 148, 0}},
-{(unsigned char*)"piv", {207, 150, 0}},
-{(unsigned char*)"planck", {226, 132, 143, 0}},
-{(unsigned char*)"planckh", {226, 132, 142, 0}},
-{(unsigned char*)"plankv", {226, 132, 143, 0}},
-{(unsigned char*)"plus", {43, 0}},
-{(unsigned char*)"plusacir", {226, 168, 163, 0}},
-{(unsigned char*)"plusb", {226, 138, 158, 0}},
-{(unsigned char*)"pluscir", {226, 168, 162, 0}},
-{(unsigned char*)"plusdo", {226, 136, 148, 0}},
-{(unsigned char*)"plusdu", {226, 168, 165, 0}},
-{(unsigned char*)"pluse", {226, 169, 178, 0}},
-{(unsigned char*)"plusmn", {194, 177, 0}},
-{(unsigned char*)"plussim", {226, 168, 166, 0}},
-{(unsigned char*)"plustwo", {226, 168, 167, 0}},
-{(unsigned char*)"pm", {194, 177, 0}},
-{(unsigned char*)"pointint", {226, 168, 149, 0}},
-{(unsigned char*)"popf", {240, 157, 149, 161, 0}},
-{(unsigned char*)"pound", {194, 163, 0}},
-{(unsigned char*)"pr", {226, 137, 186, 0}},
-{(unsigned char*)"prE", {226, 170, 179, 0}},
-{(unsigned char*)"prap", {226, 170, 183, 0}},
-{(unsigned char*)"prcue", {226, 137, 188, 0}},
-{(unsigned char*)"pre", {226, 170, 175, 0}},
-{(unsigned char*)"prec", {226, 137, 186, 0}},
-{(unsigned char*)"precapprox", {226, 170, 183, 0}},
-{(unsigned char*)"preccurlyeq", {226, 137, 188, 0}},
-{(unsigned char*)"preceq", {226, 170, 175, 0}},
-{(unsigned char*)"precnapprox", {226, 170, 185, 0}},
-{(unsigned char*)"precneqq", {226, 170, 181, 0}},
-{(unsigned char*)"precnsim", {226, 139, 168, 0}},
-{(unsigned char*)"precsim", {226, 137, 190, 0}},
-{(unsigned char*)"prime", {226, 128, 178, 0}},
-{(unsigned char*)"primes", {226, 132, 153, 0}},
-{(unsigned char*)"prnE", {226, 170, 181, 0}},
-{(unsigned char*)"prnap", {226, 170, 185, 0}},
-{(unsigned char*)"prnsim", {226, 139, 168, 0}},
-{(unsigned char*)"prod", {226, 136, 143, 0}},
-{(unsigned char*)"profalar", {226, 140, 174, 0}},
-{(unsigned char*)"profline", {226, 140, 146, 0}},
-{(unsigned char*)"profsurf", {226, 140, 147, 0}},
-{(unsigned char*)"prop", {226, 136, 157, 0}},
-{(unsigned char*)"propto", {226, 136, 157, 0}},
-{(unsigned char*)"prsim", {226, 137, 190, 0}},
-{(unsigned char*)"prurel", {226, 138, 176, 0}},
-{(unsigned char*)"pscr", {240, 157, 147, 133, 0}},
-{(unsigned char*)"psi", {207, 136, 0}},
-{(unsigned char*)"puncsp", {226, 128, 136, 0}},
-{(unsigned char*)"qfr", {240, 157, 148, 174, 0}},
-{(unsigned char*)"qint", {226, 168, 140, 0}},
-{(unsigned char*)"qopf", {240, 157, 149, 162, 0}},
-{(unsigned char*)"qprime", {226, 129, 151, 0}},
-{(unsigned char*)"qscr", {240, 157, 147, 134, 0}},
-{(unsigned char*)"quaternions", {226, 132, 141, 0}},
-{(unsigned char*)"quatint", {226, 168, 150, 0}},
-{(unsigned char*)"quest", {63, 0}},
-{(unsigned char*)"questeq", {226, 137, 159, 0}},
-{(unsigned char*)"quot", {34, 0}},
-{(unsigned char*)"rAarr", {226, 135, 155, 0}},
-{(unsigned char*)"rArr", {226, 135, 146, 0}},
-{(unsigned char*)"rAtail", {226, 164, 156, 0}},
-{(unsigned char*)"rBarr", {226, 164, 143, 0}},
-{(unsigned char*)"rHar", {226, 165, 164, 0}},
-{(unsigned char*)"race", {226, 136, 189, 204, 177, 0}},
-{(unsigned char*)"racute", {197, 149, 0}},
-{(unsigned char*)"radic", {226, 136, 154, 0}},
-{(unsigned char*)"raemptyv", {226, 166, 179, 0}},
-{(unsigned char*)"rang", {226, 159, 169, 0}},
-{(unsigned char*)"rangd", {226, 166, 146, 0}},
-{(unsigned char*)"range", {226, 166, 165, 0}},
-{(unsigned char*)"rangle", {226, 159, 169, 0}},
-{(unsigned char*)"raquo", {194, 187, 0}},
-{(unsigned char*)"rarr", {226, 134, 146, 0}},
-{(unsigned char*)"rarrap", {226, 165, 181, 0}},
-{(unsigned char*)"rarrb", {226, 135, 165, 0}},
-{(unsigned char*)"rarrbfs", {226, 164, 160, 0}},
-{(unsigned char*)"rarrc", {226, 164, 179, 0}},
-{(unsigned char*)"rarrfs", {226, 164, 158, 0}},
-{(unsigned char*)"rarrhk", {226, 134, 170, 0}},
-{(unsigned char*)"rarrlp", {226, 134, 172, 0}},
-{(unsigned char*)"rarrpl", {226, 165, 133, 0}},
-{(unsigned char*)"rarrsim", {226, 165, 180, 0}},
-{(unsigned char*)"rarrtl", {226, 134, 163, 0}},
-{(unsigned char*)"rarrw", {226, 134, 157, 0}},
-{(unsigned char*)"ratail", {226, 164, 154, 0}},
-{(unsigned char*)"ratio", {226, 136, 182, 0}},
-{(unsigned char*)"rationals", {226, 132, 154, 0}},
-{(unsigned char*)"rbarr", {226, 164, 141, 0}},
-{(unsigned char*)"rbbrk", {226, 157, 179, 0}},
-{(unsigned char*)"rbrace", {125, 0}},
-{(unsigned char*)"rbrack", {93, 0}},
-{(unsigned char*)"rbrke", {226, 166, 140, 0}},
-{(unsigned char*)"rbrksld", {226, 166, 142, 0}},
-{(unsigned char*)"rbrkslu", {226, 166, 144, 0}},
-{(unsigned char*)"rcaron", {197, 153, 0}},
-{(unsigned char*)"rcedil", {197, 151, 0}},
-{(unsigned char*)"rceil", {226, 140, 137, 0}},
-{(unsigned char*)"rcub", {125, 0}},
-{(unsigned char*)"rcy", {209, 128, 0}},
-{(unsigned char*)"rdca", {226, 164, 183, 0}},
-{(unsigned char*)"rdldhar", {226, 165, 169, 0}},
-{(unsigned char*)"rdquo", {226, 128, 157, 0}},
-{(unsigned char*)"rdquor", {226, 128, 157, 0}},
-{(unsigned char*)"rdsh", {226, 134, 179, 0}},
-{(unsigned char*)"real", {226, 132, 156, 0}},
-{(unsigned char*)"realine", {226, 132, 155, 0}},
-{(unsigned char*)"realpart", {226, 132, 156, 0}},
-{(unsigned char*)"reals", {226, 132, 157, 0}},
-{(unsigned char*)"rect", {226, 150, 173, 0}},
-{(unsigned char*)"reg", {194, 174, 0}},
-{(unsigned char*)"rfisht", {226, 165, 189, 0}},
-{(unsigned char*)"rfloor", {226, 140, 139, 0}},
-{(unsigned char*)"rfr", {240, 157, 148, 175, 0}},
-{(unsigned char*)"rhard", {226, 135, 129, 0}},
-{(unsigned char*)"rharu", {226, 135, 128, 0}},
-{(unsigned char*)"rharul", {226, 165, 172, 0}},
-{(unsigned char*)"rho", {207, 129, 0}},
-{(unsigned char*)"rhov", {207, 177, 0}},
-{(unsigned char*)"rightarrow", {226, 134, 146, 0}},
-{(unsigned char*)"rightarrowtail", {226, 134, 163, 0}},
-{(unsigned char*)"rightharpoondown", {226, 135, 129, 0}},
-{(unsigned char*)"rightharpoonup", {226, 135, 128, 0}},
-{(unsigned char*)"rightleftarrows", {226, 135, 132, 0}},
-{(unsigned char*)"rightleftharpoons", {226, 135, 140, 0}},
-{(unsigned char*)"rightrightarrows", {226, 135, 137, 0}},
-{(unsigned char*)"rightsquigarrow", {226, 134, 157, 0}},
-{(unsigned char*)"rightthreetimes", {226, 139, 140, 0}},
-{(unsigned char*)"ring", {203, 154, 0}},
-{(unsigned char*)"risingdotseq", {226, 137, 147, 0}},
-{(unsigned char*)"rlarr", {226, 135, 132, 0}},
-{(unsigned char*)"rlhar", {226, 135, 140, 0}},
-{(unsigned char*)"rlm", {226, 128, 143, 0}},
-{(unsigned char*)"rmoust", {226, 142, 177, 0}},
-{(unsigned char*)"rmoustache", {226, 142, 177, 0}},
-{(unsigned char*)"rnmid", {226, 171, 174, 0}},
-{(unsigned char*)"roang", {226, 159, 173, 0}},
-{(unsigned char*)"roarr", {226, 135, 190, 0}},
-{(unsigned char*)"robrk", {226, 159, 167, 0}},
-{(unsigned char*)"ropar", {226, 166, 134, 0}},
-{(unsigned char*)"ropf", {240, 157, 149, 163, 0}},
-{(unsigned char*)"roplus", {226, 168, 174, 0}},
-{(unsigned char*)"rotimes", {226, 168, 181, 0}},
-{(unsigned char*)"rpar", {41, 0}},
-{(unsigned char*)"rpargt", {226, 166, 148, 0}},
-{(unsigned char*)"rppolint", {226, 168, 146, 0}},
-{(unsigned char*)"rrarr", {226, 135, 137, 0}},
-{(unsigned char*)"rsaquo", {226, 128, 186, 0}},
-{(unsigned char*)"rscr", {240, 157, 147, 135, 0}},
-{(unsigned char*)"rsh", {226, 134, 177, 0}},
-{(unsigned char*)"rsqb", {93, 0}},
-{(unsigned char*)"rsquo", {226, 128, 153, 0}},
-{(unsigned char*)"rsquor", {226, 128, 153, 0}},
-{(unsigned char*)"rthree", {226, 139, 140, 0}},
-{(unsigned char*)"rtimes", {226, 139, 138, 0}},
-{(unsigned char*)"rtri", {226, 150, 185, 0}},
-{(unsigned char*)"rtrie", {226, 138, 181, 0}},
-{(unsigned char*)"rtrif", {226, 150, 184, 0}},
-{(unsigned char*)"rtriltri", {226, 167, 142, 0}},
-{(unsigned char*)"ruluhar", {226, 165, 168, 0}},
-{(unsigned char*)"rx", {226, 132, 158, 0}},
-{(unsigned char*)"sacute", {197, 155, 0}},
-{(unsigned char*)"sbquo", {226, 128, 154, 0}},
-{(unsigned char*)"sc", {226, 137, 187, 0}},
-{(unsigned char*)"scE", {226, 170, 180, 0}},
-{(unsigned char*)"scap", {226, 170, 184, 0}},
-{(unsigned char*)"scaron", {197, 161, 0}},
-{(unsigned char*)"sccue", {226, 137, 189, 0}},
-{(unsigned char*)"sce", {226, 170, 176, 0}},
-{(unsigned char*)"scedil", {197, 159, 0}},
-{(unsigned char*)"scirc", {197, 157, 0}},
-{(unsigned char*)"scnE", {226, 170, 182, 0}},
-{(unsigned char*)"scnap", {226, 170, 186, 0}},
-{(unsigned char*)"scnsim", {226, 139, 169, 0}},
-{(unsigned char*)"scpolint", {226, 168, 147, 0}},
-{(unsigned char*)"scsim", {226, 137, 191, 0}},
-{(unsigned char*)"scy", {209, 129, 0}},
-{(unsigned char*)"sdot", {226, 139, 133, 0}},
-{(unsigned char*)"sdotb", {226, 138, 161, 0}},
-{(unsigned char*)"sdote", {226, 169, 166, 0}},
-{(unsigned char*)"seArr", {226, 135, 152, 0}},
-{(unsigned char*)"searhk", {226, 164, 165, 0}},
-{(unsigned char*)"searr", {226, 134, 152, 0}},
-{(unsigned char*)"searrow", {226, 134, 152, 0}},
-{(unsigned char*)"sect", {194, 167, 0}},
-{(unsigned char*)"semi", {59, 0}},
-{(unsigned char*)"seswar", {226, 164, 169, 0}},
-{(unsigned char*)"setminus", {226, 136, 150, 0}},
-{(unsigned char*)"setmn", {226, 136, 150, 0}},
-{(unsigned char*)"sext", {226, 156, 182, 0}},
-{(unsigned char*)"sfr", {240, 157, 148, 176, 0}},
-{(unsigned char*)"sfrown", {226, 140, 162, 0}},
-{(unsigned char*)"sharp", {226, 153, 175, 0}},
-{(unsigned char*)"shchcy", {209, 137, 0}},
-{(unsigned char*)"shcy", {209, 136, 0}},
-{(unsigned char*)"shortmid", {226, 136, 163, 0}},
-{(unsigned char*)"shortparallel", {226, 136, 165, 0}},
-{(unsigned char*)"shy", {194, 173, 0}},
-{(unsigned char*)"sigma", {207, 131, 0}},
-{(unsigned char*)"sigmaf", {207, 130, 0}},
-{(unsigned char*)"sigmav", {207, 130, 0}},
-{(unsigned char*)"sim", {226, 136, 188, 0}},
-{(unsigned char*)"simdot", {226, 169, 170, 0}},
-{(unsigned char*)"sime", {226, 137, 131, 0}},
-{(unsigned char*)"simeq", {226, 137, 131, 0}},
-{(unsigned char*)"simg", {226, 170, 158, 0}},
-{(unsigned char*)"simgE", {226, 170, 160, 0}},
-{(unsigned char*)"siml", {226, 170, 157, 0}},
-{(unsigned char*)"simlE", {226, 170, 159, 0}},
-{(unsigned char*)"simne", {226, 137, 134, 0}},
-{(unsigned char*)"simplus", {226, 168, 164, 0}},
-{(unsigned char*)"simrarr", {226, 165, 178, 0}},
-{(unsigned char*)"slarr", {226, 134, 144, 0}},
-{(unsigned char*)"smallsetminus", {226, 136, 150, 0}},
-{(unsigned char*)"smashp", {226, 168, 179, 0}},
-{(unsigned char*)"smeparsl", {226, 167, 164, 0}},
-{(unsigned char*)"smid", {226, 136, 163, 0}},
-{(unsigned char*)"smile", {226, 140, 163, 0}},
-{(unsigned char*)"smt", {226, 170, 170, 0}},
-{(unsigned char*)"smte", {226, 170, 172, 0}},
-{(unsigned char*)"smtes", {226, 170, 172, 239, 184, 128, 0}},
-{(unsigned char*)"softcy", {209, 140, 0}},
-{(unsigned char*)"sol", {47, 0}},
-{(unsigned char*)"solb", {226, 167, 132, 0}},
-{(unsigned char*)"solbar", {226, 140, 191, 0}},
-{(unsigned char*)"sopf", {240, 157, 149, 164, 0}},
-{(unsigned char*)"spades", {226, 153, 160, 0}},
-{(unsigned char*)"spadesuit", {226, 153, 160, 0}},
-{(unsigned char*)"spar", {226, 136, 165, 0}},
-{(unsigned char*)"sqcap", {226, 138, 147, 0}},
-{(unsigned char*)"sqcaps", {226, 138, 147, 239, 184, 128, 0}},
-{(unsigned char*)"sqcup", {226, 138, 148, 0}},
-{(unsigned char*)"sqcups", {226, 138, 148, 239, 184, 128, 0}},
-{(unsigned char*)"sqsub", {226, 138, 143, 0}},
-{(unsigned char*)"sqsube", {226, 138, 145, 0}},
-{(unsigned char*)"sqsubset", {226, 138, 143, 0}},
-{(unsigned char*)"sqsubseteq", {226, 138, 145, 0}},
-{(unsigned char*)"sqsup", {226, 138, 144, 0}},
-{(unsigned char*)"sqsupe", {226, 138, 146, 0}},
-{(unsigned char*)"sqsupset", {226, 138, 144, 0}},
-{(unsigned char*)"sqsupseteq", {226, 138, 146, 0}},
-{(unsigned char*)"squ", {226, 150, 161, 0}},
-{(unsigned char*)"square", {226, 150, 161, 0}},
-{(unsigned char*)"squarf", {226, 150, 170, 0}},
-{(unsigned char*)"squf", {226, 150, 170, 0}},
-{(unsigned char*)"srarr", {226, 134, 146, 0}},
-{(unsigned char*)"sscr", {240, 157, 147, 136, 0}},
-{(unsigned char*)"ssetmn", {226, 136, 150, 0}},
-{(unsigned char*)"ssmile", {226, 140, 163, 0}},
-{(unsigned char*)"sstarf", {226, 139, 134, 0}},
-{(unsigned char*)"star", {226, 152, 134, 0}},
-{(unsigned char*)"starf", {226, 152, 133, 0}},
-{(unsigned char*)"straightepsilon", {207, 181, 0}},
-{(unsigned char*)"straightphi", {207, 149, 0}},
-{(unsigned char*)"strns", {194, 175, 0}},
-{(unsigned char*)"sub", {226, 138, 130, 0}},
-{(unsigned char*)"subE", {226, 171, 133, 0}},
-{(unsigned char*)"subdot", {226, 170, 189, 0}},
-{(unsigned char*)"sube", {226, 138, 134, 0}},
-{(unsigned char*)"subedot", {226, 171, 131, 0}},
-{(unsigned char*)"submult", {226, 171, 129, 0}},
-{(unsigned char*)"subnE", {226, 171, 139, 0}},
-{(unsigned char*)"subne", {226, 138, 138, 0}},
-{(unsigned char*)"subplus", {226, 170, 191, 0}},
-{(unsigned char*)"subrarr", {226, 165, 185, 0}},
-{(unsigned char*)"subset", {226, 138, 130, 0}},
-{(unsigned char*)"subseteq", {226, 138, 134, 0}},
-{(unsigned char*)"subseteqq", {226, 171, 133, 0}},
-{(unsigned char*)"subsetneq", {226, 138, 138, 0}},
-{(unsigned char*)"subsetneqq", {226, 171, 139, 0}},
-{(unsigned char*)"subsim", {226, 171, 135, 0}},
-{(unsigned char*)"subsub", {226, 171, 149, 0}},
-{(unsigned char*)"subsup", {226, 171, 147, 0}},
-{(unsigned char*)"succ", {226, 137, 187, 0}},
-{(unsigned char*)"succapprox", {226, 170, 184, 0}},
-{(unsigned char*)"succcurlyeq", {226, 137, 189, 0}},
-{(unsigned char*)"succeq", {226, 170, 176, 0}},
-{(unsigned char*)"succnapprox", {226, 170, 186, 0}},
-{(unsigned char*)"succneqq", {226, 170, 182, 0}},
-{(unsigned char*)"succnsim", {226, 139, 169, 0}},
-{(unsigned char*)"succsim", {226, 137, 191, 0}},
-{(unsigned char*)"sum", {226, 136, 145, 0}},
-{(unsigned char*)"sung", {226, 153, 170, 0}},
-{(unsigned char*)"sup", {226, 138, 131, 0}},
-{(unsigned char*)"sup1", {194, 185, 0}},
-{(unsigned char*)"sup2", {194, 178, 0}},
-{(unsigned char*)"sup3", {194, 179, 0}},
-{(unsigned char*)"supE", {226, 171, 134, 0}},
-{(unsigned char*)"supdot", {226, 170, 190, 0}},
-{(unsigned char*)"supdsub", {226, 171, 152, 0}},
-{(unsigned char*)"supe", {226, 138, 135, 0}},
-{(unsigned char*)"supedot", {226, 171, 132, 0}},
-{(unsigned char*)"suphsol", {226, 159, 137, 0}},
-{(unsigned char*)"suphsub", {226, 171, 151, 0}},
-{(unsigned char*)"suplarr", {226, 165, 187, 0}},
-{(unsigned char*)"supmult", {226, 171, 130, 0}},
-{(unsigned char*)"supnE", {226, 171, 140, 0}},
-{(unsigned char*)"supne", {226, 138, 139, 0}},
-{(unsigned char*)"supplus", {226, 171, 128, 0}},
-{(unsigned char*)"supset", {226, 138, 131, 0}},
-{(unsigned char*)"supseteq", {226, 138, 135, 0}},
-{(unsigned char*)"supseteqq", {226, 171, 134, 0}},
-{(unsigned char*)"supsetneq", {226, 138, 139, 0}},
-{(unsigned char*)"supsetneqq", {226, 171, 140, 0}},
-{(unsigned char*)"supsim", {226, 171, 136, 0}},
-{(unsigned char*)"supsub", {226, 171, 148, 0}},
-{(unsigned char*)"supsup", {226, 171, 150, 0}},
-{(unsigned char*)"swArr", {226, 135, 153, 0}},
-{(unsigned char*)"swarhk", {226, 164, 166, 0}},
-{(unsigned char*)"swarr", {226, 134, 153, 0}},
-{(unsigned char*)"swarrow", {226, 134, 153, 0}},
-{(unsigned char*)"swnwar", {226, 164, 170, 0}},
-{(unsigned char*)"szlig", {195, 159, 0}},
-{(unsigned char*)"target", {226, 140, 150, 0}},
-{(unsigned char*)"tau", {207, 132, 0}},
-{(unsigned char*)"tbrk", {226, 142, 180, 0}},
-{(unsigned char*)"tcaron", {197, 165, 0}},
-{(unsigned char*)"tcedil", {197, 163, 0}},
-{(unsigned char*)"tcy", {209, 130, 0}},
-{(unsigned char*)"tdot", {226, 131, 155, 0}},
-{(unsigned char*)"telrec", {226, 140, 149, 0}},
-{(unsigned char*)"tfr", {240, 157, 148, 177, 0}},
-{(unsigned char*)"there4", {226, 136, 180, 0}},
-{(unsigned char*)"therefore", {226, 136, 180, 0}},
-{(unsigned char*)"theta", {206, 184, 0}},
-{(unsigned char*)"thetasym", {207, 145, 0}},
-{(unsigned char*)"thetav", {207, 145, 0}},
-{(unsigned char*)"thickapprox", {226, 137, 136, 0}},
-{(unsigned char*)"thicksim", {226, 136, 188, 0}},
-{(unsigned char*)"thinsp", {226, 128, 137, 0}},
-{(unsigned char*)"thkap", {226, 137, 136, 0}},
-{(unsigned char*)"thksim", {226, 136, 188, 0}},
-{(unsigned char*)"thorn", {195, 190, 0}},
-{(unsigned char*)"tilde", {203, 156, 0}},
-{(unsigned char*)"times", {195, 151, 0}},
-{(unsigned char*)"timesb", {226, 138, 160, 0}},
-{(unsigned char*)"timesbar", {226, 168, 177, 0}},
-{(unsigned char*)"timesd", {226, 168, 176, 0}},
-{(unsigned char*)"tint", {226, 136, 173, 0}},
-{(unsigned char*)"toea", {226, 164, 168, 0}},
-{(unsigned char*)"top", {226, 138, 164, 0}},
-{(unsigned char*)"topbot", {226, 140, 182, 0}},
-{(unsigned char*)"topcir", {226, 171, 177, 0}},
-{(unsigned char*)"topf", {240, 157, 149, 165, 0}},
-{(unsigned char*)"topfork", {226, 171, 154, 0}},
-{(unsigned char*)"tosa", {226, 164, 169, 0}},
-{(unsigned char*)"tprime", {226, 128, 180, 0}},
-{(unsigned char*)"trade", {226, 132, 162, 0}},
-{(unsigned char*)"triangle", {226, 150, 181, 0}},
-{(unsigned char*)"triangledown", {226, 150, 191, 0}},
-{(unsigned char*)"triangleleft", {226, 151, 131, 0}},
-{(unsigned char*)"trianglelefteq", {226, 138, 180, 0}},
-{(unsigned char*)"triangleq", {226, 137, 156, 0}},
-{(unsigned char*)"triangleright", {226, 150, 185, 0}},
-{(unsigned char*)"trianglerighteq", {226, 138, 181, 0}},
-{(unsigned char*)"tridot", {226, 151, 172, 0}},
-{(unsigned char*)"trie", {226, 137, 156, 0}},
-{(unsigned char*)"triminus", {226, 168, 186, 0}},
-{(unsigned char*)"triplus", {226, 168, 185, 0}},
-{(unsigned char*)"trisb", {226, 167, 141, 0}},
-{(unsigned char*)"tritime", {226, 168, 187, 0}},
-{(unsigned char*)"trpezium", {226, 143, 162, 0}},
-{(unsigned char*)"tscr", {240, 157, 147, 137, 0}},
-{(unsigned char*)"tscy", {209, 134, 0}},
-{(unsigned char*)"tshcy", {209, 155, 0}},
-{(unsigned char*)"tstrok", {197, 167, 0}},
-{(unsigned char*)"twixt", {226, 137, 172, 0}},
-{(unsigned char*)"twoheadleftarrow", {226, 134, 158, 0}},
-{(unsigned char*)"twoheadrightarrow", {226, 134, 160, 0}},
-{(unsigned char*)"uArr", {226, 135, 145, 0}},
-{(unsigned char*)"uHar", {226, 165, 163, 0}},
-{(unsigned char*)"uacute", {195, 186, 0}},
-{(unsigned char*)"uarr", {226, 134, 145, 0}},
-{(unsigned char*)"ubrcy", {209, 158, 0}},
-{(unsigned char*)"ubreve", {197, 173, 0}},
-{(unsigned char*)"ucirc", {195, 187, 0}},
-{(unsigned char*)"ucy", {209, 131, 0}},
-{(unsigned char*)"udarr", {226, 135, 133, 0}},
-{(unsigned char*)"udblac", {197, 177, 0}},
-{(unsigned char*)"udhar", {226, 165, 174, 0}},
-{(unsigned char*)"ufisht", {226, 165, 190, 0}},
-{(unsigned char*)"ufr", {240, 157, 148, 178, 0}},
-{(unsigned char*)"ugrave", {195, 185, 0}},
-{(unsigned char*)"uharl", {226, 134, 191, 0}},
-{(unsigned char*)"uharr", {226, 134, 190, 0}},
-{(unsigned char*)"uhblk", {226, 150, 128, 0}},
-{(unsigned char*)"ulcorn", {226, 140, 156, 0}},
-{(unsigned char*)"ulcorner", {226, 140, 156, 0}},
-{(unsigned char*)"ulcrop", {226, 140, 143, 0}},
-{(unsigned char*)"ultri", {226, 151, 184, 0}},
-{(unsigned char*)"umacr", {197, 171, 0}},
-{(unsigned char*)"uml", {194, 168, 0}},
-{(unsigned char*)"uogon", {197, 179, 0}},
-{(unsigned char*)"uopf", {240, 157, 149, 166, 0}},
-{(unsigned char*)"uparrow", {226, 134, 145, 0}},
-{(unsigned char*)"updownarrow", {226, 134, 149, 0}},
-{(unsigned char*)"upharpoonleft", {226, 134, 191, 0}},
-{(unsigned char*)"upharpoonright", {226, 134, 190, 0}},
-{(unsigned char*)"uplus", {226, 138, 142, 0}},
-{(unsigned char*)"upsi", {207, 133, 0}},
-{(unsigned char*)"upsih", {207, 146, 0}},
-{(unsigned char*)"upsilon", {207, 133, 0}},
-{(unsigned char*)"upuparrows", {226, 135, 136, 0}},
-{(unsigned char*)"urcorn", {226, 140, 157, 0}},
-{(unsigned char*)"urcorner", {226, 140, 157, 0}},
-{(unsigned char*)"urcrop", {226, 140, 142, 0}},
-{(unsigned char*)"uring", {197, 175, 0}},
-{(unsigned char*)"urtri", {226, 151, 185, 0}},
-{(unsigned char*)"uscr", {240, 157, 147, 138, 0}},
-{(unsigned char*)"utdot", {226, 139, 176, 0}},
-{(unsigned char*)"utilde", {197, 169, 0}},
-{(unsigned char*)"utri", {226, 150, 181, 0}},
-{(unsigned char*)"utrif", {226, 150, 180, 0}},
-{(unsigned char*)"uuarr", {226, 135, 136, 0}},
-{(unsigned char*)"uuml", {195, 188, 0}},
-{(unsigned char*)"uwangle", {226, 166, 167, 0}},
-{(unsigned char*)"vArr", {226, 135, 149, 0}},
-{(unsigned char*)"vBar", {226, 171, 168, 0}},
-{(unsigned char*)"vBarv", {226, 171, 169, 0}},
-{(unsigned char*)"vDash", {226, 138, 168, 0}},
-{(unsigned char*)"vangrt", {226, 166, 156, 0}},
-{(unsigned char*)"varepsilon", {207, 181, 0}},
-{(unsigned char*)"varkappa", {207, 176, 0}},
-{(unsigned char*)"varnothing", {226, 136, 133, 0}},
-{(unsigned char*)"varphi", {207, 149, 0}},
-{(unsigned char*)"varpi", {207, 150, 0}},
-{(unsigned char*)"varpropto", {226, 136, 157, 0}},
-{(unsigned char*)"varr", {226, 134, 149, 0}},
-{(unsigned char*)"varrho", {207, 177, 0}},
-{(unsigned char*)"varsigma", {207, 130, 0}},
-{(unsigned char*)"varsubsetneq", {226, 138, 138, 239, 184, 128, 0}},
-{(unsigned char*)"varsubsetneqq", {226, 171, 139, 239, 184, 128, 0}},
-{(unsigned char*)"varsupsetneq", {226, 138, 139, 239, 184, 128, 0}},
-{(unsigned char*)"varsupsetneqq", {226, 171, 140, 239, 184, 128, 0}},
-{(unsigned char*)"vartheta", {207, 145, 0}},
-{(unsigned char*)"vartriangleleft", {226, 138, 178, 0}},
-{(unsigned char*)"vartriangleright", {226, 138, 179, 0}},
-{(unsigned char*)"vcy", {208, 178, 0}},
-{(unsigned char*)"vdash", {226, 138, 162, 0}},
-{(unsigned char*)"vee", {226, 136, 168, 0}},
-{(unsigned char*)"veebar", {226, 138, 187, 0}},
-{(unsigned char*)"veeeq", {226, 137, 154, 0}},
-{(unsigned char*)"vellip", {226, 139, 174, 0}},
-{(unsigned char*)"verbar", {124, 0}},
-{(unsigned char*)"vert", {124, 0}},
-{(unsigned char*)"vfr", {240, 157, 148, 179, 0}},
-{(unsigned char*)"vltri", {226, 138, 178, 0}},
-{(unsigned char*)"vnsub", {226, 138, 130, 226, 131, 146, 0}},
-{(unsigned char*)"vnsup", {226, 138, 131, 226, 131, 146, 0}},
-{(unsigned char*)"vopf", {240, 157, 149, 167, 0}},
-{(unsigned char*)"vprop", {226, 136, 157, 0}},
-{(unsigned char*)"vrtri", {226, 138, 179, 0}},
-{(unsigned char*)"vscr", {240, 157, 147, 139, 0}},
-{(unsigned char*)"vsubnE", {226, 171, 139, 239, 184, 128, 0}},
-{(unsigned char*)"vsubne", {226, 138, 138, 239, 184, 128, 0}},
-{(unsigned char*)"vsupnE", {226, 171, 140, 239, 184, 128, 0}},
-{(unsigned char*)"vsupne", {226, 138, 139, 239, 184, 128, 0}},
-{(unsigned char*)"vzigzag", {226, 166, 154, 0}},
-{(unsigned char*)"wcirc", {197, 181, 0}},
-{(unsigned char*)"wedbar", {226, 169, 159, 0}},
-{(unsigned char*)"wedge", {226, 136, 167, 0}},
-{(unsigned char*)"wedgeq", {226, 137, 153, 0}},
-{(unsigned char*)"weierp", {226, 132, 152, 0}},
-{(unsigned char*)"wfr", {240, 157, 148, 180, 0}},
-{(unsigned char*)"wopf", {240, 157, 149, 168, 0}},
-{(unsigned char*)"wp", {226, 132, 152, 0}},
-{(unsigned char*)"wr", {226, 137, 128, 0}},
-{(unsigned char*)"wreath", {226, 137, 128, 0}},
-{(unsigned char*)"wscr", {240, 157, 147, 140, 0}},
-{(unsigned char*)"xcap", {226, 139, 130, 0}},
-{(unsigned char*)"xcirc", {226, 151, 175, 0}},
-{(unsigned char*)"xcup", {226, 139, 131, 0}},
-{(unsigned char*)"xdtri", {226, 150, 189, 0}},
-{(unsigned char*)"xfr", {240, 157, 148, 181, 0}},
-{(unsigned char*)"xhArr", {226, 159, 186, 0}},
-{(unsigned char*)"xharr", {226, 159, 183, 0}},
-{(unsigned char*)"xi", {206, 190, 0}},
-{(unsigned char*)"xlArr", {226, 159, 184, 0}},
-{(unsigned char*)"xlarr", {226, 159, 181, 0}},
-{(unsigned char*)"xmap", {226, 159, 188, 0}},
-{(unsigned char*)"xnis", {226, 139, 187, 0}},
-{(unsigned char*)"xodot", {226, 168, 128, 0}},
-{(unsigned char*)"xopf", {240, 157, 149, 169, 0}},
-{(unsigned char*)"xoplus", {226, 168, 129, 0}},
-{(unsigned char*)"xotime", {226, 168, 130, 0}},
-{(unsigned char*)"xrArr", {226, 159, 185, 0}},
-{(unsigned char*)"xrarr", {226, 159, 182, 0}},
-{(unsigned char*)"xscr", {240, 157, 147, 141, 0}},
-{(unsigned char*)"xsqcup", {226, 168, 134, 0}},
-{(unsigned char*)"xuplus", {226, 168, 132, 0}},
-{(unsigned char*)"xutri", {226, 150, 179, 0}},
-{(unsigned char*)"xvee", {226, 139, 129, 0}},
-{(unsigned char*)"xwedge", {226, 139, 128, 0}},
-{(unsigned char*)"yacute", {195, 189, 0}},
-{(unsigned char*)"yacy", {209, 143, 0}},
-{(unsigned char*)"ycirc", {197, 183, 0}},
-{(unsigned char*)"ycy", {209, 139, 0}},
-{(unsigned char*)"yen", {194, 165, 0}},
-{(unsigned char*)"yfr", {240, 157, 148, 182, 0}},
-{(unsigned char*)"yicy", {209, 151, 0}},
-{(unsigned char*)"yopf", {240, 157, 149, 170, 0}},
-{(unsigned char*)"yscr", {240, 157, 147, 142, 0}},
-{(unsigned char*)"yucy", {209, 142, 0}},
-{(unsigned char*)"yuml", {195, 191, 0}},
-{(unsigned char*)"zacute", {197, 186, 0}},
-{(unsigned char*)"zcaron", {197, 190, 0}},
-{(unsigned char*)"zcy", {208, 183, 0}},
-{(unsigned char*)"zdot", {197, 188, 0}},
-{(unsigned char*)"zeetrf", {226, 132, 168, 0}},
-{(unsigned char*)"zeta", {206, 182, 0}},
-{(unsigned char*)"zfr", {240, 157, 148, 183, 0}},
-{(unsigned char*)"zhcy", {208, 182, 0}},
-{(unsigned char*)"zigrarr", {226, 135, 157, 0}},
-{(unsigned char*)"zopf", {240, 157, 149, 171, 0}},
-{(unsigned char*)"zscr", {240, 157, 147, 143, 0}},
-{(unsigned char*)"zwj", {226, 128, 141, 0}},
-{(unsigned char*)"zwnj", {226, 128, 140, 0}},
-};
diff --git a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/ext_scanners.c b/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/ext_scanners.c
deleted file mode 100644
index 0d3ba28..0000000
--- a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/ext_scanners.c
+++ /dev/null
@@ -1,879 +0,0 @@
-/* Generated by re2c 1.3 */
-
-#include "ext_scanners.h"
-#include
-
-bufsize_t _ext_scan_at(bufsize_t (*scanner)(const unsigned char *),
- unsigned char *ptr, int len, bufsize_t offset) {
- bufsize_t res;
-
- if (ptr == NULL || offset >= len) {
- return 0;
- } else {
- unsigned char lim = ptr[len];
-
- ptr[len] = '\0';
- res = scanner(ptr + offset);
- ptr[len] = lim;
- }
-
- return res;
-}
-
-bufsize_t _scan_table_start(const unsigned char *p) {
- const unsigned char *marker = NULL;
- const unsigned char *start = p;
-
- {
- unsigned char yych;
- static const unsigned char yybm[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- };
- yych = *p;
- if (yych <= ' ') {
- if (yych <= '\n') {
- if (yych == '\t')
- goto yy4;
- } else {
- if (yych <= '\f')
- goto yy4;
- if (yych >= ' ')
- goto yy4;
- }
- } else {
- if (yych <= '9') {
- if (yych == '-')
- goto yy5;
- } else {
- if (yych <= ':')
- goto yy6;
- if (yych == '|')
- goto yy4;
- }
- }
- ++p;
- yy3 : { return 0; }
- yy4:
- yych = *(marker = ++p);
- if (yybm[0 + yych] & 64) {
- goto yy7;
- }
- if (yych == '-')
- goto yy10;
- if (yych == ':')
- goto yy12;
- goto yy3;
- yy5:
- yych = *(marker = ++p);
- if (yybm[0 + yych] & 128) {
- goto yy10;
- }
- if (yych <= ' ') {
- if (yych <= 0x08)
- goto yy3;
- if (yych <= '\r')
- goto yy14;
- if (yych <= 0x1F)
- goto yy3;
- goto yy14;
- } else {
- if (yych <= ':') {
- if (yych <= '9')
- goto yy3;
- goto yy13;
- } else {
- if (yych == '|')
- goto yy14;
- goto yy3;
- }
- }
- yy6:
- yych = *(marker = ++p);
- if (yybm[0 + yych] & 128) {
- goto yy10;
- }
- goto yy3;
- yy7:
- yych = *++p;
- if (yybm[0 + yych] & 64) {
- goto yy7;
- }
- if (yych == '-')
- goto yy10;
- if (yych == ':')
- goto yy12;
- yy9:
- p = marker;
- goto yy3;
- yy10:
- yych = *++p;
- if (yybm[0 + yych] & 128) {
- goto yy10;
- }
- if (yych <= 0x1F) {
- if (yych <= '\n') {
- if (yych <= 0x08)
- goto yy9;
- if (yych <= '\t')
- goto yy13;
- goto yy15;
- } else {
- if (yych <= '\f')
- goto yy13;
- if (yych <= '\r')
- goto yy17;
- goto yy9;
- }
- } else {
- if (yych <= ':') {
- if (yych <= ' ')
- goto yy13;
- if (yych <= '9')
- goto yy9;
- goto yy13;
- } else {
- if (yych == '|')
- goto yy18;
- goto yy9;
- }
- }
- yy12:
- yych = *++p;
- if (yybm[0 + yych] & 128) {
- goto yy10;
- }
- goto yy9;
- yy13:
- yych = *++p;
- yy14:
- if (yych <= '\r') {
- if (yych <= '\t') {
- if (yych <= 0x08)
- goto yy9;
- goto yy13;
- } else {
- if (yych <= '\n')
- goto yy15;
- if (yych <= '\f')
- goto yy13;
- goto yy17;
- }
- } else {
- if (yych <= ' ') {
- if (yych <= 0x1F)
- goto yy9;
- goto yy13;
- } else {
- if (yych == '|')
- goto yy18;
- goto yy9;
- }
- }
- yy15:
- ++p;
- { return (bufsize_t)(p - start); }
- yy17:
- yych = *++p;
- if (yych == '\n')
- goto yy15;
- goto yy9;
- yy18:
- yych = *++p;
- if (yybm[0 + yych] & 128) {
- goto yy10;
- }
- if (yych <= '\r') {
- if (yych <= '\t') {
- if (yych <= 0x08)
- goto yy9;
- goto yy18;
- } else {
- if (yych <= '\n')
- goto yy15;
- if (yych <= '\f')
- goto yy18;
- goto yy17;
- }
- } else {
- if (yych <= ' ') {
- if (yych <= 0x1F)
- goto yy9;
- goto yy18;
- } else {
- if (yych == ':')
- goto yy12;
- goto yy9;
- }
- }
- }
-}
-
-bufsize_t _scan_table_cell(const unsigned char *p) {
- const unsigned char *marker = NULL;
- const unsigned char *start = p;
-
- {
- unsigned char yych;
- unsigned int yyaccept = 0;
- static const unsigned char yybm[] = {
- 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 0, 64, 64, 0, 64, 64, 64, 64,
- 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
- 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
- 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
- 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
- 64, 64, 128, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
- 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 0, 64,
- 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,
- };
- yych = *p;
- if (yybm[0 + yych] & 64) {
- goto yy22;
- }
- if (yych <= 0xEC) {
- if (yych <= 0xC1) {
- if (yych <= '\r')
- goto yy25;
- if (yych <= '\\')
- goto yy27;
- goto yy25;
- } else {
- if (yych <= 0xDF)
- goto yy29;
- if (yych <= 0xE0)
- goto yy30;
- goto yy31;
- }
- } else {
- if (yych <= 0xF0) {
- if (yych <= 0xED)
- goto yy32;
- if (yych <= 0xEF)
- goto yy31;
- goto yy33;
- } else {
- if (yych <= 0xF3)
- goto yy34;
- if (yych <= 0xF4)
- goto yy35;
- goto yy25;
- }
- }
- yy22:
- yyaccept = 0;
- yych = *(marker = ++p);
- if (yybm[0 + yych] & 64) {
- goto yy22;
- }
- if (yych <= 0xEC) {
- if (yych <= 0xC1) {
- if (yych <= '\r')
- goto yy24;
- if (yych <= '\\')
- goto yy27;
- } else {
- if (yych <= 0xDF)
- goto yy36;
- if (yych <= 0xE0)
- goto yy38;
- goto yy39;
- }
- } else {
- if (yych <= 0xF0) {
- if (yych <= 0xED)
- goto yy40;
- if (yych <= 0xEF)
- goto yy39;
- goto yy41;
- } else {
- if (yych <= 0xF3)
- goto yy42;
- if (yych <= 0xF4)
- goto yy43;
- }
- }
- yy24 : { return (bufsize_t)(p - start); }
- yy25:
- ++p;
- yy26 : { return 0; }
- yy27:
- yyaccept = 0;
- yych = *(marker = ++p);
- if (yybm[0 + yych] & 128) {
- goto yy27;
- }
- if (yych <= 0xDF) {
- if (yych <= '\f') {
- if (yych == '\n')
- goto yy24;
- goto yy22;
- } else {
- if (yych <= '\r')
- goto yy24;
- if (yych <= 0x7F)
- goto yy22;
- if (yych <= 0xC1)
- goto yy24;
- goto yy36;
- }
- } else {
- if (yych <= 0xEF) {
- if (yych <= 0xE0)
- goto yy38;
- if (yych == 0xED)
- goto yy40;
- goto yy39;
- } else {
- if (yych <= 0xF0)
- goto yy41;
- if (yych <= 0xF3)
- goto yy42;
- if (yych <= 0xF4)
- goto yy43;
- goto yy24;
- }
- }
- yy29:
- yych = *++p;
- if (yych <= 0x7F)
- goto yy26;
- if (yych <= 0xBF)
- goto yy22;
- goto yy26;
- yy30:
- yyaccept = 1;
- yych = *(marker = ++p);
- if (yych <= 0x9F)
- goto yy26;
- if (yych <= 0xBF)
- goto yy36;
- goto yy26;
- yy31:
- yyaccept = 1;
- yych = *(marker = ++p);
- if (yych <= 0x7F)
- goto yy26;
- if (yych <= 0xBF)
- goto yy36;
- goto yy26;
- yy32:
- yyaccept = 1;
- yych = *(marker = ++p);
- if (yych <= 0x7F)
- goto yy26;
- if (yych <= 0x9F)
- goto yy36;
- goto yy26;
- yy33:
- yyaccept = 1;
- yych = *(marker = ++p);
- if (yych <= 0x8F)
- goto yy26;
- if (yych <= 0xBF)
- goto yy39;
- goto yy26;
- yy34:
- yyaccept = 1;
- yych = *(marker = ++p);
- if (yych <= 0x7F)
- goto yy26;
- if (yych <= 0xBF)
- goto yy39;
- goto yy26;
- yy35:
- yyaccept = 1;
- yych = *(marker = ++p);
- if (yych <= 0x7F)
- goto yy26;
- if (yych <= 0x8F)
- goto yy39;
- goto yy26;
- yy36:
- yych = *++p;
- if (yych <= 0x7F)
- goto yy37;
- if (yych <= 0xBF)
- goto yy22;
- yy37:
- p = marker;
- if (yyaccept == 0) {
- goto yy24;
- } else {
- goto yy26;
- }
- yy38:
- yych = *++p;
- if (yych <= 0x9F)
- goto yy37;
- if (yych <= 0xBF)
- goto yy36;
- goto yy37;
- yy39:
- yych = *++p;
- if (yych <= 0x7F)
- goto yy37;
- if (yych <= 0xBF)
- goto yy36;
- goto yy37;
- yy40:
- yych = *++p;
- if (yych <= 0x7F)
- goto yy37;
- if (yych <= 0x9F)
- goto yy36;
- goto yy37;
- yy41:
- yych = *++p;
- if (yych <= 0x8F)
- goto yy37;
- if (yych <= 0xBF)
- goto yy39;
- goto yy37;
- yy42:
- yych = *++p;
- if (yych <= 0x7F)
- goto yy37;
- if (yych <= 0xBF)
- goto yy39;
- goto yy37;
- yy43:
- yych = *++p;
- if (yych <= 0x7F)
- goto yy37;
- if (yych <= 0x8F)
- goto yy39;
- goto yy37;
- }
-}
-
-bufsize_t _scan_table_cell_end(const unsigned char *p) {
- const unsigned char *start = p;
-
- {
- unsigned char yych;
- static const unsigned char yybm[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 0, 128, 128, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- };
- yych = *p;
- if (yych == '|')
- goto yy48;
- ++p;
- { return 0; }
- yy48:
- yych = *++p;
- if (yybm[0 + yych] & 128) {
- goto yy48;
- }
- { return (bufsize_t)(p - start); }
- }
-}
-
-bufsize_t _scan_table_row_end(const unsigned char *p) {
- const unsigned char *marker = NULL;
- const unsigned char *start = p;
-
- {
- unsigned char yych;
- static const unsigned char yybm[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 0, 128, 128, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- };
- yych = *p;
- if (yych <= '\f') {
- if (yych <= 0x08)
- goto yy53;
- if (yych == '\n')
- goto yy56;
- goto yy55;
- } else {
- if (yych <= '\r')
- goto yy58;
- if (yych == ' ')
- goto yy55;
- }
- yy53:
- ++p;
- yy54 : { return 0; }
- yy55:
- yych = *(marker = ++p);
- if (yych <= 0x08)
- goto yy54;
- if (yych <= '\r')
- goto yy60;
- if (yych == ' ')
- goto yy60;
- goto yy54;
- yy56:
- ++p;
- { return (bufsize_t)(p - start); }
- yy58:
- yych = *++p;
- if (yych == '\n')
- goto yy56;
- goto yy54;
- yy59:
- yych = *++p;
- yy60:
- if (yybm[0 + yych] & 128) {
- goto yy59;
- }
- if (yych <= 0x08)
- goto yy61;
- if (yych <= '\n')
- goto yy56;
- if (yych <= '\r')
- goto yy62;
- yy61:
- p = marker;
- goto yy54;
- yy62:
- yych = *++p;
- if (yych == '\n')
- goto yy56;
- goto yy61;
- }
-}
-
-bufsize_t _scan_tasklist(const unsigned char *p) {
- const unsigned char *marker = NULL;
- const unsigned char *start = p;
-
- {
- unsigned char yych;
- static const unsigned char yybm[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 64, 64, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- };
- yych = *p;
- if (yych <= ' ') {
- if (yych <= '\n') {
- if (yych == '\t')
- goto yy67;
- } else {
- if (yych <= '\f')
- goto yy67;
- if (yych >= ' ')
- goto yy67;
- }
- } else {
- if (yych <= ',') {
- if (yych <= ')')
- goto yy65;
- if (yych <= '+')
- goto yy68;
- } else {
- if (yych <= '-')
- goto yy68;
- if (yych <= '/')
- goto yy65;
- if (yych <= '9')
- goto yy69;
- }
- }
- yy65:
- ++p;
- yy66 : { return 0; }
- yy67:
- yych = *(marker = ++p);
- if (yybm[0 + yych] & 64) {
- goto yy70;
- }
- if (yych <= ',') {
- if (yych <= ')')
- goto yy66;
- if (yych <= '+')
- goto yy73;
- goto yy66;
- } else {
- if (yych <= '-')
- goto yy73;
- if (yych <= '/')
- goto yy66;
- if (yych <= '9')
- goto yy74;
- goto yy66;
- }
- yy68:
- yych = *(marker = ++p);
- if (yych <= '\n') {
- if (yych == '\t')
- goto yy75;
- goto yy66;
- } else {
- if (yych <= '\f')
- goto yy75;
- if (yych == ' ')
- goto yy75;
- goto yy66;
- }
- yy69:
- yych = *(marker = ++p);
- if (yych <= 0x1F) {
- if (yych <= '\t') {
- if (yych <= 0x08)
- goto yy78;
- goto yy73;
- } else {
- if (yych <= '\n')
- goto yy66;
- if (yych <= '\f')
- goto yy73;
- goto yy78;
- }
- } else {
- if (yych <= 0x7F) {
- if (yych <= ' ')
- goto yy73;
- goto yy78;
- } else {
- if (yych <= 0xC1)
- goto yy66;
- if (yych <= 0xF4)
- goto yy78;
- goto yy66;
- }
- }
- yy70:
- yych = *++p;
- if (yybm[0 + yych] & 64) {
- goto yy70;
- }
- if (yych <= ',') {
- if (yych <= ')')
- goto yy72;
- if (yych <= '+')
- goto yy73;
- } else {
- if (yych <= '-')
- goto yy73;
- if (yych <= '/')
- goto yy72;
- if (yych <= '9')
- goto yy74;
- }
- yy72:
- p = marker;
- goto yy66;
- yy73:
- yych = *++p;
- if (yych == '[')
- goto yy72;
- goto yy76;
- yy74:
- yych = *++p;
- if (yych <= '\n') {
- if (yych == '\t')
- goto yy73;
- goto yy78;
- } else {
- if (yych <= '\f')
- goto yy73;
- if (yych == ' ')
- goto yy73;
- goto yy78;
- }
- yy75:
- yych = *++p;
- yy76:
- if (yych <= '\f') {
- if (yych == '\t')
- goto yy75;
- if (yych <= '\n')
- goto yy72;
- goto yy75;
- } else {
- if (yych <= ' ') {
- if (yych <= 0x1F)
- goto yy72;
- goto yy75;
- } else {
- if (yych == '[')
- goto yy86;
- goto yy72;
- }
- }
- yy77:
- yych = *++p;
- yy78:
- if (yybm[0 + yych] & 128) {
- goto yy77;
- }
- if (yych <= 0xC1) {
- if (yych <= '\f') {
- if (yych <= 0x08)
- goto yy73;
- if (yych == '\n')
- goto yy72;
- goto yy75;
- } else {
- if (yych == ' ')
- goto yy75;
- if (yych <= 0x7F)
- goto yy73;
- goto yy72;
- }
- } else {
- if (yych <= 0xED) {
- if (yych <= 0xDF)
- goto yy79;
- if (yych <= 0xE0)
- goto yy80;
- if (yych <= 0xEC)
- goto yy81;
- goto yy82;
- } else {
- if (yych <= 0xF0) {
- if (yych <= 0xEF)
- goto yy81;
- goto yy83;
- } else {
- if (yych <= 0xF3)
- goto yy84;
- if (yych <= 0xF4)
- goto yy85;
- goto yy72;
- }
- }
- }
- yy79:
- yych = *++p;
- if (yych <= 0x7F)
- goto yy72;
- if (yych <= 0xBF)
- goto yy73;
- goto yy72;
- yy80:
- yych = *++p;
- if (yych <= 0x9F)
- goto yy72;
- if (yych <= 0xBF)
- goto yy79;
- goto yy72;
- yy81:
- yych = *++p;
- if (yych <= 0x7F)
- goto yy72;
- if (yych <= 0xBF)
- goto yy79;
- goto yy72;
- yy82:
- yych = *++p;
- if (yych <= 0x7F)
- goto yy72;
- if (yych <= 0x9F)
- goto yy79;
- goto yy72;
- yy83:
- yych = *++p;
- if (yych <= 0x8F)
- goto yy72;
- if (yych <= 0xBF)
- goto yy81;
- goto yy72;
- yy84:
- yych = *++p;
- if (yych <= 0x7F)
- goto yy72;
- if (yych <= 0xBF)
- goto yy81;
- goto yy72;
- yy85:
- yych = *++p;
- if (yych <= 0x7F)
- goto yy72;
- if (yych <= 0x8F)
- goto yy81;
- goto yy72;
- yy86:
- yych = *++p;
- if (yych <= 'W') {
- if (yych != ' ')
- goto yy72;
- } else {
- if (yych <= 'X')
- goto yy87;
- if (yych != 'x')
- goto yy72;
- }
- yy87:
- yych = *++p;
- if (yych != ']')
- goto yy72;
- yych = *++p;
- if (yych <= '\n') {
- if (yych != '\t')
- goto yy72;
- } else {
- if (yych <= '\f')
- goto yy89;
- if (yych != ' ')
- goto yy72;
- }
- yy89:
- yych = *++p;
- if (yych <= '\n') {
- if (yych == '\t')
- goto yy89;
- } else {
- if (yych <= '\f')
- goto yy89;
- if (yych == ' ')
- goto yy89;
- }
- { return (bufsize_t)(p - start); }
- }
-}
diff --git a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/ext_scanners.h b/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/ext_scanners.h
deleted file mode 100644
index 6dd4a72..0000000
--- a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/ext_scanners.h
+++ /dev/null
@@ -1,24 +0,0 @@
-#include "chunk.h"
-#include "cmark-gfm.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-bufsize_t _ext_scan_at(bufsize_t (*scanner)(const unsigned char *),
- unsigned char *ptr, int len, bufsize_t offset);
-bufsize_t _scan_table_start(const unsigned char *p);
-bufsize_t _scan_table_cell(const unsigned char *p);
-bufsize_t _scan_table_cell_end(const unsigned char *p);
-bufsize_t _scan_table_row_end(const unsigned char *p);
-bufsize_t _scan_tasklist(const unsigned char *p);
-
-#define scan_table_start(c, l, n) _ext_scan_at(&_scan_table_start, c, l, n)
-#define scan_table_cell(c, l, n) _ext_scan_at(&_scan_table_cell, c, l, n)
-#define scan_table_cell_end(c, l, n) _ext_scan_at(&_scan_table_cell_end, c, l, n)
-#define scan_table_row_end(c, l, n) _ext_scan_at(&_scan_table_row_end, c, l, n)
-#define scan_tasklist(c, l, n) _ext_scan_at(&_scan_tasklist, c, l, n)
-
-#ifdef __cplusplus
-}
-#endif
diff --git a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/ext_scanners.o b/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/ext_scanners.o
deleted file mode 100644
index 20dc79d..0000000
Binary files a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/ext_scanners.o and /dev/null differ
diff --git a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/extconf.rb b/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/extconf.rb
deleted file mode 100644
index c64da73..0000000
--- a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/extconf.rb
+++ /dev/null
@@ -1,7 +0,0 @@
-# frozen_string_literal: true
-
-require 'mkmf'
-
-$CFLAGS << ' -std=c99'
-
-create_makefile('commonmarker/commonmarker')
diff --git a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/footnotes.c b/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/footnotes.c
deleted file mode 100644
index c2b745f..0000000
--- a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/footnotes.c
+++ /dev/null
@@ -1,63 +0,0 @@
-#include "cmark-gfm.h"
-#include "parser.h"
-#include "footnotes.h"
-#include "inlines.h"
-#include "chunk.h"
-
-static void footnote_free(cmark_map *map, cmark_map_entry *_ref) {
- cmark_footnote *ref = (cmark_footnote *)_ref;
- cmark_mem *mem = map->mem;
- if (ref != NULL) {
- mem->free(ref->entry.label);
- if (ref->node)
- cmark_node_free(ref->node);
- mem->free(ref);
- }
-}
-
-void cmark_footnote_create(cmark_map *map, cmark_node *node) {
- cmark_footnote *ref;
- unsigned char *reflabel = normalize_map_label(map->mem, &node->as.literal);
-
- /* empty footnote name, or composed from only whitespace */
- if (reflabel == NULL)
- return;
-
- assert(map->sorted == NULL);
-
- ref = (cmark_footnote *)map->mem->calloc(1, sizeof(*ref));
- ref->entry.label = reflabel;
- ref->node = node;
- ref->entry.age = map->size;
- ref->entry.next = map->refs;
-
- map->refs = (cmark_map_entry *)ref;
- map->size++;
-}
-
-cmark_map *cmark_footnote_map_new(cmark_mem *mem) {
- return cmark_map_new(mem, footnote_free);
-}
-
-// Before calling `cmark_map_free` on a map with `cmark_footnotes`, first
-// unlink all of the footnote nodes before freeing their memory.
-//
-// Sometimes, two (unused) footnote nodes can end up referencing each other,
-// which as they get freed up by calling `cmark_map_free` -> `footnote_free` ->
-// etc, can lead to a use-after-free error.
-//
-// Better to `unlink` every footnote node first, setting their next, prev, and
-// parent pointers to NULL, and only then walk thru & free them up.
-void cmark_unlink_footnotes_map(cmark_map *map) {
- cmark_map_entry *ref;
- cmark_map_entry *next;
-
- ref = map->refs;
- while(ref) {
- next = ref->next;
- if (((cmark_footnote *)ref)->node) {
- cmark_node_unlink(((cmark_footnote *)ref)->node);
- }
- ref = next;
- }
-}
diff --git a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/footnotes.h b/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/footnotes.h
deleted file mode 100644
index 64e2901..0000000
--- a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/footnotes.h
+++ /dev/null
@@ -1,27 +0,0 @@
-#ifndef CMARK_FOOTNOTES_H
-#define CMARK_FOOTNOTES_H
-
-#include "map.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-struct cmark_footnote {
- cmark_map_entry entry;
- cmark_node *node;
- unsigned int ix;
-};
-
-typedef struct cmark_footnote cmark_footnote;
-
-void cmark_footnote_create(cmark_map *map, cmark_node *node);
-cmark_map *cmark_footnote_map_new(cmark_mem *mem);
-
-void cmark_unlink_footnotes_map(cmark_map *map);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/footnotes.o b/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/footnotes.o
deleted file mode 100644
index f6698cf..0000000
Binary files a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/footnotes.o and /dev/null differ
diff --git a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/houdini.h b/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/houdini.h
deleted file mode 100644
index 7625b04..0000000
--- a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/houdini.h
+++ /dev/null
@@ -1,57 +0,0 @@
-#ifndef CMARK_HOUDINI_H
-#define CMARK_HOUDINI_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include
-#include "config.h"
-#include "buffer.h"
-
-#ifdef HAVE___BUILTIN_EXPECT
-#define likely(x) __builtin_expect((x), 1)
-#define unlikely(x) __builtin_expect((x), 0)
-#else
-#define likely(x) (x)
-#define unlikely(x) (x)
-#endif
-
-#ifdef HOUDINI_USE_LOCALE
-#define _isxdigit(c) isxdigit(c)
-#define _isdigit(c) isdigit(c)
-#else
-/*
- * Helper _isdigit methods -- do not trust the current locale
- * */
-#define _isxdigit(c) (strchr("0123456789ABCDEFabcdef", (c)) != NULL)
-#define _isdigit(c) ((c) >= '0' && (c) <= '9')
-#endif
-
-#define HOUDINI_ESCAPED_SIZE(x) (((x)*12) / 10)
-#define HOUDINI_UNESCAPED_SIZE(x) (x)
-
-CMARK_GFM_EXPORT
-bufsize_t houdini_unescape_ent(cmark_strbuf *ob, const uint8_t *src,
- bufsize_t size);
-CMARK_GFM_EXPORT
-int houdini_escape_html(cmark_strbuf *ob, const uint8_t *src,
- bufsize_t size);
-CMARK_GFM_EXPORT
-int houdini_escape_html0(cmark_strbuf *ob, const uint8_t *src,
- bufsize_t size, int secure);
-CMARK_GFM_EXPORT
-int houdini_unescape_html(cmark_strbuf *ob, const uint8_t *src,
- bufsize_t size);
-CMARK_GFM_EXPORT
-void houdini_unescape_html_f(cmark_strbuf *ob, const uint8_t *src,
- bufsize_t size);
-CMARK_GFM_EXPORT
-int houdini_escape_href(cmark_strbuf *ob, const uint8_t *src,
- bufsize_t size);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/houdini_href_e.c b/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/houdini_href_e.c
deleted file mode 100644
index 1693891..0000000
--- a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/houdini_href_e.c
+++ /dev/null
@@ -1,100 +0,0 @@
-#include
-#include
-#include
-
-#include "houdini.h"
-
-/*
- * The following characters will not be escaped:
- *
- * -_.+!*'(),%#@?=;:/,+&$~ alphanum
- *
- * Note that this character set is the addition of:
- *
- * - The characters which are safe to be in an URL
- * - The characters which are *not* safe to be in
- * an URL because they are RESERVED characters.
- *
- * We assume (lazily) that any RESERVED char that
- * appears inside an URL is actually meant to
- * have its native function (i.e. as an URL
- * component/separator) and hence needs no escaping.
- *
- * There are two exceptions: the chacters & (amp)
- * and ' (single quote) do not appear in the table.
- * They are meant to appear in the URL as components,
- * yet they require special HTML-entity escaping
- * to generate valid HTML markup.
- *
- * All other characters will be escaped to %XX.
- *
- */
-static const char HREF_SAFE[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1,
- 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-};
-
-int houdini_escape_href(cmark_strbuf *ob, const uint8_t *src, bufsize_t size) {
- static const uint8_t hex_chars[] = "0123456789ABCDEF";
- bufsize_t i = 0, org;
- uint8_t hex_str[3];
-
- hex_str[0] = '%';
-
- while (i < size) {
- org = i;
- while (i < size && HREF_SAFE[src[i]] != 0)
- i++;
-
- if (likely(i > org))
- cmark_strbuf_put(ob, src + org, i - org);
-
- /* escaping */
- if (i >= size)
- break;
-
- switch (src[i]) {
- /* amp appears all the time in URLs, but needs
- * HTML-entity escaping to be inside an href */
- case '&':
- cmark_strbuf_puts(ob, "&");
- break;
-
- /* the single quote is a valid URL character
- * according to the standard; it needs HTML
- * entity escaping too */
- case '\'':
- cmark_strbuf_puts(ob, "'");
- break;
-
-/* the space can be escaped to %20 or a plus
- * sign. we're going with the generic escape
- * for now. the plus thing is more commonly seen
- * when building GET strings */
-#if 0
- case ' ':
- cmark_strbuf_putc(ob, '+');
- break;
-#endif
-
- /* every other character goes with a %XX escaping */
- default:
- hex_str[1] = hex_chars[(src[i] >> 4) & 0xF];
- hex_str[2] = hex_chars[src[i] & 0xF];
- cmark_strbuf_put(ob, hex_str, 3);
- }
-
- i++;
- }
-
- return 1;
-}
diff --git a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/houdini_href_e.o b/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/houdini_href_e.o
deleted file mode 100644
index b066401..0000000
Binary files a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/houdini_href_e.o and /dev/null differ
diff --git a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/houdini_html_e.c b/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/houdini_html_e.c
deleted file mode 100644
index da0b15c..0000000
--- a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/houdini_html_e.c
+++ /dev/null
@@ -1,66 +0,0 @@
-#include
-#include
-#include
-
-#include "houdini.h"
-
-/**
- * According to the OWASP rules:
- *
- * & --> &
- * < --> <
- * > --> >
- * " --> "
- * ' --> ' ' is not recommended
- * / --> / forward slash is included as it helps end an HTML entity
- *
- */
-static const char HTML_ESCAPE_TABLE[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 3, 0, 0, 0, 0, 0, 0, 0, 4,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-};
-
-static const char *HTML_ESCAPES[] = {"", """, "&", "'",
- "/", "<", ">"};
-
-int houdini_escape_html0(cmark_strbuf *ob, const uint8_t *src, bufsize_t size,
- int secure) {
- bufsize_t i = 0, org, esc = 0;
-
- while (i < size) {
- org = i;
- while (i < size && (esc = HTML_ESCAPE_TABLE[src[i]]) == 0)
- i++;
-
- if (i > org)
- cmark_strbuf_put(ob, src + org, i - org);
-
- /* escaping */
- if (unlikely(i >= size))
- break;
-
- /* The forward slash and single quote are only escaped in secure mode */
- if ((src[i] == '/' || src[i] == '\'') && !secure) {
- cmark_strbuf_putc(ob, src[i]);
- } else {
- cmark_strbuf_puts(ob, HTML_ESCAPES[esc]);
- }
-
- i++;
- }
-
- return 1;
-}
-
-int houdini_escape_html(cmark_strbuf *ob, const uint8_t *src, bufsize_t size) {
- return houdini_escape_html0(ob, src, size, 1);
-}
diff --git a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/houdini_html_e.o b/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/houdini_html_e.o
deleted file mode 100644
index 7c48656..0000000
Binary files a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/houdini_html_e.o and /dev/null differ
diff --git a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/houdini_html_u.c b/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/houdini_html_u.c
deleted file mode 100644
index 30d08aa..0000000
--- a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/houdini_html_u.c
+++ /dev/null
@@ -1,149 +0,0 @@
-#include
-#include
-#include
-
-#include "buffer.h"
-#include "houdini.h"
-#include "utf8.h"
-#include "entities.inc"
-
-/* Binary tree lookup code for entities added by JGM */
-
-static const unsigned char *S_lookup(int i, int low, int hi,
- const unsigned char *s, int len) {
- int j;
- int cmp =
- strncmp((const char *)s, (const char *)cmark_entities[i].entity, len);
- if (cmp == 0 && cmark_entities[i].entity[len] == 0) {
- return (const unsigned char *)cmark_entities[i].bytes;
- } else if (cmp <= 0 && i > low) {
- j = i - ((i - low) / 2);
- if (j == i)
- j -= 1;
- return S_lookup(j, low, i - 1, s, len);
- } else if (cmp > 0 && i < hi) {
- j = i + ((hi - i) / 2);
- if (j == i)
- j += 1;
- return S_lookup(j, i + 1, hi, s, len);
- } else {
- return NULL;
- }
-}
-
-static const unsigned char *S_lookup_entity(const unsigned char *s, int len) {
- return S_lookup(CMARK_NUM_ENTITIES / 2, 0, CMARK_NUM_ENTITIES - 1, s, len);
-}
-
-bufsize_t houdini_unescape_ent(cmark_strbuf *ob, const uint8_t *src,
- bufsize_t size) {
- bufsize_t i = 0;
-
- if (size >= 3 && src[0] == '#') {
- int codepoint = 0;
- int num_digits = 0;
-
- if (_isdigit(src[1])) {
- for (i = 1; i < size && _isdigit(src[i]); ++i) {
- codepoint = (codepoint * 10) + (src[i] - '0');
-
- if (codepoint >= 0x110000) {
- // Keep counting digits but
- // avoid integer overflow.
- codepoint = 0x110000;
- }
- }
-
- num_digits = i - 1;
- }
-
- else if (src[1] == 'x' || src[1] == 'X') {
- for (i = 2; i < size && _isxdigit(src[i]); ++i) {
- codepoint = (codepoint * 16) + ((src[i] | 32) % 39 - 9);
-
- if (codepoint >= 0x110000) {
- // Keep counting digits but
- // avoid integer overflow.
- codepoint = 0x110000;
- }
- }
-
- num_digits = i - 2;
- }
-
- if (num_digits >= 1 && num_digits <= 8 && i < size && src[i] == ';') {
- if (codepoint == 0 || (codepoint >= 0xD800 && codepoint < 0xE000) ||
- codepoint >= 0x110000) {
- codepoint = 0xFFFD;
- }
- cmark_utf8proc_encode_char(codepoint, ob);
- return i + 1;
- }
- }
-
- else {
- if (size > CMARK_ENTITY_MAX_LENGTH)
- size = CMARK_ENTITY_MAX_LENGTH;
-
- for (i = CMARK_ENTITY_MIN_LENGTH; i < size; ++i) {
- if (src[i] == ' ')
- break;
-
- if (src[i] == ';') {
- const unsigned char *entity = S_lookup_entity(src, i);
-
- if (entity != NULL) {
- cmark_strbuf_puts(ob, (const char *)entity);
- return i + 1;
- }
-
- break;
- }
- }
- }
-
- return 0;
-}
-
-int houdini_unescape_html(cmark_strbuf *ob, const uint8_t *src,
- bufsize_t size) {
- bufsize_t i = 0, org, ent;
-
- while (i < size) {
- org = i;
- while (i < size && src[i] != '&')
- i++;
-
- if (likely(i > org)) {
- if (unlikely(org == 0)) {
- if (i >= size)
- return 0;
-
- cmark_strbuf_grow(ob, HOUDINI_UNESCAPED_SIZE(size));
- }
-
- cmark_strbuf_put(ob, src + org, i - org);
- }
-
- /* escaping */
- if (i >= size)
- break;
-
- i++;
-
- ent = houdini_unescape_ent(ob, src + i, size - i);
- i += ent;
-
- /* not really an entity */
- if (ent == 0)
- cmark_strbuf_putc(ob, '&');
- }
-
- return 1;
-}
-
-void houdini_unescape_html_f(cmark_strbuf *ob, const uint8_t *src,
- bufsize_t size) {
- if (!houdini_unescape_html(ob, src, size))
- cmark_strbuf_put(ob, src, size);
-}
diff --git a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/houdini_html_u.o b/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/houdini_html_u.o
deleted file mode 100644
index d56bba9..0000000
Binary files a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/houdini_html_u.o and /dev/null differ
diff --git a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/html.c b/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/html.c
deleted file mode 100644
index 22513c9..0000000
--- a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/html.c
+++ /dev/null
@@ -1,502 +0,0 @@
-#include
-#include
-#include
-#include
-#include "cmark_ctype.h"
-#include "config.h"
-#include "cmark-gfm.h"
-#include "houdini.h"
-#include "scanners.h"
-#include "syntax_extension.h"
-#include "html.h"
-#include "render.h"
-
-// Functions to convert cmark_nodes to HTML strings.
-
-static void escape_html(cmark_strbuf *dest, const unsigned char *source,
- bufsize_t length) {
- houdini_escape_html0(dest, source, length, 0);
-}
-
-static void filter_html_block(cmark_html_renderer *renderer, uint8_t *data, size_t len) {
- cmark_strbuf *html = renderer->html;
- cmark_llist *it;
- cmark_syntax_extension *ext;
- bool filtered;
- uint8_t *match;
-
- while (len) {
- match = (uint8_t *) memchr(data, '<', len);
- if (!match)
- break;
-
- if (match != data) {
- cmark_strbuf_put(html, data, (bufsize_t)(match - data));
- len -= (match - data);
- data = match;
- }
-
- filtered = false;
- for (it = renderer->filter_extensions; it; it = it->next) {
- ext = ((cmark_syntax_extension *) it->data);
- if (!ext->html_filter_func(ext, data, len)) {
- filtered = true;
- break;
- }
- }
-
- if (!filtered) {
- cmark_strbuf_putc(html, '<');
- } else {
- cmark_strbuf_puts(html, "<");
- }
-
- ++data;
- --len;
- }
-
- if (len)
- cmark_strbuf_put(html, data, (bufsize_t)len);
-}
-
-static bool S_put_footnote_backref(cmark_html_renderer *renderer, cmark_strbuf *html, cmark_node *node) {
- if (renderer->written_footnote_ix >= renderer->footnote_ix)
- return false;
- renderer->written_footnote_ix = renderer->footnote_ix;
- char m[32];
- snprintf(m, sizeof(m), "%d", renderer->written_footnote_ix);
-
- cmark_strbuf_puts(html, "as.literal.data, node->as.literal.len);
- cmark_strbuf_puts(html, "\" class=\"footnote-backref\" data-footnote-backref data-footnote-backref-idx=\"");
- cmark_strbuf_puts(html, m);
- cmark_strbuf_puts(html, "\" aria-label=\"Back to reference ");
- cmark_strbuf_puts(html, m);
- cmark_strbuf_puts(html, "\">↩");
-
- if (node->footnote.def_count > 1)
- {
- for(int i = 2; i <= node->footnote.def_count; i++) {
- char n[32];
- snprintf(n, sizeof(n), "%d", i);
-
- cmark_strbuf_puts(html, " as.literal.data, node->as.literal.len);
- cmark_strbuf_puts(html, "-");
- cmark_strbuf_puts(html, n);
- cmark_strbuf_puts(html, "\" class=\"footnote-backref\" data-footnote-backref data-footnote-backref-idx=\"");
- cmark_strbuf_puts(html, m);
- cmark_strbuf_puts(html, "-");
- cmark_strbuf_puts(html, n);
- cmark_strbuf_puts(html, "\" aria-label=\"Back to reference ");
- cmark_strbuf_puts(html, m);
- cmark_strbuf_puts(html, "-");
- cmark_strbuf_puts(html, n);
- cmark_strbuf_puts(html, "\">↩");
- cmark_strbuf_puts(html, n);
- cmark_strbuf_puts(html, "");
- }
- }
-
- return true;
-}
-
-static int S_render_node(cmark_html_renderer *renderer, cmark_node *node,
- cmark_event_type ev_type, int options) {
- cmark_node *parent;
- cmark_node *grandparent;
- cmark_strbuf *html = renderer->html;
- cmark_llist *it;
- cmark_syntax_extension *ext;
- char start_heading[] = "plain == node) { // back at original node
- renderer->plain = NULL;
- }
-
- if (renderer->plain != NULL) {
- switch (node->type) {
- case CMARK_NODE_TEXT:
- case CMARK_NODE_CODE:
- case CMARK_NODE_HTML_INLINE:
- escape_html(html, node->as.literal.data, node->as.literal.len);
- break;
-
- case CMARK_NODE_LINEBREAK:
- case CMARK_NODE_SOFTBREAK:
- cmark_strbuf_putc(html, ' ');
- break;
-
- default:
- break;
- }
- return 1;
- }
-
- if (node->extension && node->extension->html_render_func) {
- node->extension->html_render_func(node->extension, renderer, node, ev_type, options);
- return 1;
- }
-
- switch (node->type) {
- case CMARK_NODE_DOCUMENT:
- break;
-
- case CMARK_NODE_BLOCK_QUOTE:
- if (entering) {
- cmark_html_render_cr(html);
- cmark_strbuf_puts(html, "\n");
- } else {
- cmark_html_render_cr(html);
- cmark_strbuf_puts(html, "
\n");
- }
- break;
-
- case CMARK_NODE_LIST: {
- cmark_list_type list_type = node->as.list.list_type;
- int start = node->as.list.start;
-
- if (entering) {
- cmark_html_render_cr(html);
- if (list_type == CMARK_BULLET_LIST) {
- cmark_strbuf_puts(html, "\n");
- } else if (start == 1) {
- cmark_strbuf_puts(html, "\n");
- } else {
- snprintf(buffer, BUFFER_SIZE, "\n");
- }
- } else {
- cmark_strbuf_puts(html,
- list_type == CMARK_BULLET_LIST ? "
\n" : "\n");
- }
- break;
- }
-
- case CMARK_NODE_ITEM:
- if (entering) {
- cmark_html_render_cr(html);
- cmark_strbuf_puts(html, "');
- } else {
- cmark_strbuf_puts(html, " \n");
- }
- break;
-
- case CMARK_NODE_HEADING:
- if (entering) {
- cmark_html_render_cr(html);
- start_heading[2] = (char)('0' + node->as.heading.level);
- cmark_strbuf_puts(html, start_heading);
- cmark_html_render_sourcepos(node, html, options);
- cmark_strbuf_putc(html, '>');
- } else {
- end_heading[3] = (char)('0' + node->as.heading.level);
- cmark_strbuf_puts(html, end_heading);
- cmark_strbuf_puts(html, ">\n");
- }
- break;
-
- case CMARK_NODE_CODE_BLOCK:
- cmark_html_render_cr(html);
-
- if (node->as.code.info.len == 0) {
- cmark_strbuf_puts(html, "");
- } else {
- bufsize_t first_tag = 0;
- while (first_tag < node->as.code.info.len &&
- !cmark_isspace(node->as.code.info.data[first_tag])) {
- first_tag += 1;
- }
-
- if (options & CMARK_OPT_GITHUB_PRE_LANG) {
- cmark_strbuf_puts(html, "as.code.info.data, first_tag);
- if (first_tag < node->as.code.info.len && (options & CMARK_OPT_FULL_INFO_STRING)) {
- cmark_strbuf_puts(html, "\" data-meta=\"");
- escape_html(html, node->as.code.info.data + first_tag + 1, node->as.code.info.len - first_tag - 1);
- }
- cmark_strbuf_puts(html, "\">");
- } else {
- cmark_strbuf_puts(html, "as.code.info.data, first_tag);
- if (first_tag < node->as.code.info.len && (options & CMARK_OPT_FULL_INFO_STRING)) {
- cmark_strbuf_puts(html, "\" data-meta=\"");
- escape_html(html, node->as.code.info.data + first_tag + 1, node->as.code.info.len - first_tag - 1);
- }
- cmark_strbuf_puts(html, "\">");
- }
- }
-
- escape_html(html, node->as.code.literal.data, node->as.code.literal.len);
- cmark_strbuf_puts(html, "
\n");
- break;
-
- case CMARK_NODE_HTML_BLOCK:
- cmark_html_render_cr(html);
- if (!(options & CMARK_OPT_UNSAFE)) {
- cmark_strbuf_puts(html, "");
- } else if (renderer->filter_extensions) {
- filter_html_block(renderer, node->as.literal.data, node->as.literal.len);
- } else {
- cmark_strbuf_put(html, node->as.literal.data, node->as.literal.len);
- }
- cmark_html_render_cr(html);
- break;
-
- case CMARK_NODE_CUSTOM_BLOCK:
- cmark_html_render_cr(html);
- if (entering) {
- cmark_strbuf_put(html, node->as.custom.on_enter.data,
- node->as.custom.on_enter.len);
- } else {
- cmark_strbuf_put(html, node->as.custom.on_exit.data,
- node->as.custom.on_exit.len);
- }
- cmark_html_render_cr(html);
- break;
-
- case CMARK_NODE_THEMATIC_BREAK:
- cmark_html_render_cr(html);
- cmark_strbuf_puts(html, "
\n");
- break;
-
- case CMARK_NODE_PARAGRAPH:
- parent = cmark_node_parent(node);
- grandparent = cmark_node_parent(parent);
- if (grandparent != NULL && grandparent->type == CMARK_NODE_LIST) {
- tight = grandparent->as.list.tight;
- } else {
- tight = false;
- }
- if (!tight) {
- if (entering) {
- cmark_html_render_cr(html);
- cmark_strbuf_puts(html, "');
- } else {
- if (parent->type == CMARK_NODE_FOOTNOTE_DEFINITION && node->next == NULL) {
- cmark_strbuf_putc(html, ' ');
- S_put_footnote_backref(renderer, html, parent);
- }
- cmark_strbuf_puts(html, "
\n");
- }
- }
- break;
-
- case CMARK_NODE_TEXT:
- escape_html(html, node->as.literal.data, node->as.literal.len);
- break;
-
- case CMARK_NODE_LINEBREAK:
- cmark_strbuf_puts(html, "
\n");
- break;
-
- case CMARK_NODE_SOFTBREAK:
- if (options & CMARK_OPT_HARDBREAKS) {
- cmark_strbuf_puts(html, "
\n");
- } else if (options & CMARK_OPT_NOBREAKS) {
- cmark_strbuf_putc(html, ' ');
- } else {
- cmark_strbuf_putc(html, '\n');
- }
- break;
-
- case CMARK_NODE_CODE:
- cmark_strbuf_puts(html, "");
- escape_html(html, node->as.literal.data, node->as.literal.len);
- cmark_strbuf_puts(html, "
");
- break;
-
- case CMARK_NODE_HTML_INLINE:
- if (!(options & CMARK_OPT_UNSAFE)) {
- cmark_strbuf_puts(html, "");
- } else {
- filtered = false;
- for (it = renderer->filter_extensions; it; it = it->next) {
- ext = (cmark_syntax_extension *) it->data;
- if (!ext->html_filter_func(ext, node->as.literal.data, node->as.literal.len)) {
- filtered = true;
- break;
- }
- }
- if (!filtered) {
- cmark_strbuf_put(html, node->as.literal.data, node->as.literal.len);
- } else {
- cmark_strbuf_puts(html, "<");
- cmark_strbuf_put(html, node->as.literal.data + 1, node->as.literal.len - 1);
- }
- }
- break;
-
- case CMARK_NODE_CUSTOM_INLINE:
- if (entering) {
- cmark_strbuf_put(html, node->as.custom.on_enter.data,
- node->as.custom.on_enter.len);
- } else {
- cmark_strbuf_put(html, node->as.custom.on_exit.data,
- node->as.custom.on_exit.len);
- }
- break;
-
- case CMARK_NODE_STRONG:
- if (node->parent == NULL || node->parent->type != CMARK_NODE_STRONG) {
- if (entering) {
- cmark_strbuf_puts(html, "");
- } else {
- cmark_strbuf_puts(html, "");
- }
- }
- break;
-
- case CMARK_NODE_EMPH:
- if (entering) {
- cmark_strbuf_puts(html, "");
- } else {
- cmark_strbuf_puts(html, "");
- }
- break;
-
- case CMARK_NODE_LINK:
- if (entering) {
- cmark_strbuf_puts(html, "as.link.url, 0))) {
- houdini_escape_href(html, node->as.link.url.data,
- node->as.link.url.len);
- }
- if (node->as.link.title.len) {
- cmark_strbuf_puts(html, "\" title=\"");
- escape_html(html, node->as.link.title.data, node->as.link.title.len);
- }
- cmark_strbuf_puts(html, "\">");
- } else {
- cmark_strbuf_puts(html, "");
- }
- break;
-
- case CMARK_NODE_IMAGE:
- if (entering) {
- cmark_strbuf_puts(html, "as.link.url, 0))) {
- houdini_escape_href(html, node->as.link.url.data,
- node->as.link.url.len);
- }
- cmark_strbuf_puts(html, "\" alt=\"");
- renderer->plain = node;
- } else {
- if (node->as.link.title.len) {
- cmark_strbuf_puts(html, "\" title=\"");
- escape_html(html, node->as.link.title.data, node->as.link.title.len);
- }
-
- cmark_strbuf_puts(html, "\" />");
- }
- break;
-
- case CMARK_NODE_FOOTNOTE_DEFINITION:
- if (entering) {
- if (renderer->footnote_ix == 0) {
- cmark_strbuf_puts(html, "\n\n");
- }
- ++renderer->footnote_ix;
-
- cmark_strbuf_puts(html, "- as.literal.data, node->as.literal.len);
- cmark_strbuf_puts(html, "\">\n");
- } else {
- if (S_put_footnote_backref(renderer, html, node)) {
- cmark_strbuf_putc(html, '\n');
- }
- cmark_strbuf_puts(html, "
\n");
- }
- break;
-
- case CMARK_NODE_FOOTNOTE_REFERENCE:
- if (entering) {
- cmark_strbuf_puts(html, "parent_footnote_def->as.literal.data, node->parent_footnote_def->as.literal.len);
- cmark_strbuf_puts(html, "\" id=\"fnref-");
- houdini_escape_href(html, node->parent_footnote_def->as.literal.data, node->parent_footnote_def->as.literal.len);
-
- if (node->footnote.ref_ix > 1) {
- char n[32];
- snprintf(n, sizeof(n), "%d", node->footnote.ref_ix);
- cmark_strbuf_puts(html, "-");
- cmark_strbuf_puts(html, n);
- }
-
- cmark_strbuf_puts(html, "\" data-footnote-ref>");
- houdini_escape_href(html, node->as.literal.data, node->as.literal.len);
- cmark_strbuf_puts(html, "");
- }
- break;
-
- default:
- assert(false);
- break;
- }
-
- return 1;
-}
-
-char *cmark_render_html(cmark_node *root, int options, cmark_llist *extensions) {
- return cmark_render_html_with_mem(root, options, extensions, cmark_node_mem(root));
-}
-
-char *cmark_render_html_with_mem(cmark_node *root, int options, cmark_llist *extensions, cmark_mem *mem) {
- char *result;
- cmark_strbuf html = CMARK_BUF_INIT(mem);
- cmark_event_type ev_type;
- cmark_node *cur;
- cmark_html_renderer renderer = {&html, NULL, NULL, 0, 0, NULL};
- cmark_iter *iter = cmark_iter_new(root);
-
- for (; extensions; extensions = extensions->next)
- if (((cmark_syntax_extension *) extensions->data)->html_filter_func)
- renderer.filter_extensions = cmark_llist_append(
- mem,
- renderer.filter_extensions,
- (cmark_syntax_extension *) extensions->data);
-
- while ((ev_type = cmark_iter_next(iter)) != CMARK_EVENT_DONE) {
- cur = cmark_iter_get_node(iter);
- S_render_node(&renderer, cur, ev_type, options);
- }
-
- if (renderer.footnote_ix) {
- cmark_strbuf_puts(&html, "
\n \n");
- }
-
- result = (char *)cmark_strbuf_detach(&html);
-
- cmark_llist_free(mem, renderer.filter_extensions);
-
- cmark_iter_free(iter);
- return result;
-}
diff --git a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/html.h b/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/html.h
deleted file mode 100644
index aeba7bc..0000000
--- a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/html.h
+++ /dev/null
@@ -1,27 +0,0 @@
-#ifndef CMARK_HTML_H
-#define CMARK_HTML_H
-
-#include "buffer.h"
-#include "node.h"
-
-CMARK_INLINE
-static void cmark_html_render_cr(cmark_strbuf *html) {
- if (html->size && html->ptr[html->size - 1] != '\n')
- cmark_strbuf_putc(html, '\n');
-}
-
-#define BUFFER_SIZE 100
-
-CMARK_INLINE
-static void cmark_html_render_sourcepos(cmark_node *node, cmark_strbuf *html, int options) {
- char buffer[BUFFER_SIZE];
- if (CMARK_OPT_SOURCEPOS & options) {
- snprintf(buffer, BUFFER_SIZE, " data-sourcepos=\"%d:%d-%d:%d\"",
- cmark_node_get_start_line(node), cmark_node_get_start_column(node),
- cmark_node_get_end_line(node), cmark_node_get_end_column(node));
- cmark_strbuf_puts(html, buffer);
- }
-}
-
-
-#endif
diff --git a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/html.o b/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/html.o
deleted file mode 100644
index 77561d7..0000000
Binary files a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/html.o and /dev/null differ
diff --git a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/inlines.c b/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/inlines.c
deleted file mode 100644
index 30f2c17..0000000
--- a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/inlines.c
+++ /dev/null
@@ -1,1788 +0,0 @@
-#include
-#include
-#include
-
-#include "cmark_ctype.h"
-#include "config.h"
-#include "node.h"
-#include "parser.h"
-#include "references.h"
-#include "cmark-gfm.h"
-#include "houdini.h"
-#include "utf8.h"
-#include "scanners.h"
-#include "inlines.h"
-#include "syntax_extension.h"
-
-static const char *EMDASH = "\xE2\x80\x94";
-static const char *ENDASH = "\xE2\x80\x93";
-static const char *ELLIPSES = "\xE2\x80\xA6";
-static const char *LEFTDOUBLEQUOTE = "\xE2\x80\x9C";
-static const char *RIGHTDOUBLEQUOTE = "\xE2\x80\x9D";
-static const char *LEFTSINGLEQUOTE = "\xE2\x80\x98";
-static const char *RIGHTSINGLEQUOTE = "\xE2\x80\x99";
-
-// Macros for creating various kinds of simple.
-#define make_str(subj, sc, ec, s) make_literal(subj, CMARK_NODE_TEXT, sc, ec, s)
-#define make_code(subj, sc, ec, s) make_literal(subj, CMARK_NODE_CODE, sc, ec, s)
-#define make_raw_html(subj, sc, ec, s) make_literal(subj, CMARK_NODE_HTML_INLINE, sc, ec, s)
-#define make_linebreak(mem) make_simple(mem, CMARK_NODE_LINEBREAK)
-#define make_softbreak(mem) make_simple(mem, CMARK_NODE_SOFTBREAK)
-#define make_emph(mem) make_simple(mem, CMARK_NODE_EMPH)
-#define make_strong(mem) make_simple(mem, CMARK_NODE_STRONG)
-
-#define MAXBACKTICKS 80
-
-typedef struct bracket {
- struct bracket *previous;
- cmark_node *inl_text;
- bufsize_t position;
- bool image;
- bool active;
- bool bracket_after;
- bool in_bracket_image0;
- bool in_bracket_image1;
-} bracket;
-
-#define FLAG_SKIP_HTML_CDATA (1u << 0)
-#define FLAG_SKIP_HTML_DECLARATION (1u << 1)
-#define FLAG_SKIP_HTML_PI (1u << 2)
-#define FLAG_SKIP_HTML_COMMENT (1u << 3)
-
-typedef struct subject{
- cmark_mem *mem;
- cmark_chunk input;
- unsigned flags;
- int line;
- bufsize_t pos;
- int block_offset;
- int column_offset;
- cmark_map *refmap;
- delimiter *last_delim;
- bracket *last_bracket;
- bufsize_t backticks[MAXBACKTICKS + 1];
- bool scanned_for_backticks;
- bool no_link_openers;
-} subject;
-
-// Extensions may populate this.
-static int8_t SKIP_CHARS[256];
-
-static CMARK_INLINE bool S_is_line_end_char(char c) {
- return (c == '\n' || c == '\r');
-}
-
-static delimiter *S_insert_emph(subject *subj, delimiter *opener,
- delimiter *closer);
-
-static int parse_inline(cmark_parser *parser, subject *subj, cmark_node *parent, int options);
-
-static void subject_from_buf(cmark_mem *mem, int line_number, int block_offset, subject *e,
- cmark_chunk *buffer, cmark_map *refmap);
-static bufsize_t subject_find_special_char(subject *subj, int options);
-
-// Create an inline with a literal string value.
-static CMARK_INLINE cmark_node *make_literal(subject *subj, cmark_node_type t,
- int start_column, int end_column,
- cmark_chunk s) {
- cmark_node *e = (cmark_node *)subj->mem->calloc(1, sizeof(*e));
- cmark_strbuf_init(subj->mem, &e->content, 0);
- e->type = (uint16_t)t;
- e->as.literal = s;
- e->start_line = e->end_line = subj->line;
- // columns are 1 based.
- e->start_column = start_column + 1 + subj->column_offset + subj->block_offset;
- e->end_column = end_column + 1 + subj->column_offset + subj->block_offset;
- return e;
-}
-
-// Create an inline with no value.
-static CMARK_INLINE cmark_node *make_simple(cmark_mem *mem, cmark_node_type t) {
- cmark_node *e = (cmark_node *)mem->calloc(1, sizeof(*e));
- cmark_strbuf_init(mem, &e->content, 0);
- e->type = (uint16_t)t;
- return e;
-}
-
-// Like make_str, but parses entities.
-static cmark_node *make_str_with_entities(subject *subj,
- int start_column, int end_column,
- cmark_chunk *content) {
- cmark_strbuf unescaped = CMARK_BUF_INIT(subj->mem);
-
- if (houdini_unescape_html(&unescaped, content->data, content->len)) {
- return make_str(subj, start_column, end_column, cmark_chunk_buf_detach(&unescaped));
- } else {
- return make_str(subj, start_column, end_column, *content);
- }
-}
-
-// Like cmark_node_append_child but without costly sanity checks.
-// Assumes that child was newly created.
-static void append_child(cmark_node *node, cmark_node *child) {
- cmark_node *old_last_child = node->last_child;
-
- child->next = NULL;
- child->prev = old_last_child;
- child->parent = node;
- node->last_child = child;
-
- if (old_last_child) {
- old_last_child->next = child;
- } else {
- // Also set first_child if node previously had no children.
- node->first_child = child;
- }
-}
-
-// Duplicate a chunk by creating a copy of the buffer not by reusing the
-// buffer like cmark_chunk_dup does.
-static cmark_chunk chunk_clone(cmark_mem *mem, cmark_chunk *src) {
- cmark_chunk c;
- bufsize_t len = src->len;
-
- c.len = len;
- c.data = (unsigned char *)mem->calloc(len + 1, 1);
- c.alloc = 1;
- if (len)
- memcpy(c.data, src->data, len);
- c.data[len] = '\0';
-
- return c;
-}
-
-static cmark_chunk cmark_clean_autolink(cmark_mem *mem, cmark_chunk *url,
- int is_email) {
- cmark_strbuf buf = CMARK_BUF_INIT(mem);
-
- cmark_chunk_trim(url);
-
- if (url->len == 0) {
- cmark_chunk result = CMARK_CHUNK_EMPTY;
- return result;
- }
-
- if (is_email)
- cmark_strbuf_puts(&buf, "mailto:");
-
- houdini_unescape_html_f(&buf, url->data, url->len);
- return cmark_chunk_buf_detach(&buf);
-}
-
-static CMARK_INLINE cmark_node *make_autolink(subject *subj,
- int start_column, int end_column,
- cmark_chunk url, int is_email) {
- cmark_node *link = make_simple(subj->mem, CMARK_NODE_LINK);
- link->as.link.url = cmark_clean_autolink(subj->mem, &url, is_email);
- link->as.link.title = cmark_chunk_literal("");
- link->start_line = link->end_line = subj->line;
- link->start_column = start_column + 1;
- link->end_column = end_column + 1;
- append_child(link, make_str_with_entities(subj, start_column + 1, end_column - 1, &url));
- return link;
-}
-
-static void subject_from_buf(cmark_mem *mem, int line_number, int block_offset, subject *e,
- cmark_chunk *chunk, cmark_map *refmap) {
- int i;
- e->mem = mem;
- e->input = *chunk;
- e->flags = 0;
- e->line = line_number;
- e->pos = 0;
- e->block_offset = block_offset;
- e->column_offset = 0;
- e->refmap = refmap;
- e->last_delim = NULL;
- e->last_bracket = NULL;
- for (i = 0; i <= MAXBACKTICKS; i++) {
- e->backticks[i] = 0;
- }
- e->scanned_for_backticks = false;
- e->no_link_openers = true;
-}
-
-static CMARK_INLINE int isbacktick(int c) { return (c == '`'); }
-
-static CMARK_INLINE unsigned char peek_char_n(subject *subj, bufsize_t n) {
- // NULL bytes should have been stripped out by now. If they're
- // present, it's a programming error:
- assert(!(subj->pos + n < subj->input.len && subj->input.data[subj->pos + n] == 0));
- return (subj->pos + n < subj->input.len) ? subj->input.data[subj->pos + n] : 0;
-}
-
-static CMARK_INLINE unsigned char peek_char(subject *subj) {
- return peek_char_n(subj, 0);
-}
-
-static CMARK_INLINE unsigned char peek_at(subject *subj, bufsize_t pos) {
- return subj->input.data[pos];
-}
-
-// Return true if there are more characters in the subject.
-static CMARK_INLINE int is_eof(subject *subj) {
- return (subj->pos >= subj->input.len);
-}
-
-// Advance the subject. Doesn't check for eof.
-#define advance(subj) (subj)->pos += 1
-
-static CMARK_INLINE bool skip_spaces(subject *subj) {
- bool skipped = false;
- while (peek_char(subj) == ' ' || peek_char(subj) == '\t') {
- advance(subj);
- skipped = true;
- }
- return skipped;
-}
-
-static CMARK_INLINE bool skip_line_end(subject *subj) {
- bool seen_line_end_char = false;
- if (peek_char(subj) == '\r') {
- advance(subj);
- seen_line_end_char = true;
- }
- if (peek_char(subj) == '\n') {
- advance(subj);
- seen_line_end_char = true;
- }
- return seen_line_end_char || is_eof(subj);
-}
-
-// Take characters while a predicate holds, and return a string.
-static CMARK_INLINE cmark_chunk take_while(subject *subj, int (*f)(int)) {
- unsigned char c;
- bufsize_t startpos = subj->pos;
- bufsize_t len = 0;
-
- while ((c = peek_char(subj)) && (*f)(c)) {
- advance(subj);
- len++;
- }
-
- return cmark_chunk_dup(&subj->input, startpos, len);
-}
-
-// Return the number of newlines in a given span of text in a subject. If
-// the number is greater than zero, also return the number of characters
-// between the last newline and the end of the span in `since_newline`.
-static int count_newlines(subject *subj, bufsize_t from, bufsize_t len, int *since_newline) {
- int nls = 0;
- int since_nl = 0;
-
- while (len--) {
- if (subj->input.data[from++] == '\n') {
- ++nls;
- since_nl = 0;
- } else {
- ++since_nl;
- }
- }
-
- if (!nls)
- return 0;
-
- *since_newline = since_nl;
- return nls;
-}
-
-// Adjust `node`'s `end_line`, `end_column`, and `subj`'s `line` and
-// `column_offset` according to the number of newlines in a just-matched span
-// of text in `subj`.
-static void adjust_subj_node_newlines(subject *subj, cmark_node *node, int matchlen, int extra, int options) {
- if (!(options & CMARK_OPT_SOURCEPOS)) {
- return;
- }
-
- int since_newline;
- int newlines = count_newlines(subj, subj->pos - matchlen - extra, matchlen, &since_newline);
- if (newlines) {
- subj->line += newlines;
- node->end_line += newlines;
- node->end_column = since_newline;
- subj->column_offset = -subj->pos + since_newline + extra;
- }
-}
-
-// Try to process a backtick code span that began with a
-// span of ticks of length openticklength length (already
-// parsed). Return 0 if you don't find matching closing
-// backticks, otherwise return the position in the subject
-// after the closing backticks.
-static bufsize_t scan_to_closing_backticks(subject *subj,
- bufsize_t openticklength) {
-
- bool found = false;
- if (openticklength > MAXBACKTICKS) {
- // we limit backtick string length because of the array subj->backticks:
- return 0;
- }
- if (subj->scanned_for_backticks &&
- subj->backticks[openticklength] <= subj->pos) {
- // return if we already know there's no closer
- return 0;
- }
- while (!found) {
- // read non backticks
- unsigned char c;
- while ((c = peek_char(subj)) && c != '`') {
- advance(subj);
- }
- if (is_eof(subj)) {
- break;
- }
- bufsize_t numticks = 0;
- while (peek_char(subj) == '`') {
- advance(subj);
- numticks++;
- }
- // store position of ender
- if (numticks <= MAXBACKTICKS) {
- subj->backticks[numticks] = subj->pos - numticks;
- }
- if (numticks == openticklength) {
- return (subj->pos);
- }
- }
- // got through whole input without finding closer
- subj->scanned_for_backticks = true;
- return 0;
-}
-
-// Destructively modify string, converting newlines to
-// spaces, then removing a single leading + trailing space,
-// unless the code span consists entirely of space characters.
-static void S_normalize_code(cmark_strbuf *s) {
- bufsize_t r, w;
- bool contains_nonspace = false;
-
- for (r = 0, w = 0; r < s->size; ++r) {
- switch (s->ptr[r]) {
- case '\r':
- if (s->ptr[r + 1] != '\n') {
- s->ptr[w++] = ' ';
- }
- break;
- case '\n':
- s->ptr[w++] = ' ';
- break;
- default:
- s->ptr[w++] = s->ptr[r];
- }
- if (s->ptr[r] != ' ') {
- contains_nonspace = true;
- }
- }
-
- // begins and ends with space?
- if (contains_nonspace &&
- s->ptr[0] == ' ' && s->ptr[w - 1] == ' ') {
- cmark_strbuf_drop(s, 1);
- cmark_strbuf_truncate(s, w - 2);
- } else {
- cmark_strbuf_truncate(s, w);
- }
-
-}
-
-
-// Parse backtick code section or raw backticks, return an inline.
-// Assumes that the subject has a backtick at the current position.
-static cmark_node *handle_backticks(subject *subj, int options) {
- cmark_chunk openticks = take_while(subj, isbacktick);
- bufsize_t startpos = subj->pos;
- bufsize_t endpos = scan_to_closing_backticks(subj, openticks.len);
-
- if (endpos == 0) { // not found
- subj->pos = startpos; // rewind
- return make_str(subj, subj->pos, subj->pos, openticks);
- } else {
- cmark_strbuf buf = CMARK_BUF_INIT(subj->mem);
-
- cmark_strbuf_set(&buf, subj->input.data + startpos,
- endpos - startpos - openticks.len);
- S_normalize_code(&buf);
-
- cmark_node *node = make_code(subj, startpos, endpos - openticks.len - 1, cmark_chunk_buf_detach(&buf));
- adjust_subj_node_newlines(subj, node, endpos - startpos, openticks.len, options);
- return node;
- }
-}
-
-
-// Scan ***, **, or * and return number scanned, or 0.
-// Advances position.
-static int scan_delims(subject *subj, unsigned char c, bool *can_open,
- bool *can_close) {
- int numdelims = 0;
- bufsize_t before_char_pos, after_char_pos;
- int32_t after_char = 0;
- int32_t before_char = 0;
- int len;
- bool left_flanking, right_flanking;
-
- if (subj->pos == 0) {
- before_char = 10;
- } else {
- before_char_pos = subj->pos - 1;
- // walk back to the beginning of the UTF_8 sequence:
- while ((peek_at(subj, before_char_pos) >> 6 == 2 || SKIP_CHARS[peek_at(subj, before_char_pos)]) && before_char_pos > 0) {
- before_char_pos -= 1;
- }
- len = cmark_utf8proc_iterate(subj->input.data + before_char_pos,
- subj->pos - before_char_pos, &before_char);
- if (len == -1 || (before_char < 256 && SKIP_CHARS[(unsigned char) before_char])) {
- before_char = 10;
- }
- }
-
- if (c == '\'' || c == '"') {
- numdelims++;
- advance(subj); // limit to 1 delim for quotes
- } else {
- while (peek_char(subj) == c) {
- numdelims++;
- advance(subj);
- }
- }
-
- if (subj->pos == subj->input.len) {
- after_char = 10;
- } else {
- after_char_pos = subj->pos;
- while (SKIP_CHARS[peek_at(subj, after_char_pos)] && after_char_pos < subj->input.len) {
- after_char_pos += 1;
- }
- len = cmark_utf8proc_iterate(subj->input.data + after_char_pos,
- subj->input.len - after_char_pos, &after_char);
- if (len == -1 || (after_char < 256 && SKIP_CHARS[(unsigned char) after_char])) {
- after_char = 10;
- }
- }
-
- left_flanking = numdelims > 0 && !cmark_utf8proc_is_space(after_char) &&
- (!cmark_utf8proc_is_punctuation(after_char) ||
- cmark_utf8proc_is_space(before_char) ||
- cmark_utf8proc_is_punctuation(before_char));
- right_flanking = numdelims > 0 && !cmark_utf8proc_is_space(before_char) &&
- (!cmark_utf8proc_is_punctuation(before_char) ||
- cmark_utf8proc_is_space(after_char) ||
- cmark_utf8proc_is_punctuation(after_char));
- if (c == '_') {
- *can_open = left_flanking &&
- (!right_flanking || cmark_utf8proc_is_punctuation(before_char));
- *can_close = right_flanking &&
- (!left_flanking || cmark_utf8proc_is_punctuation(after_char));
- } else if (c == '\'' || c == '"') {
- *can_open = left_flanking && !right_flanking &&
- before_char != ']' && before_char != ')';
- *can_close = right_flanking;
- } else {
- *can_open = left_flanking;
- *can_close = right_flanking;
- }
- return numdelims;
-}
-
-/*
-static void print_delimiters(subject *subj)
-{
- delimiter *delim;
- delim = subj->last_delim;
- while (delim != NULL) {
- printf("Item at stack pos %p: %d %d %d next(%p) prev(%p)\n",
- (void*)delim, delim->delim_char,
- delim->can_open, delim->can_close,
- (void*)delim->next, (void*)delim->previous);
- delim = delim->previous;
- }
-}
-*/
-
-static void remove_delimiter(subject *subj, delimiter *delim) {
- if (delim == NULL)
- return;
- if (delim->next == NULL) {
- // end of list:
- assert(delim == subj->last_delim);
- subj->last_delim = delim->previous;
- } else {
- delim->next->previous = delim->previous;
- }
- if (delim->previous != NULL) {
- delim->previous->next = delim->next;
- }
- subj->mem->free(delim);
-}
-
-static void pop_bracket(subject *subj) {
- bracket *b;
- if (subj->last_bracket == NULL)
- return;
- b = subj->last_bracket;
- subj->last_bracket = subj->last_bracket->previous;
- subj->mem->free(b);
-}
-
-static void push_delimiter(subject *subj, unsigned char c, bool can_open,
- bool can_close, cmark_node *inl_text) {
- delimiter *delim = (delimiter *)subj->mem->calloc(1, sizeof(delimiter));
- delim->delim_char = c;
- delim->can_open = can_open;
- delim->can_close = can_close;
- delim->inl_text = inl_text;
- delim->position = subj->pos;
- delim->length = inl_text->as.literal.len;
- delim->previous = subj->last_delim;
- delim->next = NULL;
- if (delim->previous != NULL) {
- delim->previous->next = delim;
- }
- subj->last_delim = delim;
-}
-
-static void push_bracket(subject *subj, bool image, cmark_node *inl_text) {
- bracket *b = (bracket *)subj->mem->calloc(1, sizeof(bracket));
- if (subj->last_bracket != NULL) {
- subj->last_bracket->bracket_after = true;
- b->in_bracket_image0 = subj->last_bracket->in_bracket_image0;
- b->in_bracket_image1 = subj->last_bracket->in_bracket_image1;
- }
- b->image = image;
- b->active = true;
- b->inl_text = inl_text;
- b->previous = subj->last_bracket;
- b->position = subj->pos;
- b->bracket_after = false;
- if (image) {
- b->in_bracket_image1 = true;
- } else {
- b->in_bracket_image0 = true;
- }
- subj->last_bracket = b;
- if (!image) {
- subj->no_link_openers = false;
- }
-}
-
-// Assumes the subject has a c at the current position.
-static cmark_node *handle_delim(subject *subj, unsigned char c, bool smart) {
- bufsize_t numdelims;
- cmark_node *inl_text;
- bool can_open, can_close;
- cmark_chunk contents;
-
- numdelims = scan_delims(subj, c, &can_open, &can_close);
-
- if (c == '\'' && smart) {
- contents = cmark_chunk_literal(RIGHTSINGLEQUOTE);
- } else if (c == '"' && smart) {
- contents =
- cmark_chunk_literal(can_close ? RIGHTDOUBLEQUOTE : LEFTDOUBLEQUOTE);
- } else {
- contents = cmark_chunk_dup(&subj->input, subj->pos - numdelims, numdelims);
- }
-
- inl_text = make_str(subj, subj->pos - numdelims, subj->pos - 1, contents);
-
- if ((can_open || can_close) && (!(c == '\'' || c == '"') || smart)) {
- push_delimiter(subj, c, can_open, can_close, inl_text);
- }
-
- return inl_text;
-}
-
-// Assumes we have a hyphen at the current position.
-static cmark_node *handle_hyphen(subject *subj, bool smart) {
- int startpos = subj->pos;
-
- advance(subj);
-
- if (!smart || peek_char(subj) != '-') {
- return make_str(subj, subj->pos - 1, subj->pos - 1, cmark_chunk_literal("-"));
- }
-
- while (smart && peek_char(subj) == '-') {
- advance(subj);
- }
-
- int numhyphens = subj->pos - startpos;
- int en_count = 0;
- int em_count = 0;
- int i;
- cmark_strbuf buf = CMARK_BUF_INIT(subj->mem);
-
- if (numhyphens % 3 == 0) { // if divisible by 3, use all em dashes
- em_count = numhyphens / 3;
- } else if (numhyphens % 2 == 0) { // if divisible by 2, use all en dashes
- en_count = numhyphens / 2;
- } else if (numhyphens % 3 == 2) { // use one en dash at end
- en_count = 1;
- em_count = (numhyphens - 2) / 3;
- } else { // use two en dashes at the end
- en_count = 2;
- em_count = (numhyphens - 4) / 3;
- }
-
- for (i = em_count; i > 0; i--) {
- cmark_strbuf_puts(&buf, EMDASH);
- }
-
- for (i = en_count; i > 0; i--) {
- cmark_strbuf_puts(&buf, ENDASH);
- }
-
- return make_str(subj, startpos, subj->pos - 1, cmark_chunk_buf_detach(&buf));
-}
-
-// Assumes we have a period at the current position.
-static cmark_node *handle_period(subject *subj, bool smart) {
- advance(subj);
- if (smart && peek_char(subj) == '.') {
- advance(subj);
- if (peek_char(subj) == '.') {
- advance(subj);
- return make_str(subj, subj->pos - 3, subj->pos - 1, cmark_chunk_literal(ELLIPSES));
- } else {
- return make_str(subj, subj->pos - 2, subj->pos - 1, cmark_chunk_literal(".."));
- }
- } else {
- return make_str(subj, subj->pos - 1, subj->pos - 1, cmark_chunk_literal("."));
- }
-}
-
-static cmark_syntax_extension *get_extension_for_special_char(cmark_parser *parser, unsigned char c) {
- cmark_llist *tmp_ext;
-
- for (tmp_ext = parser->inline_syntax_extensions; tmp_ext; tmp_ext=tmp_ext->next) {
- cmark_syntax_extension *ext = (cmark_syntax_extension *) tmp_ext->data;
- cmark_llist *tmp_char;
- for (tmp_char = ext->special_inline_chars; tmp_char; tmp_char=tmp_char->next) {
- unsigned char tmp_c = (unsigned char)(size_t)tmp_char->data;
-
- if (tmp_c == c) {
- return ext;
- }
- }
- }
-
- return NULL;
-}
-
-static void process_emphasis(cmark_parser *parser, subject *subj, bufsize_t stack_bottom) {
- delimiter *candidate;
- delimiter *closer = NULL;
- delimiter *opener;
- delimiter *old_closer;
- bool opener_found;
- bufsize_t openers_bottom[3][128];
- int i;
-
- // initialize openers_bottom:
- memset(&openers_bottom, 0, sizeof(openers_bottom));
- for (i=0; i < 3; i++) {
- openers_bottom[i]['*'] = stack_bottom;
- openers_bottom[i]['_'] = stack_bottom;
- openers_bottom[i]['\''] = stack_bottom;
- openers_bottom[i]['"'] = stack_bottom;
- }
-
- // move back to first relevant delim.
- candidate = subj->last_delim;
- while (candidate != NULL && candidate->position >= stack_bottom) {
- closer = candidate;
- candidate = candidate->previous;
- }
-
- // now move forward, looking for closers, and handling each
- while (closer != NULL) {
- cmark_syntax_extension *extension = get_extension_for_special_char(parser, closer->delim_char);
- if (closer->can_close) {
- // Now look backwards for first matching opener:
- opener = closer->previous;
- opener_found = false;
- while (opener != NULL && opener->position >= stack_bottom &&
- opener->position >= openers_bottom[closer->length % 3][closer->delim_char]) {
- if (opener->can_open && opener->delim_char == closer->delim_char) {
- // interior closer of size 2 can't match opener of size 1
- // or of size 1 can't match 2
- if (!(closer->can_open || opener->can_close) ||
- closer->length % 3 == 0 ||
- (opener->length + closer->length) % 3 != 0) {
- opener_found = true;
- break;
- }
- }
- opener = opener->previous;
- }
- old_closer = closer;
-
- if (extension) {
- if (opener_found)
- closer = extension->insert_inline_from_delim(extension, parser, subj, opener, closer);
- else
- closer = closer->next;
- } else if (closer->delim_char == '*' || closer->delim_char == '_') {
- if (opener_found) {
- closer = S_insert_emph(subj, opener, closer);
- } else {
- closer = closer->next;
- }
- } else if (closer->delim_char == '\'' || closer->delim_char == '"') {
- cmark_chunk_free(subj->mem, &closer->inl_text->as.literal);
- if (closer->delim_char == '\'') {
- closer->inl_text->as.literal = cmark_chunk_literal(RIGHTSINGLEQUOTE);
- } else {
- closer->inl_text->as.literal = cmark_chunk_literal(RIGHTDOUBLEQUOTE);
- }
- closer = closer->next;
- if (opener_found) {
- cmark_chunk_free(subj->mem, &opener->inl_text->as.literal);
- if (old_closer->delim_char == '\'') {
- opener->inl_text->as.literal = cmark_chunk_literal(LEFTSINGLEQUOTE);
- } else {
- opener->inl_text->as.literal = cmark_chunk_literal(LEFTDOUBLEQUOTE);
- }
- remove_delimiter(subj, opener);
- remove_delimiter(subj, old_closer);
- }
- }
- if (!opener_found) {
- // set lower bound for future searches for openers
- openers_bottom[old_closer->length % 3][old_closer->delim_char] =
- old_closer->position;
- if (!old_closer->can_open) {
- // we can remove a closer that can't be an
- // opener, once we've seen there's no
- // matching opener:
- remove_delimiter(subj, old_closer);
- }
- }
- } else {
- closer = closer->next;
- }
- }
- // free all delimiters in list until stack_bottom:
- while (subj->last_delim != NULL &&
- subj->last_delim->position >= stack_bottom) {
- remove_delimiter(subj, subj->last_delim);
- }
-}
-
-static delimiter *S_insert_emph(subject *subj, delimiter *opener,
- delimiter *closer) {
- delimiter *delim, *tmp_delim;
- bufsize_t use_delims;
- cmark_node *opener_inl = opener->inl_text;
- cmark_node *closer_inl = closer->inl_text;
- bufsize_t opener_num_chars = opener_inl->as.literal.len;
- bufsize_t closer_num_chars = closer_inl->as.literal.len;
- cmark_node *tmp, *tmpnext, *emph;
-
- // calculate the actual number of characters used from this closer
- use_delims = (closer_num_chars >= 2 && opener_num_chars >= 2) ? 2 : 1;
-
- // remove used characters from associated inlines.
- opener_num_chars -= use_delims;
- closer_num_chars -= use_delims;
- opener_inl->as.literal.len = opener_num_chars;
- closer_inl->as.literal.len = closer_num_chars;
-
- // free delimiters between opener and closer
- delim = closer->previous;
- while (delim != NULL && delim != opener) {
- tmp_delim = delim->previous;
- remove_delimiter(subj, delim);
- delim = tmp_delim;
- }
-
- // create new emph or strong, and splice it in to our inlines
- // between the opener and closer
- emph = use_delims == 1 ? make_emph(subj->mem) : make_strong(subj->mem);
-
- tmp = opener_inl->next;
- while (tmp && tmp != closer_inl) {
- tmpnext = tmp->next;
- cmark_node_unlink(tmp);
- append_child(emph, tmp);
- tmp = tmpnext;
- }
- cmark_node_insert_after(opener_inl, emph);
-
- emph->start_line = opener_inl->start_line;
- emph->end_line = closer_inl->end_line;
- emph->start_column = opener_inl->start_column;
- emph->end_column = closer_inl->end_column;
-
- // if opener has 0 characters, remove it and its associated inline
- if (opener_num_chars == 0) {
- cmark_node_free(opener_inl);
- remove_delimiter(subj, opener);
- }
-
- // if closer has 0 characters, remove it and its associated inline
- if (closer_num_chars == 0) {
- // remove empty closer inline
- cmark_node_free(closer_inl);
- // remove closer from list
- tmp_delim = closer->next;
- remove_delimiter(subj, closer);
- closer = tmp_delim;
- }
-
- return closer;
-}
-
-// Parse backslash-escape or just a backslash, returning an inline.
-static cmark_node *handle_backslash(cmark_parser *parser, subject *subj) {
- advance(subj);
- unsigned char nextchar = peek_char(subj);
- if ((parser->backslash_ispunct ? parser->backslash_ispunct : cmark_ispunct)(nextchar)) {
- // only ascii symbols and newline can be escaped
- advance(subj);
- return make_str(subj, subj->pos - 2, subj->pos - 1, cmark_chunk_dup(&subj->input, subj->pos - 1, 1));
- } else if (!is_eof(subj) && skip_line_end(subj)) {
- return make_linebreak(subj->mem);
- } else {
- return make_str(subj, subj->pos - 1, subj->pos - 1, cmark_chunk_literal("\\"));
- }
-}
-
-// Parse an entity or a regular "&" string.
-// Assumes the subject has an '&' character at the current position.
-static cmark_node *handle_entity(subject *subj) {
- cmark_strbuf ent = CMARK_BUF_INIT(subj->mem);
- bufsize_t len;
-
- advance(subj);
-
- len = houdini_unescape_ent(&ent, subj->input.data + subj->pos,
- subj->input.len - subj->pos);
-
- if (len == 0)
- return make_str(subj, subj->pos - 1, subj->pos - 1, cmark_chunk_literal("&"));
-
- subj->pos += len;
- return make_str(subj, subj->pos - 1 - len, subj->pos - 1, cmark_chunk_buf_detach(&ent));
-}
-
-// Clean a URL: remove surrounding whitespace, and remove \ that escape
-// punctuation.
-cmark_chunk cmark_clean_url(cmark_mem *mem, cmark_chunk *url) {
- cmark_strbuf buf = CMARK_BUF_INIT(mem);
-
- cmark_chunk_trim(url);
-
- if (url->len == 0) {
- cmark_chunk result = CMARK_CHUNK_EMPTY;
- return result;
- }
-
- houdini_unescape_html_f(&buf, url->data, url->len);
-
- cmark_strbuf_unescape(&buf);
- return cmark_chunk_buf_detach(&buf);
-}
-
-cmark_chunk cmark_clean_title(cmark_mem *mem, cmark_chunk *title) {
- cmark_strbuf buf = CMARK_BUF_INIT(mem);
- unsigned char first, last;
-
- if (title->len == 0) {
- cmark_chunk result = CMARK_CHUNK_EMPTY;
- return result;
- }
-
- first = title->data[0];
- last = title->data[title->len - 1];
-
- // remove surrounding quotes if any:
- if ((first == '\'' && last == '\'') || (first == '(' && last == ')') ||
- (first == '"' && last == '"')) {
- houdini_unescape_html_f(&buf, title->data + 1, title->len - 2);
- } else {
- houdini_unescape_html_f(&buf, title->data, title->len);
- }
-
- cmark_strbuf_unescape(&buf);
- return cmark_chunk_buf_detach(&buf);
-}
-
-// Parse an autolink or HTML tag.
-// Assumes the subject has a '<' character at the current position.
-static cmark_node *handle_pointy_brace(subject *subj, int options) {
- bufsize_t matchlen = 0;
- cmark_chunk contents;
-
- advance(subj); // advance past first <
-
- // first try to match a URL autolink
- matchlen = scan_autolink_uri(&subj->input, subj->pos);
- if (matchlen > 0) {
- contents = cmark_chunk_dup(&subj->input, subj->pos, matchlen - 1);
- subj->pos += matchlen;
-
- return make_autolink(subj, subj->pos - 1 - matchlen, subj->pos - 1, contents, 0);
- }
-
- // next try to match an email autolink
- matchlen = scan_autolink_email(&subj->input, subj->pos);
- if (matchlen > 0) {
- contents = cmark_chunk_dup(&subj->input, subj->pos, matchlen - 1);
- subj->pos += matchlen;
-
- return make_autolink(subj, subj->pos - 1 - matchlen, subj->pos - 1, contents, 1);
- }
-
- // finally, try to match an html tag
- if (subj->pos + 2 <= subj->input.len) {
- int c = subj->input.data[subj->pos];
- if (c == '!' && (subj->flags & FLAG_SKIP_HTML_COMMENT) == 0) {
- c = subj->input.data[subj->pos+1];
- if (c == '-' && subj->input.data[subj->pos+2] == '-') {
- if (subj->input.data[subj->pos+3] == '>') {
- matchlen = 4;
- } else if (subj->input.data[subj->pos+3] == '-' &&
- subj->input.data[subj->pos+4] == '>') {
- matchlen = 5;
- } else {
- matchlen = scan_html_comment(&subj->input, subj->pos + 1);
- if (matchlen > 0) {
- matchlen += 1; // prefix "<"
- } else { // no match through end of input: set a flag so
- // we don't reparse looking for -->:
- subj->flags |= FLAG_SKIP_HTML_COMMENT;
- }
- }
- } else if (c == '[') {
- if ((subj->flags & FLAG_SKIP_HTML_CDATA) == 0) {
- matchlen = scan_html_cdata(&subj->input, subj->pos + 2);
- if (matchlen > 0) {
- // The regex doesn't require the final "]]>". But if we're not at
- // the end of input, it must come after the match. Otherwise,
- // disable subsequent scans to avoid quadratic behavior.
- matchlen += 5; // prefix "![", suffix "]]>"
- if (subj->pos + matchlen > subj->input.len) {
- subj->flags |= FLAG_SKIP_HTML_CDATA;
- matchlen = 0;
- }
- }
- }
- } else if ((subj->flags & FLAG_SKIP_HTML_DECLARATION) == 0) {
- matchlen = scan_html_declaration(&subj->input, subj->pos + 1);
- if (matchlen > 0) {
- matchlen += 2; // prefix "!", suffix ">"
- if (subj->pos + matchlen > subj->input.len) {
- subj->flags |= FLAG_SKIP_HTML_DECLARATION;
- matchlen = 0;
- }
- }
- }
- } else if (c == '?') {
- if ((subj->flags & FLAG_SKIP_HTML_PI) == 0) {
- // Note that we allow an empty match.
- matchlen = scan_html_pi(&subj->input, subj->pos + 1);
- matchlen += 3; // prefix "?", suffix "?>"
- if (subj->pos + matchlen > subj->input.len) {
- subj->flags |= FLAG_SKIP_HTML_PI;
- matchlen = 0;
- }
- }
- } else {
- matchlen = scan_html_tag(&subj->input, subj->pos);
- }
- }
- if (matchlen > 0) {
- contents = cmark_chunk_dup(&subj->input, subj->pos - 1, matchlen + 1);
- subj->pos += matchlen;
- cmark_node *node = make_raw_html(subj, subj->pos - matchlen - 1, subj->pos - 1, contents);
- adjust_subj_node_newlines(subj, node, matchlen, 1, options);
- return node;
- }
-
- if (options & CMARK_OPT_LIBERAL_HTML_TAG) {
- matchlen = scan_liberal_html_tag(&subj->input, subj->pos);
- if (matchlen > 0) {
- contents = cmark_chunk_dup(&subj->input, subj->pos - 1, matchlen + 1);
- subj->pos += matchlen;
- cmark_node *node = make_raw_html(subj, subj->pos - matchlen - 1, subj->pos - 1, contents);
- adjust_subj_node_newlines(subj, node, matchlen, 1, options);
- return node;
- }
- }
-
- // if nothing matches, just return the opening <:
- return make_str(subj, subj->pos - 1, subj->pos - 1, cmark_chunk_literal("<"));
-}
-
-// Parse a link label. Returns 1 if successful.
-// Note: unescaped brackets are not allowed in labels.
-// The label begins with `[` and ends with the first `]` character
-// encountered. Backticks in labels do not start code spans.
-static int link_label(subject *subj, cmark_chunk *raw_label) {
- bufsize_t startpos = subj->pos;
- int length = 0;
- unsigned char c;
-
- // advance past [
- if (peek_char(subj) == '[') {
- advance(subj);
- } else {
- return 0;
- }
-
- while ((c = peek_char(subj)) && c != '[' && c != ']') {
- if (c == '\\') {
- advance(subj);
- length++;
- if (cmark_ispunct(peek_char(subj))) {
- advance(subj);
- length++;
- }
- } else {
- advance(subj);
- length++;
- }
- if (length > MAX_LINK_LABEL_LENGTH) {
- goto noMatch;
- }
- }
-
- if (c == ']') { // match found
- *raw_label =
- cmark_chunk_dup(&subj->input, startpos + 1, subj->pos - (startpos + 1));
- cmark_chunk_trim(raw_label);
- advance(subj); // advance past ]
- return 1;
- }
-
-noMatch:
- subj->pos = startpos; // rewind
- return 0;
-}
-
-static bufsize_t manual_scan_link_url_2(cmark_chunk *input, bufsize_t offset,
- cmark_chunk *output) {
- bufsize_t i = offset;
- size_t nb_p = 0;
-
- while (i < input->len) {
- if (input->data[i] == '\\' &&
- i + 1 < input-> len &&
- cmark_ispunct(input->data[i+1]))
- i += 2;
- else if (input->data[i] == '(') {
- ++nb_p;
- ++i;
- if (nb_p > 32)
- return -1;
- } else if (input->data[i] == ')') {
- if (nb_p == 0)
- break;
- --nb_p;
- ++i;
- } else if (cmark_isspace(input->data[i])) {
- if (i == offset) {
- return -1;
- }
- break;
- } else {
- ++i;
- }
- }
-
- if (i >= input->len)
- return -1;
-
- {
- cmark_chunk result = {input->data + offset, i - offset, 0};
- *output = result;
- }
- return i - offset;
-}
-
-static bufsize_t manual_scan_link_url(cmark_chunk *input, bufsize_t offset,
- cmark_chunk *output) {
- bufsize_t i = offset;
-
- if (i < input->len && input->data[i] == '<') {
- ++i;
- while (i < input->len) {
- if (input->data[i] == '>') {
- ++i;
- break;
- } else if (input->data[i] == '\\')
- i += 2;
- else if (input->data[i] == '\n' || input->data[i] == '<')
- return -1;
- else
- ++i;
- }
- } else {
- return manual_scan_link_url_2(input, offset, output);
- }
-
- if (i >= input->len)
- return -1;
-
- {
- cmark_chunk result = {input->data + offset + 1, i - 2 - offset, 0};
- *output = result;
- }
- return i - offset;
-}
-
-// Return a link, an image, or a literal close bracket.
-static cmark_node *handle_close_bracket(cmark_parser *parser, subject *subj) {
- bufsize_t initial_pos, after_link_text_pos;
- bufsize_t endurl, starttitle, endtitle, endall;
- bufsize_t sps, n;
- cmark_reference *ref = NULL;
- cmark_chunk url_chunk, title_chunk;
- cmark_chunk url, title;
- bracket *opener;
- cmark_node *inl;
- cmark_chunk raw_label;
- int found_label;
- cmark_node *tmp, *tmpnext;
- bool is_image;
-
- advance(subj); // advance past ]
- initial_pos = subj->pos;
-
- // get last [ or ![
- opener = subj->last_bracket;
-
- if (opener == NULL) {
- return make_str(subj, subj->pos - 1, subj->pos - 1, cmark_chunk_literal("]"));
- }
-
- // If we got here, we matched a potential link/image text.
- // Now we check to see if it's a link/image.
- is_image = opener->image;
-
- if (!is_image && subj->no_link_openers) {
- // take delimiter off stack
- pop_bracket(subj);
- return make_str(subj, subj->pos - 1, subj->pos - 1, cmark_chunk_literal("]"));
- }
-
- after_link_text_pos = subj->pos;
-
- // First, look for an inline link.
- if (peek_char(subj) == '(' &&
- ((sps = scan_spacechars(&subj->input, subj->pos + 1)) > -1) &&
- ((n = manual_scan_link_url(&subj->input, subj->pos + 1 + sps,
- &url_chunk)) > -1)) {
-
- // try to parse an explicit link:
- endurl = subj->pos + 1 + sps + n;
- starttitle = endurl + scan_spacechars(&subj->input, endurl);
-
- // ensure there are spaces btw url and title
- endtitle = (starttitle == endurl)
- ? starttitle
- : starttitle + scan_link_title(&subj->input, starttitle);
-
- endall = endtitle + scan_spacechars(&subj->input, endtitle);
-
- if (peek_at(subj, endall) == ')') {
- subj->pos = endall + 1;
-
- title_chunk =
- cmark_chunk_dup(&subj->input, starttitle, endtitle - starttitle);
- url = cmark_clean_url(subj->mem, &url_chunk);
- title = cmark_clean_title(subj->mem, &title_chunk);
- cmark_chunk_free(subj->mem, &url_chunk);
- cmark_chunk_free(subj->mem, &title_chunk);
- goto match;
-
- } else {
- // it could still be a shortcut reference link
- subj->pos = after_link_text_pos;
- }
- }
-
- // Next, look for a following [link label] that matches in refmap.
- // skip spaces
- raw_label = cmark_chunk_literal("");
- found_label = link_label(subj, &raw_label);
- if (!found_label) {
- // If we have a shortcut reference link, back up
- // to before the spacse we skipped.
- subj->pos = initial_pos;
- }
-
- if ((!found_label || raw_label.len == 0) && !opener->bracket_after) {
- cmark_chunk_free(subj->mem, &raw_label);
- raw_label = cmark_chunk_dup(&subj->input, opener->position,
- initial_pos - opener->position - 1);
- found_label = true;
- }
-
- if (found_label) {
- ref = (cmark_reference *)cmark_map_lookup(subj->refmap, &raw_label);
- cmark_chunk_free(subj->mem, &raw_label);
- }
-
- if (ref != NULL) { // found
- url = chunk_clone(subj->mem, &ref->url);
- title = chunk_clone(subj->mem, &ref->title);
- goto match;
- } else {
- goto noMatch;
- }
-
-noMatch:
- // If we fall through to here, it means we didn't match a link.
- // What if we're a footnote link?
- if (parser->options & CMARK_OPT_FOOTNOTES &&
- opener->inl_text->next &&
- opener->inl_text->next->type == CMARK_NODE_TEXT) {
-
- cmark_chunk *literal = &opener->inl_text->next->as.literal;
-
- // look back to the opening '[', and skip ahead to the next character
- // if we're looking at a '[^' sequence, and there is other text or nodes
- // after the ^, let's call it a footnote reference.
- if ((literal->len > 0 && literal->data[0] == '^') && (literal->len > 1 || opener->inl_text->next->next)) {
-
- // Before we got this far, the `handle_close_bracket` function may have
- // advanced the current state beyond our footnote's actual closing
- // bracket, ie if it went looking for a `link_label`.
- // Let's just rewind the subject's position:
- subj->pos = initial_pos;
-
- cmark_node *fnref = make_simple(subj->mem, CMARK_NODE_FOOTNOTE_REFERENCE);
-
- // the start and end of the footnote ref is the opening and closing brace
- // i.e. the subject's current position, and the opener's start_column
- int fnref_end_column = subj->pos + subj->column_offset + subj->block_offset;
- int fnref_start_column = opener->inl_text->start_column;
-
- // any given node delineates a substring of the line being processed,
- // with the remainder of the line being pointed to thru its 'literal'
- // struct member.
- // here, we copy the literal's pointer, moving it past the '^' character
- // for a length equal to the size of footnote reference text.
- // i.e. end_col minus start_col, minus the [ and the ^ characters
- //
- // this copies the footnote reference string, even if between the
- // `opener` and the subject's current position there are other nodes
- //
- // (first, check for underflows)
- if ((fnref_start_column + 2) <= fnref_end_column) {
- fnref->as.literal = cmark_chunk_dup(literal, 1, (fnref_end_column - fnref_start_column) - 2);
- } else {
- fnref->as.literal = cmark_chunk_dup(literal, 1, 0);
- }
-
- fnref->start_line = fnref->end_line = subj->line;
- fnref->start_column = fnref_start_column;
- fnref->end_column = fnref_end_column;
-
- // we then replace the opener with this new fnref node, the net effect
- // being replacing the opening '[' text node with a `^footnote-ref]` node.
- cmark_node_insert_before(opener->inl_text, fnref);
-
- process_emphasis(parser, subj, opener->position);
- // sometimes, the footnote reference text gets parsed into multiple nodes
- // i.e. '[^example]' parsed into '[', '^exam', 'ple]'.
- // this happens for ex with the autolink extension. when the autolinker
- // finds the 'w' character, it will split the text into multiple nodes
- // in hopes of being able to match a 'www.' substring.
- //
- // because this function is called one character at a time via the
- // `parse_inlines` function, and the current subj->pos is pointing at the
- // closing ] brace, and because we copy all the text between the [ ]
- // braces, we should be able to safely ignore and delete any nodes after
- // the opener->inl_text->next.
- //
- // therefore, here we walk thru the list and free them all up
- cmark_node *next_node;
- cmark_node *current_node = opener->inl_text->next;
- while(current_node) {
- next_node = current_node->next;
- cmark_node_free(current_node);
- current_node = next_node;
- }
-
- cmark_node_free(opener->inl_text);
-
- pop_bracket(subj);
- return NULL;
- }
- }
-
- pop_bracket(subj); // remove this opener from delimiter list
- subj->pos = initial_pos;
- return make_str(subj, subj->pos - 1, subj->pos - 1, cmark_chunk_literal("]"));
-
-match:
- inl = make_simple(subj->mem, is_image ? CMARK_NODE_IMAGE : CMARK_NODE_LINK);
- inl->as.link.url = url;
- inl->as.link.title = title;
- inl->start_line = inl->end_line = subj->line;
- inl->start_column = opener->inl_text->start_column;
- inl->end_column = subj->pos + subj->column_offset + subj->block_offset;
- cmark_node_insert_before(opener->inl_text, inl);
- // Add link text:
- tmp = opener->inl_text->next;
- while (tmp) {
- tmpnext = tmp->next;
- cmark_node_unlink(tmp);
- append_child(inl, tmp);
- tmp = tmpnext;
- }
-
- // Free the bracket [:
- cmark_node_free(opener->inl_text);
-
- process_emphasis(parser, subj, opener->position);
- pop_bracket(subj);
-
- // Now, if we have a link, we also want to deactivate links until
- // we get a new opener. (This code can be removed if we decide to allow links
- // inside links.)
- if (!is_image) {
- subj->no_link_openers = true;
- }
-
- return NULL;
-}
-
-// Parse a hard or soft linebreak, returning an inline.
-// Assumes the subject has a cr or newline at the current position.
-static cmark_node *handle_newline(subject *subj) {
- bufsize_t nlpos = subj->pos;
- // skip over cr, crlf, or lf:
- if (peek_at(subj, subj->pos) == '\r') {
- advance(subj);
- }
- if (peek_at(subj, subj->pos) == '\n') {
- advance(subj);
- }
- ++subj->line;
- subj->column_offset = -subj->pos;
- // skip spaces at beginning of line
- skip_spaces(subj);
- if (nlpos > 1 && peek_at(subj, nlpos - 1) == ' ' &&
- peek_at(subj, nlpos - 2) == ' ') {
- return make_linebreak(subj->mem);
- } else {
- return make_softbreak(subj->mem);
- }
-}
-
-// "\r\n\\`&_*[]pos + 1;
-
- while (n < subj->input.len) {
- if (SPECIAL_CHARS[subj->input.data[n]])
- return n;
- if (options & CMARK_OPT_SMART && SMART_PUNCT_CHARS[subj->input.data[n]])
- return n;
- n++;
- }
-
- return subj->input.len;
-}
-
-void cmark_inlines_add_special_character(unsigned char c, bool emphasis) {
- SPECIAL_CHARS[c] = 1;
- if (emphasis)
- SKIP_CHARS[c] = 1;
-}
-
-void cmark_inlines_remove_special_character(unsigned char c, bool emphasis) {
- SPECIAL_CHARS[c] = 0;
- if (emphasis)
- SKIP_CHARS[c] = 0;
-}
-
-static cmark_node *try_extensions(cmark_parser *parser,
- cmark_node *parent,
- unsigned char c,
- subject *subj) {
- cmark_node *res = NULL;
- cmark_llist *tmp;
-
- for (tmp = parser->inline_syntax_extensions; tmp; tmp = tmp->next) {
- cmark_syntax_extension *ext = (cmark_syntax_extension *) tmp->data;
- res = ext->match_inline(ext, parser, parent, c, subj);
-
- if (res)
- break;
- }
-
- return res;
-}
-
-// Parse an inline, advancing subject, and add it as a child of parent.
-// Return 0 if no inline can be parsed, 1 otherwise.
-static int parse_inline(cmark_parser *parser, subject *subj, cmark_node *parent, int options) {
- cmark_node *new_inl = NULL;
- cmark_chunk contents;
- unsigned char c;
- bufsize_t startpos, endpos;
- c = peek_char(subj);
- if (c == 0) {
- return 0;
- }
- switch (c) {
- case '\r':
- case '\n':
- new_inl = handle_newline(subj);
- break;
- case '`':
- new_inl = handle_backticks(subj, options);
- break;
- case '\\':
- new_inl = handle_backslash(parser, subj);
- break;
- case '&':
- new_inl = handle_entity(subj);
- break;
- case '<':
- new_inl = handle_pointy_brace(subj, options);
- break;
- case '*':
- case '_':
- case '\'':
- case '"':
- new_inl = handle_delim(subj, c, (options & CMARK_OPT_SMART) != 0);
- break;
- case '-':
- new_inl = handle_hyphen(subj, (options & CMARK_OPT_SMART) != 0);
- break;
- case '.':
- new_inl = handle_period(subj, (options & CMARK_OPT_SMART) != 0);
- break;
- case '[':
- advance(subj);
- new_inl = make_str(subj, subj->pos - 1, subj->pos - 1, cmark_chunk_literal("["));
- push_bracket(subj, false, new_inl);
- break;
- case ']':
- new_inl = handle_close_bracket(parser, subj);
- break;
- case '!':
- advance(subj);
- if (peek_char(subj) == '[' && peek_char_n(subj, 1) != '^') {
- advance(subj);
- new_inl = make_str(subj, subj->pos - 2, subj->pos - 1, cmark_chunk_literal("!["));
- push_bracket(subj, true, new_inl);
- } else {
- new_inl = make_str(subj, subj->pos - 1, subj->pos - 1, cmark_chunk_literal("!"));
- }
- break;
- default:
- new_inl = try_extensions(parser, parent, c, subj);
- if (new_inl != NULL)
- break;
-
- endpos = subject_find_special_char(subj, options);
- contents = cmark_chunk_dup(&subj->input, subj->pos, endpos - subj->pos);
- startpos = subj->pos;
- subj->pos = endpos;
-
- // if we're at a newline, strip trailing spaces.
- if (S_is_line_end_char(peek_char(subj))) {
- cmark_chunk_rtrim(&contents);
- }
-
- new_inl = make_str(subj, startpos, endpos - 1, contents);
- }
- if (new_inl != NULL) {
- append_child(parent, new_inl);
- }
-
- return 1;
-}
-
-// Parse inlines from parent's string_content, adding as children of parent.
-void cmark_parse_inlines(cmark_parser *parser,
- cmark_node *parent,
- cmark_map *refmap,
- int options) {
- subject subj;
- cmark_chunk content = {parent->content.ptr, parent->content.size, 0};
- subject_from_buf(parser->mem, parent->start_line, parent->start_column - 1 + parent->internal_offset, &subj, &content, refmap);
- cmark_chunk_rtrim(&subj.input);
-
- while (!is_eof(&subj) && parse_inline(parser, &subj, parent, options))
- ;
-
- process_emphasis(parser, &subj, 0);
- // free bracket and delim stack
- while (subj.last_delim) {
- remove_delimiter(&subj, subj.last_delim);
- }
- while (subj.last_bracket) {
- pop_bracket(&subj);
- }
-}
-
-// Parse zero or more space characters, including at most one newline.
-static void spnl(subject *subj) {
- skip_spaces(subj);
- if (skip_line_end(subj)) {
- skip_spaces(subj);
- }
-}
-
-// Parse reference. Assumes string begins with '[' character.
-// Modify refmap if a reference is encountered.
-// Return 0 if no reference found, otherwise position of subject
-// after reference is parsed.
-bufsize_t cmark_parse_reference_inline(cmark_mem *mem, cmark_chunk *input,
- cmark_map *refmap) {
- subject subj;
-
- cmark_chunk lab;
- cmark_chunk url;
- cmark_chunk title;
-
- bufsize_t matchlen = 0;
- bufsize_t beforetitle;
-
- subject_from_buf(mem, -1, 0, &subj, input, NULL);
-
- // parse label:
- if (!link_label(&subj, &lab) || lab.len == 0)
- return 0;
-
- // colon:
- if (peek_char(&subj) == ':') {
- advance(&subj);
- } else {
- return 0;
- }
-
- // parse link url:
- spnl(&subj);
- if ((matchlen = manual_scan_link_url(&subj.input, subj.pos, &url)) > -1) {
- subj.pos += matchlen;
- } else {
- return 0;
- }
-
- // parse optional link_title
- beforetitle = subj.pos;
- spnl(&subj);
- matchlen = subj.pos == beforetitle ? 0 : scan_link_title(&subj.input, subj.pos);
- if (matchlen) {
- title = cmark_chunk_dup(&subj.input, subj.pos, matchlen);
- subj.pos += matchlen;
- } else {
- subj.pos = beforetitle;
- title = cmark_chunk_literal("");
- }
-
- // parse final spaces and newline:
- skip_spaces(&subj);
- if (!skip_line_end(&subj)) {
- if (matchlen) { // try rewinding before title
- subj.pos = beforetitle;
- skip_spaces(&subj);
- if (!skip_line_end(&subj)) {
- return 0;
- }
- } else {
- return 0;
- }
- }
- // insert reference into refmap
- cmark_reference_create(refmap, &lab, &url, &title);
- return subj.pos;
-}
-
-unsigned char cmark_inline_parser_peek_char(cmark_inline_parser *parser) {
- return peek_char(parser);
-}
-
-unsigned char cmark_inline_parser_peek_at(cmark_inline_parser *parser, bufsize_t pos) {
- return peek_at(parser, pos);
-}
-
-int cmark_inline_parser_is_eof(cmark_inline_parser *parser) {
- return is_eof(parser);
-}
-
-static char *
-my_strndup (const char *s, size_t n)
-{
- char *result;
- size_t len = strlen (s);
-
- if (n < len)
- len = n;
-
- result = (char *) malloc (len + 1);
- if (!result)
- return 0;
-
- result[len] = '\0';
- return (char *) memcpy (result, s, len);
-}
-
-char *cmark_inline_parser_take_while(cmark_inline_parser *parser, cmark_inline_predicate pred) {
- unsigned char c;
- bufsize_t startpos = parser->pos;
- bufsize_t len = 0;
-
- while ((c = peek_char(parser)) && (*pred)(c)) {
- advance(parser);
- len++;
- }
-
- return my_strndup((const char *) parser->input.data + startpos, len);
-}
-
-void cmark_inline_parser_push_delimiter(cmark_inline_parser *parser,
- unsigned char c,
- int can_open,
- int can_close,
- cmark_node *inl_text) {
- push_delimiter(parser, c, can_open != 0, can_close != 0, inl_text);
-}
-
-void cmark_inline_parser_remove_delimiter(cmark_inline_parser *parser, delimiter *delim) {
- remove_delimiter(parser, delim);
-}
-
-int cmark_inline_parser_scan_delimiters(cmark_inline_parser *parser,
- int max_delims,
- unsigned char c,
- int *left_flanking,
- int *right_flanking,
- int *punct_before,
- int *punct_after) {
- int numdelims = 0;
- bufsize_t before_char_pos;
- int32_t after_char = 0;
- int32_t before_char = 0;
- int len;
- bool space_before, space_after;
-
- if (parser->pos == 0) {
- before_char = 10;
- } else {
- before_char_pos = parser->pos - 1;
- // walk back to the beginning of the UTF_8 sequence:
- while (peek_at(parser, before_char_pos) >> 6 == 2 && before_char_pos > 0) {
- before_char_pos -= 1;
- }
- len = cmark_utf8proc_iterate(parser->input.data + before_char_pos,
- parser->pos - before_char_pos, &before_char);
- if (len == -1) {
- before_char = 10;
- }
- }
-
- while (peek_char(parser) == c && numdelims < max_delims) {
- numdelims++;
- advance(parser);
- }
-
- len = cmark_utf8proc_iterate(parser->input.data + parser->pos,
- parser->input.len - parser->pos, &after_char);
- if (len == -1) {
- after_char = 10;
- }
-
- *punct_before = cmark_utf8proc_is_punctuation(before_char);
- *punct_after = cmark_utf8proc_is_punctuation(after_char);
- space_before = cmark_utf8proc_is_space(before_char) != 0;
- space_after = cmark_utf8proc_is_space(after_char) != 0;
-
- *left_flanking = numdelims > 0 && !cmark_utf8proc_is_space(after_char) &&
- !(*punct_after && !space_before && !*punct_before);
- *right_flanking = numdelims > 0 && !cmark_utf8proc_is_space(before_char) &&
- !(*punct_before && !space_after && !*punct_after);
-
- return numdelims;
-}
-
-void cmark_inline_parser_advance_offset(cmark_inline_parser *parser) {
- advance(parser);
-}
-
-int cmark_inline_parser_get_offset(cmark_inline_parser *parser) {
- return parser->pos;
-}
-
-void cmark_inline_parser_set_offset(cmark_inline_parser *parser, int offset) {
- parser->pos = offset;
-}
-
-int cmark_inline_parser_get_column(cmark_inline_parser *parser) {
- return parser->pos + 1 + parser->column_offset + parser->block_offset;
-}
-
-cmark_chunk *cmark_inline_parser_get_chunk(cmark_inline_parser *parser) {
- return &parser->input;
-}
-
-int cmark_inline_parser_in_bracket(cmark_inline_parser *parser, int image) {
- bracket *b = parser->last_bracket;
- if (!b) {
- return 0;
- }
- if (image != 0) {
- return b->in_bracket_image1;
- } else {
- return b->in_bracket_image0;
- }
-}
-
-void cmark_node_unput(cmark_node *node, int n) {
- node = node->last_child;
- while (n > 0 && node && node->type == CMARK_NODE_TEXT) {
- if (node->as.literal.len < n) {
- n -= node->as.literal.len;
- node->as.literal.len = 0;
- } else {
- node->as.literal.len -= n;
- n = 0;
- }
- node = node->prev;
- }
-}
-
-delimiter *cmark_inline_parser_get_last_delimiter(cmark_inline_parser *parser) {
- return parser->last_delim;
-}
-
-int cmark_inline_parser_get_line(cmark_inline_parser *parser) {
- return parser->line;
-}
diff --git a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/inlines.h b/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/inlines.h
deleted file mode 100644
index 7dd91bf..0000000
--- a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/inlines.h
+++ /dev/null
@@ -1,29 +0,0 @@
-#ifndef CMARK_INLINES_H
-#define CMARK_INLINES_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include "references.h"
-
-cmark_chunk cmark_clean_url(cmark_mem *mem, cmark_chunk *url);
-cmark_chunk cmark_clean_title(cmark_mem *mem, cmark_chunk *title);
-
-CMARK_GFM_EXPORT
-void cmark_parse_inlines(cmark_parser *parser,
- cmark_node *parent,
- cmark_map *refmap,
- int options);
-
-bufsize_t cmark_parse_reference_inline(cmark_mem *mem, cmark_chunk *input,
- cmark_map *refmap);
-
-void cmark_inlines_add_special_character(unsigned char c, bool emphasis);
-void cmark_inlines_remove_special_character(unsigned char c, bool emphasis);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/inlines.o b/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/inlines.o
deleted file mode 100644
index dbde855..0000000
Binary files a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/inlines.o and /dev/null differ
diff --git a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/iterator.c b/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/iterator.c
deleted file mode 100644
index 13fdb76..0000000
--- a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/iterator.c
+++ /dev/null
@@ -1,159 +0,0 @@
-#include
-#include
-
-#include "config.h"
-#include "node.h"
-#include "cmark-gfm.h"
-#include "iterator.h"
-
-cmark_iter *cmark_iter_new(cmark_node *root) {
- if (root == NULL) {
- return NULL;
- }
- cmark_mem *mem = root->content.mem;
- cmark_iter *iter = (cmark_iter *)mem->calloc(1, sizeof(cmark_iter));
- iter->mem = mem;
- iter->root = root;
- iter->cur.ev_type = CMARK_EVENT_NONE;
- iter->cur.node = NULL;
- iter->next.ev_type = CMARK_EVENT_ENTER;
- iter->next.node = root;
- return iter;
-}
-
-void cmark_iter_free(cmark_iter *iter) { iter->mem->free(iter); }
-
-static bool S_is_leaf(cmark_node *node) {
- switch (node->type) {
- case CMARK_NODE_HTML_BLOCK:
- case CMARK_NODE_THEMATIC_BREAK:
- case CMARK_NODE_CODE_BLOCK:
- case CMARK_NODE_TEXT:
- case CMARK_NODE_SOFTBREAK:
- case CMARK_NODE_LINEBREAK:
- case CMARK_NODE_CODE:
- case CMARK_NODE_HTML_INLINE:
- return 1;
- }
- return 0;
-}
-
-cmark_event_type cmark_iter_next(cmark_iter *iter) {
- cmark_event_type ev_type = iter->next.ev_type;
- cmark_node *node = iter->next.node;
-
- iter->cur.ev_type = ev_type;
- iter->cur.node = node;
-
- if (ev_type == CMARK_EVENT_DONE) {
- return ev_type;
- }
-
- /* roll forward to next item, setting both fields */
- if (ev_type == CMARK_EVENT_ENTER && !S_is_leaf(node)) {
- if (node->first_child == NULL) {
- /* stay on this node but exit */
- iter->next.ev_type = CMARK_EVENT_EXIT;
- } else {
- iter->next.ev_type = CMARK_EVENT_ENTER;
- iter->next.node = node->first_child;
- }
- } else if (node == iter->root) {
- /* don't move past root */
- iter->next.ev_type = CMARK_EVENT_DONE;
- iter->next.node = NULL;
- } else if (node->next) {
- iter->next.ev_type = CMARK_EVENT_ENTER;
- iter->next.node = node->next;
- } else if (node->parent) {
- iter->next.ev_type = CMARK_EVENT_EXIT;
- iter->next.node = node->parent;
- } else {
- assert(false);
- iter->next.ev_type = CMARK_EVENT_DONE;
- iter->next.node = NULL;
- }
-
- return ev_type;
-}
-
-void cmark_iter_reset(cmark_iter *iter, cmark_node *current,
- cmark_event_type event_type) {
- iter->next.ev_type = event_type;
- iter->next.node = current;
- cmark_iter_next(iter);
-}
-
-cmark_node *cmark_iter_get_node(cmark_iter *iter) { return iter->cur.node; }
-
-cmark_event_type cmark_iter_get_event_type(cmark_iter *iter) {
- return iter->cur.ev_type;
-}
-
-cmark_node *cmark_iter_get_root(cmark_iter *iter) { return iter->root; }
-
-void cmark_consolidate_text_nodes(cmark_node *root) {
- if (root == NULL) {
- return;
- }
- cmark_iter *iter = cmark_iter_new(root);
- cmark_strbuf buf = CMARK_BUF_INIT(iter->mem);
- cmark_event_type ev_type;
- cmark_node *cur, *tmp, *next;
-
- while ((ev_type = cmark_iter_next(iter)) != CMARK_EVENT_DONE) {
- cur = cmark_iter_get_node(iter);
- if (ev_type == CMARK_EVENT_ENTER && cur->type == CMARK_NODE_TEXT &&
- cur->next && cur->next->type == CMARK_NODE_TEXT) {
- cmark_strbuf_clear(&buf);
- cmark_strbuf_put(&buf, cur->as.literal.data, cur->as.literal.len);
- tmp = cur->next;
- while (tmp && tmp->type == CMARK_NODE_TEXT) {
- cmark_iter_next(iter); // advance pointer
- cmark_strbuf_put(&buf, tmp->as.literal.data, tmp->as.literal.len);
- cur->end_column = tmp->end_column;
- next = tmp->next;
- cmark_node_free(tmp);
- tmp = next;
- }
- cmark_chunk_free(iter->mem, &cur->as.literal);
- cur->as.literal = cmark_chunk_buf_detach(&buf);
- }
- }
-
- cmark_strbuf_free(&buf);
- cmark_iter_free(iter);
-}
-
-void cmark_node_own(cmark_node *root) {
- if (root == NULL) {
- return;
- }
- cmark_iter *iter = cmark_iter_new(root);
- cmark_event_type ev_type;
- cmark_node *cur;
-
- while ((ev_type = cmark_iter_next(iter)) != CMARK_EVENT_DONE) {
- cur = cmark_iter_get_node(iter);
- if (ev_type == CMARK_EVENT_ENTER) {
- switch (cur->type) {
- case CMARK_NODE_TEXT:
- case CMARK_NODE_HTML_INLINE:
- case CMARK_NODE_CODE:
- case CMARK_NODE_HTML_BLOCK:
- cmark_chunk_to_cstr(iter->mem, &cur->as.literal);
- break;
- case CMARK_NODE_LINK:
- cmark_chunk_to_cstr(iter->mem, &cur->as.link.url);
- cmark_chunk_to_cstr(iter->mem, &cur->as.link.title);
- break;
- case CMARK_NODE_CUSTOM_INLINE:
- cmark_chunk_to_cstr(iter->mem, &cur->as.custom.on_enter);
- cmark_chunk_to_cstr(iter->mem, &cur->as.custom.on_exit);
- break;
- }
- }
- }
-
- cmark_iter_free(iter);
-}
diff --git a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/iterator.h b/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/iterator.h
deleted file mode 100644
index 47e10e5..0000000
--- a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/iterator.h
+++ /dev/null
@@ -1,26 +0,0 @@
-#ifndef CMARK_ITERATOR_H
-#define CMARK_ITERATOR_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include "cmark-gfm.h"
-
-typedef struct {
- cmark_event_type ev_type;
- cmark_node *node;
-} cmark_iter_state;
-
-struct cmark_iter {
- cmark_mem *mem;
- cmark_node *root;
- cmark_iter_state cur;
- cmark_iter_state next;
-};
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/iterator.o b/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/iterator.o
deleted file mode 100644
index 45bd171..0000000
Binary files a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/iterator.o and /dev/null differ
diff --git a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/latex.c b/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/latex.c
deleted file mode 100644
index 1a6367a..0000000
--- a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/latex.c
+++ /dev/null
@@ -1,468 +0,0 @@
-#include
-#include
-#include
-#include
-
-#include "config.h"
-#include "cmark-gfm.h"
-#include "node.h"
-#include "buffer.h"
-#include "utf8.h"
-#include "scanners.h"
-#include "render.h"
-#include "syntax_extension.h"
-
-#define OUT(s, wrap, escaping) renderer->out(renderer, node, s, wrap, escaping)
-#define LIT(s) renderer->out(renderer, node, s, false, LITERAL)
-#define CR() renderer->cr(renderer)
-#define BLANKLINE() renderer->blankline(renderer)
-#define LIST_NUMBER_STRING_SIZE 20
-
-static CMARK_INLINE void outc(cmark_renderer *renderer, cmark_node *node,
- cmark_escaping escape,
- int32_t c, unsigned char nextc) {
- if (escape == LITERAL) {
- cmark_render_code_point(renderer, c);
- return;
- }
-
- switch (c) {
- case 123: // '{'
- case 125: // '}'
- case 35: // '#'
- case 37: // '%'
- case 38: // '&'
- cmark_render_ascii(renderer, "\\");
- cmark_render_code_point(renderer, c);
- break;
- case 36: // '$'
- case 95: // '_'
- if (escape == NORMAL) {
- cmark_render_ascii(renderer, "\\");
- }
- cmark_render_code_point(renderer, c);
- break;
- case 45: // '-'
- if (nextc == 45) { // prevent ligature
- cmark_render_ascii(renderer, "-{}");
- } else {
- cmark_render_ascii(renderer, "-");
- }
- break;
- case 126: // '~'
- if (escape == NORMAL) {
- cmark_render_ascii(renderer, "\\textasciitilde{}");
- } else {
- cmark_render_code_point(renderer, c);
- }
- break;
- case 94: // '^'
- cmark_render_ascii(renderer, "\\^{}");
- break;
- case 92: // '\\'
- if (escape == URL) {
- // / acts as path sep even on windows:
- cmark_render_ascii(renderer, "/");
- } else {
- cmark_render_ascii(renderer, "\\textbackslash{}");
- }
- break;
- case 124: // '|'
- cmark_render_ascii(renderer, "\\textbar{}");
- break;
- case 60: // '<'
- cmark_render_ascii(renderer, "\\textless{}");
- break;
- case 62: // '>'
- cmark_render_ascii(renderer, "\\textgreater{}");
- break;
- case 91: // '['
- case 93: // ']'
- cmark_render_ascii(renderer, "{");
- cmark_render_code_point(renderer, c);
- cmark_render_ascii(renderer, "}");
- break;
- case 34: // '"'
- cmark_render_ascii(renderer, "\\textquotedbl{}");
- // requires \usepackage[T1]{fontenc}
- break;
- case 39: // '\''
- cmark_render_ascii(renderer, "\\textquotesingle{}");
- // requires \usepackage{textcomp}
- break;
- case 160: // nbsp
- cmark_render_ascii(renderer, "~");
- break;
- case 8230: // hellip
- cmark_render_ascii(renderer, "\\ldots{}");
- break;
- case 8216: // lsquo
- if (escape == NORMAL) {
- cmark_render_ascii(renderer, "`");
- } else {
- cmark_render_code_point(renderer, c);
- }
- break;
- case 8217: // rsquo
- if (escape == NORMAL) {
- cmark_render_ascii(renderer, "\'");
- } else {
- cmark_render_code_point(renderer, c);
- }
- break;
- case 8220: // ldquo
- if (escape == NORMAL) {
- cmark_render_ascii(renderer, "``");
- } else {
- cmark_render_code_point(renderer, c);
- }
- break;
- case 8221: // rdquo
- if (escape == NORMAL) {
- cmark_render_ascii(renderer, "''");
- } else {
- cmark_render_code_point(renderer, c);
- }
- break;
- case 8212: // emdash
- if (escape == NORMAL) {
- cmark_render_ascii(renderer, "---");
- } else {
- cmark_render_code_point(renderer, c);
- }
- break;
- case 8211: // endash
- if (escape == NORMAL) {
- cmark_render_ascii(renderer, "--");
- } else {
- cmark_render_code_point(renderer, c);
- }
- break;
- default:
- cmark_render_code_point(renderer, c);
- }
-}
-
-typedef enum {
- NO_LINK,
- URL_AUTOLINK,
- EMAIL_AUTOLINK,
- NORMAL_LINK,
- INTERNAL_LINK
-} link_type;
-
-static link_type get_link_type(cmark_node *node) {
- size_t title_len, url_len;
- cmark_node *link_text;
- char *realurl;
- int realurllen;
- bool isemail = false;
-
- if (node->type != CMARK_NODE_LINK) {
- return NO_LINK;
- }
-
- const char *url = cmark_node_get_url(node);
- cmark_chunk url_chunk = cmark_chunk_literal(url);
-
- if (url && *url == '#') {
- return INTERNAL_LINK;
- }
-
- url_len = strlen(url);
- if (url_len == 0 || scan_scheme(&url_chunk, 0) == 0) {
- return NO_LINK;
- }
-
- const char *title = cmark_node_get_title(node);
- title_len = strlen(title);
- // if it has a title, we can't treat it as an autolink:
- if (title_len == 0) {
-
- link_text = node->first_child;
- cmark_consolidate_text_nodes(link_text);
-
- if (!link_text)
- return NO_LINK;
-
- realurl = (char *)url;
- realurllen = (int)url_len;
- if (strncmp(realurl, "mailto:", 7) == 0) {
- realurl += 7;
- realurllen -= 7;
- isemail = true;
- }
- if (realurllen == link_text->as.literal.len &&
- strncmp(realurl, (char *)link_text->as.literal.data,
- link_text->as.literal.len) == 0) {
- if (isemail) {
- return EMAIL_AUTOLINK;
- } else {
- return URL_AUTOLINK;
- }
- }
- }
-
- return NORMAL_LINK;
-}
-
-static int S_get_enumlevel(cmark_node *node) {
- int enumlevel = 0;
- cmark_node *tmp = node;
- while (tmp) {
- if (tmp->type == CMARK_NODE_LIST &&
- cmark_node_get_list_type(node) == CMARK_ORDERED_LIST) {
- enumlevel++;
- }
- tmp = tmp->parent;
- }
- return enumlevel;
-}
-
-static int S_render_node(cmark_renderer *renderer, cmark_node *node,
- cmark_event_type ev_type, int options) {
- int list_number;
- int enumlevel;
- char list_number_string[LIST_NUMBER_STRING_SIZE];
- bool entering = (ev_type == CMARK_EVENT_ENTER);
- cmark_list_type list_type;
- bool allow_wrap = renderer->width > 0 && !(CMARK_OPT_NOBREAKS & options);
-
- if (node->extension && node->extension->latex_render_func) {
- node->extension->latex_render_func(node->extension, renderer, node, ev_type, options);
- return 1;
- }
-
- switch (node->type) {
- case CMARK_NODE_DOCUMENT:
- break;
-
- case CMARK_NODE_BLOCK_QUOTE:
- if (entering) {
- LIT("\\begin{quote}");
- CR();
- } else {
- LIT("\\end{quote}");
- BLANKLINE();
- }
- break;
-
- case CMARK_NODE_LIST:
- list_type = cmark_node_get_list_type(node);
- if (entering) {
- LIT("\\begin{");
- LIT(list_type == CMARK_ORDERED_LIST ? "enumerate" : "itemize");
- LIT("}");
- CR();
- list_number = cmark_node_get_list_start(node);
- if (list_number > 1) {
- enumlevel = S_get_enumlevel(node);
- // latex normally supports only five levels
- if (enumlevel >= 1 && enumlevel <= 5) {
- snprintf(list_number_string, LIST_NUMBER_STRING_SIZE, "%d",
- list_number);
- LIT("\\setcounter{enum");
- switch (enumlevel) {
- case 1: LIT("i"); break;
- case 2: LIT("ii"); break;
- case 3: LIT("iii"); break;
- case 4: LIT("iv"); break;
- case 5: LIT("v"); break;
- default: LIT("i"); break;
- }
- LIT("}{");
- OUT(list_number_string, false, NORMAL);
- LIT("}");
- }
- CR();
- }
- } else {
- LIT("\\end{");
- LIT(list_type == CMARK_ORDERED_LIST ? "enumerate" : "itemize");
- LIT("}");
- BLANKLINE();
- }
- break;
-
- case CMARK_NODE_ITEM:
- if (entering) {
- LIT("\\item ");
- } else {
- CR();
- }
- break;
-
- case CMARK_NODE_HEADING:
- if (entering) {
- switch (cmark_node_get_heading_level(node)) {
- case 1:
- LIT("\\section");
- break;
- case 2:
- LIT("\\subsection");
- break;
- case 3:
- LIT("\\subsubsection");
- break;
- case 4:
- LIT("\\paragraph");
- break;
- case 5:
- LIT("\\subparagraph");
- break;
- }
- LIT("{");
- } else {
- LIT("}");
- BLANKLINE();
- }
- break;
-
- case CMARK_NODE_CODE_BLOCK:
- CR();
- LIT("\\begin{verbatim}");
- CR();
- OUT(cmark_node_get_literal(node), false, LITERAL);
- CR();
- LIT("\\end{verbatim}");
- BLANKLINE();
- break;
-
- case CMARK_NODE_HTML_BLOCK:
- break;
-
- case CMARK_NODE_CUSTOM_BLOCK:
- CR();
- OUT(entering ? cmark_node_get_on_enter(node) : cmark_node_get_on_exit(node),
- false, LITERAL);
- CR();
- break;
-
- case CMARK_NODE_THEMATIC_BREAK:
- BLANKLINE();
- LIT("\\begin{center}\\rule{0.5\\linewidth}{\\linethickness}\\end{center}");
- BLANKLINE();
- break;
-
- case CMARK_NODE_PARAGRAPH:
- if (!entering) {
- BLANKLINE();
- }
- break;
-
- case CMARK_NODE_TEXT:
- OUT(cmark_node_get_literal(node), allow_wrap, NORMAL);
- break;
-
- case CMARK_NODE_LINEBREAK:
- LIT("\\\\");
- CR();
- break;
-
- case CMARK_NODE_SOFTBREAK:
- if (options & CMARK_OPT_HARDBREAKS) {
- LIT("\\\\");
- CR();
- } else if (renderer->width == 0 && !(CMARK_OPT_NOBREAKS & options)) {
- CR();
- } else {
- OUT(" ", allow_wrap, NORMAL);
- }
- break;
-
- case CMARK_NODE_CODE:
- LIT("\\texttt{");
- OUT(cmark_node_get_literal(node), false, NORMAL);
- LIT("}");
- break;
-
- case CMARK_NODE_HTML_INLINE:
- break;
-
- case CMARK_NODE_CUSTOM_INLINE:
- OUT(entering ? cmark_node_get_on_enter(node) : cmark_node_get_on_exit(node),
- false, LITERAL);
- break;
-
- case CMARK_NODE_STRONG:
- if (node->parent == NULL || node->parent->type != CMARK_NODE_STRONG) {
- if (entering) {
- LIT("\\textbf{");
- } else {
- LIT("}");
- }
- }
- break;
-
- case CMARK_NODE_EMPH:
- if (entering) {
- LIT("\\emph{");
- } else {
- LIT("}");
- }
- break;
-
- case CMARK_NODE_LINK:
- if (entering) {
- const char *url = cmark_node_get_url(node);
- // requires \usepackage{hyperref}
- switch (get_link_type(node)) {
- case URL_AUTOLINK:
- LIT("\\url{");
- OUT(url, false, URL);
- LIT("}");
- return 0; // Don't process further nodes to avoid double-rendering artefacts
- case EMAIL_AUTOLINK:
- LIT("\\href{");
- OUT(url, false, URL);
- LIT("}\\nolinkurl{");
- break;
- case NORMAL_LINK:
- LIT("\\href{");
- OUT(url, false, URL);
- LIT("}{");
- break;
- case INTERNAL_LINK:
- LIT("\\protect\\hyperlink{");
- OUT(url + 1, false, URL);
- LIT("}{");
- break;
- case NO_LINK:
- LIT("{"); // error?
- }
- } else {
- LIT("}");
- }
-
- break;
-
- case CMARK_NODE_IMAGE:
- if (entering) {
- LIT("\\protect\\includegraphics{");
- // requires \include{graphicx}
- OUT(cmark_node_get_url(node), false, URL);
- LIT("}");
- return 0;
- }
- break;
-
- case CMARK_NODE_FOOTNOTE_DEFINITION:
- case CMARK_NODE_FOOTNOTE_REFERENCE:
- // TODO
- break;
-
- default:
- assert(false);
- break;
- }
-
- return 1;
-}
-
-char *cmark_render_latex(cmark_node *root, int options, int width) {
- return cmark_render_latex_with_mem(root, options, width, cmark_node_mem(root));
-}
-
-char *cmark_render_latex_with_mem(cmark_node *root, int options, int width, cmark_mem *mem) {
- return cmark_render(mem, root, options, width, outc, S_render_node);
-}
diff --git a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/latex.o b/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/latex.o
deleted file mode 100644
index ebb89fc..0000000
Binary files a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/latex.o and /dev/null differ
diff --git a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/linked_list.c b/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/linked_list.c
deleted file mode 100644
index 8c26dc5..0000000
--- a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/linked_list.c
+++ /dev/null
@@ -1,37 +0,0 @@
-#include
-
-#include "cmark-gfm.h"
-
-cmark_llist *cmark_llist_append(cmark_mem *mem, cmark_llist *head, void *data) {
- cmark_llist *tmp;
- cmark_llist *new_node = (cmark_llist *) mem->calloc(1, sizeof(cmark_llist));
-
- new_node->data = data;
- new_node->next = NULL;
-
- if (!head)
- return new_node;
-
- for (tmp = head; tmp->next; tmp=tmp->next);
-
- tmp->next = new_node;
-
- return head;
-}
-
-void cmark_llist_free_full(cmark_mem *mem, cmark_llist *head, cmark_free_func free_func) {
- cmark_llist *tmp, *prev;
-
- for (tmp = head; tmp;) {
- if (free_func)
- free_func(mem, tmp->data);
-
- prev = tmp;
- tmp = tmp->next;
- mem->free(prev);
- }
-}
-
-void cmark_llist_free(cmark_mem *mem, cmark_llist *head) {
- cmark_llist_free_full(mem, head, NULL);
-}
diff --git a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/linked_list.o b/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/linked_list.o
deleted file mode 100644
index c3efd0d..0000000
Binary files a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/linked_list.o and /dev/null differ
diff --git a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/man.c b/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/man.c
deleted file mode 100644
index 634fd9d..0000000
--- a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/man.c
+++ /dev/null
@@ -1,274 +0,0 @@
-#include
-#include
-#include
-#include
-
-#include "config.h"
-#include "cmark-gfm.h"
-#include "node.h"
-#include "buffer.h"
-#include "utf8.h"
-#include "render.h"
-#include "syntax_extension.h"
-
-#define OUT(s, wrap, escaping) renderer->out(renderer, node, s, wrap, escaping)
-#define LIT(s) renderer->out(renderer, node, s, false, LITERAL)
-#define CR() renderer->cr(renderer)
-#define BLANKLINE() renderer->blankline(renderer)
-#define LIST_NUMBER_SIZE 20
-
-// Functions to convert cmark_nodes to groff man strings.
-static void S_outc(cmark_renderer *renderer, cmark_node *node,
- cmark_escaping escape, int32_t c,
- unsigned char nextc) {
- (void)(nextc);
-
- if (escape == LITERAL) {
- cmark_render_code_point(renderer, c);
- return;
- }
-
- switch (c) {
- case 46:
- if (renderer->begin_line) {
- cmark_render_ascii(renderer, "\\&.");
- } else {
- cmark_render_code_point(renderer, c);
- }
- break;
- case 39:
- if (renderer->begin_line) {
- cmark_render_ascii(renderer, "\\&'");
- } else {
- cmark_render_code_point(renderer, c);
- }
- break;
- case 45:
- cmark_render_ascii(renderer, "\\-");
- break;
- case 92:
- cmark_render_ascii(renderer, "\\e");
- break;
- case 8216: // left single quote
- cmark_render_ascii(renderer, "\\[oq]");
- break;
- case 8217: // right single quote
- cmark_render_ascii(renderer, "\\[cq]");
- break;
- case 8220: // left double quote
- cmark_render_ascii(renderer, "\\[lq]");
- break;
- case 8221: // right double quote
- cmark_render_ascii(renderer, "\\[rq]");
- break;
- case 8212: // em dash
- cmark_render_ascii(renderer, "\\[em]");
- break;
- case 8211: // en dash
- cmark_render_ascii(renderer, "\\[en]");
- break;
- default:
- cmark_render_code_point(renderer, c);
- }
-}
-
-static int S_render_node(cmark_renderer *renderer, cmark_node *node,
- cmark_event_type ev_type, int options) {
- int list_number;
- bool entering = (ev_type == CMARK_EVENT_ENTER);
- bool allow_wrap = renderer->width > 0 && !(CMARK_OPT_NOBREAKS & options);
-
- if (node->extension && node->extension->man_render_func) {
- node->extension->man_render_func(node->extension, renderer, node, ev_type, options);
- return 1;
- }
-
- switch (node->type) {
- case CMARK_NODE_DOCUMENT:
- if (entering) {
- /* Define a strikethrough macro */
- /* Commenting out because this makes tests fail
- LIT(".de ST");
- CR();
- LIT(".nr ww \\w'\\\\$1'");
- CR();
- LIT("\\Z@\\v'-.25m'\\l'\\\\n[ww]u'@\\\\$1");
- CR();
- LIT("..");
- CR();
- */
- }
- break;
-
- case CMARK_NODE_BLOCK_QUOTE:
- if (entering) {
- CR();
- LIT(".RS");
- CR();
- } else {
- CR();
- LIT(".RE");
- CR();
- }
- break;
-
- case CMARK_NODE_LIST:
- break;
-
- case CMARK_NODE_ITEM:
- if (entering) {
- CR();
- LIT(".IP ");
- if (cmark_node_get_list_type(node->parent) == CMARK_BULLET_LIST) {
- LIT("\\[bu] 2");
- } else {
- list_number = cmark_node_get_item_index(node);
- char list_number_s[LIST_NUMBER_SIZE];
- snprintf(list_number_s, LIST_NUMBER_SIZE, "\"%d.\" 4", list_number);
- LIT(list_number_s);
- }
- CR();
- } else {
- CR();
- }
- break;
-
- case CMARK_NODE_HEADING:
- if (entering) {
- CR();
- LIT(cmark_node_get_heading_level(node) == 1 ? ".SH" : ".SS");
- CR();
- } else {
- CR();
- }
- break;
-
- case CMARK_NODE_CODE_BLOCK:
- CR();
- LIT(".IP\n.nf\n\\f[C]\n");
- OUT(cmark_node_get_literal(node), false, NORMAL);
- CR();
- LIT("\\f[]\n.fi");
- CR();
- break;
-
- case CMARK_NODE_HTML_BLOCK:
- break;
-
- case CMARK_NODE_CUSTOM_BLOCK:
- CR();
- OUT(entering ? cmark_node_get_on_enter(node) : cmark_node_get_on_exit(node),
- false, LITERAL);
- CR();
- break;
-
- case CMARK_NODE_THEMATIC_BREAK:
- CR();
- LIT(".PP\n * * * * *");
- CR();
- break;
-
- case CMARK_NODE_PARAGRAPH:
- if (entering) {
- // no blank line if first paragraph in list:
- if (node->parent && node->parent->type == CMARK_NODE_ITEM &&
- node->prev == NULL) {
- // no blank line or .PP
- } else {
- CR();
- LIT(".PP");
- CR();
- }
- } else {
- CR();
- }
- break;
-
- case CMARK_NODE_TEXT:
- OUT(cmark_node_get_literal(node), allow_wrap, NORMAL);
- break;
-
- case CMARK_NODE_LINEBREAK:
- LIT(".PD 0\n.P\n.PD");
- CR();
- break;
-
- case CMARK_NODE_SOFTBREAK:
- if (options & CMARK_OPT_HARDBREAKS) {
- LIT(".PD 0\n.P\n.PD");
- CR();
- } else if (renderer->width == 0 && !(CMARK_OPT_NOBREAKS & options)) {
- CR();
- } else {
- OUT(" ", allow_wrap, LITERAL);
- }
- break;
-
- case CMARK_NODE_CODE:
- LIT("\\f[C]");
- OUT(cmark_node_get_literal(node), allow_wrap, NORMAL);
- LIT("\\f[]");
- break;
-
- case CMARK_NODE_HTML_INLINE:
- break;
-
- case CMARK_NODE_CUSTOM_INLINE:
- OUT(entering ? cmark_node_get_on_enter(node) : cmark_node_get_on_exit(node),
- false, LITERAL);
- break;
-
- case CMARK_NODE_STRONG:
- if (node->parent == NULL || node->parent->type != CMARK_NODE_STRONG) {
- if (entering) {
- LIT("\\f[B]");
- } else {
- LIT("\\f[]");
- }
- }
- break;
-
- case CMARK_NODE_EMPH:
- if (entering) {
- LIT("\\f[I]");
- } else {
- LIT("\\f[]");
- }
- break;
-
- case CMARK_NODE_LINK:
- if (!entering) {
- LIT(" (");
- OUT(cmark_node_get_url(node), allow_wrap, URL);
- LIT(")");
- }
- break;
-
- case CMARK_NODE_IMAGE:
- if (entering) {
- LIT("[IMAGE: ");
- } else {
- LIT("]");
- }
- break;
-
- case CMARK_NODE_FOOTNOTE_DEFINITION:
- case CMARK_NODE_FOOTNOTE_REFERENCE:
- // TODO
- break;
-
- default:
- assert(false);
- break;
- }
-
- return 1;
-}
-
-char *cmark_render_man(cmark_node *root, int options, int width) {
- return cmark_render_man_with_mem(root, options, width, cmark_node_mem(root));
-}
-
-char *cmark_render_man_with_mem(cmark_node *root, int options, int width, cmark_mem *mem) {
- return cmark_render(mem, root, options, width, S_outc, S_render_node);
-}
diff --git a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/man.o b/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/man.o
deleted file mode 100644
index 37decfb..0000000
Binary files a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/man.o and /dev/null differ
diff --git a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/map.c b/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/map.c
deleted file mode 100644
index f60f8fc..0000000
--- a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/map.c
+++ /dev/null
@@ -1,129 +0,0 @@
-#include "map.h"
-#include "utf8.h"
-#include "parser.h"
-
-// normalize map label: collapse internal whitespace to single space,
-// remove leading/trailing whitespace, case fold
-// Return NULL if the label is actually empty (i.e. composed solely from
-// whitespace)
-unsigned char *normalize_map_label(cmark_mem *mem, cmark_chunk *ref) {
- cmark_strbuf normalized = CMARK_BUF_INIT(mem);
- unsigned char *result;
-
- if (ref == NULL)
- return NULL;
-
- if (ref->len == 0)
- return NULL;
-
- cmark_utf8proc_case_fold(&normalized, ref->data, ref->len);
- cmark_strbuf_trim(&normalized);
- cmark_strbuf_normalize_whitespace(&normalized);
-
- result = cmark_strbuf_detach(&normalized);
- assert(result);
-
- if (result[0] == '\0') {
- mem->free(result);
- return NULL;
- }
-
- return result;
-}
-
-static int
-labelcmp(const unsigned char *a, const unsigned char *b) {
- return strcmp((const char *)a, (const char *)b);
-}
-
-static int
-refcmp(const void *p1, const void *p2) {
- cmark_map_entry *r1 = *(cmark_map_entry **)p1;
- cmark_map_entry *r2 = *(cmark_map_entry **)p2;
- int res = labelcmp(r1->label, r2->label);
- return res ? res : ((int)r1->age - (int)r2->age);
-}
-
-static int
-refsearch(const void *label, const void *p2) {
- cmark_map_entry *ref = *(cmark_map_entry **)p2;
- return labelcmp((const unsigned char *)label, ref->label);
-}
-
-static void sort_map(cmark_map *map) {
- size_t i = 0, last = 0, size = map->size;
- cmark_map_entry *r = map->refs, **sorted = NULL;
-
- sorted = (cmark_map_entry **)map->mem->calloc(size, sizeof(cmark_map_entry *));
- while (r) {
- sorted[i++] = r;
- r = r->next;
- }
-
- qsort(sorted, size, sizeof(cmark_map_entry *), refcmp);
-
- for (i = 1; i < size; i++) {
- if (labelcmp(sorted[i]->label, sorted[last]->label) != 0)
- sorted[++last] = sorted[i];
- }
-
- map->sorted = sorted;
- map->size = last + 1;
-}
-
-cmark_map_entry *cmark_map_lookup(cmark_map *map, cmark_chunk *label) {
- cmark_map_entry **ref = NULL;
- cmark_map_entry *r = NULL;
- unsigned char *norm;
-
- if (label->len < 1 || label->len > MAX_LINK_LABEL_LENGTH)
- return NULL;
-
- if (map == NULL || !map->size)
- return NULL;
-
- norm = normalize_map_label(map->mem, label);
- if (norm == NULL)
- return NULL;
-
- if (!map->sorted)
- sort_map(map);
-
- ref = (cmark_map_entry **)bsearch(norm, map->sorted, map->size, sizeof(cmark_map_entry *), refsearch);
- map->mem->free(norm);
-
- if (ref != NULL) {
- r = ref[0];
- /* Check for expansion limit */
- if (r->size > map->max_ref_size - map->ref_size)
- return NULL;
- map->ref_size += r->size;
- }
-
- return r;
-}
-
-void cmark_map_free(cmark_map *map) {
- cmark_map_entry *ref;
-
- if (map == NULL)
- return;
-
- ref = map->refs;
- while (ref) {
- cmark_map_entry *next = ref->next;
- map->free(map, ref);
- ref = next;
- }
-
- map->mem->free(map->sorted);
- map->mem->free(map);
-}
-
-cmark_map *cmark_map_new(cmark_mem *mem, cmark_map_free_f free) {
- cmark_map *map = (cmark_map *)mem->calloc(1, sizeof(cmark_map));
- map->mem = mem;
- map->free = free;
- map->max_ref_size = UINT_MAX;
- return map;
-}
diff --git a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/map.h b/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/map.h
deleted file mode 100644
index cc9b1f3..0000000
--- a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/map.h
+++ /dev/null
@@ -1,44 +0,0 @@
-#ifndef CMARK_MAP_H
-#define CMARK_MAP_H
-
-#include "chunk.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-struct cmark_map_entry {
- struct cmark_map_entry *next;
- unsigned char *label;
- size_t age;
- size_t size;
-};
-
-typedef struct cmark_map_entry cmark_map_entry;
-
-struct cmark_map;
-
-typedef void (*cmark_map_free_f)(struct cmark_map *, cmark_map_entry *);
-
-struct cmark_map {
- cmark_mem *mem;
- cmark_map_entry *refs;
- cmark_map_entry **sorted;
- size_t size;
- size_t ref_size;
- size_t max_ref_size;
- cmark_map_free_f free;
-};
-
-typedef struct cmark_map cmark_map;
-
-unsigned char *normalize_map_label(cmark_mem *mem, cmark_chunk *ref);
-cmark_map *cmark_map_new(cmark_mem *mem, cmark_map_free_f free);
-void cmark_map_free(cmark_map *map);
-cmark_map_entry *cmark_map_lookup(cmark_map *map, cmark_chunk *label);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/map.o b/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/map.o
deleted file mode 100644
index 62e39a7..0000000
Binary files a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/map.o and /dev/null differ
diff --git a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/node.c b/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/node.c
deleted file mode 100644
index e7a9606..0000000
--- a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/node.c
+++ /dev/null
@@ -1,1045 +0,0 @@
-#include
-#include
-
-#include "config.h"
-#include "node.h"
-#include "syntax_extension.h"
-
-/**
- * Expensive safety checks are off by default, but can be enabled
- * by calling cmark_enable_safety_checks().
- */
-static bool enable_safety_checks = false;
-
-void cmark_enable_safety_checks(bool enable) {
- enable_safety_checks = enable;
-}
-
-static void S_node_unlink(cmark_node *node);
-
-#define NODE_MEM(node) cmark_node_mem(node)
-
-void cmark_register_node_flag(cmark_node_internal_flags *flags) {
- static cmark_node_internal_flags nextflag = CMARK_NODE__REGISTER_FIRST;
-
- // flags should be a pointer to a global variable and this function
- // should only be called once to initialize its value.
- if (*flags) {
- fprintf(stderr, "flag initialization error in cmark_register_node_flag\n");
- abort();
- }
-
- // Check that we haven't run out of bits.
- if (nextflag == 0) {
- fprintf(stderr, "too many flags in cmark_register_node_flag\n");
- abort();
- }
-
- *flags = nextflag;
- nextflag <<= 1;
-}
-
-void cmark_init_standard_node_flags(void) {}
-
-bool cmark_node_can_contain_type(cmark_node *node, cmark_node_type child_type) {
- if (child_type == CMARK_NODE_DOCUMENT) {
- return false;
- }
-
- if (node->extension && node->extension->can_contain_func) {
- return node->extension->can_contain_func(node->extension, node, child_type) != 0;
- }
-
- switch (node->type) {
- case CMARK_NODE_DOCUMENT:
- case CMARK_NODE_BLOCK_QUOTE:
- case CMARK_NODE_FOOTNOTE_DEFINITION:
- case CMARK_NODE_ITEM:
- return CMARK_NODE_TYPE_BLOCK_P(child_type) && child_type != CMARK_NODE_ITEM;
-
- case CMARK_NODE_LIST:
- return child_type == CMARK_NODE_ITEM;
-
- case CMARK_NODE_CUSTOM_BLOCK:
- return true;
-
- case CMARK_NODE_PARAGRAPH:
- case CMARK_NODE_HEADING:
- case CMARK_NODE_EMPH:
- case CMARK_NODE_STRONG:
- case CMARK_NODE_LINK:
- case CMARK_NODE_IMAGE:
- case CMARK_NODE_CUSTOM_INLINE:
- return CMARK_NODE_TYPE_INLINE_P(child_type);
-
- default:
- break;
- }
-
- return false;
-}
-
-static bool S_can_contain(cmark_node *node, cmark_node *child) {
- if (node == NULL || child == NULL) {
- return false;
- }
- if (NODE_MEM(node) != NODE_MEM(child)) {
- return 0;
- }
-
- if (enable_safety_checks) {
- // Verify that child is not an ancestor of node or equal to node.
- cmark_node *cur = node;
- do {
- if (cur == child) {
- return false;
- }
- cur = cur->parent;
- } while (cur != NULL);
- }
-
- return cmark_node_can_contain_type(node, (cmark_node_type) child->type);
-}
-
-cmark_node *cmark_node_new_with_mem_and_ext(cmark_node_type type, cmark_mem *mem, cmark_syntax_extension *extension) {
- cmark_node *node = (cmark_node *)mem->calloc(1, sizeof(*node));
- cmark_strbuf_init(mem, &node->content, 0);
- node->type = (uint16_t)type;
- node->extension = extension;
-
- switch (node->type) {
- case CMARK_NODE_HEADING:
- node->as.heading.level = 1;
- break;
-
- case CMARK_NODE_LIST: {
- cmark_list *list = &node->as.list;
- list->list_type = CMARK_BULLET_LIST;
- list->start = 0;
- list->tight = false;
- break;
- }
-
- default:
- break;
- }
-
- if (node->extension && node->extension->opaque_alloc_func) {
- node->extension->opaque_alloc_func(node->extension, mem, node);
- }
-
- return node;
-}
-
-cmark_node *cmark_node_new_with_ext(cmark_node_type type, cmark_syntax_extension *extension) {
- extern cmark_mem CMARK_DEFAULT_MEM_ALLOCATOR;
- return cmark_node_new_with_mem_and_ext(type, &CMARK_DEFAULT_MEM_ALLOCATOR, extension);
-}
-
-cmark_node *cmark_node_new_with_mem(cmark_node_type type, cmark_mem *mem)
-{
- return cmark_node_new_with_mem_and_ext(type, mem, NULL);
-}
-
-cmark_node *cmark_node_new(cmark_node_type type) {
- return cmark_node_new_with_ext(type, NULL);
-}
-
-static void free_node_as(cmark_node *node) {
- switch (node->type) {
- case CMARK_NODE_CODE_BLOCK:
- cmark_chunk_free(NODE_MEM(node), &node->as.code.info);
- cmark_chunk_free(NODE_MEM(node), &node->as.code.literal);
- break;
- case CMARK_NODE_TEXT:
- case CMARK_NODE_HTML_INLINE:
- case CMARK_NODE_CODE:
- case CMARK_NODE_HTML_BLOCK:
- case CMARK_NODE_FOOTNOTE_REFERENCE:
- case CMARK_NODE_FOOTNOTE_DEFINITION:
- cmark_chunk_free(NODE_MEM(node), &node->as.literal);
- break;
- case CMARK_NODE_LINK:
- case CMARK_NODE_IMAGE:
- cmark_chunk_free(NODE_MEM(node), &node->as.link.url);
- cmark_chunk_free(NODE_MEM(node), &node->as.link.title);
- break;
- case CMARK_NODE_CUSTOM_BLOCK:
- case CMARK_NODE_CUSTOM_INLINE:
- cmark_chunk_free(NODE_MEM(node), &node->as.custom.on_enter);
- cmark_chunk_free(NODE_MEM(node), &node->as.custom.on_exit);
- break;
- default:
- break;
- }
-}
-
-// Free a cmark_node list and any children.
-static void S_free_nodes(cmark_node *e) {
- cmark_node *next;
- while (e != NULL) {
- cmark_strbuf_free(&e->content);
-
- if (e->user_data && e->user_data_free_func)
- e->user_data_free_func(NODE_MEM(e), e->user_data);
-
- if (e->as.opaque && e->extension && e->extension->opaque_free_func)
- e->extension->opaque_free_func(e->extension, NODE_MEM(e), e);
-
- free_node_as(e);
-
- if (e->last_child) {
- // Splice children into list
- e->last_child->next = e->next;
- e->next = e->first_child;
- }
- next = e->next;
- NODE_MEM(e)->free(e);
- e = next;
- }
-}
-
-void cmark_node_free(cmark_node *node) {
- S_node_unlink(node);
- node->next = NULL;
- S_free_nodes(node);
-}
-
-cmark_node_type cmark_node_get_type(cmark_node *node) {
- if (node == NULL) {
- return CMARK_NODE_NONE;
- } else {
- return (cmark_node_type)node->type;
- }
-}
-
-int cmark_node_set_type(cmark_node * node, cmark_node_type type) {
- cmark_node_type initial_type;
-
- if (type == node->type)
- return 1;
-
- initial_type = (cmark_node_type) node->type;
- node->type = (uint16_t)type;
-
- if (!S_can_contain(node->parent, node)) {
- node->type = (uint16_t)initial_type;
- return 0;
- }
-
- /* We rollback the type to free the union members appropriately */
- node->type = (uint16_t)initial_type;
- free_node_as(node);
-
- node->type = (uint16_t)type;
-
- return 1;
-}
-
-const char *cmark_node_get_type_string(cmark_node *node) {
- if (node == NULL) {
- return "NONE";
- }
-
- if (node->extension && node->extension->get_type_string_func) {
- return node->extension->get_type_string_func(node->extension, node);
- }
-
- switch (node->type) {
- case CMARK_NODE_NONE:
- return "none";
- case CMARK_NODE_DOCUMENT:
- return "document";
- case CMARK_NODE_BLOCK_QUOTE:
- return "block_quote";
- case CMARK_NODE_LIST:
- return "list";
- case CMARK_NODE_ITEM:
- return "item";
- case CMARK_NODE_CODE_BLOCK:
- return "code_block";
- case CMARK_NODE_HTML_BLOCK:
- return "html_block";
- case CMARK_NODE_CUSTOM_BLOCK:
- return "custom_block";
- case CMARK_NODE_PARAGRAPH:
- return "paragraph";
- case CMARK_NODE_HEADING:
- return "heading";
- case CMARK_NODE_THEMATIC_BREAK:
- return "thematic_break";
- case CMARK_NODE_TEXT:
- return "text";
- case CMARK_NODE_SOFTBREAK:
- return "softbreak";
- case CMARK_NODE_LINEBREAK:
- return "linebreak";
- case CMARK_NODE_CODE:
- return "code";
- case CMARK_NODE_HTML_INLINE:
- return "html_inline";
- case CMARK_NODE_CUSTOM_INLINE:
- return "custom_inline";
- case CMARK_NODE_EMPH:
- return "emph";
- case CMARK_NODE_STRONG:
- return "strong";
- case CMARK_NODE_LINK:
- return "link";
- case CMARK_NODE_IMAGE:
- return "image";
- }
-
- return "";
-}
-
-cmark_node *cmark_node_next(cmark_node *node) {
- if (node == NULL) {
- return NULL;
- } else {
- return node->next;
- }
-}
-
-cmark_node *cmark_node_previous(cmark_node *node) {
- if (node == NULL) {
- return NULL;
- } else {
- return node->prev;
- }
-}
-
-cmark_node *cmark_node_parent(cmark_node *node) {
- if (node == NULL) {
- return NULL;
- } else {
- return node->parent;
- }
-}
-
-cmark_node *cmark_node_first_child(cmark_node *node) {
- if (node == NULL) {
- return NULL;
- } else {
- return node->first_child;
- }
-}
-
-cmark_node *cmark_node_last_child(cmark_node *node) {
- if (node == NULL) {
- return NULL;
- } else {
- return node->last_child;
- }
-}
-
-cmark_node *cmark_node_parent_footnote_def(cmark_node *node) {
- if (node == NULL) {
- return NULL;
- } else {
- return node->parent_footnote_def;
- }
-}
-
-void *cmark_node_get_user_data(cmark_node *node) {
- if (node == NULL) {
- return NULL;
- } else {
- return node->user_data;
- }
-}
-
-int cmark_node_set_user_data(cmark_node *node, void *user_data) {
- if (node == NULL) {
- return 0;
- }
- node->user_data = user_data;
- return 1;
-}
-
-int cmark_node_set_user_data_free_func(cmark_node *node,
- cmark_free_func free_func) {
- if (node == NULL) {
- return 0;
- }
- node->user_data_free_func = free_func;
- return 1;
-}
-
-const char *cmark_node_get_literal(cmark_node *node) {
- if (node == NULL) {
- return NULL;
- }
-
- switch (node->type) {
- case CMARK_NODE_HTML_BLOCK:
- case CMARK_NODE_TEXT:
- case CMARK_NODE_HTML_INLINE:
- case CMARK_NODE_CODE:
- case CMARK_NODE_FOOTNOTE_REFERENCE:
- case CMARK_NODE_FOOTNOTE_DEFINITION:
- return cmark_chunk_to_cstr(NODE_MEM(node), &node->as.literal);
-
- case CMARK_NODE_CODE_BLOCK:
- return cmark_chunk_to_cstr(NODE_MEM(node), &node->as.code.literal);
-
- default:
- break;
- }
-
- return NULL;
-}
-
-int cmark_node_set_literal(cmark_node *node, const char *content) {
- if (node == NULL) {
- return 0;
- }
-
- switch (node->type) {
- case CMARK_NODE_HTML_BLOCK:
- case CMARK_NODE_TEXT:
- case CMARK_NODE_HTML_INLINE:
- case CMARK_NODE_CODE:
- case CMARK_NODE_FOOTNOTE_REFERENCE:
- cmark_chunk_set_cstr(NODE_MEM(node), &node->as.literal, content);
- return 1;
-
- case CMARK_NODE_CODE_BLOCK:
- cmark_chunk_set_cstr(NODE_MEM(node), &node->as.code.literal, content);
- return 1;
-
- default:
- break;
- }
-
- return 0;
-}
-
-const char *cmark_node_get_string_content(cmark_node *node) {
- return (char *) node->content.ptr;
-}
-
-int cmark_node_set_string_content(cmark_node *node, const char *content) {
- cmark_strbuf_sets(&node->content, content);
- return true;
-}
-
-int cmark_node_get_heading_level(cmark_node *node) {
- if (node == NULL) {
- return 0;
- }
-
- switch (node->type) {
- case CMARK_NODE_HEADING:
- return node->as.heading.level;
-
- default:
- break;
- }
-
- return 0;
-}
-
-int cmark_node_set_heading_level(cmark_node *node, int level) {
- if (node == NULL || level < 1 || level > 6) {
- return 0;
- }
-
- switch (node->type) {
- case CMARK_NODE_HEADING:
- node->as.heading.level = level;
- return 1;
-
- default:
- break;
- }
-
- return 0;
-}
-
-cmark_list_type cmark_node_get_list_type(cmark_node *node) {
- if (node == NULL) {
- return CMARK_NO_LIST;
- }
-
- if (node->type == CMARK_NODE_LIST) {
- return node->as.list.list_type;
- } else {
- return CMARK_NO_LIST;
- }
-}
-
-int cmark_node_set_list_type(cmark_node *node, cmark_list_type type) {
- if (!(type == CMARK_BULLET_LIST || type == CMARK_ORDERED_LIST)) {
- return 0;
- }
-
- if (node == NULL) {
- return 0;
- }
-
- if (node->type == CMARK_NODE_LIST) {
- node->as.list.list_type = type;
- return 1;
- } else {
- return 0;
- }
-}
-
-cmark_delim_type cmark_node_get_list_delim(cmark_node *node) {
- if (node == NULL) {
- return CMARK_NO_DELIM;
- }
-
- if (node->type == CMARK_NODE_LIST) {
- return node->as.list.delimiter;
- } else {
- return CMARK_NO_DELIM;
- }
-}
-
-int cmark_node_set_list_delim(cmark_node *node, cmark_delim_type delim) {
- if (!(delim == CMARK_PERIOD_DELIM || delim == CMARK_PAREN_DELIM)) {
- return 0;
- }
-
- if (node == NULL) {
- return 0;
- }
-
- if (node->type == CMARK_NODE_LIST) {
- node->as.list.delimiter = delim;
- return 1;
- } else {
- return 0;
- }
-}
-
-int cmark_node_get_list_start(cmark_node *node) {
- if (node == NULL) {
- return 0;
- }
-
- if (node->type == CMARK_NODE_LIST) {
- return node->as.list.start;
- } else {
- return 0;
- }
-}
-
-int cmark_node_set_list_start(cmark_node *node, int start) {
- if (node == NULL || start < 0) {
- return 0;
- }
-
- if (node->type == CMARK_NODE_LIST) {
- node->as.list.start = start;
- return 1;
- } else {
- return 0;
- }
-}
-
-int cmark_node_get_list_tight(cmark_node *node) {
- if (node == NULL) {
- return 0;
- }
-
- if (node->type == CMARK_NODE_LIST) {
- return node->as.list.tight;
- } else {
- return 0;
- }
-}
-
-int cmark_node_set_list_tight(cmark_node *node, int tight) {
- if (node == NULL) {
- return 0;
- }
-
- if (node->type == CMARK_NODE_LIST) {
- node->as.list.tight = tight == 1;
- return 1;
- } else {
- return 0;
- }
-}
-
-int cmark_node_get_item_index(cmark_node *node) {
- if (node == NULL) {
- return 0;
- }
-
- if (node->type == CMARK_NODE_ITEM) {
- return node->as.list.start;
- } else {
- return 0;
- }
-}
-
-int cmark_node_set_item_index(cmark_node *node, int idx) {
- if (node == NULL || idx < 0) {
- return 0;
- }
-
- if (node->type == CMARK_NODE_ITEM) {
- node->as.list.start = idx;
- return 1;
- } else {
- return 0;
- }
-}
-
-const char *cmark_node_get_fence_info(cmark_node *node) {
- if (node == NULL) {
- return NULL;
- }
-
- if (node->type == CMARK_NODE_CODE_BLOCK) {
- return cmark_chunk_to_cstr(NODE_MEM(node), &node->as.code.info);
- } else {
- return NULL;
- }
-}
-
-int cmark_node_set_fence_info(cmark_node *node, const char *info) {
- if (node == NULL) {
- return 0;
- }
-
- if (node->type == CMARK_NODE_CODE_BLOCK) {
- cmark_chunk_set_cstr(NODE_MEM(node), &node->as.code.info, info);
- return 1;
- } else {
- return 0;
- }
-}
-
-int cmark_node_get_fenced(cmark_node *node, int *length, int *offset, char *character) {
- if (node == NULL) {
- return 0;
- }
-
- if (node->type == CMARK_NODE_CODE_BLOCK) {
- *length = node->as.code.fence_length;
- *offset = node->as.code.fence_offset;
- *character = node->as.code.fence_char;
- return node->as.code.fenced;
- } else {
- return 0;
- }
-}
-
-int cmark_node_set_fenced(cmark_node * node, int fenced,
- int length, int offset, char character) {
- if (node == NULL) {
- return 0;
- }
-
- if (node->type == CMARK_NODE_CODE_BLOCK) {
- node->as.code.fenced = (int8_t)fenced;
- node->as.code.fence_length = (uint8_t)length;
- node->as.code.fence_offset = (uint8_t)offset;
- node->as.code.fence_char = character;
- return 1;
- } else {
- return 0;
- }
-}
-
-const char *cmark_node_get_url(cmark_node *node) {
- if (node == NULL) {
- return NULL;
- }
-
- switch (node->type) {
- case CMARK_NODE_LINK:
- case CMARK_NODE_IMAGE:
- return cmark_chunk_to_cstr(NODE_MEM(node), &node->as.link.url);
- default:
- break;
- }
-
- return NULL;
-}
-
-int cmark_node_set_url(cmark_node *node, const char *url) {
- if (node == NULL) {
- return 0;
- }
-
- switch (node->type) {
- case CMARK_NODE_LINK:
- case CMARK_NODE_IMAGE:
- cmark_chunk_set_cstr(NODE_MEM(node), &node->as.link.url, url);
- return 1;
- default:
- break;
- }
-
- return 0;
-}
-
-const char *cmark_node_get_title(cmark_node *node) {
- if (node == NULL) {
- return NULL;
- }
-
- switch (node->type) {
- case CMARK_NODE_LINK:
- case CMARK_NODE_IMAGE:
- return cmark_chunk_to_cstr(NODE_MEM(node), &node->as.link.title);
- default:
- break;
- }
-
- return NULL;
-}
-
-int cmark_node_set_title(cmark_node *node, const char *title) {
- if (node == NULL) {
- return 0;
- }
-
- switch (node->type) {
- case CMARK_NODE_LINK:
- case CMARK_NODE_IMAGE:
- cmark_chunk_set_cstr(NODE_MEM(node), &node->as.link.title, title);
- return 1;
- default:
- break;
- }
-
- return 0;
-}
-
-const char *cmark_node_get_on_enter(cmark_node *node) {
- if (node == NULL) {
- return NULL;
- }
-
- switch (node->type) {
- case CMARK_NODE_CUSTOM_INLINE:
- case CMARK_NODE_CUSTOM_BLOCK:
- return cmark_chunk_to_cstr(NODE_MEM(node), &node->as.custom.on_enter);
- default:
- break;
- }
-
- return NULL;
-}
-
-int cmark_node_set_on_enter(cmark_node *node, const char *on_enter) {
- if (node == NULL) {
- return 0;
- }
-
- switch (node->type) {
- case CMARK_NODE_CUSTOM_INLINE:
- case CMARK_NODE_CUSTOM_BLOCK:
- cmark_chunk_set_cstr(NODE_MEM(node), &node->as.custom.on_enter, on_enter);
- return 1;
- default:
- break;
- }
-
- return 0;
-}
-
-const char *cmark_node_get_on_exit(cmark_node *node) {
- if (node == NULL) {
- return NULL;
- }
-
- switch (node->type) {
- case CMARK_NODE_CUSTOM_INLINE:
- case CMARK_NODE_CUSTOM_BLOCK:
- return cmark_chunk_to_cstr(NODE_MEM(node), &node->as.custom.on_exit);
- default:
- break;
- }
-
- return NULL;
-}
-
-int cmark_node_set_on_exit(cmark_node *node, const char *on_exit) {
- if (node == NULL) {
- return 0;
- }
-
- switch (node->type) {
- case CMARK_NODE_CUSTOM_INLINE:
- case CMARK_NODE_CUSTOM_BLOCK:
- cmark_chunk_set_cstr(NODE_MEM(node), &node->as.custom.on_exit, on_exit);
- return 1;
- default:
- break;
- }
-
- return 0;
-}
-
-cmark_syntax_extension *cmark_node_get_syntax_extension(cmark_node *node) {
- if (node == NULL) {
- return NULL;
- }
-
- return node->extension;
-}
-
-int cmark_node_set_syntax_extension(cmark_node *node, cmark_syntax_extension *extension) {
- if (node == NULL) {
- return 0;
- }
-
- node->extension = extension;
- return 1;
-}
-
-int cmark_node_get_start_line(cmark_node *node) {
- if (node == NULL) {
- return 0;
- }
- return node->start_line;
-}
-
-int cmark_node_get_start_column(cmark_node *node) {
- if (node == NULL) {
- return 0;
- }
- return node->start_column;
-}
-
-int cmark_node_get_end_line(cmark_node *node) {
- if (node == NULL) {
- return 0;
- }
- return node->end_line;
-}
-
-int cmark_node_get_end_column(cmark_node *node) {
- if (node == NULL) {
- return 0;
- }
- return node->end_column;
-}
-
-// Unlink a node without adjusting its next, prev, and parent pointers.
-static void S_node_unlink(cmark_node *node) {
- if (node == NULL) {
- return;
- }
-
- if (node->prev) {
- node->prev->next = node->next;
- }
- if (node->next) {
- node->next->prev = node->prev;
- }
-
- // Adjust first_child and last_child of parent.
- cmark_node *parent = node->parent;
- if (parent) {
- if (parent->first_child == node) {
- parent->first_child = node->next;
- }
- if (parent->last_child == node) {
- parent->last_child = node->prev;
- }
- }
-}
-
-void cmark_node_unlink(cmark_node *node) {
- S_node_unlink(node);
-
- node->next = NULL;
- node->prev = NULL;
- node->parent = NULL;
-}
-
-int cmark_node_insert_before(cmark_node *node, cmark_node *sibling) {
- if (node == NULL || sibling == NULL) {
- return 0;
- }
-
- if (!node->parent || !S_can_contain(node->parent, sibling)) {
- return 0;
- }
-
- S_node_unlink(sibling);
-
- cmark_node *old_prev = node->prev;
-
- // Insert 'sibling' between 'old_prev' and 'node'.
- if (old_prev) {
- old_prev->next = sibling;
- }
- sibling->prev = old_prev;
- sibling->next = node;
- node->prev = sibling;
-
- // Set new parent.
- cmark_node *parent = node->parent;
- sibling->parent = parent;
-
- // Adjust first_child of parent if inserted as first child.
- if (parent && !old_prev) {
- parent->first_child = sibling;
- }
-
- return 1;
-}
-
-int cmark_node_insert_after(cmark_node *node, cmark_node *sibling) {
- if (node == NULL || sibling == NULL) {
- return 0;
- }
-
- if (!node->parent || !S_can_contain(node->parent, sibling)) {
- return 0;
- }
-
- S_node_unlink(sibling);
-
- cmark_node *old_next = node->next;
-
- // Insert 'sibling' between 'node' and 'old_next'.
- if (old_next) {
- old_next->prev = sibling;
- }
- sibling->next = old_next;
- sibling->prev = node;
- node->next = sibling;
-
- // Set new parent.
- cmark_node *parent = node->parent;
- sibling->parent = parent;
-
- // Adjust last_child of parent if inserted as last child.
- if (parent && !old_next) {
- parent->last_child = sibling;
- }
-
- return 1;
-}
-
-int cmark_node_replace(cmark_node *oldnode, cmark_node *newnode) {
- if (!cmark_node_insert_before(oldnode, newnode)) {
- return 0;
- }
- cmark_node_unlink(oldnode);
- return 1;
-}
-
-int cmark_node_prepend_child(cmark_node *node, cmark_node *child) {
- if (!S_can_contain(node, child)) {
- return 0;
- }
-
- S_node_unlink(child);
-
- cmark_node *old_first_child = node->first_child;
-
- child->next = old_first_child;
- child->prev = NULL;
- child->parent = node;
- node->first_child = child;
-
- if (old_first_child) {
- old_first_child->prev = child;
- } else {
- // Also set last_child if node previously had no children.
- node->last_child = child;
- }
-
- return 1;
-}
-
-int cmark_node_append_child(cmark_node *node, cmark_node *child) {
- if (!S_can_contain(node, child)) {
- return 0;
- }
-
- S_node_unlink(child);
-
- cmark_node *old_last_child = node->last_child;
-
- child->next = NULL;
- child->prev = old_last_child;
- child->parent = node;
- node->last_child = child;
-
- if (old_last_child) {
- old_last_child->next = child;
- } else {
- // Also set first_child if node previously had no children.
- node->first_child = child;
- }
-
- return 1;
-}
-
-static void S_print_error(FILE *out, cmark_node *node, const char *elem) {
- if (out == NULL) {
- return;
- }
- fprintf(out, "Invalid '%s' in node type %s at %d:%d\n", elem,
- cmark_node_get_type_string(node), node->start_line,
- node->start_column);
-}
-
-int cmark_node_check(cmark_node *node, FILE *out) {
- cmark_node *cur;
- int errors = 0;
-
- if (!node) {
- return 0;
- }
-
- cur = node;
- for (;;) {
- if (cur->first_child) {
- if (cur->first_child->prev != NULL) {
- S_print_error(out, cur->first_child, "prev");
- cur->first_child->prev = NULL;
- ++errors;
- }
- if (cur->first_child->parent != cur) {
- S_print_error(out, cur->first_child, "parent");
- cur->first_child->parent = cur;
- ++errors;
- }
- cur = cur->first_child;
- continue;
- }
-
- next_sibling:
- if (cur == node) {
- break;
- }
- if (cur->next) {
- if (cur->next->prev != cur) {
- S_print_error(out, cur->next, "prev");
- cur->next->prev = cur;
- ++errors;
- }
- if (cur->next->parent != cur->parent) {
- S_print_error(out, cur->next, "parent");
- cur->next->parent = cur->parent;
- ++errors;
- }
- cur = cur->next;
- continue;
- }
-
- if (cur->parent->last_child != cur) {
- S_print_error(out, cur->parent, "last_child");
- cur->parent->last_child = cur;
- ++errors;
- }
- cur = cur->parent;
- goto next_sibling;
- }
-
- return errors;
-}
diff --git a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/node.h b/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/node.h
deleted file mode 100644
index 73ca760..0000000
--- a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/node.h
+++ /dev/null
@@ -1,167 +0,0 @@
-#ifndef CMARK_NODE_H
-#define CMARK_NODE_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include
-#include
-
-#include "cmark-gfm.h"
-#include "cmark-gfm-extension_api.h"
-#include "buffer.h"
-#include "chunk.h"
-
-typedef struct {
- cmark_list_type list_type;
- int marker_offset;
- int padding;
- int start;
- cmark_delim_type delimiter;
- unsigned char bullet_char;
- bool tight;
- bool checked; // For task list extension
-} cmark_list;
-
-typedef struct {
- cmark_chunk info;
- cmark_chunk literal;
- uint8_t fence_length;
- uint8_t fence_offset;
- unsigned char fence_char;
- int8_t fenced;
-} cmark_code;
-
-typedef struct {
- int level;
- bool setext;
-} cmark_heading;
-
-typedef struct {
- cmark_chunk url;
- cmark_chunk title;
-} cmark_link;
-
-typedef struct {
- cmark_chunk on_enter;
- cmark_chunk on_exit;
-} cmark_custom;
-
-enum cmark_node__internal_flags {
- CMARK_NODE__OPEN = (1 << 0),
- CMARK_NODE__LAST_LINE_BLANK = (1 << 1),
- CMARK_NODE__LAST_LINE_CHECKED = (1 << 2),
-
- // Extensions can register custom flags by calling `cmark_register_node_flag`.
- // This is the starting value for the custom flags.
- CMARK_NODE__REGISTER_FIRST = (1 << 3),
-};
-
-typedef uint16_t cmark_node_internal_flags;
-
-struct cmark_node {
- cmark_strbuf content;
-
- struct cmark_node *next;
- struct cmark_node *prev;
- struct cmark_node *parent;
- struct cmark_node *first_child;
- struct cmark_node *last_child;
-
- void *user_data;
- cmark_free_func user_data_free_func;
-
- int start_line;
- int start_column;
- int end_line;
- int end_column;
- int internal_offset;
- uint16_t type;
- cmark_node_internal_flags flags;
-
- cmark_syntax_extension *extension;
-
- /**
- * Used during cmark_render() to cache the most recent non-NULL
- * extension, if you go up the parent chain like this:
- *
- * node->parent->...parent->extension
- */
- cmark_syntax_extension *ancestor_extension;
-
- union {
- int ref_ix;
- int def_count;
- } footnote;
-
- cmark_node *parent_footnote_def;
-
- union {
- cmark_chunk literal;
- cmark_list list;
- cmark_code code;
- cmark_heading heading;
- cmark_link link;
- cmark_custom custom;
- int html_block_type;
- int cell_index; // For keeping track of TABLE_CELL table alignments
- void *opaque;
- } as;
-};
-
-/**
- * Syntax extensions can use this function to register a custom node
- * flag. The flags are stored in the `flags` field of the `cmark_node`
- * struct. The `flags` parameter should be the address of a global variable
- * which will store the flag value.
- */
-CMARK_GFM_EXPORT
-void cmark_register_node_flag(cmark_node_internal_flags *flags);
-
-/**
- * DEPRECATED.
- *
- * This function was added in cmark-gfm version 0.29.0.gfm.7, and was
- * required to be called at program start time, which caused
- * backwards-compatibility issues in applications that use cmark-gfm as a
- * library. It is now a no-op.
- */
-CMARK_GFM_EXPORT
-void cmark_init_standard_node_flags(void);
-
-static CMARK_INLINE cmark_mem *cmark_node_mem(cmark_node *node) {
- return node->content.mem;
-}
-CMARK_GFM_EXPORT int cmark_node_check(cmark_node *node, FILE *out);
-
-static CMARK_INLINE bool CMARK_NODE_TYPE_BLOCK_P(cmark_node_type node_type) {
- return (node_type & CMARK_NODE_TYPE_MASK) == CMARK_NODE_TYPE_BLOCK;
-}
-
-static CMARK_INLINE bool CMARK_NODE_BLOCK_P(cmark_node *node) {
- return node != NULL && CMARK_NODE_TYPE_BLOCK_P((cmark_node_type) node->type);
-}
-
-static CMARK_INLINE bool CMARK_NODE_TYPE_INLINE_P(cmark_node_type node_type) {
- return (node_type & CMARK_NODE_TYPE_MASK) == CMARK_NODE_TYPE_INLINE;
-}
-
-static CMARK_INLINE bool CMARK_NODE_INLINE_P(cmark_node *node) {
- return node != NULL && CMARK_NODE_TYPE_INLINE_P((cmark_node_type) node->type);
-}
-
-CMARK_GFM_EXPORT bool cmark_node_can_contain_type(cmark_node *node, cmark_node_type child_type);
-
-/**
- * Enable (or disable) extra safety checks. These extra checks cause
- * extra performance overhead (in some cases quadratic), so they are only
- * intended to be used during testing.
- */
-CMARK_GFM_EXPORT void cmark_enable_safety_checks(bool enable);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/node.o b/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/node.o
deleted file mode 100644
index 7167176..0000000
Binary files a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/node.o and /dev/null differ
diff --git a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/parser.h b/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/parser.h
deleted file mode 100644
index 436c53f..0000000
--- a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/parser.h
+++ /dev/null
@@ -1,59 +0,0 @@
-#ifndef CMARK_PARSER_H
-#define CMARK_PARSER_H
-
-#include
-#include "references.h"
-#include "node.h"
-#include "buffer.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#define MAX_LINK_LABEL_LENGTH 1000
-
-struct cmark_parser {
- struct cmark_mem *mem;
- /* A hashtable of urls in the current document for cross-references */
- struct cmark_map *refmap;
- /* The root node of the parser, always a CMARK_NODE_DOCUMENT */
- struct cmark_node *root;
- /* The last open block after a line is fully processed */
- struct cmark_node *current;
- /* See the documentation for cmark_parser_get_line_number() in cmark.h */
- int line_number;
- /* See the documentation for cmark_parser_get_offset() in cmark.h */
- bufsize_t offset;
- /* See the documentation for cmark_parser_get_column() in cmark.h */
- bufsize_t column;
- /* See the documentation for cmark_parser_get_first_nonspace() in cmark.h */
- bufsize_t first_nonspace;
- /* See the documentation for cmark_parser_get_first_nonspace_column() in cmark.h */
- bufsize_t first_nonspace_column;
- bufsize_t thematic_break_kill_pos;
- /* See the documentation for cmark_parser_get_indent() in cmark.h */
- int indent;
- /* See the documentation for cmark_parser_is_blank() in cmark.h */
- bool blank;
- /* See the documentation for cmark_parser_has_partially_consumed_tab() in cmark.h */
- bool partially_consumed_tab;
- /* Contains the currently processed line */
- cmark_strbuf curline;
- /* See the documentation for cmark_parser_get_last_line_length() in cmark.h */
- bufsize_t last_line_length;
- /* FIXME: not sure about the difference with curline */
- cmark_strbuf linebuf;
- /* Options set by the user, see the Options section in cmark.h */
- int options;
- bool last_buffer_ended_with_cr;
- size_t total_size;
- cmark_llist *syntax_extensions;
- cmark_llist *inline_syntax_extensions;
- cmark_ispunct_func backslash_ispunct;
-};
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/plaintext.c b/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/plaintext.c
deleted file mode 100644
index 0c7d257..0000000
--- a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/plaintext.c
+++ /dev/null
@@ -1,218 +0,0 @@
-#include "node.h"
-#include "syntax_extension.h"
-#include "render.h"
-
-#define OUT(s, wrap, escaping) renderer->out(renderer, node, s, wrap, escaping)
-#define LIT(s) renderer->out(renderer, node, s, false, LITERAL)
-#define CR() renderer->cr(renderer)
-#define BLANKLINE() renderer->blankline(renderer)
-#define LISTMARKER_SIZE 20
-
-// Functions to convert cmark_nodes to plain text strings.
-
-static CMARK_INLINE void outc(cmark_renderer *renderer, cmark_node *node,
- cmark_escaping escape,
- int32_t c, unsigned char nextc) {
- cmark_render_code_point(renderer, c);
-}
-
-static int S_render_node(cmark_renderer *renderer, cmark_node *node,
- cmark_event_type ev_type, int options) {
- int list_number;
- cmark_delim_type list_delim;
- int i;
- bool entering = (ev_type == CMARK_EVENT_ENTER);
- char listmarker[LISTMARKER_SIZE];
- bool first_in_list_item;
- bufsize_t marker_width;
- bool allow_wrap = renderer->width > 0 && !(CMARK_OPT_NOBREAKS & options) &&
- !(CMARK_OPT_HARDBREAKS & options);
-
- // Don't adjust tight list status til we've started the list.
- // Otherwise we loose the blank line between a paragraph and
- // a following list.
- if (entering) {
- if (node->parent && node->parent->type == CMARK_NODE_ITEM) {
- renderer->in_tight_list_item = node->parent->parent->as.list.tight;
- }
- } else {
- if (node->type == CMARK_NODE_LIST) {
- renderer->in_tight_list_item =
- node->parent &&
- node->parent->type == CMARK_NODE_ITEM &&
- node->parent->parent->as.list.tight;
- }
- }
-
- if (node->extension && node->extension->plaintext_render_func) {
- node->extension->plaintext_render_func(node->extension, renderer, node, ev_type, options);
- return 1;
- }
-
- switch (node->type) {
- case CMARK_NODE_DOCUMENT:
- break;
-
- case CMARK_NODE_BLOCK_QUOTE:
- break;
-
- case CMARK_NODE_LIST:
- if (!entering && node->next && (node->next->type == CMARK_NODE_CODE_BLOCK ||
- node->next->type == CMARK_NODE_LIST)) {
- CR();
- }
- break;
-
- case CMARK_NODE_ITEM:
- if (cmark_node_get_list_type(node->parent) == CMARK_BULLET_LIST) {
- marker_width = 4;
- } else {
- list_number = cmark_node_get_item_index(node);
- list_delim = cmark_node_get_list_delim(node->parent);
- // we ensure a width of at least 4 so
- // we get nice transition from single digits
- // to double
- snprintf(listmarker, LISTMARKER_SIZE, "%d%s%s", list_number,
- list_delim == CMARK_PAREN_DELIM ? ")" : ".",
- list_number < 10 ? " " : " ");
- marker_width = (bufsize_t)strlen(listmarker);
- }
- if (entering) {
- if (cmark_node_get_list_type(node->parent) == CMARK_BULLET_LIST) {
- LIT(" - ");
- renderer->begin_content = true;
- } else {
- LIT(listmarker);
- renderer->begin_content = true;
- }
- for (i = marker_width; i--;) {
- cmark_strbuf_putc(renderer->prefix, ' ');
- }
- } else {
- cmark_strbuf_truncate(renderer->prefix,
- renderer->prefix->size - marker_width);
- CR();
- }
- break;
-
- case CMARK_NODE_HEADING:
- if (entering) {
- renderer->begin_content = true;
- renderer->no_linebreaks = true;
- } else {
- renderer->no_linebreaks = false;
- BLANKLINE();
- }
- break;
-
- case CMARK_NODE_CODE_BLOCK:
- first_in_list_item = node->prev == NULL && node->parent &&
- node->parent->type == CMARK_NODE_ITEM;
-
- if (!first_in_list_item) {
- BLANKLINE();
- }
- OUT(cmark_node_get_literal(node), false, LITERAL);
- BLANKLINE();
- break;
-
- case CMARK_NODE_HTML_BLOCK:
- break;
-
- case CMARK_NODE_CUSTOM_BLOCK:
- break;
-
- case CMARK_NODE_THEMATIC_BREAK:
- BLANKLINE();
- break;
-
- case CMARK_NODE_PARAGRAPH:
- if (!entering) {
- BLANKLINE();
- }
- break;
-
- case CMARK_NODE_TEXT:
- OUT(cmark_node_get_literal(node), allow_wrap, NORMAL);
- break;
-
- case CMARK_NODE_LINEBREAK:
- CR();
- break;
-
- case CMARK_NODE_SOFTBREAK:
- if (CMARK_OPT_HARDBREAKS & options) {
- CR();
- } else if (!renderer->no_linebreaks && renderer->width == 0 &&
- !(CMARK_OPT_HARDBREAKS & options) &&
- !(CMARK_OPT_NOBREAKS & options)) {
- CR();
- } else {
- OUT(" ", allow_wrap, LITERAL);
- }
- break;
-
- case CMARK_NODE_CODE:
- OUT(cmark_node_get_literal(node), allow_wrap, LITERAL);
- break;
-
- case CMARK_NODE_HTML_INLINE:
- break;
-
- case CMARK_NODE_CUSTOM_INLINE:
- break;
-
- case CMARK_NODE_STRONG:
- break;
-
- case CMARK_NODE_EMPH:
- break;
-
- case CMARK_NODE_LINK:
- break;
-
- case CMARK_NODE_IMAGE:
- break;
-
- case CMARK_NODE_FOOTNOTE_REFERENCE:
- if (entering) {
- LIT("[^");
- OUT(cmark_chunk_to_cstr(renderer->mem, &node->as.literal), false, LITERAL);
- LIT("]");
- }
- break;
-
- case CMARK_NODE_FOOTNOTE_DEFINITION:
- if (entering) {
- renderer->footnote_ix += 1;
- LIT("[^");
- char n[32];
- snprintf(n, sizeof(n), "%d", renderer->footnote_ix);
- OUT(n, false, LITERAL);
- LIT("]: ");
-
- cmark_strbuf_puts(renderer->prefix, " ");
- } else {
- cmark_strbuf_truncate(renderer->prefix, renderer->prefix->size - 4);
- }
- break;
- default:
- assert(false);
- break;
- }
-
- return 1;
-}
-
-char *cmark_render_plaintext(cmark_node *root, int options, int width) {
- return cmark_render_plaintext_with_mem(root, options, width, cmark_node_mem(root));
-}
-
-char *cmark_render_plaintext_with_mem(cmark_node *root, int options, int width, cmark_mem *mem) {
- if (options & CMARK_OPT_HARDBREAKS) {
- // disable breaking on width, since it has
- // a different meaning with OPT_HARDBREAKS
- width = 0;
- }
- return cmark_render(mem, root, options, width, outc, S_render_node);
-}
diff --git a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/plaintext.o b/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/plaintext.o
deleted file mode 100644
index 36d12f8..0000000
Binary files a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/plaintext.o and /dev/null differ
diff --git a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/plugin.c b/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/plugin.c
deleted file mode 100644
index 3992fe1..0000000
--- a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/plugin.c
+++ /dev/null
@@ -1,36 +0,0 @@
-#include
-
-#include "plugin.h"
-
-extern cmark_mem CMARK_DEFAULT_MEM_ALLOCATOR;
-
-int cmark_plugin_register_syntax_extension(cmark_plugin * plugin,
- cmark_syntax_extension * extension) {
- plugin->syntax_extensions = cmark_llist_append(&CMARK_DEFAULT_MEM_ALLOCATOR, plugin->syntax_extensions, extension);
- return 1;
-}
-
-cmark_plugin *
-cmark_plugin_new(void) {
- cmark_plugin *res = (cmark_plugin *) CMARK_DEFAULT_MEM_ALLOCATOR.calloc(1, sizeof(cmark_plugin));
-
- res->syntax_extensions = NULL;
-
- return res;
-}
-
-void
-cmark_plugin_free(cmark_plugin *plugin) {
- cmark_llist_free_full(&CMARK_DEFAULT_MEM_ALLOCATOR,
- plugin->syntax_extensions,
- (cmark_free_func) cmark_syntax_extension_free);
- CMARK_DEFAULT_MEM_ALLOCATOR.free(plugin);
-}
-
-cmark_llist *
-cmark_plugin_steal_syntax_extensions(cmark_plugin *plugin) {
- cmark_llist *res = plugin->syntax_extensions;
-
- plugin->syntax_extensions = NULL;
- return res;
-}
diff --git a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/plugin.h b/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/plugin.h
deleted file mode 100644
index 7bcbd19..0000000
--- a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/plugin.h
+++ /dev/null
@@ -1,34 +0,0 @@
-#ifndef CMARK_PLUGIN_H
-#define CMARK_PLUGIN_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include "cmark-gfm.h"
-#include "cmark-gfm-extension_api.h"
-
-/**
- * cmark_plugin:
- *
- * A plugin structure, which should be filled by plugin's
- * init functions.
- */
-struct cmark_plugin {
- cmark_llist *syntax_extensions;
-};
-
-cmark_llist *
-cmark_plugin_steal_syntax_extensions(cmark_plugin *plugin);
-
-cmark_plugin *
-cmark_plugin_new(void);
-
-void
-cmark_plugin_free(cmark_plugin *plugin);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/plugin.o b/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/plugin.o
deleted file mode 100644
index e7b053c..0000000
Binary files a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/plugin.o and /dev/null differ
diff --git a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/references.c b/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/references.c
deleted file mode 100644
index 0c9d399..0000000
--- a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/references.c
+++ /dev/null
@@ -1,43 +0,0 @@
-#include "cmark-gfm.h"
-#include "parser.h"
-#include "references.h"
-#include "inlines.h"
-#include "chunk.h"
-
-static void reference_free(cmark_map *map, cmark_map_entry *_ref) {
- cmark_reference *ref = (cmark_reference *)_ref;
- cmark_mem *mem = map->mem;
- if (ref != NULL) {
- mem->free(ref->entry.label);
- cmark_chunk_free(mem, &ref->url);
- cmark_chunk_free(mem, &ref->title);
- mem->free(ref);
- }
-}
-
-void cmark_reference_create(cmark_map *map, cmark_chunk *label,
- cmark_chunk *url, cmark_chunk *title) {
- cmark_reference *ref;
- unsigned char *reflabel = normalize_map_label(map->mem, label);
-
- /* empty reference name, or composed from only whitespace */
- if (reflabel == NULL)
- return;
-
- assert(map->sorted == NULL);
-
- ref = (cmark_reference *)map->mem->calloc(1, sizeof(*ref));
- ref->entry.label = reflabel;
- ref->url = cmark_clean_url(map->mem, url);
- ref->title = cmark_clean_title(map->mem, title);
- ref->entry.age = map->size;
- ref->entry.next = map->refs;
- ref->entry.size = ref->url.len + ref->title.len;
-
- map->refs = (cmark_map_entry *)ref;
- map->size++;
-}
-
-cmark_map *cmark_reference_map_new(cmark_mem *mem) {
- return cmark_map_new(mem, reference_free);
-}
diff --git a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/references.h b/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/references.h
deleted file mode 100644
index def944d..0000000
--- a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/references.h
+++ /dev/null
@@ -1,26 +0,0 @@
-#ifndef CMARK_REFERENCES_H
-#define CMARK_REFERENCES_H
-
-#include "map.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-struct cmark_reference {
- cmark_map_entry entry;
- cmark_chunk url;
- cmark_chunk title;
-};
-
-typedef struct cmark_reference cmark_reference;
-
-void cmark_reference_create(cmark_map *map, cmark_chunk *label,
- cmark_chunk *url, cmark_chunk *title);
-cmark_map *cmark_reference_map_new(cmark_mem *mem);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/references.o b/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/references.o
deleted file mode 100644
index 1bf3af3..0000000
Binary files a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/references.o and /dev/null differ
diff --git a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/registry.c b/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/registry.c
deleted file mode 100644
index f4f2040..0000000
--- a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/registry.c
+++ /dev/null
@@ -1,63 +0,0 @@
-#include
-#include
-#include
-
-#include "config.h"
-#include "cmark-gfm.h"
-#include "syntax_extension.h"
-#include "registry.h"
-#include "plugin.h"
-
-extern cmark_mem CMARK_DEFAULT_MEM_ALLOCATOR;
-
-static cmark_llist *syntax_extensions = NULL;
-
-void cmark_register_plugin(cmark_plugin_init_func reg_fn) {
- cmark_plugin *plugin = cmark_plugin_new();
-
- if (!reg_fn(plugin)) {
- cmark_plugin_free(plugin);
- return;
- }
-
- cmark_llist *syntax_extensions_list = cmark_plugin_steal_syntax_extensions(plugin),
- *it;
-
- for (it = syntax_extensions_list; it; it = it->next) {
- syntax_extensions = cmark_llist_append(&CMARK_DEFAULT_MEM_ALLOCATOR, syntax_extensions, it->data);
- }
-
- cmark_llist_free(&CMARK_DEFAULT_MEM_ALLOCATOR, syntax_extensions_list);
- cmark_plugin_free(plugin);
-}
-
-void cmark_release_plugins(void) {
- if (syntax_extensions) {
- cmark_llist_free_full(
- &CMARK_DEFAULT_MEM_ALLOCATOR,
- syntax_extensions,
- (cmark_free_func) cmark_syntax_extension_free);
- syntax_extensions = NULL;
- }
-}
-
-cmark_llist *cmark_list_syntax_extensions(cmark_mem *mem) {
- cmark_llist *it;
- cmark_llist *res = NULL;
-
- for (it = syntax_extensions; it; it = it->next) {
- res = cmark_llist_append(mem, res, it->data);
- }
- return res;
-}
-
-cmark_syntax_extension *cmark_find_syntax_extension(const char *name) {
- cmark_llist *tmp;
-
- for (tmp = syntax_extensions; tmp; tmp = tmp->next) {
- cmark_syntax_extension *ext = (cmark_syntax_extension *) tmp->data;
- if (!strcmp(ext->name, name))
- return ext;
- }
- return NULL;
-}
diff --git a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/registry.h b/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/registry.h
deleted file mode 100644
index fece2b6..0000000
--- a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/registry.h
+++ /dev/null
@@ -1,24 +0,0 @@
-#ifndef CMARK_REGISTRY_H
-#define CMARK_REGISTRY_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include "cmark-gfm.h"
-#include "plugin.h"
-
-CMARK_GFM_EXPORT
-void cmark_register_plugin(cmark_plugin_init_func reg_fn);
-
-CMARK_GFM_EXPORT
-void cmark_release_plugins(void);
-
-CMARK_GFM_EXPORT
-cmark_llist *cmark_list_syntax_extensions(cmark_mem *mem);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/registry.o b/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/registry.o
deleted file mode 100644
index 53a594c..0000000
Binary files a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/registry.o and /dev/null differ
diff --git a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/render.c b/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/render.c
deleted file mode 100644
index 1a0d2ae..0000000
--- a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/render.c
+++ /dev/null
@@ -1,213 +0,0 @@
-#include
-#include "buffer.h"
-#include "chunk.h"
-#include "cmark-gfm.h"
-#include "utf8.h"
-#include "render.h"
-#include "node.h"
-#include "syntax_extension.h"
-
-static CMARK_INLINE void S_cr(cmark_renderer *renderer) {
- if (renderer->need_cr < 1) {
- renderer->need_cr = 1;
- }
-}
-
-static CMARK_INLINE void S_blankline(cmark_renderer *renderer) {
- if (renderer->need_cr < 2) {
- renderer->need_cr = 2;
- }
-}
-
-static void S_out(cmark_renderer *renderer, cmark_node *node,
- const char *source, bool wrap,
- cmark_escaping escape) {
- int length = (int)strlen(source);
- unsigned char nextc;
- int32_t c;
- int i = 0;
- int last_nonspace;
- int len;
- cmark_chunk remainder = cmark_chunk_literal("");
- int k = renderer->buffer->size - 1;
-
- cmark_syntax_extension *ext = node->ancestor_extension;
- if (ext && !ext->commonmark_escape_func)
- ext = NULL;
-
- wrap = wrap && !renderer->no_linebreaks;
-
- if (renderer->in_tight_list_item && renderer->need_cr > 1) {
- renderer->need_cr = 1;
- }
- while (renderer->need_cr) {
- if (k < 0 || renderer->buffer->ptr[k] == '\n') {
- k -= 1;
- } else {
- cmark_strbuf_putc(renderer->buffer, '\n');
- if (renderer->need_cr > 1) {
- cmark_strbuf_put(renderer->buffer, renderer->prefix->ptr,
- renderer->prefix->size);
- }
- }
- renderer->column = 0;
- renderer->last_breakable = 0;
- renderer->begin_line = true;
- renderer->begin_content = true;
- renderer->need_cr -= 1;
- }
-
- while (i < length) {
- if (renderer->begin_line) {
- cmark_strbuf_put(renderer->buffer, renderer->prefix->ptr,
- renderer->prefix->size);
- // note: this assumes prefix is ascii:
- renderer->column = renderer->prefix->size;
- }
-
- len = cmark_utf8proc_iterate((const uint8_t *)source + i, length - i, &c);
- if (len == -1) { // error condition
- return; // return without rendering rest of string
- }
-
- if (ext && ext->commonmark_escape_func(ext, node, c))
- cmark_strbuf_putc(renderer->buffer, '\\');
-
- nextc = source[i + len];
- if (c == 32 && wrap) {
- if (!renderer->begin_line) {
- last_nonspace = renderer->buffer->size;
- cmark_strbuf_putc(renderer->buffer, ' ');
- renderer->column += 1;
- renderer->begin_line = false;
- renderer->begin_content = false;
- // skip following spaces
- while (source[i + 1] == ' ') {
- i++;
- }
- // We don't allow breaks that make a digit the first character
- // because this causes problems with commonmark output.
- if (!cmark_isdigit(source[i + 1])) {
- renderer->last_breakable = last_nonspace;
- }
- }
-
- } else if (escape == LITERAL) {
- if (c == 10) {
- cmark_strbuf_putc(renderer->buffer, '\n');
- renderer->column = 0;
- renderer->begin_line = true;
- renderer->begin_content = true;
- renderer->last_breakable = 0;
- } else {
- cmark_render_code_point(renderer, c);
- renderer->begin_line = false;
- // we don't set 'begin_content' to false til we've
- // finished parsing a digit. Reason: in commonmark
- // we need to escape a potential list marker after
- // a digit:
- renderer->begin_content =
- renderer->begin_content && cmark_isdigit((char)c) == 1;
- }
- } else {
- (renderer->outc)(renderer, node, escape, c, nextc);
- renderer->begin_line = false;
- renderer->begin_content =
- renderer->begin_content && cmark_isdigit((char)c) == 1;
- }
-
- // If adding the character went beyond width, look for an
- // earlier place where the line could be broken:
- if (renderer->width > 0 && renderer->column > renderer->width &&
- !renderer->begin_line && renderer->last_breakable > 0) {
-
- // copy from last_breakable to remainder
- cmark_chunk_set_cstr(renderer->mem, &remainder,
- (char *)renderer->buffer->ptr +
- renderer->last_breakable + 1);
- // truncate at last_breakable
- cmark_strbuf_truncate(renderer->buffer, renderer->last_breakable);
- // add newline, prefix, and remainder
- cmark_strbuf_putc(renderer->buffer, '\n');
- cmark_strbuf_put(renderer->buffer, renderer->prefix->ptr,
- renderer->prefix->size);
- cmark_strbuf_put(renderer->buffer, remainder.data, remainder.len);
- renderer->column = renderer->prefix->size + remainder.len;
- cmark_chunk_free(renderer->mem, &remainder);
- renderer->last_breakable = 0;
- renderer->begin_line = false;
- renderer->begin_content = false;
- }
-
- i += len;
- }
-}
-
-// Assumes no newlines, assumes ascii content:
-void cmark_render_ascii(cmark_renderer *renderer, const char *s) {
- int origsize = renderer->buffer->size;
- cmark_strbuf_puts(renderer->buffer, s);
- renderer->column += renderer->buffer->size - origsize;
-}
-
-void cmark_render_code_point(cmark_renderer *renderer, uint32_t c) {
- cmark_utf8proc_encode_char(c, renderer->buffer);
- renderer->column += 1;
-}
-
-char *cmark_render(cmark_mem *mem, cmark_node *root, int options, int width,
- void (*outc)(cmark_renderer *, cmark_node *,
- cmark_escaping, int32_t,
- unsigned char),
- int (*render_node)(cmark_renderer *renderer,
- cmark_node *node,
- cmark_event_type ev_type, int options)) {
- cmark_strbuf pref = CMARK_BUF_INIT(mem);
- cmark_strbuf buf = CMARK_BUF_INIT(mem);
- cmark_node *cur;
- cmark_event_type ev_type;
- char *result;
- cmark_iter *iter = cmark_iter_new(root);
-
- cmark_renderer renderer = {mem, &buf, &pref, 0, width,
- 0, 0, true, true, false,
- false, outc, S_cr, S_blankline, S_out,
- 0};
-
- while ((ev_type = cmark_iter_next(iter)) != CMARK_EVENT_DONE) {
- cur = cmark_iter_get_node(iter);
- if (cur->extension) {
- cur->ancestor_extension = cur->extension;
- } else if (cur->parent) {
- cur->ancestor_extension = cur->parent->ancestor_extension;
- }
- if (cur->type == CMARK_NODE_ITEM) {
- // Calculate the list item's index, for the benefit of output formats
- // like commonmark and plaintext.
- if (cur->prev) {
- cmark_node_set_item_index(cur, 1 + cmark_node_get_item_index(cur->prev));
- } else {
- cmark_node_set_item_index(cur, cmark_node_get_list_start(cur->parent));
- }
- }
- if (!render_node(&renderer, cur, ev_type, options)) {
- // a false value causes us to skip processing
- // the node's contents. this is used for
- // autolinks.
- cmark_iter_reset(iter, cur, CMARK_EVENT_EXIT);
- }
- }
-
- // ensure final newline
- if (renderer.buffer->size == 0 || renderer.buffer->ptr[renderer.buffer->size - 1] != '\n') {
- cmark_strbuf_putc(renderer.buffer, '\n');
- }
-
- result = (char *)cmark_strbuf_detach(renderer.buffer);
-
- cmark_iter_free(iter);
- cmark_strbuf_free(renderer.prefix);
- cmark_strbuf_free(renderer.buffer);
-
- return result;
-}
diff --git a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/render.h b/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/render.h
deleted file mode 100644
index 4a68d1e..0000000
--- a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/render.h
+++ /dev/null
@@ -1,62 +0,0 @@
-#ifndef CMARK_RENDER_H
-#define CMARK_RENDER_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include
-#include "buffer.h"
-#include "chunk.h"
-
-typedef enum { LITERAL, NORMAL, TITLE, URL } cmark_escaping;
-
-struct cmark_renderer {
- cmark_mem *mem;
- cmark_strbuf *buffer;
- cmark_strbuf *prefix;
- int column;
- int width;
- int need_cr;
- bufsize_t last_breakable;
- bool begin_line;
- bool begin_content;
- bool no_linebreaks;
- bool in_tight_list_item;
- void (*outc)(struct cmark_renderer *, cmark_node *, cmark_escaping, int32_t, unsigned char);
- void (*cr)(struct cmark_renderer *);
- void (*blankline)(struct cmark_renderer *);
- void (*out)(struct cmark_renderer *, cmark_node *, const char *, bool, cmark_escaping);
- unsigned int footnote_ix;
-};
-
-typedef struct cmark_renderer cmark_renderer;
-
-struct cmark_html_renderer {
- cmark_strbuf *html;
- cmark_node *plain;
- cmark_llist *filter_extensions;
- unsigned int footnote_ix;
- unsigned int written_footnote_ix;
- void *opaque;
-};
-
-typedef struct cmark_html_renderer cmark_html_renderer;
-
-void cmark_render_ascii(cmark_renderer *renderer, const char *s);
-
-void cmark_render_code_point(cmark_renderer *renderer, uint32_t c);
-
-char *cmark_render(cmark_mem *mem, cmark_node *root, int options, int width,
- void (*outc)(cmark_renderer *, cmark_node *,
- cmark_escaping, int32_t,
- unsigned char),
- int (*render_node)(cmark_renderer *renderer,
- cmark_node *node,
- cmark_event_type ev_type, int options));
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/render.o b/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/render.o
deleted file mode 100644
index da4a74f..0000000
Binary files a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/render.o and /dev/null differ
diff --git a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/scanners.c b/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/scanners.c
deleted file mode 100644
index 1972060..0000000
--- a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/scanners.c
+++ /dev/null
@@ -1,14056 +0,0 @@
-/* Generated by re2c 3.0 */
-#include "scanners.h"
-#include "chunk.h"
-#include
-
-bufsize_t _scan_at(bufsize_t (*scanner)(const unsigned char *), cmark_chunk *c,
- bufsize_t offset) {
- bufsize_t res;
- unsigned char *ptr = (unsigned char *)c->data;
-
- if (ptr == NULL || offset > c->len) {
- return 0;
- } else {
- unsigned char lim = ptr[c->len];
-
- ptr[c->len] = '\0';
- res = scanner(ptr + offset);
- ptr[c->len] = lim;
- }
-
- return res;
-}
-
-// Try to match a scheme including colon.
-bufsize_t _scan_scheme(const unsigned char *p) {
- const unsigned char *marker = NULL;
- const unsigned char *start = p;
-
- {
- unsigned char yych;
- yych = *p;
- if (yych <= '@')
- goto yy1;
- if (yych <= 'Z')
- goto yy3;
- if (yych <= '`')
- goto yy1;
- if (yych <= 'z')
- goto yy3;
- yy1:
- ++p;
- yy2 : { return 0; }
- yy3:
- yych = *(marker = ++p);
- if (yych <= '/') {
- if (yych <= '+') {
- if (yych <= '*')
- goto yy2;
- } else {
- if (yych <= ',')
- goto yy2;
- if (yych >= '/')
- goto yy2;
- }
- } else {
- if (yych <= 'Z') {
- if (yych <= '9')
- goto yy4;
- if (yych <= '@')
- goto yy2;
- } else {
- if (yych <= '`')
- goto yy2;
- if (yych >= '{')
- goto yy2;
- }
- }
- yy4:
- yych = *++p;
- if (yych <= '9') {
- if (yych <= ',') {
- if (yych == '+')
- goto yy6;
- } else {
- if (yych != '/')
- goto yy6;
- }
- } else {
- if (yych <= 'Z') {
- if (yych <= ':')
- goto yy7;
- if (yych >= 'A')
- goto yy6;
- } else {
- if (yych <= '`')
- goto yy5;
- if (yych <= 'z')
- goto yy6;
- }
- }
- yy5:
- p = marker;
- goto yy2;
- yy6:
- yych = *++p;
- if (yych <= '9') {
- if (yych <= ',') {
- if (yych == '+')
- goto yy8;
- goto yy5;
- } else {
- if (yych == '/')
- goto yy5;
- goto yy8;
- }
- } else {
- if (yych <= 'Z') {
- if (yych <= ':')
- goto yy7;
- if (yych <= '@')
- goto yy5;
- goto yy8;
- } else {
- if (yych <= '`')
- goto yy5;
- if (yych <= 'z')
- goto yy8;
- goto yy5;
- }
- }
- yy7:
- ++p;
- { return (bufsize_t)(p - start); }
- yy8:
- yych = *++p;
- if (yych <= '9') {
- if (yych <= ',') {
- if (yych != '+')
- goto yy5;
- } else {
- if (yych == '/')
- goto yy5;
- }
- } else {
- if (yych <= 'Z') {
- if (yych <= ':')
- goto yy7;
- if (yych <= '@')
- goto yy5;
- } else {
- if (yych <= '`')
- goto yy5;
- if (yych >= '{')
- goto yy5;
- }
- }
- yych = *++p;
- if (yych <= '9') {
- if (yych <= ',') {
- if (yych != '+')
- goto yy5;
- } else {
- if (yych == '/')
- goto yy5;
- }
- } else {
- if (yych <= 'Z') {
- if (yych <= ':')
- goto yy7;
- if (yych <= '@')
- goto yy5;
- } else {
- if (yych <= '`')
- goto yy5;
- if (yych >= '{')
- goto yy5;
- }
- }
- yych = *++p;
- if (yych <= '9') {
- if (yych <= ',') {
- if (yych != '+')
- goto yy5;
- } else {
- if (yych == '/')
- goto yy5;
- }
- } else {
- if (yych <= 'Z') {
- if (yych <= ':')
- goto yy7;
- if (yych <= '@')
- goto yy5;
- } else {
- if (yych <= '`')
- goto yy5;
- if (yych >= '{')
- goto yy5;
- }
- }
- yych = *++p;
- if (yych <= '9') {
- if (yych <= ',') {
- if (yych != '+')
- goto yy5;
- } else {
- if (yych == '/')
- goto yy5;
- }
- } else {
- if (yych <= 'Z') {
- if (yych <= ':')
- goto yy7;
- if (yych <= '@')
- goto yy5;
- } else {
- if (yych <= '`')
- goto yy5;
- if (yych >= '{')
- goto yy5;
- }
- }
- yych = *++p;
- if (yych <= '9') {
- if (yych <= ',') {
- if (yych != '+')
- goto yy5;
- } else {
- if (yych == '/')
- goto yy5;
- }
- } else {
- if (yych <= 'Z') {
- if (yych <= ':')
- goto yy7;
- if (yych <= '@')
- goto yy5;
- } else {
- if (yych <= '`')
- goto yy5;
- if (yych >= '{')
- goto yy5;
- }
- }
- yych = *++p;
- if (yych <= '9') {
- if (yych <= ',') {
- if (yych != '+')
- goto yy5;
- } else {
- if (yych == '/')
- goto yy5;
- }
- } else {
- if (yych <= 'Z') {
- if (yych <= ':')
- goto yy7;
- if (yych <= '@')
- goto yy5;
- } else {
- if (yych <= '`')
- goto yy5;
- if (yych >= '{')
- goto yy5;
- }
- }
- yych = *++p;
- if (yych <= '9') {
- if (yych <= ',') {
- if (yych != '+')
- goto yy5;
- } else {
- if (yych == '/')
- goto yy5;
- }
- } else {
- if (yych <= 'Z') {
- if (yych <= ':')
- goto yy7;
- if (yych <= '@')
- goto yy5;
- } else {
- if (yych <= '`')
- goto yy5;
- if (yych >= '{')
- goto yy5;
- }
- }
- yych = *++p;
- if (yych <= '9') {
- if (yych <= ',') {
- if (yych != '+')
- goto yy5;
- } else {
- if (yych == '/')
- goto yy5;
- }
- } else {
- if (yych <= 'Z') {
- if (yych <= ':')
- goto yy7;
- if (yych <= '@')
- goto yy5;
- } else {
- if (yych <= '`')
- goto yy5;
- if (yych >= '{')
- goto yy5;
- }
- }
- yych = *++p;
- if (yych <= '9') {
- if (yych <= ',') {
- if (yych != '+')
- goto yy5;
- } else {
- if (yych == '/')
- goto yy5;
- }
- } else {
- if (yych <= 'Z') {
- if (yych <= ':')
- goto yy7;
- if (yych <= '@')
- goto yy5;
- } else {
- if (yych <= '`')
- goto yy5;
- if (yych >= '{')
- goto yy5;
- }
- }
- yych = *++p;
- if (yych <= '9') {
- if (yych <= ',') {
- if (yych != '+')
- goto yy5;
- } else {
- if (yych == '/')
- goto yy5;
- }
- } else {
- if (yych <= 'Z') {
- if (yych <= ':')
- goto yy7;
- if (yych <= '@')
- goto yy5;
- } else {
- if (yych <= '`')
- goto yy5;
- if (yych >= '{')
- goto yy5;
- }
- }
- yych = *++p;
- if (yych <= '9') {
- if (yych <= ',') {
- if (yych != '+')
- goto yy5;
- } else {
- if (yych == '/')
- goto yy5;
- }
- } else {
- if (yych <= 'Z') {
- if (yych <= ':')
- goto yy7;
- if (yych <= '@')
- goto yy5;
- } else {
- if (yych <= '`')
- goto yy5;
- if (yych >= '{')
- goto yy5;
- }
- }
- yych = *++p;
- if (yych <= '9') {
- if (yych <= ',') {
- if (yych != '+')
- goto yy5;
- } else {
- if (yych == '/')
- goto yy5;
- }
- } else {
- if (yych <= 'Z') {
- if (yych <= ':')
- goto yy7;
- if (yych <= '@')
- goto yy5;
- } else {
- if (yych <= '`')
- goto yy5;
- if (yych >= '{')
- goto yy5;
- }
- }
- yych = *++p;
- if (yych <= '9') {
- if (yych <= ',') {
- if (yych != '+')
- goto yy5;
- } else {
- if (yych == '/')
- goto yy5;
- }
- } else {
- if (yych <= 'Z') {
- if (yych <= ':')
- goto yy7;
- if (yych <= '@')
- goto yy5;
- } else {
- if (yych <= '`')
- goto yy5;
- if (yych >= '{')
- goto yy5;
- }
- }
- yych = *++p;
- if (yych <= '9') {
- if (yych <= ',') {
- if (yych != '+')
- goto yy5;
- } else {
- if (yych == '/')
- goto yy5;
- }
- } else {
- if (yych <= 'Z') {
- if (yych <= ':')
- goto yy7;
- if (yych <= '@')
- goto yy5;
- } else {
- if (yych <= '`')
- goto yy5;
- if (yych >= '{')
- goto yy5;
- }
- }
- yych = *++p;
- if (yych <= '9') {
- if (yych <= ',') {
- if (yych != '+')
- goto yy5;
- } else {
- if (yych == '/')
- goto yy5;
- }
- } else {
- if (yych <= 'Z') {
- if (yych <= ':')
- goto yy7;
- if (yych <= '@')
- goto yy5;
- } else {
- if (yych <= '`')
- goto yy5;
- if (yych >= '{')
- goto yy5;
- }
- }
- yych = *++p;
- if (yych <= '9') {
- if (yych <= ',') {
- if (yych != '+')
- goto yy5;
- } else {
- if (yych == '/')
- goto yy5;
- }
- } else {
- if (yych <= 'Z') {
- if (yych <= ':')
- goto yy7;
- if (yych <= '@')
- goto yy5;
- } else {
- if (yych <= '`')
- goto yy5;
- if (yych >= '{')
- goto yy5;
- }
- }
- yych = *++p;
- if (yych <= '9') {
- if (yych <= ',') {
- if (yych != '+')
- goto yy5;
- } else {
- if (yych == '/')
- goto yy5;
- }
- } else {
- if (yych <= 'Z') {
- if (yych <= ':')
- goto yy7;
- if (yych <= '@')
- goto yy5;
- } else {
- if (yych <= '`')
- goto yy5;
- if (yych >= '{')
- goto yy5;
- }
- }
- yych = *++p;
- if (yych <= '9') {
- if (yych <= ',') {
- if (yych != '+')
- goto yy5;
- } else {
- if (yych == '/')
- goto yy5;
- }
- } else {
- if (yych <= 'Z') {
- if (yych <= ':')
- goto yy7;
- if (yych <= '@')
- goto yy5;
- } else {
- if (yych <= '`')
- goto yy5;
- if (yych >= '{')
- goto yy5;
- }
- }
- yych = *++p;
- if (yych <= '9') {
- if (yych <= ',') {
- if (yych != '+')
- goto yy5;
- } else {
- if (yych == '/')
- goto yy5;
- }
- } else {
- if (yych <= 'Z') {
- if (yych <= ':')
- goto yy7;
- if (yych <= '@')
- goto yy5;
- } else {
- if (yych <= '`')
- goto yy5;
- if (yych >= '{')
- goto yy5;
- }
- }
- yych = *++p;
- if (yych <= '9') {
- if (yych <= ',') {
- if (yych != '+')
- goto yy5;
- } else {
- if (yych == '/')
- goto yy5;
- }
- } else {
- if (yych <= 'Z') {
- if (yych <= ':')
- goto yy7;
- if (yych <= '@')
- goto yy5;
- } else {
- if (yych <= '`')
- goto yy5;
- if (yych >= '{')
- goto yy5;
- }
- }
- yych = *++p;
- if (yych <= '9') {
- if (yych <= ',') {
- if (yych != '+')
- goto yy5;
- } else {
- if (yych == '/')
- goto yy5;
- }
- } else {
- if (yych <= 'Z') {
- if (yych <= ':')
- goto yy7;
- if (yych <= '@')
- goto yy5;
- } else {
- if (yych <= '`')
- goto yy5;
- if (yych >= '{')
- goto yy5;
- }
- }
- yych = *++p;
- if (yych <= '9') {
- if (yych <= ',') {
- if (yych != '+')
- goto yy5;
- } else {
- if (yych == '/')
- goto yy5;
- }
- } else {
- if (yych <= 'Z') {
- if (yych <= ':')
- goto yy7;
- if (yych <= '@')
- goto yy5;
- } else {
- if (yych <= '`')
- goto yy5;
- if (yych >= '{')
- goto yy5;
- }
- }
- yych = *++p;
- if (yych <= '9') {
- if (yych <= ',') {
- if (yych != '+')
- goto yy5;
- } else {
- if (yych == '/')
- goto yy5;
- }
- } else {
- if (yych <= 'Z') {
- if (yych <= ':')
- goto yy7;
- if (yych <= '@')
- goto yy5;
- } else {
- if (yych <= '`')
- goto yy5;
- if (yych >= '{')
- goto yy5;
- }
- }
- yych = *++p;
- if (yych <= '9') {
- if (yych <= ',') {
- if (yych != '+')
- goto yy5;
- } else {
- if (yych == '/')
- goto yy5;
- }
- } else {
- if (yych <= 'Z') {
- if (yych <= ':')
- goto yy7;
- if (yych <= '@')
- goto yy5;
- } else {
- if (yych <= '`')
- goto yy5;
- if (yych >= '{')
- goto yy5;
- }
- }
- yych = *++p;
- if (yych <= '9') {
- if (yych <= ',') {
- if (yych != '+')
- goto yy5;
- } else {
- if (yych == '/')
- goto yy5;
- }
- } else {
- if (yych <= 'Z') {
- if (yych <= ':')
- goto yy7;
- if (yych <= '@')
- goto yy5;
- } else {
- if (yych <= '`')
- goto yy5;
- if (yych >= '{')
- goto yy5;
- }
- }
- yych = *++p;
- if (yych <= '9') {
- if (yych <= ',') {
- if (yych != '+')
- goto yy5;
- } else {
- if (yych == '/')
- goto yy5;
- }
- } else {
- if (yych <= 'Z') {
- if (yych <= ':')
- goto yy7;
- if (yych <= '@')
- goto yy5;
- } else {
- if (yych <= '`')
- goto yy5;
- if (yych >= '{')
- goto yy5;
- }
- }
- yych = *++p;
- if (yych <= '9') {
- if (yych <= ',') {
- if (yych != '+')
- goto yy5;
- } else {
- if (yych == '/')
- goto yy5;
- }
- } else {
- if (yych <= 'Z') {
- if (yych <= ':')
- goto yy7;
- if (yych <= '@')
- goto yy5;
- } else {
- if (yych <= '`')
- goto yy5;
- if (yych >= '{')
- goto yy5;
- }
- }
- yych = *++p;
- if (yych <= '9') {
- if (yych <= ',') {
- if (yych != '+')
- goto yy5;
- } else {
- if (yych == '/')
- goto yy5;
- }
- } else {
- if (yych <= 'Z') {
- if (yych <= ':')
- goto yy7;
- if (yych <= '@')
- goto yy5;
- } else {
- if (yych <= '`')
- goto yy5;
- if (yych >= '{')
- goto yy5;
- }
- }
- yych = *++p;
- if (yych == ':')
- goto yy7;
- goto yy5;
- }
-}
-
-// Try to match URI autolink after first <, returning number of chars matched.
-bufsize_t _scan_autolink_uri(const unsigned char *p) {
- const unsigned char *marker = NULL;
- const unsigned char *start = p;
-
- {
- unsigned char yych;
- static const unsigned char yybm[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 128, 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 0, 128, 0, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,
- };
- yych = *p;
- if (yych <= '@')
- goto yy10;
- if (yych <= 'Z')
- goto yy12;
- if (yych <= '`')
- goto yy10;
- if (yych <= 'z')
- goto yy12;
- yy10:
- ++p;
- yy11 : { return 0; }
- yy12:
- yych = *(marker = ++p);
- if (yych <= '/') {
- if (yych <= '+') {
- if (yych <= '*')
- goto yy11;
- } else {
- if (yych <= ',')
- goto yy11;
- if (yych >= '/')
- goto yy11;
- }
- } else {
- if (yych <= 'Z') {
- if (yych <= '9')
- goto yy13;
- if (yych <= '@')
- goto yy11;
- } else {
- if (yych <= '`')
- goto yy11;
- if (yych >= '{')
- goto yy11;
- }
- }
- yy13:
- yych = *++p;
- if (yych <= '9') {
- if (yych <= ',') {
- if (yych == '+')
- goto yy15;
- } else {
- if (yych != '/')
- goto yy15;
- }
- } else {
- if (yych <= 'Z') {
- if (yych <= ':')
- goto yy16;
- if (yych >= 'A')
- goto yy15;
- } else {
- if (yych <= '`')
- goto yy14;
- if (yych <= 'z')
- goto yy15;
- }
- }
- yy14:
- p = marker;
- goto yy11;
- yy15:
- yych = *++p;
- if (yych <= '9') {
- if (yych <= ',') {
- if (yych == '+')
- goto yy17;
- goto yy14;
- } else {
- if (yych == '/')
- goto yy14;
- goto yy17;
- }
- } else {
- if (yych <= 'Z') {
- if (yych <= ':')
- goto yy16;
- if (yych <= '@')
- goto yy14;
- goto yy17;
- } else {
- if (yych <= '`')
- goto yy14;
- if (yych <= 'z')
- goto yy17;
- goto yy14;
- }
- }
- yy16:
- yych = *++p;
- if (yybm[0 + yych] & 128) {
- goto yy16;
- }
- if (yych <= 0xEC) {
- if (yych <= 0xC1) {
- if (yych <= '<')
- goto yy14;
- if (yych <= '>')
- goto yy18;
- goto yy14;
- } else {
- if (yych <= 0xDF)
- goto yy19;
- if (yych <= 0xE0)
- goto yy20;
- goto yy21;
- }
- } else {
- if (yych <= 0xF0) {
- if (yych <= 0xED)
- goto yy22;
- if (yych <= 0xEF)
- goto yy21;
- goto yy23;
- } else {
- if (yych <= 0xF3)
- goto yy24;
- if (yych <= 0xF4)
- goto yy25;
- goto yy14;
- }
- }
- yy17:
- yych = *++p;
- if (yych <= '9') {
- if (yych <= ',') {
- if (yych == '+')
- goto yy26;
- goto yy14;
- } else {
- if (yych == '/')
- goto yy14;
- goto yy26;
- }
- } else {
- if (yych <= 'Z') {
- if (yych <= ':')
- goto yy16;
- if (yych <= '@')
- goto yy14;
- goto yy26;
- } else {
- if (yych <= '`')
- goto yy14;
- if (yych <= 'z')
- goto yy26;
- goto yy14;
- }
- }
- yy18:
- ++p;
- { return (bufsize_t)(p - start); }
- yy19:
- yych = *++p;
- if (yych <= 0x7F)
- goto yy14;
- if (yych <= 0xBF)
- goto yy16;
- goto yy14;
- yy20:
- yych = *++p;
- if (yych <= 0x9F)
- goto yy14;
- if (yych <= 0xBF)
- goto yy19;
- goto yy14;
- yy21:
- yych = *++p;
- if (yych <= 0x7F)
- goto yy14;
- if (yych <= 0xBF)
- goto yy19;
- goto yy14;
- yy22:
- yych = *++p;
- if (yych <= 0x7F)
- goto yy14;
- if (yych <= 0x9F)
- goto yy19;
- goto yy14;
- yy23:
- yych = *++p;
- if (yych <= 0x8F)
- goto yy14;
- if (yych <= 0xBF)
- goto yy21;
- goto yy14;
- yy24:
- yych = *++p;
- if (yych <= 0x7F)
- goto yy14;
- if (yych <= 0xBF)
- goto yy21;
- goto yy14;
- yy25:
- yych = *++p;
- if (yych <= 0x7F)
- goto yy14;
- if (yych <= 0x8F)
- goto yy21;
- goto yy14;
- yy26:
- yych = *++p;
- if (yych <= '9') {
- if (yych <= ',') {
- if (yych != '+')
- goto yy14;
- } else {
- if (yych == '/')
- goto yy14;
- }
- } else {
- if (yych <= 'Z') {
- if (yych <= ':')
- goto yy16;
- if (yych <= '@')
- goto yy14;
- } else {
- if (yych <= '`')
- goto yy14;
- if (yych >= '{')
- goto yy14;
- }
- }
- yych = *++p;
- if (yych <= '9') {
- if (yych <= ',') {
- if (yych != '+')
- goto yy14;
- } else {
- if (yych == '/')
- goto yy14;
- }
- } else {
- if (yych <= 'Z') {
- if (yych <= ':')
- goto yy16;
- if (yych <= '@')
- goto yy14;
- } else {
- if (yych <= '`')
- goto yy14;
- if (yych >= '{')
- goto yy14;
- }
- }
- yych = *++p;
- if (yych <= '9') {
- if (yych <= ',') {
- if (yych != '+')
- goto yy14;
- } else {
- if (yych == '/')
- goto yy14;
- }
- } else {
- if (yych <= 'Z') {
- if (yych <= ':')
- goto yy16;
- if (yych <= '@')
- goto yy14;
- } else {
- if (yych <= '`')
- goto yy14;
- if (yych >= '{')
- goto yy14;
- }
- }
- yych = *++p;
- if (yych <= '9') {
- if (yych <= ',') {
- if (yych != '+')
- goto yy14;
- } else {
- if (yych == '/')
- goto yy14;
- }
- } else {
- if (yych <= 'Z') {
- if (yych <= ':')
- goto yy16;
- if (yych <= '@')
- goto yy14;
- } else {
- if (yych <= '`')
- goto yy14;
- if (yych >= '{')
- goto yy14;
- }
- }
- yych = *++p;
- if (yych <= '9') {
- if (yych <= ',') {
- if (yych != '+')
- goto yy14;
- } else {
- if (yych == '/')
- goto yy14;
- }
- } else {
- if (yych <= 'Z') {
- if (yych <= ':')
- goto yy16;
- if (yych <= '@')
- goto yy14;
- } else {
- if (yych <= '`')
- goto yy14;
- if (yych >= '{')
- goto yy14;
- }
- }
- yych = *++p;
- if (yych <= '9') {
- if (yych <= ',') {
- if (yych != '+')
- goto yy14;
- } else {
- if (yych == '/')
- goto yy14;
- }
- } else {
- if (yych <= 'Z') {
- if (yych <= ':')
- goto yy16;
- if (yych <= '@')
- goto yy14;
- } else {
- if (yych <= '`')
- goto yy14;
- if (yych >= '{')
- goto yy14;
- }
- }
- yych = *++p;
- if (yych <= '9') {
- if (yych <= ',') {
- if (yych != '+')
- goto yy14;
- } else {
- if (yych == '/')
- goto yy14;
- }
- } else {
- if (yych <= 'Z') {
- if (yych <= ':')
- goto yy16;
- if (yych <= '@')
- goto yy14;
- } else {
- if (yych <= '`')
- goto yy14;
- if (yych >= '{')
- goto yy14;
- }
- }
- yych = *++p;
- if (yych <= '9') {
- if (yych <= ',') {
- if (yych != '+')
- goto yy14;
- } else {
- if (yych == '/')
- goto yy14;
- }
- } else {
- if (yych <= 'Z') {
- if (yych <= ':')
- goto yy16;
- if (yych <= '@')
- goto yy14;
- } else {
- if (yych <= '`')
- goto yy14;
- if (yych >= '{')
- goto yy14;
- }
- }
- yych = *++p;
- if (yych <= '9') {
- if (yych <= ',') {
- if (yych != '+')
- goto yy14;
- } else {
- if (yych == '/')
- goto yy14;
- }
- } else {
- if (yych <= 'Z') {
- if (yych <= ':')
- goto yy16;
- if (yych <= '@')
- goto yy14;
- } else {
- if (yych <= '`')
- goto yy14;
- if (yych >= '{')
- goto yy14;
- }
- }
- yych = *++p;
- if (yych <= '9') {
- if (yych <= ',') {
- if (yych != '+')
- goto yy14;
- } else {
- if (yych == '/')
- goto yy14;
- }
- } else {
- if (yych <= 'Z') {
- if (yych <= ':')
- goto yy16;
- if (yych <= '@')
- goto yy14;
- } else {
- if (yych <= '`')
- goto yy14;
- if (yych >= '{')
- goto yy14;
- }
- }
- yych = *++p;
- if (yych <= '9') {
- if (yych <= ',') {
- if (yych != '+')
- goto yy14;
- } else {
- if (yych == '/')
- goto yy14;
- }
- } else {
- if (yych <= 'Z') {
- if (yych <= ':')
- goto yy16;
- if (yych <= '@')
- goto yy14;
- } else {
- if (yych <= '`')
- goto yy14;
- if (yych >= '{')
- goto yy14;
- }
- }
- yych = *++p;
- if (yych <= '9') {
- if (yych <= ',') {
- if (yych != '+')
- goto yy14;
- } else {
- if (yych == '/')
- goto yy14;
- }
- } else {
- if (yych <= 'Z') {
- if (yych <= ':')
- goto yy16;
- if (yych <= '@')
- goto yy14;
- } else {
- if (yych <= '`')
- goto yy14;
- if (yych >= '{')
- goto yy14;
- }
- }
- yych = *++p;
- if (yych <= '9') {
- if (yych <= ',') {
- if (yych != '+')
- goto yy14;
- } else {
- if (yych == '/')
- goto yy14;
- }
- } else {
- if (yych <= 'Z') {
- if (yych <= ':')
- goto yy16;
- if (yych <= '@')
- goto yy14;
- } else {
- if (yych <= '`')
- goto yy14;
- if (yych >= '{')
- goto yy14;
- }
- }
- yych = *++p;
- if (yych <= '9') {
- if (yych <= ',') {
- if (yych != '+')
- goto yy14;
- } else {
- if (yych == '/')
- goto yy14;
- }
- } else {
- if (yych <= 'Z') {
- if (yych <= ':')
- goto yy16;
- if (yych <= '@')
- goto yy14;
- } else {
- if (yych <= '`')
- goto yy14;
- if (yych >= '{')
- goto yy14;
- }
- }
- yych = *++p;
- if (yych <= '9') {
- if (yych <= ',') {
- if (yych != '+')
- goto yy14;
- } else {
- if (yych == '/')
- goto yy14;
- }
- } else {
- if (yych <= 'Z') {
- if (yych <= ':')
- goto yy16;
- if (yych <= '@')
- goto yy14;
- } else {
- if (yych <= '`')
- goto yy14;
- if (yych >= '{')
- goto yy14;
- }
- }
- yych = *++p;
- if (yych <= '9') {
- if (yych <= ',') {
- if (yych != '+')
- goto yy14;
- } else {
- if (yych == '/')
- goto yy14;
- }
- } else {
- if (yych <= 'Z') {
- if (yych <= ':')
- goto yy16;
- if (yych <= '@')
- goto yy14;
- } else {
- if (yych <= '`')
- goto yy14;
- if (yych >= '{')
- goto yy14;
- }
- }
- yych = *++p;
- if (yych <= '9') {
- if (yych <= ',') {
- if (yych != '+')
- goto yy14;
- } else {
- if (yych == '/')
- goto yy14;
- }
- } else {
- if (yych <= 'Z') {
- if (yych <= ':')
- goto yy16;
- if (yych <= '@')
- goto yy14;
- } else {
- if (yych <= '`')
- goto yy14;
- if (yych >= '{')
- goto yy14;
- }
- }
- yych = *++p;
- if (yych <= '9') {
- if (yych <= ',') {
- if (yych != '+')
- goto yy14;
- } else {
- if (yych == '/')
- goto yy14;
- }
- } else {
- if (yych <= 'Z') {
- if (yych <= ':')
- goto yy16;
- if (yych <= '@')
- goto yy14;
- } else {
- if (yych <= '`')
- goto yy14;
- if (yych >= '{')
- goto yy14;
- }
- }
- yych = *++p;
- if (yych <= '9') {
- if (yych <= ',') {
- if (yych != '+')
- goto yy14;
- } else {
- if (yych == '/')
- goto yy14;
- }
- } else {
- if (yych <= 'Z') {
- if (yych <= ':')
- goto yy16;
- if (yych <= '@')
- goto yy14;
- } else {
- if (yych <= '`')
- goto yy14;
- if (yych >= '{')
- goto yy14;
- }
- }
- yych = *++p;
- if (yych <= '9') {
- if (yych <= ',') {
- if (yych != '+')
- goto yy14;
- } else {
- if (yych == '/')
- goto yy14;
- }
- } else {
- if (yych <= 'Z') {
- if (yych <= ':')
- goto yy16;
- if (yych <= '@')
- goto yy14;
- } else {
- if (yych <= '`')
- goto yy14;
- if (yych >= '{')
- goto yy14;
- }
- }
- yych = *++p;
- if (yych <= '9') {
- if (yych <= ',') {
- if (yych != '+')
- goto yy14;
- } else {
- if (yych == '/')
- goto yy14;
- }
- } else {
- if (yych <= 'Z') {
- if (yych <= ':')
- goto yy16;
- if (yych <= '@')
- goto yy14;
- } else {
- if (yych <= '`')
- goto yy14;
- if (yych >= '{')
- goto yy14;
- }
- }
- yych = *++p;
- if (yych <= '9') {
- if (yych <= ',') {
- if (yych != '+')
- goto yy14;
- } else {
- if (yych == '/')
- goto yy14;
- }
- } else {
- if (yych <= 'Z') {
- if (yych <= ':')
- goto yy16;
- if (yych <= '@')
- goto yy14;
- } else {
- if (yych <= '`')
- goto yy14;
- if (yych >= '{')
- goto yy14;
- }
- }
- yych = *++p;
- if (yych <= '9') {
- if (yych <= ',') {
- if (yych != '+')
- goto yy14;
- } else {
- if (yych == '/')
- goto yy14;
- }
- } else {
- if (yych <= 'Z') {
- if (yych <= ':')
- goto yy16;
- if (yych <= '@')
- goto yy14;
- } else {
- if (yych <= '`')
- goto yy14;
- if (yych >= '{')
- goto yy14;
- }
- }
- yych = *++p;
- if (yych <= '9') {
- if (yych <= ',') {
- if (yych != '+')
- goto yy14;
- } else {
- if (yych == '/')
- goto yy14;
- }
- } else {
- if (yych <= 'Z') {
- if (yych <= ':')
- goto yy16;
- if (yych <= '@')
- goto yy14;
- } else {
- if (yych <= '`')
- goto yy14;
- if (yych >= '{')
- goto yy14;
- }
- }
- yych = *++p;
- if (yych <= '9') {
- if (yych <= ',') {
- if (yych != '+')
- goto yy14;
- } else {
- if (yych == '/')
- goto yy14;
- }
- } else {
- if (yych <= 'Z') {
- if (yych <= ':')
- goto yy16;
- if (yych <= '@')
- goto yy14;
- } else {
- if (yych <= '`')
- goto yy14;
- if (yych >= '{')
- goto yy14;
- }
- }
- yych = *++p;
- if (yych <= '9') {
- if (yych <= ',') {
- if (yych != '+')
- goto yy14;
- } else {
- if (yych == '/')
- goto yy14;
- }
- } else {
- if (yych <= 'Z') {
- if (yych <= ':')
- goto yy16;
- if (yych <= '@')
- goto yy14;
- } else {
- if (yych <= '`')
- goto yy14;
- if (yych >= '{')
- goto yy14;
- }
- }
- yych = *++p;
- if (yych <= '9') {
- if (yych <= ',') {
- if (yych != '+')
- goto yy14;
- } else {
- if (yych == '/')
- goto yy14;
- }
- } else {
- if (yych <= 'Z') {
- if (yych <= ':')
- goto yy16;
- if (yych <= '@')
- goto yy14;
- } else {
- if (yych <= '`')
- goto yy14;
- if (yych >= '{')
- goto yy14;
- }
- }
- yych = *++p;
- if (yych == ':')
- goto yy16;
- goto yy14;
- }
-}
-
-// Try to match email autolink after first <, returning num of chars matched.
-bufsize_t _scan_autolink_email(const unsigned char *p) {
- const unsigned char *marker = NULL;
- const unsigned char *start = p;
-
- {
- unsigned char yych;
- static const unsigned char yybm[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 128, 0, 128, 128, 128, 128, 128, 0, 0,
- 128, 128, 0, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 0, 0, 0, 128, 0, 128, 0, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 0, 0, 0, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,
- };
- yych = *p;
- if (yych <= '9') {
- if (yych <= '\'') {
- if (yych == '!')
- goto yy30;
- if (yych >= '#')
- goto yy30;
- } else {
- if (yych <= ')')
- goto yy28;
- if (yych != ',')
- goto yy30;
- }
- } else {
- if (yych <= '?') {
- if (yych == '=')
- goto yy30;
- if (yych >= '?')
- goto yy30;
- } else {
- if (yych <= 'Z') {
- if (yych >= 'A')
- goto yy30;
- } else {
- if (yych <= ']')
- goto yy28;
- if (yych <= '~')
- goto yy30;
- }
- }
- }
- yy28:
- ++p;
- yy29 : { return 0; }
- yy30:
- yych = *(marker = ++p);
- if (yych <= ',') {
- if (yych <= '"') {
- if (yych == '!')
- goto yy32;
- goto yy29;
- } else {
- if (yych <= '\'')
- goto yy32;
- if (yych <= ')')
- goto yy29;
- if (yych <= '+')
- goto yy32;
- goto yy29;
- }
- } else {
- if (yych <= '>') {
- if (yych <= '9')
- goto yy32;
- if (yych == '=')
- goto yy32;
- goto yy29;
- } else {
- if (yych <= 'Z')
- goto yy32;
- if (yych <= ']')
- goto yy29;
- if (yych <= '~')
- goto yy32;
- goto yy29;
- }
- }
- yy31:
- yych = *++p;
- yy32:
- if (yybm[0 + yych] & 128) {
- goto yy31;
- }
- if (yych <= '>')
- goto yy33;
- if (yych <= '@')
- goto yy34;
- yy33:
- p = marker;
- goto yy29;
- yy34:
- yych = *++p;
- if (yych <= '@') {
- if (yych <= '/')
- goto yy33;
- if (yych >= ':')
- goto yy33;
- } else {
- if (yych <= 'Z')
- goto yy35;
- if (yych <= '`')
- goto yy33;
- if (yych >= '{')
- goto yy33;
- }
- yy35:
- yych = *++p;
- if (yych <= '=') {
- if (yych <= '.') {
- if (yych <= ',')
- goto yy33;
- if (yych >= '.')
- goto yy34;
- } else {
- if (yych <= '/')
- goto yy33;
- if (yych <= '9')
- goto yy36;
- goto yy33;
- }
- } else {
- if (yych <= 'Z') {
- if (yych <= '>')
- goto yy37;
- if (yych <= '@')
- goto yy33;
- goto yy36;
- } else {
- if (yych <= '`')
- goto yy33;
- if (yych <= 'z')
- goto yy36;
- goto yy33;
- }
- }
- yych = *++p;
- if (yych <= '9') {
- if (yych == '-')
- goto yy38;
- if (yych <= '/')
- goto yy33;
- goto yy39;
- } else {
- if (yych <= 'Z') {
- if (yych <= '@')
- goto yy33;
- goto yy39;
- } else {
- if (yych <= '`')
- goto yy33;
- if (yych <= 'z')
- goto yy39;
- goto yy33;
- }
- }
- yy36:
- yych = *++p;
- if (yych <= '=') {
- if (yych <= '.') {
- if (yych <= ',')
- goto yy33;
- if (yych <= '-')
- goto yy38;
- goto yy34;
- } else {
- if (yych <= '/')
- goto yy33;
- if (yych <= '9')
- goto yy39;
- goto yy33;
- }
- } else {
- if (yych <= 'Z') {
- if (yych <= '>')
- goto yy37;
- if (yych <= '@')
- goto yy33;
- goto yy39;
- } else {
- if (yych <= '`')
- goto yy33;
- if (yych <= 'z')
- goto yy39;
- goto yy33;
- }
- }
- yy37:
- ++p;
- { return (bufsize_t)(p - start); }
- yy38:
- yych = *++p;
- if (yych <= '9') {
- if (yych == '-')
- goto yy40;
- if (yych <= '/')
- goto yy33;
- goto yy41;
- } else {
- if (yych <= 'Z') {
- if (yych <= '@')
- goto yy33;
- goto yy41;
- } else {
- if (yych <= '`')
- goto yy33;
- if (yych <= 'z')
- goto yy41;
- goto yy33;
- }
- }
- yy39:
- yych = *++p;
- if (yych <= '=') {
- if (yych <= '.') {
- if (yych <= ',')
- goto yy33;
- if (yych >= '.')
- goto yy34;
- } else {
- if (yych <= '/')
- goto yy33;
- if (yych <= '9')
- goto yy41;
- goto yy33;
- }
- } else {
- if (yych <= 'Z') {
- if (yych <= '>')
- goto yy37;
- if (yych <= '@')
- goto yy33;
- goto yy41;
- } else {
- if (yych <= '`')
- goto yy33;
- if (yych <= 'z')
- goto yy41;
- goto yy33;
- }
- }
- yy40:
- yych = *++p;
- if (yych <= '9') {
- if (yych == '-')
- goto yy42;
- if (yych <= '/')
- goto yy33;
- goto yy43;
- } else {
- if (yych <= 'Z') {
- if (yych <= '@')
- goto yy33;
- goto yy43;
- } else {
- if (yych <= '`')
- goto yy33;
- if (yych <= 'z')
- goto yy43;
- goto yy33;
- }
- }
- yy41:
- yych = *++p;
- if (yych <= '=') {
- if (yych <= '.') {
- if (yych <= ',')
- goto yy33;
- if (yych >= '.')
- goto yy34;
- } else {
- if (yych <= '/')
- goto yy33;
- if (yych <= '9')
- goto yy43;
- goto yy33;
- }
- } else {
- if (yych <= 'Z') {
- if (yych <= '>')
- goto yy37;
- if (yych <= '@')
- goto yy33;
- goto yy43;
- } else {
- if (yych <= '`')
- goto yy33;
- if (yych <= 'z')
- goto yy43;
- goto yy33;
- }
- }
- yy42:
- yych = *++p;
- if (yych <= '9') {
- if (yych == '-')
- goto yy44;
- if (yych <= '/')
- goto yy33;
- goto yy45;
- } else {
- if (yych <= 'Z') {
- if (yych <= '@')
- goto yy33;
- goto yy45;
- } else {
- if (yych <= '`')
- goto yy33;
- if (yych <= 'z')
- goto yy45;
- goto yy33;
- }
- }
- yy43:
- yych = *++p;
- if (yych <= '=') {
- if (yych <= '.') {
- if (yych <= ',')
- goto yy33;
- if (yych >= '.')
- goto yy34;
- } else {
- if (yych <= '/')
- goto yy33;
- if (yych <= '9')
- goto yy45;
- goto yy33;
- }
- } else {
- if (yych <= 'Z') {
- if (yych <= '>')
- goto yy37;
- if (yych <= '@')
- goto yy33;
- goto yy45;
- } else {
- if (yych <= '`')
- goto yy33;
- if (yych <= 'z')
- goto yy45;
- goto yy33;
- }
- }
- yy44:
- yych = *++p;
- if (yych <= '9') {
- if (yych == '-')
- goto yy46;
- if (yych <= '/')
- goto yy33;
- goto yy47;
- } else {
- if (yych <= 'Z') {
- if (yych <= '@')
- goto yy33;
- goto yy47;
- } else {
- if (yych <= '`')
- goto yy33;
- if (yych <= 'z')
- goto yy47;
- goto yy33;
- }
- }
- yy45:
- yych = *++p;
- if (yych <= '=') {
- if (yych <= '.') {
- if (yych <= ',')
- goto yy33;
- if (yych >= '.')
- goto yy34;
- } else {
- if (yych <= '/')
- goto yy33;
- if (yych <= '9')
- goto yy47;
- goto yy33;
- }
- } else {
- if (yych <= 'Z') {
- if (yych <= '>')
- goto yy37;
- if (yych <= '@')
- goto yy33;
- goto yy47;
- } else {
- if (yych <= '`')
- goto yy33;
- if (yych <= 'z')
- goto yy47;
- goto yy33;
- }
- }
- yy46:
- yych = *++p;
- if (yych <= '9') {
- if (yych == '-')
- goto yy48;
- if (yych <= '/')
- goto yy33;
- goto yy49;
- } else {
- if (yych <= 'Z') {
- if (yych <= '@')
- goto yy33;
- goto yy49;
- } else {
- if (yych <= '`')
- goto yy33;
- if (yych <= 'z')
- goto yy49;
- goto yy33;
- }
- }
- yy47:
- yych = *++p;
- if (yych <= '=') {
- if (yych <= '.') {
- if (yych <= ',')
- goto yy33;
- if (yych >= '.')
- goto yy34;
- } else {
- if (yych <= '/')
- goto yy33;
- if (yych <= '9')
- goto yy49;
- goto yy33;
- }
- } else {
- if (yych <= 'Z') {
- if (yych <= '>')
- goto yy37;
- if (yych <= '@')
- goto yy33;
- goto yy49;
- } else {
- if (yych <= '`')
- goto yy33;
- if (yych <= 'z')
- goto yy49;
- goto yy33;
- }
- }
- yy48:
- yych = *++p;
- if (yych <= '9') {
- if (yych == '-')
- goto yy50;
- if (yych <= '/')
- goto yy33;
- goto yy51;
- } else {
- if (yych <= 'Z') {
- if (yych <= '@')
- goto yy33;
- goto yy51;
- } else {
- if (yych <= '`')
- goto yy33;
- if (yych <= 'z')
- goto yy51;
- goto yy33;
- }
- }
- yy49:
- yych = *++p;
- if (yych <= '=') {
- if (yych <= '.') {
- if (yych <= ',')
- goto yy33;
- if (yych >= '.')
- goto yy34;
- } else {
- if (yych <= '/')
- goto yy33;
- if (yych <= '9')
- goto yy51;
- goto yy33;
- }
- } else {
- if (yych <= 'Z') {
- if (yych <= '>')
- goto yy37;
- if (yych <= '@')
- goto yy33;
- goto yy51;
- } else {
- if (yych <= '`')
- goto yy33;
- if (yych <= 'z')
- goto yy51;
- goto yy33;
- }
- }
- yy50:
- yych = *++p;
- if (yych <= '9') {
- if (yych == '-')
- goto yy52;
- if (yych <= '/')
- goto yy33;
- goto yy53;
- } else {
- if (yych <= 'Z') {
- if (yych <= '@')
- goto yy33;
- goto yy53;
- } else {
- if (yych <= '`')
- goto yy33;
- if (yych <= 'z')
- goto yy53;
- goto yy33;
- }
- }
- yy51:
- yych = *++p;
- if (yych <= '=') {
- if (yych <= '.') {
- if (yych <= ',')
- goto yy33;
- if (yych >= '.')
- goto yy34;
- } else {
- if (yych <= '/')
- goto yy33;
- if (yych <= '9')
- goto yy53;
- goto yy33;
- }
- } else {
- if (yych <= 'Z') {
- if (yych <= '>')
- goto yy37;
- if (yych <= '@')
- goto yy33;
- goto yy53;
- } else {
- if (yych <= '`')
- goto yy33;
- if (yych <= 'z')
- goto yy53;
- goto yy33;
- }
- }
- yy52:
- yych = *++p;
- if (yych <= '9') {
- if (yych == '-')
- goto yy54;
- if (yych <= '/')
- goto yy33;
- goto yy55;
- } else {
- if (yych <= 'Z') {
- if (yych <= '@')
- goto yy33;
- goto yy55;
- } else {
- if (yych <= '`')
- goto yy33;
- if (yych <= 'z')
- goto yy55;
- goto yy33;
- }
- }
- yy53:
- yych = *++p;
- if (yych <= '=') {
- if (yych <= '.') {
- if (yych <= ',')
- goto yy33;
- if (yych >= '.')
- goto yy34;
- } else {
- if (yych <= '/')
- goto yy33;
- if (yych <= '9')
- goto yy55;
- goto yy33;
- }
- } else {
- if (yych <= 'Z') {
- if (yych <= '>')
- goto yy37;
- if (yych <= '@')
- goto yy33;
- goto yy55;
- } else {
- if (yych <= '`')
- goto yy33;
- if (yych <= 'z')
- goto yy55;
- goto yy33;
- }
- }
- yy54:
- yych = *++p;
- if (yych <= '9') {
- if (yych == '-')
- goto yy56;
- if (yych <= '/')
- goto yy33;
- goto yy57;
- } else {
- if (yych <= 'Z') {
- if (yych <= '@')
- goto yy33;
- goto yy57;
- } else {
- if (yych <= '`')
- goto yy33;
- if (yych <= 'z')
- goto yy57;
- goto yy33;
- }
- }
- yy55:
- yych = *++p;
- if (yych <= '=') {
- if (yych <= '.') {
- if (yych <= ',')
- goto yy33;
- if (yych >= '.')
- goto yy34;
- } else {
- if (yych <= '/')
- goto yy33;
- if (yych <= '9')
- goto yy57;
- goto yy33;
- }
- } else {
- if (yych <= 'Z') {
- if (yych <= '>')
- goto yy37;
- if (yych <= '@')
- goto yy33;
- goto yy57;
- } else {
- if (yych <= '`')
- goto yy33;
- if (yych <= 'z')
- goto yy57;
- goto yy33;
- }
- }
- yy56:
- yych = *++p;
- if (yych <= '9') {
- if (yych == '-')
- goto yy58;
- if (yych <= '/')
- goto yy33;
- goto yy59;
- } else {
- if (yych <= 'Z') {
- if (yych <= '@')
- goto yy33;
- goto yy59;
- } else {
- if (yych <= '`')
- goto yy33;
- if (yych <= 'z')
- goto yy59;
- goto yy33;
- }
- }
- yy57:
- yych = *++p;
- if (yych <= '=') {
- if (yych <= '.') {
- if (yych <= ',')
- goto yy33;
- if (yych >= '.')
- goto yy34;
- } else {
- if (yych <= '/')
- goto yy33;
- if (yych <= '9')
- goto yy59;
- goto yy33;
- }
- } else {
- if (yych <= 'Z') {
- if (yych <= '>')
- goto yy37;
- if (yych <= '@')
- goto yy33;
- goto yy59;
- } else {
- if (yych <= '`')
- goto yy33;
- if (yych <= 'z')
- goto yy59;
- goto yy33;
- }
- }
- yy58:
- yych = *++p;
- if (yych <= '9') {
- if (yych == '-')
- goto yy60;
- if (yych <= '/')
- goto yy33;
- goto yy61;
- } else {
- if (yych <= 'Z') {
- if (yych <= '@')
- goto yy33;
- goto yy61;
- } else {
- if (yych <= '`')
- goto yy33;
- if (yych <= 'z')
- goto yy61;
- goto yy33;
- }
- }
- yy59:
- yych = *++p;
- if (yych <= '=') {
- if (yych <= '.') {
- if (yych <= ',')
- goto yy33;
- if (yych >= '.')
- goto yy34;
- } else {
- if (yych <= '/')
- goto yy33;
- if (yych <= '9')
- goto yy61;
- goto yy33;
- }
- } else {
- if (yych <= 'Z') {
- if (yych <= '>')
- goto yy37;
- if (yych <= '@')
- goto yy33;
- goto yy61;
- } else {
- if (yych <= '`')
- goto yy33;
- if (yych <= 'z')
- goto yy61;
- goto yy33;
- }
- }
- yy60:
- yych = *++p;
- if (yych <= '9') {
- if (yych == '-')
- goto yy62;
- if (yych <= '/')
- goto yy33;
- goto yy63;
- } else {
- if (yych <= 'Z') {
- if (yych <= '@')
- goto yy33;
- goto yy63;
- } else {
- if (yych <= '`')
- goto yy33;
- if (yych <= 'z')
- goto yy63;
- goto yy33;
- }
- }
- yy61:
- yych = *++p;
- if (yych <= '=') {
- if (yych <= '.') {
- if (yych <= ',')
- goto yy33;
- if (yych >= '.')
- goto yy34;
- } else {
- if (yych <= '/')
- goto yy33;
- if (yych <= '9')
- goto yy63;
- goto yy33;
- }
- } else {
- if (yych <= 'Z') {
- if (yych <= '>')
- goto yy37;
- if (yych <= '@')
- goto yy33;
- goto yy63;
- } else {
- if (yych <= '`')
- goto yy33;
- if (yych <= 'z')
- goto yy63;
- goto yy33;
- }
- }
- yy62:
- yych = *++p;
- if (yych <= '9') {
- if (yych == '-')
- goto yy64;
- if (yych <= '/')
- goto yy33;
- goto yy65;
- } else {
- if (yych <= 'Z') {
- if (yych <= '@')
- goto yy33;
- goto yy65;
- } else {
- if (yych <= '`')
- goto yy33;
- if (yych <= 'z')
- goto yy65;
- goto yy33;
- }
- }
- yy63:
- yych = *++p;
- if (yych <= '=') {
- if (yych <= '.') {
- if (yych <= ',')
- goto yy33;
- if (yych >= '.')
- goto yy34;
- } else {
- if (yych <= '/')
- goto yy33;
- if (yych <= '9')
- goto yy65;
- goto yy33;
- }
- } else {
- if (yych <= 'Z') {
- if (yych <= '>')
- goto yy37;
- if (yych <= '@')
- goto yy33;
- goto yy65;
- } else {
- if (yych <= '`')
- goto yy33;
- if (yych <= 'z')
- goto yy65;
- goto yy33;
- }
- }
- yy64:
- yych = *++p;
- if (yych <= '9') {
- if (yych == '-')
- goto yy66;
- if (yych <= '/')
- goto yy33;
- goto yy67;
- } else {
- if (yych <= 'Z') {
- if (yych <= '@')
- goto yy33;
- goto yy67;
- } else {
- if (yych <= '`')
- goto yy33;
- if (yych <= 'z')
- goto yy67;
- goto yy33;
- }
- }
- yy65:
- yych = *++p;
- if (yych <= '=') {
- if (yych <= '.') {
- if (yych <= ',')
- goto yy33;
- if (yych >= '.')
- goto yy34;
- } else {
- if (yych <= '/')
- goto yy33;
- if (yych <= '9')
- goto yy67;
- goto yy33;
- }
- } else {
- if (yych <= 'Z') {
- if (yych <= '>')
- goto yy37;
- if (yych <= '@')
- goto yy33;
- goto yy67;
- } else {
- if (yych <= '`')
- goto yy33;
- if (yych <= 'z')
- goto yy67;
- goto yy33;
- }
- }
- yy66:
- yych = *++p;
- if (yych <= '9') {
- if (yych == '-')
- goto yy68;
- if (yych <= '/')
- goto yy33;
- goto yy69;
- } else {
- if (yych <= 'Z') {
- if (yych <= '@')
- goto yy33;
- goto yy69;
- } else {
- if (yych <= '`')
- goto yy33;
- if (yych <= 'z')
- goto yy69;
- goto yy33;
- }
- }
- yy67:
- yych = *++p;
- if (yych <= '=') {
- if (yych <= '.') {
- if (yych <= ',')
- goto yy33;
- if (yych >= '.')
- goto yy34;
- } else {
- if (yych <= '/')
- goto yy33;
- if (yych <= '9')
- goto yy69;
- goto yy33;
- }
- } else {
- if (yych <= 'Z') {
- if (yych <= '>')
- goto yy37;
- if (yych <= '@')
- goto yy33;
- goto yy69;
- } else {
- if (yych <= '`')
- goto yy33;
- if (yych <= 'z')
- goto yy69;
- goto yy33;
- }
- }
- yy68:
- yych = *++p;
- if (yych <= '9') {
- if (yych == '-')
- goto yy70;
- if (yych <= '/')
- goto yy33;
- goto yy71;
- } else {
- if (yych <= 'Z') {
- if (yych <= '@')
- goto yy33;
- goto yy71;
- } else {
- if (yych <= '`')
- goto yy33;
- if (yych <= 'z')
- goto yy71;
- goto yy33;
- }
- }
- yy69:
- yych = *++p;
- if (yych <= '=') {
- if (yych <= '.') {
- if (yych <= ',')
- goto yy33;
- if (yych >= '.')
- goto yy34;
- } else {
- if (yych <= '/')
- goto yy33;
- if (yych <= '9')
- goto yy71;
- goto yy33;
- }
- } else {
- if (yych <= 'Z') {
- if (yych <= '>')
- goto yy37;
- if (yych <= '@')
- goto yy33;
- goto yy71;
- } else {
- if (yych <= '`')
- goto yy33;
- if (yych <= 'z')
- goto yy71;
- goto yy33;
- }
- }
- yy70:
- yych = *++p;
- if (yych <= '9') {
- if (yych == '-')
- goto yy72;
- if (yych <= '/')
- goto yy33;
- goto yy73;
- } else {
- if (yych <= 'Z') {
- if (yych <= '@')
- goto yy33;
- goto yy73;
- } else {
- if (yych <= '`')
- goto yy33;
- if (yych <= 'z')
- goto yy73;
- goto yy33;
- }
- }
- yy71:
- yych = *++p;
- if (yych <= '=') {
- if (yych <= '.') {
- if (yych <= ',')
- goto yy33;
- if (yych >= '.')
- goto yy34;
- } else {
- if (yych <= '/')
- goto yy33;
- if (yych <= '9')
- goto yy73;
- goto yy33;
- }
- } else {
- if (yych <= 'Z') {
- if (yych <= '>')
- goto yy37;
- if (yych <= '@')
- goto yy33;
- goto yy73;
- } else {
- if (yych <= '`')
- goto yy33;
- if (yych <= 'z')
- goto yy73;
- goto yy33;
- }
- }
- yy72:
- yych = *++p;
- if (yych <= '9') {
- if (yych == '-')
- goto yy74;
- if (yych <= '/')
- goto yy33;
- goto yy75;
- } else {
- if (yych <= 'Z') {
- if (yych <= '@')
- goto yy33;
- goto yy75;
- } else {
- if (yych <= '`')
- goto yy33;
- if (yych <= 'z')
- goto yy75;
- goto yy33;
- }
- }
- yy73:
- yych = *++p;
- if (yych <= '=') {
- if (yych <= '.') {
- if (yych <= ',')
- goto yy33;
- if (yych >= '.')
- goto yy34;
- } else {
- if (yych <= '/')
- goto yy33;
- if (yych <= '9')
- goto yy75;
- goto yy33;
- }
- } else {
- if (yych <= 'Z') {
- if (yych <= '>')
- goto yy37;
- if (yych <= '@')
- goto yy33;
- goto yy75;
- } else {
- if (yych <= '`')
- goto yy33;
- if (yych <= 'z')
- goto yy75;
- goto yy33;
- }
- }
- yy74:
- yych = *++p;
- if (yych <= '9') {
- if (yych == '-')
- goto yy76;
- if (yych <= '/')
- goto yy33;
- goto yy77;
- } else {
- if (yych <= 'Z') {
- if (yych <= '@')
- goto yy33;
- goto yy77;
- } else {
- if (yych <= '`')
- goto yy33;
- if (yych <= 'z')
- goto yy77;
- goto yy33;
- }
- }
- yy75:
- yych = *++p;
- if (yych <= '=') {
- if (yych <= '.') {
- if (yych <= ',')
- goto yy33;
- if (yych >= '.')
- goto yy34;
- } else {
- if (yych <= '/')
- goto yy33;
- if (yych <= '9')
- goto yy77;
- goto yy33;
- }
- } else {
- if (yych <= 'Z') {
- if (yych <= '>')
- goto yy37;
- if (yych <= '@')
- goto yy33;
- goto yy77;
- } else {
- if (yych <= '`')
- goto yy33;
- if (yych <= 'z')
- goto yy77;
- goto yy33;
- }
- }
- yy76:
- yych = *++p;
- if (yych <= '9') {
- if (yych == '-')
- goto yy78;
- if (yych <= '/')
- goto yy33;
- goto yy79;
- } else {
- if (yych <= 'Z') {
- if (yych <= '@')
- goto yy33;
- goto yy79;
- } else {
- if (yych <= '`')
- goto yy33;
- if (yych <= 'z')
- goto yy79;
- goto yy33;
- }
- }
- yy77:
- yych = *++p;
- if (yych <= '=') {
- if (yych <= '.') {
- if (yych <= ',')
- goto yy33;
- if (yych >= '.')
- goto yy34;
- } else {
- if (yych <= '/')
- goto yy33;
- if (yych <= '9')
- goto yy79;
- goto yy33;
- }
- } else {
- if (yych <= 'Z') {
- if (yych <= '>')
- goto yy37;
- if (yych <= '@')
- goto yy33;
- goto yy79;
- } else {
- if (yych <= '`')
- goto yy33;
- if (yych <= 'z')
- goto yy79;
- goto yy33;
- }
- }
- yy78:
- yych = *++p;
- if (yych <= '9') {
- if (yych == '-')
- goto yy80;
- if (yych <= '/')
- goto yy33;
- goto yy81;
- } else {
- if (yych <= 'Z') {
- if (yych <= '@')
- goto yy33;
- goto yy81;
- } else {
- if (yych <= '`')
- goto yy33;
- if (yych <= 'z')
- goto yy81;
- goto yy33;
- }
- }
- yy79:
- yych = *++p;
- if (yych <= '=') {
- if (yych <= '.') {
- if (yych <= ',')
- goto yy33;
- if (yych >= '.')
- goto yy34;
- } else {
- if (yych <= '/')
- goto yy33;
- if (yych <= '9')
- goto yy81;
- goto yy33;
- }
- } else {
- if (yych <= 'Z') {
- if (yych <= '>')
- goto yy37;
- if (yych <= '@')
- goto yy33;
- goto yy81;
- } else {
- if (yych <= '`')
- goto yy33;
- if (yych <= 'z')
- goto yy81;
- goto yy33;
- }
- }
- yy80:
- yych = *++p;
- if (yych <= '9') {
- if (yych == '-')
- goto yy82;
- if (yych <= '/')
- goto yy33;
- goto yy83;
- } else {
- if (yych <= 'Z') {
- if (yych <= '@')
- goto yy33;
- goto yy83;
- } else {
- if (yych <= '`')
- goto yy33;
- if (yych <= 'z')
- goto yy83;
- goto yy33;
- }
- }
- yy81:
- yych = *++p;
- if (yych <= '=') {
- if (yych <= '.') {
- if (yych <= ',')
- goto yy33;
- if (yych >= '.')
- goto yy34;
- } else {
- if (yych <= '/')
- goto yy33;
- if (yych <= '9')
- goto yy83;
- goto yy33;
- }
- } else {
- if (yych <= 'Z') {
- if (yych <= '>')
- goto yy37;
- if (yych <= '@')
- goto yy33;
- goto yy83;
- } else {
- if (yych <= '`')
- goto yy33;
- if (yych <= 'z')
- goto yy83;
- goto yy33;
- }
- }
- yy82:
- yych = *++p;
- if (yych <= '9') {
- if (yych == '-')
- goto yy84;
- if (yych <= '/')
- goto yy33;
- goto yy85;
- } else {
- if (yych <= 'Z') {
- if (yych <= '@')
- goto yy33;
- goto yy85;
- } else {
- if (yych <= '`')
- goto yy33;
- if (yych <= 'z')
- goto yy85;
- goto yy33;
- }
- }
- yy83:
- yych = *++p;
- if (yych <= '=') {
- if (yych <= '.') {
- if (yych <= ',')
- goto yy33;
- if (yych >= '.')
- goto yy34;
- } else {
- if (yych <= '/')
- goto yy33;
- if (yych <= '9')
- goto yy85;
- goto yy33;
- }
- } else {
- if (yych <= 'Z') {
- if (yych <= '>')
- goto yy37;
- if (yych <= '@')
- goto yy33;
- goto yy85;
- } else {
- if (yych <= '`')
- goto yy33;
- if (yych <= 'z')
- goto yy85;
- goto yy33;
- }
- }
- yy84:
- yych = *++p;
- if (yych <= '9') {
- if (yych == '-')
- goto yy86;
- if (yych <= '/')
- goto yy33;
- goto yy87;
- } else {
- if (yych <= 'Z') {
- if (yych <= '@')
- goto yy33;
- goto yy87;
- } else {
- if (yych <= '`')
- goto yy33;
- if (yych <= 'z')
- goto yy87;
- goto yy33;
- }
- }
- yy85:
- yych = *++p;
- if (yych <= '=') {
- if (yych <= '.') {
- if (yych <= ',')
- goto yy33;
- if (yych >= '.')
- goto yy34;
- } else {
- if (yych <= '/')
- goto yy33;
- if (yych <= '9')
- goto yy87;
- goto yy33;
- }
- } else {
- if (yych <= 'Z') {
- if (yych <= '>')
- goto yy37;
- if (yych <= '@')
- goto yy33;
- goto yy87;
- } else {
- if (yych <= '`')
- goto yy33;
- if (yych <= 'z')
- goto yy87;
- goto yy33;
- }
- }
- yy86:
- yych = *++p;
- if (yych <= '9') {
- if (yych == '-')
- goto yy88;
- if (yych <= '/')
- goto yy33;
- goto yy89;
- } else {
- if (yych <= 'Z') {
- if (yych <= '@')
- goto yy33;
- goto yy89;
- } else {
- if (yych <= '`')
- goto yy33;
- if (yych <= 'z')
- goto yy89;
- goto yy33;
- }
- }
- yy87:
- yych = *++p;
- if (yych <= '=') {
- if (yych <= '.') {
- if (yych <= ',')
- goto yy33;
- if (yych >= '.')
- goto yy34;
- } else {
- if (yych <= '/')
- goto yy33;
- if (yych <= '9')
- goto yy89;
- goto yy33;
- }
- } else {
- if (yych <= 'Z') {
- if (yych <= '>')
- goto yy37;
- if (yych <= '@')
- goto yy33;
- goto yy89;
- } else {
- if (yych <= '`')
- goto yy33;
- if (yych <= 'z')
- goto yy89;
- goto yy33;
- }
- }
- yy88:
- yych = *++p;
- if (yych <= '9') {
- if (yych == '-')
- goto yy90;
- if (yych <= '/')
- goto yy33;
- goto yy91;
- } else {
- if (yych <= 'Z') {
- if (yych <= '@')
- goto yy33;
- goto yy91;
- } else {
- if (yych <= '`')
- goto yy33;
- if (yych <= 'z')
- goto yy91;
- goto yy33;
- }
- }
- yy89:
- yych = *++p;
- if (yych <= '=') {
- if (yych <= '.') {
- if (yych <= ',')
- goto yy33;
- if (yych >= '.')
- goto yy34;
- } else {
- if (yych <= '/')
- goto yy33;
- if (yych <= '9')
- goto yy91;
- goto yy33;
- }
- } else {
- if (yych <= 'Z') {
- if (yych <= '>')
- goto yy37;
- if (yych <= '@')
- goto yy33;
- goto yy91;
- } else {
- if (yych <= '`')
- goto yy33;
- if (yych <= 'z')
- goto yy91;
- goto yy33;
- }
- }
- yy90:
- yych = *++p;
- if (yych <= '9') {
- if (yych == '-')
- goto yy92;
- if (yych <= '/')
- goto yy33;
- goto yy93;
- } else {
- if (yych <= 'Z') {
- if (yych <= '@')
- goto yy33;
- goto yy93;
- } else {
- if (yych <= '`')
- goto yy33;
- if (yych <= 'z')
- goto yy93;
- goto yy33;
- }
- }
- yy91:
- yych = *++p;
- if (yych <= '=') {
- if (yych <= '.') {
- if (yych <= ',')
- goto yy33;
- if (yych >= '.')
- goto yy34;
- } else {
- if (yych <= '/')
- goto yy33;
- if (yych <= '9')
- goto yy93;
- goto yy33;
- }
- } else {
- if (yych <= 'Z') {
- if (yych <= '>')
- goto yy37;
- if (yych <= '@')
- goto yy33;
- goto yy93;
- } else {
- if (yych <= '`')
- goto yy33;
- if (yych <= 'z')
- goto yy93;
- goto yy33;
- }
- }
- yy92:
- yych = *++p;
- if (yych <= '9') {
- if (yych == '-')
- goto yy94;
- if (yych <= '/')
- goto yy33;
- goto yy95;
- } else {
- if (yych <= 'Z') {
- if (yych <= '@')
- goto yy33;
- goto yy95;
- } else {
- if (yych <= '`')
- goto yy33;
- if (yych <= 'z')
- goto yy95;
- goto yy33;
- }
- }
- yy93:
- yych = *++p;
- if (yych <= '=') {
- if (yych <= '.') {
- if (yych <= ',')
- goto yy33;
- if (yych >= '.')
- goto yy34;
- } else {
- if (yych <= '/')
- goto yy33;
- if (yych <= '9')
- goto yy95;
- goto yy33;
- }
- } else {
- if (yych <= 'Z') {
- if (yych <= '>')
- goto yy37;
- if (yych <= '@')
- goto yy33;
- goto yy95;
- } else {
- if (yych <= '`')
- goto yy33;
- if (yych <= 'z')
- goto yy95;
- goto yy33;
- }
- }
- yy94:
- yych = *++p;
- if (yych <= '9') {
- if (yych == '-')
- goto yy96;
- if (yych <= '/')
- goto yy33;
- goto yy97;
- } else {
- if (yych <= 'Z') {
- if (yych <= '@')
- goto yy33;
- goto yy97;
- } else {
- if (yych <= '`')
- goto yy33;
- if (yych <= 'z')
- goto yy97;
- goto yy33;
- }
- }
- yy95:
- yych = *++p;
- if (yych <= '=') {
- if (yych <= '.') {
- if (yych <= ',')
- goto yy33;
- if (yych >= '.')
- goto yy34;
- } else {
- if (yych <= '/')
- goto yy33;
- if (yych <= '9')
- goto yy97;
- goto yy33;
- }
- } else {
- if (yych <= 'Z') {
- if (yych <= '>')
- goto yy37;
- if (yych <= '@')
- goto yy33;
- goto yy97;
- } else {
- if (yych <= '`')
- goto yy33;
- if (yych <= 'z')
- goto yy97;
- goto yy33;
- }
- }
- yy96:
- yych = *++p;
- if (yych <= '9') {
- if (yych == '-')
- goto yy98;
- if (yych <= '/')
- goto yy33;
- goto yy99;
- } else {
- if (yych <= 'Z') {
- if (yych <= '@')
- goto yy33;
- goto yy99;
- } else {
- if (yych <= '`')
- goto yy33;
- if (yych <= 'z')
- goto yy99;
- goto yy33;
- }
- }
- yy97:
- yych = *++p;
- if (yych <= '=') {
- if (yych <= '.') {
- if (yych <= ',')
- goto yy33;
- if (yych >= '.')
- goto yy34;
- } else {
- if (yych <= '/')
- goto yy33;
- if (yych <= '9')
- goto yy99;
- goto yy33;
- }
- } else {
- if (yych <= 'Z') {
- if (yych <= '>')
- goto yy37;
- if (yych <= '@')
- goto yy33;
- goto yy99;
- } else {
- if (yych <= '`')
- goto yy33;
- if (yych <= 'z')
- goto yy99;
- goto yy33;
- }
- }
- yy98:
- yych = *++p;
- if (yych <= '9') {
- if (yych == '-')
- goto yy100;
- if (yych <= '/')
- goto yy33;
- goto yy101;
- } else {
- if (yych <= 'Z') {
- if (yych <= '@')
- goto yy33;
- goto yy101;
- } else {
- if (yych <= '`')
- goto yy33;
- if (yych <= 'z')
- goto yy101;
- goto yy33;
- }
- }
- yy99:
- yych = *++p;
- if (yych <= '=') {
- if (yych <= '.') {
- if (yych <= ',')
- goto yy33;
- if (yych >= '.')
- goto yy34;
- } else {
- if (yych <= '/')
- goto yy33;
- if (yych <= '9')
- goto yy101;
- goto yy33;
- }
- } else {
- if (yych <= 'Z') {
- if (yych <= '>')
- goto yy37;
- if (yych <= '@')
- goto yy33;
- goto yy101;
- } else {
- if (yych <= '`')
- goto yy33;
- if (yych <= 'z')
- goto yy101;
- goto yy33;
- }
- }
- yy100:
- yych = *++p;
- if (yych <= '9') {
- if (yych == '-')
- goto yy102;
- if (yych <= '/')
- goto yy33;
- goto yy103;
- } else {
- if (yych <= 'Z') {
- if (yych <= '@')
- goto yy33;
- goto yy103;
- } else {
- if (yych <= '`')
- goto yy33;
- if (yych <= 'z')
- goto yy103;
- goto yy33;
- }
- }
- yy101:
- yych = *++p;
- if (yych <= '=') {
- if (yych <= '.') {
- if (yych <= ',')
- goto yy33;
- if (yych >= '.')
- goto yy34;
- } else {
- if (yych <= '/')
- goto yy33;
- if (yych <= '9')
- goto yy103;
- goto yy33;
- }
- } else {
- if (yych <= 'Z') {
- if (yych <= '>')
- goto yy37;
- if (yych <= '@')
- goto yy33;
- goto yy103;
- } else {
- if (yych <= '`')
- goto yy33;
- if (yych <= 'z')
- goto yy103;
- goto yy33;
- }
- }
- yy102:
- yych = *++p;
- if (yych <= '9') {
- if (yych == '-')
- goto yy104;
- if (yych <= '/')
- goto yy33;
- goto yy105;
- } else {
- if (yych <= 'Z') {
- if (yych <= '@')
- goto yy33;
- goto yy105;
- } else {
- if (yych <= '`')
- goto yy33;
- if (yych <= 'z')
- goto yy105;
- goto yy33;
- }
- }
- yy103:
- yych = *++p;
- if (yych <= '=') {
- if (yych <= '.') {
- if (yych <= ',')
- goto yy33;
- if (yych >= '.')
- goto yy34;
- } else {
- if (yych <= '/')
- goto yy33;
- if (yych <= '9')
- goto yy105;
- goto yy33;
- }
- } else {
- if (yych <= 'Z') {
- if (yych <= '>')
- goto yy37;
- if (yych <= '@')
- goto yy33;
- goto yy105;
- } else {
- if (yych <= '`')
- goto yy33;
- if (yych <= 'z')
- goto yy105;
- goto yy33;
- }
- }
- yy104:
- yych = *++p;
- if (yych <= '9') {
- if (yych == '-')
- goto yy106;
- if (yych <= '/')
- goto yy33;
- goto yy107;
- } else {
- if (yych <= 'Z') {
- if (yych <= '@')
- goto yy33;
- goto yy107;
- } else {
- if (yych <= '`')
- goto yy33;
- if (yych <= 'z')
- goto yy107;
- goto yy33;
- }
- }
- yy105:
- yych = *++p;
- if (yych <= '=') {
- if (yych <= '.') {
- if (yych <= ',')
- goto yy33;
- if (yych >= '.')
- goto yy34;
- } else {
- if (yych <= '/')
- goto yy33;
- if (yych <= '9')
- goto yy107;
- goto yy33;
- }
- } else {
- if (yych <= 'Z') {
- if (yych <= '>')
- goto yy37;
- if (yych <= '@')
- goto yy33;
- goto yy107;
- } else {
- if (yych <= '`')
- goto yy33;
- if (yych <= 'z')
- goto yy107;
- goto yy33;
- }
- }
- yy106:
- yych = *++p;
- if (yych <= '9') {
- if (yych == '-')
- goto yy108;
- if (yych <= '/')
- goto yy33;
- goto yy109;
- } else {
- if (yych <= 'Z') {
- if (yych <= '@')
- goto yy33;
- goto yy109;
- } else {
- if (yych <= '`')
- goto yy33;
- if (yych <= 'z')
- goto yy109;
- goto yy33;
- }
- }
- yy107:
- yych = *++p;
- if (yych <= '=') {
- if (yych <= '.') {
- if (yych <= ',')
- goto yy33;
- if (yych >= '.')
- goto yy34;
- } else {
- if (yych <= '/')
- goto yy33;
- if (yych <= '9')
- goto yy109;
- goto yy33;
- }
- } else {
- if (yych <= 'Z') {
- if (yych <= '>')
- goto yy37;
- if (yych <= '@')
- goto yy33;
- goto yy109;
- } else {
- if (yych <= '`')
- goto yy33;
- if (yych <= 'z')
- goto yy109;
- goto yy33;
- }
- }
- yy108:
- yych = *++p;
- if (yych <= '9') {
- if (yych == '-')
- goto yy110;
- if (yych <= '/')
- goto yy33;
- goto yy111;
- } else {
- if (yych <= 'Z') {
- if (yych <= '@')
- goto yy33;
- goto yy111;
- } else {
- if (yych <= '`')
- goto yy33;
- if (yych <= 'z')
- goto yy111;
- goto yy33;
- }
- }
- yy109:
- yych = *++p;
- if (yych <= '=') {
- if (yych <= '.') {
- if (yych <= ',')
- goto yy33;
- if (yych >= '.')
- goto yy34;
- } else {
- if (yych <= '/')
- goto yy33;
- if (yych <= '9')
- goto yy111;
- goto yy33;
- }
- } else {
- if (yych <= 'Z') {
- if (yych <= '>')
- goto yy37;
- if (yych <= '@')
- goto yy33;
- goto yy111;
- } else {
- if (yych <= '`')
- goto yy33;
- if (yych <= 'z')
- goto yy111;
- goto yy33;
- }
- }
- yy110:
- yych = *++p;
- if (yych <= '9') {
- if (yych == '-')
- goto yy112;
- if (yych <= '/')
- goto yy33;
- goto yy113;
- } else {
- if (yych <= 'Z') {
- if (yych <= '@')
- goto yy33;
- goto yy113;
- } else {
- if (yych <= '`')
- goto yy33;
- if (yych <= 'z')
- goto yy113;
- goto yy33;
- }
- }
- yy111:
- yych = *++p;
- if (yych <= '=') {
- if (yych <= '.') {
- if (yych <= ',')
- goto yy33;
- if (yych >= '.')
- goto yy34;
- } else {
- if (yych <= '/')
- goto yy33;
- if (yych <= '9')
- goto yy113;
- goto yy33;
- }
- } else {
- if (yych <= 'Z') {
- if (yych <= '>')
- goto yy37;
- if (yych <= '@')
- goto yy33;
- goto yy113;
- } else {
- if (yych <= '`')
- goto yy33;
- if (yych <= 'z')
- goto yy113;
- goto yy33;
- }
- }
- yy112:
- yych = *++p;
- if (yych <= '9') {
- if (yych == '-')
- goto yy114;
- if (yych <= '/')
- goto yy33;
- goto yy115;
- } else {
- if (yych <= 'Z') {
- if (yych <= '@')
- goto yy33;
- goto yy115;
- } else {
- if (yych <= '`')
- goto yy33;
- if (yych <= 'z')
- goto yy115;
- goto yy33;
- }
- }
- yy113:
- yych = *++p;
- if (yych <= '=') {
- if (yych <= '.') {
- if (yych <= ',')
- goto yy33;
- if (yych >= '.')
- goto yy34;
- } else {
- if (yych <= '/')
- goto yy33;
- if (yych <= '9')
- goto yy115;
- goto yy33;
- }
- } else {
- if (yych <= 'Z') {
- if (yych <= '>')
- goto yy37;
- if (yych <= '@')
- goto yy33;
- goto yy115;
- } else {
- if (yych <= '`')
- goto yy33;
- if (yych <= 'z')
- goto yy115;
- goto yy33;
- }
- }
- yy114:
- yych = *++p;
- if (yych <= '9') {
- if (yych == '-')
- goto yy116;
- if (yych <= '/')
- goto yy33;
- goto yy117;
- } else {
- if (yych <= 'Z') {
- if (yych <= '@')
- goto yy33;
- goto yy117;
- } else {
- if (yych <= '`')
- goto yy33;
- if (yych <= 'z')
- goto yy117;
- goto yy33;
- }
- }
- yy115:
- yych = *++p;
- if (yych <= '=') {
- if (yych <= '.') {
- if (yych <= ',')
- goto yy33;
- if (yych >= '.')
- goto yy34;
- } else {
- if (yych <= '/')
- goto yy33;
- if (yych <= '9')
- goto yy117;
- goto yy33;
- }
- } else {
- if (yych <= 'Z') {
- if (yych <= '>')
- goto yy37;
- if (yych <= '@')
- goto yy33;
- goto yy117;
- } else {
- if (yych <= '`')
- goto yy33;
- if (yych <= 'z')
- goto yy117;
- goto yy33;
- }
- }
- yy116:
- yych = *++p;
- if (yych <= '9') {
- if (yych == '-')
- goto yy118;
- if (yych <= '/')
- goto yy33;
- goto yy119;
- } else {
- if (yych <= 'Z') {
- if (yych <= '@')
- goto yy33;
- goto yy119;
- } else {
- if (yych <= '`')
- goto yy33;
- if (yych <= 'z')
- goto yy119;
- goto yy33;
- }
- }
- yy117:
- yych = *++p;
- if (yych <= '=') {
- if (yych <= '.') {
- if (yych <= ',')
- goto yy33;
- if (yych >= '.')
- goto yy34;
- } else {
- if (yych <= '/')
- goto yy33;
- if (yych <= '9')
- goto yy119;
- goto yy33;
- }
- } else {
- if (yych <= 'Z') {
- if (yych <= '>')
- goto yy37;
- if (yych <= '@')
- goto yy33;
- goto yy119;
- } else {
- if (yych <= '`')
- goto yy33;
- if (yych <= 'z')
- goto yy119;
- goto yy33;
- }
- }
- yy118:
- yych = *++p;
- if (yych <= '9') {
- if (yych == '-')
- goto yy120;
- if (yych <= '/')
- goto yy33;
- goto yy121;
- } else {
- if (yych <= 'Z') {
- if (yych <= '@')
- goto yy33;
- goto yy121;
- } else {
- if (yych <= '`')
- goto yy33;
- if (yych <= 'z')
- goto yy121;
- goto yy33;
- }
- }
- yy119:
- yych = *++p;
- if (yych <= '=') {
- if (yych <= '.') {
- if (yych <= ',')
- goto yy33;
- if (yych >= '.')
- goto yy34;
- } else {
- if (yych <= '/')
- goto yy33;
- if (yych <= '9')
- goto yy121;
- goto yy33;
- }
- } else {
- if (yych <= 'Z') {
- if (yych <= '>')
- goto yy37;
- if (yych <= '@')
- goto yy33;
- goto yy121;
- } else {
- if (yych <= '`')
- goto yy33;
- if (yych <= 'z')
- goto yy121;
- goto yy33;
- }
- }
- yy120:
- yych = *++p;
- if (yych <= '9') {
- if (yych == '-')
- goto yy122;
- if (yych <= '/')
- goto yy33;
- goto yy123;
- } else {
- if (yych <= 'Z') {
- if (yych <= '@')
- goto yy33;
- goto yy123;
- } else {
- if (yych <= '`')
- goto yy33;
- if (yych <= 'z')
- goto yy123;
- goto yy33;
- }
- }
- yy121:
- yych = *++p;
- if (yych <= '=') {
- if (yych <= '.') {
- if (yych <= ',')
- goto yy33;
- if (yych >= '.')
- goto yy34;
- } else {
- if (yych <= '/')
- goto yy33;
- if (yych <= '9')
- goto yy123;
- goto yy33;
- }
- } else {
- if (yych <= 'Z') {
- if (yych <= '>')
- goto yy37;
- if (yych <= '@')
- goto yy33;
- goto yy123;
- } else {
- if (yych <= '`')
- goto yy33;
- if (yych <= 'z')
- goto yy123;
- goto yy33;
- }
- }
- yy122:
- yych = *++p;
- if (yych <= '9') {
- if (yych == '-')
- goto yy124;
- if (yych <= '/')
- goto yy33;
- goto yy125;
- } else {
- if (yych <= 'Z') {
- if (yych <= '@')
- goto yy33;
- goto yy125;
- } else {
- if (yych <= '`')
- goto yy33;
- if (yych <= 'z')
- goto yy125;
- goto yy33;
- }
- }
- yy123:
- yych = *++p;
- if (yych <= '=') {
- if (yych <= '.') {
- if (yych <= ',')
- goto yy33;
- if (yych >= '.')
- goto yy34;
- } else {
- if (yych <= '/')
- goto yy33;
- if (yych <= '9')
- goto yy125;
- goto yy33;
- }
- } else {
- if (yych <= 'Z') {
- if (yych <= '>')
- goto yy37;
- if (yych <= '@')
- goto yy33;
- goto yy125;
- } else {
- if (yych <= '`')
- goto yy33;
- if (yych <= 'z')
- goto yy125;
- goto yy33;
- }
- }
- yy124:
- yych = *++p;
- if (yych <= '9') {
- if (yych == '-')
- goto yy126;
- if (yych <= '/')
- goto yy33;
- goto yy127;
- } else {
- if (yych <= 'Z') {
- if (yych <= '@')
- goto yy33;
- goto yy127;
- } else {
- if (yych <= '`')
- goto yy33;
- if (yych <= 'z')
- goto yy127;
- goto yy33;
- }
- }
- yy125:
- yych = *++p;
- if (yych <= '=') {
- if (yych <= '.') {
- if (yych <= ',')
- goto yy33;
- if (yych >= '.')
- goto yy34;
- } else {
- if (yych <= '/')
- goto yy33;
- if (yych <= '9')
- goto yy127;
- goto yy33;
- }
- } else {
- if (yych <= 'Z') {
- if (yych <= '>')
- goto yy37;
- if (yych <= '@')
- goto yy33;
- goto yy127;
- } else {
- if (yych <= '`')
- goto yy33;
- if (yych <= 'z')
- goto yy127;
- goto yy33;
- }
- }
- yy126:
- yych = *++p;
- if (yych <= '9') {
- if (yych == '-')
- goto yy128;
- if (yych <= '/')
- goto yy33;
- goto yy129;
- } else {
- if (yych <= 'Z') {
- if (yych <= '@')
- goto yy33;
- goto yy129;
- } else {
- if (yych <= '`')
- goto yy33;
- if (yych <= 'z')
- goto yy129;
- goto yy33;
- }
- }
- yy127:
- yych = *++p;
- if (yych <= '=') {
- if (yych <= '.') {
- if (yych <= ',')
- goto yy33;
- if (yych >= '.')
- goto yy34;
- } else {
- if (yych <= '/')
- goto yy33;
- if (yych <= '9')
- goto yy129;
- goto yy33;
- }
- } else {
- if (yych <= 'Z') {
- if (yych <= '>')
- goto yy37;
- if (yych <= '@')
- goto yy33;
- goto yy129;
- } else {
- if (yych <= '`')
- goto yy33;
- if (yych <= 'z')
- goto yy129;
- goto yy33;
- }
- }
- yy128:
- yych = *++p;
- if (yych <= '9') {
- if (yych == '-')
- goto yy130;
- if (yych <= '/')
- goto yy33;
- goto yy131;
- } else {
- if (yych <= 'Z') {
- if (yych <= '@')
- goto yy33;
- goto yy131;
- } else {
- if (yych <= '`')
- goto yy33;
- if (yych <= 'z')
- goto yy131;
- goto yy33;
- }
- }
- yy129:
- yych = *++p;
- if (yych <= '=') {
- if (yych <= '.') {
- if (yych <= ',')
- goto yy33;
- if (yych >= '.')
- goto yy34;
- } else {
- if (yych <= '/')
- goto yy33;
- if (yych <= '9')
- goto yy131;
- goto yy33;
- }
- } else {
- if (yych <= 'Z') {
- if (yych <= '>')
- goto yy37;
- if (yych <= '@')
- goto yy33;
- goto yy131;
- } else {
- if (yych <= '`')
- goto yy33;
- if (yych <= 'z')
- goto yy131;
- goto yy33;
- }
- }
- yy130:
- yych = *++p;
- if (yych <= '9') {
- if (yych == '-')
- goto yy132;
- if (yych <= '/')
- goto yy33;
- goto yy133;
- } else {
- if (yych <= 'Z') {
- if (yych <= '@')
- goto yy33;
- goto yy133;
- } else {
- if (yych <= '`')
- goto yy33;
- if (yych <= 'z')
- goto yy133;
- goto yy33;
- }
- }
- yy131:
- yych = *++p;
- if (yych <= '=') {
- if (yych <= '.') {
- if (yych <= ',')
- goto yy33;
- if (yych >= '.')
- goto yy34;
- } else {
- if (yych <= '/')
- goto yy33;
- if (yych <= '9')
- goto yy133;
- goto yy33;
- }
- } else {
- if (yych <= 'Z') {
- if (yych <= '>')
- goto yy37;
- if (yych <= '@')
- goto yy33;
- goto yy133;
- } else {
- if (yych <= '`')
- goto yy33;
- if (yych <= 'z')
- goto yy133;
- goto yy33;
- }
- }
- yy132:
- yych = *++p;
- if (yych <= '9') {
- if (yych == '-')
- goto yy134;
- if (yych <= '/')
- goto yy33;
- goto yy135;
- } else {
- if (yych <= 'Z') {
- if (yych <= '@')
- goto yy33;
- goto yy135;
- } else {
- if (yych <= '`')
- goto yy33;
- if (yych <= 'z')
- goto yy135;
- goto yy33;
- }
- }
- yy133:
- yych = *++p;
- if (yych <= '=') {
- if (yych <= '.') {
- if (yych <= ',')
- goto yy33;
- if (yych >= '.')
- goto yy34;
- } else {
- if (yych <= '/')
- goto yy33;
- if (yych <= '9')
- goto yy135;
- goto yy33;
- }
- } else {
- if (yych <= 'Z') {
- if (yych <= '>')
- goto yy37;
- if (yych <= '@')
- goto yy33;
- goto yy135;
- } else {
- if (yych <= '`')
- goto yy33;
- if (yych <= 'z')
- goto yy135;
- goto yy33;
- }
- }
- yy134:
- yych = *++p;
- if (yych <= '9') {
- if (yych == '-')
- goto yy136;
- if (yych <= '/')
- goto yy33;
- goto yy137;
- } else {
- if (yych <= 'Z') {
- if (yych <= '@')
- goto yy33;
- goto yy137;
- } else {
- if (yych <= '`')
- goto yy33;
- if (yych <= 'z')
- goto yy137;
- goto yy33;
- }
- }
- yy135:
- yych = *++p;
- if (yych <= '=') {
- if (yych <= '.') {
- if (yych <= ',')
- goto yy33;
- if (yych >= '.')
- goto yy34;
- } else {
- if (yych <= '/')
- goto yy33;
- if (yych <= '9')
- goto yy137;
- goto yy33;
- }
- } else {
- if (yych <= 'Z') {
- if (yych <= '>')
- goto yy37;
- if (yych <= '@')
- goto yy33;
- goto yy137;
- } else {
- if (yych <= '`')
- goto yy33;
- if (yych <= 'z')
- goto yy137;
- goto yy33;
- }
- }
- yy136:
- yych = *++p;
- if (yych <= '9') {
- if (yych == '-')
- goto yy138;
- if (yych <= '/')
- goto yy33;
- goto yy139;
- } else {
- if (yych <= 'Z') {
- if (yych <= '@')
- goto yy33;
- goto yy139;
- } else {
- if (yych <= '`')
- goto yy33;
- if (yych <= 'z')
- goto yy139;
- goto yy33;
- }
- }
- yy137:
- yych = *++p;
- if (yych <= '=') {
- if (yych <= '.') {
- if (yych <= ',')
- goto yy33;
- if (yych >= '.')
- goto yy34;
- } else {
- if (yych <= '/')
- goto yy33;
- if (yych <= '9')
- goto yy139;
- goto yy33;
- }
- } else {
- if (yych <= 'Z') {
- if (yych <= '>')
- goto yy37;
- if (yych <= '@')
- goto yy33;
- goto yy139;
- } else {
- if (yych <= '`')
- goto yy33;
- if (yych <= 'z')
- goto yy139;
- goto yy33;
- }
- }
- yy138:
- yych = *++p;
- if (yych <= '9') {
- if (yych == '-')
- goto yy140;
- if (yych <= '/')
- goto yy33;
- goto yy141;
- } else {
- if (yych <= 'Z') {
- if (yych <= '@')
- goto yy33;
- goto yy141;
- } else {
- if (yych <= '`')
- goto yy33;
- if (yych <= 'z')
- goto yy141;
- goto yy33;
- }
- }
- yy139:
- yych = *++p;
- if (yych <= '=') {
- if (yych <= '.') {
- if (yych <= ',')
- goto yy33;
- if (yych >= '.')
- goto yy34;
- } else {
- if (yych <= '/')
- goto yy33;
- if (yych <= '9')
- goto yy141;
- goto yy33;
- }
- } else {
- if (yych <= 'Z') {
- if (yych <= '>')
- goto yy37;
- if (yych <= '@')
- goto yy33;
- goto yy141;
- } else {
- if (yych <= '`')
- goto yy33;
- if (yych <= 'z')
- goto yy141;
- goto yy33;
- }
- }
- yy140:
- yych = *++p;
- if (yych <= '9') {
- if (yych == '-')
- goto yy142;
- if (yych <= '/')
- goto yy33;
- goto yy143;
- } else {
- if (yych <= 'Z') {
- if (yych <= '@')
- goto yy33;
- goto yy143;
- } else {
- if (yych <= '`')
- goto yy33;
- if (yych <= 'z')
- goto yy143;
- goto yy33;
- }
- }
- yy141:
- yych = *++p;
- if (yych <= '=') {
- if (yych <= '.') {
- if (yych <= ',')
- goto yy33;
- if (yych >= '.')
- goto yy34;
- } else {
- if (yych <= '/')
- goto yy33;
- if (yych <= '9')
- goto yy143;
- goto yy33;
- }
- } else {
- if (yych <= 'Z') {
- if (yych <= '>')
- goto yy37;
- if (yych <= '@')
- goto yy33;
- goto yy143;
- } else {
- if (yych <= '`')
- goto yy33;
- if (yych <= 'z')
- goto yy143;
- goto yy33;
- }
- }
- yy142:
- yych = *++p;
- if (yych <= '9') {
- if (yych == '-')
- goto yy144;
- if (yych <= '/')
- goto yy33;
- goto yy145;
- } else {
- if (yych <= 'Z') {
- if (yych <= '@')
- goto yy33;
- goto yy145;
- } else {
- if (yych <= '`')
- goto yy33;
- if (yych <= 'z')
- goto yy145;
- goto yy33;
- }
- }
- yy143:
- yych = *++p;
- if (yych <= '=') {
- if (yych <= '.') {
- if (yych <= ',')
- goto yy33;
- if (yych >= '.')
- goto yy34;
- } else {
- if (yych <= '/')
- goto yy33;
- if (yych <= '9')
- goto yy145;
- goto yy33;
- }
- } else {
- if (yych <= 'Z') {
- if (yych <= '>')
- goto yy37;
- if (yych <= '@')
- goto yy33;
- goto yy145;
- } else {
- if (yych <= '`')
- goto yy33;
- if (yych <= 'z')
- goto yy145;
- goto yy33;
- }
- }
- yy144:
- yych = *++p;
- if (yych <= '9') {
- if (yych == '-')
- goto yy146;
- if (yych <= '/')
- goto yy33;
- goto yy147;
- } else {
- if (yych <= 'Z') {
- if (yych <= '@')
- goto yy33;
- goto yy147;
- } else {
- if (yych <= '`')
- goto yy33;
- if (yych <= 'z')
- goto yy147;
- goto yy33;
- }
- }
- yy145:
- yych = *++p;
- if (yych <= '=') {
- if (yych <= '.') {
- if (yych <= ',')
- goto yy33;
- if (yych >= '.')
- goto yy34;
- } else {
- if (yych <= '/')
- goto yy33;
- if (yych <= '9')
- goto yy147;
- goto yy33;
- }
- } else {
- if (yych <= 'Z') {
- if (yych <= '>')
- goto yy37;
- if (yych <= '@')
- goto yy33;
- goto yy147;
- } else {
- if (yych <= '`')
- goto yy33;
- if (yych <= 'z')
- goto yy147;
- goto yy33;
- }
- }
- yy146:
- yych = *++p;
- if (yych <= '9') {
- if (yych == '-')
- goto yy148;
- if (yych <= '/')
- goto yy33;
- goto yy149;
- } else {
- if (yych <= 'Z') {
- if (yych <= '@')
- goto yy33;
- goto yy149;
- } else {
- if (yych <= '`')
- goto yy33;
- if (yych <= 'z')
- goto yy149;
- goto yy33;
- }
- }
- yy147:
- yych = *++p;
- if (yych <= '=') {
- if (yych <= '.') {
- if (yych <= ',')
- goto yy33;
- if (yych >= '.')
- goto yy34;
- } else {
- if (yych <= '/')
- goto yy33;
- if (yych <= '9')
- goto yy149;
- goto yy33;
- }
- } else {
- if (yych <= 'Z') {
- if (yych <= '>')
- goto yy37;
- if (yych <= '@')
- goto yy33;
- goto yy149;
- } else {
- if (yych <= '`')
- goto yy33;
- if (yych <= 'z')
- goto yy149;
- goto yy33;
- }
- }
- yy148:
- yych = *++p;
- if (yych <= '9') {
- if (yych == '-')
- goto yy150;
- if (yych <= '/')
- goto yy33;
- goto yy151;
- } else {
- if (yych <= 'Z') {
- if (yych <= '@')
- goto yy33;
- goto yy151;
- } else {
- if (yych <= '`')
- goto yy33;
- if (yych <= 'z')
- goto yy151;
- goto yy33;
- }
- }
- yy149:
- yych = *++p;
- if (yych <= '=') {
- if (yych <= '.') {
- if (yych <= ',')
- goto yy33;
- if (yych >= '.')
- goto yy34;
- } else {
- if (yych <= '/')
- goto yy33;
- if (yych <= '9')
- goto yy151;
- goto yy33;
- }
- } else {
- if (yych <= 'Z') {
- if (yych <= '>')
- goto yy37;
- if (yych <= '@')
- goto yy33;
- goto yy151;
- } else {
- if (yych <= '`')
- goto yy33;
- if (yych <= 'z')
- goto yy151;
- goto yy33;
- }
- }
- yy150:
- yych = *++p;
- if (yych <= '9') {
- if (yych == '-')
- goto yy152;
- if (yych <= '/')
- goto yy33;
- goto yy153;
- } else {
- if (yych <= 'Z') {
- if (yych <= '@')
- goto yy33;
- goto yy153;
- } else {
- if (yych <= '`')
- goto yy33;
- if (yych <= 'z')
- goto yy153;
- goto yy33;
- }
- }
- yy151:
- yych = *++p;
- if (yych <= '=') {
- if (yych <= '.') {
- if (yych <= ',')
- goto yy33;
- if (yych >= '.')
- goto yy34;
- } else {
- if (yych <= '/')
- goto yy33;
- if (yych <= '9')
- goto yy153;
- goto yy33;
- }
- } else {
- if (yych <= 'Z') {
- if (yych <= '>')
- goto yy37;
- if (yych <= '@')
- goto yy33;
- goto yy153;
- } else {
- if (yych <= '`')
- goto yy33;
- if (yych <= 'z')
- goto yy153;
- goto yy33;
- }
- }
- yy152:
- yych = *++p;
- if (yych <= '9') {
- if (yych == '-')
- goto yy154;
- if (yych <= '/')
- goto yy33;
- goto yy155;
- } else {
- if (yych <= 'Z') {
- if (yych <= '@')
- goto yy33;
- goto yy155;
- } else {
- if (yych <= '`')
- goto yy33;
- if (yych <= 'z')
- goto yy155;
- goto yy33;
- }
- }
- yy153:
- yych = *++p;
- if (yych <= '=') {
- if (yych <= '.') {
- if (yych <= ',')
- goto yy33;
- if (yych >= '.')
- goto yy34;
- } else {
- if (yych <= '/')
- goto yy33;
- if (yych <= '9')
- goto yy155;
- goto yy33;
- }
- } else {
- if (yych <= 'Z') {
- if (yych <= '>')
- goto yy37;
- if (yych <= '@')
- goto yy33;
- goto yy155;
- } else {
- if (yych <= '`')
- goto yy33;
- if (yych <= 'z')
- goto yy155;
- goto yy33;
- }
- }
- yy154:
- yych = *++p;
- if (yych <= '9') {
- if (yych == '-')
- goto yy156;
- if (yych <= '/')
- goto yy33;
- goto yy157;
- } else {
- if (yych <= 'Z') {
- if (yych <= '@')
- goto yy33;
- goto yy157;
- } else {
- if (yych <= '`')
- goto yy33;
- if (yych <= 'z')
- goto yy157;
- goto yy33;
- }
- }
- yy155:
- yych = *++p;
- if (yych <= '=') {
- if (yych <= '.') {
- if (yych <= ',')
- goto yy33;
- if (yych >= '.')
- goto yy34;
- } else {
- if (yych <= '/')
- goto yy33;
- if (yych <= '9')
- goto yy157;
- goto yy33;
- }
- } else {
- if (yych <= 'Z') {
- if (yych <= '>')
- goto yy37;
- if (yych <= '@')
- goto yy33;
- goto yy157;
- } else {
- if (yych <= '`')
- goto yy33;
- if (yych <= 'z')
- goto yy157;
- goto yy33;
- }
- }
- yy156:
- yych = *++p;
- if (yych <= '@') {
- if (yych <= '/')
- goto yy33;
- if (yych <= '9')
- goto yy158;
- goto yy33;
- } else {
- if (yych <= 'Z')
- goto yy158;
- if (yych <= '`')
- goto yy33;
- if (yych <= 'z')
- goto yy158;
- goto yy33;
- }
- yy157:
- yych = *++p;
- if (yych <= '=') {
- if (yych <= '.') {
- if (yych <= '-')
- goto yy33;
- goto yy34;
- } else {
- if (yych <= '/')
- goto yy33;
- if (yych >= ':')
- goto yy33;
- }
- } else {
- if (yych <= 'Z') {
- if (yych <= '>')
- goto yy37;
- if (yych <= '@')
- goto yy33;
- } else {
- if (yych <= '`')
- goto yy33;
- if (yych >= '{')
- goto yy33;
- }
- }
- yy158:
- yych = *++p;
- if (yych == '.')
- goto yy34;
- if (yych == '>')
- goto yy37;
- goto yy33;
- }
-}
-
-// Try to match an HTML tag after first <, returning num of chars matched.
-bufsize_t _scan_html_tag(const unsigned char *p) {
- const unsigned char *marker = NULL;
- const unsigned char *start = p;
-
- {
- unsigned char yych;
- static const unsigned char yybm[] = {
- 0, 224, 224, 224, 224, 224, 224, 224, 224, 200, 200, 200, 200, 200,
- 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224,
- 224, 224, 224, 224, 200, 224, 128, 224, 224, 224, 224, 64, 224, 224,
- 224, 224, 224, 244, 240, 224, 244, 244, 244, 244, 244, 244, 244, 244,
- 244, 244, 240, 224, 192, 192, 192, 224, 224, 244, 244, 244, 244, 244,
- 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244,
- 244, 244, 244, 244, 244, 244, 244, 224, 224, 224, 224, 240, 192, 244,
- 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244,
- 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, 224, 224, 224,
- 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,
- };
- yych = *p;
- if (yych <= '@') {
- if (yych == '/')
- goto yy162;
- } else {
- if (yych <= 'Z')
- goto yy163;
- if (yych <= '`')
- goto yy160;
- if (yych <= 'z')
- goto yy163;
- }
- yy160:
- ++p;
- yy161 : { return 0; }
- yy162:
- yych = *(marker = ++p);
- if (yych <= '@')
- goto yy161;
- if (yych <= 'Z')
- goto yy164;
- if (yych <= '`')
- goto yy161;
- if (yych <= 'z')
- goto yy164;
- goto yy161;
- yy163:
- yych = *(marker = ++p);
- if (yych <= '.') {
- if (yych <= 0x1F) {
- if (yych <= 0x08)
- goto yy161;
- if (yych <= '\r')
- goto yy168;
- goto yy161;
- } else {
- if (yych <= ' ')
- goto yy168;
- if (yych == '-')
- goto yy168;
- goto yy161;
- }
- } else {
- if (yych <= '@') {
- if (yych <= '9')
- goto yy168;
- if (yych == '>')
- goto yy168;
- goto yy161;
- } else {
- if (yych <= 'Z')
- goto yy168;
- if (yych <= '`')
- goto yy161;
- if (yych <= 'z')
- goto yy168;
- goto yy161;
- }
- }
- yy164:
- yych = *++p;
- if (yybm[0 + yych] & 4) {
- goto yy164;
- }
- if (yych <= 0x1F) {
- if (yych <= 0x08)
- goto yy165;
- if (yych <= '\r')
- goto yy171;
- } else {
- if (yych <= ' ')
- goto yy171;
- if (yych == '>')
- goto yy170;
- }
- yy165:
- p = marker;
- goto yy161;
- yy166:
- yych = *++p;
- if (yybm[0 + yych] & 8) {
- goto yy166;
- }
- if (yych <= '>') {
- if (yych <= '9') {
- if (yych == '/')
- goto yy169;
- goto yy165;
- } else {
- if (yych <= ':')
- goto yy172;
- if (yych <= '=')
- goto yy165;
- goto yy170;
- }
- } else {
- if (yych <= '^') {
- if (yych <= '@')
- goto yy165;
- if (yych <= 'Z')
- goto yy172;
- goto yy165;
- } else {
- if (yych == '`')
- goto yy165;
- if (yych <= 'z')
- goto yy172;
- goto yy165;
- }
- }
- yy167:
- yych = *++p;
- yy168:
- if (yybm[0 + yych] & 8) {
- goto yy166;
- }
- if (yych <= '=') {
- if (yych <= '.') {
- if (yych == '-')
- goto yy167;
- goto yy165;
- } else {
- if (yych <= '/')
- goto yy169;
- if (yych <= '9')
- goto yy167;
- goto yy165;
- }
- } else {
- if (yych <= 'Z') {
- if (yych <= '>')
- goto yy170;
- if (yych <= '@')
- goto yy165;
- goto yy167;
- } else {
- if (yych <= '`')
- goto yy165;
- if (yych <= 'z')
- goto yy167;
- goto yy165;
- }
- }
- yy169:
- yych = *++p;
- if (yych != '>')
- goto yy165;
- yy170:
- ++p;
- { return (bufsize_t)(p - start); }
- yy171:
- yych = *++p;
- if (yych <= 0x1F) {
- if (yych <= 0x08)
- goto yy165;
- if (yych <= '\r')
- goto yy171;
- goto yy165;
- } else {
- if (yych <= ' ')
- goto yy171;
- if (yych == '>')
- goto yy170;
- goto yy165;
- }
- yy172:
- yych = *++p;
- if (yybm[0 + yych] & 16) {
- goto yy172;
- }
- if (yych <= ',') {
- if (yych <= '\r') {
- if (yych <= 0x08)
- goto yy165;
- } else {
- if (yych != ' ')
- goto yy165;
- }
- } else {
- if (yych <= '<') {
- if (yych <= '/')
- goto yy169;
- goto yy165;
- } else {
- if (yych <= '=')
- goto yy174;
- if (yych <= '>')
- goto yy170;
- goto yy165;
- }
- }
- yy173:
- yych = *++p;
- if (yych <= '<') {
- if (yych <= ' ') {
- if (yych <= 0x08)
- goto yy165;
- if (yych <= '\r')
- goto yy173;
- if (yych <= 0x1F)
- goto yy165;
- goto yy173;
- } else {
- if (yych <= '/') {
- if (yych <= '.')
- goto yy165;
- goto yy169;
- } else {
- if (yych == ':')
- goto yy172;
- goto yy165;
- }
- }
- } else {
- if (yych <= 'Z') {
- if (yych <= '=')
- goto yy174;
- if (yych <= '>')
- goto yy170;
- if (yych <= '@')
- goto yy165;
- goto yy172;
- } else {
- if (yych <= '_') {
- if (yych <= '^')
- goto yy165;
- goto yy172;
- } else {
- if (yych <= '`')
- goto yy165;
- if (yych <= 'z')
- goto yy172;
- goto yy165;
- }
- }
- }
- yy174:
- yych = *++p;
- if (yybm[0 + yych] & 32) {
- goto yy175;
- }
- if (yych <= 0xE0) {
- if (yych <= '"') {
- if (yych <= 0x00)
- goto yy165;
- if (yych <= ' ')
- goto yy174;
- goto yy176;
- } else {
- if (yych <= '\'')
- goto yy177;
- if (yych <= 0xC1)
- goto yy165;
- if (yych <= 0xDF)
- goto yy178;
- goto yy179;
- }
- } else {
- if (yych <= 0xEF) {
- if (yych == 0xED)
- goto yy181;
- goto yy180;
- } else {
- if (yych <= 0xF0)
- goto yy182;
- if (yych <= 0xF3)
- goto yy183;
- if (yych <= 0xF4)
- goto yy184;
- goto yy165;
- }
- }
- yy175:
- yych = *++p;
- if (yybm[0 + yych] & 32) {
- goto yy175;
- }
- if (yych <= 0xE0) {
- if (yych <= '=') {
- if (yych <= 0x00)
- goto yy165;
- if (yych <= ' ')
- goto yy166;
- goto yy165;
- } else {
- if (yych <= '>')
- goto yy170;
- if (yych <= 0xC1)
- goto yy165;
- if (yych <= 0xDF)
- goto yy178;
- goto yy179;
- }
- } else {
- if (yych <= 0xEF) {
- if (yych == 0xED)
- goto yy181;
- goto yy180;
- } else {
- if (yych <= 0xF0)
- goto yy182;
- if (yych <= 0xF3)
- goto yy183;
- if (yych <= 0xF4)
- goto yy184;
- goto yy165;
- }
- }
- yy176:
- yych = *++p;
- if (yybm[0 + yych] & 64) {
- goto yy176;
- }
- if (yych <= 0xEC) {
- if (yych <= 0xC1) {
- if (yych <= 0x00)
- goto yy165;
- if (yych <= '"')
- goto yy185;
- goto yy165;
- } else {
- if (yych <= 0xDF)
- goto yy186;
- if (yych <= 0xE0)
- goto yy187;
- goto yy188;
- }
- } else {
- if (yych <= 0xF0) {
- if (yych <= 0xED)
- goto yy189;
- if (yych <= 0xEF)
- goto yy188;
- goto yy190;
- } else {
- if (yych <= 0xF3)
- goto yy191;
- if (yych <= 0xF4)
- goto yy192;
- goto yy165;
- }
- }
- yy177:
- yych = *++p;
- if (yybm[0 + yych] & 128) {
- goto yy177;
- }
- if (yych <= 0xEC) {
- if (yych <= 0xC1) {
- if (yych <= 0x00)
- goto yy165;
- if (yych <= '\'')
- goto yy185;
- goto yy165;
- } else {
- if (yych <= 0xDF)
- goto yy193;
- if (yych <= 0xE0)
- goto yy194;
- goto yy195;
- }
- } else {
- if (yych <= 0xF0) {
- if (yych <= 0xED)
- goto yy196;
- if (yych <= 0xEF)
- goto yy195;
- goto yy197;
- } else {
- if (yych <= 0xF3)
- goto yy198;
- if (yych <= 0xF4)
- goto yy199;
- goto yy165;
- }
- }
- yy178:
- yych = *++p;
- if (yych <= 0x7F)
- goto yy165;
- if (yych <= 0xBF)
- goto yy175;
- goto yy165;
- yy179:
- yych = *++p;
- if (yych <= 0x9F)
- goto yy165;
- if (yych <= 0xBF)
- goto yy178;
- goto yy165;
- yy180:
- yych = *++p;
- if (yych <= 0x7F)
- goto yy165;
- if (yych <= 0xBF)
- goto yy178;
- goto yy165;
- yy181:
- yych = *++p;
- if (yych <= 0x7F)
- goto yy165;
- if (yych <= 0x9F)
- goto yy178;
- goto yy165;
- yy182:
- yych = *++p;
- if (yych <= 0x8F)
- goto yy165;
- if (yych <= 0xBF)
- goto yy180;
- goto yy165;
- yy183:
- yych = *++p;
- if (yych <= 0x7F)
- goto yy165;
- if (yych <= 0xBF)
- goto yy180;
- goto yy165;
- yy184:
- yych = *++p;
- if (yych <= 0x7F)
- goto yy165;
- if (yych <= 0x8F)
- goto yy180;
- goto yy165;
- yy185:
- yych = *++p;
- if (yybm[0 + yych] & 8) {
- goto yy166;
- }
- if (yych == '/')
- goto yy169;
- if (yych == '>')
- goto yy170;
- goto yy165;
- yy186:
- yych = *++p;
- if (yych <= 0x7F)
- goto yy165;
- if (yych <= 0xBF)
- goto yy176;
- goto yy165;
- yy187:
- yych = *++p;
- if (yych <= 0x9F)
- goto yy165;
- if (yych <= 0xBF)
- goto yy186;
- goto yy165;
- yy188:
- yych = *++p;
- if (yych <= 0x7F)
- goto yy165;
- if (yych <= 0xBF)
- goto yy186;
- goto yy165;
- yy189:
- yych = *++p;
- if (yych <= 0x7F)
- goto yy165;
- if (yych <= 0x9F)
- goto yy186;
- goto yy165;
- yy190:
- yych = *++p;
- if (yych <= 0x8F)
- goto yy165;
- if (yych <= 0xBF)
- goto yy188;
- goto yy165;
- yy191:
- yych = *++p;
- if (yych <= 0x7F)
- goto yy165;
- if (yych <= 0xBF)
- goto yy188;
- goto yy165;
- yy192:
- yych = *++p;
- if (yych <= 0x7F)
- goto yy165;
- if (yych <= 0x8F)
- goto yy188;
- goto yy165;
- yy193:
- yych = *++p;
- if (yych <= 0x7F)
- goto yy165;
- if (yych <= 0xBF)
- goto yy177;
- goto yy165;
- yy194:
- yych = *++p;
- if (yych <= 0x9F)
- goto yy165;
- if (yych <= 0xBF)
- goto yy193;
- goto yy165;
- yy195:
- yych = *++p;
- if (yych <= 0x7F)
- goto yy165;
- if (yych <= 0xBF)
- goto yy193;
- goto yy165;
- yy196:
- yych = *++p;
- if (yych <= 0x7F)
- goto yy165;
- if (yych <= 0x9F)
- goto yy193;
- goto yy165;
- yy197:
- yych = *++p;
- if (yych <= 0x8F)
- goto yy165;
- if (yych <= 0xBF)
- goto yy195;
- goto yy165;
- yy198:
- yych = *++p;
- if (yych <= 0x7F)
- goto yy165;
- if (yych <= 0xBF)
- goto yy195;
- goto yy165;
- yy199:
- yych = *++p;
- if (yych <= 0x7F)
- goto yy165;
- if (yych <= 0x8F)
- goto yy195;
- goto yy165;
- }
-}
-
-// Try to (liberally) match an HTML tag after first <, returning num of chars
-// matched.
-bufsize_t _scan_liberal_html_tag(const unsigned char *p) {
- const unsigned char *marker = NULL;
- const unsigned char *start = p;
-
- {
- unsigned char yych;
- unsigned int yyaccept = 0;
- static const unsigned char yybm[] = {
- 0, 64, 64, 64, 64, 64, 64, 64, 64, 64, 0, 64, 64, 64, 64, 64, 64, 64,
- 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
- 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
- 64, 64, 64, 64, 64, 64, 64, 64, 128, 64, 64, 64, 64, 64, 64, 64, 64, 64,
- 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
- 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
- 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
- 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,
- };
- yych = *p;
- if (yych <= 0xE0) {
- if (yych <= '\n') {
- if (yych <= 0x00)
- goto yy201;
- if (yych <= '\t')
- goto yy203;
- } else {
- if (yych <= 0x7F)
- goto yy203;
- if (yych <= 0xC1)
- goto yy201;
- if (yych <= 0xDF)
- goto yy204;
- goto yy205;
- }
- } else {
- if (yych <= 0xEF) {
- if (yych == 0xED)
- goto yy207;
- goto yy206;
- } else {
- if (yych <= 0xF0)
- goto yy208;
- if (yych <= 0xF3)
- goto yy209;
- if (yych <= 0xF4)
- goto yy210;
- }
- }
- yy201:
- ++p;
- yy202 : { return 0; }
- yy203:
- yyaccept = 0;
- yych = *(marker = ++p);
- if (yych <= '\n') {
- if (yych <= 0x00)
- goto yy202;
- if (yych <= '\t')
- goto yy212;
- goto yy202;
- } else {
- if (yych <= 0x7F)
- goto yy212;
- if (yych <= 0xC1)
- goto yy202;
- if (yych <= 0xF4)
- goto yy212;
- goto yy202;
- }
- yy204:
- yyaccept = 0;
- yych = *(marker = ++p);
- if (yych <= 0x7F)
- goto yy202;
- if (yych <= 0xBF)
- goto yy211;
- goto yy202;
- yy205:
- yyaccept = 0;
- yych = *(marker = ++p);
- if (yych <= 0x9F)
- goto yy202;
- if (yych <= 0xBF)
- goto yy216;
- goto yy202;
- yy206:
- yyaccept = 0;
- yych = *(marker = ++p);
- if (yych <= 0x7F)
- goto yy202;
- if (yych <= 0xBF)
- goto yy216;
- goto yy202;
- yy207:
- yyaccept = 0;
- yych = *(marker = ++p);
- if (yych <= 0x7F)
- goto yy202;
- if (yych <= 0x9F)
- goto yy216;
- goto yy202;
- yy208:
- yyaccept = 0;
- yych = *(marker = ++p);
- if (yych <= 0x8F)
- goto yy202;
- if (yych <= 0xBF)
- goto yy218;
- goto yy202;
- yy209:
- yyaccept = 0;
- yych = *(marker = ++p);
- if (yych <= 0x7F)
- goto yy202;
- if (yych <= 0xBF)
- goto yy218;
- goto yy202;
- yy210:
- yyaccept = 0;
- yych = *(marker = ++p);
- if (yych <= 0x7F)
- goto yy202;
- if (yych <= 0x8F)
- goto yy218;
- goto yy202;
- yy211:
- yych = *++p;
- yy212:
- if (yybm[0 + yych] & 64) {
- goto yy211;
- }
- if (yych <= 0xEC) {
- if (yych <= 0xC1) {
- if (yych <= '\n')
- goto yy213;
- if (yych <= '>')
- goto yy214;
- } else {
- if (yych <= 0xDF)
- goto yy216;
- if (yych <= 0xE0)
- goto yy217;
- goto yy218;
- }
- } else {
- if (yych <= 0xF0) {
- if (yych <= 0xED)
- goto yy219;
- if (yych <= 0xEF)
- goto yy218;
- goto yy220;
- } else {
- if (yych <= 0xF3)
- goto yy221;
- if (yych <= 0xF4)
- goto yy222;
- }
- }
- yy213:
- p = marker;
- if (yyaccept == 0) {
- goto yy202;
- } else {
- goto yy215;
- }
- yy214:
- yyaccept = 1;
- yych = *(marker = ++p);
- if (yybm[0 + yych] & 64) {
- goto yy211;
- }
- if (yych <= 0xEC) {
- if (yych <= 0xC1) {
- if (yych <= '\n')
- goto yy215;
- if (yych <= '>')
- goto yy214;
- } else {
- if (yych <= 0xDF)
- goto yy216;
- if (yych <= 0xE0)
- goto yy217;
- goto yy218;
- }
- } else {
- if (yych <= 0xF0) {
- if (yych <= 0xED)
- goto yy219;
- if (yych <= 0xEF)
- goto yy218;
- goto yy220;
- } else {
- if (yych <= 0xF3)
- goto yy221;
- if (yych <= 0xF4)
- goto yy222;
- }
- }
- yy215 : { return (bufsize_t)(p - start); }
- yy216:
- yych = *++p;
- if (yych <= 0x7F)
- goto yy213;
- if (yych <= 0xBF)
- goto yy211;
- goto yy213;
- yy217:
- yych = *++p;
- if (yych <= 0x9F)
- goto yy213;
- if (yych <= 0xBF)
- goto yy216;
- goto yy213;
- yy218:
- yych = *++p;
- if (yych <= 0x7F)
- goto yy213;
- if (yych <= 0xBF)
- goto yy216;
- goto yy213;
- yy219:
- yych = *++p;
- if (yych <= 0x7F)
- goto yy213;
- if (yych <= 0x9F)
- goto yy216;
- goto yy213;
- yy220:
- yych = *++p;
- if (yych <= 0x8F)
- goto yy213;
- if (yych <= 0xBF)
- goto yy218;
- goto yy213;
- yy221:
- yych = *++p;
- if (yych <= 0x7F)
- goto yy213;
- if (yych <= 0xBF)
- goto yy218;
- goto yy213;
- yy222:
- yych = *++p;
- if (yych <= 0x7F)
- goto yy213;
- if (yych <= 0x8F)
- goto yy218;
- goto yy213;
- }
-}
-
-bufsize_t _scan_html_comment(const unsigned char *p) {
- const unsigned char *marker = NULL;
- const unsigned char *start = p;
-
- {
- unsigned char yych;
- static const unsigned char yybm[] = {
- 0, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 0, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,
- };
- yych = *p;
- if (yych == '-')
- goto yy225;
- ++p;
- yy224 : { return 0; }
- yy225:
- yych = *(marker = ++p);
- if (yych != '-')
- goto yy224;
- yy226:
- yych = *++p;
- if (yybm[0 + yych] & 128) {
- goto yy226;
- }
- if (yych <= 0xEC) {
- if (yych <= 0xC1) {
- if (yych <= 0x00)
- goto yy227;
- if (yych <= '-')
- goto yy228;
- } else {
- if (yych <= 0xDF)
- goto yy229;
- if (yych <= 0xE0)
- goto yy230;
- goto yy231;
- }
- } else {
- if (yych <= 0xF0) {
- if (yych <= 0xED)
- goto yy232;
- if (yych <= 0xEF)
- goto yy231;
- goto yy233;
- } else {
- if (yych <= 0xF3)
- goto yy234;
- if (yych <= 0xF4)
- goto yy235;
- }
- }
- yy227:
- p = marker;
- goto yy224;
- yy228:
- yych = *++p;
- if (yybm[0 + yych] & 128) {
- goto yy226;
- }
- if (yych <= 0xEC) {
- if (yych <= 0xC1) {
- if (yych <= 0x00)
- goto yy227;
- if (yych <= '-')
- goto yy236;
- goto yy227;
- } else {
- if (yych <= 0xDF)
- goto yy229;
- if (yych <= 0xE0)
- goto yy230;
- goto yy231;
- }
- } else {
- if (yych <= 0xF0) {
- if (yych <= 0xED)
- goto yy232;
- if (yych <= 0xEF)
- goto yy231;
- goto yy233;
- } else {
- if (yych <= 0xF3)
- goto yy234;
- if (yych <= 0xF4)
- goto yy235;
- goto yy227;
- }
- }
- yy229:
- yych = *++p;
- if (yych <= 0x7F)
- goto yy227;
- if (yych <= 0xBF)
- goto yy226;
- goto yy227;
- yy230:
- yych = *++p;
- if (yych <= 0x9F)
- goto yy227;
- if (yych <= 0xBF)
- goto yy229;
- goto yy227;
- yy231:
- yych = *++p;
- if (yych <= 0x7F)
- goto yy227;
- if (yych <= 0xBF)
- goto yy229;
- goto yy227;
- yy232:
- yych = *++p;
- if (yych <= 0x7F)
- goto yy227;
- if (yych <= 0x9F)
- goto yy229;
- goto yy227;
- yy233:
- yych = *++p;
- if (yych <= 0x8F)
- goto yy227;
- if (yych <= 0xBF)
- goto yy231;
- goto yy227;
- yy234:
- yych = *++p;
- if (yych <= 0x7F)
- goto yy227;
- if (yych <= 0xBF)
- goto yy231;
- goto yy227;
- yy235:
- yych = *++p;
- if (yych <= 0x7F)
- goto yy227;
- if (yych <= 0x8F)
- goto yy231;
- goto yy227;
- yy236:
- yych = *++p;
- if (yych <= 0xE0) {
- if (yych <= '>') {
- if (yych <= 0x00)
- goto yy227;
- if (yych <= '=')
- goto yy226;
- } else {
- if (yych <= 0x7F)
- goto yy226;
- if (yych <= 0xC1)
- goto yy227;
- if (yych <= 0xDF)
- goto yy229;
- goto yy230;
- }
- } else {
- if (yych <= 0xEF) {
- if (yych == 0xED)
- goto yy232;
- goto yy231;
- } else {
- if (yych <= 0xF0)
- goto yy233;
- if (yych <= 0xF3)
- goto yy234;
- if (yych <= 0xF4)
- goto yy235;
- goto yy227;
- }
- }
- ++p;
- { return (bufsize_t)(p - start); }
- }
-}
-
-bufsize_t _scan_html_pi(const unsigned char *p) {
- const unsigned char *marker = NULL;
- const unsigned char *start = p;
-
- {
- unsigned char yych;
- unsigned int yyaccept = 0;
- static const unsigned char yybm[] = {
- 0, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 0, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,
- };
- yych = *p;
- if (yybm[0 + yych] & 128) {
- goto yy240;
- }
- if (yych <= 0xEC) {
- if (yych <= 0xC1) {
- if (yych <= 0x00)
- goto yy238;
- if (yych <= '?')
- goto yy243;
- } else {
- if (yych <= 0xDF)
- goto yy244;
- if (yych <= 0xE0)
- goto yy245;
- goto yy246;
- }
- } else {
- if (yych <= 0xF0) {
- if (yych <= 0xED)
- goto yy247;
- if (yych <= 0xEF)
- goto yy246;
- goto yy248;
- } else {
- if (yych <= 0xF3)
- goto yy249;
- if (yych <= 0xF4)
- goto yy250;
- }
- }
- yy238:
- ++p;
- yy239 : { return 0; }
- yy240:
- yyaccept = 0;
- yych = *(marker = ++p);
- yy241:
- if (yybm[0 + yych] & 128) {
- goto yy240;
- }
- if (yych <= 0xEC) {
- if (yych <= 0xC1) {
- if (yych <= 0x00)
- goto yy242;
- if (yych <= '?')
- goto yy251;
- } else {
- if (yych <= 0xDF)
- goto yy253;
- if (yych <= 0xE0)
- goto yy254;
- goto yy255;
- }
- } else {
- if (yych <= 0xF0) {
- if (yych <= 0xED)
- goto yy256;
- if (yych <= 0xEF)
- goto yy255;
- goto yy257;
- } else {
- if (yych <= 0xF3)
- goto yy258;
- if (yych <= 0xF4)
- goto yy259;
- }
- }
- yy242 : { return (bufsize_t)(p - start); }
- yy243:
- yyaccept = 1;
- yych = *(marker = ++p);
- if (yych <= '?') {
- if (yych <= 0x00)
- goto yy239;
- if (yych <= '=')
- goto yy241;
- if (yych <= '>')
- goto yy239;
- goto yy240;
- } else {
- if (yych <= 0x7F)
- goto yy241;
- if (yych <= 0xC1)
- goto yy239;
- if (yych <= 0xF4)
- goto yy241;
- goto yy239;
- }
- yy244:
- yych = *++p;
- if (yych <= 0x7F)
- goto yy239;
- if (yych <= 0xBF)
- goto yy240;
- goto yy239;
- yy245:
- yyaccept = 1;
- yych = *(marker = ++p);
- if (yych <= 0x9F)
- goto yy239;
- if (yych <= 0xBF)
- goto yy253;
- goto yy239;
- yy246:
- yyaccept = 1;
- yych = *(marker = ++p);
- if (yych <= 0x7F)
- goto yy239;
- if (yych <= 0xBF)
- goto yy253;
- goto yy239;
- yy247:
- yyaccept = 1;
- yych = *(marker = ++p);
- if (yych <= 0x7F)
- goto yy239;
- if (yych <= 0x9F)
- goto yy253;
- goto yy239;
- yy248:
- yyaccept = 1;
- yych = *(marker = ++p);
- if (yych <= 0x8F)
- goto yy239;
- if (yych <= 0xBF)
- goto yy255;
- goto yy239;
- yy249:
- yyaccept = 1;
- yych = *(marker = ++p);
- if (yych <= 0x7F)
- goto yy239;
- if (yych <= 0xBF)
- goto yy255;
- goto yy239;
- yy250:
- yyaccept = 1;
- yych = *(marker = ++p);
- if (yych <= 0x7F)
- goto yy239;
- if (yych <= 0x8F)
- goto yy255;
- goto yy239;
- yy251:
- yych = *++p;
- if (yych <= 0xE0) {
- if (yych <= '>') {
- if (yych <= 0x00)
- goto yy252;
- if (yych <= '=')
- goto yy240;
- } else {
- if (yych <= 0x7F)
- goto yy240;
- if (yych <= 0xC1)
- goto yy252;
- if (yych <= 0xDF)
- goto yy253;
- goto yy254;
- }
- } else {
- if (yych <= 0xEF) {
- if (yych == 0xED)
- goto yy256;
- goto yy255;
- } else {
- if (yych <= 0xF0)
- goto yy257;
- if (yych <= 0xF3)
- goto yy258;
- if (yych <= 0xF4)
- goto yy259;
- }
- }
- yy252:
- p = marker;
- if (yyaccept == 0) {
- goto yy242;
- } else {
- goto yy239;
- }
- yy253:
- yych = *++p;
- if (yych <= 0x7F)
- goto yy252;
- if (yych <= 0xBF)
- goto yy240;
- goto yy252;
- yy254:
- yych = *++p;
- if (yych <= 0x9F)
- goto yy252;
- if (yych <= 0xBF)
- goto yy253;
- goto yy252;
- yy255:
- yych = *++p;
- if (yych <= 0x7F)
- goto yy252;
- if (yych <= 0xBF)
- goto yy253;
- goto yy252;
- yy256:
- yych = *++p;
- if (yych <= 0x7F)
- goto yy252;
- if (yych <= 0x9F)
- goto yy253;
- goto yy252;
- yy257:
- yych = *++p;
- if (yych <= 0x8F)
- goto yy252;
- if (yych <= 0xBF)
- goto yy255;
- goto yy252;
- yy258:
- yych = *++p;
- if (yych <= 0x7F)
- goto yy252;
- if (yych <= 0xBF)
- goto yy255;
- goto yy252;
- yy259:
- yych = *++p;
- if (yych <= 0x7F)
- goto yy252;
- if (yych <= 0x8F)
- goto yy255;
- goto yy252;
- }
-}
-
-bufsize_t _scan_html_declaration(const unsigned char *p) {
- const unsigned char *marker = NULL;
- const unsigned char *start = p;
-
- {
- unsigned char yych;
- unsigned int yyaccept = 0;
- static const unsigned char yybm[] = {
- 0, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
- 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
- 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
- 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
- 64, 64, 64, 64, 64, 64, 0, 64, 64, 192, 192, 192, 192, 192,
- 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192,
- 192, 192, 192, 192, 192, 192, 192, 64, 64, 64, 64, 64, 64, 64,
- 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
- 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
- 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,
- };
- yych = *p;
- if (yych <= '@')
- goto yy261;
- if (yych <= 'Z')
- goto yy263;
- yy261:
- ++p;
- yy262 : { return 0; }
- yy263:
- yyaccept = 0;
- yych = *(marker = ++p);
- if (yybm[0 + yych] & 128) {
- goto yy266;
- }
- if (yych <= 0x08)
- goto yy262;
- if (yych <= '\r')
- goto yy264;
- if (yych != ' ')
- goto yy262;
- yy264:
- yyaccept = 1;
- yych = *(marker = ++p);
- if (yybm[0 + yych] & 64) {
- goto yy264;
- }
- if (yych <= 0xED) {
- if (yych <= 0xDF) {
- if (yych >= 0xC2)
- goto yy268;
- } else {
- if (yych <= 0xE0)
- goto yy269;
- if (yych <= 0xEC)
- goto yy270;
- goto yy271;
- }
- } else {
- if (yych <= 0xF0) {
- if (yych <= 0xEF)
- goto yy270;
- goto yy272;
- } else {
- if (yych <= 0xF3)
- goto yy273;
- if (yych <= 0xF4)
- goto yy274;
- }
- }
- yy265 : { return (bufsize_t)(p - start); }
- yy266:
- yych = *++p;
- if (yybm[0 + yych] & 128) {
- goto yy266;
- }
- if (yych <= 0x08)
- goto yy267;
- if (yych <= '\r')
- goto yy264;
- if (yych == ' ')
- goto yy264;
- yy267:
- p = marker;
- if (yyaccept == 0) {
- goto yy262;
- } else {
- goto yy265;
- }
- yy268:
- yych = *++p;
- if (yych <= 0x7F)
- goto yy267;
- if (yych <= 0xBF)
- goto yy264;
- goto yy267;
- yy269:
- yych = *++p;
- if (yych <= 0x9F)
- goto yy267;
- if (yych <= 0xBF)
- goto yy268;
- goto yy267;
- yy270:
- yych = *++p;
- if (yych <= 0x7F)
- goto yy267;
- if (yych <= 0xBF)
- goto yy268;
- goto yy267;
- yy271:
- yych = *++p;
- if (yych <= 0x7F)
- goto yy267;
- if (yych <= 0x9F)
- goto yy268;
- goto yy267;
- yy272:
- yych = *++p;
- if (yych <= 0x8F)
- goto yy267;
- if (yych <= 0xBF)
- goto yy270;
- goto yy267;
- yy273:
- yych = *++p;
- if (yych <= 0x7F)
- goto yy267;
- if (yych <= 0xBF)
- goto yy270;
- goto yy267;
- yy274:
- yych = *++p;
- if (yych <= 0x7F)
- goto yy267;
- if (yych <= 0x8F)
- goto yy270;
- goto yy267;
- }
-}
-
-bufsize_t _scan_html_cdata(const unsigned char *p) {
- const unsigned char *marker = NULL;
- const unsigned char *start = p;
-
- {
- unsigned char yych;
- unsigned int yyaccept = 0;
- static const unsigned char yybm[] = {
- 0, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128, 128, 0, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,
- };
- yych = *p;
- if (yych == 'C')
- goto yy277;
- if (yych == 'c')
- goto yy277;
- ++p;
- yy276 : { return 0; }
- yy277:
- yyaccept = 0;
- yych = *(marker = ++p);
- if (yych == 'D')
- goto yy278;
- if (yych != 'd')
- goto yy276;
- yy278:
- yych = *++p;
- if (yych == 'A')
- goto yy280;
- if (yych == 'a')
- goto yy280;
- yy279:
- p = marker;
- if (yyaccept == 0) {
- goto yy276;
- } else {
- goto yy284;
- }
- yy280:
- yych = *++p;
- if (yych == 'T')
- goto yy281;
- if (yych != 't')
- goto yy279;
- yy281:
- yych = *++p;
- if (yych == 'A')
- goto yy282;
- if (yych != 'a')
- goto yy279;
- yy282:
- yych = *++p;
- if (yych != '[')
- goto yy279;
- yy283:
- yyaccept = 1;
- yych = *(marker = ++p);
- if (yybm[0 + yych] & 128) {
- goto yy283;
- }
- if (yych <= 0xEC) {
- if (yych <= 0xC1) {
- if (yych <= 0x00)
- goto yy284;
- if (yych <= ']')
- goto yy285;
- } else {
- if (yych <= 0xDF)
- goto yy286;
- if (yych <= 0xE0)
- goto yy287;
- goto yy288;
- }
- } else {
- if (yych <= 0xF0) {
- if (yych <= 0xED)
- goto yy289;
- if (yych <= 0xEF)
- goto yy288;
- goto yy290;
- } else {
- if (yych <= 0xF3)
- goto yy291;
- if (yych <= 0xF4)
- goto yy292;
- }
- }
- yy284 : { return (bufsize_t)(p - start); }
- yy285:
- yych = *++p;
- if (yybm[0 + yych] & 128) {
- goto yy283;
- }
- if (yych <= 0xEC) {
- if (yych <= 0xC1) {
- if (yych <= 0x00)
- goto yy279;
- if (yych <= ']')
- goto yy293;
- goto yy279;
- } else {
- if (yych <= 0xDF)
- goto yy286;
- if (yych <= 0xE0)
- goto yy287;
- goto yy288;
- }
- } else {
- if (yych <= 0xF0) {
- if (yych <= 0xED)
- goto yy289;
- if (yych <= 0xEF)
- goto yy288;
- goto yy290;
- } else {
- if (yych <= 0xF3)
- goto yy291;
- if (yych <= 0xF4)
- goto yy292;
- goto yy279;
- }
- }
- yy286:
- yych = *++p;
- if (yych <= 0x7F)
- goto yy279;
- if (yych <= 0xBF)
- goto yy283;
- goto yy279;
- yy287:
- yych = *++p;
- if (yych <= 0x9F)
- goto yy279;
- if (yych <= 0xBF)
- goto yy286;
- goto yy279;
- yy288:
- yych = *++p;
- if (yych <= 0x7F)
- goto yy279;
- if (yych <= 0xBF)
- goto yy286;
- goto yy279;
- yy289:
- yych = *++p;
- if (yych <= 0x7F)
- goto yy279;
- if (yych <= 0x9F)
- goto yy286;
- goto yy279;
- yy290:
- yych = *++p;
- if (yych <= 0x8F)
- goto yy279;
- if (yych <= 0xBF)
- goto yy288;
- goto yy279;
- yy291:
- yych = *++p;
- if (yych <= 0x7F)
- goto yy279;
- if (yych <= 0xBF)
- goto yy288;
- goto yy279;
- yy292:
- yych = *++p;
- if (yych <= 0x7F)
- goto yy279;
- if (yych <= 0x8F)
- goto yy288;
- goto yy279;
- yy293:
- yych = *++p;
- if (yych <= 0xE0) {
- if (yych <= '>') {
- if (yych <= 0x00)
- goto yy279;
- if (yych <= '=')
- goto yy283;
- goto yy279;
- } else {
- if (yych <= 0x7F)
- goto yy283;
- if (yych <= 0xC1)
- goto yy279;
- if (yych <= 0xDF)
- goto yy286;
- goto yy287;
- }
- } else {
- if (yych <= 0xEF) {
- if (yych == 0xED)
- goto yy289;
- goto yy288;
- } else {
- if (yych <= 0xF0)
- goto yy290;
- if (yych <= 0xF3)
- goto yy291;
- if (yych <= 0xF4)
- goto yy292;
- goto yy279;
- }
- }
- }
-}
-
-// Try to match an HTML block tag start line, returning
-// an integer code for the type of block (1-6, matching the spec).
-// #7 is handled by a separate function, below.
-bufsize_t _scan_html_block_start(const unsigned char *p) {
- const unsigned char *marker = NULL;
-
- {
- unsigned char yych;
- yych = *p;
- if (yych == '<')
- goto yy296;
- ++p;
- yy295 : { return 0; }
- yy296:
- yych = *(marker = ++p);
- switch (yych) {
- case '!':
- goto yy297;
- case '/':
- goto yy299;
- case '?':
- goto yy300;
- case 'A':
- case 'a':
- goto yy301;
- case 'B':
- case 'b':
- goto yy302;
- case 'C':
- case 'c':
- goto yy303;
- case 'D':
- case 'd':
- goto yy304;
- case 'F':
- case 'f':
- goto yy305;
- case 'H':
- case 'h':
- goto yy306;
- case 'I':
- case 'i':
- goto yy307;
- case 'L':
- case 'l':
- goto yy308;
- case 'M':
- case 'm':
- goto yy309;
- case 'N':
- case 'n':
- goto yy310;
- case 'O':
- case 'o':
- goto yy311;
- case 'P':
- case 'p':
- goto yy312;
- case 'S':
- case 's':
- goto yy313;
- case 'T':
- case 't':
- goto yy314;
- case 'U':
- case 'u':
- goto yy315;
- default:
- goto yy295;
- }
- yy297:
- yych = *++p;
- if (yych <= '@') {
- if (yych == '-')
- goto yy316;
- } else {
- if (yych <= 'Z')
- goto yy317;
- if (yych <= '[')
- goto yy318;
- }
- yy298:
- p = marker;
- goto yy295;
- yy299:
- yych = *++p;
- switch (yych) {
- case 'A':
- case 'a':
- goto yy301;
- case 'B':
- case 'b':
- goto yy302;
- case 'C':
- case 'c':
- goto yy303;
- case 'D':
- case 'd':
- goto yy304;
- case 'F':
- case 'f':
- goto yy305;
- case 'H':
- case 'h':
- goto yy306;
- case 'I':
- case 'i':
- goto yy307;
- case 'L':
- case 'l':
- goto yy308;
- case 'M':
- case 'm':
- goto yy309;
- case 'N':
- case 'n':
- goto yy310;
- case 'O':
- case 'o':
- goto yy311;
- case 'P':
- case 'p':
- goto yy319;
- case 'S':
- case 's':
- goto yy320;
- case 'T':
- case 't':
- goto yy321;
- case 'U':
- case 'u':
- goto yy315;
- default:
- goto yy298;
- }
- yy300:
- ++p;
- { return 3; }
- yy301:
- yych = *++p;
- if (yych <= 'S') {
- if (yych <= 'D') {
- if (yych <= 'C')
- goto yy298;
- goto yy322;
- } else {
- if (yych <= 'Q')
- goto yy298;
- if (yych <= 'R')
- goto yy323;
- goto yy324;
- }
- } else {
- if (yych <= 'q') {
- if (yych == 'd')
- goto yy322;
- goto yy298;
- } else {
- if (yych <= 'r')
- goto yy323;
- if (yych <= 's')
- goto yy324;
- goto yy298;
- }
- }
- yy302:
- yych = *++p;
- if (yych <= 'O') {
- if (yych <= 'K') {
- if (yych == 'A')
- goto yy325;
- goto yy298;
- } else {
- if (yych <= 'L')
- goto yy326;
- if (yych <= 'N')
- goto yy298;
- goto yy327;
- }
- } else {
- if (yych <= 'k') {
- if (yych == 'a')
- goto yy325;
- goto yy298;
- } else {
- if (yych <= 'l')
- goto yy326;
- if (yych == 'o')
- goto yy327;
- goto yy298;
- }
- }
- yy303:
- yych = *++p;
- if (yych <= 'O') {
- if (yych <= 'D') {
- if (yych == 'A')
- goto yy328;
- goto yy298;
- } else {
- if (yych <= 'E')
- goto yy329;
- if (yych <= 'N')
- goto yy298;
- goto yy330;
- }
- } else {
- if (yych <= 'd') {
- if (yych == 'a')
- goto yy328;
- goto yy298;
- } else {
- if (yych <= 'e')
- goto yy329;
- if (yych == 'o')
- goto yy330;
- goto yy298;
- }
- }
- yy304:
- yych = *++p;
- switch (yych) {
- case 'D':
- case 'L':
- case 'T':
- case 'd':
- case 'l':
- case 't':
- goto yy331;
- case 'E':
- case 'e':
- goto yy332;
- case 'I':
- case 'i':
- goto yy333;
- default:
- goto yy298;
- }
- yy305:
- yych = *++p;
- if (yych <= 'R') {
- if (yych <= 'N') {
- if (yych == 'I')
- goto yy334;
- goto yy298;
- } else {
- if (yych <= 'O')
- goto yy335;
- if (yych <= 'Q')
- goto yy298;
- goto yy336;
- }
- } else {
- if (yych <= 'n') {
- if (yych == 'i')
- goto yy334;
- goto yy298;
- } else {
- if (yych <= 'o')
- goto yy335;
- if (yych == 'r')
- goto yy336;
- goto yy298;
- }
- }
- yy306:
- yych = *++p;
- if (yych <= 'S') {
- if (yych <= 'D') {
- if (yych <= '0')
- goto yy298;
- if (yych <= '6')
- goto yy331;
- goto yy298;
- } else {
- if (yych <= 'E')
- goto yy337;
- if (yych == 'R')
- goto yy331;
- goto yy298;
- }
- } else {
- if (yych <= 'q') {
- if (yych <= 'T')
- goto yy338;
- if (yych == 'e')
- goto yy337;
- goto yy298;
- } else {
- if (yych <= 'r')
- goto yy331;
- if (yych == 't')
- goto yy338;
- goto yy298;
- }
- }
- yy307:
- yych = *++p;
- if (yych == 'F')
- goto yy339;
- if (yych == 'f')
- goto yy339;
- goto yy298;
- yy308:
- yych = *++p;
- if (yych <= 'I') {
- if (yych == 'E')
- goto yy340;
- if (yych <= 'H')
- goto yy298;
- goto yy341;
- } else {
- if (yych <= 'e') {
- if (yych <= 'd')
- goto yy298;
- goto yy340;
- } else {
- if (yych == 'i')
- goto yy341;
- goto yy298;
- }
- }
- yy309:
- yych = *++p;
- if (yych <= 'E') {
- if (yych == 'A')
- goto yy342;
- if (yych <= 'D')
- goto yy298;
- goto yy343;
- } else {
- if (yych <= 'a') {
- if (yych <= '`')
- goto yy298;
- goto yy342;
- } else {
- if (yych == 'e')
- goto yy343;
- goto yy298;
- }
- }
- yy310:
- yych = *++p;
- if (yych <= 'O') {
- if (yych == 'A')
- goto yy344;
- if (yych <= 'N')
- goto yy298;
- goto yy345;
- } else {
- if (yych <= 'a') {
- if (yych <= '`')
- goto yy298;
- goto yy344;
- } else {
- if (yych == 'o')
- goto yy345;
- goto yy298;
- }
- }
- yy311:
- yych = *++p;
- if (yych <= 'P') {
- if (yych == 'L')
- goto yy331;
- if (yych <= 'O')
- goto yy298;
- goto yy346;
- } else {
- if (yych <= 'l') {
- if (yych <= 'k')
- goto yy298;
- goto yy331;
- } else {
- if (yych == 'p')
- goto yy346;
- goto yy298;
- }
- }
- yy312:
- yych = *++p;
- if (yych <= '>') {
- if (yych <= ' ') {
- if (yych <= 0x08)
- goto yy298;
- if (yych <= '\r')
- goto yy347;
- if (yych <= 0x1F)
- goto yy298;
- goto yy347;
- } else {
- if (yych == '/')
- goto yy348;
- if (yych <= '=')
- goto yy298;
- goto yy347;
- }
- } else {
- if (yych <= 'R') {
- if (yych == 'A')
- goto yy349;
- if (yych <= 'Q')
- goto yy298;
- goto yy350;
- } else {
- if (yych <= 'a') {
- if (yych <= '`')
- goto yy298;
- goto yy349;
- } else {
- if (yych == 'r')
- goto yy350;
- goto yy298;
- }
- }
- }
- yy313:
- yych = *++p;
- switch (yych) {
- case 'C':
- case 'c':
- goto yy351;
- case 'E':
- case 'e':
- goto yy352;
- case 'O':
- case 'o':
- goto yy353;
- case 'T':
- case 't':
- goto yy354;
- case 'U':
- case 'u':
- goto yy355;
- default:
- goto yy298;
- }
- yy314:
- yych = *++p;
- switch (yych) {
- case 'A':
- case 'a':
- goto yy356;
- case 'B':
- case 'b':
- goto yy357;
- case 'D':
- case 'd':
- goto yy331;
- case 'E':
- case 'e':
- goto yy358;
- case 'F':
- case 'f':
- goto yy359;
- case 'H':
- case 'h':
- goto yy360;
- case 'I':
- case 'i':
- goto yy361;
- case 'R':
- case 'r':
- goto yy362;
- default:
- goto yy298;
- }
- yy315:
- yych = *++p;
- if (yych == 'L')
- goto yy331;
- if (yych == 'l')
- goto yy331;
- goto yy298;
- yy316:
- yych = *++p;
- if (yych == '-')
- goto yy363;
- goto yy298;
- yy317:
- ++p;
- { return 4; }
- yy318:
- yych = *++p;
- if (yych == 'C')
- goto yy364;
- if (yych == 'c')
- goto yy364;
- goto yy298;
- yy319:
- yych = *++p;
- if (yych <= '/') {
- if (yych <= 0x1F) {
- if (yych <= 0x08)
- goto yy298;
- if (yych <= '\r')
- goto yy347;
- goto yy298;
- } else {
- if (yych <= ' ')
- goto yy347;
- if (yych <= '.')
- goto yy298;
- goto yy348;
- }
- } else {
- if (yych <= '@') {
- if (yych == '>')
- goto yy347;
- goto yy298;
- } else {
- if (yych <= 'A')
- goto yy349;
- if (yych == 'a')
- goto yy349;
- goto yy298;
- }
- }
- yy320:
- yych = *++p;
- if (yych <= 'U') {
- if (yych <= 'N') {
- if (yych == 'E')
- goto yy352;
- goto yy298;
- } else {
- if (yych <= 'O')
- goto yy353;
- if (yych <= 'T')
- goto yy298;
- goto yy355;
- }
- } else {
- if (yych <= 'n') {
- if (yych == 'e')
- goto yy352;
- goto yy298;
- } else {
- if (yych <= 'o')
- goto yy353;
- if (yych == 'u')
- goto yy355;
- goto yy298;
- }
- }
- yy321:
- yych = *++p;
- switch (yych) {
- case 'A':
- case 'a':
- goto yy356;
- case 'B':
- case 'b':
- goto yy357;
- case 'D':
- case 'd':
- goto yy331;
- case 'F':
- case 'f':
- goto yy359;
- case 'H':
- case 'h':
- goto yy360;
- case 'I':
- case 'i':
- goto yy361;
- case 'R':
- case 'r':
- goto yy362;
- default:
- goto yy298;
- }
- yy322:
- yych = *++p;
- if (yych == 'D')
- goto yy365;
- if (yych == 'd')
- goto yy365;
- goto yy298;
- yy323:
- yych = *++p;
- if (yych == 'T')
- goto yy366;
- if (yych == 't')
- goto yy366;
- goto yy298;
- yy324:
- yych = *++p;
- if (yych == 'I')
- goto yy367;
- if (yych == 'i')
- goto yy367;
- goto yy298;
- yy325:
- yych = *++p;
- if (yych == 'S')
- goto yy368;
- if (yych == 's')
- goto yy368;
- goto yy298;
- yy326:
- yych = *++p;
- if (yych == 'O')
- goto yy369;
- if (yych == 'o')
- goto yy369;
- goto yy298;
- yy327:
- yych = *++p;
- if (yych == 'D')
- goto yy370;
- if (yych == 'd')
- goto yy370;
- goto yy298;
- yy328:
- yych = *++p;
- if (yych == 'P')
- goto yy371;
- if (yych == 'p')
- goto yy371;
- goto yy298;
- yy329:
- yych = *++p;
- if (yych == 'N')
- goto yy372;
- if (yych == 'n')
- goto yy372;
- goto yy298;
- yy330:
- yych = *++p;
- if (yych == 'L')
- goto yy373;
- if (yych == 'l')
- goto yy373;
- goto yy298;
- yy331:
- yych = *++p;
- if (yych <= ' ') {
- if (yych <= 0x08)
- goto yy298;
- if (yych <= '\r')
- goto yy347;
- if (yych <= 0x1F)
- goto yy298;
- goto yy347;
- } else {
- if (yych <= '/') {
- if (yych <= '.')
- goto yy298;
- goto yy348;
- } else {
- if (yych == '>')
- goto yy347;
- goto yy298;
- }
- }
- yy332:
- yych = *++p;
- if (yych == 'T')
- goto yy374;
- if (yych == 't')
- goto yy374;
- goto yy298;
- yy333:
- yych = *++p;
- if (yych <= 'V') {
- if (yych <= 'Q') {
- if (yych == 'A')
- goto yy375;
- goto yy298;
- } else {
- if (yych <= 'R')
- goto yy331;
- if (yych <= 'U')
- goto yy298;
- goto yy331;
- }
- } else {
- if (yych <= 'q') {
- if (yych == 'a')
- goto yy375;
- goto yy298;
- } else {
- if (yych <= 'r')
- goto yy331;
- if (yych == 'v')
- goto yy331;
- goto yy298;
- }
- }
- yy334:
- yych = *++p;
- if (yych <= 'G') {
- if (yych == 'E')
- goto yy376;
- if (yych <= 'F')
- goto yy298;
- goto yy377;
- } else {
- if (yych <= 'e') {
- if (yych <= 'd')
- goto yy298;
- goto yy376;
- } else {
- if (yych == 'g')
- goto yy377;
- goto yy298;
- }
- }
- yy335:
- yych = *++p;
- if (yych <= 'R') {
- if (yych == 'O')
- goto yy372;
- if (yych <= 'Q')
- goto yy298;
- goto yy378;
- } else {
- if (yych <= 'o') {
- if (yych <= 'n')
- goto yy298;
- goto yy372;
- } else {
- if (yych == 'r')
- goto yy378;
- goto yy298;
- }
- }
- yy336:
- yych = *++p;
- if (yych == 'A')
- goto yy379;
- if (yych == 'a')
- goto yy379;
- goto yy298;
- yy337:
- yych = *++p;
- if (yych == 'A')
- goto yy380;
- if (yych == 'a')
- goto yy380;
- goto yy298;
- yy338:
- yych = *++p;
- if (yych == 'M')
- goto yy315;
- if (yych == 'm')
- goto yy315;
- goto yy298;
- yy339:
- yych = *++p;
- if (yych == 'R')
- goto yy381;
- if (yych == 'r')
- goto yy381;
- goto yy298;
- yy340:
- yych = *++p;
- if (yych == 'G')
- goto yy382;
- if (yych == 'g')
- goto yy382;
- goto yy298;
- yy341:
- yych = *++p;
- if (yych <= '/') {
- if (yych <= 0x1F) {
- if (yych <= 0x08)
- goto yy298;
- if (yych <= '\r')
- goto yy347;
- goto yy298;
- } else {
- if (yych <= ' ')
- goto yy347;
- if (yych <= '.')
- goto yy298;
- goto yy348;
- }
- } else {
- if (yych <= 'M') {
- if (yych == '>')
- goto yy347;
- goto yy298;
- } else {
- if (yych <= 'N')
- goto yy383;
- if (yych == 'n')
- goto yy383;
- goto yy298;
- }
- }
- yy342:
- yych = *++p;
- if (yych == 'I')
- goto yy384;
- if (yych == 'i')
- goto yy384;
- goto yy298;
- yy343:
- yych = *++p;
- if (yych == 'N')
- goto yy385;
- if (yych == 'n')
- goto yy385;
- goto yy298;
- yy344:
- yych = *++p;
- if (yych == 'V')
- goto yy331;
- if (yych == 'v')
- goto yy331;
- goto yy298;
- yy345:
- yych = *++p;
- if (yych == 'F')
- goto yy386;
- if (yych == 'f')
- goto yy386;
- goto yy298;
- yy346:
- yych = *++p;
- if (yych == 'T')
- goto yy387;
- if (yych == 't')
- goto yy387;
- goto yy298;
- yy347:
- ++p;
- { return 6; }
- yy348:
- yych = *++p;
- if (yych == '>')
- goto yy347;
- goto yy298;
- yy349:
- yych = *++p;
- if (yych == 'R')
- goto yy388;
- if (yych == 'r')
- goto yy388;
- goto yy298;
- yy350:
- yych = *++p;
- if (yych == 'E')
- goto yy389;
- if (yych == 'e')
- goto yy389;
- goto yy298;
- yy351:
- yych = *++p;
- if (yych == 'R')
- goto yy390;
- if (yych == 'r')
- goto yy390;
- goto yy298;
- yy352:
- yych = *++p;
- if (yych == 'C')
- goto yy371;
- if (yych == 'c')
- goto yy371;
- goto yy298;
- yy353:
- yych = *++p;
- if (yych == 'U')
- goto yy391;
- if (yych == 'u')
- goto yy391;
- goto yy298;
- yy354:
- yych = *++p;
- if (yych == 'Y')
- goto yy392;
- if (yych == 'y')
- goto yy392;
- goto yy298;
- yy355:
- yych = *++p;
- if (yych == 'M')
- goto yy393;
- if (yych == 'm')
- goto yy393;
- goto yy298;
- yy356:
- yych = *++p;
- if (yych == 'B')
- goto yy394;
- if (yych == 'b')
- goto yy394;
- goto yy298;
- yy357:
- yych = *++p;
- if (yych == 'O')
- goto yy327;
- if (yych == 'o')
- goto yy327;
- goto yy298;
- yy358:
- yych = *++p;
- if (yych == 'X')
- goto yy395;
- if (yych == 'x')
- goto yy395;
- goto yy298;
- yy359:
- yych = *++p;
- if (yych == 'O')
- goto yy396;
- if (yych == 'o')
- goto yy396;
- goto yy298;
- yy360:
- yych = *++p;
- if (yych <= '/') {
- if (yych <= 0x1F) {
- if (yych <= 0x08)
- goto yy298;
- if (yych <= '\r')
- goto yy347;
- goto yy298;
- } else {
- if (yych <= ' ')
- goto yy347;
- if (yych <= '.')
- goto yy298;
- goto yy348;
- }
- } else {
- if (yych <= 'D') {
- if (yych == '>')
- goto yy347;
- goto yy298;
- } else {
- if (yych <= 'E')
- goto yy397;
- if (yych == 'e')
- goto yy397;
- goto yy298;
- }
- }
- yy361:
- yych = *++p;
- if (yych == 'T')
- goto yy394;
- if (yych == 't')
- goto yy394;
- goto yy298;
- yy362:
- yych = *++p;
- if (yych <= '/') {
- if (yych <= 0x1F) {
- if (yych <= 0x08)
- goto yy298;
- if (yych <= '\r')
- goto yy347;
- goto yy298;
- } else {
- if (yych <= ' ')
- goto yy347;
- if (yych <= '.')
- goto yy298;
- goto yy348;
- }
- } else {
- if (yych <= '@') {
- if (yych == '>')
- goto yy347;
- goto yy298;
- } else {
- if (yych <= 'A')
- goto yy398;
- if (yych == 'a')
- goto yy398;
- goto yy298;
- }
- }
- yy363:
- ++p;
- { return 2; }
- yy364:
- yych = *++p;
- if (yych == 'D')
- goto yy399;
- if (yych == 'd')
- goto yy399;
- goto yy298;
- yy365:
- yych = *++p;
- if (yych == 'R')
- goto yy400;
- if (yych == 'r')
- goto yy400;
- goto yy298;
- yy366:
- yych = *++p;
- if (yych == 'I')
- goto yy401;
- if (yych == 'i')
- goto yy401;
- goto yy298;
- yy367:
- yych = *++p;
- if (yych == 'D')
- goto yy402;
- if (yych == 'd')
- goto yy402;
- goto yy298;
- yy368:
- yych = *++p;
- if (yych == 'E')
- goto yy403;
- if (yych == 'e')
- goto yy403;
- goto yy298;
- yy369:
- yych = *++p;
- if (yych == 'C')
- goto yy404;
- if (yych == 'c')
- goto yy404;
- goto yy298;
- yy370:
- yych = *++p;
- if (yych == 'Y')
- goto yy331;
- if (yych == 'y')
- goto yy331;
- goto yy298;
- yy371:
- yych = *++p;
- if (yych == 'T')
- goto yy405;
- if (yych == 't')
- goto yy405;
- goto yy298;
- yy372:
- yych = *++p;
- if (yych == 'T')
- goto yy406;
- if (yych == 't')
- goto yy406;
- goto yy298;
- yy373:
- yych = *++p;
- if (yych <= '/') {
- if (yych <= 0x1F) {
- if (yych <= 0x08)
- goto yy298;
- if (yych <= '\r')
- goto yy347;
- goto yy298;
- } else {
- if (yych <= ' ')
- goto yy347;
- if (yych <= '.')
- goto yy298;
- goto yy348;
- }
- } else {
- if (yych <= 'F') {
- if (yych == '>')
- goto yy347;
- goto yy298;
- } else {
- if (yych <= 'G')
- goto yy407;
- if (yych == 'g')
- goto yy407;
- goto yy298;
- }
- }
- yy374:
- yych = *++p;
- if (yych == 'A')
- goto yy408;
- if (yych == 'a')
- goto yy408;
- goto yy298;
- yy375:
- yych = *++p;
- if (yych == 'L')
- goto yy409;
- if (yych == 'l')
- goto yy409;
- goto yy298;
- yy376:
- yych = *++p;
- if (yych == 'L')
- goto yy410;
- if (yych == 'l')
- goto yy410;
- goto yy298;
- yy377:
- yych = *++p;
- if (yych <= 'U') {
- if (yych == 'C')
- goto yy411;
- if (yych <= 'T')
- goto yy298;
- goto yy412;
- } else {
- if (yych <= 'c') {
- if (yych <= 'b')
- goto yy298;
- goto yy411;
- } else {
- if (yych == 'u')
- goto yy412;
- goto yy298;
- }
- }
- yy378:
- yych = *++p;
- if (yych == 'M')
- goto yy331;
- if (yych == 'm')
- goto yy331;
- goto yy298;
- yy379:
- yych = *++p;
- if (yych == 'M')
- goto yy413;
- if (yych == 'm')
- goto yy413;
- goto yy298;
- yy380:
- yych = *++p;
- if (yych == 'D')
- goto yy414;
- if (yych == 'd')
- goto yy414;
- goto yy298;
- yy381:
- yych = *++p;
- if (yych == 'A')
- goto yy415;
- if (yych == 'a')
- goto yy415;
- goto yy298;
- yy382:
- yych = *++p;
- if (yych == 'E')
- goto yy416;
- if (yych == 'e')
- goto yy416;
- goto yy298;
- yy383:
- yych = *++p;
- if (yych == 'K')
- goto yy331;
- if (yych == 'k')
- goto yy331;
- goto yy298;
- yy384:
- yych = *++p;
- if (yych == 'N')
- goto yy331;
- if (yych == 'n')
- goto yy331;
- goto yy298;
- yy385:
- yych = *++p;
- if (yych == 'U')
- goto yy417;
- if (yych == 'u')
- goto yy417;
- goto yy298;
- yy386:
- yych = *++p;
- if (yych == 'R')
- goto yy418;
- if (yych == 'r')
- goto yy418;
- goto yy298;
- yy387:
- yych = *++p;
- if (yych <= 'I') {
- if (yych == 'G')
- goto yy407;
- if (yych <= 'H')
- goto yy298;
- goto yy419;
- } else {
- if (yych <= 'g') {
- if (yych <= 'f')
- goto yy298;
- goto yy407;
- } else {
- if (yych == 'i')
- goto yy419;
- goto yy298;
- }
- }
- yy388:
- yych = *++p;
- if (yych == 'A')
- goto yy378;
- if (yych == 'a')
- goto yy378;
- goto yy298;
- yy389:
- yych = *++p;
- if (yych <= 0x1F) {
- if (yych <= 0x08)
- goto yy298;
- if (yych <= '\r')
- goto yy420;
- goto yy298;
- } else {
- if (yych <= ' ')
- goto yy420;
- if (yych == '>')
- goto yy420;
- goto yy298;
- }
- yy390:
- yych = *++p;
- if (yych == 'I')
- goto yy421;
- if (yych == 'i')
- goto yy421;
- goto yy298;
- yy391:
- yych = *++p;
- if (yych == 'R')
- goto yy422;
- if (yych == 'r')
- goto yy422;
- goto yy298;
- yy392:
- yych = *++p;
- if (yych == 'L')
- goto yy350;
- if (yych == 'l')
- goto yy350;
- goto yy298;
- yy393:
- yych = *++p;
- if (yych == 'M')
- goto yy423;
- if (yych == 'm')
- goto yy423;
- goto yy298;
- yy394:
- yych = *++p;
- if (yych == 'L')
- goto yy402;
- if (yych == 'l')
- goto yy402;
- goto yy298;
- yy395:
- yych = *++p;
- if (yych == 'T')
- goto yy424;
- if (yych == 't')
- goto yy424;
- goto yy298;
- yy396:
- yych = *++p;
- if (yych == 'O')
- goto yy425;
- if (yych == 'o')
- goto yy425;
- goto yy298;
- yy397:
- yych = *++p;
- if (yych == 'A')
- goto yy426;
- if (yych == 'a')
- goto yy426;
- goto yy298;
- yy398:
- yych = *++p;
- if (yych == 'C')
- goto yy383;
- if (yych == 'c')
- goto yy383;
- goto yy298;
- yy399:
- yych = *++p;
- if (yych == 'A')
- goto yy427;
- if (yych == 'a')
- goto yy427;
- goto yy298;
- yy400:
- yych = *++p;
- if (yych == 'E')
- goto yy428;
- if (yych == 'e')
- goto yy428;
- goto yy298;
- yy401:
- yych = *++p;
- if (yych == 'C')
- goto yy394;
- if (yych == 'c')
- goto yy394;
- goto yy298;
- yy402:
- yych = *++p;
- if (yych == 'E')
- goto yy331;
- if (yych == 'e')
- goto yy331;
- goto yy298;
- yy403:
- yych = *++p;
- if (yych <= '/') {
- if (yych <= 0x1F) {
- if (yych <= 0x08)
- goto yy298;
- if (yych <= '\r')
- goto yy347;
- goto yy298;
- } else {
- if (yych <= ' ')
- goto yy347;
- if (yych <= '.')
- goto yy298;
- goto yy348;
- }
- } else {
- if (yych <= 'E') {
- if (yych == '>')
- goto yy347;
- goto yy298;
- } else {
- if (yych <= 'F')
- goto yy429;
- if (yych == 'f')
- goto yy429;
- goto yy298;
- }
- }
- yy404:
- yych = *++p;
- if (yych == 'K')
- goto yy430;
- if (yych == 'k')
- goto yy430;
- goto yy298;
- yy405:
- yych = *++p;
- if (yych == 'I')
- goto yy419;
- if (yych == 'i')
- goto yy419;
- goto yy298;
- yy406:
- yych = *++p;
- if (yych == 'E')
- goto yy431;
- if (yych == 'e')
- goto yy431;
- goto yy298;
- yy407:
- yych = *++p;
- if (yych == 'R')
- goto yy432;
- if (yych == 'r')
- goto yy432;
- goto yy298;
- yy408:
- yych = *++p;
- if (yych == 'I')
- goto yy433;
- if (yych == 'i')
- goto yy433;
- goto yy298;
- yy409:
- yych = *++p;
- if (yych == 'O')
- goto yy434;
- if (yych == 'o')
- goto yy434;
- goto yy298;
- yy410:
- yych = *++p;
- if (yych == 'D')
- goto yy435;
- if (yych == 'd')
- goto yy435;
- goto yy298;
- yy411:
- yych = *++p;
- if (yych == 'A')
- goto yy328;
- if (yych == 'a')
- goto yy328;
- goto yy298;
- yy412:
- yych = *++p;
- if (yych == 'R')
- goto yy402;
- if (yych == 'r')
- goto yy402;
- goto yy298;
- yy413:
- yych = *++p;
- if (yych == 'E')
- goto yy436;
- if (yych == 'e')
- goto yy436;
- goto yy298;
- yy414:
- yych = *++p;
- if (yych <= '/') {
- if (yych <= 0x1F) {
- if (yych <= 0x08)
- goto yy298;
- if (yych <= '\r')
- goto yy347;
- goto yy298;
- } else {
- if (yych <= ' ')
- goto yy347;
- if (yych <= '.')
- goto yy298;
- goto yy348;
- }
- } else {
- if (yych <= 'D') {
- if (yych == '>')
- goto yy347;
- goto yy298;
- } else {
- if (yych <= 'E')
- goto yy431;
- if (yych == 'e')
- goto yy431;
- goto yy298;
- }
- }
- yy415:
- yych = *++p;
- if (yych == 'M')
- goto yy402;
- if (yych == 'm')
- goto yy402;
- goto yy298;
- yy416:
- yych = *++p;
- if (yych == 'N')
- goto yy426;
- if (yych == 'n')
- goto yy426;
- goto yy298;
- yy417:
- yych = *++p;
- if (yych <= '/') {
- if (yych <= 0x1F) {
- if (yych <= 0x08)
- goto yy298;
- if (yych <= '\r')
- goto yy347;
- goto yy298;
- } else {
- if (yych <= ' ')
- goto yy347;
- if (yych <= '.')
- goto yy298;
- goto yy348;
- }
- } else {
- if (yych <= 'H') {
- if (yych == '>')
- goto yy347;
- goto yy298;
- } else {
- if (yych <= 'I')
- goto yy437;
- if (yych == 'i')
- goto yy437;
- goto yy298;
- }
- }
- yy418:
- yych = *++p;
- if (yych == 'A')
- goto yy438;
- if (yych == 'a')
- goto yy438;
- goto yy298;
- yy419:
- yych = *++p;
- if (yych == 'O')
- goto yy384;
- if (yych == 'o')
- goto yy384;
- goto yy298;
- yy420:
- ++p;
- { return 1; }
- yy421:
- yych = *++p;
- if (yych == 'P')
- goto yy439;
- if (yych == 'p')
- goto yy439;
- goto yy298;
- yy422:
- yych = *++p;
- if (yych == 'C')
- goto yy402;
- if (yych == 'c')
- goto yy402;
- goto yy298;
- yy423:
- yych = *++p;
- if (yych == 'A')
- goto yy440;
- if (yych == 'a')
- goto yy440;
- goto yy298;
- yy424:
- yych = *++p;
- if (yych == 'A')
- goto yy441;
- if (yych == 'a')
- goto yy441;
- goto yy298;
- yy425:
- yych = *++p;
- if (yych == 'T')
- goto yy331;
- if (yych == 't')
- goto yy331;
- goto yy298;
- yy426:
- yych = *++p;
- if (yych == 'D')
- goto yy331;
- if (yych == 'd')
- goto yy331;
- goto yy298;
- yy427:
- yych = *++p;
- if (yych == 'T')
- goto yy442;
- if (yych == 't')
- goto yy442;
- goto yy298;
- yy428:
- yych = *++p;
- if (yych == 'S')
- goto yy443;
- if (yych == 's')
- goto yy443;
- goto yy298;
- yy429:
- yych = *++p;
- if (yych == 'O')
- goto yy444;
- if (yych == 'o')
- goto yy444;
- goto yy298;
- yy430:
- yych = *++p;
- if (yych == 'Q')
- goto yy445;
- if (yych == 'q')
- goto yy445;
- goto yy298;
- yy431:
- yych = *++p;
- if (yych == 'R')
- goto yy331;
- if (yych == 'r')
- goto yy331;
- goto yy298;
- yy432:
- yych = *++p;
- if (yych == 'O')
- goto yy446;
- if (yych == 'o')
- goto yy446;
- goto yy298;
- yy433:
- yych = *++p;
- if (yych == 'L')
- goto yy443;
- if (yych == 'l')
- goto yy443;
- goto yy298;
- yy434:
- yych = *++p;
- if (yych == 'G')
- goto yy331;
- if (yych == 'g')
- goto yy331;
- goto yy298;
- yy435:
- yych = *++p;
- if (yych == 'S')
- goto yy447;
- if (yych == 's')
- goto yy447;
- goto yy298;
- yy436:
- yych = *++p;
- if (yych <= '/') {
- if (yych <= 0x1F) {
- if (yych <= 0x08)
- goto yy298;
- if (yych <= '\r')
- goto yy347;
- goto yy298;
- } else {
- if (yych <= ' ')
- goto yy347;
- if (yych <= '.')
- goto yy298;
- goto yy348;
- }
- } else {
- if (yych <= 'R') {
- if (yych == '>')
- goto yy347;
- goto yy298;
- } else {
- if (yych <= 'S')
- goto yy447;
- if (yych == 's')
- goto yy447;
- goto yy298;
- }
- }
- yy437:
- yych = *++p;
- if (yych == 'T')
- goto yy448;
- if (yych == 't')
- goto yy448;
- goto yy298;
- yy438:
- yych = *++p;
- if (yych == 'M')
- goto yy449;
- if (yych == 'm')
- goto yy449;
- goto yy298;
- yy439:
- yych = *++p;
- if (yych == 'T')
- goto yy389;
- if (yych == 't')
- goto yy389;
- goto yy298;
- yy440:
- yych = *++p;
- if (yych == 'R')
- goto yy370;
- if (yych == 'r')
- goto yy370;
- goto yy298;
- yy441:
- yych = *++p;
- if (yych == 'R')
- goto yy450;
- if (yych == 'r')
- goto yy450;
- goto yy298;
- yy442:
- yych = *++p;
- if (yych == 'A')
- goto yy451;
- if (yych == 'a')
- goto yy451;
- goto yy298;
- yy443:
- yych = *++p;
- if (yych == 'S')
- goto yy331;
- if (yych == 's')
- goto yy331;
- goto yy298;
- yy444:
- yych = *++p;
- if (yych == 'N')
- goto yy425;
- if (yych == 'n')
- goto yy425;
- goto yy298;
- yy445:
- yych = *++p;
- if (yych == 'U')
- goto yy452;
- if (yych == 'u')
- goto yy452;
- goto yy298;
- yy446:
- yych = *++p;
- if (yych == 'U')
- goto yy453;
- if (yych == 'u')
- goto yy453;
- goto yy298;
- yy447:
- yych = *++p;
- if (yych == 'E')
- goto yy425;
- if (yych == 'e')
- goto yy425;
- goto yy298;
- yy448:
- yych = *++p;
- if (yych == 'E')
- goto yy378;
- if (yych == 'e')
- goto yy378;
- goto yy298;
- yy449:
- yych = *++p;
- if (yych == 'E')
- goto yy443;
- if (yych == 'e')
- goto yy443;
- goto yy298;
- yy450:
- yych = *++p;
- if (yych == 'E')
- goto yy454;
- if (yych == 'e')
- goto yy454;
- goto yy298;
- yy451:
- yych = *++p;
- if (yych == '[')
- goto yy455;
- goto yy298;
- yy452:
- yych = *++p;
- if (yych == 'O')
- goto yy456;
- if (yych == 'o')
- goto yy456;
- goto yy298;
- yy453:
- yych = *++p;
- if (yych == 'P')
- goto yy331;
- if (yych == 'p')
- goto yy331;
- goto yy298;
- yy454:
- yych = *++p;
- if (yych == 'A')
- goto yy389;
- if (yych == 'a')
- goto yy389;
- goto yy298;
- yy455:
- ++p;
- { return 5; }
- yy456:
- yych = *++p;
- if (yych == 'T')
- goto yy402;
- if (yych == 't')
- goto yy402;
- goto yy298;
- }
-}
-
-// Try to match an HTML block tag start line of type 7, returning
-// 7 if successful, 0 if not.
-bufsize_t _scan_html_block_start_7(const unsigned char *p) {
- const unsigned char *marker = NULL;
-
- {
- unsigned char yych;
- unsigned int yyaccept = 0;
- static const unsigned char yybm[] = {
- 0, 224, 224, 224, 224, 224, 224, 224, 224, 198, 210, 194, 198, 194,
- 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224,
- 224, 224, 224, 224, 198, 224, 128, 224, 224, 224, 224, 64, 224, 224,
- 224, 224, 224, 233, 232, 224, 233, 233, 233, 233, 233, 233, 233, 233,
- 233, 233, 232, 224, 192, 192, 192, 224, 224, 233, 233, 233, 233, 233,
- 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233,
- 233, 233, 233, 233, 233, 233, 233, 224, 224, 224, 224, 232, 192, 233,
- 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233,
- 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 224, 224, 224,
- 224, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,
- };
- yych = *p;
- if (yych == '<')
- goto yy459;
- ++p;
- yy458 : { return 0; }
- yy459:
- yyaccept = 0;
- yych = *(marker = ++p);
- if (yych <= '@') {
- if (yych != '/')
- goto yy458;
- } else {
- if (yych <= 'Z')
- goto yy461;
- if (yych <= '`')
- goto yy458;
- if (yych <= 'z')
- goto yy461;
- goto yy458;
- }
- yych = *++p;
- if (yych <= '@')
- goto yy460;
- if (yych <= 'Z')
- goto yy462;
- if (yych <= '`')
- goto yy460;
- if (yych <= 'z')
- goto yy462;
- yy460:
- p = marker;
- if (yyaccept == 0) {
- goto yy458;
- } else {
- goto yy469;
- }
- yy461:
- yych = *++p;
- if (yybm[0 + yych] & 2) {
- goto yy463;
- }
- if (yych <= '=') {
- if (yych <= '.') {
- if (yych == '-')
- goto yy461;
- goto yy460;
- } else {
- if (yych <= '/')
- goto yy464;
- if (yych <= '9')
- goto yy461;
- goto yy460;
- }
- } else {
- if (yych <= 'Z') {
- if (yych <= '>')
- goto yy465;
- if (yych <= '@')
- goto yy460;
- goto yy461;
- } else {
- if (yych <= '`')
- goto yy460;
- if (yych <= 'z')
- goto yy461;
- goto yy460;
- }
- }
- yy462:
- yych = *++p;
- if (yych <= '/') {
- if (yych <= 0x1F) {
- if (yych <= 0x08)
- goto yy460;
- if (yych <= '\r')
- goto yy466;
- goto yy460;
- } else {
- if (yych <= ' ')
- goto yy466;
- if (yych == '-')
- goto yy462;
- goto yy460;
- }
- } else {
- if (yych <= '@') {
- if (yych <= '9')
- goto yy462;
- if (yych == '>')
- goto yy465;
- goto yy460;
- } else {
- if (yych <= 'Z')
- goto yy462;
- if (yych <= '`')
- goto yy460;
- if (yych <= 'z')
- goto yy462;
- goto yy460;
- }
- }
- yy463:
- yych = *++p;
- if (yybm[0 + yych] & 2) {
- goto yy463;
- }
- if (yych <= '>') {
- if (yych <= '9') {
- if (yych != '/')
- goto yy460;
- } else {
- if (yych <= ':')
- goto yy467;
- if (yych <= '=')
- goto yy460;
- goto yy465;
- }
- } else {
- if (yych <= '^') {
- if (yych <= '@')
- goto yy460;
- if (yych <= 'Z')
- goto yy467;
- goto yy460;
- } else {
- if (yych == '`')
- goto yy460;
- if (yych <= 'z')
- goto yy467;
- goto yy460;
- }
- }
- yy464:
- yych = *++p;
- if (yych != '>')
- goto yy460;
- yy465:
- yych = *++p;
- if (yybm[0 + yych] & 4) {
- goto yy465;
- }
- if (yych <= 0x08)
- goto yy460;
- if (yych <= '\n')
- goto yy468;
- if (yych <= '\v')
- goto yy460;
- if (yych <= '\r')
- goto yy470;
- goto yy460;
- yy466:
- yych = *++p;
- if (yych <= 0x1F) {
- if (yych <= 0x08)
- goto yy460;
- if (yych <= '\r')
- goto yy466;
- goto yy460;
- } else {
- if (yych <= ' ')
- goto yy466;
- if (yych == '>')
- goto yy465;
- goto yy460;
- }
- yy467:
- yych = *++p;
- if (yybm[0 + yych] & 8) {
- goto yy467;
- }
- if (yych <= ',') {
- if (yych <= '\r') {
- if (yych <= 0x08)
- goto yy460;
- goto yy471;
- } else {
- if (yych == ' ')
- goto yy471;
- goto yy460;
- }
- } else {
- if (yych <= '<') {
- if (yych <= '/')
- goto yy464;
- goto yy460;
- } else {
- if (yych <= '=')
- goto yy472;
- if (yych <= '>')
- goto yy465;
- goto yy460;
- }
- }
- yy468:
- yyaccept = 1;
- yych = *(marker = ++p);
- if (yybm[0 + yych] & 4) {
- goto yy465;
- }
- if (yych <= 0x08)
- goto yy469;
- if (yych <= '\n')
- goto yy468;
- if (yych <= '\v')
- goto yy469;
- if (yych <= '\r')
- goto yy470;
- yy469 : { return 7; }
- yy470:
- ++p;
- goto yy469;
- yy471:
- yych = *++p;
- if (yych <= '<') {
- if (yych <= ' ') {
- if (yych <= 0x08)
- goto yy460;
- if (yych <= '\r')
- goto yy471;
- if (yych <= 0x1F)
- goto yy460;
- goto yy471;
- } else {
- if (yych <= '/') {
- if (yych <= '.')
- goto yy460;
- goto yy464;
- } else {
- if (yych == ':')
- goto yy467;
- goto yy460;
- }
- }
- } else {
- if (yych <= 'Z') {
- if (yych <= '=')
- goto yy472;
- if (yych <= '>')
- goto yy465;
- if (yych <= '@')
- goto yy460;
- goto yy467;
- } else {
- if (yych <= '_') {
- if (yych <= '^')
- goto yy460;
- goto yy467;
- } else {
- if (yych <= '`')
- goto yy460;
- if (yych <= 'z')
- goto yy467;
- goto yy460;
- }
- }
- }
- yy472:
- yych = *++p;
- if (yybm[0 + yych] & 32) {
- goto yy473;
- }
- if (yych <= 0xE0) {
- if (yych <= '"') {
- if (yych <= 0x00)
- goto yy460;
- if (yych <= ' ')
- goto yy472;
- goto yy474;
- } else {
- if (yych <= '\'')
- goto yy475;
- if (yych <= 0xC1)
- goto yy460;
- if (yych <= 0xDF)
- goto yy476;
- goto yy477;
- }
- } else {
- if (yych <= 0xEF) {
- if (yych == 0xED)
- goto yy479;
- goto yy478;
- } else {
- if (yych <= 0xF0)
- goto yy480;
- if (yych <= 0xF3)
- goto yy481;
- if (yych <= 0xF4)
- goto yy482;
- goto yy460;
- }
- }
- yy473:
- yych = *++p;
- if (yybm[0 + yych] & 32) {
- goto yy473;
- }
- if (yych <= 0xE0) {
- if (yych <= '=') {
- if (yych <= 0x00)
- goto yy460;
- if (yych <= ' ')
- goto yy463;
- goto yy460;
- } else {
- if (yych <= '>')
- goto yy465;
- if (yych <= 0xC1)
- goto yy460;
- if (yych <= 0xDF)
- goto yy476;
- goto yy477;
- }
- } else {
- if (yych <= 0xEF) {
- if (yych == 0xED)
- goto yy479;
- goto yy478;
- } else {
- if (yych <= 0xF0)
- goto yy480;
- if (yych <= 0xF3)
- goto yy481;
- if (yych <= 0xF4)
- goto yy482;
- goto yy460;
- }
- }
- yy474:
- yych = *++p;
- if (yybm[0 + yych] & 64) {
- goto yy474;
- }
- if (yych <= 0xEC) {
- if (yych <= 0xC1) {
- if (yych <= 0x00)
- goto yy460;
- if (yych <= '"')
- goto yy483;
- goto yy460;
- } else {
- if (yych <= 0xDF)
- goto yy484;
- if (yych <= 0xE0)
- goto yy485;
- goto yy486;
- }
- } else {
- if (yych <= 0xF0) {
- if (yych <= 0xED)
- goto yy487;
- if (yych <= 0xEF)
- goto yy486;
- goto yy488;
- } else {
- if (yych <= 0xF3)
- goto yy489;
- if (yych <= 0xF4)
- goto yy490;
- goto yy460;
- }
- }
- yy475:
- yych = *++p;
- if (yybm[0 + yych] & 128) {
- goto yy475;
- }
- if (yych <= 0xEC) {
- if (yych <= 0xC1) {
- if (yych <= 0x00)
- goto yy460;
- if (yych <= '\'')
- goto yy483;
- goto yy460;
- } else {
- if (yych <= 0xDF)
- goto yy491;
- if (yych <= 0xE0)
- goto yy492;
- goto yy493;
- }
- } else {
- if (yych <= 0xF0) {
- if (yych <= 0xED)
- goto yy494;
- if (yych <= 0xEF)
- goto yy493;
- goto yy495;
- } else {
- if (yych <= 0xF3)
- goto yy496;
- if (yych <= 0xF4)
- goto yy497;
- goto yy460;
- }
- }
- yy476:
- yych = *++p;
- if (yych <= 0x7F)
- goto yy460;
- if (yych <= 0xBF)
- goto yy473;
- goto yy460;
- yy477:
- yych = *++p;
- if (yych <= 0x9F)
- goto yy460;
- if (yych <= 0xBF)
- goto yy476;
- goto yy460;
- yy478:
- yych = *++p;
- if (yych <= 0x7F)
- goto yy460;
- if (yych <= 0xBF)
- goto yy476;
- goto yy460;
- yy479:
- yych = *++p;
- if (yych <= 0x7F)
- goto yy460;
- if (yych <= 0x9F)
- goto yy476;
- goto yy460;
- yy480:
- yych = *++p;
- if (yych <= 0x8F)
- goto yy460;
- if (yych <= 0xBF)
- goto yy478;
- goto yy460;
- yy481:
- yych = *++p;
- if (yych <= 0x7F)
- goto yy460;
- if (yych <= 0xBF)
- goto yy478;
- goto yy460;
- yy482:
- yych = *++p;
- if (yych <= 0x7F)
- goto yy460;
- if (yych <= 0x8F)
- goto yy478;
- goto yy460;
- yy483:
- yych = *++p;
- if (yybm[0 + yych] & 2) {
- goto yy463;
- }
- if (yych == '/')
- goto yy464;
- if (yych == '>')
- goto yy465;
- goto yy460;
- yy484:
- yych = *++p;
- if (yych <= 0x7F)
- goto yy460;
- if (yych <= 0xBF)
- goto yy474;
- goto yy460;
- yy485:
- yych = *++p;
- if (yych <= 0x9F)
- goto yy460;
- if (yych <= 0xBF)
- goto yy484;
- goto yy460;
- yy486:
- yych = *++p;
- if (yych <= 0x7F)
- goto yy460;
- if (yych <= 0xBF)
- goto yy484;
- goto yy460;
- yy487:
- yych = *++p;
- if (yych <= 0x7F)
- goto yy460;
- if (yych <= 0x9F)
- goto yy484;
- goto yy460;
- yy488:
- yych = *++p;
- if (yych <= 0x8F)
- goto yy460;
- if (yych <= 0xBF)
- goto yy486;
- goto yy460;
- yy489:
- yych = *++p;
- if (yych <= 0x7F)
- goto yy460;
- if (yych <= 0xBF)
- goto yy486;
- goto yy460;
- yy490:
- yych = *++p;
- if (yych <= 0x7F)
- goto yy460;
- if (yych <= 0x8F)
- goto yy486;
- goto yy460;
- yy491:
- yych = *++p;
- if (yych <= 0x7F)
- goto yy460;
- if (yych <= 0xBF)
- goto yy475;
- goto yy460;
- yy492:
- yych = *++p;
- if (yych <= 0x9F)
- goto yy460;
- if (yych <= 0xBF)
- goto yy491;
- goto yy460;
- yy493:
- yych = *++p;
- if (yych <= 0x7F)
- goto yy460;
- if (yych <= 0xBF)
- goto yy491;
- goto yy460;
- yy494:
- yych = *++p;
- if (yych <= 0x7F)
- goto yy460;
- if (yych <= 0x9F)
- goto yy491;
- goto yy460;
- yy495:
- yych = *++p;
- if (yych <= 0x8F)
- goto yy460;
- if (yych <= 0xBF)
- goto yy493;
- goto yy460;
- yy496:
- yych = *++p;
- if (yych <= 0x7F)
- goto yy460;
- if (yych <= 0xBF)
- goto yy493;
- goto yy460;
- yy497:
- yych = *++p;
- if (yych <= 0x7F)
- goto yy460;
- if (yych <= 0x8F)
- goto yy493;
- goto yy460;
- }
-}
-
-// Try to match an HTML block end line of type 1
-bufsize_t _scan_html_block_end_1(const unsigned char *p) {
- const unsigned char *marker = NULL;
- const unsigned char *start = p;
-
- {
- unsigned char yych;
- unsigned int yyaccept = 0;
- static const unsigned char yybm[] = {
- 0, 64, 64, 64, 64, 64, 64, 64, 64, 64, 0, 64, 64, 64, 64, 64, 64, 64,
- 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
- 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
- 64, 64, 64, 64, 64, 64, 128, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
- 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
- 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
- 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
- 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,
- };
- yych = *p;
- if (yych <= 0xDF) {
- if (yych <= ';') {
- if (yych <= 0x00)
- goto yy499;
- if (yych != '\n')
- goto yy501;
- } else {
- if (yych <= '<')
- goto yy502;
- if (yych <= 0x7F)
- goto yy501;
- if (yych >= 0xC2)
- goto yy503;
- }
- } else {
- if (yych <= 0xEF) {
- if (yych <= 0xE0)
- goto yy504;
- if (yych == 0xED)
- goto yy506;
- goto yy505;
- } else {
- if (yych <= 0xF0)
- goto yy507;
- if (yych <= 0xF3)
- goto yy508;
- if (yych <= 0xF4)
- goto yy509;
- }
- }
- yy499:
- ++p;
- yy500 : { return 0; }
- yy501:
- yyaccept = 0;
- yych = *(marker = ++p);
- if (yych <= '\n') {
- if (yych <= 0x00)
- goto yy500;
- if (yych <= '\t')
- goto yy511;
- goto yy500;
- } else {
- if (yych <= 0x7F)
- goto yy511;
- if (yych <= 0xC1)
- goto yy500;
- if (yych <= 0xF4)
- goto yy511;
- goto yy500;
- }
- yy502:
- yyaccept = 0;
- yych = *(marker = ++p);
- if (yych <= '.') {
- if (yych <= 0x00)
- goto yy500;
- if (yych == '\n')
- goto yy500;
- goto yy511;
- } else {
- if (yych <= 0x7F) {
- if (yych <= '/')
- goto yy521;
- goto yy511;
- } else {
- if (yych <= 0xC1)
- goto yy500;
- if (yych <= 0xF4)
- goto yy511;
- goto yy500;
- }
- }
- yy503:
- yyaccept = 0;
- yych = *(marker = ++p);
- if (yych <= 0x7F)
- goto yy500;
- if (yych <= 0xBF)
- goto yy510;
- goto yy500;
- yy504:
- yyaccept = 0;
- yych = *(marker = ++p);
- if (yych <= 0x9F)
- goto yy500;
- if (yych <= 0xBF)
- goto yy514;
- goto yy500;
- yy505:
- yyaccept = 0;
- yych = *(marker = ++p);
- if (yych <= 0x7F)
- goto yy500;
- if (yych <= 0xBF)
- goto yy514;
- goto yy500;
- yy506:
- yyaccept = 0;
- yych = *(marker = ++p);
- if (yych <= 0x7F)
- goto yy500;
- if (yych <= 0x9F)
- goto yy514;
- goto yy500;
- yy507:
- yyaccept = 0;
- yych = *(marker = ++p);
- if (yych <= 0x8F)
- goto yy500;
- if (yych <= 0xBF)
- goto yy516;
- goto yy500;
- yy508:
- yyaccept = 0;
- yych = *(marker = ++p);
- if (yych <= 0x7F)
- goto yy500;
- if (yych <= 0xBF)
- goto yy516;
- goto yy500;
- yy509:
- yyaccept = 0;
- yych = *(marker = ++p);
- if (yych <= 0x7F)
- goto yy500;
- if (yych <= 0x8F)
- goto yy516;
- goto yy500;
- yy510:
- yych = *++p;
- yy511:
- if (yybm[0 + yych] & 64) {
- goto yy510;
- }
- if (yych <= 0xEC) {
- if (yych <= 0xC1) {
- if (yych <= '\n')
- goto yy512;
- if (yych <= '<')
- goto yy513;
- } else {
- if (yych <= 0xDF)
- goto yy514;
- if (yych <= 0xE0)
- goto yy515;
- goto yy516;
- }
- } else {
- if (yych <= 0xF0) {
- if (yych <= 0xED)
- goto yy517;
- if (yych <= 0xEF)
- goto yy516;
- goto yy518;
- } else {
- if (yych <= 0xF3)
- goto yy519;
- if (yych <= 0xF4)
- goto yy520;
- }
- }
- yy512:
- p = marker;
- if (yyaccept == 0) {
- goto yy500;
- } else {
- goto yy534;
- }
- yy513:
- yych = *++p;
- if (yybm[0 + yych] & 128) {
- goto yy513;
- }
- if (yych <= 0xDF) {
- if (yych <= '.') {
- if (yych <= 0x00)
- goto yy512;
- if (yych == '\n')
- goto yy512;
- goto yy510;
- } else {
- if (yych <= '/')
- goto yy521;
- if (yych <= 0x7F)
- goto yy510;
- if (yych <= 0xC1)
- goto yy512;
- }
- } else {
- if (yych <= 0xEF) {
- if (yych <= 0xE0)
- goto yy515;
- if (yych == 0xED)
- goto yy517;
- goto yy516;
- } else {
- if (yych <= 0xF0)
- goto yy518;
- if (yych <= 0xF3)
- goto yy519;
- if (yych <= 0xF4)
- goto yy520;
- goto yy512;
- }
- }
- yy514:
- yych = *++p;
- if (yych <= 0x7F)
- goto yy512;
- if (yych <= 0xBF)
- goto yy510;
- goto yy512;
- yy515:
- yych = *++p;
- if (yych <= 0x9F)
- goto yy512;
- if (yych <= 0xBF)
- goto yy514;
- goto yy512;
- yy516:
- yych = *++p;
- if (yych <= 0x7F)
- goto yy512;
- if (yych <= 0xBF)
- goto yy514;
- goto yy512;
- yy517:
- yych = *++p;
- if (yych <= 0x7F)
- goto yy512;
- if (yych <= 0x9F)
- goto yy514;
- goto yy512;
- yy518:
- yych = *++p;
- if (yych <= 0x8F)
- goto yy512;
- if (yych <= 0xBF)
- goto yy516;
- goto yy512;
- yy519:
- yych = *++p;
- if (yych <= 0x7F)
- goto yy512;
- if (yych <= 0xBF)
- goto yy516;
- goto yy512;
- yy520:
- yych = *++p;
- if (yych <= 0x7F)
- goto yy512;
- if (yych <= 0x8F)
- goto yy516;
- goto yy512;
- yy521:
- yych = *++p;
- if (yybm[0 + yych] & 128) {
- goto yy513;
- }
- if (yych <= 's') {
- if (yych <= 'R') {
- if (yych <= '\n') {
- if (yych <= 0x00)
- goto yy512;
- if (yych <= '\t')
- goto yy510;
- goto yy512;
- } else {
- if (yych != 'P')
- goto yy510;
- }
- } else {
- if (yych <= 'o') {
- if (yych <= 'S')
- goto yy523;
- if (yych <= 'T')
- goto yy524;
- goto yy510;
- } else {
- if (yych <= 'p')
- goto yy522;
- if (yych <= 'r')
- goto yy510;
- goto yy523;
- }
- }
- } else {
- if (yych <= 0xEC) {
- if (yych <= 0xC1) {
- if (yych <= 't')
- goto yy524;
- if (yych <= 0x7F)
- goto yy510;
- goto yy512;
- } else {
- if (yych <= 0xDF)
- goto yy514;
- if (yych <= 0xE0)
- goto yy515;
- goto yy516;
- }
- } else {
- if (yych <= 0xF0) {
- if (yych <= 0xED)
- goto yy517;
- if (yych <= 0xEF)
- goto yy516;
- goto yy518;
- } else {
- if (yych <= 0xF3)
- goto yy519;
- if (yych <= 0xF4)
- goto yy520;
- goto yy512;
- }
- }
- }
- yy522:
- yych = *++p;
- if (yybm[0 + yych] & 128) {
- goto yy513;
- }
- if (yych <= 0xC1) {
- if (yych <= 'Q') {
- if (yych <= 0x00)
- goto yy512;
- if (yych == '\n')
- goto yy512;
- goto yy510;
- } else {
- if (yych <= 'q') {
- if (yych <= 'R')
- goto yy525;
- goto yy510;
- } else {
- if (yych <= 'r')
- goto yy525;
- if (yych <= 0x7F)
- goto yy510;
- goto yy512;
- }
- }
- } else {
- if (yych <= 0xED) {
- if (yych <= 0xDF)
- goto yy514;
- if (yych <= 0xE0)
- goto yy515;
- if (yych <= 0xEC)
- goto yy516;
- goto yy517;
- } else {
- if (yych <= 0xF0) {
- if (yych <= 0xEF)
- goto yy516;
- goto yy518;
- } else {
- if (yych <= 0xF3)
- goto yy519;
- if (yych <= 0xF4)
- goto yy520;
- goto yy512;
- }
- }
- }
- yy523:
- yych = *++p;
- if (yybm[0 + yych] & 128) {
- goto yy513;
- }
- if (yych <= 't') {
- if (yych <= 'C') {
- if (yych <= '\t') {
- if (yych <= 0x00)
- goto yy512;
- goto yy510;
- } else {
- if (yych <= '\n')
- goto yy512;
- if (yych <= 'B')
- goto yy510;
- goto yy526;
- }
- } else {
- if (yych <= 'b') {
- if (yych == 'T')
- goto yy527;
- goto yy510;
- } else {
- if (yych <= 'c')
- goto yy526;
- if (yych <= 's')
- goto yy510;
- goto yy527;
- }
- }
- } else {
- if (yych <= 0xEC) {
- if (yych <= 0xC1) {
- if (yych <= 0x7F)
- goto yy510;
- goto yy512;
- } else {
- if (yych <= 0xDF)
- goto yy514;
- if (yych <= 0xE0)
- goto yy515;
- goto yy516;
- }
- } else {
- if (yych <= 0xF0) {
- if (yych <= 0xED)
- goto yy517;
- if (yych <= 0xEF)
- goto yy516;
- goto yy518;
- } else {
- if (yych <= 0xF3)
- goto yy519;
- if (yych <= 0xF4)
- goto yy520;
- goto yy512;
- }
- }
- }
- yy524:
- yych = *++p;
- if (yybm[0 + yych] & 128) {
- goto yy513;
- }
- if (yych <= 0xC1) {
- if (yych <= 'D') {
- if (yych <= 0x00)
- goto yy512;
- if (yych == '\n')
- goto yy512;
- goto yy510;
- } else {
- if (yych <= 'd') {
- if (yych <= 'E')
- goto yy528;
- goto yy510;
- } else {
- if (yych <= 'e')
- goto yy528;
- if (yych <= 0x7F)
- goto yy510;
- goto yy512;
- }
- }
- } else {
- if (yych <= 0xED) {
- if (yych <= 0xDF)
- goto yy514;
- if (yych <= 0xE0)
- goto yy515;
- if (yych <= 0xEC)
- goto yy516;
- goto yy517;
- } else {
- if (yych <= 0xF0) {
- if (yych <= 0xEF)
- goto yy516;
- goto yy518;
- } else {
- if (yych <= 0xF3)
- goto yy519;
- if (yych <= 0xF4)
- goto yy520;
- goto yy512;
- }
- }
- }
- yy525:
- yych = *++p;
- if (yybm[0 + yych] & 128) {
- goto yy513;
- }
- if (yych <= 0xC1) {
- if (yych <= 'D') {
- if (yych <= 0x00)
- goto yy512;
- if (yych == '\n')
- goto yy512;
- goto yy510;
- } else {
- if (yych <= 'd') {
- if (yych <= 'E')
- goto yy529;
- goto yy510;
- } else {
- if (yych <= 'e')
- goto yy529;
- if (yych <= 0x7F)
- goto yy510;
- goto yy512;
- }
- }
- } else {
- if (yych <= 0xED) {
- if (yych <= 0xDF)
- goto yy514;
- if (yych <= 0xE0)
- goto yy515;
- if (yych <= 0xEC)
- goto yy516;
- goto yy517;
- } else {
- if (yych <= 0xF0) {
- if (yych <= 0xEF)
- goto yy516;
- goto yy518;
- } else {
- if (yych <= 0xF3)
- goto yy519;
- if (yych <= 0xF4)
- goto yy520;
- goto yy512;
- }
- }
- }
- yy526:
- yych = *++p;
- if (yybm[0 + yych] & 128) {
- goto yy513;
- }
- if (yych <= 0xC1) {
- if (yych <= 'Q') {
- if (yych <= 0x00)
- goto yy512;
- if (yych == '\n')
- goto yy512;
- goto yy510;
- } else {
- if (yych <= 'q') {
- if (yych <= 'R')
- goto yy530;
- goto yy510;
- } else {
- if (yych <= 'r')
- goto yy530;
- if (yych <= 0x7F)
- goto yy510;
- goto yy512;
- }
- }
- } else {
- if (yych <= 0xED) {
- if (yych <= 0xDF)
- goto yy514;
- if (yych <= 0xE0)
- goto yy515;
- if (yych <= 0xEC)
- goto yy516;
- goto yy517;
- } else {
- if (yych <= 0xF0) {
- if (yych <= 0xEF)
- goto yy516;
- goto yy518;
- } else {
- if (yych <= 0xF3)
- goto yy519;
- if (yych <= 0xF4)
- goto yy520;
- goto yy512;
- }
- }
- }
- yy527:
- yych = *++p;
- if (yybm[0 + yych] & 128) {
- goto yy513;
- }
- if (yych <= 0xC1) {
- if (yych <= 'X') {
- if (yych <= 0x00)
- goto yy512;
- if (yych == '\n')
- goto yy512;
- goto yy510;
- } else {
- if (yych <= 'x') {
- if (yych <= 'Y')
- goto yy531;
- goto yy510;
- } else {
- if (yych <= 'y')
- goto yy531;
- if (yych <= 0x7F)
- goto yy510;
- goto yy512;
- }
- }
- } else {
- if (yych <= 0xED) {
- if (yych <= 0xDF)
- goto yy514;
- if (yych <= 0xE0)
- goto yy515;
- if (yych <= 0xEC)
- goto yy516;
- goto yy517;
- } else {
- if (yych <= 0xF0) {
- if (yych <= 0xEF)
- goto yy516;
- goto yy518;
- } else {
- if (yych <= 0xF3)
- goto yy519;
- if (yych <= 0xF4)
- goto yy520;
- goto yy512;
- }
- }
- }
- yy528:
- yych = *++p;
- if (yybm[0 + yych] & 128) {
- goto yy513;
- }
- if (yych <= 0xC1) {
- if (yych <= 'W') {
- if (yych <= 0x00)
- goto yy512;
- if (yych == '\n')
- goto yy512;
- goto yy510;
- } else {
- if (yych <= 'w') {
- if (yych <= 'X')
- goto yy532;
- goto yy510;
- } else {
- if (yych <= 'x')
- goto yy532;
- if (yych <= 0x7F)
- goto yy510;
- goto yy512;
- }
- }
- } else {
- if (yych <= 0xED) {
- if (yych <= 0xDF)
- goto yy514;
- if (yych <= 0xE0)
- goto yy515;
- if (yych <= 0xEC)
- goto yy516;
- goto yy517;
- } else {
- if (yych <= 0xF0) {
- if (yych <= 0xEF)
- goto yy516;
- goto yy518;
- } else {
- if (yych <= 0xF3)
- goto yy519;
- if (yych <= 0xF4)
- goto yy520;
- goto yy512;
- }
- }
- }
- yy529:
- yych = *++p;
- if (yybm[0 + yych] & 128) {
- goto yy513;
- }
- if (yych <= 0xDF) {
- if (yych <= '=') {
- if (yych <= 0x00)
- goto yy512;
- if (yych == '\n')
- goto yy512;
- goto yy510;
- } else {
- if (yych <= '>')
- goto yy533;
- if (yych <= 0x7F)
- goto yy510;
- if (yych <= 0xC1)
- goto yy512;
- goto yy514;
- }
- } else {
- if (yych <= 0xEF) {
- if (yych <= 0xE0)
- goto yy515;
- if (yych == 0xED)
- goto yy517;
- goto yy516;
- } else {
- if (yych <= 0xF0)
- goto yy518;
- if (yych <= 0xF3)
- goto yy519;
- if (yych <= 0xF4)
- goto yy520;
- goto yy512;
- }
- }
- yy530:
- yych = *++p;
- if (yybm[0 + yych] & 128) {
- goto yy513;
- }
- if (yych <= 0xC1) {
- if (yych <= 'H') {
- if (yych <= 0x00)
- goto yy512;
- if (yych == '\n')
- goto yy512;
- goto yy510;
- } else {
- if (yych <= 'h') {
- if (yych <= 'I')
- goto yy535;
- goto yy510;
- } else {
- if (yych <= 'i')
- goto yy535;
- if (yych <= 0x7F)
- goto yy510;
- goto yy512;
- }
- }
- } else {
- if (yych <= 0xED) {
- if (yych <= 0xDF)
- goto yy514;
- if (yych <= 0xE0)
- goto yy515;
- if (yych <= 0xEC)
- goto yy516;
- goto yy517;
- } else {
- if (yych <= 0xF0) {
- if (yych <= 0xEF)
- goto yy516;
- goto yy518;
- } else {
- if (yych <= 0xF3)
- goto yy519;
- if (yych <= 0xF4)
- goto yy520;
- goto yy512;
- }
- }
- }
- yy531:
- yych = *++p;
- if (yybm[0 + yych] & 128) {
- goto yy513;
- }
- if (yych <= 0xC1) {
- if (yych <= 'K') {
- if (yych <= 0x00)
- goto yy512;
- if (yych == '\n')
- goto yy512;
- goto yy510;
- } else {
- if (yych <= 'k') {
- if (yych <= 'L')
- goto yy525;
- goto yy510;
- } else {
- if (yych <= 'l')
- goto yy525;
- if (yych <= 0x7F)
- goto yy510;
- goto yy512;
- }
- }
- } else {
- if (yych <= 0xED) {
- if (yych <= 0xDF)
- goto yy514;
- if (yych <= 0xE0)
- goto yy515;
- if (yych <= 0xEC)
- goto yy516;
- goto yy517;
- } else {
- if (yych <= 0xF0) {
- if (yych <= 0xEF)
- goto yy516;
- goto yy518;
- } else {
- if (yych <= 0xF3)
- goto yy519;
- if (yych <= 0xF4)
- goto yy520;
- goto yy512;
- }
- }
- }
- yy532:
- yych = *++p;
- if (yybm[0 + yych] & 128) {
- goto yy513;
- }
- if (yych <= 0xC1) {
- if (yych <= 'S') {
- if (yych <= 0x00)
- goto yy512;
- if (yych == '\n')
- goto yy512;
- goto yy510;
- } else {
- if (yych <= 's') {
- if (yych <= 'T')
- goto yy536;
- goto yy510;
- } else {
- if (yych <= 't')
- goto yy536;
- if (yych <= 0x7F)
- goto yy510;
- goto yy512;
- }
- }
- } else {
- if (yych <= 0xED) {
- if (yych <= 0xDF)
- goto yy514;
- if (yych <= 0xE0)
- goto yy515;
- if (yych <= 0xEC)
- goto yy516;
- goto yy517;
- } else {
- if (yych <= 0xF0) {
- if (yych <= 0xEF)
- goto yy516;
- goto yy518;
- } else {
- if (yych <= 0xF3)
- goto yy519;
- if (yych <= 0xF4)
- goto yy520;
- goto yy512;
- }
- }
- }
- yy533:
- yyaccept = 1;
- yych = *(marker = ++p);
- if (yybm[0 + yych] & 64) {
- goto yy510;
- }
- if (yych <= 0xEC) {
- if (yych <= 0xC1) {
- if (yych <= '\n')
- goto yy534;
- if (yych <= '<')
- goto yy513;
- } else {
- if (yych <= 0xDF)
- goto yy514;
- if (yych <= 0xE0)
- goto yy515;
- goto yy516;
- }
- } else {
- if (yych <= 0xF0) {
- if (yych <= 0xED)
- goto yy517;
- if (yych <= 0xEF)
- goto yy516;
- goto yy518;
- } else {
- if (yych <= 0xF3)
- goto yy519;
- if (yych <= 0xF4)
- goto yy520;
- }
- }
- yy534 : { return (bufsize_t)(p - start); }
- yy535:
- yych = *++p;
- if (yybm[0 + yych] & 128) {
- goto yy513;
- }
- if (yych <= 0xC1) {
- if (yych <= 'O') {
- if (yych <= 0x00)
- goto yy512;
- if (yych == '\n')
- goto yy512;
- goto yy510;
- } else {
- if (yych <= 'o') {
- if (yych <= 'P')
- goto yy537;
- goto yy510;
- } else {
- if (yych <= 'p')
- goto yy537;
- if (yych <= 0x7F)
- goto yy510;
- goto yy512;
- }
- }
- } else {
- if (yych <= 0xED) {
- if (yych <= 0xDF)
- goto yy514;
- if (yych <= 0xE0)
- goto yy515;
- if (yych <= 0xEC)
- goto yy516;
- goto yy517;
- } else {
- if (yych <= 0xF0) {
- if (yych <= 0xEF)
- goto yy516;
- goto yy518;
- } else {
- if (yych <= 0xF3)
- goto yy519;
- if (yych <= 0xF4)
- goto yy520;
- goto yy512;
- }
- }
- }
- yy536:
- yych = *++p;
- if (yybm[0 + yych] & 128) {
- goto yy513;
- }
- if (yych <= 0xC1) {
- if (yych <= '@') {
- if (yych <= 0x00)
- goto yy512;
- if (yych == '\n')
- goto yy512;
- goto yy510;
- } else {
- if (yych <= '`') {
- if (yych <= 'A')
- goto yy538;
- goto yy510;
- } else {
- if (yych <= 'a')
- goto yy538;
- if (yych <= 0x7F)
- goto yy510;
- goto yy512;
- }
- }
- } else {
- if (yych <= 0xED) {
- if (yych <= 0xDF)
- goto yy514;
- if (yych <= 0xE0)
- goto yy515;
- if (yych <= 0xEC)
- goto yy516;
- goto yy517;
- } else {
- if (yych <= 0xF0) {
- if (yych <= 0xEF)
- goto yy516;
- goto yy518;
- } else {
- if (yych <= 0xF3)
- goto yy519;
- if (yych <= 0xF4)
- goto yy520;
- goto yy512;
- }
- }
- }
- yy537:
- yych = *++p;
- if (yybm[0 + yych] & 128) {
- goto yy513;
- }
- if (yych <= 0xC1) {
- if (yych <= 'S') {
- if (yych <= 0x00)
- goto yy512;
- if (yych == '\n')
- goto yy512;
- goto yy510;
- } else {
- if (yych <= 's') {
- if (yych <= 'T')
- goto yy529;
- goto yy510;
- } else {
- if (yych <= 't')
- goto yy529;
- if (yych <= 0x7F)
- goto yy510;
- goto yy512;
- }
- }
- } else {
- if (yych <= 0xED) {
- if (yych <= 0xDF)
- goto yy514;
- if (yych <= 0xE0)
- goto yy515;
- if (yych <= 0xEC)
- goto yy516;
- goto yy517;
- } else {
- if (yych <= 0xF0) {
- if (yych <= 0xEF)
- goto yy516;
- goto yy518;
- } else {
- if (yych <= 0xF3)
- goto yy519;
- if (yych <= 0xF4)
- goto yy520;
- goto yy512;
- }
- }
- }
- yy538:
- yych = *++p;
- if (yybm[0 + yych] & 128) {
- goto yy513;
- }
- if (yych <= 0xC1) {
- if (yych <= 'Q') {
- if (yych <= 0x00)
- goto yy512;
- if (yych == '\n')
- goto yy512;
- goto yy510;
- } else {
- if (yych <= 'q') {
- if (yych >= 'S')
- goto yy510;
- } else {
- if (yych <= 'r')
- goto yy539;
- if (yych <= 0x7F)
- goto yy510;
- goto yy512;
- }
- }
- } else {
- if (yych <= 0xED) {
- if (yych <= 0xDF)
- goto yy514;
- if (yych <= 0xE0)
- goto yy515;
- if (yych <= 0xEC)
- goto yy516;
- goto yy517;
- } else {
- if (yych <= 0xF0) {
- if (yych <= 0xEF)
- goto yy516;
- goto yy518;
- } else {
- if (yych <= 0xF3)
- goto yy519;
- if (yych <= 0xF4)
- goto yy520;
- goto yy512;
- }
- }
- }
- yy539:
- yych = *++p;
- if (yybm[0 + yych] & 128) {
- goto yy513;
- }
- if (yych <= 0xC1) {
- if (yych <= 'D') {
- if (yych <= 0x00)
- goto yy512;
- if (yych == '\n')
- goto yy512;
- goto yy510;
- } else {
- if (yych <= 'd') {
- if (yych >= 'F')
- goto yy510;
- } else {
- if (yych <= 'e')
- goto yy540;
- if (yych <= 0x7F)
- goto yy510;
- goto yy512;
- }
- }
- } else {
- if (yych <= 0xED) {
- if (yych <= 0xDF)
- goto yy514;
- if (yych <= 0xE0)
- goto yy515;
- if (yych <= 0xEC)
- goto yy516;
- goto yy517;
- } else {
- if (yych <= 0xF0) {
- if (yych <= 0xEF)
- goto yy516;
- goto yy518;
- } else {
- if (yych <= 0xF3)
- goto yy519;
- if (yych <= 0xF4)
- goto yy520;
- goto yy512;
- }
- }
- }
- yy540:
- yych = *++p;
- if (yybm[0 + yych] & 128) {
- goto yy513;
- }
- if (yych <= 0xC1) {
- if (yych <= '@') {
- if (yych <= 0x00)
- goto yy512;
- if (yych == '\n')
- goto yy512;
- goto yy510;
- } else {
- if (yych <= '`') {
- if (yych <= 'A')
- goto yy529;
- goto yy510;
- } else {
- if (yych <= 'a')
- goto yy529;
- if (yych <= 0x7F)
- goto yy510;
- goto yy512;
- }
- }
- } else {
- if (yych <= 0xED) {
- if (yych <= 0xDF)
- goto yy514;
- if (yych <= 0xE0)
- goto yy515;
- if (yych <= 0xEC)
- goto yy516;
- goto yy517;
- } else {
- if (yych <= 0xF0) {
- if (yych <= 0xEF)
- goto yy516;
- goto yy518;
- } else {
- if (yych <= 0xF3)
- goto yy519;
- if (yych <= 0xF4)
- goto yy520;
- goto yy512;
- }
- }
- }
- }
-}
-
-// Try to match an HTML block end line of type 2
-bufsize_t _scan_html_block_end_2(const unsigned char *p) {
- const unsigned char *marker = NULL;
- const unsigned char *start = p;
-
- {
- unsigned char yych;
- unsigned int yyaccept = 0;
- static const unsigned char yybm[] = {
- 0, 64, 64, 64, 64, 64, 64, 64, 64, 64, 0, 64, 64, 64, 64, 64, 64, 64,
- 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
- 64, 64, 64, 64, 64, 64, 64, 64, 64, 128, 64, 64, 64, 64, 64, 64, 64, 64,
- 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
- 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
- 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
- 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
- 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,
- };
- yych = *p;
- if (yych <= 0xDF) {
- if (yych <= ',') {
- if (yych <= 0x00)
- goto yy542;
- if (yych != '\n')
- goto yy544;
- } else {
- if (yych <= '-')
- goto yy545;
- if (yych <= 0x7F)
- goto yy544;
- if (yych >= 0xC2)
- goto yy546;
- }
- } else {
- if (yych <= 0xEF) {
- if (yych <= 0xE0)
- goto yy547;
- if (yych == 0xED)
- goto yy549;
- goto yy548;
- } else {
- if (yych <= 0xF0)
- goto yy550;
- if (yych <= 0xF3)
- goto yy551;
- if (yych <= 0xF4)
- goto yy552;
- }
- }
- yy542:
- ++p;
- yy543 : { return 0; }
- yy544:
- yyaccept = 0;
- yych = *(marker = ++p);
- if (yych <= '\n') {
- if (yych <= 0x00)
- goto yy543;
- if (yych <= '\t')
- goto yy554;
- goto yy543;
- } else {
- if (yych <= 0x7F)
- goto yy554;
- if (yych <= 0xC1)
- goto yy543;
- if (yych <= 0xF4)
- goto yy554;
- goto yy543;
- }
- yy545:
- yyaccept = 0;
- yych = *(marker = ++p);
- if (yybm[0 + yych] & 128) {
- goto yy564;
- }
- if (yych <= '\n') {
- if (yych <= 0x00)
- goto yy543;
- if (yych <= '\t')
- goto yy554;
- goto yy543;
- } else {
- if (yych <= 0x7F)
- goto yy554;
- if (yych <= 0xC1)
- goto yy543;
- if (yych <= 0xF4)
- goto yy554;
- goto yy543;
- }
- yy546:
- yyaccept = 0;
- yych = *(marker = ++p);
- if (yych <= 0x7F)
- goto yy543;
- if (yych <= 0xBF)
- goto yy553;
- goto yy543;
- yy547:
- yyaccept = 0;
- yych = *(marker = ++p);
- if (yych <= 0x9F)
- goto yy543;
- if (yych <= 0xBF)
- goto yy557;
- goto yy543;
- yy548:
- yyaccept = 0;
- yych = *(marker = ++p);
- if (yych <= 0x7F)
- goto yy543;
- if (yych <= 0xBF)
- goto yy557;
- goto yy543;
- yy549:
- yyaccept = 0;
- yych = *(marker = ++p);
- if (yych <= 0x7F)
- goto yy543;
- if (yych <= 0x9F)
- goto yy557;
- goto yy543;
- yy550:
- yyaccept = 0;
- yych = *(marker = ++p);
- if (yych <= 0x8F)
- goto yy543;
- if (yych <= 0xBF)
- goto yy559;
- goto yy543;
- yy551:
- yyaccept = 0;
- yych = *(marker = ++p);
- if (yych <= 0x7F)
- goto yy543;
- if (yych <= 0xBF)
- goto yy559;
- goto yy543;
- yy552:
- yyaccept = 0;
- yych = *(marker = ++p);
- if (yych <= 0x7F)
- goto yy543;
- if (yych <= 0x8F)
- goto yy559;
- goto yy543;
- yy553:
- yych = *++p;
- yy554:
- if (yybm[0 + yych] & 64) {
- goto yy553;
- }
- if (yych <= 0xEC) {
- if (yych <= 0xC1) {
- if (yych <= '\n')
- goto yy555;
- if (yych <= '-')
- goto yy556;
- } else {
- if (yych <= 0xDF)
- goto yy557;
- if (yych <= 0xE0)
- goto yy558;
- goto yy559;
- }
- } else {
- if (yych <= 0xF0) {
- if (yych <= 0xED)
- goto yy560;
- if (yych <= 0xEF)
- goto yy559;
- goto yy561;
- } else {
- if (yych <= 0xF3)
- goto yy562;
- if (yych <= 0xF4)
- goto yy563;
- }
- }
- yy555:
- p = marker;
- if (yyaccept == 0) {
- goto yy543;
- } else {
- goto yy566;
- }
- yy556:
- yych = *++p;
- if (yybm[0 + yych] & 64) {
- goto yy553;
- }
- if (yych <= 0xEC) {
- if (yych <= 0xC1) {
- if (yych <= '\n')
- goto yy555;
- if (yych <= '-')
- goto yy564;
- goto yy555;
- } else {
- if (yych <= 0xDF)
- goto yy557;
- if (yych <= 0xE0)
- goto yy558;
- goto yy559;
- }
- } else {
- if (yych <= 0xF0) {
- if (yych <= 0xED)
- goto yy560;
- if (yych <= 0xEF)
- goto yy559;
- goto yy561;
- } else {
- if (yych <= 0xF3)
- goto yy562;
- if (yych <= 0xF4)
- goto yy563;
- goto yy555;
- }
- }
- yy557:
- yych = *++p;
- if (yych <= 0x7F)
- goto yy555;
- if (yych <= 0xBF)
- goto yy553;
- goto yy555;
- yy558:
- yych = *++p;
- if (yych <= 0x9F)
- goto yy555;
- if (yych <= 0xBF)
- goto yy557;
- goto yy555;
- yy559:
- yych = *++p;
- if (yych <= 0x7F)
- goto yy555;
- if (yych <= 0xBF)
- goto yy557;
- goto yy555;
- yy560:
- yych = *++p;
- if (yych <= 0x7F)
- goto yy555;
- if (yych <= 0x9F)
- goto yy557;
- goto yy555;
- yy561:
- yych = *++p;
- if (yych <= 0x8F)
- goto yy555;
- if (yych <= 0xBF)
- goto yy559;
- goto yy555;
- yy562:
- yych = *++p;
- if (yych <= 0x7F)
- goto yy555;
- if (yych <= 0xBF)
- goto yy559;
- goto yy555;
- yy563:
- yych = *++p;
- if (yych <= 0x7F)
- goto yy555;
- if (yych <= 0x8F)
- goto yy559;
- goto yy555;
- yy564:
- yych = *++p;
- if (yybm[0 + yych] & 128) {
- goto yy564;
- }
- if (yych <= 0xDF) {
- if (yych <= '=') {
- if (yych <= 0x00)
- goto yy555;
- if (yych == '\n')
- goto yy555;
- goto yy553;
- } else {
- if (yych <= '>')
- goto yy565;
- if (yych <= 0x7F)
- goto yy553;
- if (yych <= 0xC1)
- goto yy555;
- goto yy557;
- }
- } else {
- if (yych <= 0xEF) {
- if (yych <= 0xE0)
- goto yy558;
- if (yych == 0xED)
- goto yy560;
- goto yy559;
- } else {
- if (yych <= 0xF0)
- goto yy561;
- if (yych <= 0xF3)
- goto yy562;
- if (yych <= 0xF4)
- goto yy563;
- goto yy555;
- }
- }
- yy565:
- yyaccept = 1;
- yych = *(marker = ++p);
- if (yybm[0 + yych] & 64) {
- goto yy553;
- }
- if (yych <= 0xEC) {
- if (yych <= 0xC1) {
- if (yych <= '\n')
- goto yy566;
- if (yych <= '-')
- goto yy556;
- } else {
- if (yych <= 0xDF)
- goto yy557;
- if (yych <= 0xE0)
- goto yy558;
- goto yy559;
- }
- } else {
- if (yych <= 0xF0) {
- if (yych <= 0xED)
- goto yy560;
- if (yych <= 0xEF)
- goto yy559;
- goto yy561;
- } else {
- if (yych <= 0xF3)
- goto yy562;
- if (yych <= 0xF4)
- goto yy563;
- }
- }
- yy566 : { return (bufsize_t)(p - start); }
- }
-}
-
-// Try to match an HTML block end line of type 3
-bufsize_t _scan_html_block_end_3(const unsigned char *p) {
- const unsigned char *marker = NULL;
- const unsigned char *start = p;
-
- {
- unsigned char yych;
- unsigned int yyaccept = 0;
- static const unsigned char yybm[] = {
- 0, 64, 64, 64, 64, 64, 64, 64, 64, 64, 0, 64, 64, 64, 64, 64, 64, 64,
- 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
- 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
- 64, 64, 64, 64, 64, 64, 64, 64, 64, 128, 64, 64, 64, 64, 64, 64, 64, 64,
- 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
- 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
- 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
- 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,
- };
- yych = *p;
- if (yych <= 0xDF) {
- if (yych <= '>') {
- if (yych <= 0x00)
- goto yy568;
- if (yych != '\n')
- goto yy570;
- } else {
- if (yych <= '?')
- goto yy571;
- if (yych <= 0x7F)
- goto yy570;
- if (yych >= 0xC2)
- goto yy572;
- }
- } else {
- if (yych <= 0xEF) {
- if (yych <= 0xE0)
- goto yy573;
- if (yych == 0xED)
- goto yy575;
- goto yy574;
- } else {
- if (yych <= 0xF0)
- goto yy576;
- if (yych <= 0xF3)
- goto yy577;
- if (yych <= 0xF4)
- goto yy578;
- }
- }
- yy568:
- ++p;
- yy569 : { return 0; }
- yy570:
- yyaccept = 0;
- yych = *(marker = ++p);
- if (yych <= '\n') {
- if (yych <= 0x00)
- goto yy569;
- if (yych <= '\t')
- goto yy580;
- goto yy569;
- } else {
- if (yych <= 0x7F)
- goto yy580;
- if (yych <= 0xC1)
- goto yy569;
- if (yych <= 0xF4)
- goto yy580;
- goto yy569;
- }
- yy571:
- yyaccept = 0;
- yych = *(marker = ++p);
- if (yych <= '=') {
- if (yych <= 0x00)
- goto yy569;
- if (yych == '\n')
- goto yy569;
- goto yy580;
- } else {
- if (yych <= 0x7F) {
- if (yych <= '>')
- goto yy590;
- goto yy580;
- } else {
- if (yych <= 0xC1)
- goto yy569;
- if (yych <= 0xF4)
- goto yy580;
- goto yy569;
- }
- }
- yy572:
- yyaccept = 0;
- yych = *(marker = ++p);
- if (yych <= 0x7F)
- goto yy569;
- if (yych <= 0xBF)
- goto yy579;
- goto yy569;
- yy573:
- yyaccept = 0;
- yych = *(marker = ++p);
- if (yych <= 0x9F)
- goto yy569;
- if (yych <= 0xBF)
- goto yy583;
- goto yy569;
- yy574:
- yyaccept = 0;
- yych = *(marker = ++p);
- if (yych <= 0x7F)
- goto yy569;
- if (yych <= 0xBF)
- goto yy583;
- goto yy569;
- yy575:
- yyaccept = 0;
- yych = *(marker = ++p);
- if (yych <= 0x7F)
- goto yy569;
- if (yych <= 0x9F)
- goto yy583;
- goto yy569;
- yy576:
- yyaccept = 0;
- yych = *(marker = ++p);
- if (yych <= 0x8F)
- goto yy569;
- if (yych <= 0xBF)
- goto yy585;
- goto yy569;
- yy577:
- yyaccept = 0;
- yych = *(marker = ++p);
- if (yych <= 0x7F)
- goto yy569;
- if (yych <= 0xBF)
- goto yy585;
- goto yy569;
- yy578:
- yyaccept = 0;
- yych = *(marker = ++p);
- if (yych <= 0x7F)
- goto yy569;
- if (yych <= 0x8F)
- goto yy585;
- goto yy569;
- yy579:
- yych = *++p;
- yy580:
- if (yybm[0 + yych] & 64) {
- goto yy579;
- }
- if (yych <= 0xEC) {
- if (yych <= 0xC1) {
- if (yych <= '\n')
- goto yy581;
- if (yych <= '?')
- goto yy582;
- } else {
- if (yych <= 0xDF)
- goto yy583;
- if (yych <= 0xE0)
- goto yy584;
- goto yy585;
- }
- } else {
- if (yych <= 0xF0) {
- if (yych <= 0xED)
- goto yy586;
- if (yych <= 0xEF)
- goto yy585;
- goto yy587;
- } else {
- if (yych <= 0xF3)
- goto yy588;
- if (yych <= 0xF4)
- goto yy589;
- }
- }
- yy581:
- p = marker;
- if (yyaccept == 0) {
- goto yy569;
- } else {
- goto yy591;
- }
- yy582:
- yych = *++p;
- if (yybm[0 + yych] & 128) {
- goto yy582;
- }
- if (yych <= 0xDF) {
- if (yych <= '=') {
- if (yych <= 0x00)
- goto yy581;
- if (yych == '\n')
- goto yy581;
- goto yy579;
- } else {
- if (yych <= '>')
- goto yy590;
- if (yych <= 0x7F)
- goto yy579;
- if (yych <= 0xC1)
- goto yy581;
- }
- } else {
- if (yych <= 0xEF) {
- if (yych <= 0xE0)
- goto yy584;
- if (yych == 0xED)
- goto yy586;
- goto yy585;
- } else {
- if (yych <= 0xF0)
- goto yy587;
- if (yych <= 0xF3)
- goto yy588;
- if (yych <= 0xF4)
- goto yy589;
- goto yy581;
- }
- }
- yy583:
- yych = *++p;
- if (yych <= 0x7F)
- goto yy581;
- if (yych <= 0xBF)
- goto yy579;
- goto yy581;
- yy584:
- yych = *++p;
- if (yych <= 0x9F)
- goto yy581;
- if (yych <= 0xBF)
- goto yy583;
- goto yy581;
- yy585:
- yych = *++p;
- if (yych <= 0x7F)
- goto yy581;
- if (yych <= 0xBF)
- goto yy583;
- goto yy581;
- yy586:
- yych = *++p;
- if (yych <= 0x7F)
- goto yy581;
- if (yych <= 0x9F)
- goto yy583;
- goto yy581;
- yy587:
- yych = *++p;
- if (yych <= 0x8F)
- goto yy581;
- if (yych <= 0xBF)
- goto yy585;
- goto yy581;
- yy588:
- yych = *++p;
- if (yych <= 0x7F)
- goto yy581;
- if (yych <= 0xBF)
- goto yy585;
- goto yy581;
- yy589:
- yych = *++p;
- if (yych <= 0x7F)
- goto yy581;
- if (yych <= 0x8F)
- goto yy585;
- goto yy581;
- yy590:
- yyaccept = 1;
- yych = *(marker = ++p);
- if (yybm[0 + yych] & 64) {
- goto yy579;
- }
- if (yych <= 0xEC) {
- if (yych <= 0xC1) {
- if (yych <= '\n')
- goto yy591;
- if (yych <= '?')
- goto yy582;
- } else {
- if (yych <= 0xDF)
- goto yy583;
- if (yych <= 0xE0)
- goto yy584;
- goto yy585;
- }
- } else {
- if (yych <= 0xF0) {
- if (yych <= 0xED)
- goto yy586;
- if (yych <= 0xEF)
- goto yy585;
- goto yy587;
- } else {
- if (yych <= 0xF3)
- goto yy588;
- if (yych <= 0xF4)
- goto yy589;
- }
- }
- yy591 : { return (bufsize_t)(p - start); }
- }
-}
-
-// Try to match an HTML block end line of type 4
-bufsize_t _scan_html_block_end_4(const unsigned char *p) {
- const unsigned char *marker = NULL;
- const unsigned char *start = p;
-
- {
- unsigned char yych;
- unsigned int yyaccept = 0;
- static const unsigned char yybm[] = {
- 0, 128, 128, 128, 128, 128, 128, 128, 128, 128, 0, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 64, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128,
- 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,
- };
- yych = *p;
- if (yybm[0 + yych] & 64) {
- goto yy596;
- }
- if (yych <= 0xE0) {
- if (yych <= '\n') {
- if (yych <= 0x00)
- goto yy593;
- if (yych <= '\t')
- goto yy595;
- } else {
- if (yych <= 0x7F)
- goto yy595;
- if (yych <= 0xC1)
- goto yy593;
- if (yych <= 0xDF)
- goto yy598;
- goto yy599;
- }
- } else {
- if (yych <= 0xEF) {
- if (yych == 0xED)
- goto yy601;
- goto yy600;
- } else {
- if (yych <= 0xF0)
- goto yy602;
- if (yych <= 0xF3)
- goto yy603;
- if (yych <= 0xF4)
- goto yy604;
- }
- }
- yy593:
- ++p;
- yy594 : { return 0; }
- yy595:
- yyaccept = 0;
- yych = *(marker = ++p);
- if (yych <= '\n') {
- if (yych <= 0x00)
- goto yy594;
- if (yych <= '\t')
- goto yy606;
- goto yy594;
- } else {
- if (yych <= 0x7F)
- goto yy606;
- if (yych <= 0xC1)
- goto yy594;
- if (yych <= 0xF4)
- goto yy606;
- goto yy594;
- }
- yy596:
- yyaccept = 1;
- yych = *(marker = ++p);
- if (yybm[0 + yych] & 128) {
- goto yy605;
- }
- if (yych <= 0xEC) {
- if (yych <= 0xC1) {
- if (yych <= '\n')
- goto yy597;
- if (yych <= '>')
- goto yy596;
- } else {
- if (yych <= 0xDF)
- goto yy608;
- if (yych <= 0xE0)
- goto yy609;
- goto yy610;
- }
- } else {
- if (yych <= 0xF0) {
- if (yych <= 0xED)
- goto yy611;
- if (yych <= 0xEF)
- goto yy610;
- goto yy612;
- } else {
- if (yych <= 0xF3)
- goto yy613;
- if (yych <= 0xF4)
- goto yy614;
- }
- }
- yy597 : { return (bufsize_t)(p - start); }
- yy598:
- yyaccept = 0;
- yych = *(marker = ++p);
- if (yych <= 0x7F)
- goto yy594;
- if (yych <= 0xBF)
- goto yy605;
- goto yy594;
- yy599:
- yyaccept = 0;
- yych = *(marker = ++p);
- if (yych <= 0x9F)
- goto yy594;
- if (yych <= 0xBF)
- goto yy608;
- goto yy594;
- yy600:
- yyaccept = 0;
- yych = *(marker = ++p);
- if (yych <= 0x7F)
- goto yy594;
- if (yych <= 0xBF)
- goto yy608;
- goto yy594;
- yy601:
- yyaccept = 0;
- yych = *(marker = ++p);
- if (yych <= 0x7F)
- goto yy594;
- if (yych <= 0x9F)
- goto yy608;
- goto yy594;
- yy602:
- yyaccept = 0;
- yych = *(marker = ++p);
- if (yych <= 0x8F)
- goto yy594;
- if (yych <= 0xBF)
- goto yy610;
- goto yy594;
- yy603:
- yyaccept = 0;
- yych = *(marker = ++p);
- if (yych <= 0x7F)
- goto yy594;
- if (yych <= 0xBF)
- goto yy610;
- goto yy594;
- yy604:
- yyaccept = 0;
- yych = *(marker = ++p);
- if (yych <= 0x7F)
- goto yy594;
- if (yych <= 0x8F)
- goto yy610;
- goto yy594;
- yy605:
- yych = *++p;
- yy606:
- if (yybm[0 + yych] & 128) {
- goto yy605;
- }
- if (yych <= 0xEC) {
- if (yych <= 0xC1) {
- if (yych <= '\n')
- goto yy607;
- if (yych <= '>')
- goto yy596;
- } else {
- if (yych <= 0xDF)
- goto yy608;
- if (yych <= 0xE0)
- goto yy609;
- goto yy610;
- }
- } else {
- if (yych <= 0xF0) {
- if (yych <= 0xED)
- goto yy611;
- if (yych <= 0xEF)
- goto yy610;
- goto yy612;
- } else {
- if (yych <= 0xF3)
- goto yy613;
- if (yych <= 0xF4)
- goto yy614;
- }
- }
- yy607:
- p = marker;
- if (yyaccept == 0) {
- goto yy594;
- } else {
- goto yy597;
- }
- yy608:
- yych = *++p;
- if (yych <= 0x7F)
- goto yy607;
- if (yych <= 0xBF)
- goto yy605;
- goto yy607;
- yy609:
- yych = *++p;
- if (yych <= 0x9F)
- goto yy607;
- if (yych <= 0xBF)
- goto yy608;
- goto yy607;
- yy610:
- yych = *++p;
- if (yych <= 0x7F)
- goto yy607;
- if (yych <= 0xBF)
- goto yy608;
- goto yy607;
- yy611:
- yych = *++p;
- if (yych <= 0x7F)
- goto yy607;
- if (yych <= 0x9F)
- goto yy608;
- goto yy607;
- yy612:
- yych = *++p;
- if (yych <= 0x8F)
- goto yy607;
- if (yych <= 0xBF)
- goto yy610;
- goto yy607;
- yy613:
- yych = *++p;
- if (yych <= 0x7F)
- goto yy607;
- if (yych <= 0xBF)
- goto yy610;
- goto yy607;
- yy614:
- yych = *++p;
- if (yych <= 0x7F)
- goto yy607;
- if (yych <= 0x8F)
- goto yy610;
- goto yy607;
- }
-}
-
-// Try to match an HTML block end line of type 5
-bufsize_t _scan_html_block_end_5(const unsigned char *p) {
- const unsigned char *marker = NULL;
- const unsigned char *start = p;
-
- {
- unsigned char yych;
- unsigned int yyaccept = 0;
- static const unsigned char yybm[] = {
- 0, 64, 64, 64, 64, 64, 64, 64, 64, 64, 0, 64, 64, 64, 64, 64, 64, 64,
- 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
- 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
- 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
- 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
- 64, 64, 64, 128, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
- 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
- 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,
- };
- yych = *p;
- if (yych <= 0xDF) {
- if (yych <= '\\') {
- if (yych <= 0x00)
- goto yy616;
- if (yych != '\n')
- goto yy618;
- } else {
- if (yych <= ']')
- goto yy619;
- if (yych <= 0x7F)
- goto yy618;
- if (yych >= 0xC2)
- goto yy620;
- }
- } else {
- if (yych <= 0xEF) {
- if (yych <= 0xE0)
- goto yy621;
- if (yych == 0xED)
- goto yy623;
- goto yy622;
- } else {
- if (yych <= 0xF0)
- goto yy624;
- if (yych <= 0xF3)
- goto yy625;
- if (yych <= 0xF4)
- goto yy626;
- }
- }
- yy616:
- ++p;
- yy617 : { return 0; }
- yy618:
- yyaccept = 0;
- yych = *(marker = ++p);
- if (yych <= '\n') {
- if (yych <= 0x00)
- goto yy617;
- if (yych <= '\t')
- goto yy628;
- goto yy617;
- } else {
- if (yych <= 0x7F)
- goto yy628;
- if (yych <= 0xC1)
- goto yy617;
- if (yych <= 0xF4)
- goto yy628;
- goto yy617;
- }
- yy619:
- yyaccept = 0;
- yych = *(marker = ++p);
- if (yybm[0 + yych] & 128) {
- goto yy638;
- }
- if (yych <= '\n') {
- if (yych <= 0x00)
- goto yy617;
- if (yych <= '\t')
- goto yy628;
- goto yy617;
- } else {
- if (yych <= 0x7F)
- goto yy628;
- if (yych <= 0xC1)
- goto yy617;
- if (yych <= 0xF4)
- goto yy628;
- goto yy617;
- }
- yy620:
- yyaccept = 0;
- yych = *(marker = ++p);
- if (yych <= 0x7F)
- goto yy617;
- if (yych <= 0xBF)
- goto yy627;
- goto yy617;
- yy621:
- yyaccept = 0;
- yych = *(marker = ++p);
- if (yych <= 0x9F)
- goto yy617;
- if (yych <= 0xBF)
- goto yy631;
- goto yy617;
- yy622:
- yyaccept = 0;
- yych = *(marker = ++p);
- if (yych <= 0x7F)
- goto yy617;
- if (yych <= 0xBF)
- goto yy631;
- goto yy617;
- yy623:
- yyaccept = 0;
- yych = *(marker = ++p);
- if (yych <= 0x7F)
- goto yy617;
- if (yych <= 0x9F)
- goto yy631;
- goto yy617;
- yy624:
- yyaccept = 0;
- yych = *(marker = ++p);
- if (yych <= 0x8F)
- goto yy617;
- if (yych <= 0xBF)
- goto yy633;
- goto yy617;
- yy625:
- yyaccept = 0;
- yych = *(marker = ++p);
- if (yych <= 0x7F)
- goto yy617;
- if (yych <= 0xBF)
- goto yy633;
- goto yy617;
- yy626:
- yyaccept = 0;
- yych = *(marker = ++p);
- if (yych <= 0x7F)
- goto yy617;
- if (yych <= 0x8F)
- goto yy633;
- goto yy617;
- yy627:
- yych = *++p;
- yy628:
- if (yybm[0 + yych] & 64) {
- goto yy627;
- }
- if (yych <= 0xEC) {
- if (yych <= 0xC1) {
- if (yych <= '\n')
- goto yy629;
- if (yych <= ']')
- goto yy630;
- } else {
- if (yych <= 0xDF)
- goto yy631;
- if (yych <= 0xE0)
- goto yy632;
- goto yy633;
- }
- } else {
- if (yych <= 0xF0) {
- if (yych <= 0xED)
- goto yy634;
- if (yych <= 0xEF)
- goto yy633;
- goto yy635;
- } else {
- if (yych <= 0xF3)
- goto yy636;
- if (yych <= 0xF4)
- goto yy637;
- }
- }
- yy629:
- p = marker;
- if (yyaccept == 0) {
- goto yy617;
- } else {
- goto yy640;
- }
- yy630:
- yych = *++p;
- if (yybm[0 + yych] & 64) {
- goto yy627;
- }
- if (yych <= 0xEC) {
- if (yych <= 0xC1) {
- if (yych <= '\n')
- goto yy629;
- if (yych <= ']')
- goto yy638;
- goto yy629;
- } else {
- if (yych <= 0xDF)
- goto yy631;
- if (yych <= 0xE0)
- goto yy632;
- goto yy633;
- }
- } else {
- if (yych <= 0xF0) {
- if (yych <= 0xED)
- goto yy634;
- if (yych <= 0xEF)
- goto yy633;
- goto yy635;
- } else {
- if (yych <= 0xF3)
- goto yy636;
- if (yych <= 0xF4)
- goto yy637;
- goto yy629;
- }
- }
- yy631:
- yych = *++p;
- if (yych <= 0x7F)
- goto yy629;
- if (yych <= 0xBF)
- goto yy627;
- goto yy629;
- yy632:
- yych = *++p;
- if (yych <= 0x9F)
- goto yy629;
- if (yych <= 0xBF)
- goto yy631;
- goto yy629;
- yy633:
- yych = *++p;
- if (yych <= 0x7F)
- goto yy629;
- if (yych <= 0xBF)
- goto yy631;
- goto yy629;
- yy634:
- yych = *++p;
- if (yych <= 0x7F)
- goto yy629;
- if (yych <= 0x9F)
- goto yy631;
- goto yy629;
- yy635:
- yych = *++p;
- if (yych <= 0x8F)
- goto yy629;
- if (yych <= 0xBF)
- goto yy633;
- goto yy629;
- yy636:
- yych = *++p;
- if (yych <= 0x7F)
- goto yy629;
- if (yych <= 0xBF)
- goto yy633;
- goto yy629;
- yy637:
- yych = *++p;
- if (yych <= 0x7F)
- goto yy629;
- if (yych <= 0x8F)
- goto yy633;
- goto yy629;
- yy638:
- yych = *++p;
- if (yybm[0 + yych] & 128) {
- goto yy638;
- }
- if (yych <= 0xDF) {
- if (yych <= '=') {
- if (yych <= 0x00)
- goto yy629;
- if (yych == '\n')
- goto yy629;
- goto yy627;
- } else {
- if (yych <= '>')
- goto yy639;
- if (yych <= 0x7F)
- goto yy627;
- if (yych <= 0xC1)
- goto yy629;
- goto yy631;
- }
- } else {
- if (yych <= 0xEF) {
- if (yych <= 0xE0)
- goto yy632;
- if (yych == 0xED)
- goto yy634;
- goto yy633;
- } else {
- if (yych <= 0xF0)
- goto yy635;
- if (yych <= 0xF3)
- goto yy636;
- if (yych <= 0xF4)
- goto yy637;
- goto yy629;
- }
- }
- yy639:
- yyaccept = 1;
- yych = *(marker = ++p);
- if (yybm[0 + yych] & 64) {
- goto yy627;
- }
- if (yych <= 0xEC) {
- if (yych <= 0xC1) {
- if (yych <= '\n')
- goto yy640;
- if (yych <= ']')
- goto yy630;
- } else {
- if (yych <= 0xDF)
- goto yy631;
- if (yych <= 0xE0)
- goto yy632;
- goto yy633;
- }
- } else {
- if (yych <= 0xF0) {
- if (yych <= 0xED)
- goto yy634;
- if (yych <= 0xEF)
- goto yy633;
- goto yy635;
- } else {
- if (yych <= 0xF3)
- goto yy636;
- if (yych <= 0xF4)
- goto yy637;
- }
- }
- yy640 : { return (bufsize_t)(p - start); }
- }
-}
-
-// Try to match a link title (in single quotes, in double quotes, or
-// in parentheses), returning number of chars matched. Allow one
-// level of internal nesting (quotes within quotes).
-bufsize_t _scan_link_title(const unsigned char *p) {
- const unsigned char *marker = NULL;
- const unsigned char *start = p;
-
- {
- unsigned char yych;
- unsigned int yyaccept = 0;
- static const unsigned char yybm[] = {
- 0, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208,
- 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208,
- 208, 208, 208, 208, 208, 208, 192, 208, 208, 208, 208, 144, 80, 80,
- 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208,
- 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208,
- 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208,
- 208, 208, 208, 208, 208, 208, 208, 208, 32, 208, 208, 208, 208, 208,
- 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208,
- 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208,
- 208, 208, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,
- };
- yych = *p;
- if (yych <= '&') {
- if (yych == '"')
- goto yy643;
- } else {
- if (yych <= '\'')
- goto yy644;
- if (yych <= '(')
- goto yy645;
- }
- ++p;
- yy642 : { return 0; }
- yy643:
- yyaccept = 0;
- yych = *(marker = ++p);
- if (yych <= 0x00)
- goto yy642;
- if (yych <= 0x7F)
- goto yy647;
- if (yych <= 0xC1)
- goto yy642;
- if (yych <= 0xF4)
- goto yy647;
- goto yy642;
- yy644:
- yyaccept = 0;
- yych = *(marker = ++p);
- if (yych <= 0x00)
- goto yy642;
- if (yych <= 0x7F)
- goto yy660;
- if (yych <= 0xC1)
- goto yy642;
- if (yych <= 0xF4)
- goto yy660;
- goto yy642;
- yy645:
- yyaccept = 0;
- yych = *(marker = ++p);
- if (yych <= '(') {
- if (yych <= 0x00)
- goto yy642;
- if (yych <= '\'')
- goto yy672;
- goto yy642;
- } else {
- if (yych <= 0x7F)
- goto yy672;
- if (yych <= 0xC1)
- goto yy642;
- if (yych <= 0xF4)
- goto yy672;
- goto yy642;
- }
- yy646:
- yych = *++p;
- yy647:
- if (yybm[0 + yych] & 16) {
- goto yy646;
- }
- if (yych <= 0xE0) {
- if (yych <= '\\') {
- if (yych <= 0x00)
- goto yy648;
- if (yych <= '"')
- goto yy649;
- goto yy651;
- } else {
- if (yych <= 0xC1)
- goto yy648;
- if (yych <= 0xDF)
- goto yy652;
- goto yy653;
- }
- } else {
- if (yych <= 0xEF) {
- if (yych == 0xED)
- goto yy655;
- goto yy654;
- } else {
- if (yych <= 0xF0)
- goto yy656;
- if (yych <= 0xF3)
- goto yy657;
- if (yych <= 0xF4)
- goto yy658;
- }
- }
- yy648:
- p = marker;
- if (yyaccept <= 1) {
- if (yyaccept == 0) {
- goto yy642;
- } else {
- goto yy650;
- }
- } else {
- if (yyaccept == 2) {
- goto yy662;
- } else {
- goto yy674;
- }
- }
- yy649:
- ++p;
- yy650 : { return (bufsize_t)(p - start); }
- yy651:
- yych = *++p;
- if (yybm[0 + yych] & 16) {
- goto yy646;
- }
- if (yych <= 0xE0) {
- if (yych <= '\\') {
- if (yych <= 0x00)
- goto yy648;
- if (yych <= '"')
- goto yy683;
- goto yy651;
- } else {
- if (yych <= 0xC1)
- goto yy648;
- if (yych >= 0xE0)
- goto yy653;
- }
- } else {
- if (yych <= 0xEF) {
- if (yych == 0xED)
- goto yy655;
- goto yy654;
- } else {
- if (yych <= 0xF0)
- goto yy656;
- if (yych <= 0xF3)
- goto yy657;
- if (yych <= 0xF4)
- goto yy658;
- goto yy648;
- }
- }
- yy652:
- yych = *++p;
- if (yych <= 0x7F)
- goto yy648;
- if (yych <= 0xBF)
- goto yy646;
- goto yy648;
- yy653:
- yych = *++p;
- if (yych <= 0x9F)
- goto yy648;
- if (yych <= 0xBF)
- goto yy652;
- goto yy648;
- yy654:
- yych = *++p;
- if (yych <= 0x7F)
- goto yy648;
- if (yych <= 0xBF)
- goto yy652;
- goto yy648;
- yy655:
- yych = *++p;
- if (yych <= 0x7F)
- goto yy648;
- if (yych <= 0x9F)
- goto yy652;
- goto yy648;
- yy656:
- yych = *++p;
- if (yych <= 0x8F)
- goto yy648;
- if (yych <= 0xBF)
- goto yy654;
- goto yy648;
- yy657:
- yych = *++p;
- if (yych <= 0x7F)
- goto yy648;
- if (yych <= 0xBF)
- goto yy654;
- goto yy648;
- yy658:
- yych = *++p;
- if (yych <= 0x7F)
- goto yy648;
- if (yych <= 0x8F)
- goto yy654;
- goto yy648;
- yy659:
- yych = *++p;
- yy660:
- if (yybm[0 + yych] & 64) {
- goto yy659;
- }
- if (yych <= 0xE0) {
- if (yych <= '\\') {
- if (yych <= 0x00)
- goto yy648;
- if (yych >= '(')
- goto yy663;
- } else {
- if (yych <= 0xC1)
- goto yy648;
- if (yych <= 0xDF)
- goto yy664;
- goto yy665;
- }
- } else {
- if (yych <= 0xEF) {
- if (yych == 0xED)
- goto yy667;
- goto yy666;
- } else {
- if (yych <= 0xF0)
- goto yy668;
- if (yych <= 0xF3)
- goto yy669;
- if (yych <= 0xF4)
- goto yy670;
- goto yy648;
- }
- }
- yy661:
- ++p;
- yy662 : { return (bufsize_t)(p - start); }
- yy663:
- yych = *++p;
- if (yybm[0 + yych] & 64) {
- goto yy659;
- }
- if (yych <= 0xE0) {
- if (yych <= '\\') {
- if (yych <= 0x00)
- goto yy648;
- if (yych <= '\'')
- goto yy684;
- goto yy663;
- } else {
- if (yych <= 0xC1)
- goto yy648;
- if (yych >= 0xE0)
- goto yy665;
- }
- } else {
- if (yych <= 0xEF) {
- if (yych == 0xED)
- goto yy667;
- goto yy666;
- } else {
- if (yych <= 0xF0)
- goto yy668;
- if (yych <= 0xF3)
- goto yy669;
- if (yych <= 0xF4)
- goto yy670;
- goto yy648;
- }
- }
- yy664:
- yych = *++p;
- if (yych <= 0x7F)
- goto yy648;
- if (yych <= 0xBF)
- goto yy659;
- goto yy648;
- yy665:
- yych = *++p;
- if (yych <= 0x9F)
- goto yy648;
- if (yych <= 0xBF)
- goto yy664;
- goto yy648;
- yy666:
- yych = *++p;
- if (yych <= 0x7F)
- goto yy648;
- if (yych <= 0xBF)
- goto yy664;
- goto yy648;
- yy667:
- yych = *++p;
- if (yych <= 0x7F)
- goto yy648;
- if (yych <= 0x9F)
- goto yy664;
- goto yy648;
- yy668:
- yych = *++p;
- if (yych <= 0x8F)
- goto yy648;
- if (yych <= 0xBF)
- goto yy666;
- goto yy648;
- yy669:
- yych = *++p;
- if (yych <= 0x7F)
- goto yy648;
- if (yych <= 0xBF)
- goto yy666;
- goto yy648;
- yy670:
- yych = *++p;
- if (yych <= 0x7F)
- goto yy648;
- if (yych <= 0x8F)
- goto yy666;
- goto yy648;
- yy671:
- yych = *++p;
- yy672:
- if (yybm[0 + yych] & 128) {
- goto yy671;
- }
- if (yych <= 0xE0) {
- if (yych <= '\\') {
- if (yych <= '(')
- goto yy648;
- if (yych >= '*')
- goto yy675;
- } else {
- if (yych <= 0xC1)
- goto yy648;
- if (yych <= 0xDF)
- goto yy676;
- goto yy677;
- }
- } else {
- if (yych <= 0xEF) {
- if (yych == 0xED)
- goto yy679;
- goto yy678;
- } else {
- if (yych <= 0xF0)
- goto yy680;
- if (yych <= 0xF3)
- goto yy681;
- if (yych <= 0xF4)
- goto yy682;
- goto yy648;
- }
- }
- yy673:
- ++p;
- yy674 : { return (bufsize_t)(p - start); }
- yy675:
- yych = *++p;
- if (yych <= 0xDF) {
- if (yych <= '[') {
- if (yych <= 0x00)
- goto yy648;
- if (yych == ')')
- goto yy685;
- goto yy671;
- } else {
- if (yych <= '\\')
- goto yy675;
- if (yych <= 0x7F)
- goto yy671;
- if (yych <= 0xC1)
- goto yy648;
- }
- } else {
- if (yych <= 0xEF) {
- if (yych <= 0xE0)
- goto yy677;
- if (yych == 0xED)
- goto yy679;
- goto yy678;
- } else {
- if (yych <= 0xF0)
- goto yy680;
- if (yych <= 0xF3)
- goto yy681;
- if (yych <= 0xF4)
- goto yy682;
- goto yy648;
- }
- }
- yy676:
- yych = *++p;
- if (yych <= 0x7F)
- goto yy648;
- if (yych <= 0xBF)
- goto yy671;
- goto yy648;
- yy677:
- yych = *++p;
- if (yych <= 0x9F)
- goto yy648;
- if (yych <= 0xBF)
- goto yy676;
- goto yy648;
- yy678:
- yych = *++p;
- if (yych <= 0x7F)
- goto yy648;
- if (yych <= 0xBF)
- goto yy676;
- goto yy648;
- yy679:
- yych = *++p;
- if (yych <= 0x7F)
- goto yy648;
- if (yych <= 0x9F)
- goto yy676;
- goto yy648;
- yy680:
- yych = *++p;
- if (yych <= 0x8F)
- goto yy648;
- if (yych <= 0xBF)
- goto yy678;
- goto yy648;
- yy681:
- yych = *++p;
- if (yych <= 0x7F)
- goto yy648;
- if (yych <= 0xBF)
- goto yy678;
- goto yy648;
- yy682:
- yych = *++p;
- if (yych <= 0x7F)
- goto yy648;
- if (yych <= 0x8F)
- goto yy678;
- goto yy648;
- yy683:
- yyaccept = 1;
- yych = *(marker = ++p);
- if (yybm[0 + yych] & 16) {
- goto yy646;
- }
- if (yych <= 0xE0) {
- if (yych <= '\\') {
- if (yych <= 0x00)
- goto yy650;
- if (yych <= '"')
- goto yy649;
- goto yy651;
- } else {
- if (yych <= 0xC1)
- goto yy650;
- if (yych <= 0xDF)
- goto yy652;
- goto yy653;
- }
- } else {
- if (yych <= 0xEF) {
- if (yych == 0xED)
- goto yy655;
- goto yy654;
- } else {
- if (yych <= 0xF0)
- goto yy656;
- if (yych <= 0xF3)
- goto yy657;
- if (yych <= 0xF4)
- goto yy658;
- goto yy650;
- }
- }
- yy684:
- yyaccept = 2;
- yych = *(marker = ++p);
- if (yybm[0 + yych] & 64) {
- goto yy659;
- }
- if (yych <= 0xE0) {
- if (yych <= '\\') {
- if (yych <= 0x00)
- goto yy662;
- if (yych <= '\'')
- goto yy661;
- goto yy663;
- } else {
- if (yych <= 0xC1)
- goto yy662;
- if (yych <= 0xDF)
- goto yy664;
- goto yy665;
- }
- } else {
- if (yych <= 0xEF) {
- if (yych == 0xED)
- goto yy667;
- goto yy666;
- } else {
- if (yych <= 0xF0)
- goto yy668;
- if (yych <= 0xF3)
- goto yy669;
- if (yych <= 0xF4)
- goto yy670;
- goto yy662;
- }
- }
- yy685:
- yyaccept = 3;
- yych = *(marker = ++p);
- if (yybm[0 + yych] & 128) {
- goto yy671;
- }
- if (yych <= 0xE0) {
- if (yych <= '\\') {
- if (yych <= '(')
- goto yy674;
- if (yych <= ')')
- goto yy673;
- goto yy675;
- } else {
- if (yych <= 0xC1)
- goto yy674;
- if (yych <= 0xDF)
- goto yy676;
- goto yy677;
- }
- } else {
- if (yych <= 0xEF) {
- if (yych == 0xED)
- goto yy679;
- goto yy678;
- } else {
- if (yych <= 0xF0)
- goto yy680;
- if (yych <= 0xF3)
- goto yy681;
- if (yych <= 0xF4)
- goto yy682;
- goto yy674;
- }
- }
- }
-}
-
-// Match space characters, including newlines.
-bufsize_t _scan_spacechars(const unsigned char *p) {
- const unsigned char *start = p;
-
- {
- unsigned char yych;
- static const unsigned char yybm[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 128, 128, 128, 128, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- };
- yych = *p;
- if (yybm[0 + yych] & 128) {
- goto yy687;
- }
- ++p;
- { return 0; }
- yy687:
- yych = *++p;
- if (yybm[0 + yych] & 128) {
- goto yy687;
- }
- { return (bufsize_t)(p - start); }
- }
-}
-
-// Match ATX heading start.
-bufsize_t _scan_atx_heading_start(const unsigned char *p) {
- const unsigned char *marker = NULL;
- const unsigned char *start = p;
-
- {
- unsigned char yych;
- static const unsigned char yybm[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- };
- yych = *p;
- if (yych == '#')
- goto yy690;
- ++p;
- yy689 : { return 0; }
- yy690:
- yych = *(marker = ++p);
- if (yybm[0 + yych] & 128) {
- goto yy691;
- }
- if (yych <= '\f') {
- if (yych <= 0x08)
- goto yy689;
- if (yych <= '\n')
- goto yy693;
- goto yy689;
- } else {
- if (yych <= '\r')
- goto yy693;
- if (yych == '#')
- goto yy694;
- goto yy689;
- }
- yy691:
- yych = *++p;
- if (yybm[0 + yych] & 128) {
- goto yy691;
- }
- yy692 : { return (bufsize_t)(p - start); }
- yy693:
- ++p;
- goto yy692;
- yy694:
- yych = *++p;
- if (yybm[0 + yych] & 128) {
- goto yy691;
- }
- if (yych <= '\f') {
- if (yych <= 0x08)
- goto yy695;
- if (yych <= '\n')
- goto yy693;
- } else {
- if (yych <= '\r')
- goto yy693;
- if (yych == '#')
- goto yy696;
- }
- yy695:
- p = marker;
- goto yy689;
- yy696:
- yych = *++p;
- if (yybm[0 + yych] & 128) {
- goto yy691;
- }
- if (yych <= '\f') {
- if (yych <= 0x08)
- goto yy695;
- if (yych <= '\n')
- goto yy693;
- goto yy695;
- } else {
- if (yych <= '\r')
- goto yy693;
- if (yych != '#')
- goto yy695;
- }
- yych = *++p;
- if (yybm[0 + yych] & 128) {
- goto yy691;
- }
- if (yych <= '\f') {
- if (yych <= 0x08)
- goto yy695;
- if (yych <= '\n')
- goto yy693;
- goto yy695;
- } else {
- if (yych <= '\r')
- goto yy693;
- if (yych != '#')
- goto yy695;
- }
- yych = *++p;
- if (yybm[0 + yych] & 128) {
- goto yy691;
- }
- if (yych <= '\f') {
- if (yych <= 0x08)
- goto yy695;
- if (yych <= '\n')
- goto yy693;
- goto yy695;
- } else {
- if (yych <= '\r')
- goto yy693;
- if (yych != '#')
- goto yy695;
- }
- yych = *++p;
- if (yybm[0 + yych] & 128) {
- goto yy691;
- }
- if (yych <= 0x08)
- goto yy695;
- if (yych <= '\n')
- goto yy693;
- if (yych == '\r')
- goto yy693;
- goto yy695;
- }
-}
-
-// Match setext heading line. Return 1 for level-1 heading,
-// 2 for level-2, 0 for no match.
-bufsize_t _scan_setext_heading_line(const unsigned char *p) {
- const unsigned char *marker = NULL;
-
- {
- unsigned char yych;
- static const unsigned char yybm[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- };
- yych = *p;
- if (yych == '-')
- goto yy699;
- if (yych == '=')
- goto yy700;
- ++p;
- yy698 : { return 0; }
- yy699:
- yych = *(marker = ++p);
- if (yybm[0 + yych] & 64) {
- goto yy705;
- }
- if (yych <= '\f') {
- if (yych <= 0x08)
- goto yy698;
- if (yych <= '\n')
- goto yy702;
- goto yy698;
- } else {
- if (yych <= '\r')
- goto yy702;
- if (yych == ' ')
- goto yy702;
- goto yy698;
- }
- yy700:
- yych = *(marker = ++p);
- if (yybm[0 + yych] & 128) {
- goto yy709;
- }
- if (yych <= '\f') {
- if (yych <= 0x08)
- goto yy698;
- if (yych <= '\n')
- goto yy707;
- goto yy698;
- } else {
- if (yych <= '\r')
- goto yy707;
- if (yych == ' ')
- goto yy707;
- goto yy698;
- }
- yy701:
- yych = *++p;
- yy702:
- if (yybm[0 + yych] & 32) {
- goto yy701;
- }
- if (yych <= 0x08)
- goto yy703;
- if (yych <= '\n')
- goto yy704;
- if (yych == '\r')
- goto yy704;
- yy703:
- p = marker;
- goto yy698;
- yy704:
- ++p;
- { return 2; }
- yy705:
- yych = *++p;
- if (yybm[0 + yych] & 32) {
- goto yy701;
- }
- if (yych <= '\f') {
- if (yych <= 0x08)
- goto yy703;
- if (yych <= '\n')
- goto yy704;
- goto yy703;
- } else {
- if (yych <= '\r')
- goto yy704;
- if (yych == '-')
- goto yy705;
- goto yy703;
- }
- yy706:
- yych = *++p;
- yy707:
- if (yych <= '\f') {
- if (yych <= 0x08)
- goto yy703;
- if (yych <= '\t')
- goto yy706;
- if (yych >= '\v')
- goto yy703;
- } else {
- if (yych <= '\r')
- goto yy708;
- if (yych == ' ')
- goto yy706;
- goto yy703;
- }
- yy708:
- ++p;
- { return 1; }
- yy709:
- yych = *++p;
- if (yybm[0 + yych] & 128) {
- goto yy709;
- }
- if (yych <= '\f') {
- if (yych <= 0x08)
- goto yy703;
- if (yych <= '\t')
- goto yy706;
- if (yych <= '\n')
- goto yy708;
- goto yy703;
- } else {
- if (yych <= '\r')
- goto yy708;
- if (yych == ' ')
- goto yy706;
- goto yy703;
- }
- }
-}
-
-// Scan an opening code fence.
-bufsize_t _scan_open_code_fence(const unsigned char *p) {
- const unsigned char *marker = NULL;
- const unsigned char *start = p;
-
- {
- unsigned char yych;
- static const unsigned char yybm[] = {
- 0, 192, 192, 192, 192, 192, 192, 192, 192, 192, 0, 192, 192, 0,
- 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192,
- 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192,
- 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192,
- 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192,
- 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192,
- 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 144, 192,
- 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192,
- 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192,
- 224, 192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,
- };
- yych = *p;
- if (yych == '`')
- goto yy712;
- if (yych == '~')
- goto yy713;
- ++p;
- yy711 : { return 0; }
- yy712:
- yych = *(marker = ++p);
- if (yych == '`')
- goto yy714;
- goto yy711;
- yy713:
- yych = *(marker = ++p);
- if (yych == '~')
- goto yy716;
- goto yy711;
- yy714:
- yych = *++p;
- if (yybm[0 + yych] & 16) {
- goto yy717;
- }
- yy715:
- p = marker;
- goto yy711;
- yy716:
- yych = *++p;
- if (yybm[0 + yych] & 32) {
- goto yy718;
- }
- goto yy715;
- yy717:
- yych = *++p;
- if (yybm[0 + yych] & 16) {
- goto yy717;
- }
- if (yych <= 0xDF) {
- if (yych <= '\f') {
- if (yych <= 0x00)
- goto yy715;
- if (yych == '\n') {
- marker = p;
- goto yy720;
- }
- marker = p;
- goto yy719;
- } else {
- if (yych <= '\r') {
- marker = p;
- goto yy720;
- }
- if (yych <= 0x7F) {
- marker = p;
- goto yy719;
- }
- if (yych <= 0xC1)
- goto yy715;
- marker = p;
- goto yy721;
- }
- } else {
- if (yych <= 0xEF) {
- if (yych <= 0xE0) {
- marker = p;
- goto yy722;
- }
- if (yych == 0xED) {
- marker = p;
- goto yy724;
- }
- marker = p;
- goto yy723;
- } else {
- if (yych <= 0xF0) {
- marker = p;
- goto yy725;
- }
- if (yych <= 0xF3) {
- marker = p;
- goto yy726;
- }
- if (yych <= 0xF4) {
- marker = p;
- goto yy727;
- }
- goto yy715;
- }
- }
- yy718:
- yych = *++p;
- if (yybm[0 + yych] & 32) {
- goto yy718;
- }
- if (yych <= 0xDF) {
- if (yych <= '\f') {
- if (yych <= 0x00)
- goto yy715;
- if (yych == '\n') {
- marker = p;
- goto yy729;
- }
- marker = p;
- goto yy728;
- } else {
- if (yych <= '\r') {
- marker = p;
- goto yy729;
- }
- if (yych <= 0x7F) {
- marker = p;
- goto yy728;
- }
- if (yych <= 0xC1)
- goto yy715;
- marker = p;
- goto yy730;
- }
- } else {
- if (yych <= 0xEF) {
- if (yych <= 0xE0) {
- marker = p;
- goto yy731;
- }
- if (yych == 0xED) {
- marker = p;
- goto yy733;
- }
- marker = p;
- goto yy732;
- } else {
- if (yych <= 0xF0) {
- marker = p;
- goto yy734;
- }
- if (yych <= 0xF3) {
- marker = p;
- goto yy735;
- }
- if (yych <= 0xF4) {
- marker = p;
- goto yy736;
- }
- goto yy715;
- }
- }
- yy719:
- yych = *++p;
- if (yybm[0 + yych] & 64) {
- goto yy719;
- }
- if (yych <= 0xEC) {
- if (yych <= 0xC1) {
- if (yych <= 0x00)
- goto yy715;
- if (yych >= 0x0E)
- goto yy715;
- } else {
- if (yych <= 0xDF)
- goto yy721;
- if (yych <= 0xE0)
- goto yy722;
- goto yy723;
- }
- } else {
- if (yych <= 0xF0) {
- if (yych <= 0xED)
- goto yy724;
- if (yych <= 0xEF)
- goto yy723;
- goto yy725;
- } else {
- if (yych <= 0xF3)
- goto yy726;
- if (yych <= 0xF4)
- goto yy727;
- goto yy715;
- }
- }
- yy720:
- ++p;
- p = marker;
- { return (bufsize_t)(p - start); }
- yy721:
- yych = *++p;
- if (yych <= 0x7F)
- goto yy715;
- if (yych <= 0xBF)
- goto yy719;
- goto yy715;
- yy722:
- yych = *++p;
- if (yych <= 0x9F)
- goto yy715;
- if (yych <= 0xBF)
- goto yy721;
- goto yy715;
- yy723:
- yych = *++p;
- if (yych <= 0x7F)
- goto yy715;
- if (yych <= 0xBF)
- goto yy721;
- goto yy715;
- yy724:
- yych = *++p;
- if (yych <= 0x7F)
- goto yy715;
- if (yych <= 0x9F)
- goto yy721;
- goto yy715;
- yy725:
- yych = *++p;
- if (yych <= 0x8F)
- goto yy715;
- if (yych <= 0xBF)
- goto yy723;
- goto yy715;
- yy726:
- yych = *++p;
- if (yych <= 0x7F)
- goto yy715;
- if (yych <= 0xBF)
- goto yy723;
- goto yy715;
- yy727:
- yych = *++p;
- if (yych <= 0x7F)
- goto yy715;
- if (yych <= 0x8F)
- goto yy723;
- goto yy715;
- yy728:
- yych = *++p;
- if (yybm[0 + yych] & 128) {
- goto yy728;
- }
- if (yych <= 0xEC) {
- if (yych <= 0xC1) {
- if (yych <= 0x00)
- goto yy715;
- if (yych >= 0x0E)
- goto yy715;
- } else {
- if (yych <= 0xDF)
- goto yy730;
- if (yych <= 0xE0)
- goto yy731;
- goto yy732;
- }
- } else {
- if (yych <= 0xF0) {
- if (yych <= 0xED)
- goto yy733;
- if (yych <= 0xEF)
- goto yy732;
- goto yy734;
- } else {
- if (yych <= 0xF3)
- goto yy735;
- if (yych <= 0xF4)
- goto yy736;
- goto yy715;
- }
- }
- yy729:
- ++p;
- p = marker;
- { return (bufsize_t)(p - start); }
- yy730:
- yych = *++p;
- if (yych <= 0x7F)
- goto yy715;
- if (yych <= 0xBF)
- goto yy728;
- goto yy715;
- yy731:
- yych = *++p;
- if (yych <= 0x9F)
- goto yy715;
- if (yych <= 0xBF)
- goto yy730;
- goto yy715;
- yy732:
- yych = *++p;
- if (yych <= 0x7F)
- goto yy715;
- if (yych <= 0xBF)
- goto yy730;
- goto yy715;
- yy733:
- yych = *++p;
- if (yych <= 0x7F)
- goto yy715;
- if (yych <= 0x9F)
- goto yy730;
- goto yy715;
- yy734:
- yych = *++p;
- if (yych <= 0x8F)
- goto yy715;
- if (yych <= 0xBF)
- goto yy732;
- goto yy715;
- yy735:
- yych = *++p;
- if (yych <= 0x7F)
- goto yy715;
- if (yych <= 0xBF)
- goto yy732;
- goto yy715;
- yy736:
- yych = *++p;
- if (yych <= 0x7F)
- goto yy715;
- if (yych <= 0x8F)
- goto yy732;
- goto yy715;
- }
-}
-
-// Scan a closing code fence with length at least len.
-bufsize_t _scan_close_code_fence(const unsigned char *p) {
- const unsigned char *marker = NULL;
- const unsigned char *start = p;
-
- {
- unsigned char yych;
- static const unsigned char yybm[] = {
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- };
- yych = *p;
- if (yych == '`')
- goto yy739;
- if (yych == '~')
- goto yy740;
- ++p;
- yy738 : { return 0; }
- yy739:
- yych = *(marker = ++p);
- if (yych == '`')
- goto yy741;
- goto yy738;
- yy740:
- yych = *(marker = ++p);
- if (yych == '~')
- goto yy743;
- goto yy738;
- yy741:
- yych = *++p;
- if (yybm[0 + yych] & 32) {
- goto yy744;
- }
- yy742:
- p = marker;
- goto yy738;
- yy743:
- yych = *++p;
- if (yybm[0 + yych] & 64) {
- goto yy745;
- }
- goto yy742;
- yy744:
- yych = *++p;
- if (yybm[0 + yych] & 32) {
- goto yy744;
- }
- if (yych <= '\f') {
- if (yych <= 0x08)
- goto yy742;
- if (yych <= '\t') {
- marker = p;
- goto yy746;
- }
- if (yych <= '\n') {
- marker = p;
- goto yy747;
- }
- goto yy742;
- } else {
- if (yych <= '\r') {
- marker = p;
- goto yy747;
- }
- if (yych == ' ') {
- marker = p;
- goto yy746;
- }
- goto yy742;
- }
- yy745:
- yych = *++p;
- if (yybm[0 + yych] & 64) {
- goto yy745;
- }
- if (yych <= '\f') {
- if (yych <= 0x08)
- goto yy742;
- if (yych <= '\t') {
- marker = p;
- goto yy748;
- }
- if (yych <= '\n') {
- marker = p;
- goto yy749;
- }
- goto yy742;
- } else {
- if (yych <= '\r') {
- marker = p;
- goto yy749;
- }
- if (yych == ' ') {
- marker = p;
- goto yy748;
- }
- goto yy742;
- }
- yy746:
- yych = *++p;
- if (yybm[0 + yych] & 128) {
- goto yy746;
- }
- if (yych <= 0x08)
- goto yy742;
- if (yych <= '\n')
- goto yy747;
- if (yych != '\r')
- goto yy742;
- yy747:
- ++p;
- p = marker;
- { return (bufsize_t)(p - start); }
- yy748:
- yych = *++p;
- if (yych <= '\f') {
- if (yych <= 0x08)
- goto yy742;
- if (yych <= '\t')
- goto yy748;
- if (yych >= '\v')
- goto yy742;
- } else {
- if (yych <= '\r')
- goto yy749;
- if (yych == ' ')
- goto yy748;
- goto yy742;
- }
- yy749:
- ++p;
- p = marker;
- { return (bufsize_t)(p - start); }
- }
-}
-
-// Scans an entity.
-// Returns number of chars matched.
-bufsize_t _scan_entity(const unsigned char *p) {
- const unsigned char *marker = NULL;
- const unsigned char *start = p;
-
- {
- unsigned char yych;
- yych = *p;
- if (yych == '&')
- goto yy752;
- ++p;
- yy751 : { return 0; }
- yy752:
- yych = *(marker = ++p);
- if (yych <= '@') {
- if (yych != '#')
- goto yy751;
- } else {
- if (yych <= 'Z')
- goto yy754;
- if (yych <= '`')
- goto yy751;
- if (yych <= 'z')
- goto yy754;
- goto yy751;
- }
- yych = *++p;
- if (yych <= 'W') {
- if (yych <= '/')
- goto yy753;
- if (yych <= '9')
- goto yy755;
- } else {
- if (yych <= 'X')
- goto yy756;
- if (yych == 'x')
- goto yy756;
- }
- yy753:
- p = marker;
- goto yy751;
- yy754:
- yych = *++p;
- if (yych <= '@') {
- if (yych <= '/')
- goto yy753;
- if (yych <= '9')
- goto yy757;
- goto yy753;
- } else {
- if (yych <= 'Z')
- goto yy757;
- if (yych <= '`')
- goto yy753;
- if (yych <= 'z')
- goto yy757;
- goto yy753;
- }
- yy755:
- yych = *++p;
- if (yych <= '/')
- goto yy753;
- if (yych <= '9')
- goto yy758;
- if (yych == ';')
- goto yy759;
- goto yy753;
- yy756:
- yych = *++p;
- if (yych <= '@') {
- if (yych <= '/')
- goto yy753;
- if (yych <= '9')
- goto yy760;
- goto yy753;
- } else {
- if (yych <= 'F')
- goto yy760;
- if (yych <= '`')
- goto yy753;
- if (yych <= 'f')
- goto yy760;
- goto yy753;
- }
- yy757:
- yych = *++p;
- if (yych <= ';') {
- if (yych <= '/')
- goto yy753;
- if (yych <= '9')
- goto yy761;
- if (yych <= ':')
- goto yy753;
- goto yy759;
- } else {
- if (yych <= 'Z') {
- if (yych <= '@')
- goto yy753;
- goto yy761;
- } else {
- if (yych <= '`')
- goto yy753;
- if (yych <= 'z')
- goto yy761;
- goto yy753;
- }
- }
- yy758:
- yych = *++p;
- if (yych <= '/')
- goto yy753;
- if (yych <= '9')
- goto yy762;
- if (yych != ';')
- goto yy753;
- yy759:
- ++p;
- { return (bufsize_t)(p - start); }
- yy760:
- yych = *++p;
- if (yych <= ';') {
- if (yych <= '/')
- goto yy753;
- if (yych <= '9')
- goto yy763;
- if (yych <= ':')
- goto yy753;
- goto yy759;
- } else {
- if (yych <= 'F') {
- if (yych <= '@')
- goto yy753;
- goto yy763;
- } else {
- if (yych <= '`')
- goto yy753;
- if (yych <= 'f')
- goto yy763;
- goto yy753;
- }
- }
- yy761:
- yych = *++p;
- if (yych <= ';') {
- if (yych <= '/')
- goto yy753;
- if (yych <= '9')
- goto yy764;
- if (yych <= ':')
- goto yy753;
- goto yy759;
- } else {
- if (yych <= 'Z') {
- if (yych <= '@')
- goto yy753;
- goto yy764;
- } else {
- if (yych <= '`')
- goto yy753;
- if (yych <= 'z')
- goto yy764;
- goto yy753;
- }
- }
- yy762:
- yych = *++p;
- if (yych <= '/')
- goto yy753;
- if (yych <= '9')
- goto yy765;
- if (yych == ';')
- goto yy759;
- goto yy753;
- yy763:
- yych = *++p;
- if (yych <= ';') {
- if (yych <= '/')
- goto yy753;
- if (yych <= '9')
- goto yy766;
- if (yych <= ':')
- goto yy753;
- goto yy759;
- } else {
- if (yych <= 'F') {
- if (yych <= '@')
- goto yy753;
- goto yy766;
- } else {
- if (yych <= '`')
- goto yy753;
- if (yych <= 'f')
- goto yy766;
- goto yy753;
- }
- }
- yy764:
- yych = *++p;
- if (yych <= ';') {
- if (yych <= '/')
- goto yy753;
- if (yych <= '9')
- goto yy767;
- if (yych <= ':')
- goto yy753;
- goto yy759;
- } else {
- if (yych <= 'Z') {
- if (yych <= '@')
- goto yy753;
- goto yy767;
- } else {
- if (yych <= '`')
- goto yy753;
- if (yych <= 'z')
- goto yy767;
- goto yy753;
- }
- }
- yy765:
- yych = *++p;
- if (yych <= '/')
- goto yy753;
- if (yych <= '9')
- goto yy768;
- if (yych == ';')
- goto yy759;
- goto yy753;
- yy766:
- yych = *++p;
- if (yych <= ';') {
- if (yych <= '/')
- goto yy753;
- if (yych <= '9')
- goto yy769;
- if (yych <= ':')
- goto yy753;
- goto yy759;
- } else {
- if (yych <= 'F') {
- if (yych <= '@')
- goto yy753;
- goto yy769;
- } else {
- if (yych <= '`')
- goto yy753;
- if (yych <= 'f')
- goto yy769;
- goto yy753;
- }
- }
- yy767:
- yych = *++p;
- if (yych <= ';') {
- if (yych <= '/')
- goto yy753;
- if (yych <= '9')
- goto yy770;
- if (yych <= ':')
- goto yy753;
- goto yy759;
- } else {
- if (yych <= 'Z') {
- if (yych <= '@')
- goto yy753;
- goto yy770;
- } else {
- if (yych <= '`')
- goto yy753;
- if (yych <= 'z')
- goto yy770;
- goto yy753;
- }
- }
- yy768:
- yych = *++p;
- if (yych <= '/')
- goto yy753;
- if (yych <= '9')
- goto yy771;
- if (yych == ';')
- goto yy759;
- goto yy753;
- yy769:
- yych = *++p;
- if (yych <= ';') {
- if (yych <= '/')
- goto yy753;
- if (yych <= '9')
- goto yy772;
- if (yych <= ':')
- goto yy753;
- goto yy759;
- } else {
- if (yych <= 'F') {
- if (yych <= '@')
- goto yy753;
- goto yy772;
- } else {
- if (yych <= '`')
- goto yy753;
- if (yych <= 'f')
- goto yy772;
- goto yy753;
- }
- }
- yy770:
- yych = *++p;
- if (yych <= ';') {
- if (yych <= '/')
- goto yy753;
- if (yych <= '9')
- goto yy773;
- if (yych <= ':')
- goto yy753;
- goto yy759;
- } else {
- if (yych <= 'Z') {
- if (yych <= '@')
- goto yy753;
- goto yy773;
- } else {
- if (yych <= '`')
- goto yy753;
- if (yych <= 'z')
- goto yy773;
- goto yy753;
- }
- }
- yy771:
- yych = *++p;
- if (yych <= '/')
- goto yy753;
- if (yych <= '9')
- goto yy774;
- if (yych == ';')
- goto yy759;
- goto yy753;
- yy772:
- yych = *++p;
- if (yych <= ';') {
- if (yych <= '/')
- goto yy753;
- if (yych <= '9')
- goto yy774;
- if (yych <= ':')
- goto yy753;
- goto yy759;
- } else {
- if (yych <= 'F') {
- if (yych <= '@')
- goto yy753;
- goto yy774;
- } else {
- if (yych <= '`')
- goto yy753;
- if (yych <= 'f')
- goto yy774;
- goto yy753;
- }
- }
- yy773:
- yych = *++p;
- if (yych <= ';') {
- if (yych <= '/')
- goto yy753;
- if (yych <= '9')
- goto yy775;
- if (yych <= ':')
- goto yy753;
- goto yy759;
- } else {
- if (yych <= 'Z') {
- if (yych <= '@')
- goto yy753;
- goto yy775;
- } else {
- if (yych <= '`')
- goto yy753;
- if (yych <= 'z')
- goto yy775;
- goto yy753;
- }
- }
- yy774:
- yych = *++p;
- if (yych == ';')
- goto yy759;
- goto yy753;
- yy775:
- yych = *++p;
- if (yych <= ';') {
- if (yych <= '/')
- goto yy753;
- if (yych <= '9')
- goto yy776;
- if (yych <= ':')
- goto yy753;
- goto yy759;
- } else {
- if (yych <= 'Z') {
- if (yych <= '@')
- goto yy753;
- } else {
- if (yych <= '`')
- goto yy753;
- if (yych >= '{')
- goto yy753;
- }
- }
- yy776:
- yych = *++p;
- if (yych <= ';') {
- if (yych <= '/')
- goto yy753;
- if (yych <= '9')
- goto yy777;
- if (yych <= ':')
- goto yy753;
- goto yy759;
- } else {
- if (yych <= 'Z') {
- if (yych <= '@')
- goto yy753;
- } else {
- if (yych <= '`')
- goto yy753;
- if (yych >= '{')
- goto yy753;
- }
- }
- yy777:
- yych = *++p;
- if (yych <= ';') {
- if (yych <= '/')
- goto yy753;
- if (yych <= '9')
- goto yy778;
- if (yych <= ':')
- goto yy753;
- goto yy759;
- } else {
- if (yych <= 'Z') {
- if (yych <= '@')
- goto yy753;
- } else {
- if (yych <= '`')
- goto yy753;
- if (yych >= '{')
- goto yy753;
- }
- }
- yy778:
- yych = *++p;
- if (yych <= ';') {
- if (yych <= '/')
- goto yy753;
- if (yych <= '9')
- goto yy779;
- if (yych <= ':')
- goto yy753;
- goto yy759;
- } else {
- if (yych <= 'Z') {
- if (yych <= '@')
- goto yy753;
- } else {
- if (yych <= '`')
- goto yy753;
- if (yych >= '{')
- goto yy753;
- }
- }
- yy779:
- yych = *++p;
- if (yych <= ';') {
- if (yych <= '/')
- goto yy753;
- if (yych <= '9')
- goto yy780;
- if (yych <= ':')
- goto yy753;
- goto yy759;
- } else {
- if (yych <= 'Z') {
- if (yych <= '@')
- goto yy753;
- } else {
- if (yych <= '`')
- goto yy753;
- if (yych >= '{')
- goto yy753;
- }
- }
- yy780:
- yych = *++p;
- if (yych <= ';') {
- if (yych <= '/')
- goto yy753;
- if (yych <= '9')
- goto yy781;
- if (yych <= ':')
- goto yy753;
- goto yy759;
- } else {
- if (yych <= 'Z') {
- if (yych <= '@')
- goto yy753;
- } else {
- if (yych <= '`')
- goto yy753;
- if (yych >= '{')
- goto yy753;
- }
- }
- yy781:
- yych = *++p;
- if (yych <= ';') {
- if (yych <= '/')
- goto yy753;
- if (yych <= '9')
- goto yy782;
- if (yych <= ':')
- goto yy753;
- goto yy759;
- } else {
- if (yych <= 'Z') {
- if (yych <= '@')
- goto yy753;
- } else {
- if (yych <= '`')
- goto yy753;
- if (yych >= '{')
- goto yy753;
- }
- }
- yy782:
- yych = *++p;
- if (yych <= ';') {
- if (yych <= '/')
- goto yy753;
- if (yych <= '9')
- goto yy783;
- if (yych <= ':')
- goto yy753;
- goto yy759;
- } else {
- if (yych <= 'Z') {
- if (yych <= '@')
- goto yy753;
- } else {
- if (yych <= '`')
- goto yy753;
- if (yych >= '{')
- goto yy753;
- }
- }
- yy783:
- yych = *++p;
- if (yych <= ';') {
- if (yych <= '/')
- goto yy753;
- if (yych <= '9')
- goto yy784;
- if (yych <= ':')
- goto yy753;
- goto yy759;
- } else {
- if (yych <= 'Z') {
- if (yych <= '@')
- goto yy753;
- } else {
- if (yych <= '`')
- goto yy753;
- if (yych >= '{')
- goto yy753;
- }
- }
- yy784:
- yych = *++p;
- if (yych <= ';') {
- if (yych <= '/')
- goto yy753;
- if (yych <= '9')
- goto yy785;
- if (yych <= ':')
- goto yy753;
- goto yy759;
- } else {
- if (yych <= 'Z') {
- if (yych <= '@')
- goto yy753;
- } else {
- if (yych <= '`')
- goto yy753;
- if (yych >= '{')
- goto yy753;
- }
- }
- yy785:
- yych = *++p;
- if (yych <= ';') {
- if (yych <= '/')
- goto yy753;
- if (yych <= '9')
- goto yy786;
- if (yych <= ':')
- goto yy753;
- goto yy759;
- } else {
- if (yych <= 'Z') {
- if (yych <= '@')
- goto yy753;
- } else {
- if (yych <= '`')
- goto yy753;
- if (yych >= '{')
- goto yy753;
- }
- }
- yy786:
- yych = *++p;
- if (yych <= ';') {
- if (yych <= '/')
- goto yy753;
- if (yych <= '9')
- goto yy787;
- if (yych <= ':')
- goto yy753;
- goto yy759;
- } else {
- if (yych <= 'Z') {
- if (yych <= '@')
- goto yy753;
- } else {
- if (yych <= '`')
- goto yy753;
- if (yych >= '{')
- goto yy753;
- }
- }
- yy787:
- yych = *++p;
- if (yych <= ';') {
- if (yych <= '/')
- goto yy753;
- if (yych <= '9')
- goto yy788;
- if (yych <= ':')
- goto yy753;
- goto yy759;
- } else {
- if (yych <= 'Z') {
- if (yych <= '@')
- goto yy753;
- } else {
- if (yych <= '`')
- goto yy753;
- if (yych >= '{')
- goto yy753;
- }
- }
- yy788:
- yych = *++p;
- if (yych <= ';') {
- if (yych <= '/')
- goto yy753;
- if (yych <= '9')
- goto yy789;
- if (yych <= ':')
- goto yy753;
- goto yy759;
- } else {
- if (yych <= 'Z') {
- if (yych <= '@')
- goto yy753;
- } else {
- if (yych <= '`')
- goto yy753;
- if (yych >= '{')
- goto yy753;
- }
- }
- yy789:
- yych = *++p;
- if (yych <= ';') {
- if (yych <= '/')
- goto yy753;
- if (yych <= '9')
- goto yy790;
- if (yych <= ':')
- goto yy753;
- goto yy759;
- } else {
- if (yych <= 'Z') {
- if (yych <= '@')
- goto yy753;
- } else {
- if (yych <= '`')
- goto yy753;
- if (yych >= '{')
- goto yy753;
- }
- }
- yy790:
- yych = *++p;
- if (yych <= ';') {
- if (yych <= '/')
- goto yy753;
- if (yych <= '9')
- goto yy791;
- if (yych <= ':')
- goto yy753;
- goto yy759;
- } else {
- if (yych <= 'Z') {
- if (yych <= '@')
- goto yy753;
- } else {
- if (yych <= '`')
- goto yy753;
- if (yych >= '{')
- goto yy753;
- }
- }
- yy791:
- yych = *++p;
- if (yych <= ';') {
- if (yych <= '/')
- goto yy753;
- if (yych <= '9')
- goto yy792;
- if (yych <= ':')
- goto yy753;
- goto yy759;
- } else {
- if (yych <= 'Z') {
- if (yych <= '@')
- goto yy753;
- } else {
- if (yych <= '`')
- goto yy753;
- if (yych >= '{')
- goto yy753;
- }
- }
- yy792:
- yych = *++p;
- if (yych <= ';') {
- if (yych <= '/')
- goto yy753;
- if (yych <= '9')
- goto yy793;
- if (yych <= ':')
- goto yy753;
- goto yy759;
- } else {
- if (yych <= 'Z') {
- if (yych <= '@')
- goto yy753;
- } else {
- if (yych <= '`')
- goto yy753;
- if (yych >= '{')
- goto yy753;
- }
- }
- yy793:
- yych = *++p;
- if (yych <= ';') {
- if (yych <= '/')
- goto yy753;
- if (yych <= '9')
- goto yy794;
- if (yych <= ':')
- goto yy753;
- goto yy759;
- } else {
- if (yych <= 'Z') {
- if (yych <= '@')
- goto yy753;
- } else {
- if (yych <= '`')
- goto yy753;
- if (yych >= '{')
- goto yy753;
- }
- }
- yy794:
- yych = *++p;
- if (yych <= ';') {
- if (yych <= '/')
- goto yy753;
- if (yych <= '9')
- goto yy795;
- if (yych <= ':')
- goto yy753;
- goto yy759;
- } else {
- if (yych <= 'Z') {
- if (yych <= '@')
- goto yy753;
- } else {
- if (yych <= '`')
- goto yy753;
- if (yych >= '{')
- goto yy753;
- }
- }
- yy795:
- yych = *++p;
- if (yych <= ';') {
- if (yych <= '/')
- goto yy753;
- if (yych <= '9')
- goto yy796;
- if (yych <= ':')
- goto yy753;
- goto yy759;
- } else {
- if (yych <= 'Z') {
- if (yych <= '@')
- goto yy753;
- } else {
- if (yych <= '`')
- goto yy753;
- if (yych >= '{')
- goto yy753;
- }
- }
- yy796:
- yych = *++p;
- if (yych <= ';') {
- if (yych <= '/')
- goto yy753;
- if (yych <= '9')
- goto yy797;
- if (yych <= ':')
- goto yy753;
- goto yy759;
- } else {
- if (yych <= 'Z') {
- if (yych <= '@')
- goto yy753;
- } else {
- if (yych <= '`')
- goto yy753;
- if (yych >= '{')
- goto yy753;
- }
- }
- yy797:
- yych = *++p;
- if (yych <= ';') {
- if (yych <= '/')
- goto yy753;
- if (yych <= '9')
- goto yy798;
- if (yych <= ':')
- goto yy753;
- goto yy759;
- } else {
- if (yych <= 'Z') {
- if (yych <= '@')
- goto yy753;
- } else {
- if (yych <= '`')
- goto yy753;
- if (yych >= '{')
- goto yy753;
- }
- }
- yy798:
- yych = *++p;
- if (yych <= ';') {
- if (yych <= '/')
- goto yy753;
- if (yych <= '9')
- goto yy774;
- if (yych <= ':')
- goto yy753;
- goto yy759;
- } else {
- if (yych <= 'Z') {
- if (yych <= '@')
- goto yy753;
- goto yy774;
- } else {
- if (yych <= '`')
- goto yy753;
- if (yych <= 'z')
- goto yy774;
- goto yy753;
- }
- }
- }
-}
-
-// Returns positive value if a URL begins in a way that is potentially
-// dangerous, with javascript:, vbscript:, file:, or data:, otherwise 0.
-bufsize_t _scan_dangerous_url(const unsigned char *p) {
- const unsigned char *marker = NULL;
- const unsigned char *start = p;
-
- {
- unsigned char yych;
- unsigned int yyaccept = 0;
- yych = *p;
- if (yych <= 'V') {
- if (yych <= 'F') {
- if (yych == 'D')
- goto yy801;
- if (yych >= 'F')
- goto yy802;
- } else {
- if (yych == 'J')
- goto yy803;
- if (yych >= 'V')
- goto yy804;
- }
- } else {
- if (yych <= 'f') {
- if (yych == 'd')
- goto yy801;
- if (yych >= 'f')
- goto yy802;
- } else {
- if (yych <= 'j') {
- if (yych >= 'j')
- goto yy803;
- } else {
- if (yych == 'v')
- goto yy804;
- }
- }
- }
- ++p;
- yy800 : { return 0; }
- yy801:
- yyaccept = 0;
- yych = *(marker = ++p);
- if (yych == 'A')
- goto yy805;
- if (yych == 'a')
- goto yy805;
- goto yy800;
- yy802:
- yyaccept = 0;
- yych = *(marker = ++p);
- if (yych == 'I')
- goto yy807;
- if (yych == 'i')
- goto yy807;
- goto yy800;
- yy803:
- yyaccept = 0;
- yych = *(marker = ++p);
- if (yych == 'A')
- goto yy808;
- if (yych == 'a')
- goto yy808;
- goto yy800;
- yy804:
- yyaccept = 0;
- yych = *(marker = ++p);
- if (yych == 'B')
- goto yy809;
- if (yych == 'b')
- goto yy809;
- goto yy800;
- yy805:
- yych = *++p;
- if (yych == 'T')
- goto yy810;
- if (yych == 't')
- goto yy810;
- yy806:
- p = marker;
- if (yyaccept == 0) {
- goto yy800;
- } else {
- goto yy818;
- }
- yy807:
- yych = *++p;
- if (yych == 'L')
- goto yy811;
- if (yych == 'l')
- goto yy811;
- goto yy806;
- yy808:
- yych = *++p;
- if (yych == 'V')
- goto yy812;
- if (yych == 'v')
- goto yy812;
- goto yy806;
- yy809:
- yych = *++p;
- if (yych == 'S')
- goto yy813;
- if (yych == 's')
- goto yy813;
- goto yy806;
- yy810:
- yych = *++p;
- if (yych == 'A')
- goto yy814;
- if (yych == 'a')
- goto yy814;
- goto yy806;
- yy811:
- yych = *++p;
- if (yych == 'E')
- goto yy815;
- if (yych == 'e')
- goto yy815;
- goto yy806;
- yy812:
- yych = *++p;
- if (yych == 'A')
- goto yy809;
- if (yych == 'a')
- goto yy809;
- goto yy806;
- yy813:
- yych = *++p;
- if (yych == 'C')
- goto yy816;
- if (yych == 'c')
- goto yy816;
- goto yy806;
- yy814:
- yych = *++p;
- if (yych == ':')
- goto yy817;
- goto yy806;
- yy815:
- yych = *++p;
- if (yych == ':')
- goto yy819;
- goto yy806;
- yy816:
- yych = *++p;
- if (yych == 'R')
- goto yy820;
- if (yych == 'r')
- goto yy820;
- goto yy806;
- yy817:
- yyaccept = 1;
- yych = *(marker = ++p);
- if (yych == 'I')
- goto yy821;
- if (yych == 'i')
- goto yy821;
- yy818 : { return (bufsize_t)(p - start); }
- yy819:
- ++p;
- goto yy818;
- yy820:
- yych = *++p;
- if (yych == 'I')
- goto yy822;
- if (yych == 'i')
- goto yy822;
- goto yy806;
- yy821:
- yych = *++p;
- if (yych == 'M')
- goto yy823;
- if (yych == 'm')
- goto yy823;
- goto yy806;
- yy822:
- yych = *++p;
- if (yych == 'P')
- goto yy824;
- if (yych == 'p')
- goto yy824;
- goto yy806;
- yy823:
- yych = *++p;
- if (yych == 'A')
- goto yy825;
- if (yych == 'a')
- goto yy825;
- goto yy806;
- yy824:
- yych = *++p;
- if (yych == 'T')
- goto yy815;
- if (yych == 't')
- goto yy815;
- goto yy806;
- yy825:
- yych = *++p;
- if (yych == 'G')
- goto yy826;
- if (yych != 'g')
- goto yy806;
- yy826:
- yych = *++p;
- if (yych == 'E')
- goto yy827;
- if (yych != 'e')
- goto yy806;
- yy827:
- yych = *++p;
- if (yych != '/')
- goto yy806;
- yych = *++p;
- if (yych <= 'W') {
- if (yych <= 'J') {
- if (yych == 'G')
- goto yy828;
- if (yych <= 'I')
- goto yy806;
- goto yy829;
- } else {
- if (yych == 'P')
- goto yy830;
- if (yych <= 'V')
- goto yy806;
- goto yy831;
- }
- } else {
- if (yych <= 'j') {
- if (yych == 'g')
- goto yy828;
- if (yych <= 'i')
- goto yy806;
- goto yy829;
- } else {
- if (yych <= 'p') {
- if (yych <= 'o')
- goto yy806;
- goto yy830;
- } else {
- if (yych == 'w')
- goto yy831;
- goto yy806;
- }
- }
- }
- yy828:
- yych = *++p;
- if (yych == 'I')
- goto yy832;
- if (yych == 'i')
- goto yy832;
- goto yy806;
- yy829:
- yych = *++p;
- if (yych == 'P')
- goto yy833;
- if (yych == 'p')
- goto yy833;
- goto yy806;
- yy830:
- yych = *++p;
- if (yych == 'N')
- goto yy834;
- if (yych == 'n')
- goto yy834;
- goto yy806;
- yy831:
- yych = *++p;
- if (yych == 'E')
- goto yy835;
- if (yych == 'e')
- goto yy835;
- goto yy806;
- yy832:
- yych = *++p;
- if (yych == 'F')
- goto yy836;
- if (yych == 'f')
- goto yy836;
- goto yy806;
- yy833:
- yych = *++p;
- if (yych == 'E')
- goto yy834;
- if (yych != 'e')
- goto yy806;
- yy834:
- yych = *++p;
- if (yych == 'G')
- goto yy836;
- if (yych == 'g')
- goto yy836;
- goto yy806;
- yy835:
- yych = *++p;
- if (yych == 'B')
- goto yy837;
- if (yych == 'b')
- goto yy837;
- goto yy806;
- yy836:
- ++p;
- { return 0; }
- yy837:
- yych = *++p;
- if (yych == 'P')
- goto yy836;
- if (yych == 'p')
- goto yy836;
- goto yy806;
- }
-}
-
-// Scans a footnote definition opening.
-bufsize_t _scan_footnote_definition(const unsigned char *p) {
- const unsigned char *marker = NULL;
- const unsigned char *start = p;
-
- {
- unsigned char yych;
- static const unsigned char yybm[] = {
- 0, 64, 64, 64, 64, 64, 64, 64, 64, 128, 0, 64, 64, 0, 64, 64,
- 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
- 128, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
- 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
- 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
- 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 0, 64, 64,
- 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
- 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- };
- yych = *p;
- if (yych == '[')
- goto yy840;
- ++p;
- yy839 : { return 0; }
- yy840:
- yych = *(marker = ++p);
- if (yych != '^')
- goto yy839;
- yych = *++p;
- if (yych != ']')
- goto yy843;
- yy841:
- p = marker;
- goto yy839;
- yy842:
- yych = *++p;
- yy843:
- if (yybm[0 + yych] & 64) {
- goto yy842;
- }
- if (yych <= 0xEC) {
- if (yych <= 0xC1) {
- if (yych <= ' ')
- goto yy841;
- if (yych <= ']')
- goto yy851;
- goto yy841;
- } else {
- if (yych <= 0xDF)
- goto yy844;
- if (yych <= 0xE0)
- goto yy845;
- goto yy846;
- }
- } else {
- if (yych <= 0xF0) {
- if (yych <= 0xED)
- goto yy847;
- if (yych <= 0xEF)
- goto yy846;
- goto yy848;
- } else {
- if (yych <= 0xF3)
- goto yy849;
- if (yych <= 0xF4)
- goto yy850;
- goto yy841;
- }
- }
- yy844:
- yych = *++p;
- if (yych <= 0x7F)
- goto yy841;
- if (yych <= 0xBF)
- goto yy842;
- goto yy841;
- yy845:
- yych = *++p;
- if (yych <= 0x9F)
- goto yy841;
- if (yych <= 0xBF)
- goto yy844;
- goto yy841;
- yy846:
- yych = *++p;
- if (yych <= 0x7F)
- goto yy841;
- if (yych <= 0xBF)
- goto yy844;
- goto yy841;
- yy847:
- yych = *++p;
- if (yych <= 0x7F)
- goto yy841;
- if (yych <= 0x9F)
- goto yy844;
- goto yy841;
- yy848:
- yych = *++p;
- if (yych <= 0x8F)
- goto yy841;
- if (yych <= 0xBF)
- goto yy846;
- goto yy841;
- yy849:
- yych = *++p;
- if (yych <= 0x7F)
- goto yy841;
- if (yych <= 0xBF)
- goto yy846;
- goto yy841;
- yy850:
- yych = *++p;
- if (yych <= 0x7F)
- goto yy841;
- if (yych <= 0x8F)
- goto yy846;
- goto yy841;
- yy851:
- yych = *++p;
- if (yych != ':')
- goto yy841;
- yy852:
- yych = *++p;
- if (yybm[0 + yych] & 128) {
- goto yy852;
- }
- { return (bufsize_t)(p - start); }
- }
-}
diff --git a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/scanners.h b/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/scanners.h
deleted file mode 100644
index 7e6a10a..0000000
--- a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/scanners.h
+++ /dev/null
@@ -1,70 +0,0 @@
-#ifndef CMARK_SCANNERS_H
-#define CMARK_SCANNERS_H
-
-#include "cmark-gfm.h"
-#include "chunk.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-bufsize_t _scan_at(bufsize_t (*scanner)(const unsigned char *), cmark_chunk *c,
- bufsize_t offset);
-bufsize_t _scan_scheme(const unsigned char *p);
-bufsize_t _scan_autolink_uri(const unsigned char *p);
-bufsize_t _scan_autolink_email(const unsigned char *p);
-bufsize_t _scan_html_tag(const unsigned char *p);
-bufsize_t _scan_liberal_html_tag(const unsigned char *p);
-bufsize_t _scan_html_comment(const unsigned char *p);
-bufsize_t _scan_html_pi(const unsigned char *p);
-bufsize_t _scan_html_declaration(const unsigned char *p);
-bufsize_t _scan_html_cdata(const unsigned char *p);
-bufsize_t _scan_html_block_start(const unsigned char *p);
-bufsize_t _scan_html_block_start_7(const unsigned char *p);
-bufsize_t _scan_html_block_end_1(const unsigned char *p);
-bufsize_t _scan_html_block_end_2(const unsigned char *p);
-bufsize_t _scan_html_block_end_3(const unsigned char *p);
-bufsize_t _scan_html_block_end_4(const unsigned char *p);
-bufsize_t _scan_html_block_end_5(const unsigned char *p);
-bufsize_t _scan_link_title(const unsigned char *p);
-bufsize_t _scan_spacechars(const unsigned char *p);
-bufsize_t _scan_atx_heading_start(const unsigned char *p);
-bufsize_t _scan_setext_heading_line(const unsigned char *p);
-bufsize_t _scan_open_code_fence(const unsigned char *p);
-bufsize_t _scan_close_code_fence(const unsigned char *p);
-bufsize_t _scan_entity(const unsigned char *p);
-bufsize_t _scan_dangerous_url(const unsigned char *p);
-bufsize_t _scan_footnote_definition(const unsigned char *p);
-
-#define scan_scheme(c, n) _scan_at(&_scan_scheme, c, n)
-#define scan_autolink_uri(c, n) _scan_at(&_scan_autolink_uri, c, n)
-#define scan_autolink_email(c, n) _scan_at(&_scan_autolink_email, c, n)
-#define scan_html_tag(c, n) _scan_at(&_scan_html_tag, c, n)
-#define scan_liberal_html_tag(c, n) _scan_at(&_scan_liberal_html_tag, c, n)
-#define scan_html_comment(c, n) _scan_at(&_scan_html_comment, c, n)
-#define scan_html_pi(c, n) _scan_at(&_scan_html_pi, c, n)
-#define scan_html_declaration(c, n) _scan_at(&_scan_html_declaration, c, n)
-#define scan_html_cdata(c, n) _scan_at(&_scan_html_cdata, c, n)
-#define scan_html_block_start(c, n) _scan_at(&_scan_html_block_start, c, n)
-#define scan_html_block_start_7(c, n) _scan_at(&_scan_html_block_start_7, c, n)
-#define scan_html_block_end_1(c, n) _scan_at(&_scan_html_block_end_1, c, n)
-#define scan_html_block_end_2(c, n) _scan_at(&_scan_html_block_end_2, c, n)
-#define scan_html_block_end_3(c, n) _scan_at(&_scan_html_block_end_3, c, n)
-#define scan_html_block_end_4(c, n) _scan_at(&_scan_html_block_end_4, c, n)
-#define scan_html_block_end_5(c, n) _scan_at(&_scan_html_block_end_5, c, n)
-#define scan_link_title(c, n) _scan_at(&_scan_link_title, c, n)
-#define scan_spacechars(c, n) _scan_at(&_scan_spacechars, c, n)
-#define scan_atx_heading_start(c, n) _scan_at(&_scan_atx_heading_start, c, n)
-#define scan_setext_heading_line(c, n) \
- _scan_at(&_scan_setext_heading_line, c, n)
-#define scan_open_code_fence(c, n) _scan_at(&_scan_open_code_fence, c, n)
-#define scan_close_code_fence(c, n) _scan_at(&_scan_close_code_fence, c, n)
-#define scan_entity(c, n) _scan_at(&_scan_entity, c, n)
-#define scan_dangerous_url(c, n) _scan_at(&_scan_dangerous_url, c, n)
-#define scan_footnote_definition(c, n) _scan_at(&_scan_footnote_definition, c, n)
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/scanners.o b/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/scanners.o
deleted file mode 100644
index 94f5684..0000000
Binary files a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/scanners.o and /dev/null differ
diff --git a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/scanners.re b/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/scanners.re
deleted file mode 100644
index 5af8b7b..0000000
--- a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/scanners.re
+++ /dev/null
@@ -1,341 +0,0 @@
-#include
-#include "chunk.h"
-#include "scanners.h"
-
-bufsize_t _scan_at(bufsize_t (*scanner)(const unsigned char *), cmark_chunk *c, bufsize_t offset)
-{
- bufsize_t res;
- unsigned char *ptr = (unsigned char *)c->data;
-
- if (ptr == NULL || offset > c->len) {
- return 0;
- } else {
- unsigned char lim = ptr[c->len];
-
- ptr[c->len] = '\0';
- res = scanner(ptr + offset);
- ptr[c->len] = lim;
- }
-
- return res;
-}
-
-/*!re2c
- re2c:define:YYCTYPE = "unsigned char";
- re2c:define:YYCURSOR = p;
- re2c:define:YYMARKER = marker;
- re2c:define:YYCTXMARKER = marker;
- re2c:yyfill:enable = 0;
-
- wordchar = [^\x00-\x20];
-
- spacechar = [ \t\v\f\r\n];
-
- reg_char = [^\\()\x00-\x20];
-
- escaped_char = [\\][!"#$%&'()*+,./:;<=>?@[\\\]^_`{|}~-];
-
- tagname = [A-Za-z][A-Za-z0-9-]*;
-
- blocktagname = 'address'|'article'|'aside'|'base'|'basefont'|'blockquote'|'body'|'caption'|'center'|'col'|'colgroup'|'dd'|'details'|'dialog'|'dir'|'div'|'dl'|'dt'|'fieldset'|'figcaption'|'figure'|'footer'|'form'|'frame'|'frameset'|'h1'|'h2'|'h3'|'h4'|'h5'|'h6'|'head'|'header'|'hr'|'html'|'iframe'|'legend'|'li'|'link'|'main'|'menu'|'menuitem'|'meta'|'nav'|'noframes'|'ol'|'optgroup'|'option'|'p'|'param'|'section'|'source'|'title'|'summary'|'table'|'tbody'|'td'|'tfoot'|'th'|'thead'|'title'|'tr'|'track'|'ul';
-
- attributename = [a-zA-Z_:][a-zA-Z0-9:._-]*;
-
- unquotedvalue = [^"'=<>`\x00]+;
- singlequotedvalue = ['][^'\x00]*['];
- doublequotedvalue = ["][^"\x00]*["];
-
- attributevalue = unquotedvalue | singlequotedvalue | doublequotedvalue;
-
- attributevaluespec = spacechar* [=] spacechar* attributevalue;
-
- attribute = spacechar+ attributename attributevaluespec?;
-
- opentag = tagname attribute* spacechar* [/]? [>];
- closetag = [/] tagname spacechar* [>];
-
- htmlcomment = "!---->" | ("!--" ([-]? [^\x00>-]) ([-]? [^\x00-])* "-->");
-
- processinginstruction = "?" ([^?>\x00]+ | [?][^>\x00] | [>])* "?>";
-
- declaration = "!" [A-Z]+ spacechar+ [^>\x00]* ">";
-
- cdata = "![CDATA[" ([^\]\x00]+ | "]" [^\]\x00] | "]]" [^>\x00])* "]]>";
-
- htmltag = opentag | closetag | htmlcomment | processinginstruction |
- declaration | cdata;
-
- in_parens_nosp = [(] (reg_char|escaped_char|[\\])* [)];
-
- in_double_quotes = ["] (escaped_char|[^"\x00])* ["];
- in_single_quotes = ['] (escaped_char|[^'\x00])* ['];
- in_parens = [(] (escaped_char|[^)\x00])* [)];
-
- scheme = [A-Za-z][A-Za-z0-9.+-]{1,31};
-*/
-
-// Try to match a scheme including colon.
-bufsize_t _scan_scheme(const unsigned char *p)
-{
- const unsigned char *marker = NULL;
- const unsigned char *start = p;
-/*!re2c
- scheme [:] { return (bufsize_t)(p - start); }
- * { return 0; }
-*/
-}
-
-// Try to match URI autolink after first <, returning number of chars matched.
-bufsize_t _scan_autolink_uri(const unsigned char *p)
-{
- const unsigned char *marker = NULL;
- const unsigned char *start = p;
-/*!re2c
- scheme [:][^\x00-\x20<>]*[>] { return (bufsize_t)(p - start); }
- * { return 0; }
-*/
-}
-
-// Try to match email autolink after first <, returning num of chars matched.
-bufsize_t _scan_autolink_email(const unsigned char *p)
-{
- const unsigned char *marker = NULL;
- const unsigned char *start = p;
-/*!re2c
- [a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+
- [@]
- [a-zA-Z0-9]([a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?
- ([.][a-zA-Z0-9]([a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*
- [>] { return (bufsize_t)(p - start); }
- * { return 0; }
-*/
-}
-
-// Try to match an HTML tag after first <, returning num of chars matched.
-bufsize_t _scan_html_tag(const unsigned char *p)
-{
- const unsigned char *marker = NULL;
- const unsigned char *start = p;
-/*!re2c
- htmltag { return (bufsize_t)(p - start); }
- * { return 0; }
-*/
-}
-
-// Try to (liberally) match an HTML tag after first <, returning num of chars matched.
-bufsize_t _scan_liberal_html_tag(const unsigned char *p)
-{
- const unsigned char *marker = NULL;
- const unsigned char *start = p;
-/*!re2c
- [^\n\x00]+ [>] { return (bufsize_t)(p - start); }
- * { return 0; }
-*/
-}
-
-// Try to match an HTML block tag start line, returning
-// an integer code for the type of block (1-6, matching the spec).
-// #7 is handled by a separate function, below.
-bufsize_t _scan_html_block_start(const unsigned char *p)
-{
- const unsigned char *marker = NULL;
-/*!re2c
- [<] ('script'|'pre'|'style') (spacechar | [>]) { return 1; }
- '' { return (bufsize_t)(p - start); }
- * { return 0; }
-*/
-}
-
-// Try to match an HTML block end line of type 3
-bufsize_t _scan_html_block_end_3(const unsigned char *p)
-{
- const unsigned char *marker = NULL;
- const unsigned char *start = p;
-/*!re2c
- [^\n\x00]* '?>' { return (bufsize_t)(p - start); }
- * { return 0; }
-*/
-}
-
-// Try to match an HTML block end line of type 4
-bufsize_t _scan_html_block_end_4(const unsigned char *p)
-{
- const unsigned char *marker = NULL;
- const unsigned char *start = p;
-/*!re2c
- [^\n\x00]* '>' { return (bufsize_t)(p - start); }
- * { return 0; }
-*/
-}
-
-// Try to match an HTML block end line of type 5
-bufsize_t _scan_html_block_end_5(const unsigned char *p)
-{
- const unsigned char *marker = NULL;
- const unsigned char *start = p;
-/*!re2c
- [^\n\x00]* ']]>' { return (bufsize_t)(p - start); }
- * { return 0; }
-*/
-}
-
-// Try to match a link title (in single quotes, in double quotes, or
-// in parentheses), returning number of chars matched. Allow one
-// level of internal nesting (quotes within quotes).
-bufsize_t _scan_link_title(const unsigned char *p)
-{
- const unsigned char *marker = NULL;
- const unsigned char *start = p;
-/*!re2c
- ["] (escaped_char|[^"\x00])* ["] { return (bufsize_t)(p - start); }
- ['] (escaped_char|[^'\x00])* ['] { return (bufsize_t)(p - start); }
- [(] (escaped_char|[^)\x00])* [)] { return (bufsize_t)(p - start); }
- * { return 0; }
-*/
-}
-
-// Match space characters, including newlines.
-bufsize_t _scan_spacechars(const unsigned char *p)
-{
- const unsigned char *start = p; \
-/*!re2c
- [ \t\v\f\r\n]+ { return (bufsize_t)(p - start); }
- * { return 0; }
-*/
-}
-
-// Match ATX heading start.
-bufsize_t _scan_atx_heading_start(const unsigned char *p)
-{
- const unsigned char *marker = NULL;
- const unsigned char *start = p;
-/*!re2c
- [#]{1,6} ([ \t]+|[\r\n]) { return (bufsize_t)(p - start); }
- * { return 0; }
-*/
-}
-
-// Match setext heading line. Return 1 for level-1 heading,
-// 2 for level-2, 0 for no match.
-bufsize_t _scan_setext_heading_line(const unsigned char *p)
-{
- const unsigned char *marker = NULL;
-/*!re2c
- [=]+ [ \t]* [\r\n] { return 1; }
- [-]+ [ \t]* [\r\n] { return 2; }
- * { return 0; }
-*/
-}
-
-// Scan a thematic break line: "...three or more hyphens, asterisks,
-// or underscores on a line by themselves. If you wish, you may use
-// spaces between the hyphens or asterisks."
-bufsize_t _scan_thematic_break(const unsigned char *p)
-{
- const unsigned char *marker = NULL;
- const unsigned char *start = p;
-/*!re2c
- ([*][ \t]*){3,} [ \t]* [\r\n] { return (bufsize_t)(p - start); }
- ([_][ \t]*){3,} [ \t]* [\r\n] { return (bufsize_t)(p - start); }
- ([-][ \t]*){3,} [ \t]* [\r\n] { return (bufsize_t)(p - start); }
- * { return 0; }
-*/
-}
-
-// Scan an opening code fence.
-bufsize_t _scan_open_code_fence(const unsigned char *p)
-{
- const unsigned char *marker = NULL;
- const unsigned char *start = p;
-/*!re2c
- [`]{3,} / [^`\r\n\x00]*[\r\n] { return (bufsize_t)(p - start); }
- [~]{3,} / [^~\r\n\x00]*[\r\n] { return (bufsize_t)(p - start); }
- * { return 0; }
-*/
-}
-
-// Scan a closing code fence with length at least len.
-bufsize_t _scan_close_code_fence(const unsigned char *p)
-{
- const unsigned char *marker = NULL;
- const unsigned char *start = p;
-/*!re2c
- [`]{3,} / [ \t]*[\r\n] { return (bufsize_t)(p - start); }
- [~]{3,} / [ \t]*[\r\n] { return (bufsize_t)(p - start); }
- * { return 0; }
-*/
-}
-
-// Scans an entity.
-// Returns number of chars matched.
-bufsize_t _scan_entity(const unsigned char *p)
-{
- const unsigned char *marker = NULL;
- const unsigned char *start = p;
-/*!re2c
- [&] ([#] ([Xx][A-Fa-f0-9]{1,8}|[0-9]{1,8}) |[A-Za-z][A-Za-z0-9]{1,31} ) [;]
- { return (bufsize_t)(p - start); }
- * { return 0; }
-*/
-}
-
-// Returns positive value if a URL begins in a way that is potentially
-// dangerous, with javascript:, vbscript:, file:, or data:, otherwise 0.
-bufsize_t _scan_dangerous_url(const unsigned char *p)
-{
- const unsigned char *marker = NULL;
- const unsigned char *start = p;
-/*!re2c
- 'data:image/' ('png'|'gif'|'jpeg'|'webp') { return 0; }
- 'javascript:' | 'vbscript:' | 'file:' | 'data:' { return (bufsize_t)(p - start); }
- * { return 0; }
-*/
-}
-
-// Scans a footnote definition opening.
-bufsize_t _scan_footnote_definition(const unsigned char *p)
-{
- const unsigned char *marker = NULL;
- const unsigned char *start = p;
-/*!re2c
- '[^' ([^\] \r\n\x00\t]+) ']:' [ \t]* { return (bufsize_t)(p - start); }
- * { return 0; }
-*/
-}
diff --git a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/strikethrough.c b/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/strikethrough.c
deleted file mode 100644
index e088422..0000000
--- a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/strikethrough.c
+++ /dev/null
@@ -1,167 +0,0 @@
-#include "strikethrough.h"
-#include
-#include
-
-cmark_node_type CMARK_NODE_STRIKETHROUGH;
-
-static cmark_node *match(cmark_syntax_extension *self, cmark_parser *parser,
- cmark_node *parent, unsigned char character,
- cmark_inline_parser *inline_parser) {
- cmark_node *res = NULL;
- int left_flanking, right_flanking, punct_before, punct_after, delims;
- char buffer[101];
-
- if (character != '~')
- return NULL;
-
- delims = cmark_inline_parser_scan_delimiters(
- inline_parser, sizeof(buffer) - 1, '~',
- &left_flanking,
- &right_flanking, &punct_before, &punct_after);
-
- memset(buffer, '~', delims);
- buffer[delims] = 0;
-
- res = cmark_node_new_with_mem(CMARK_NODE_TEXT, parser->mem);
- cmark_node_set_literal(res, buffer);
- res->start_line = res->end_line = cmark_inline_parser_get_line(inline_parser);
- res->start_column = cmark_inline_parser_get_column(inline_parser) - delims;
-
- if ((left_flanking || right_flanking) &&
- (delims == 2 || (!(parser->options & CMARK_OPT_STRIKETHROUGH_DOUBLE_TILDE) && delims == 1))) {
- cmark_inline_parser_push_delimiter(inline_parser, character, left_flanking,
- right_flanking, res);
- }
-
- return res;
-}
-
-static delimiter *insert(cmark_syntax_extension *self, cmark_parser *parser,
- cmark_inline_parser *inline_parser, delimiter *opener,
- delimiter *closer) {
- cmark_node *strikethrough;
- cmark_node *tmp, *next;
- delimiter *delim, *tmp_delim;
- delimiter *res = closer->next;
-
- strikethrough = opener->inl_text;
-
- if (opener->inl_text->as.literal.len != closer->inl_text->as.literal.len)
- goto done;
-
- if (!cmark_node_set_type(strikethrough, CMARK_NODE_STRIKETHROUGH))
- goto done;
-
- cmark_node_set_syntax_extension(strikethrough, self);
-
- tmp = cmark_node_next(opener->inl_text);
-
- while (tmp) {
- if (tmp == closer->inl_text)
- break;
- next = cmark_node_next(tmp);
- cmark_node_append_child(strikethrough, tmp);
- tmp = next;
- }
-
- strikethrough->end_column = closer->inl_text->start_column + closer->inl_text->as.literal.len - 1;
- cmark_node_free(closer->inl_text);
-
-done:
- delim = closer;
- while (delim != NULL && delim != opener) {
- tmp_delim = delim->previous;
- cmark_inline_parser_remove_delimiter(inline_parser, delim);
- delim = tmp_delim;
- }
-
- cmark_inline_parser_remove_delimiter(inline_parser, opener);
-
- return res;
-}
-
-static const char *get_type_string(cmark_syntax_extension *extension,
- cmark_node *node) {
- return node->type == CMARK_NODE_STRIKETHROUGH ? "strikethrough" : "";
-}
-
-static int can_contain(cmark_syntax_extension *extension, cmark_node *node,
- cmark_node_type child_type) {
- if (node->type != CMARK_NODE_STRIKETHROUGH)
- return false;
-
- return CMARK_NODE_TYPE_INLINE_P(child_type);
-}
-
-static void commonmark_render(cmark_syntax_extension *extension,
- cmark_renderer *renderer, cmark_node *node,
- cmark_event_type ev_type, int options) {
- renderer->out(renderer, node, "~~", false, LITERAL);
-}
-
-static void latex_render(cmark_syntax_extension *extension,
- cmark_renderer *renderer, cmark_node *node,
- cmark_event_type ev_type, int options) {
- // requires \usepackage{ulem}
- bool entering = (ev_type == CMARK_EVENT_ENTER);
- if (entering) {
- renderer->out(renderer, node, "\\sout{", false, LITERAL);
- } else {
- renderer->out(renderer, node, "}", false, LITERAL);
- }
-}
-
-static void man_render(cmark_syntax_extension *extension,
- cmark_renderer *renderer, cmark_node *node,
- cmark_event_type ev_type, int options) {
- bool entering = (ev_type == CMARK_EVENT_ENTER);
- if (entering) {
- renderer->cr(renderer);
- renderer->out(renderer, node, ".ST \"", false, LITERAL);
- } else {
- renderer->out(renderer, node, "\"", false, LITERAL);
- renderer->cr(renderer);
- }
-}
-
-static void html_render(cmark_syntax_extension *extension,
- cmark_html_renderer *renderer, cmark_node *node,
- cmark_event_type ev_type, int options) {
- bool entering = (ev_type == CMARK_EVENT_ENTER);
- if (entering) {
- cmark_strbuf_puts(renderer->html, "");
- } else {
- cmark_strbuf_puts(renderer->html, "");
- }
-}
-
-static void plaintext_render(cmark_syntax_extension *extension,
- cmark_renderer *renderer, cmark_node *node,
- cmark_event_type ev_type, int options) {
- renderer->out(renderer, node, "~", false, LITERAL);
-}
-
-cmark_syntax_extension *create_strikethrough_extension(void) {
- cmark_syntax_extension *ext = cmark_syntax_extension_new("strikethrough");
- cmark_llist *special_chars = NULL;
-
- cmark_syntax_extension_set_get_type_string_func(ext, get_type_string);
- cmark_syntax_extension_set_can_contain_func(ext, can_contain);
- cmark_syntax_extension_set_commonmark_render_func(ext, commonmark_render);
- cmark_syntax_extension_set_latex_render_func(ext, latex_render);
- cmark_syntax_extension_set_man_render_func(ext, man_render);
- cmark_syntax_extension_set_html_render_func(ext, html_render);
- cmark_syntax_extension_set_plaintext_render_func(ext, plaintext_render);
- CMARK_NODE_STRIKETHROUGH = cmark_syntax_extension_add_node(1);
-
- cmark_syntax_extension_set_match_inline_func(ext, match);
- cmark_syntax_extension_set_inline_from_delim_func(ext, insert);
-
- cmark_mem *mem = cmark_get_default_mem_allocator();
- special_chars = cmark_llist_append(mem, special_chars, (void *)'~');
- cmark_syntax_extension_set_special_inline_chars(ext, special_chars);
-
- cmark_syntax_extension_set_emphasis(ext, 1);
-
- return ext;
-}
diff --git a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/strikethrough.h b/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/strikethrough.h
deleted file mode 100644
index a52a2b4..0000000
--- a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/strikethrough.h
+++ /dev/null
@@ -1,9 +0,0 @@
-#ifndef CMARK_GFM_STRIKETHROUGH_H
-#define CMARK_GFM_STRIKETHROUGH_H
-
-#include "cmark-gfm-core-extensions.h"
-
-extern cmark_node_type CMARK_NODE_STRIKETHROUGH;
-cmark_syntax_extension *create_strikethrough_extension(void);
-
-#endif
diff --git a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/strikethrough.o b/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/strikethrough.o
deleted file mode 100644
index 796bd21..0000000
Binary files a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/strikethrough.o and /dev/null differ
diff --git a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/syntax_extension.c b/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/syntax_extension.c
deleted file mode 100644
index d24fe43..0000000
--- a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/syntax_extension.c
+++ /dev/null
@@ -1,149 +0,0 @@
-#include
-#include
-
-#include "cmark-gfm.h"
-#include "syntax_extension.h"
-#include "buffer.h"
-
-extern cmark_mem CMARK_DEFAULT_MEM_ALLOCATOR;
-
-static cmark_mem *_mem = &CMARK_DEFAULT_MEM_ALLOCATOR;
-
-void cmark_syntax_extension_free(cmark_mem *mem, cmark_syntax_extension *extension) {
- if (extension->free_function && extension->priv) {
- extension->free_function(mem, extension->priv);
- }
-
- cmark_llist_free(mem, extension->special_inline_chars);
- mem->free(extension->name);
- mem->free(extension);
-}
-
-cmark_syntax_extension *cmark_syntax_extension_new(const char *name) {
- cmark_syntax_extension *res = (cmark_syntax_extension *) _mem->calloc(1, sizeof(cmark_syntax_extension));
- res->name = (char *) _mem->calloc(1, sizeof(char) * (strlen(name)) + 1);
- strcpy(res->name, name);
- return res;
-}
-
-cmark_node_type cmark_syntax_extension_add_node(int is_inline) {
- cmark_node_type *ref = !is_inline ? &CMARK_NODE_LAST_BLOCK : &CMARK_NODE_LAST_INLINE;
-
- if ((*ref & CMARK_NODE_VALUE_MASK) == CMARK_NODE_VALUE_MASK) {
- assert(false);
- return (cmark_node_type) 0;
- }
-
- return *ref = (cmark_node_type) ((int) *ref + 1);
-}
-
-void cmark_syntax_extension_set_emphasis(cmark_syntax_extension *extension,
- int emphasis) {
- extension->emphasis = emphasis == 1;
-}
-
-void cmark_syntax_extension_set_open_block_func(cmark_syntax_extension *extension,
- cmark_open_block_func func) {
- extension->try_opening_block = func;
-}
-
-void cmark_syntax_extension_set_match_block_func(cmark_syntax_extension *extension,
- cmark_match_block_func func) {
- extension->last_block_matches = func;
-}
-
-void cmark_syntax_extension_set_match_inline_func(cmark_syntax_extension *extension,
- cmark_match_inline_func func) {
- extension->match_inline = func;
-}
-
-void cmark_syntax_extension_set_inline_from_delim_func(cmark_syntax_extension *extension,
- cmark_inline_from_delim_func func) {
- extension->insert_inline_from_delim = func;
-}
-
-void cmark_syntax_extension_set_special_inline_chars(cmark_syntax_extension *extension,
- cmark_llist *special_chars) {
- extension->special_inline_chars = special_chars;
-}
-
-void cmark_syntax_extension_set_get_type_string_func(cmark_syntax_extension *extension,
- cmark_get_type_string_func func) {
- extension->get_type_string_func = func;
-}
-
-void cmark_syntax_extension_set_can_contain_func(cmark_syntax_extension *extension,
- cmark_can_contain_func func) {
- extension->can_contain_func = func;
-}
-
-void cmark_syntax_extension_set_contains_inlines_func(cmark_syntax_extension *extension,
- cmark_contains_inlines_func func) {
- extension->contains_inlines_func = func;
-}
-
-void cmark_syntax_extension_set_commonmark_render_func(cmark_syntax_extension *extension,
- cmark_common_render_func func) {
- extension->commonmark_render_func = func;
-}
-
-void cmark_syntax_extension_set_plaintext_render_func(cmark_syntax_extension *extension,
- cmark_common_render_func func) {
- extension->plaintext_render_func = func;
-}
-
-void cmark_syntax_extension_set_latex_render_func(cmark_syntax_extension *extension,
- cmark_common_render_func func) {
- extension->latex_render_func = func;
-}
-
-void cmark_syntax_extension_set_xml_attr_func(cmark_syntax_extension *extension,
- cmark_xml_attr_func func) {
- extension->xml_attr_func = func;
-}
-
-void cmark_syntax_extension_set_man_render_func(cmark_syntax_extension *extension,
- cmark_common_render_func func) {
- extension->man_render_func = func;
-}
-
-void cmark_syntax_extension_set_html_render_func(cmark_syntax_extension *extension,
- cmark_html_render_func func) {
- extension->html_render_func = func;
-}
-
-void cmark_syntax_extension_set_html_filter_func(cmark_syntax_extension *extension,
- cmark_html_filter_func func) {
- extension->html_filter_func = func;
-}
-
-void cmark_syntax_extension_set_postprocess_func(cmark_syntax_extension *extension,
- cmark_postprocess_func func) {
- extension->postprocess_func = func;
-}
-
-void cmark_syntax_extension_set_private(cmark_syntax_extension *extension,
- void *priv,
- cmark_free_func free_func) {
- extension->priv = priv;
- extension->free_function = free_func;
-}
-
-void *cmark_syntax_extension_get_private(cmark_syntax_extension *extension) {
- return extension->priv;
-}
-
-void cmark_syntax_extension_set_opaque_alloc_func(cmark_syntax_extension *extension,
- cmark_opaque_alloc_func func) {
- extension->opaque_alloc_func = func;
-}
-
-void cmark_syntax_extension_set_opaque_free_func(cmark_syntax_extension *extension,
- cmark_opaque_free_func func) {
- extension->opaque_free_func = func;
-}
-
-void cmark_syntax_extension_set_commonmark_escape_func(cmark_syntax_extension *extension,
- cmark_commonmark_escape_func func) {
- extension->commonmark_escape_func = func;
-}
diff --git a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/syntax_extension.h b/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/syntax_extension.h
deleted file mode 100644
index a5fe11e..0000000
--- a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/syntax_extension.h
+++ /dev/null
@@ -1,34 +0,0 @@
-#ifndef CMARK_SYNTAX_EXTENSION_H
-#define CMARK_SYNTAX_EXTENSION_H
-
-#include "cmark-gfm.h"
-#include "cmark-gfm-extension_api.h"
-#include "config.h"
-
-struct cmark_syntax_extension {
- cmark_match_block_func last_block_matches;
- cmark_open_block_func try_opening_block;
- cmark_match_inline_func match_inline;
- cmark_inline_from_delim_func insert_inline_from_delim;
- cmark_llist * special_inline_chars;
- char * name;
- void * priv;
- bool emphasis;
- cmark_free_func free_function;
- cmark_get_type_string_func get_type_string_func;
- cmark_can_contain_func can_contain_func;
- cmark_contains_inlines_func contains_inlines_func;
- cmark_common_render_func commonmark_render_func;
- cmark_common_render_func plaintext_render_func;
- cmark_common_render_func latex_render_func;
- cmark_xml_attr_func xml_attr_func;
- cmark_common_render_func man_render_func;
- cmark_html_render_func html_render_func;
- cmark_html_filter_func html_filter_func;
- cmark_postprocess_func postprocess_func;
- cmark_opaque_alloc_func opaque_alloc_func;
- cmark_opaque_free_func opaque_free_func;
- cmark_commonmark_escape_func commonmark_escape_func;
-};
-
-#endif
diff --git a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/syntax_extension.o b/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/syntax_extension.o
deleted file mode 100644
index 89646f9..0000000
Binary files a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/syntax_extension.o and /dev/null differ
diff --git a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/table.c b/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/table.c
deleted file mode 100644
index e8359f2..0000000
--- a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/table.c
+++ /dev/null
@@ -1,917 +0,0 @@
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-
-#include "ext_scanners.h"
-#include "strikethrough.h"
-#include "table.h"
-#include "cmark-gfm-core-extensions.h"
-
-// Limit to prevent a malicious input from causing a denial of service.
-#define MAX_AUTOCOMPLETED_CELLS 0x80000
-
-// Custom node flag, initialized in `create_table_extension`.
-static cmark_node_internal_flags CMARK_NODE__TABLE_VISITED;
-
-cmark_node_type CMARK_NODE_TABLE, CMARK_NODE_TABLE_ROW,
- CMARK_NODE_TABLE_CELL;
-
-typedef struct {
- cmark_strbuf *buf;
- int start_offset, end_offset, internal_offset;
-} node_cell;
-
-typedef struct {
- uint16_t n_columns;
- int paragraph_offset;
- node_cell *cells;
-} table_row;
-
-typedef struct {
- uint16_t n_columns;
- uint8_t *alignments;
- int n_rows;
- int n_nonempty_cells;
-} node_table;
-
-typedef struct {
- bool is_header;
-} node_table_row;
-
-static void free_table_cell(cmark_mem *mem, node_cell *cell) {
- cmark_strbuf_free((cmark_strbuf *)cell->buf);
- mem->free(cell->buf);
-}
-
-static void free_row_cells(cmark_mem *mem, table_row *row) {
- while (row->n_columns > 0) {
- free_table_cell(mem, &row->cells[--row->n_columns]);
- }
- mem->free(row->cells);
- row->cells = NULL;
-}
-
-static void free_table_row(cmark_mem *mem, table_row *row) {
- if (!row)
- return;
-
- free_row_cells(mem, row);
- mem->free(row);
-}
-
-static void free_node_table(cmark_mem *mem, void *ptr) {
- node_table *t = (node_table *)ptr;
- mem->free(t->alignments);
- mem->free(t);
-}
-
-static void free_node_table_row(cmark_mem *mem, void *ptr) {
- mem->free(ptr);
-}
-
-static int get_n_table_columns(cmark_node *node) {
- if (!node || node->type != CMARK_NODE_TABLE)
- return -1;
-
- return (int)((node_table *)node->as.opaque)->n_columns;
-}
-
-static int set_n_table_columns(cmark_node *node, uint16_t n_columns) {
- if (!node || node->type != CMARK_NODE_TABLE)
- return 0;
-
- ((node_table *)node->as.opaque)->n_columns = n_columns;
- return 1;
-}
-
-// Increment the number of rows in the table. Also update n_nonempty_cells,
-// which keeps track of the number of cells which were parsed from the
-// input file. (If one of the rows is too short, then the trailing cells
-// are autocompleted. Autocompleted cells are not counted in n_nonempty_cells.)
-// The purpose of this is to prevent a malicious input from generating a very
-// large number of autocompleted cells, which could cause a denial of service
-// vulnerability.
-static int incr_table_row_count(cmark_node *node, int i) {
- if (!node || node->type != CMARK_NODE_TABLE) {
- return 0;
- }
-
- ((node_table *)node->as.opaque)->n_rows++;
- ((node_table *)node->as.opaque)->n_nonempty_cells += i;
- return 1;
-}
-
-// Calculate the number of autocompleted cells.
-static int get_n_autocompleted_cells(cmark_node *node) {
- if (!node || node->type != CMARK_NODE_TABLE) {
- return 0;
- }
-
- const node_table *nt = (node_table *)node->as.opaque;
- return (nt->n_columns * nt->n_rows) - nt->n_nonempty_cells;
-}
-
-static uint8_t *get_table_alignments(cmark_node *node) {
- if (!node || node->type != CMARK_NODE_TABLE)
- return 0;
-
- return ((node_table *)node->as.opaque)->alignments;
-}
-
-static int set_table_alignments(cmark_node *node, uint8_t *alignments) {
- if (!node || node->type != CMARK_NODE_TABLE)
- return 0;
-
- ((node_table *)node->as.opaque)->alignments = alignments;
- return 1;
-}
-
-static uint8_t get_cell_alignment(cmark_node *node) {
- if (!node || node->type != CMARK_NODE_TABLE_CELL)
- return 0;
-
- const uint8_t *alignments = get_table_alignments(node->parent->parent);
- int i = node->as.cell_index;
- return alignments[i];
-}
-
-static int set_cell_index(cmark_node *node, int i) {
- if (!node || node->type != CMARK_NODE_TABLE_CELL)
- return 0;
-
- node->as.cell_index = i;
- return 1;
-}
-
-static cmark_strbuf *unescape_pipes(cmark_mem *mem, unsigned char *string, bufsize_t len)
-{
- cmark_strbuf *res = (cmark_strbuf *)mem->calloc(1, sizeof(cmark_strbuf));
- bufsize_t r, w;
-
- cmark_strbuf_init(mem, res, len + 1);
- cmark_strbuf_put(res, string, len);
- cmark_strbuf_putc(res, '\0');
-
- for (r = 0, w = 0; r < len; ++r) {
- if (res->ptr[r] == '\\' && res->ptr[r + 1] == '|')
- r++;
-
- res->ptr[w++] = res->ptr[r];
- }
-
- cmark_strbuf_truncate(res, w);
-
- return res;
-}
-
-// Adds a new cell to the end of the row. A pointer to the new cell is returned
-// for the caller to initialize.
-static node_cell* append_row_cell(cmark_mem *mem, table_row *row) {
- const uint32_t n_columns = row->n_columns + 1;
- // realloc when n_columns is a power of 2
- if ((n_columns & (n_columns-1)) == 0) {
- // make sure we never wrap row->n_columns
- // offset will != len and our exit will clean up as intended
- if (n_columns > UINT16_MAX) {
- return NULL;
- }
- // Use realloc to double the size of the buffer.
- row->cells = (node_cell *)mem->realloc(row->cells, (2 * n_columns - 1) * sizeof(node_cell));
- }
- row->n_columns = (uint16_t)n_columns;
- return &row->cells[n_columns-1];
-}
-
-static table_row *row_from_string(cmark_syntax_extension *self,
- cmark_parser *parser, unsigned char *string,
- int len) {
- // Parses a single table row. It has the following form:
- // `delim? table_cell (delim table_cell)* delim? newline`
- // Note that cells are allowed to be empty.
- //
- // From the GitHub-flavored Markdown specification:
- //
- // > Each row consists of cells containing arbitrary text, in which inlines
- // > are parsed, separated by pipes (|). A leading and trailing pipe is also
- // > recommended for clarity of reading, and if there’s otherwise parsing
- // > ambiguity.
-
- table_row *row = NULL;
- bufsize_t cell_matched = 1, pipe_matched = 1, offset;
- int expect_more_cells = 1;
- int row_end_offset = 0;
- int int_overflow_abort = 0;
-
- row = (table_row *)parser->mem->calloc(1, sizeof(table_row));
- row->n_columns = 0;
- row->cells = NULL;
-
- // Scan past the (optional) leading pipe.
- offset = scan_table_cell_end(string, len, 0);
-
- // Parse the cells of the row. Stop if we reach the end of the input, or if we
- // cannot detect any more cells.
- while (offset < len && expect_more_cells) {
- cell_matched = scan_table_cell(string, len, offset);
- pipe_matched = scan_table_cell_end(string, len, offset + cell_matched);
-
- if (cell_matched || pipe_matched) {
- // We are guaranteed to have a cell, since (1) either we found some
- // content and cell_matched, or (2) we found an empty cell followed by a
- // pipe.
- cmark_strbuf *cell_buf = unescape_pipes(parser->mem, string + offset,
- cell_matched);
- cmark_strbuf_trim(cell_buf);
-
- node_cell *cell = append_row_cell(parser->mem, row);
- if (!cell) {
- int_overflow_abort = 1;
- cmark_strbuf_free(cell_buf);
- parser->mem->free(cell_buf);
- break;
- }
- cell->buf = cell_buf;
- cell->start_offset = offset;
- cell->end_offset = offset + cell_matched - 1;
- cell->internal_offset = 0;
-
- while (cell->start_offset > row->paragraph_offset && string[cell->start_offset - 1] != '|') {
- --cell->start_offset;
- ++cell->internal_offset;
- }
- }
-
- offset += cell_matched + pipe_matched;
-
- if (pipe_matched) {
- expect_more_cells = 1;
- } else {
- // We've scanned the last cell. Check if we have reached the end of the row
- row_end_offset = scan_table_row_end(string, len, offset);
- offset += row_end_offset;
-
- // If the end of the row is not the end of the input,
- // the row is not a real row but potentially part of the paragraph
- // preceding the table.
- if (row_end_offset && offset != len) {
- row->paragraph_offset = offset;
-
- free_row_cells(parser->mem, row);
-
- // Scan past the (optional) leading pipe.
- offset += scan_table_cell_end(string, len, offset);
-
- expect_more_cells = 1;
- } else {
- expect_more_cells = 0;
- }
- }
- }
-
- if (offset != len || row->n_columns == 0 || int_overflow_abort) {
- free_table_row(parser->mem, row);
- row = NULL;
- }
-
- return row;
-}
-
-static void try_inserting_table_header_paragraph(cmark_parser *parser,
- cmark_node *parent_container,
- unsigned char *parent_string,
- int paragraph_offset) {
- cmark_node *paragraph;
- cmark_strbuf *paragraph_content;
-
- paragraph = cmark_node_new_with_mem(CMARK_NODE_PARAGRAPH, parser->mem);
-
- paragraph_content = unescape_pipes(parser->mem, parent_string, paragraph_offset);
- cmark_strbuf_trim(paragraph_content);
- cmark_node_set_string_content(paragraph, (char *) paragraph_content->ptr);
- cmark_strbuf_free(paragraph_content);
- parser->mem->free(paragraph_content);
-
- if (!cmark_node_insert_before(parent_container, paragraph)) {
- parser->mem->free(paragraph);
- }
-}
-
-static cmark_node *try_opening_table_header(cmark_syntax_extension *self,
- cmark_parser *parser,
- cmark_node *parent_container,
- unsigned char *input, int len) {
- cmark_node *table_header;
- table_row *header_row = NULL;
- table_row *delimiter_row = NULL;
- node_table_row *ntr;
- const char *parent_string;
- uint16_t i;
-
- if (parent_container->flags & CMARK_NODE__TABLE_VISITED) {
- return parent_container;
- }
-
- if (!scan_table_start(input, len, cmark_parser_get_first_nonspace(parser))) {
- return parent_container;
- }
-
- // Since scan_table_start was successful, we must have a delimiter row.
- delimiter_row = row_from_string(
- self, parser, input + cmark_parser_get_first_nonspace(parser),
- len - cmark_parser_get_first_nonspace(parser));
- // assert may be optimized out, don't rely on it for security boundaries
- if (!delimiter_row) {
- return parent_container;
- }
-
- assert(delimiter_row);
-
- cmark_arena_push();
-
- // Check for a matching header row. We call `row_from_string` with the entire
- // (potentially long) parent container as input, but this should be safe since
- // `row_from_string` bails out early if it does not find a row.
- parent_string = cmark_node_get_string_content(parent_container);
- header_row = row_from_string(self, parser, (unsigned char *)parent_string,
- (int)strlen(parent_string));
- if (!header_row || header_row->n_columns != delimiter_row->n_columns) {
- free_table_row(parser->mem, delimiter_row);
- free_table_row(parser->mem, header_row);
- cmark_arena_pop();
- parent_container->flags |= CMARK_NODE__TABLE_VISITED;
- return parent_container;
- }
-
- if (cmark_arena_pop()) {
- delimiter_row = row_from_string(
- self, parser, input + cmark_parser_get_first_nonspace(parser),
- len - cmark_parser_get_first_nonspace(parser));
- header_row = row_from_string(self, parser, (unsigned char *)parent_string,
- (int)strlen(parent_string));
- // row_from_string can return NULL, add additional check to ensure n_columns match
- if (!delimiter_row || !header_row || header_row->n_columns != delimiter_row->n_columns) {
- free_table_row(parser->mem, delimiter_row);
- free_table_row(parser->mem, header_row);
- return parent_container;
- }
- }
-
- if (!cmark_node_set_type(parent_container, CMARK_NODE_TABLE)) {
- free_table_row(parser->mem, header_row);
- free_table_row(parser->mem, delimiter_row);
- return parent_container;
- }
-
- if (header_row->paragraph_offset) {
- try_inserting_table_header_paragraph(parser, parent_container, (unsigned char *)parent_string,
- header_row->paragraph_offset);
- }
-
- cmark_node_set_syntax_extension(parent_container, self);
- parent_container->as.opaque = parser->mem->calloc(1, sizeof(node_table));
- set_n_table_columns(parent_container, header_row->n_columns);
-
- // allocate alignments based on delimiter_row->n_columns
- // since we populate the alignments array based on delimiter_row->cells
- uint8_t *alignments =
- (uint8_t *)parser->mem->calloc(delimiter_row->n_columns, sizeof(uint8_t));
- for (i = 0; i < delimiter_row->n_columns; ++i) {
- node_cell *node = &delimiter_row->cells[i];
- bool left = node->buf->ptr[0] == ':', right = node->buf->ptr[node->buf->size - 1] == ':';
-
- if (left && right)
- alignments[i] = 'c';
- else if (left)
- alignments[i] = 'l';
- else if (right)
- alignments[i] = 'r';
- }
- set_table_alignments(parent_container, alignments);
-
- table_header =
- cmark_parser_add_child(parser, parent_container, CMARK_NODE_TABLE_ROW,
- parent_container->start_column);
- cmark_node_set_syntax_extension(table_header, self);
- table_header->end_column = parent_container->start_column + (int)strlen(parent_string) - 2;
- table_header->start_line = table_header->end_line = parent_container->start_line;
-
- table_header->as.opaque = ntr = (node_table_row *)parser->mem->calloc(1, sizeof(node_table_row));
- ntr->is_header = true;
-
- for (i = 0; i < header_row->n_columns; ++i) {
- node_cell *cell = &header_row->cells[i];
- cmark_node *header_cell = cmark_parser_add_child(parser, table_header,
- CMARK_NODE_TABLE_CELL, parent_container->start_column + cell->start_offset);
- header_cell->start_line = header_cell->end_line = parent_container->start_line;
- header_cell->internal_offset = cell->internal_offset;
- header_cell->end_column = parent_container->start_column + cell->end_offset;
- cmark_node_set_string_content(header_cell, (char *) cell->buf->ptr);
- cmark_node_set_syntax_extension(header_cell, self);
- set_cell_index(header_cell, i);
- }
-
- incr_table_row_count(parent_container, i);
-
- cmark_parser_advance_offset(
- parser, (char *)input,
- (int)strlen((char *)input) - 1 - cmark_parser_get_offset(parser), false);
-
- free_table_row(parser->mem, header_row);
- free_table_row(parser->mem, delimiter_row);
- return parent_container;
-}
-
-static cmark_node *try_opening_table_row(cmark_syntax_extension *self,
- cmark_parser *parser,
- cmark_node *parent_container,
- unsigned char *input, int len) {
- cmark_node *table_row_block;
- table_row *row;
-
- if (cmark_parser_is_blank(parser))
- return NULL;
-
- if (get_n_autocompleted_cells(parent_container) > MAX_AUTOCOMPLETED_CELLS) {
- return NULL;
- }
-
- table_row_block =
- cmark_parser_add_child(parser, parent_container, CMARK_NODE_TABLE_ROW,
- parent_container->start_column);
- cmark_node_set_syntax_extension(table_row_block, self);
- table_row_block->end_column = parent_container->end_column;
- table_row_block->as.opaque = parser->mem->calloc(1, sizeof(node_table_row));
-
- row = row_from_string(self, parser, input + cmark_parser_get_first_nonspace(parser),
- len - cmark_parser_get_first_nonspace(parser));
-
- if (!row) {
- // clean up the dangling node
- cmark_node_free(table_row_block);
- return NULL;
- }
-
- {
- int i, table_columns = get_n_table_columns(parent_container);
-
- for (i = 0; i < row->n_columns && i < table_columns; ++i) {
- node_cell *cell = &row->cells[i];
- cmark_node *node = cmark_parser_add_child(parser, table_row_block,
- CMARK_NODE_TABLE_CELL, parent_container->start_column + cell->start_offset);
- node->internal_offset = cell->internal_offset;
- node->end_column = parent_container->start_column + cell->end_offset;
- cmark_node_set_string_content(node, (char *) cell->buf->ptr);
- cmark_node_set_syntax_extension(node, self);
- set_cell_index(node, i);
- }
-
- incr_table_row_count(parent_container, i);
-
- for (; i < table_columns; ++i) {
- cmark_node *node = cmark_parser_add_child(
- parser, table_row_block, CMARK_NODE_TABLE_CELL, 0);
- cmark_node_set_syntax_extension(node, self);
- set_cell_index(node, i);
- }
- }
-
- free_table_row(parser->mem, row);
-
- cmark_parser_advance_offset(parser, (char *)input,
- len - 1 - cmark_parser_get_offset(parser), false);
-
- return table_row_block;
-}
-
-static cmark_node *try_opening_table_block(cmark_syntax_extension *self,
- int indented, cmark_parser *parser,
- cmark_node *parent_container,
- unsigned char *input, int len) {
- cmark_node_type parent_type = cmark_node_get_type(parent_container);
-
- if (!indented && parent_type == CMARK_NODE_PARAGRAPH) {
- return try_opening_table_header(self, parser, parent_container, input, len);
- } else if (!indented && parent_type == CMARK_NODE_TABLE) {
- return try_opening_table_row(self, parser, parent_container, input, len);
- }
-
- return NULL;
-}
-
-static int matches(cmark_syntax_extension *self, cmark_parser *parser,
- unsigned char *input, int len,
- cmark_node *parent_container) {
- int res = 0;
-
- if (cmark_node_get_type(parent_container) == CMARK_NODE_TABLE) {
- cmark_arena_push();
- table_row *new_row = row_from_string(
- self, parser, input + cmark_parser_get_first_nonspace(parser),
- len - cmark_parser_get_first_nonspace(parser));
- if (new_row && new_row->n_columns)
- res = 1;
- free_table_row(parser->mem, new_row);
- cmark_arena_pop();
- }
-
- return res;
-}
-
-static const char *get_type_string(cmark_syntax_extension *self,
- cmark_node *node) {
- if (node->type == CMARK_NODE_TABLE) {
- return "table";
- } else if (node->type == CMARK_NODE_TABLE_ROW) {
- if (((node_table_row *)node->as.opaque)->is_header)
- return "table_header";
- else
- return "table_row";
- } else if (node->type == CMARK_NODE_TABLE_CELL) {
- return "table_cell";
- }
-
- return "";
-}
-
-static int can_contain(cmark_syntax_extension *extension, cmark_node *node,
- cmark_node_type child_type) {
- if (node->type == CMARK_NODE_TABLE) {
- return child_type == CMARK_NODE_TABLE_ROW;
- } else if (node->type == CMARK_NODE_TABLE_ROW) {
- return child_type == CMARK_NODE_TABLE_CELL;
- } else if (node->type == CMARK_NODE_TABLE_CELL) {
- return child_type == CMARK_NODE_TEXT || child_type == CMARK_NODE_CODE ||
- child_type == CMARK_NODE_EMPH || child_type == CMARK_NODE_STRONG ||
- child_type == CMARK_NODE_LINK || child_type == CMARK_NODE_IMAGE ||
- child_type == CMARK_NODE_STRIKETHROUGH ||
- child_type == CMARK_NODE_HTML_INLINE ||
- child_type == CMARK_NODE_FOOTNOTE_REFERENCE;
- }
- return false;
-}
-
-static int contains_inlines(cmark_syntax_extension *extension,
- cmark_node *node) {
- return node->type == CMARK_NODE_TABLE_CELL;
-}
-
-static void commonmark_render(cmark_syntax_extension *extension,
- cmark_renderer *renderer, cmark_node *node,
- cmark_event_type ev_type, int options) {
- bool entering = (ev_type == CMARK_EVENT_ENTER);
-
- if (node->type == CMARK_NODE_TABLE) {
- renderer->blankline(renderer);
- } else if (node->type == CMARK_NODE_TABLE_ROW) {
- if (entering) {
- renderer->cr(renderer);
- renderer->out(renderer, node, "|", false, LITERAL);
- }
- } else if (node->type == CMARK_NODE_TABLE_CELL) {
- if (entering) {
- renderer->out(renderer, node, " ", false, LITERAL);
- } else {
- renderer->out(renderer, node, " |", false, LITERAL);
- if (((node_table_row *)node->parent->as.opaque)->is_header &&
- !node->next) {
- int i;
- uint8_t *alignments = get_table_alignments(node->parent->parent);
- uint16_t n_cols =
- ((node_table *)node->parent->parent->as.opaque)->n_columns;
- renderer->cr(renderer);
- renderer->out(renderer, node, "|", false, LITERAL);
- for (i = 0; i < n_cols; i++) {
- switch (alignments[i]) {
- case 0: renderer->out(renderer, node, " --- |", false, LITERAL); break;
- case 'l': renderer->out(renderer, node, " :-- |", false, LITERAL); break;
- case 'c': renderer->out(renderer, node, " :-: |", false, LITERAL); break;
- case 'r': renderer->out(renderer, node, " --: |", false, LITERAL); break;
- }
- }
- renderer->cr(renderer);
- }
- }
- } else {
- assert(false);
- }
-}
-
-static void latex_render(cmark_syntax_extension *extension,
- cmark_renderer *renderer, cmark_node *node,
- cmark_event_type ev_type, int options) {
- bool entering = (ev_type == CMARK_EVENT_ENTER);
-
- if (node->type == CMARK_NODE_TABLE) {
- if (entering) {
- int i;
- uint16_t n_cols;
- uint8_t *alignments = get_table_alignments(node);
-
- renderer->cr(renderer);
- renderer->out(renderer, node, "\\begin{table}", false, LITERAL);
- renderer->cr(renderer);
- renderer->out(renderer, node, "\\begin{tabular}{", false, LITERAL);
-
- n_cols = ((node_table *)node->as.opaque)->n_columns;
- for (i = 0; i < n_cols; i++) {
- switch(alignments[i]) {
- case 0:
- case 'l':
- renderer->out(renderer, node, "l", false, LITERAL);
- break;
- case 'c':
- renderer->out(renderer, node, "c", false, LITERAL);
- break;
- case 'r':
- renderer->out(renderer, node, "r", false, LITERAL);
- break;
- }
- }
- renderer->out(renderer, node, "}", false, LITERAL);
- renderer->cr(renderer);
- } else {
- renderer->out(renderer, node, "\\end{tabular}", false, LITERAL);
- renderer->cr(renderer);
- renderer->out(renderer, node, "\\end{table}", false, LITERAL);
- renderer->cr(renderer);
- }
- } else if (node->type == CMARK_NODE_TABLE_ROW) {
- if (!entering) {
- renderer->cr(renderer);
- }
- } else if (node->type == CMARK_NODE_TABLE_CELL) {
- if (!entering) {
- if (node->next) {
- renderer->out(renderer, node, " & ", false, LITERAL);
- } else {
- renderer->out(renderer, node, " \\\\", false, LITERAL);
- }
- }
- } else {
- assert(false);
- }
-}
-
-static const char *xml_attr(cmark_syntax_extension *extension,
- cmark_node *node) {
- if (node->type == CMARK_NODE_TABLE_CELL) {
- if (cmark_gfm_extensions_get_table_row_is_header(node->parent)) {
- switch (get_cell_alignment(node)) {
- case 'l': return " align=\"left\"";
- case 'c': return " align=\"center\"";
- case 'r': return " align=\"right\"";
- }
- }
- }
-
- return NULL;
-}
-
-static void man_render(cmark_syntax_extension *extension,
- cmark_renderer *renderer, cmark_node *node,
- cmark_event_type ev_type, int options) {
- bool entering = (ev_type == CMARK_EVENT_ENTER);
-
- if (node->type == CMARK_NODE_TABLE) {
- if (entering) {
- int i;
- uint16_t n_cols;
- uint8_t *alignments = get_table_alignments(node);
-
- renderer->cr(renderer);
- renderer->out(renderer, node, ".TS", false, LITERAL);
- renderer->cr(renderer);
- renderer->out(renderer, node, "tab(@);", false, LITERAL);
- renderer->cr(renderer);
-
- n_cols = ((node_table *)node->as.opaque)->n_columns;
-
- for (i = 0; i < n_cols; i++) {
- switch (alignments[i]) {
- case 'l':
- renderer->out(renderer, node, "l", false, LITERAL);
- break;
- case 0:
- case 'c':
- renderer->out(renderer, node, "c", false, LITERAL);
- break;
- case 'r':
- renderer->out(renderer, node, "r", false, LITERAL);
- break;
- }
- }
-
- if (n_cols) {
- renderer->out(renderer, node, ".", false, LITERAL);
- renderer->cr(renderer);
- }
- } else {
- renderer->out(renderer, node, ".TE", false, LITERAL);
- renderer->cr(renderer);
- }
- } else if (node->type == CMARK_NODE_TABLE_ROW) {
- if (!entering) {
- renderer->cr(renderer);
- }
- } else if (node->type == CMARK_NODE_TABLE_CELL) {
- if (!entering && node->next) {
- renderer->out(renderer, node, "@", false, LITERAL);
- }
- } else {
- assert(false);
- }
-}
-
-static void html_table_add_align(cmark_strbuf* html, const char* align, int options) {
- if (options & CMARK_OPT_TABLE_PREFER_STYLE_ATTRIBUTES) {
- cmark_strbuf_puts(html, " style=\"text-align: ");
- cmark_strbuf_puts(html, align);
- cmark_strbuf_puts(html, "\"");
- } else {
- cmark_strbuf_puts(html, " align=\"");
- cmark_strbuf_puts(html, align);
- cmark_strbuf_puts(html, "\"");
- }
-}
-
-struct html_table_state {
- unsigned need_closing_table_body : 1;
- unsigned in_table_header : 1;
-};
-
-static void html_render(cmark_syntax_extension *extension,
- cmark_html_renderer *renderer, cmark_node *node,
- cmark_event_type ev_type, int options) {
- bool entering = (ev_type == CMARK_EVENT_ENTER);
- cmark_strbuf *html = renderer->html;
-
- // XXX: we just monopolise renderer->opaque.
- struct html_table_state *table_state =
- (struct html_table_state *)&renderer->opaque;
-
- if (node->type == CMARK_NODE_TABLE) {
- if (entering) {
- cmark_html_render_cr(html);
- cmark_strbuf_puts(html, "');
- table_state->need_closing_table_body = false;
- } else {
- if (table_state->need_closing_table_body) {
- cmark_html_render_cr(html);
- cmark_strbuf_puts(html, "");
- cmark_html_render_cr(html);
- }
- table_state->need_closing_table_body = false;
- cmark_html_render_cr(html);
- cmark_strbuf_puts(html, "
");
- cmark_html_render_cr(html);
- }
- } else if (node->type == CMARK_NODE_TABLE_ROW) {
- if (entering) {
- cmark_html_render_cr(html);
- if (((node_table_row *)node->as.opaque)->is_header) {
- table_state->in_table_header = 1;
- cmark_strbuf_puts(html, "");
- cmark_html_render_cr(html);
- } else if (!table_state->need_closing_table_body) {
- cmark_strbuf_puts(html, "");
- cmark_html_render_cr(html);
- table_state->need_closing_table_body = 1;
- }
- cmark_strbuf_puts(html, "');
- } else {
- cmark_html_render_cr(html);
- cmark_strbuf_puts(html, " ");
- if (((node_table_row *)node->as.opaque)->is_header) {
- cmark_html_render_cr(html);
- cmark_strbuf_puts(html, "");
- table_state->in_table_header = false;
- }
- }
- } else if (node->type == CMARK_NODE_TABLE_CELL) {
- if (entering) {
- cmark_html_render_cr(html);
- if (table_state->in_table_header) {
- cmark_strbuf_puts(html, "');
- } else {
- if (table_state->in_table_header) {
- cmark_strbuf_puts(html, " ");
- } else {
- cmark_strbuf_puts(html, "");
- }
- }
- } else {
- assert(false);
- }
-}
-
-static void opaque_alloc(cmark_syntax_extension *self, cmark_mem *mem, cmark_node *node) {
- if (node->type == CMARK_NODE_TABLE) {
- node->as.opaque = mem->calloc(1, sizeof(node_table));
- } else if (node->type == CMARK_NODE_TABLE_ROW) {
- node->as.opaque = mem->calloc(1, sizeof(node_table_row));
- } else if (node->type == CMARK_NODE_TABLE_CELL) {
- node->as.opaque = mem->calloc(1, sizeof(node_cell));
- }
-}
-
-static void opaque_free(cmark_syntax_extension *self, cmark_mem *mem, cmark_node *node) {
- if (node->type == CMARK_NODE_TABLE) {
- free_node_table(mem, node->as.opaque);
- } else if (node->type == CMARK_NODE_TABLE_ROW) {
- free_node_table_row(mem, node->as.opaque);
- }
-}
-
-static int escape(cmark_syntax_extension *self, cmark_node *node, int c) {
- return
- node->type != CMARK_NODE_TABLE &&
- node->type != CMARK_NODE_TABLE_ROW &&
- node->type != CMARK_NODE_TABLE_CELL &&
- c == '|';
-}
-
-cmark_syntax_extension *create_table_extension(void) {
- cmark_syntax_extension *self = cmark_syntax_extension_new("table");
-
- cmark_register_node_flag(&CMARK_NODE__TABLE_VISITED);
- cmark_syntax_extension_set_match_block_func(self, matches);
- cmark_syntax_extension_set_open_block_func(self, try_opening_table_block);
- cmark_syntax_extension_set_get_type_string_func(self, get_type_string);
- cmark_syntax_extension_set_can_contain_func(self, can_contain);
- cmark_syntax_extension_set_contains_inlines_func(self, contains_inlines);
- cmark_syntax_extension_set_commonmark_render_func(self, commonmark_render);
- cmark_syntax_extension_set_plaintext_render_func(self, commonmark_render);
- cmark_syntax_extension_set_latex_render_func(self, latex_render);
- cmark_syntax_extension_set_xml_attr_func(self, xml_attr);
- cmark_syntax_extension_set_man_render_func(self, man_render);
- cmark_syntax_extension_set_html_render_func(self, html_render);
- cmark_syntax_extension_set_opaque_alloc_func(self, opaque_alloc);
- cmark_syntax_extension_set_opaque_free_func(self, opaque_free);
- cmark_syntax_extension_set_commonmark_escape_func(self, escape);
- CMARK_NODE_TABLE = cmark_syntax_extension_add_node(0);
- CMARK_NODE_TABLE_ROW = cmark_syntax_extension_add_node(0);
- CMARK_NODE_TABLE_CELL = cmark_syntax_extension_add_node(0);
-
- return self;
-}
-
-uint16_t cmark_gfm_extensions_get_table_columns(cmark_node *node) {
- if (node->type != CMARK_NODE_TABLE)
- return 0;
-
- return ((node_table *)node->as.opaque)->n_columns;
-}
-
-uint8_t *cmark_gfm_extensions_get_table_alignments(cmark_node *node) {
- if (node->type != CMARK_NODE_TABLE)
- return 0;
-
- return ((node_table *)node->as.opaque)->alignments;
-}
-
-int cmark_gfm_extensions_set_table_columns(cmark_node *node, uint16_t n_columns) {
- return set_n_table_columns(node, n_columns);
-}
-
-int cmark_gfm_extensions_set_table_alignments(cmark_node *node, uint16_t ncols, uint8_t *alignments) {
- uint8_t *a = (uint8_t *)cmark_node_mem(node)->calloc(1, ncols);
- memcpy(a, alignments, ncols);
- return set_table_alignments(node, a);
-}
-
-int cmark_gfm_extensions_get_table_row_is_header(cmark_node *node)
-{
- if (!node || node->type != CMARK_NODE_TABLE_ROW)
- return 0;
-
- return ((node_table_row *)node->as.opaque)->is_header;
-}
-
-int cmark_gfm_extensions_set_table_row_is_header(cmark_node *node, int is_header)
-{
- if (!node || node->type != CMARK_NODE_TABLE_ROW)
- return 0;
-
- ((node_table_row *)node->as.opaque)->is_header = (is_header != 0);
- return 1;
-}
diff --git a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/table.h b/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/table.h
deleted file mode 100644
index f6a0634..0000000
--- a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/table.h
+++ /dev/null
@@ -1,12 +0,0 @@
-#ifndef CMARK_GFM_TABLE_H
-#define CMARK_GFM_TABLE_H
-
-#include "cmark-gfm-core-extensions.h"
-
-
-extern cmark_node_type CMARK_NODE_TABLE, CMARK_NODE_TABLE_ROW,
- CMARK_NODE_TABLE_CELL;
-
-cmark_syntax_extension *create_table_extension(void);
-
-#endif
diff --git a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/table.o b/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/table.o
deleted file mode 100644
index 3f2ce51..0000000
Binary files a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/table.o and /dev/null differ
diff --git a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/tagfilter.c b/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/tagfilter.c
deleted file mode 100644
index 262352e..0000000
--- a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/tagfilter.c
+++ /dev/null
@@ -1,60 +0,0 @@
-#include "tagfilter.h"
-#include
-#include
-
-static const char *blacklist[] = {
- "title", "textarea", "style", "xmp", "iframe",
- "noembed", "noframes", "script", "plaintext", NULL,
-};
-
-static int is_tag(const unsigned char *tag_data, size_t tag_size,
- const char *tagname) {
- size_t i;
-
- if (tag_size < 3 || tag_data[0] != '<')
- return 0;
-
- i = 1;
-
- if (tag_data[i] == '/') {
- i++;
- }
-
- for (; i < tag_size; ++i, ++tagname) {
- if (*tagname == 0)
- break;
-
- if (tolower(tag_data[i]) != *tagname)
- return 0;
- }
-
- if (i == tag_size)
- return 0;
-
- if (cmark_isspace(tag_data[i]) || tag_data[i] == '>')
- return 1;
-
- if (tag_data[i] == '/' && tag_size >= i + 2 && tag_data[i + 1] == '>')
- return 1;
-
- return 0;
-}
-
-static int filter(cmark_syntax_extension *ext, const unsigned char *tag,
- size_t tag_len) {
- const char **it;
-
- for (it = blacklist; *it; ++it) {
- if (is_tag(tag, tag_len, *it)) {
- return 0;
- }
- }
-
- return 1;
-}
-
-cmark_syntax_extension *create_tagfilter_extension(void) {
- cmark_syntax_extension *ext = cmark_syntax_extension_new("tagfilter");
- cmark_syntax_extension_set_html_filter_func(ext, filter);
- return ext;
-}
diff --git a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/tagfilter.h b/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/tagfilter.h
deleted file mode 100644
index 9a5f388..0000000
--- a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/tagfilter.h
+++ /dev/null
@@ -1,8 +0,0 @@
-#ifndef CMARK_GFM_TAGFILTER_H
-#define CMARK_GFM_TAGFILTER_H
-
-#include "cmark-gfm-core-extensions.h"
-
-cmark_syntax_extension *create_tagfilter_extension(void);
-
-#endif
diff --git a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/tagfilter.o b/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/tagfilter.o
deleted file mode 100644
index 1befe5c..0000000
Binary files a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/tagfilter.o and /dev/null differ
diff --git a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/tasklist.c b/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/tasklist.c
deleted file mode 100644
index 7bef454..0000000
--- a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/tasklist.c
+++ /dev/null
@@ -1,156 +0,0 @@
-#include "tasklist.h"
-#include
-#include
-#include
-#include "ext_scanners.h"
-
-typedef enum {
- CMARK_TASKLIST_NOCHECKED,
- CMARK_TASKLIST_CHECKED,
-} cmark_tasklist_type;
-
-// Local constants
-static const char *TYPE_STRING = "tasklist";
-
-static const char *get_type_string(cmark_syntax_extension *extension, cmark_node *node) {
- return TYPE_STRING;
-}
-
-
-// Return 1 if state was set, 0 otherwise
-int cmark_gfm_extensions_set_tasklist_item_checked(cmark_node *node, bool is_checked) {
- // The node has to exist, and be an extension, and actually be the right type in order to get the value.
- if (!node || !node->extension || strcmp(cmark_node_get_type_string(node), TYPE_STRING))
- return 0;
-
- node->as.list.checked = is_checked;
- return 1;
-}
-
-bool cmark_gfm_extensions_get_tasklist_item_checked(cmark_node *node) {
- if (!node || !node->extension || strcmp(cmark_node_get_type_string(node), TYPE_STRING))
- return false;
-
- if (node->as.list.checked) {
- return true;
- }
- else {
- return false;
- }
-}
-
-static bool parse_node_item_prefix(cmark_parser *parser, const char *input,
- cmark_node *container) {
- bool res = false;
-
- if (parser->indent >=
- container->as.list.marker_offset + container->as.list.padding) {
- cmark_parser_advance_offset(parser, input, container->as.list.marker_offset +
- container->as.list.padding,
- true);
- res = true;
- } else if (parser->blank && container->first_child != NULL) {
- // if container->first_child is NULL, then the opening line
- // of the list item was blank after the list marker; in this
- // case, we are done with the list item.
- cmark_parser_advance_offset(parser, input, parser->first_nonspace - parser->offset,
- false);
- res = true;
- }
- return res;
-}
-
-static int matches(cmark_syntax_extension *self, cmark_parser *parser,
- unsigned char *input, int len,
- cmark_node *parent_container) {
- return parse_node_item_prefix(parser, (const char*)input, parent_container);
-}
-
-static int can_contain(cmark_syntax_extension *extension, cmark_node *node,
- cmark_node_type child_type) {
- return (node->type == CMARK_NODE_ITEM) ? 1 : 0;
-}
-
-static cmark_node *open_tasklist_item(cmark_syntax_extension *self,
- int indented, cmark_parser *parser,
- cmark_node *parent_container,
- unsigned char *input, int len) {
- cmark_node_type node_type = cmark_node_get_type(parent_container);
- if (node_type != CMARK_NODE_ITEM) {
- return NULL;
- }
-
- bufsize_t matched = scan_tasklist(input, len, 0);
- if (!matched) {
- return NULL;
- }
-
- cmark_node_set_syntax_extension(parent_container, self);
- cmark_parser_advance_offset(parser, (char *)input, 3, false);
-
- // Either an upper or lower case X means the task is completed.
- parent_container->as.list.checked = (strstr((char*)input, "[x]") || strstr((char*)input, "[X]"));
-
- return NULL;
-}
-
-static void commonmark_render(cmark_syntax_extension *extension,
- cmark_renderer *renderer, cmark_node *node,
- cmark_event_type ev_type, int options) {
- bool entering = (ev_type == CMARK_EVENT_ENTER);
- if (entering) {
- renderer->cr(renderer);
- if (node->as.list.checked) {
- renderer->out(renderer, node, "- [x] ", false, LITERAL);
- } else {
- renderer->out(renderer, node, "- [ ] ", false, LITERAL);
- }
- cmark_strbuf_puts(renderer->prefix, " ");
- } else {
- cmark_strbuf_truncate(renderer->prefix, renderer->prefix->size - 2);
- renderer->cr(renderer);
- }
-}
-
-static void html_render(cmark_syntax_extension *extension,
- cmark_html_renderer *renderer, cmark_node *node,
- cmark_event_type ev_type, int options) {
- bool entering = (ev_type == CMARK_EVENT_ENTER);
- if (entering) {
- cmark_html_render_cr(renderer->html);
- cmark_strbuf_puts(renderer->html, "html, options);
- cmark_strbuf_putc(renderer->html, '>');
- if (node->as.list.checked) {
- cmark_strbuf_puts(renderer->html, " ");
- } else {
- cmark_strbuf_puts(renderer->html, " ");
- }
- } else {
- cmark_strbuf_puts(renderer->html, " \n");
- }
-}
-
-static const char *xml_attr(cmark_syntax_extension *extension,
- cmark_node *node) {
- if (node->as.list.checked) {
- return " completed=\"true\"";
- } else {
- return " completed=\"false\"";
- }
-}
-
-cmark_syntax_extension *create_tasklist_extension(void) {
- cmark_syntax_extension *ext = cmark_syntax_extension_new("tasklist");
-
- cmark_syntax_extension_set_match_block_func(ext, matches);
- cmark_syntax_extension_set_get_type_string_func(ext, get_type_string);
- cmark_syntax_extension_set_open_block_func(ext, open_tasklist_item);
- cmark_syntax_extension_set_can_contain_func(ext, can_contain);
- cmark_syntax_extension_set_commonmark_render_func(ext, commonmark_render);
- cmark_syntax_extension_set_plaintext_render_func(ext, commonmark_render);
- cmark_syntax_extension_set_html_render_func(ext, html_render);
- cmark_syntax_extension_set_xml_attr_func(ext, xml_attr);
-
- return ext;
-}
diff --git a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/tasklist.h b/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/tasklist.h
deleted file mode 100644
index 26e9d96..0000000
--- a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/tasklist.h
+++ /dev/null
@@ -1,8 +0,0 @@
-#ifndef TASKLIST_H
-#define TASKLIST_H
-
-#include "cmark-gfm-core-extensions.h"
-
-cmark_syntax_extension *create_tasklist_extension(void);
-
-#endif
diff --git a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/tasklist.o b/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/tasklist.o
deleted file mode 100644
index 89dcd67..0000000
Binary files a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/tasklist.o and /dev/null differ
diff --git a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/utf8.c b/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/utf8.c
deleted file mode 100644
index c29bbf7..0000000
--- a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/utf8.c
+++ /dev/null
@@ -1,317 +0,0 @@
-#include
-#include
-#include
-
-#include "cmark_ctype.h"
-#include "utf8.h"
-
-static const int8_t utf8proc_utf8class[256] = {
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 4, 4, 4, 4, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0};
-
-static void encode_unknown(cmark_strbuf *buf) {
- static const uint8_t repl[] = {239, 191, 189};
- cmark_strbuf_put(buf, repl, 3);
-}
-
-static int utf8proc_charlen(const uint8_t *str, bufsize_t str_len) {
- int length, i;
-
- if (!str_len)
- return 0;
-
- length = utf8proc_utf8class[str[0]];
-
- if (!length)
- return -1;
-
- if (str_len >= 0 && (bufsize_t)length > str_len)
- return -str_len;
-
- for (i = 1; i < length; i++) {
- if ((str[i] & 0xC0) != 0x80)
- return -i;
- }
-
- return length;
-}
-
-// Validate a single UTF-8 character according to RFC 3629.
-static int utf8proc_valid(const uint8_t *str, bufsize_t str_len) {
- int length = utf8proc_utf8class[str[0]];
-
- if (!length)
- return -1;
-
- if ((bufsize_t)length > str_len)
- return -str_len;
-
- switch (length) {
- case 2:
- if ((str[1] & 0xC0) != 0x80)
- return -1;
- if (str[0] < 0xC2) {
- // Overlong
- return -length;
- }
- break;
-
- case 3:
- if ((str[1] & 0xC0) != 0x80)
- return -1;
- if ((str[2] & 0xC0) != 0x80)
- return -2;
- if (str[0] == 0xE0) {
- if (str[1] < 0xA0) {
- // Overlong
- return -length;
- }
- } else if (str[0] == 0xED) {
- if (str[1] >= 0xA0) {
- // Surrogate
- return -length;
- }
- }
- break;
-
- case 4:
- if ((str[1] & 0xC0) != 0x80)
- return -1;
- if ((str[2] & 0xC0) != 0x80)
- return -2;
- if ((str[3] & 0xC0) != 0x80)
- return -3;
- if (str[0] == 0xF0) {
- if (str[1] < 0x90) {
- // Overlong
- return -length;
- }
- } else if (str[0] >= 0xF4) {
- if (str[0] > 0xF4 || str[1] >= 0x90) {
- // Above 0x10FFFF
- return -length;
- }
- }
- break;
- }
-
- return length;
-}
-
-void cmark_utf8proc_check(cmark_strbuf *ob, const uint8_t *line,
- bufsize_t size) {
- bufsize_t i = 0;
-
- while (i < size) {
- bufsize_t org = i;
- int charlen = 0;
-
- while (i < size) {
- if (line[i] < 0x80 && line[i] != 0) {
- i++;
- } else if (line[i] >= 0x80) {
- charlen = utf8proc_valid(line + i, size - i);
- if (charlen < 0) {
- charlen = -charlen;
- break;
- }
- i += charlen;
- } else if (line[i] == 0) {
- // ASCII NUL is technically valid but rejected
- // for security reasons.
- charlen = 1;
- break;
- }
- }
-
- if (i > org) {
- cmark_strbuf_put(ob, line + org, i - org);
- }
-
- if (i >= size) {
- break;
- } else {
- // Invalid UTF-8
- encode_unknown(ob);
- i += charlen;
- }
- }
-}
-
-int cmark_utf8proc_iterate(const uint8_t *str, bufsize_t str_len,
- int32_t *dst) {
- int length;
- int32_t uc = -1;
-
- *dst = -1;
- length = utf8proc_charlen(str, str_len);
- if (length < 0)
- return -1;
-
- switch (length) {
- case 1:
- uc = str[0];
- break;
- case 2:
- uc = ((str[0] & 0x1F) << 6) + (str[1] & 0x3F);
- if (uc < 0x80)
- uc = -1;
- break;
- case 3:
- uc = ((str[0] & 0x0F) << 12) + ((str[1] & 0x3F) << 6) + (str[2] & 0x3F);
- if (uc < 0x800 || (uc >= 0xD800 && uc < 0xE000))
- uc = -1;
- break;
- case 4:
- uc = ((str[0] & 0x07) << 18) + ((str[1] & 0x3F) << 12) +
- ((str[2] & 0x3F) << 6) + (str[3] & 0x3F);
- if (uc < 0x10000 || uc >= 0x110000)
- uc = -1;
- break;
- }
-
- if (uc < 0)
- return -1;
-
- *dst = uc;
- return length;
-}
-
-void cmark_utf8proc_encode_char(int32_t uc, cmark_strbuf *buf) {
- uint8_t dst[4];
- bufsize_t len = 0;
-
- assert(uc >= 0);
-
- if (uc < 0x80) {
- dst[0] = (uint8_t)(uc);
- len = 1;
- } else if (uc < 0x800) {
- dst[0] = (uint8_t)(0xC0 + (uc >> 6));
- dst[1] = 0x80 + (uc & 0x3F);
- len = 2;
- } else if (uc == 0xFFFF) {
- dst[0] = 0xFF;
- len = 1;
- } else if (uc == 0xFFFE) {
- dst[0] = 0xFE;
- len = 1;
- } else if (uc < 0x10000) {
- dst[0] = (uint8_t)(0xE0 + (uc >> 12));
- dst[1] = 0x80 + ((uc >> 6) & 0x3F);
- dst[2] = 0x80 + (uc & 0x3F);
- len = 3;
- } else if (uc < 0x110000) {
- dst[0] = (uint8_t)(0xF0 + (uc >> 18));
- dst[1] = 0x80 + ((uc >> 12) & 0x3F);
- dst[2] = 0x80 + ((uc >> 6) & 0x3F);
- dst[3] = 0x80 + (uc & 0x3F);
- len = 4;
- } else {
- encode_unknown(buf);
- return;
- }
-
- cmark_strbuf_put(buf, dst, len);
-}
-
-void cmark_utf8proc_case_fold(cmark_strbuf *dest, const uint8_t *str,
- bufsize_t len) {
- int32_t c;
-
-#define bufpush(x) cmark_utf8proc_encode_char(x, dest)
-
- while (len > 0) {
- bufsize_t char_len = cmark_utf8proc_iterate(str, len, &c);
-
- if (char_len >= 0) {
-#include "case_fold_switch.inc"
- } else {
- encode_unknown(dest);
- char_len = -char_len;
- }
-
- str += char_len;
- len -= char_len;
- }
-}
-
-// matches anything in the Zs class, plus LF, CR, TAB, FF.
-int cmark_utf8proc_is_space(int32_t uc) {
- return (uc == 9 || uc == 10 || uc == 12 || uc == 13 || uc == 32 ||
- uc == 160 || uc == 5760 || (uc >= 8192 && uc <= 8202) || uc == 8239 ||
- uc == 8287 || uc == 12288);
-}
-
-// matches anything in the P[cdefios] classes.
-int cmark_utf8proc_is_punctuation(int32_t uc) {
- return (
- (uc < 128 && cmark_ispunct((char)uc)) || uc == 161 || uc == 167 ||
- uc == 171 || uc == 182 || uc == 183 || uc == 187 || uc == 191 ||
- uc == 894 || uc == 903 || (uc >= 1370 && uc <= 1375) || uc == 1417 ||
- uc == 1418 || uc == 1470 || uc == 1472 || uc == 1475 || uc == 1478 ||
- uc == 1523 || uc == 1524 || uc == 1545 || uc == 1546 || uc == 1548 ||
- uc == 1549 || uc == 1563 || uc == 1566 || uc == 1567 ||
- (uc >= 1642 && uc <= 1645) || uc == 1748 || (uc >= 1792 && uc <= 1805) ||
- (uc >= 2039 && uc <= 2041) || (uc >= 2096 && uc <= 2110) || uc == 2142 ||
- uc == 2404 || uc == 2405 || uc == 2416 || uc == 2800 || uc == 3572 ||
- uc == 3663 || uc == 3674 || uc == 3675 || (uc >= 3844 && uc <= 3858) ||
- uc == 3860 || (uc >= 3898 && uc <= 3901) || uc == 3973 ||
- (uc >= 4048 && uc <= 4052) || uc == 4057 || uc == 4058 ||
- (uc >= 4170 && uc <= 4175) || uc == 4347 || (uc >= 4960 && uc <= 4968) ||
- uc == 5120 || uc == 5741 || uc == 5742 || uc == 5787 || uc == 5788 ||
- (uc >= 5867 && uc <= 5869) || uc == 5941 || uc == 5942 ||
- (uc >= 6100 && uc <= 6102) || (uc >= 6104 && uc <= 6106) ||
- (uc >= 6144 && uc <= 6154) || uc == 6468 || uc == 6469 || uc == 6686 ||
- uc == 6687 || (uc >= 6816 && uc <= 6822) || (uc >= 6824 && uc <= 6829) ||
- (uc >= 7002 && uc <= 7008) || (uc >= 7164 && uc <= 7167) ||
- (uc >= 7227 && uc <= 7231) || uc == 7294 || uc == 7295 ||
- (uc >= 7360 && uc <= 7367) || uc == 7379 || (uc >= 8208 && uc <= 8231) ||
- (uc >= 8240 && uc <= 8259) || (uc >= 8261 && uc <= 8273) ||
- (uc >= 8275 && uc <= 8286) || uc == 8317 || uc == 8318 || uc == 8333 ||
- uc == 8334 || (uc >= 8968 && uc <= 8971) || uc == 9001 || uc == 9002 ||
- (uc >= 10088 && uc <= 10101) || uc == 10181 || uc == 10182 ||
- (uc >= 10214 && uc <= 10223) || (uc >= 10627 && uc <= 10648) ||
- (uc >= 10712 && uc <= 10715) || uc == 10748 || uc == 10749 ||
- (uc >= 11513 && uc <= 11516) || uc == 11518 || uc == 11519 ||
- uc == 11632 || (uc >= 11776 && uc <= 11822) ||
- (uc >= 11824 && uc <= 11842) || (uc >= 12289 && uc <= 12291) ||
- (uc >= 12296 && uc <= 12305) || (uc >= 12308 && uc <= 12319) ||
- uc == 12336 || uc == 12349 || uc == 12448 || uc == 12539 || uc == 42238 ||
- uc == 42239 || (uc >= 42509 && uc <= 42511) || uc == 42611 ||
- uc == 42622 || (uc >= 42738 && uc <= 42743) ||
- (uc >= 43124 && uc <= 43127) || uc == 43214 || uc == 43215 ||
- (uc >= 43256 && uc <= 43258) || uc == 43310 || uc == 43311 ||
- uc == 43359 || (uc >= 43457 && uc <= 43469) || uc == 43486 ||
- uc == 43487 || (uc >= 43612 && uc <= 43615) || uc == 43742 ||
- uc == 43743 || uc == 43760 || uc == 43761 || uc == 44011 || uc == 64830 ||
- uc == 64831 || (uc >= 65040 && uc <= 65049) ||
- (uc >= 65072 && uc <= 65106) || (uc >= 65108 && uc <= 65121) ||
- uc == 65123 || uc == 65128 || uc == 65130 || uc == 65131 ||
- (uc >= 65281 && uc <= 65283) || (uc >= 65285 && uc <= 65290) ||
- (uc >= 65292 && uc <= 65295) || uc == 65306 || uc == 65307 ||
- uc == 65311 || uc == 65312 || (uc >= 65339 && uc <= 65341) ||
- uc == 65343 || uc == 65371 || uc == 65373 ||
- (uc >= 65375 && uc <= 65381) || (uc >= 65792 && uc <= 65794) ||
- uc == 66463 || uc == 66512 || uc == 66927 || uc == 67671 || uc == 67871 ||
- uc == 67903 || (uc >= 68176 && uc <= 68184) || uc == 68223 ||
- (uc >= 68336 && uc <= 68342) || (uc >= 68409 && uc <= 68415) ||
- (uc >= 68505 && uc <= 68508) || (uc >= 69703 && uc <= 69709) ||
- uc == 69819 || uc == 69820 || (uc >= 69822 && uc <= 69825) ||
- (uc >= 69952 && uc <= 69955) || uc == 70004 || uc == 70005 ||
- (uc >= 70085 && uc <= 70088) || uc == 70093 ||
- (uc >= 70200 && uc <= 70205) || uc == 70854 ||
- (uc >= 71105 && uc <= 71113) || (uc >= 71233 && uc <= 71235) ||
- (uc >= 74864 && uc <= 74868) || uc == 92782 || uc == 92783 ||
- uc == 92917 || (uc >= 92983 && uc <= 92987) || uc == 92996 ||
- uc == 113823);
-}
diff --git a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/utf8.h b/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/utf8.h
deleted file mode 100644
index 04ec161..0000000
--- a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/utf8.h
+++ /dev/null
@@ -1,35 +0,0 @@
-#ifndef CMARK_UTF8_H
-#define CMARK_UTF8_H
-
-#include
-#include "buffer.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-CMARK_GFM_EXPORT
-void cmark_utf8proc_case_fold(cmark_strbuf *dest, const uint8_t *str,
- bufsize_t len);
-
-CMARK_GFM_EXPORT
-void cmark_utf8proc_encode_char(int32_t uc, cmark_strbuf *buf);
-
-CMARK_GFM_EXPORT
-int cmark_utf8proc_iterate(const uint8_t *str, bufsize_t str_len, int32_t *dst);
-
-CMARK_GFM_EXPORT
-void cmark_utf8proc_check(cmark_strbuf *dest, const uint8_t *line,
- bufsize_t size);
-
-CMARK_GFM_EXPORT
-int cmark_utf8proc_is_space(int32_t uc);
-
-CMARK_GFM_EXPORT
-int cmark_utf8proc_is_punctuation(int32_t uc);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/utf8.o b/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/utf8.o
deleted file mode 100644
index 96fba6d..0000000
Binary files a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/utf8.o and /dev/null differ
diff --git a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/xml.c b/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/xml.c
deleted file mode 100644
index 5753e5a..0000000
--- a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/xml.c
+++ /dev/null
@@ -1,182 +0,0 @@
-#include
-#include
-#include
-#include
-
-#include "config.h"
-#include "cmark-gfm.h"
-#include "node.h"
-#include "buffer.h"
-#include "houdini.h"
-#include "syntax_extension.h"
-
-#define BUFFER_SIZE 100
-#define MAX_INDENT 40
-
-// Functions to convert cmark_nodes to XML strings.
-
-static void escape_xml(cmark_strbuf *dest, const unsigned char *source,
- bufsize_t length) {
- houdini_escape_html0(dest, source, length, 0);
-}
-
-struct render_state {
- cmark_strbuf *xml;
- int indent;
-};
-
-static CMARK_INLINE void indent(struct render_state *state) {
- int i;
- for (i = 0; i < state->indent && i < MAX_INDENT; i++) {
- cmark_strbuf_putc(state->xml, ' ');
- }
-}
-
-static int S_render_node(cmark_node *node, cmark_event_type ev_type,
- struct render_state *state, int options) {
- cmark_strbuf *xml = state->xml;
- bool literal = false;
- cmark_delim_type delim;
- bool entering = (ev_type == CMARK_EVENT_ENTER);
- char buffer[BUFFER_SIZE];
-
- if (entering) {
- indent(state);
- cmark_strbuf_putc(xml, '<');
- cmark_strbuf_puts(xml, cmark_node_get_type_string(node));
-
- if (options & CMARK_OPT_SOURCEPOS && node->start_line != 0) {
- snprintf(buffer, BUFFER_SIZE, " sourcepos=\"%d:%d-%d:%d\"",
- node->start_line, node->start_column, node->end_line,
- node->end_column);
- cmark_strbuf_puts(xml, buffer);
- }
-
- if (node->extension && node->extension->xml_attr_func) {
- const char* r = node->extension->xml_attr_func(node->extension, node);
- if (r != NULL)
- cmark_strbuf_puts(xml, r);
- }
-
- literal = false;
-
- switch (node->type) {
- case CMARK_NODE_DOCUMENT:
- cmark_strbuf_puts(xml, " xmlns=\"http://commonmark.org/xml/1.0\"");
- break;
- case CMARK_NODE_TEXT:
- case CMARK_NODE_CODE:
- case CMARK_NODE_HTML_BLOCK:
- case CMARK_NODE_HTML_INLINE:
- cmark_strbuf_puts(xml, " xml:space=\"preserve\">");
- escape_xml(xml, node->as.literal.data, node->as.literal.len);
- cmark_strbuf_puts(xml, "");
- cmark_strbuf_puts(xml, cmark_node_get_type_string(node));
- literal = true;
- break;
- case CMARK_NODE_LIST:
- switch (cmark_node_get_list_type(node)) {
- case CMARK_ORDERED_LIST:
- cmark_strbuf_puts(xml, " type=\"ordered\"");
- snprintf(buffer, BUFFER_SIZE, " start=\"%d\"",
- cmark_node_get_list_start(node));
- cmark_strbuf_puts(xml, buffer);
- delim = cmark_node_get_list_delim(node);
- if (delim == CMARK_PAREN_DELIM) {
- cmark_strbuf_puts(xml, " delim=\"paren\"");
- } else if (delim == CMARK_PERIOD_DELIM) {
- cmark_strbuf_puts(xml, " delim=\"period\"");
- }
- break;
- case CMARK_BULLET_LIST:
- cmark_strbuf_puts(xml, " type=\"bullet\"");
- break;
- default:
- break;
- }
- snprintf(buffer, BUFFER_SIZE, " tight=\"%s\"",
- (cmark_node_get_list_tight(node) ? "true" : "false"));
- cmark_strbuf_puts(xml, buffer);
- break;
- case CMARK_NODE_HEADING:
- snprintf(buffer, BUFFER_SIZE, " level=\"%d\"", node->as.heading.level);
- cmark_strbuf_puts(xml, buffer);
- break;
- case CMARK_NODE_CODE_BLOCK:
- if (node->as.code.info.len > 0) {
- cmark_strbuf_puts(xml, " info=\"");
- escape_xml(xml, node->as.code.info.data, node->as.code.info.len);
- cmark_strbuf_putc(xml, '"');
- }
- cmark_strbuf_puts(xml, " xml:space=\"preserve\">");
- escape_xml(xml, node->as.code.literal.data, node->as.code.literal.len);
- cmark_strbuf_puts(xml, "");
- cmark_strbuf_puts(xml, cmark_node_get_type_string(node));
- literal = true;
- break;
- case CMARK_NODE_CUSTOM_BLOCK:
- case CMARK_NODE_CUSTOM_INLINE:
- cmark_strbuf_puts(xml, " on_enter=\"");
- escape_xml(xml, node->as.custom.on_enter.data,
- node->as.custom.on_enter.len);
- cmark_strbuf_putc(xml, '"');
- cmark_strbuf_puts(xml, " on_exit=\"");
- escape_xml(xml, node->as.custom.on_exit.data,
- node->as.custom.on_exit.len);
- cmark_strbuf_putc(xml, '"');
- break;
- case CMARK_NODE_LINK:
- case CMARK_NODE_IMAGE:
- cmark_strbuf_puts(xml, " destination=\"");
- escape_xml(xml, node->as.link.url.data, node->as.link.url.len);
- cmark_strbuf_putc(xml, '"');
- cmark_strbuf_puts(xml, " title=\"");
- escape_xml(xml, node->as.link.title.data, node->as.link.title.len);
- cmark_strbuf_putc(xml, '"');
- break;
- default:
- break;
- }
- if (node->first_child) {
- state->indent += 2;
- } else if (!literal) {
- cmark_strbuf_puts(xml, " /");
- }
- cmark_strbuf_puts(xml, ">\n");
-
- } else if (node->first_child) {
- state->indent -= 2;
- indent(state);
- cmark_strbuf_puts(xml, "");
- cmark_strbuf_puts(xml, cmark_node_get_type_string(node));
- cmark_strbuf_puts(xml, ">\n");
- }
-
- return 1;
-}
-
-char *cmark_render_xml(cmark_node *root, int options) {
- return cmark_render_xml_with_mem(root, options, cmark_node_mem(root));
-}
-
-char *cmark_render_xml_with_mem(cmark_node *root, int options, cmark_mem *mem) {
- char *result;
- cmark_strbuf xml = CMARK_BUF_INIT(mem);
- cmark_event_type ev_type;
- cmark_node *cur;
- struct render_state state = {&xml, 0};
-
- cmark_iter *iter = cmark_iter_new(root);
-
- cmark_strbuf_puts(state.xml, "\n");
- cmark_strbuf_puts(state.xml,
- "\n");
- while ((ev_type = cmark_iter_next(iter)) != CMARK_EVENT_DONE) {
- cur = cmark_iter_get_node(iter);
- S_render_node(cur, ev_type, &state, options);
- }
- result = (char *)cmark_strbuf_detach(&xml);
-
- cmark_iter_free(iter);
- return result;
-}
diff --git a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/xml.o b/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/xml.o
deleted file mode 100644
index 914721b..0000000
Binary files a/docs/website/vendor/bundle/ruby/3.0.0/gems/commonmarker-0.23.10/ext/commonmarker/xml.o and /dev/null differ
diff --git a/docs/website/vendor/bundle/ruby/3.0.0/gems/concurrent-ruby-1.2.2/CHANGELOG.md b/docs/website/vendor/bundle/ruby/3.0.0/gems/concurrent-ruby-1.2.2/CHANGELOG.md
deleted file mode 100644
index 17a2a64..0000000
--- a/docs/website/vendor/bundle/ruby/3.0.0/gems/concurrent-ruby-1.2.2/CHANGELOG.md
+++ /dev/null
@@ -1,561 +0,0 @@
-## Current
-
-## Release v1.2.2 (24 Feb 2023)
-
-* (#993) Fix arguments passed to `Concurrent::Map`'s `default_proc`.
-
-## Release v1.2.1 (24 Feb 2023)
-
-* (#990) Add missing `require 'fiber'` for `FiberLocalVar`.
-* (#989) Optimize `Concurrent::Map#[]` on CRuby by letting the backing Hash handle the `default_proc`.
-
-## Release v1.2.0 (23 Jan 2023)
-
-* (#962) Fix ReentrantReadWriteLock to use the same granularity for locals as for Mutex it uses.
-* (#983) Add FiberLocalVar
-* (#934) concurrent-ruby now supports requiring individual classes (public classes listed in the docs), e.g., `require 'concurrent/map'`
-* (#976) Let `Promises.any_fulfilled_future` take an `Event`
-* Improve documentation of various classes
-* (#975) Set the Ruby compatibility version at 2.3
-* (#972) Remove Rubinius-related code
-
-## Release v1.1.10 (22 Mar 2022)
-
-concurrent-ruby:
-
-* (#951) Set the Ruby compatibility version at 2.2
-* (#939, #933) The `caller_runs` fallback policy no longer blocks reads from the job queue by worker threads
-* (#938, #761, #652) You can now explicitly `prune_pool` a thread pool (Sylvain Joyeux)
-* (#937, #757, #670) We switched the Yahoo stock API for demos to Alpha Vantage (Gustavo Caso)
-* (#932, #931) We changed how `SafeTaskExecutor` handles local jump errors (Aaron Jensen)
-* (#927) You can use keyword arguments in your initialize when using `Async` (Matt Larraz)
-* (#926, #639) We removed timeout from `TimerTask` because it wasn't sound, and now it's a no-op with a warning (Jacob Atzen)
-* (#919) If you double-lock a re-entrant read-write lock, we promote to locked for writing (zp yuan)
-* (#915) `monotonic_time` now accepts an optional unit parameter, as Ruby's `clock_gettime` (Jean Boussier)
-
-## Release v1.1.9 (5 Jun 2021)
-
-concurrent-ruby:
-
-* (#866) Child promise state not set to :pending immediately after #execute when parent has completed
-* (#905, #872) Fix RubyNonConcurrentPriorityQueue#delete method
-* (2df0337d) Make sure locks are not shared on shared when objects are dup/cloned
-* (#900, #906, #796, #847, #911) Fix Concurrent::Set tread-safety issues on CRuby
-* (#907) Add new ConcurrentMap backend for TruffleRuby
-
-## Release v1.1.8 (20 January 2021)
-
-concurrent-ruby:
-
-* (#885) Fix race condition in TVar for stale reads
-* (#884) RubyThreadLocalVar: Do not iterate over hash which might conflict with new pair addition
-
-## Release v1.1.7 (6 August 2020)
-
-concurrent-ruby:
-
-* (#879) Consider falsy value on `Concurrent::Map#compute_if_absent` for fast non-blocking path
-* (#876) Reset Async queue on forking, makes Async fork-safe
-* (#856) Avoid running problematic code in RubyThreadLocalVar on MRI that occasionally results in segfault
-* (#853) Introduce ThreadPoolExecutor without a Queue
-
-## Release v1.1.6, edge v0.6.0 (10 Feb 2020)
-
-concurrent-ruby:
-
-* (#841) Concurrent.disable_at_exit_handlers! is no longer needed and was deprecated.
-* (#841) AbstractExecutorService#auto_terminate= was deprecated and has no effect.
- Set :auto_terminate option instead when executor is initialized.
-
-## Release v1.1.6.pre1, edge v0.6.0.pre1 (26 Jan 2020)
-
-concurrent-ruby:
-
-* (#828) Allow to name executors, the name is also used to name their threads
-* (#838) Implement #dup and #clone for structs
-* (#821) Safer finalizers for thread local variables
-* Documentation fixes
-* (#814) Use Ruby's Etc.nprocessors if available
-* (#812) Fix directory structure not to mess with packaging tools
-* (#840) Fix termination of pools on JRuby
-
-concurrent-ruby-edge:
-
-* Add WrappingExecutor (#830)
-
-## Release v1.1.5, edge v0.5.0 (10 Mar 2019)
-
-concurrent-ruby:
-
-* fix potential leak of context on JRuby and Java 7
-
-concurrent-ruby-edge:
-
-* Add finalized Concurrent::Cancellation
-* Add finalized Concurrent::Throttle
-* Add finalized Concurrent::Promises::Channel
-* Add new Concurrent::ErlangActor
-
-## Release v1.1.4 (14 Dec 2018)
-
-* (#780) Remove java_alias of 'submit' method of Runnable to let executor service work on java 11
-* (#776) Fix NameError on defining a struct with a name which is already taken in an ancestor
-
-## Release v1.1.3 (7 Nov 2018)
-
-* (#775) fix partial require of the gem (although not officially supported)
-
-## Release v1.1.2 (6 Nov 2018)
-
-* (#773) more defensive 1.9.3 support
-
-## Release v1.1.1, edge v0.4.1 (1 Nov 2018)
-
-* (#768) add support for 1.9.3 back
-
-## Release v1.1.0, edge v0.4.0 (31 OCt 2018) (yanked)
-
-* (#768) yanked because of issues with removed 1.9.3 support
-
-## Release v1.1.0.pre2, edge v0.4.0.pre2 (18 Sep 2018)
-
-concurrent-ruby:
-
-* fixed documentation and README links
-* fix Set for TruffleRuby and Rubinius
-* use properly supported TruffleRuby APIs
-
-concurrent-ruby-edge:
-
-* add Promises.zip_futures_over_on
-
-## Release v1.1.0.pre1, edge v0.4.0.pre1 (15 Aug 2018)
-
-concurrent-ruby:
-
-* requires at least Ruby 2.0
-* [Promises](http://ruby-concurrency.github.io/concurrent-ruby/1.1.0/Concurrent/Promises.html)
- are moved from `concurrent-ruby-edge` to `concurrent-ruby`
-* Add support for TruffleRuby
- * (#734) Fix Array/Hash/Set construction broken on TruffleRuby
- * AtomicReference fixed
-* CI stabilization
-* remove sharp dependency edge -> core
-* remove warnings
-* documentation updates
-* Exchanger is no longer documented as edge since it was already available in
- `concurrent-ruby`
-* (#644) Fix Map#each and #each_pair not returning enumerator outside of MRI
-* (#659) Edge promises fail during error handling
-* (#741) Raise on recursive Delay#value call
-* (#727) #717 fix global IO executor on JRuby
-* (#740) Drop support for CRuby 1.9, JRuby 1.7, Rubinius.
-* (#737) Move AtomicMarkableReference out of Edge
-* (#708) Prefer platform specific memory barriers
-* (#735) Fix wrong expected exception in channel spec assertion
-* (#729) Allow executor option in `Promise#then`
-* (#725) fix timeout check to use timeout_interval
-* (#719) update engine detection
-* (#660) Add specs for Promise#zip/Promise.zip ordering
-* (#654) Promise.zip execution changes
-* (#666) Add thread safe set implementation
-* (#651) #699 #to_s, #inspect should not output negative object IDs.
-* (#685) Avoid RSpec warnings about raise_error
-* (#680) Avoid RSpec monkey patching, persist spec results locally, use RSpec
- v3.7.0
-* (#665) Initialize the monitor for new subarrays on Rubinius
-* (#661) Fix error handling in edge promises
-
-concurrent-ruby-edge:
-
-* (#659) Edge promises fail during error handling
-* Edge files clearly separated in `lib-edge`
-* added ReInclude
-
-## Release v1.0.5, edge v0.3.1 (26 Feb 2017)
-
-concurrent-ruby:
-
-* Documentation for Event and Semaphore
-* Use Unsafe#fullFence and #loadFence directly since the shortcuts were removed in JRuby
-* Do not depend on org.jruby.util.unsafe.UnsafeHolder
-
-concurrent-ruby-edge:
-
-* (#620) Actors on Pool raise an error
-* (#624) Delayed promises did not interact correctly with flatting
- * Fix arguments yielded by callback methods
-* Overridable default executor in promises factory methods
-* Asking actor to terminate will always resolve to `true`
-
-## Release v1.0.4, edge v0.3.0 (27 Dec 2016)
-
-concurrent-ruby:
-
-* Nothing
-
-concurrent-ruby-edge:
-
-* New promises' API renamed, lots of improvements, edge bumped to 0.3.0
- * **Incompatible** with previous 0.2.3 version
- * see https://github.com/ruby-concurrency/concurrent-ruby/pull/522
-
-## Release v1.0.3 (17 Dec 2016)
-
-* Trigger execution of flattened delayed futures
-* Avoid forking for processor_count if possible
-* Semaphore Mutex and JRuby parity
-* Adds Map#each as alias to Map#each_pair
-* Fix uninitialized instance variables
-* Make Fixnum, Bignum merger ready
-* Allows Promise#then to receive an executor
-* TimerSet now survives a fork
-* Reject promise on any exception
-* Allow ThreadLocalVar to be initialized with a block
-* Support Alpha with `Concurrent::processor_count`
-* Fixes format-security error when compiling ruby_193_compatible.h
-* Concurrent::Atom#swap fixed: reraise the exceptions from block
-
-## Release v1.0.2 (2 May 2016)
-
-* Fix bug with `Concurrent::Map` MRI backend `#inspect` method
-* Fix bug with `Concurrent::Map` MRI backend using `Hash#value?`
-* Improved documentation and examples
-* Minor updates to Edge
-
-## Release v1.0.1 (27 February 2016)
-
-* Fix "uninitialized constant Concurrent::ReentrantReadWriteLock" error.
-* Better handling of `autoload` vs. `require`.
-* Improved API for Edge `Future` zipping.
-* Fix reference leak in Edge `Future` constructor .
-* Fix bug which prevented thread pools from surviving a `fork`.
-* Fix bug in which `TimerTask` did not correctly specify all its dependencies.
-* Improved support for JRuby+Truffle
-* Improved error messages.
-* Improved documentation.
-* Updated README and CONTRIBUTING.
-
-## Release v1.0.0 (13 November 2015)
-
-* Rename `attr_volatile_with_cas` to `attr_atomic`
-* Add `clear_each` to `LockFreeStack`
-* Update `AtomicReference` documentation
-* Further updates and improvements to the synchronization layer.
-* Performance and memory usage performance with `Actor` logging.
-* Fixed `ThreadPoolExecutor` task count methods.
-* Improved `Async` performance for both short and long-lived objects.
-* Fixed bug in `LockFreeLinkedSet`.
-* Fixed bug in which `Agent#await` triggered a validation failure.
-* Further `Channel` updates.
-* Adopted a project Code of Conduct
-* Cleared interpreter warnings
-* Fixed bug in `ThreadPoolExecutor` task count methods
-* Fixed bug in 'LockFreeLinkedSet'
-* Improved Java extension loading
-* Handle Exception children in Edge::Future
-* Continued improvements to channel
-* Removed interpreter warnings.
-* Shared constants now in `lib/concurrent/constants.rb`
-* Refactored many tests.
-* Improved synchronization layer/memory model documentation.
-* Bug fix in Edge `Future#flat`
-* Brand new `Channel` implementation in Edge gem.
-* Simplification of `RubySingleThreadExecutor`
-* `Async` improvements
- - Each object uses its own `SingleThreadExecutor` instead of the global thread pool.
- - No longers supports executor injection
- - Much better documentation
-* `Atom` updates
- - No longer `Dereferenceable`
- - Now `Observable`
- - Added a `#reset` method
-* Brand new `Agent` API and implementation. Now functionally equivalent to Clojure.
-* Continued improvements to the synchronization layer
-* Merged in the `thread_safe` gem
- - `Concurrent::Array`
- - `Concurrent::Hash`
- - `Concurrent::Map` (formerly ThreadSafe::Cache)
- - `Concurrent::Tuple`
-* Minor improvements to Concurrent::Map
-* Complete rewrite of `Exchanger`
-* Removed all deprecated code (classes, methods, constants, etc.)
-* Updated Agent, MutexAtomic, and BufferedChannel to inherit from Synchronization::Object.
-* Many improved tests
-* Some internal reorganization
-
-## Release v0.9.1 (09 August 2015)
-
-* Fixed a Rubiniux bug in synchronization object
-* Fixed all interpreter warnings (except circular references)
-* Fixed require statements when requiring `Atom` alone
-* Significantly improved `ThreadLocalVar` on non-JRuby platforms
-* Fixed error handling in Edge `Concurrent.zip`
-* `AtomicFixnum` methods `#increment` and `#decrement` now support optional delta
-* New `AtomicFixnum#update` method
-* Minor optimizations in `ReadWriteLock`
-* New `ReentrantReadWriteLock` class
-* `ThreadLocalVar#bind` method is now public
-* Refactored many tests
-
-## Release v0.9.0 (10 July 2015)
-
-* Updated `AtomicReference`
- - `AtomicReference#try_update` now simply returns instead of raising exception
- - `AtomicReference#try_update!` was added to raise exceptions if an update
- fails. Note: this is the same behavior as the old `try_update`
-* Pure Java implementations of
- - `AtomicBoolean`
- - `AtomicFixnum`
- - `Semaphore`
-* Fixed bug when pruning Ruby thread pools
-* Fixed bug in time calculations within `ScheduledTask`
-* Default `count` in `CountDownLatch` to 1
-* Use monotonic clock for all timers via `Concurrent.monotonic_time`
- - Use `Process.clock_gettime(Process::CLOCK_MONOTONIC)` when available
- - Fallback to `java.lang.System.nanoTime()` on unsupported JRuby versions
- - Pure Ruby implementation for everything else
- - Effects `Concurrent.timer`, `Concurrent.timeout`, `TimerSet`, `TimerTask`, and `ScheduledTask`
-* Deprecated all clock-time based timer scheduling
- - Only support scheduling by delay
- - Effects `Concurrent.timer`, `TimerSet`, and `ScheduledTask`
-* Added new `ReadWriteLock` class
-* Consistent `at_exit` behavior for Java and Ruby thread pools.
-* Added `at_exit` handler to Ruby thread pools (already in Java thread pools)
- - Ruby handler stores the object id and retrieves from `ObjectSpace`
- - JRuby disables `ObjectSpace` by default so that handler stores the object reference
-* Added a `:stop_on_exit` option to thread pools to enable/disable `at_exit` handler
-* Updated thread pool docs to better explain shutting down thread pools
-* Simpler `:executor` option syntax for all abstractions which support this option
-* Added `Executor#auto_terminate?` predicate method (for thread pools)
-* Added `at_exit` handler to `TimerSet`
-* Simplified auto-termination of the global executors
- - Can now disable auto-termination of global executors
- - Added shutdown/kill/wait_for_termination variants for global executors
-* Can now disable auto-termination for *all* executors (the nuclear option)
-* Simplified auto-termination of the global executors
-* Deprecated terms "task pool" and "operation pool"
- - New terms are "io executor" and "fast executor"
- - New functions added with new names
- - Deprecation warnings added to functions referencing old names
-* Moved all thread pool related functions from `Concurrent::Configuration` to `Concurrent`
- - Old functions still exist with deprecation warnings
- - New functions have updated names as appropriate
-* All high-level abstractions default to the "io executor"
-* Fixed bug in `Actor` causing it to prematurely warm global thread pools on gem load
- - This also fixed a `RejectedExecutionError` bug when running with minitest/autorun via JRuby
-* Moved global logger up to the `Concurrent` namespace and refactored the code
-* Optimized the performance of `Delay`
- - Fixed a bug in which no executor option on construction caused block execution on a global thread pool
-* Numerous improvements and bug fixes to `TimerSet`
-* Fixed deadlock of `Future` when the handler raises Exception
-* Added shared specs for more classes
-* New concurrency abstractions including:
- - `Atom`
- - `Maybe`
- - `ImmutableStruct`
- - `MutableStruct`
- - `SettableStruct`
-* Created an Edge gem for unstable abstractions including
- - `Actor`
- - `Agent`
- - `Channel`
- - `Exchanger`
- - `LazyRegister`
- - **new Future Framework** - unified
- implementation of Futures and Promises which combines Features of previous `Future`,
- `Promise`, `IVar`, `Event`, `Probe`, `dataflow`, `Delay`, `TimerTask` into single framework. It uses extensively
- new synchronization layer to make all the paths **lock-free** with exception of blocking threads on `#wait`.
- It offers better performance and does not block threads when not required.
-* Actor framework changes:
- - fixed reset loop in Pool
- - Pool can use any actor as a worker, abstract worker class is no longer needed.
- - Actor events not have format `[:event_name, *payload]` instead of just the Symbol.
- - Actor now uses new Future/Promise Framework instead of `IVar` for better interoperability
- - Behaviour definition array was simplified to `[BehaviourClass1, [BehaviourClass2, *initialization_args]]`
- - Linking behavior responds to :linked message by returning array of linked actors
- - Supervised behavior is removed in favour of just Linking
- - RestartingContext is supervised by default now, `supervise: true` is not required any more
- - Events can be private and public, so far only difference is that Linking will
- pass to linked actors only public messages. Adding private :restarting and
- :resetting events which are send before the actor restarts or resets allowing
- to add callbacks to cleanup current child actors.
- - Print also object_id in Reference to_s
- - Add AbstractContext#default_executor to be able to override executor class wide
- - Add basic IO example
- - Documentation somewhat improved
- - All messages should have same priority. It's now possible to send `actor << job1 << job2 << :terminate!` and
- be sure that both jobs are processed first.
-* Refactored `Channel` to use newer synchronization objects
-* Added `#reset` and `#cancel` methods to `TimerSet`
-* Added `#cancel` method to `Future` and `ScheduledTask`
-* Refactored `TimerSet` to use `ScheduledTask`
-* Updated `Async` with a factory that initializes the object
-* Deprecated `Concurrent.timer` and `Concurrent.timeout`
-* Reduced max threads on pure-Ruby thread pools (abends around 14751 threads)
-* Moved many private/internal classes/modules into "namespace" modules
-* Removed brute-force killing of threads in tests
-* Fixed a thread pool bug when the operating system cannot allocate more threads
-
-## Release v0.8.0 (25 January 2015)
-
-* C extension for MRI have been extracted into the `concurrent-ruby-ext` companion gem.
- Please see the README for more detail.
-* Better variable isolation in `Promise` and `Future` via an `:args` option
-* Continued to update intermittently failing tests
-
-## Release v0.7.2 (24 January 2015)
-
-* New `Semaphore` class based on [java.util.concurrent.Semaphore](http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/Semaphore.html)
-* New `Promise.all?` and `Promise.any?` class methods
-* Renamed `:overflow_policy` on thread pools to `:fallback_policy`
-* Thread pools still accept the `:overflow_policy` option but display a warning
-* Thread pools now implement `fallback_policy` behavior when not running (rather than universally rejecting tasks)
-* Fixed minor `set_deref_options` constructor bug in `Promise` class
-* Fixed minor `require` bug in `ThreadLocalVar` class
-* Fixed race condition bug in `TimerSet` class
-* Fixed race condition bug in `TimerSet` class
-* Fixed signal bug in `TimerSet#post` method
-* Numerous non-functional updates to clear warning when running in debug mode
-* Fixed more intermittently failing tests
-* Tests now run on new Travis build environment
-* Multiple documentation updates
-
-## Release v0.7.1 (4 December 2014)
-
-Please see the [roadmap](https://github.com/ruby-concurrency/concurrent-ruby/issues/142) for more information on the next planned release.
-
-* Added `flat_map` method to `Promise`
-* Added `zip` method to `Promise`
-* Fixed bug with logging in `Actor`
-* Improvements to `Promise` tests
-* Removed actor-experimental warning
-* Added an `IndirectImmediateExecutor` class
-* Allow disabling auto termination of global executors
-* Fix thread leaking in `ThreadLocalVar` (uses `Ref` gem on non-JRuby systems)
-* Fix thread leaking when pruning pure-Ruby thread pools
-* Prevent `Actor` from using an `ImmediateExecutor` (causes deadlock)
-* Added missing synchronizations to `TimerSet`
-* Fixed bug with return value of `Concurrent::Actor::Utils::Pool#ask`
-* Fixed timing bug in `TimerTask`
-* Fixed bug when creating a `JavaThreadPoolExecutor` with minimum pool size of zero
-* Removed confusing warning when not using native extenstions
-* Improved documentation
-
-## Release v0.7.0 (13 August 2014)
-
-* Merge the [atomic](https://github.com/ruby-concurrency/atomic) gem
- - Pure Ruby `MutexAtomic` atomic reference class
- - Platform native atomic reference classes `CAtomic`, `JavaAtomic`, and `RbxAtomic`
- - Automated [build process](https://github.com/ruby-concurrency/rake-compiler-dev-box)
- - Fat binary releases for [multiple platforms](https://rubygems.org/gems/concurrent-ruby/versions) including Windows (32/64), Linux (32/64), OS X (64-bit), Solaris (64-bit), and JRuby
-* C native `CAtomicBoolean`
-* C native `CAtomicFixnum`
-* Refactored intermittently failing tests
-* Added `dataflow!` and `dataflow_with!` methods to match `Future#value!` method
-* Better handling of timeout in `Agent`
-* Actor Improvements
- - Fine-grained implementation using chain of behaviors. Each behavior is responsible for single aspect like: `Termination`, `Pausing`, `Linking`, `Supervising`, etc. Users can create custom Actors easily based on their needs.
- - Supervision was added. `RestartingContext` will pause on error waiting on its supervisor to decide what to do next ( options are `:terminate!`, `:resume!`, `:reset!`, `:restart!`). Supervising behavior also supports strategies `:one_for_one` and `:one_for_all`.
- - Linking was added to be able to monitor actor's events like: `:terminated`, `:paused`, `:restarted`, etc.
- - Dead letter routing added. Rejected envelopes are collected in a configurable actor (default: `Concurrent::Actor.root.ask!(:dead_letter_routing)`)
- - Old `Actor` class removed and replaced by new implementation previously called `Actress`. `Actress` was kept as an alias for `Actor` to keep compatibility.
- - `Utils::Broadcast` actor which allows Publish–subscribe pattern.
-* More executors for managing serialized operations
- - `SerializedExecution` mixin module
- - `SerializedExecutionDelegator` for serializing *any* executor
-* Updated `Async` with serialized execution
-* Updated `ImmediateExecutor` and `PerThreadExecutor` with full executor service lifecycle
-* Added a `Delay` to root `Actress` initialization
-* Minor bug fixes to thread pools
-* Refactored many intermittently failing specs
-* Removed Java interop warning `executor.rb:148 warning: ambiguous Java methods found, using submit(java.lang.Runnable)`
-* Fixed minor bug in `RubyCachedThreadPool` overflow policy
-* Updated tests to use [RSpec 3.0](http://myronmars.to/n/dev-blog/2014/05/notable-changes-in-rspec-3)
-* Removed deprecated `Actor` class
-* Better support for Rubinius
-
-## Release v0.6.1 (14 June 2014)
-
-* Many improvements to `Concurrent::Actress`
-* Bug fixes to `Concurrent::RubyThreadPoolExecutor`
-* Fixed several brittle tests
-* Moved documentation to http://ruby-concurrency.github.io/concurrent-ruby/frames.html
-
-## Release v0.6.0 (25 May 2014)
-
-* Added `Concurrent::Observable` to encapsulate our thread safe observer sets
-* Improvements to new `Channel`
-* Major improvements to `CachedThreadPool` and `FixedThreadPool`
-* Added `SingleThreadExecutor`
-* Added `Current::timer` function
-* Added `TimerSet` executor
-* Added `AtomicBoolean`
-* `ScheduledTask` refactoring
-* Pure Ruby and JRuby-optimized `PriorityQueue` classes
-* Updated `Agent` behavior to more closely match Clojure
-* Observer sets support block callbacks to the `add_observer` method
-* New algorithm for thread creation in `RubyThreadPoolExecutor`
-* Minor API updates to `Event`
-* Rewritten `TimerTask` now an `Executor` instead of a `Runnable`
-* Fixed many brittle specs
-* Renamed `FixedThreadPool` and `CachedThreadPool` to `RubyFixedThreadPool` and `RubyCachedThreadPool`
-* Created JRuby optimized `JavaFixedThreadPool` and `JavaCachedThreadPool`
-* Consolidated fixed thread pool tests into `spec/concurrent/fixed_thread_pool_shared.rb` and `spec/concurrent/cached_thread_pool_shared.rb`
-* `FixedThreadPool` now subclasses `RubyFixedThreadPool` or `JavaFixedThreadPool` as appropriate
-* `CachedThreadPool` now subclasses `RubyCachedThreadPool` or `JavaCachedThreadPool` as appropriate
-* New `Delay` class
-* `Concurrent::processor_count` helper function
-* New `Async` module
-* Renamed `NullThreadPool` to `PerThreadExecutor`
-* Deprecated `Channel` (we are planning a new implementation based on [Go](http://golangtutorials.blogspot.com/2011/06/channels-in-go.html))
-* Added gem-level [configuration](http://robots.thoughtbot.com/mygem-configure-block)
-* Deprecated `$GLOBAL_THREAD_POOL` in lieu of gem-level configuration
-* Removed support for Ruby [1.9.2](https://www.ruby-lang.org/en/news/2013/12/17/maintenance-of-1-8-7-and-1-9-2/)
-* New `RubyThreadPoolExecutor` and `JavaThreadPoolExecutor` classes
-* All thread pools now extend the appropriate thread pool executor classes
-* All thread pools now support `:overflow_policy` (based on Java's [reject policies](http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ThreadPoolExecutor.html))
-* Deprecated `UsesGlobalThreadPool` in lieu of explicit `:executor` option (dependency injection) on `Future`, `Promise`, and `Agent`
-* Added `Concurrent::dataflow_with(executor, *inputs)` method to support executor dependency injection for dataflow
-* Software transactional memory with `TVar` and `Concurrent::atomically`
-* First implementation of [new, high-performance](https://github.com/ruby-concurrency/concurrent-ruby/pull/49) `Channel`
-* `Actor` is deprecated in favor of new experimental actor implementation [#73](https://github.com/ruby-concurrency/concurrent-ruby/pull/73). To avoid namespace collision it is living in `Actress` namespace until `Actor` is removed in next release.
-
-## Release v0.5.0
-
-This is the most significant release of this gem since its inception. This release includes many improvements and optimizations. It also includes several bug fixes. The major areas of focus for this release were:
-
-* Stability improvements on Ruby versions with thread-level parallelism ([JRuby](http://jruby.org/) and [Rubinius](http://rubini.us/))
-* Creation of new low-level concurrency abstractions
-* Internal refactoring to use the new low-level abstractions
-
-Most of these updates had no effect on the gem API. There are a few notable exceptions which were unavoidable. Please read the [release notes](API-Updates-in-v0.5.0) for more information.
-
-Specific changes include:
-
-* New class `IVar`
-* New class `MVar`
-* New class `ThreadLocalVar`
-* New class `AtomicFixnum`
-* New class method `dataflow`
-* New class `Condition`
-* New class `CountDownLatch`
-* New class `DependencyCounter`
-* New class `SafeTaskExecutor`
-* New class `CopyOnNotifyObserverSet`
-* New class `CopyOnWriteObserverSet`
-* `Future` updated with `execute` API
-* `ScheduledTask` updated with `execute` API
-* New `Promise` API
-* `Future` now extends `IVar`
-* `Postable#post?` now returns an `IVar`
-* Thread safety fixes to `Dereferenceable`
-* Thread safety fixes to `Obligation`
-* Thread safety fixes to `Supervisor`
-* Thread safety fixes to `Event`
-* Various other thread safety (race condition) fixes
-* Refactored brittle tests
-* Implemented pending tests
-* Added JRuby and Rubinius as Travis CI build targets
-* Added [CodeClimate](https://codeclimate.com/) code review
-* Improved YARD documentation
diff --git a/docs/website/vendor/bundle/ruby/3.0.0/gems/concurrent-ruby-1.2.2/Gemfile b/docs/website/vendor/bundle/ruby/3.0.0/gems/concurrent-ruby-1.2.2/Gemfile
deleted file mode 100644
index b336031..0000000
--- a/docs/website/vendor/bundle/ruby/3.0.0/gems/concurrent-ruby-1.2.2/Gemfile
+++ /dev/null
@@ -1,36 +0,0 @@
-source 'https://rubygems.org'
-
-require File.join(File.dirname(__FILE__), 'lib/concurrent-ruby/concurrent/version')
-require File.join(File.dirname(__FILE__ ), 'lib/concurrent-ruby-edge/concurrent/edge/version')
-
-no_path = ENV['NO_PATH']
-options = no_path ? {} : { path: '.' }
-
-gem 'concurrent-ruby', Concurrent::VERSION, options
-gem 'concurrent-ruby-edge', Concurrent::EDGE_VERSION, options
-gem 'concurrent-ruby-ext', Concurrent::VERSION, options.merge(platform: :mri)
-
-group :development do
- gem 'rake', '~> 13.0'
- gem 'rake-compiler', '~> 1.0', '>= 1.0.7'
- gem 'rake-compiler-dock', '~> 1.0'
- gem 'pry', '~> 0.11', platforms: :mri
-end
-
-group :documentation, optional: true do
- gem 'yard', '~> 0.9.0', require: false
- gem 'redcarpet', '~> 3.0', platforms: :mri # understands github markdown
- gem 'md-ruby-eval', '~> 0.6'
-end
-
-group :testing do
- gem 'rspec', '~> 3.7'
- gem 'timecop', '~> 0.9'
- gem 'sigdump', require: false
-end
-
-# made opt-in since it will not install on jruby 1.7
-group :coverage, optional: !ENV['COVERAGE'] do
- gem 'simplecov', '~> 0.16.0', require: false
- gem 'coveralls', '~> 0.8.2', require: false
-end
diff --git a/docs/website/vendor/bundle/ruby/3.0.0/gems/concurrent-ruby-1.2.2/LICENSE.txt b/docs/website/vendor/bundle/ruby/3.0.0/gems/concurrent-ruby-1.2.2/LICENSE.txt
deleted file mode 100644
index 1026f28..0000000
--- a/docs/website/vendor/bundle/ruby/3.0.0/gems/concurrent-ruby-1.2.2/LICENSE.txt
+++ /dev/null
@@ -1,21 +0,0 @@
-Copyright (c) Jerry D'Antonio -- released under the MIT license.
-
-http://www.opensource.org/licenses/mit-license.php
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
diff --git a/docs/website/vendor/bundle/ruby/3.0.0/gems/concurrent-ruby-1.2.2/README.md b/docs/website/vendor/bundle/ruby/3.0.0/gems/concurrent-ruby-1.2.2/README.md
deleted file mode 100644
index 15f011b..0000000
--- a/docs/website/vendor/bundle/ruby/3.0.0/gems/concurrent-ruby-1.2.2/README.md
+++ /dev/null
@@ -1,405 +0,0 @@
-# Concurrent Ruby
-
-[![Gem Version](https://badge.fury.io/rb/concurrent-ruby.svg)](http://badge.fury.io/rb/concurrent-ruby)
-[![License](https://img.shields.io/badge/license-MIT-green.svg)](http://opensource.org/licenses/MIT)
-[![Gitter chat](https://img.shields.io/badge/IRC%20(gitter)-devs%20%26%20users-brightgreen.svg)](https://gitter.im/ruby-concurrency/concurrent-ruby)
-
-Modern concurrency tools for Ruby. Inspired by
-[Erlang](http://www.erlang.org/doc/reference_manual/processes.html),
-[Clojure](http://clojure.org/concurrent_programming),
-[Scala](http://akka.io/),
-[Haskell](http://www.haskell.org/haskellwiki/Applications_and_libraries/Concurrency_and_parallelism#Concurrent_Haskell),
-[F#](http://blogs.msdn.com/b/dsyme/archive/2010/02/15/async-and-parallel-design-patterns-in-f-part-3-agents.aspx),
-[C#](http://msdn.microsoft.com/en-us/library/vstudio/hh191443.aspx),
-[Java](http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/package-summary.html),
-and classic concurrency patterns.
-
-
-
-The design goals of this gem are:
-
-* Be an 'unopinionated' toolbox that provides useful utilities without debating which is better
- or why
-* Remain free of external gem dependencies
-* Stay true to the spirit of the languages providing inspiration
-* But implement in a way that makes sense for Ruby
-* Keep the semantics as idiomatic Ruby as possible
-* Support features that make sense in Ruby
-* Exclude features that don't make sense in Ruby
-* Be small, lean, and loosely coupled
-* Thread-safety
-* Backward compatibility
-
-## Contributing
-
-**This gem depends on
-[contributions](https://github.com/ruby-concurrency/concurrent-ruby/graphs/contributors) and we
-appreciate your help. Would you like to contribute? Great! Have a look at
-[issues with `looking-for-contributor` label](https://github.com/ruby-concurrency/concurrent-ruby/issues?q=is%3Aissue+is%3Aopen+label%3Alooking-for-contributor).** And if you pick something up let us know on the issue.
-
-You can also get started by triaging issues which may include reproducing bug reports or asking for vital information, such as version numbers or reproduction instructions. If you would like to start triaging issues, one easy way to get started is to [subscribe to concurrent-ruby on CodeTriage](https://www.codetriage.com/ruby-concurrency/concurrent-ruby). [![Open Source Helpers](https://www.codetriage.com/ruby-concurrency/concurrent-ruby/badges/users.svg)](https://www.codetriage.com/ruby-concurrency/concurrent-ruby)
-
-## Thread Safety
-
-*Concurrent Ruby makes one of the strongest thread safety guarantees of any Ruby concurrency
-library, providing consistent behavior and guarantees on all three main Ruby interpreters
-(MRI/CRuby, JRuby, TruffleRuby).*
-
-Every abstraction in this library is thread safe. Specific thread safety guarantees are documented
-with each abstraction.
-
-It is critical to remember, however, that Ruby is a language of mutable references. *No*
-concurrency library for Ruby can ever prevent the user from making thread safety mistakes (such as
-sharing a mutable object between threads and modifying it on both threads) or from creating
-deadlocks through incorrect use of locks. All the library can do is provide safe abstractions which
-encourage safe practices. Concurrent Ruby provides more safe concurrency abstractions than any
-other Ruby library, many of which support the mantra of
-["Do not communicate by sharing memory; instead, share memory by communicating"](https://blog.golang.org/share-memory-by-communicating).
-Concurrent Ruby is also the only Ruby library which provides a full suite of thread safe and
-immutable variable types and data structures.
-
-We've also initiated discussion to document the [memory model](docs-source/synchronization.md) of Ruby which
-would provide consistent behaviour and guarantees on all three main Ruby interpreters
-(MRI/CRuby, JRuby, TruffleRuby).
-
-## Features & Documentation
-
-**The primary site for documentation is the automatically generated
-[API documentation](http://ruby-concurrency.github.io/concurrent-ruby/index.html) which is up to
-date with latest release.** This readme matches the master so may contain new stuff not yet
-released.
-
-We also have a [IRC (gitter)](https://gitter.im/ruby-concurrency/concurrent-ruby).
-
-### Versioning
-
-* `concurrent-ruby` uses [Semantic Versioning](http://semver.org/)
-* `concurrent-ruby-ext` has always same version as `concurrent-ruby`
-* `concurrent-ruby-edge` will always be 0.y.z therefore following
- [point 4](http://semver.org/#spec-item-4) applies *"Major version zero
- (0.y.z) is for initial development. Anything may change at any time. The
- public API should not be considered stable."* However we additionally use
- following rules:
- * Minor version increment means incompatible changes were made
- * Patch version increment means only compatible changes were made
-
-
-#### General-purpose Concurrency Abstractions
-
-* [Async](http://ruby-concurrency.github.io/concurrent-ruby/master/Concurrent/Async.html):
- A mixin module that provides simple asynchronous behavior to a class. Loosely based on Erlang's
- [gen_server](http://www.erlang.org/doc/man/gen_server.html).
-* [ScheduledTask](http://ruby-concurrency.github.io/concurrent-ruby/master/Concurrent/ScheduledTask.html):
- Like a Future scheduled for a specific future time.
-* [TimerTask](http://ruby-concurrency.github.io/concurrent-ruby/master/Concurrent/TimerTask.html):
- A Thread that periodically wakes up to perform work at regular intervals.
-* [Promises](http://ruby-concurrency.github.io/concurrent-ruby/master/Concurrent/Promises.html):
- Unified implementation of futures and promises which combines features of previous `Future`,
- `Promise`, `IVar`, `Event`, `dataflow`, `Delay`, and (partially) `TimerTask` into a single
- framework. It extensively uses the new synchronization layer to make all the features
- **non-blocking** and **lock-free**, with the exception of obviously blocking operations like
- `#wait`, `#value`. It also offers better performance.
-
-#### Thread-safe Value Objects, Structures, and Collections
-
-Collection classes that were originally part of the (deprecated) `thread_safe` gem:
-
-* [Array](http://ruby-concurrency.github.io/concurrent-ruby/master/Concurrent/Array.html) A thread-safe
- subclass of Ruby's standard [Array](http://ruby-doc.org/core/Array.html).
-* [Hash](http://ruby-concurrency.github.io/concurrent-ruby/master/Concurrent/Hash.html) A thread-safe
- subclass of Ruby's standard [Hash](http://ruby-doc.org/core/Hash.html).
-* [Set](http://ruby-concurrency.github.io/concurrent-ruby/master/Concurrent/Set.html) A thread-safe
- subclass of Ruby's standard [Set](http://ruby-doc.org/stdlib-2.4.0/libdoc/set/rdoc/Set.html).
-* [Map](http://ruby-concurrency.github.io/concurrent-ruby/master/Concurrent/Map.html) A hash-like object
- that should have much better performance characteristics, especially under high concurrency,
- than `Concurrent::Hash`.
-* [Tuple](http://ruby-concurrency.github.io/concurrent-ruby/master/Concurrent/Tuple.html) A fixed size
- array with volatile (synchronized, thread safe) getters/setters.
-
-Value objects inspired by other languages:
-
-* [Maybe](http://ruby-concurrency.github.io/concurrent-ruby/master/Concurrent/Maybe.html) A thread-safe,
- immutable object representing an optional value, based on
- [Haskell Data.Maybe](https://hackage.haskell.org/package/base-4.2.0.1/docs/Data-Maybe.html).
-
-Structure classes derived from Ruby's [Struct](http://ruby-doc.org/core/Struct.html):
-
-* [ImmutableStruct](http://ruby-concurrency.github.io/concurrent-ruby/master/Concurrent/ImmutableStruct.html)
- Immutable struct where values are set at construction and cannot be changed later.
-* [MutableStruct](http://ruby-concurrency.github.io/concurrent-ruby/master/Concurrent/MutableStruct.html)
- Synchronized, mutable struct where values can be safely changed at any time.
-* [SettableStruct](http://ruby-concurrency.github.io/concurrent-ruby/master/Concurrent/SettableStruct.html)
- Synchronized, write-once struct where values can be set at most once, either at construction
- or any time thereafter.
-
-Thread-safe variables:
-
-* [Agent](http://ruby-concurrency.github.io/concurrent-ruby/master/Concurrent/Agent.html): A way to
- manage shared, mutable, *asynchronous*, independent state. Based on Clojure's
- [Agent](http://clojure.org/agents).
-* [Atom](http://ruby-concurrency.github.io/concurrent-ruby/master/Concurrent/Atom.html): A way to manage
- shared, mutable, *synchronous*, independent state. Based on Clojure's
- [Atom](http://clojure.org/atoms).
-* [AtomicBoolean](http://ruby-concurrency.github.io/concurrent-ruby/master/Concurrent/AtomicBoolean.html)
- A boolean value that can be updated atomically.
-* [AtomicFixnum](http://ruby-concurrency.github.io/concurrent-ruby/master/Concurrent/AtomicFixnum.html)
- A numeric value that can be updated atomically.
-* [AtomicReference](http://ruby-concurrency.github.io/concurrent-ruby/master/Concurrent/AtomicReference.html)
- An object reference that may be updated atomically.
-* [Exchanger](http://ruby-concurrency.github.io/concurrent-ruby/master/Concurrent/Exchanger.html)
- A synchronization point at which threads can pair and swap elements within pairs. Based on
- Java's [Exchanger](http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/Exchanger.html).
-* [MVar](http://ruby-concurrency.github.io/concurrent-ruby/master/Concurrent/MVar.html) A synchronized
- single element container. Based on Haskell's
- [MVar](https://hackage.haskell.org/package/base-4.8.1.0/docs/Control-Concurrent-MVar.html) and
- Scala's [MVar](http://docs.typelevel.org/api/scalaz/nightly/index.html#scalaz.concurrent.MVar$).
-* [ThreadLocalVar](http://ruby-concurrency.github.io/concurrent-ruby/master/Concurrent/ThreadLocalVar.html)
- A variable where the value is different for each thread.
-* [TVar](http://ruby-concurrency.github.io/concurrent-ruby/master/Concurrent/TVar.html) A transactional
- variable implementing software transactional memory (STM). Based on Clojure's
- [Ref](http://clojure.org/refs).
-
-#### Java-inspired ThreadPools and Other Executors
-
-* See the [thread pool](http://ruby-concurrency.github.io/concurrent-ruby/master/file.thread_pools.html)
- overview, which also contains a list of other Executors available.
-
-#### Thread Synchronization Classes and Algorithms
-
-* [CountDownLatch](http://ruby-concurrency.github.io/concurrent-ruby/master/Concurrent/CountDownLatch.html)
- A synchronization object that allows one thread to wait on multiple other threads.
-* [CyclicBarrier](http://ruby-concurrency.github.io/concurrent-ruby/master/Concurrent/CyclicBarrier.html)
- A synchronization aid that allows a set of threads to all wait for each other to reach a common barrier point.
-* [Event](http://ruby-concurrency.github.io/concurrent-ruby/master/Concurrent/Event.html) Old school
- kernel-style event.
-* [ReadWriteLock](http://ruby-concurrency.github.io/concurrent-ruby/master/Concurrent/ReadWriteLock.html)
- A lock that supports multiple readers but only one writer.
-* [ReentrantReadWriteLock](http://ruby-concurrency.github.io/concurrent-ruby/master/Concurrent/ReentrantReadWriteLock.html)
- A read/write lock with reentrant and upgrade features.
-* [Semaphore](http://ruby-concurrency.github.io/concurrent-ruby/master/Concurrent/Semaphore.html)
- A counting-based locking mechanism that uses permits.
-* [AtomicMarkableReference](http://ruby-concurrency.github.io/concurrent-ruby/master/Concurrent/AtomicMarkableReference.html)
-
-#### Deprecated
-
-Deprecated features are still available and bugs are being fixed, but new features will not be added.
-
-* ~~[Future](http://ruby-concurrency.github.io/concurrent-ruby/master/Concurrent/Future.html):
- An asynchronous operation that produces a value.~~ Replaced by
- [Promises](http://ruby-concurrency.github.io/concurrent-ruby/master/Concurrent/Promises.html).
- * ~~[.dataflow](http://ruby-concurrency.github.io/concurrent-ruby/master/Concurrent.html#dataflow-class_method):
- Built on Futures, Dataflow allows you to create a task that will be scheduled when all of
- its data dependencies are available.~~ Replaced by
- [Promises](http://ruby-concurrency.github.io/concurrent-ruby/master/Concurrent/Promises.html).
-* ~~[Promise](http://ruby-concurrency.github.io/concurrent-ruby/master/Concurrent/Promise.html): Similar
- to Futures, with more features.~~ Replaced by
- [Promises](http://ruby-concurrency.github.io/concurrent-ruby/master/Concurrent/Promises.html).
-* ~~[Delay](http://ruby-concurrency.github.io/concurrent-ruby/master/Concurrent/Delay.html) Lazy evaluation
- of a block yielding an immutable result. Based on Clojure's
- [delay](https://clojuredocs.org/clojure.core/delay).~~ Replaced by
- [Promises](http://ruby-concurrency.github.io/concurrent-ruby/master/Concurrent/Promises.html).
-* ~~[IVar](http://ruby-concurrency.github.io/concurrent-ruby/master/Concurrent/IVar.html) Similar to a
- "future" but can be manually assigned once, after which it becomes immutable.~~ Replaced by
- [Promises](http://ruby-concurrency.github.io/concurrent-ruby/master/Concurrent/Promises.html).
-
-### Edge Features
-
-These are available in the `concurrent-ruby-edge` companion gem.
-
-These features are under active development and may change frequently. They are expected not to
-keep backward compatibility (there may also lack tests and documentation). Semantic versions will
-be obeyed though. Features developed in `concurrent-ruby-edge` are expected to move to
-`concurrent-ruby` when final.
-
-* [Actor](http://ruby-concurrency.github.io/concurrent-ruby/master/Concurrent/Actor.html): Implements
- the Actor Model, where concurrent actors exchange messages.
- *Status: Partial documentation and tests; depends on new future/promise framework; stability is good.*
-* [Channel](http://ruby-concurrency.github.io/concurrent-ruby/master/Concurrent/Channel.html):
- Communicating Sequential Processes ([CSP](https://en.wikipedia.org/wiki/Communicating_sequential_processes)).
- Functionally equivalent to Go [channels](https://tour.golang.org/concurrency/2) with additional
- inspiration from Clojure [core.async](https://clojure.github.io/core.async/).
- *Status: Partial documentation and tests.*
-* [LazyRegister](http://ruby-concurrency.github.io/concurrent-ruby/master/Concurrent/LazyRegister.html)
-* [LockFreeLinkedSet](http://ruby-concurrency.github.io/concurrent-ruby/master/Concurrent/Edge/LockFreeLinkedSet.html)
- *Status: will be moved to core soon.*
-* [LockFreeStack](http://ruby-concurrency.github.io/concurrent-ruby/master/Concurrent/LockFreeStack.html)
- *Status: missing documentation and tests.*
-* [Promises::Channel](http://ruby-concurrency.github.io/concurrent-ruby/master/Concurrent/Promises/Channel.html)
- A first in first out channel that accepts messages with push family of methods and returns
- messages with pop family of methods.
- Pop and push operations can be represented as futures, see `#pop_op` and `#push_op`.
- The capacity of the channel can be limited to support back pressure, use capacity option in `#initialize`.
- `#pop` method blocks ans `#pop_op` returns pending future if there is no message in the channel.
- If the capacity is limited the `#push` method blocks and `#push_op` returns pending future.
-* [Cancellation](http://ruby-concurrency.github.io/concurrent-ruby/master/Concurrent/Cancellation.html)
- The Cancellation abstraction provides cooperative cancellation.
-
- The standard methods `Thread#raise` of `Thread#kill` available in Ruby
- are very dangerous (see linked the blog posts bellow).
- Therefore concurrent-ruby provides an alternative.
-
- *
- *
- *
-
- It provides an object which represents a task which can be executed,
- the task has to get the reference to the object and periodically cooperatively check that it is not cancelled.
- Good practices to make tasks cancellable:
- * check cancellation every cycle of a loop which does significant work,
- * do all blocking actions in a loop with a timeout then on timeout check cancellation
- and if ok block again with the timeout
-* [Throttle](http://ruby-concurrency.github.io/concurrent-ruby/master/Concurrent/Throttle.html)
- A tool managing concurrency level of tasks.
-* [ErlangActor](http://ruby-concurrency.github.io/concurrent-ruby/master/Concurrent/ErlangActor.html)
- Actor implementation which precisely matches Erlang actor behaviour.
- Requires at least Ruby 2.1 otherwise it's not loaded.
-* [WrappingExecutor](http://ruby-concurrency.github.io/concurrent-ruby/master/Concurrent/WrappingExecutor.html)
- A delegating executor which modifies each task before the task is given to
- the target executor it delegates to.
-
-## Supported Ruby versions
-
-* MRI 2.3 and above
-* Latest JRuby 9000
-* Latest TruffleRuby
-
-## Usage
-
-Everything within this gem can be loaded simply by requiring it:
-
-```ruby
-require 'concurrent'
-```
-
-You can also require a specific abstraction [part of the public documentation](https://ruby-concurrency.github.io/concurrent-ruby/master/index.html) since concurrent-ruby 1.2.0, for example:
-```ruby
-require 'concurrent/map'
-require 'concurrent/atomic/atomic_reference'
-require 'concurrent/executor/fixed_thread_pool'
-```
-
-To use the tools in the Edge gem it must be required separately:
-
-```ruby
-require 'concurrent-edge'
-```
-
-If the library does not behave as expected, `Concurrent.use_stdlib_logger(Logger::DEBUG)` could
-help to reveal the problem.
-
-## Installation
-
-```shell
-gem install concurrent-ruby
-```
-
-or add the following line to Gemfile:
-
-```ruby
-gem 'concurrent-ruby', require: 'concurrent'
-```
-
-and run `bundle install` from your shell.
-
-### Edge Gem Installation
-
-The Edge gem must be installed separately from the core gem:
-
-```shell
-gem install concurrent-ruby-edge
-```
-
-or add the following line to Gemfile:
-
-```ruby
-gem 'concurrent-ruby-edge', require: 'concurrent-edge'
-```
-
-and run `bundle install` from your shell.
-
-
-### C Extensions for MRI
-
-Potential performance improvements may be achieved under MRI by installing optional C extensions.
-To minimise installation errors the C extensions are available in the `concurrent-ruby-ext`
-extension gem. `concurrent-ruby` and `concurrent-ruby-ext` are always released together with same
-version. Simply install the extension gem too:
-
-```ruby
-gem install concurrent-ruby-ext
-```
-
-or add the following line to Gemfile:
-
-```ruby
-gem 'concurrent-ruby-ext'
-```
-
-and run `bundle install` from your shell.
-
-In code it is only necessary to
-
-```ruby
-require 'concurrent'
-```
-
-The `concurrent-ruby` gem will automatically detect the presence of the `concurrent-ruby-ext` gem
-and load the appropriate C extensions.
-
-#### Note For gem developers
-
-No gems should depend on `concurrent-ruby-ext`. Doing so will force C extensions on your users. The
-best practice is to depend on `concurrent-ruby` and let users to decide if they want C extensions.
-
-## Building the gem
-
-### Requirements
-
-* Recent CRuby
-* JRuby, `rbenv install jruby-9.2.17.0`
-* Set env variable `CONCURRENT_JRUBY_HOME` to point to it, e.g. `/usr/local/opt/rbenv/versions/jruby-9.2.17.0`
-* Install Docker, required for Windows builds
-
-### Publishing the Gem
-
-* Update `version.rb`
-* Update the CHANGELOG
-* Add the new version to `docs-source/signpost.md`. Needs to be done only if there are visible changes in the documentation.
-* Commit (and push) the changes.
-* Use `bundle exec rake release` to release the gem.
- It consists of `['release:checks', 'release:build', 'release:test', 'release:publish']` steps.
- It will ask at the end before publishing anything. Steps can also be executed individually.
-
-## Maintainers
-
-* [Benoit Daloze](https://github.com/eregon)
-* [Matthew Draper](https://github.com/matthewd)
-* [Rafael França](https://github.com/rafaelfranca)
-* [Samuel Williams](https://github.com/ioquatix)
-
-### Special Thanks to
-
-* [Jerry D'Antonio](https://github.com/jdantonio) for creating the gem
-* [Brian Durand](https://github.com/bdurand) for the `ref` gem
-* [Charles Oliver Nutter](https://github.com/headius) for the `atomic` and `thread_safe` gems
-* [thedarkone](https://github.com/thedarkone) for the `thread_safe` gem
-
-to the past maintainers
-
-* [Chris Seaton](https://github.com/chrisseaton)
-* [Petr Chalupa](https://github.com/pitr-ch)
-* [Michele Della Torre](https://github.com/mighe)
-* [Paweł Obrok](https://github.com/obrok)
-* [Lucas Allan](https://github.com/lucasallan)
-
-and to [Ruby Association](https://www.ruby.or.jp/en/) for sponsoring a project
-["Enhancing Ruby’s concurrency tooling"](https://www.ruby.or.jp/en/news/20181106) in 2018.
-
-## License and Copyright
-
-*Concurrent Ruby* is free software released under the
-[MIT License](http://www.opensource.org/licenses/MIT).
-
-The *Concurrent Ruby* [logo](https://raw.githubusercontent.com/ruby-concurrency/concurrent-ruby/master/docs-source/logo/concurrent-ruby-logo-300x300.png) was
-designed by [David Jones](https://twitter.com/zombyboy). It is Copyright © 2014
-[Jerry D'Antonio](https://twitter.com/jerrydantonio). All Rights Reserved.
diff --git a/docs/website/vendor/bundle/ruby/3.0.0/gems/concurrent-ruby-1.2.2/Rakefile b/docs/website/vendor/bundle/ruby/3.0.0/gems/concurrent-ruby-1.2.2/Rakefile
deleted file mode 100644
index f167f46..0000000
--- a/docs/website/vendor/bundle/ruby/3.0.0/gems/concurrent-ruby-1.2.2/Rakefile
+++ /dev/null
@@ -1,319 +0,0 @@
-require_relative 'lib/concurrent-ruby/concurrent/version'
-require_relative 'lib/concurrent-ruby-edge/concurrent/edge/version'
-require_relative 'lib/concurrent-ruby/concurrent/utility/engine'
-
-core_gemspec = Gem::Specification.load File.join(__dir__, 'concurrent-ruby.gemspec')
-ext_gemspec = Gem::Specification.load File.join(__dir__, 'concurrent-ruby-ext.gemspec')
-edge_gemspec = Gem::Specification.load File.join(__dir__, 'concurrent-ruby-edge.gemspec')
-
-require 'rake/javaextensiontask'
-
-ENV['JRUBY_HOME'] = ENV['CONCURRENT_JRUBY_HOME'] if ENV['CONCURRENT_JRUBY_HOME'] && !Concurrent.on_jruby?
-
-Rake::JavaExtensionTask.new('concurrent_ruby', core_gemspec) do |ext|
- ext.ext_dir = 'ext/concurrent-ruby'
- ext.lib_dir = 'lib/concurrent-ruby/concurrent'
-end
-
-unless Concurrent.on_jruby? || Concurrent.on_truffleruby?
- require 'rake/extensiontask'
-
- Rake::ExtensionTask.new('concurrent_ruby_ext', ext_gemspec) do |ext|
- ext.ext_dir = 'ext/concurrent-ruby-ext'
- ext.lib_dir = 'lib/concurrent-ruby/concurrent'
- ext.source_pattern = '*.{c,h}'
-
- ext.cross_compile = true
- ext.cross_platform = ['x86-mingw32', 'x64-mingw32']
- end
-end
-
-require 'rake_compiler_dock'
-namespace :repackage do
- desc '* with Windows fat distributions'
- task :all do
- Dir.chdir(__dir__) do
- # store gems in vendor cache for docker
- Bundler.with_original_env do
- sh 'bundle package'
- end
-
- # build only the jar file not the whole gem for java platform, the jar is part the concurrent-ruby-x.y.z.gem
- Rake::Task['lib/concurrent-ruby/concurrent/concurrent_ruby.jar'].invoke
-
- # build all gem files
- %w[x86-mingw32 x64-mingw32].each do |plat|
- RakeCompilerDock.sh(
- "bundle install --local && bundle exec rake native:#{plat} gem --trace",
- platform: plat,
- options: ['--privileged'], # otherwise the directory in the image is empty
- runas: false)
- end
- end
- end
-end
-
-require 'rubygems'
-require 'rubygems/package_task'
-
-Gem::PackageTask.new(core_gemspec) {} if core_gemspec
-Gem::PackageTask.new(ext_gemspec) {} if ext_gemspec && !Concurrent.on_jruby?
-Gem::PackageTask.new(edge_gemspec) {} if edge_gemspec
-
-CLEAN.include(
- 'lib/concurrent-ruby/concurrent/concurrent_ruby_ext.*',
- 'lib/concurrent-ruby/concurrent/2.*',
- 'lib/concurrent-ruby/concurrent/*.jar')
-
-begin
- require 'rspec'
- require 'rspec/core/rake_task'
-
- RSpec::Core::RakeTask.new(:spec)
-
- namespace :spec do
- desc '* Configured for ci'
- RSpec::Core::RakeTask.new(:ci) do |t|
- options = %w[ --color
- --backtrace
- --order defined
- --format documentation ]
- t.rspec_opts = [*options].join(' ')
- end
-
- desc '* test packaged and installed gems instead of local files'
- task :installed do
- Bundler.with_original_env do
- Dir.chdir(__dir__) do
- sh "gem install pkg/concurrent-ruby-#{Concurrent::VERSION}.gem"
- sh "gem install pkg/concurrent-ruby-ext-#{Concurrent::VERSION}.gem" if Concurrent.on_cruby?
- sh "gem install pkg/concurrent-ruby-edge-#{Concurrent::EDGE_VERSION}.gem"
- ENV['NO_PATH'] = 'true'
- sh 'bundle update'
- sh 'bundle exec rake spec:ci'
- end
- end
- end
- end
-
- desc 'executed in CI'
- task :ci => [:compile, 'spec:ci']
-
- desc 'run each spec file in a separate process to help find missing requires'
- task 'spec:isolated' do
- glob = "#{ENV['DIR'] || 'spec'}/**/*_spec.rb"
- from = ENV['FROM']
- env = { 'ISOLATED' => 'true' }
- Dir[glob].each do |spec|
- next if from and from != spec
- from = nil if from == spec
-
- sh env, 'rspec', spec
- end
- end
-
- task :default => [:clobber, :compile, :spec]
-rescue LoadError => e
- puts 'RSpec is not installed, skipping test task definitions: ' + e.message
-end
-
-current_yard_version_name = Concurrent::VERSION
-
-begin
- require 'yard'
- require 'md_ruby_eval'
- require_relative 'support/yard_full_types'
-
- common_yard_options = ['--no-yardopts',
- '--no-document',
- '--no-private',
- '--embed-mixins',
- '--markup', 'markdown',
- '--title', 'Concurrent Ruby',
- '--template', 'default',
- '--template-path', 'yard-template',
- '--default-return', 'undocumented']
-
- desc 'Generate YARD Documentation (signpost, master)'
- task :yard => ['yard:signpost', 'yard:master']
-
- namespace :yard do
-
- desc '* eval markdown files'
- task :eval_md do
- Dir.chdir File.join(__dir__, 'docs-source') do
- sh 'bundle exec md-ruby-eval --auto'
- end
- end
-
- task :update_readme do
- Dir.chdir __dir__ do
- content = File.read(File.join('README.md')).
- gsub(/\[([\w ]+)\]\(http:\/\/ruby-concurrency\.github\.io\/concurrent-ruby\/master\/.*\)/) do |_|
- case $1
- when 'LockFreeLinkedSet'
- "{Concurrent::Edge::#{$1} #{$1}}"
- when '.dataflow'
- '{Concurrent.dataflow Concurrent.dataflow}'
- when 'thread pool'
- '{file:thread_pools.md thread pool}'
- else
- "{Concurrent::#{$1} #{$1}}"
- end
- end
- FileUtils.mkpath 'tmp'
- File.write 'tmp/README.md', content
- end
- end
-
- define_yard_task = -> name do
- output_dir = "docs/#{name}"
-
- removal_name = "remove.#{name}"
- task removal_name do
- Dir.chdir __dir__ do
- FileUtils.rm_rf output_dir
- end
- end
-
- desc "* of #{name} into subdir #{name}"
- YARD::Rake::YardocTask.new(name) do |yard|
- yard.options.push(
- '--output-dir', output_dir,
- '--main', 'tmp/README.md',
- *common_yard_options)
- yard.files = ['./lib/concurrent-ruby/**/*.rb',
- './lib/concurrent-ruby-edge/**/*.rb',
- './ext/concurrent_ruby_ext/**/*.c',
- '-',
- 'docs-source/thread_pools.md',
- 'docs-source/promises.out.md',
- 'docs-source/medium-example.out.rb',
- 'LICENSE.txt',
- 'CHANGELOG.md']
- end
- Rake::Task[name].prerequisites.push removal_name,
- # 'yard:eval_md',
- 'yard:update_readme'
- end
-
- define_yard_task.call current_yard_version_name
- define_yard_task.call 'master'
-
- desc "* signpost for versions"
- YARD::Rake::YardocTask.new(:signpost) do |yard|
- yard.options.push(
- '--output-dir', 'docs',
- '--main', 'docs-source/signpost.md',
- *common_yard_options)
- yard.files = ['no-lib']
- end
- end
-
-rescue LoadError => e
- puts 'YARD is not installed, skipping documentation task definitions: ' + e.message
-end
-
-desc 'build, test, and publish the gem'
-task :release => ['release:checks', 'release:build', 'release:test', 'release:publish']
-
-namespace :release do
- # Depends on environment of @pitr-ch
-
- task :checks do
- Dir.chdir(__dir__) do
- sh 'test -z "$(git status --porcelain)"' do |ok, res|
- unless ok
- begin
- status = `git status --porcelain`
- STDOUT.puts 'There are local changes that you might want to commit.', status, 'Continue? (y/n)'
- input = STDIN.gets.strip.downcase
- end until %w(y n).include?(input)
- exit 1 if input == 'n'
- end
- end
- sh 'git fetch'
- sh 'test $(git show-ref --verify --hash refs/heads/master) = ' +
- '$(git show-ref --verify --hash refs/remotes/origin/master)' do |ok, res|
- unless ok
- begin
- STDOUT.puts 'Local master branch is not pushed to origin.', 'Continue? (y/n)'
- input = STDIN.gets.strip.downcase
- end until %w(y n).include?(input)
- exit 1 if input == 'n'
- end
- end
- end
- end
-
- desc '* build all *.gem files necessary for release'
- task :build => [:clobber, 'repackage:all']
-
- desc '* test actual installed gems instead of cloned repository on MRI and JRuby'
- task :test do
- Dir.chdir(__dir__) do
- puts "Testing with the installed gem"
-
- Bundler.with_original_env do
- sh 'ruby -v'
- sh 'bundle exec rake spec:installed'
-
- env = { "PATH" => "#{ENV['CONCURRENT_JRUBY_HOME']}/bin:#{ENV['PATH']}" }
- sh env, 'ruby -v'
- sh env, 'bundle exec rake spec:installed'
- end
-
- puts 'Windows build is untested'
- end
- end
-
- desc '* do all nested steps'
- task :publish => ['publish:ask', 'publish:tag', 'publish:rubygems', 'publish:post_steps']
-
- namespace :publish do
- publish_base = true
- publish_edge = false
-
- task :ask do
- begin
- STDOUT.puts 'Do you want to publish anything now? (y/n)'
- input = STDIN.gets.strip.downcase
- end until %w(y n).include?(input)
- exit 1 if input == 'n'
- begin
- STDOUT.puts 'It will publish `concurrent-ruby`. Do you want to publish `concurrent-ruby-edge`? (y/n)'
- input = STDIN.gets.strip.downcase
- end until %w(y n).include?(input)
- publish_edge = input == 'y'
- end
-
- desc '** tag HEAD with current version and push to github'
- task :tag => :ask do
- Dir.chdir(__dir__) do
- sh "git tag v#{Concurrent::VERSION}" if publish_base
- sh "git push origin v#{Concurrent::VERSION}" if publish_base
- sh "git tag edge-v#{Concurrent::EDGE_VERSION}" if publish_edge
- sh "git push origin edge-v#{Concurrent::EDGE_VERSION}" if publish_edge
- end
- end
-
- desc '** push all *.gem files to rubygems'
- task :rubygems => :ask do
- Dir.chdir(__dir__) do
- sh "gem push pkg/concurrent-ruby-#{Concurrent::VERSION}.gem" if publish_base
- sh "gem push pkg/concurrent-ruby-edge-#{Concurrent::EDGE_VERSION}.gem" if publish_edge
- sh "gem push pkg/concurrent-ruby-ext-#{Concurrent::VERSION}.gem" if publish_base
- sh "gem push pkg/concurrent-ruby-ext-#{Concurrent::VERSION}-x64-mingw32.gem" if publish_base
- sh "gem push pkg/concurrent-ruby-ext-#{Concurrent::VERSION}-x86-mingw32.gem" if publish_base
- end
- end
-
- desc '** print post release steps'
- task :post_steps do
- # TODO: (petr 05-Jun-2021) automate and renew the process
- puts 'Manually: create a release on GitHub with relevant changelog part'
- puts 'Manually: send email same as release with relevant changelog part'
- puts 'Manually: tweet'
- end
- end
-end
diff --git a/docs/website/vendor/bundle/ruby/3.0.0/gems/concurrent-ruby-1.2.2/ext/concurrent-ruby/ConcurrentRubyService.java b/docs/website/vendor/bundle/ruby/3.0.0/gems/concurrent-ruby-1.2.2/ext/concurrent-ruby/ConcurrentRubyService.java
deleted file mode 100644
index fb6be96..0000000
--- a/docs/website/vendor/bundle/ruby/3.0.0/gems/concurrent-ruby-1.2.2/ext/concurrent-ruby/ConcurrentRubyService.java
+++ /dev/null
@@ -1,17 +0,0 @@
-import org.jruby.Ruby;
-import org.jruby.runtime.load.BasicLibraryService;
-
-import java.io.IOException;
-
-public class ConcurrentRubyService implements BasicLibraryService {
-
- public boolean basicLoad(final Ruby runtime) throws IOException {
- new com.concurrent_ruby.ext.AtomicReferenceLibrary().load(runtime, false);
- new com.concurrent_ruby.ext.JavaAtomicBooleanLibrary().load(runtime, false);
- new com.concurrent_ruby.ext.JavaAtomicFixnumLibrary().load(runtime, false);
- new com.concurrent_ruby.ext.JavaSemaphoreLibrary().load(runtime, false);
- new com.concurrent_ruby.ext.SynchronizationLibrary().load(runtime, false);
- new com.concurrent_ruby.ext.JRubyMapBackendLibrary().load(runtime, false);
- return true;
- }
-}
diff --git a/docs/website/vendor/bundle/ruby/3.0.0/gems/concurrent-ruby-1.2.2/ext/concurrent-ruby/com/concurrent_ruby/ext/AtomicReferenceLibrary.java b/docs/website/vendor/bundle/ruby/3.0.0/gems/concurrent-ruby-1.2.2/ext/concurrent-ruby/com/concurrent_ruby/ext/AtomicReferenceLibrary.java
deleted file mode 100644
index dfa9e77..0000000
--- a/docs/website/vendor/bundle/ruby/3.0.0/gems/concurrent-ruby-1.2.2/ext/concurrent-ruby/com/concurrent_ruby/ext/AtomicReferenceLibrary.java
+++ /dev/null
@@ -1,175 +0,0 @@
-package com.concurrent_ruby.ext;
-
-import java.lang.reflect.Field;
-import java.io.IOException;
-import java.util.concurrent.atomic.AtomicReferenceFieldUpdater;
-import org.jruby.Ruby;
-import org.jruby.RubyClass;
-import org.jruby.RubyModule;
-import org.jruby.RubyNumeric;
-import org.jruby.RubyObject;
-import org.jruby.anno.JRubyClass;
-import org.jruby.anno.JRubyMethod;
-import org.jruby.runtime.ObjectAllocator;
-import org.jruby.runtime.ThreadContext;
-import org.jruby.runtime.builtin.IRubyObject;
-import org.jruby.runtime.load.Library;
-
-/**
- * This library adds an atomic reference type to JRuby for use in the atomic
- * library. We do a native version to avoid the implicit value coercion that
- * normally happens through JI.
- *
- * @author headius
- */
-public class AtomicReferenceLibrary implements Library {
- public void load(Ruby runtime, boolean wrap) throws IOException {
- RubyModule concurrentMod = runtime.defineModule("Concurrent");
- RubyClass atomicCls = concurrentMod.defineClassUnder("JavaAtomicReference", runtime.getObject(), JRUBYREFERENCE_ALLOCATOR);
- try {
- sun.misc.Unsafe.class.getMethod("getAndSetObject", Object.class);
- atomicCls.setAllocator(JRUBYREFERENCE8_ALLOCATOR);
- } catch (Exception e) {
- // leave it as Java 6/7 version
- }
- atomicCls.defineAnnotatedMethods(JRubyReference.class);
- }
-
- private static final ObjectAllocator JRUBYREFERENCE_ALLOCATOR = new ObjectAllocator() {
- public IRubyObject allocate(Ruby runtime, RubyClass klazz) {
- return new JRubyReference(runtime, klazz);
- }
- };
-
- private static final ObjectAllocator JRUBYREFERENCE8_ALLOCATOR = new ObjectAllocator() {
- public IRubyObject allocate(Ruby runtime, RubyClass klazz) {
- return new JRubyReference8(runtime, klazz);
- }
- };
-
- @JRubyClass(name="JRubyReference", parent="Object")
- public static class JRubyReference extends RubyObject {
- volatile IRubyObject reference;
-
- static final sun.misc.Unsafe UNSAFE;
- static final long referenceOffset;
-
- static {
- try {
- UNSAFE = UnsafeHolder.U;
- Class k = JRubyReference.class;
- referenceOffset = UNSAFE.objectFieldOffset(k.getDeclaredField("reference"));
- } catch (Exception e) {
- throw new RuntimeException(e);
- }
- }
-
- public JRubyReference(Ruby runtime, RubyClass klass) {
- super(runtime, klass);
- }
-
- @JRubyMethod
- public IRubyObject initialize(ThreadContext context) {
- UNSAFE.putObject(this, referenceOffset, context.nil);
- return context.nil;
- }
-
- @JRubyMethod
- public IRubyObject initialize(ThreadContext context, IRubyObject value) {
- UNSAFE.putObject(this, referenceOffset, value);
- return context.nil;
- }
-
- @JRubyMethod(name = {"get", "value"})
- public IRubyObject get() {
- return reference;
- }
-
- @JRubyMethod(name = {"set", "value="})
- public IRubyObject set(IRubyObject newValue) {
- UNSAFE.putObjectVolatile(this, referenceOffset, newValue);
- return newValue;
- }
-
- @JRubyMethod(name = {"compare_and_set", "compare_and_swap"})
- public IRubyObject compare_and_set(ThreadContext context, IRubyObject expectedValue, IRubyObject newValue) {
- Ruby runtime = context.runtime;
-
- if (expectedValue instanceof RubyNumeric) {
- // numerics are not always idempotent in Ruby, so we need to do slower logic
- return compareAndSetNumeric(context, expectedValue, newValue);
- }
-
- return runtime.newBoolean(UNSAFE.compareAndSwapObject(this, referenceOffset, expectedValue, newValue));
- }
-
- @JRubyMethod(name = {"get_and_set", "swap"})
- public IRubyObject get_and_set(ThreadContext context, IRubyObject newValue) {
- // less-efficient version for Java 6 and 7
- while (true) {
- IRubyObject oldValue = get();
- if (UNSAFE.compareAndSwapObject(this, referenceOffset, oldValue, newValue)) {
- return oldValue;
- }
- }
- }
-
- private IRubyObject compareAndSetNumeric(ThreadContext context, IRubyObject expectedValue, IRubyObject newValue) {
- Ruby runtime = context.runtime;
-
- // loop until:
- // * reference CAS would succeed for same-valued objects
- // * current and expected have different values as determined by #equals
- while (true) {
- IRubyObject current = reference;
-
- if (!(current instanceof RubyNumeric)) {
- // old value is not numeric, CAS fails
- return runtime.getFalse();
- }
-
- RubyNumeric currentNumber = (RubyNumeric)current;
- if (!currentNumber.equals(expectedValue)) {
- // current number does not equal expected, fail CAS
- return runtime.getFalse();
- }
-
- // check that current has not changed, or else allow loop to repeat
- boolean success = UNSAFE.compareAndSwapObject(this, referenceOffset, current, newValue);
- if (success) {
- // value is same and did not change in interim...success
- return runtime.getTrue();
- }
- }
- }
- }
-
- private static final class UnsafeHolder {
- private UnsafeHolder(){}
-
- public static final sun.misc.Unsafe U = loadUnsafe();
-
- private static sun.misc.Unsafe loadUnsafe() {
- try {
- Class unsafeClass = Class.forName("sun.misc.Unsafe");
- Field f = unsafeClass.getDeclaredField("theUnsafe");
- f.setAccessible(true);
- return (sun.misc.Unsafe) f.get(null);
- } catch (Exception e) {
- return null;
- }
- }
- }
-
- public static class JRubyReference8 extends JRubyReference {
- public JRubyReference8(Ruby runtime, RubyClass klass) {
- super(runtime, klass);
- }
-
- @Override
- public IRubyObject get_and_set(ThreadContext context, IRubyObject newValue) {
- // efficient version for Java 8
- return (IRubyObject)UNSAFE.getAndSetObject(this, referenceOffset, newValue);
- }
- }
-}
diff --git a/docs/website/vendor/bundle/ruby/3.0.0/gems/concurrent-ruby-1.2.2/ext/concurrent-ruby/com/concurrent_ruby/ext/JRubyMapBackendLibrary.java b/docs/website/vendor/bundle/ruby/3.0.0/gems/concurrent-ruby-1.2.2/ext/concurrent-ruby/com/concurrent_ruby/ext/JRubyMapBackendLibrary.java
deleted file mode 100644
index a09f916..0000000
--- a/docs/website/vendor/bundle/ruby/3.0.0/gems/concurrent-ruby-1.2.2/ext/concurrent-ruby/com/concurrent_ruby/ext/JRubyMapBackendLibrary.java
+++ /dev/null
@@ -1,248 +0,0 @@
-package com.concurrent_ruby.ext;
-
-import org.jruby.*;
-import org.jruby.anno.JRubyClass;
-import org.jruby.anno.JRubyMethod;
-import com.concurrent_ruby.ext.jsr166e.ConcurrentHashMap;
-import com.concurrent_ruby.ext.jsr166e.ConcurrentHashMapV8;
-import com.concurrent_ruby.ext.jsr166e.nounsafe.*;
-import org.jruby.runtime.Block;
-import org.jruby.runtime.ObjectAllocator;
-import org.jruby.runtime.ThreadContext;
-import org.jruby.runtime.builtin.IRubyObject;
-import org.jruby.runtime.load.Library;
-
-import java.io.IOException;
-import java.util.Map;
-
-import static org.jruby.runtime.Visibility.PRIVATE;
-
-/**
- * Native Java implementation to avoid the JI overhead.
- *
- * @author thedarkone
- */
-public class JRubyMapBackendLibrary implements Library {
- public void load(Ruby runtime, boolean wrap) throws IOException {
-
- RubyModule concurrentMod = runtime.defineModule("Concurrent");
- RubyModule thread_safeMod = concurrentMod.defineModuleUnder("Collection");
- RubyClass jrubyRefClass = thread_safeMod.defineClassUnder("JRubyMapBackend", runtime.getObject(), BACKEND_ALLOCATOR);
- jrubyRefClass.setAllocator(BACKEND_ALLOCATOR);
- jrubyRefClass.defineAnnotatedMethods(JRubyMapBackend.class);
- }
-
- private static final ObjectAllocator BACKEND_ALLOCATOR = new ObjectAllocator() {
- public IRubyObject allocate(Ruby runtime, RubyClass klazz) {
- return new JRubyMapBackend(runtime, klazz);
- }
- };
-
- @JRubyClass(name="JRubyMapBackend", parent="Object")
- public static class JRubyMapBackend extends RubyObject {
- // Defaults used by the CHM
- static final int DEFAULT_INITIAL_CAPACITY = 16;
- static final float DEFAULT_LOAD_FACTOR = 0.75f;
-
- public static final boolean CAN_USE_UNSAFE_CHM = canUseUnsafeCHM();
-
- private ConcurrentHashMap map;
-
- private static ConcurrentHashMap newCHM(int initialCapacity, float loadFactor) {
- if (CAN_USE_UNSAFE_CHM) {
- return new ConcurrentHashMapV8(initialCapacity, loadFactor);
- } else {
- return new com.concurrent_ruby.ext.jsr166e.nounsafe.ConcurrentHashMapV8(initialCapacity, loadFactor);
- }
- }
-
- private static ConcurrentHashMap newCHM() {
- return newCHM(DEFAULT_INITIAL_CAPACITY, DEFAULT_LOAD_FACTOR);
- }
-
- private static boolean canUseUnsafeCHM() {
- try {
- new com.concurrent_ruby.ext.jsr166e.ConcurrentHashMapV8(); // force class load and initialization
- return true;
- } catch (Throwable t) { // ensuring we really do catch everything
- // Doug's Unsafe setup errors always have this "Could not ini.." message
- if (isCausedBySecurityException(t)) {
- return false;
- }
- throw (t instanceof RuntimeException ? (RuntimeException) t : new RuntimeException(t));
- }
- }
-
- private static boolean isCausedBySecurityException(Throwable t) {
- while (t != null) {
- if ((t.getMessage() != null && t.getMessage().contains("Could not initialize intrinsics")) || t instanceof SecurityException) {
- return true;
- }
- t = t.getCause();
- }
- return false;
- }
-
- public JRubyMapBackend(Ruby runtime, RubyClass klass) {
- super(runtime, klass);
- }
-
- @JRubyMethod
- public IRubyObject initialize(ThreadContext context) {
- map = newCHM();
- return context.getRuntime().getNil();
- }
-
- @JRubyMethod
- public IRubyObject initialize(ThreadContext context, IRubyObject options) {
- map = toCHM(context, options);
- return context.getRuntime().getNil();
- }
-
- private ConcurrentHashMap toCHM(ThreadContext context, IRubyObject options) {
- Ruby runtime = context.getRuntime();
- if (!options.isNil() && options.respondsTo("[]")) {
- IRubyObject rInitialCapacity = options.callMethod(context, "[]", runtime.newSymbol("initial_capacity"));
- IRubyObject rLoadFactor = options.callMethod(context, "[]", runtime.newSymbol("load_factor"));
- int initialCapacity = !rInitialCapacity.isNil() ? RubyNumeric.num2int(rInitialCapacity.convertToInteger()) : DEFAULT_INITIAL_CAPACITY;
- float loadFactor = !rLoadFactor.isNil() ? (float)RubyNumeric.num2dbl(rLoadFactor.convertToFloat()) : DEFAULT_LOAD_FACTOR;
- return newCHM(initialCapacity, loadFactor);
- } else {
- return newCHM();
- }
- }
-
- @JRubyMethod(name = "[]", required = 1)
- public IRubyObject op_aref(ThreadContext context, IRubyObject key) {
- IRubyObject value;
- return ((value = map.get(key)) == null) ? context.getRuntime().getNil() : value;
- }
-
- @JRubyMethod(name = {"[]="}, required = 2)
- public IRubyObject op_aset(IRubyObject key, IRubyObject value) {
- map.put(key, value);
- return value;
- }
-
- @JRubyMethod
- public IRubyObject put_if_absent(IRubyObject key, IRubyObject value) {
- IRubyObject result = map.putIfAbsent(key, value);
- return result == null ? getRuntime().getNil() : result;
- }
-
- @JRubyMethod
- public IRubyObject compute_if_absent(final ThreadContext context, final IRubyObject key, final Block block) {
- return map.computeIfAbsent(key, new ConcurrentHashMap.Fun() {
- @Override
- public IRubyObject apply(IRubyObject key) {
- return block.yieldSpecific(context);
- }
- });
- }
-
- @JRubyMethod
- public IRubyObject compute_if_present(final ThreadContext context, final IRubyObject key, final Block block) {
- IRubyObject result = map.computeIfPresent(key, new ConcurrentHashMap.BiFun() {
- @Override
- public IRubyObject apply(IRubyObject key, IRubyObject oldValue) {
- IRubyObject result = block.yieldSpecific(context, oldValue == null ? context.getRuntime().getNil() : oldValue);
- return result.isNil() ? null : result;
- }
- });
- return result == null ? context.getRuntime().getNil() : result;
- }
-
- @JRubyMethod
- public IRubyObject compute(final ThreadContext context, final IRubyObject key, final Block block) {
- IRubyObject result = map.compute(key, new ConcurrentHashMap.BiFun() {
- @Override
- public IRubyObject apply(IRubyObject key, IRubyObject oldValue) {
- IRubyObject result = block.yieldSpecific(context, oldValue == null ? context.getRuntime().getNil() : oldValue);
- return result.isNil() ? null : result;
- }
- });
- return result == null ? context.getRuntime().getNil() : result;
- }
-
- @JRubyMethod
- public IRubyObject merge_pair(final ThreadContext context, final IRubyObject key, final IRubyObject value, final Block block) {
- IRubyObject result = map.merge(key, value, new ConcurrentHashMap.BiFun() {
- @Override
- public IRubyObject apply(IRubyObject oldValue, IRubyObject newValue) {
- IRubyObject result = block.yieldSpecific(context, oldValue == null ? context.getRuntime().getNil() : oldValue);
- return result.isNil() ? null : result;
- }
- });
- return result == null ? context.getRuntime().getNil() : result;
- }
-
- @JRubyMethod
- public RubyBoolean replace_pair(IRubyObject key, IRubyObject oldValue, IRubyObject newValue) {
- return getRuntime().newBoolean(map.replace(key, oldValue, newValue));
- }
-
- @JRubyMethod(name = "key?", required = 1)
- public RubyBoolean has_key_p(IRubyObject key) {
- return map.containsKey(key) ? getRuntime().getTrue() : getRuntime().getFalse();
- }
-
- @JRubyMethod
- public IRubyObject key(IRubyObject value) {
- final IRubyObject key = map.findKey(value);
- return key == null ? getRuntime().getNil() : key;
- }
-
- @JRubyMethod
- public IRubyObject replace_if_exists(IRubyObject key, IRubyObject value) {
- IRubyObject result = map.replace(key, value);
- return result == null ? getRuntime().getNil() : result;
- }
-
- @JRubyMethod
- public IRubyObject get_and_set(IRubyObject key, IRubyObject value) {
- IRubyObject result = map.put(key, value);
- return result == null ? getRuntime().getNil() : result;
- }
-
- @JRubyMethod
- public IRubyObject delete(IRubyObject key) {
- IRubyObject result = map.remove(key);
- return result == null ? getRuntime().getNil() : result;
- }
-
- @JRubyMethod
- public RubyBoolean delete_pair(IRubyObject key, IRubyObject value) {
- return getRuntime().newBoolean(map.remove(key, value));
- }
-
- @JRubyMethod
- public IRubyObject clear() {
- map.clear();
- return this;
- }
-
- @JRubyMethod
- public IRubyObject each_pair(ThreadContext context, Block block) {
- for (Map.Entry entry : map.entrySet()) {
- block.yieldSpecific(context, entry.getKey(), entry.getValue());
- }
- return this;
- }
-
- @JRubyMethod
- public RubyFixnum size(ThreadContext context) {
- return context.getRuntime().newFixnum(map.size());
- }
-
- @JRubyMethod
- public IRubyObject get_or_default(IRubyObject key, IRubyObject defaultValue) {
- return map.getValueOrDefault(key, defaultValue);
- }
-
- @JRubyMethod(visibility = PRIVATE)
- public JRubyMapBackend initialize_copy(ThreadContext context, IRubyObject other) {
- map = newCHM();
- return this;
- }
- }
-}
diff --git a/docs/website/vendor/bundle/ruby/3.0.0/gems/concurrent-ruby-1.2.2/ext/concurrent-ruby/com/concurrent_ruby/ext/JavaAtomicBooleanLibrary.java b/docs/website/vendor/bundle/ruby/3.0.0/gems/concurrent-ruby-1.2.2/ext/concurrent-ruby/com/concurrent_ruby/ext/JavaAtomicBooleanLibrary.java
deleted file mode 100644
index b566076..0000000
--- a/docs/website/vendor/bundle/ruby/3.0.0/gems/concurrent-ruby-1.2.2/ext/concurrent-ruby/com/concurrent_ruby/ext/JavaAtomicBooleanLibrary.java
+++ /dev/null
@@ -1,93 +0,0 @@
-package com.concurrent_ruby.ext;
-
-import org.jruby.Ruby;
-import org.jruby.RubyBoolean;
-import org.jruby.RubyClass;
-import org.jruby.RubyModule;
-import org.jruby.RubyNil;
-import org.jruby.RubyObject;
-import org.jruby.anno.JRubyClass;
-import org.jruby.anno.JRubyMethod;
-import org.jruby.runtime.ObjectAllocator;
-import org.jruby.runtime.ThreadContext;
-import org.jruby.runtime.builtin.IRubyObject;
-import org.jruby.runtime.load.Library;
-
-import java.io.IOException;
-import java.util.concurrent.atomic.AtomicBoolean;
-
-public class JavaAtomicBooleanLibrary implements Library {
-
- public void load(Ruby runtime, boolean wrap) throws IOException {
- RubyModule concurrentMod = runtime.defineModule("Concurrent");
- RubyClass atomicCls = concurrentMod.defineClassUnder("JavaAtomicBoolean", runtime.getObject(), JRUBYREFERENCE_ALLOCATOR);
- atomicCls.defineAnnotatedMethods(JavaAtomicBoolean.class);
- }
-
- private static final ObjectAllocator JRUBYREFERENCE_ALLOCATOR = new ObjectAllocator() {
- public IRubyObject allocate(Ruby runtime, RubyClass klazz) {
- return new JavaAtomicBoolean(runtime, klazz);
- }
- };
-
- @JRubyClass(name = "JavaAtomicBoolean", parent = "Object")
- public static class JavaAtomicBoolean extends RubyObject {
-
- private AtomicBoolean atomicBoolean;
-
- public JavaAtomicBoolean(Ruby runtime, RubyClass metaClass) {
- super(runtime, metaClass);
- }
-
- @JRubyMethod
- public IRubyObject initialize(ThreadContext context, IRubyObject value) {
- atomicBoolean = new AtomicBoolean(convertRubyBooleanToJavaBoolean(value));
- return context.nil;
- }
-
- @JRubyMethod
- public IRubyObject initialize(ThreadContext context) {
- atomicBoolean = new AtomicBoolean();
- return context.nil;
- }
-
- @JRubyMethod(name = "value")
- public IRubyObject value() {
- return getRuntime().newBoolean(atomicBoolean.get());
- }
-
- @JRubyMethod(name = "true?")
- public IRubyObject isAtomicTrue() {
- return getRuntime().newBoolean(atomicBoolean.get());
- }
-
- @JRubyMethod(name = "false?")
- public IRubyObject isAtomicFalse() {
- return getRuntime().newBoolean((atomicBoolean.get() == false));
- }
-
- @JRubyMethod(name = "value=")
- public IRubyObject setAtomic(ThreadContext context, IRubyObject newValue) {
- atomicBoolean.set(convertRubyBooleanToJavaBoolean(newValue));
- return context.nil;
- }
-
- @JRubyMethod(name = "make_true")
- public IRubyObject makeTrue() {
- return getRuntime().newBoolean(atomicBoolean.compareAndSet(false, true));
- }
-
- @JRubyMethod(name = "make_false")
- public IRubyObject makeFalse() {
- return getRuntime().newBoolean(atomicBoolean.compareAndSet(true, false));
- }
-
- private boolean convertRubyBooleanToJavaBoolean(IRubyObject newValue) {
- if (newValue instanceof RubyBoolean.False || newValue instanceof RubyNil) {
- return false;
- } else {
- return true;
- }
- }
- }
-}
diff --git a/docs/website/vendor/bundle/ruby/3.0.0/gems/concurrent-ruby-1.2.2/ext/concurrent-ruby/com/concurrent_ruby/ext/JavaAtomicFixnumLibrary.java b/docs/website/vendor/bundle/ruby/3.0.0/gems/concurrent-ruby-1.2.2/ext/concurrent-ruby/com/concurrent_ruby/ext/JavaAtomicFixnumLibrary.java
deleted file mode 100644
index 672bfc0..0000000
--- a/docs/website/vendor/bundle/ruby/3.0.0/gems/concurrent-ruby-1.2.2/ext/concurrent-ruby/com/concurrent_ruby/ext/JavaAtomicFixnumLibrary.java
+++ /dev/null
@@ -1,113 +0,0 @@
-package com.concurrent_ruby.ext;
-
-import java.io.IOException;
-import java.util.concurrent.atomic.AtomicLong;
-import org.jruby.Ruby;
-import org.jruby.RubyClass;
-import org.jruby.RubyFixnum;
-import org.jruby.RubyModule;
-import org.jruby.RubyObject;
-import org.jruby.anno.JRubyClass;
-import org.jruby.anno.JRubyMethod;
-import org.jruby.runtime.ObjectAllocator;
-import org.jruby.runtime.ThreadContext;
-import org.jruby.runtime.builtin.IRubyObject;
-import org.jruby.runtime.load.Library;
-import org.jruby.runtime.Block;
-
-public class JavaAtomicFixnumLibrary implements Library {
-
- public void load(Ruby runtime, boolean wrap) throws IOException {
- RubyModule concurrentMod = runtime.defineModule("Concurrent");
- RubyClass atomicCls = concurrentMod.defineClassUnder("JavaAtomicFixnum", runtime.getObject(), JRUBYREFERENCE_ALLOCATOR);
-
- atomicCls.defineAnnotatedMethods(JavaAtomicFixnum.class);
- }
-
- private static final ObjectAllocator JRUBYREFERENCE_ALLOCATOR = new ObjectAllocator() {
- public IRubyObject allocate(Ruby runtime, RubyClass klazz) {
- return new JavaAtomicFixnum(runtime, klazz);
- }
- };
-
- @JRubyClass(name = "JavaAtomicFixnum", parent = "Object")
- public static class JavaAtomicFixnum extends RubyObject {
-
- private AtomicLong atomicLong;
-
- public JavaAtomicFixnum(Ruby runtime, RubyClass metaClass) {
- super(runtime, metaClass);
- }
-
- @JRubyMethod
- public IRubyObject initialize(ThreadContext context) {
- this.atomicLong = new AtomicLong(0);
- return context.nil;
- }
-
- @JRubyMethod
- public IRubyObject initialize(ThreadContext context, IRubyObject value) {
- this.atomicLong = new AtomicLong(rubyFixnumToLong(value));
- return context.nil;
- }
-
- @JRubyMethod(name = "value")
- public IRubyObject getValue() {
- return getRuntime().newFixnum(atomicLong.get());
- }
-
- @JRubyMethod(name = "value=")
- public IRubyObject setValue(ThreadContext context, IRubyObject newValue) {
- atomicLong.set(rubyFixnumToLong(newValue));
- return context.nil;
- }
-
- @JRubyMethod(name = {"increment", "up"})
- public IRubyObject increment() {
- return getRuntime().newFixnum(atomicLong.incrementAndGet());
- }
-
- @JRubyMethod(name = {"increment", "up"})
- public IRubyObject increment(IRubyObject value) {
- long delta = rubyFixnumToLong(value);
- return getRuntime().newFixnum(atomicLong.addAndGet(delta));
- }
-
- @JRubyMethod(name = {"decrement", "down"})
- public IRubyObject decrement() {
- return getRuntime().newFixnum(atomicLong.decrementAndGet());
- }
-
- @JRubyMethod(name = {"decrement", "down"})
- public IRubyObject decrement(IRubyObject value) {
- long delta = rubyFixnumToLong(value);
- return getRuntime().newFixnum(atomicLong.addAndGet(-delta));
- }
-
- @JRubyMethod(name = "compare_and_set")
- public IRubyObject compareAndSet(ThreadContext context, IRubyObject expect, IRubyObject update) {
- return getRuntime().newBoolean(atomicLong.compareAndSet(rubyFixnumToLong(expect), rubyFixnumToLong(update)));
- }
-
- @JRubyMethod
- public IRubyObject update(ThreadContext context, Block block) {
- for (;;) {
- long _oldValue = atomicLong.get();
- IRubyObject oldValue = getRuntime().newFixnum(_oldValue);
- IRubyObject newValue = block.yield(context, oldValue);
- if (atomicLong.compareAndSet(_oldValue, rubyFixnumToLong(newValue))) {
- return newValue;
- }
- }
- }
-
- private long rubyFixnumToLong(IRubyObject value) {
- if (value instanceof RubyFixnum) {
- RubyFixnum fixNum = (RubyFixnum) value;
- return fixNum.getLongValue();
- } else {
- throw getRuntime().newArgumentError("value must be a Fixnum");
- }
- }
- }
-}
diff --git a/docs/website/vendor/bundle/ruby/3.0.0/gems/concurrent-ruby-1.2.2/ext/concurrent-ruby/com/concurrent_ruby/ext/JavaSemaphoreLibrary.java b/docs/website/vendor/bundle/ruby/3.0.0/gems/concurrent-ruby-1.2.2/ext/concurrent-ruby/com/concurrent_ruby/ext/JavaSemaphoreLibrary.java
deleted file mode 100644
index d887f25..0000000
--- a/docs/website/vendor/bundle/ruby/3.0.0/gems/concurrent-ruby-1.2.2/ext/concurrent-ruby/com/concurrent_ruby/ext/JavaSemaphoreLibrary.java
+++ /dev/null
@@ -1,189 +0,0 @@
-package com.concurrent_ruby.ext;
-
-import java.io.IOException;
-import java.util.concurrent.Semaphore;
-import org.jruby.Ruby;
-import org.jruby.RubyClass;
-import org.jruby.RubyFixnum;
-import org.jruby.RubyModule;
-import org.jruby.RubyNumeric;
-import org.jruby.RubyObject;
-import org.jruby.anno.JRubyClass;
-import org.jruby.anno.JRubyMethod;
-import org.jruby.runtime.Block;
-import org.jruby.runtime.ObjectAllocator;
-import org.jruby.runtime.ThreadContext;
-import org.jruby.runtime.builtin.IRubyObject;
-
-public class JavaSemaphoreLibrary {
-
- public void load(Ruby runtime, boolean wrap) throws IOException {
- RubyModule concurrentMod = runtime.defineModule("Concurrent");
- RubyClass atomicCls = concurrentMod.defineClassUnder("JavaSemaphore", runtime.getObject(), JRUBYREFERENCE_ALLOCATOR);
-
- atomicCls.defineAnnotatedMethods(JavaSemaphore.class);
- }
-
- private static final ObjectAllocator JRUBYREFERENCE_ALLOCATOR = new ObjectAllocator() {
- public IRubyObject allocate(Ruby runtime, RubyClass klazz) {
- return new JavaSemaphore(runtime, klazz);
- }
- };
-
- @JRubyClass(name = "JavaSemaphore", parent = "Object")
- public static class JavaSemaphore extends RubyObject {
-
- private JRubySemaphore semaphore;
-
- public JavaSemaphore(Ruby runtime, RubyClass metaClass) {
- super(runtime, metaClass);
- }
-
- @JRubyMethod
- public IRubyObject initialize(ThreadContext context, IRubyObject value) {
- this.semaphore = new JRubySemaphore(rubyFixnumInt(value, "count"));
- return context.nil;
- }
-
- @JRubyMethod
- public IRubyObject acquire(ThreadContext context, final Block block) throws InterruptedException {
- return this.acquire(context, 1, block);
- }
-
- @JRubyMethod
- public IRubyObject acquire(ThreadContext context, IRubyObject permits, final Block block) throws InterruptedException {
- return this.acquire(context, rubyFixnumToPositiveInt(permits, "permits"), block);
- }
-
- @JRubyMethod(name = "available_permits")
- public IRubyObject availablePermits(ThreadContext context) {
- return getRuntime().newFixnum(this.semaphore.availablePermits());
- }
-
- @JRubyMethod(name = "drain_permits")
- public IRubyObject drainPermits(ThreadContext context) {
- return getRuntime().newFixnum(this.semaphore.drainPermits());
- }
-
- @JRubyMethod(name = "try_acquire")
- public IRubyObject tryAcquire(ThreadContext context, final Block block) throws InterruptedException {
- int permitsInt = 1;
- boolean acquired = semaphore.tryAcquire(permitsInt);
-
- return triedAcquire(context, permitsInt, acquired, block);
- }
-
- @JRubyMethod(name = "try_acquire")
- public IRubyObject tryAcquire(ThreadContext context, IRubyObject permits, final Block block) throws InterruptedException {
- int permitsInt = rubyFixnumToPositiveInt(permits, "permits");
- boolean acquired = semaphore.tryAcquire(permitsInt);
-
- return triedAcquire(context, permitsInt, acquired, block);
- }
-
- @JRubyMethod(name = "try_acquire")
- public IRubyObject tryAcquire(ThreadContext context, IRubyObject permits, IRubyObject timeout, final Block block) throws InterruptedException {
- int permitsInt = rubyFixnumToPositiveInt(permits, "permits");
- boolean acquired = semaphore.tryAcquire(
- permitsInt,
- rubyNumericToLong(timeout, "timeout"),
- java.util.concurrent.TimeUnit.SECONDS
- );
-
- return triedAcquire(context, permitsInt, acquired, block);
- }
-
- @JRubyMethod
- public IRubyObject release(ThreadContext context) {
- this.semaphore.release(1);
- return getRuntime().newBoolean(true);
- }
-
- @JRubyMethod
- public IRubyObject release(ThreadContext context, IRubyObject permits) {
- this.semaphore.release(rubyFixnumToPositiveInt(permits, "permits"));
- return getRuntime().newBoolean(true);
- }
-
- @JRubyMethod(name = "reduce_permits")
- public IRubyObject reducePermits(ThreadContext context, IRubyObject reduction) throws InterruptedException {
- this.semaphore.publicReducePermits(rubyFixnumToNonNegativeInt(reduction, "reduction"));
- return context.nil;
- }
-
- private IRubyObject acquire(ThreadContext context, int permits, final Block block) throws InterruptedException {
- this.semaphore.acquire(permits);
-
- if (!block.isGiven()) return context.nil;
-
- try {
- return block.yieldSpecific(context);
- } finally {
- this.semaphore.release(permits);
- }
- }
-
- private IRubyObject triedAcquire(ThreadContext context, int permits, boolean acquired, final Block block) {
- if (!block.isGiven()) return getRuntime().newBoolean(acquired);
- if (!acquired) return context.nil;
-
- try {
- return block.yieldSpecific(context);
- } finally {
- this.semaphore.release(permits);
- }
- }
-
- private int rubyFixnumInt(IRubyObject value, String paramName) {
- if (value instanceof RubyFixnum) {
- RubyFixnum fixNum = (RubyFixnum) value;
- return (int) fixNum.getLongValue();
- } else {
- throw getRuntime().newArgumentError(paramName + " must be integer");
- }
- }
-
- private int rubyFixnumToNonNegativeInt(IRubyObject value, String paramName) {
- if (value instanceof RubyFixnum && ((RubyFixnum) value).getLongValue() >= 0) {
- RubyFixnum fixNum = (RubyFixnum) value;
- return (int) fixNum.getLongValue();
- } else {
- throw getRuntime().newArgumentError(paramName + " must be a non-negative integer");
- }
- }
-
- private int rubyFixnumToPositiveInt(IRubyObject value, String paramName) {
- if (value instanceof RubyFixnum && ((RubyFixnum) value).getLongValue() > 0) {
- RubyFixnum fixNum = (RubyFixnum) value;
- return (int) fixNum.getLongValue();
- } else {
- throw getRuntime().newArgumentError(paramName + " must be an integer greater than zero");
- }
- }
-
- private long rubyNumericToLong(IRubyObject value, String paramName) {
- if (value instanceof RubyNumeric && ((RubyNumeric) value).getDoubleValue() > 0) {
- RubyNumeric fixNum = (RubyNumeric) value;
- return fixNum.getLongValue();
- } else {
- throw getRuntime().newArgumentError(paramName + " must be a float greater than zero");
- }
- }
-
- class JRubySemaphore extends Semaphore {
-
- public JRubySemaphore(int permits) {
- super(permits);
- }
-
- public JRubySemaphore(int permits, boolean value) {
- super(permits, value);
- }
-
- public void publicReducePermits(int i) {
- reducePermits(i);
- }
-
- }
- }
-}
diff --git a/docs/website/vendor/bundle/ruby/3.0.0/gems/concurrent-ruby-1.2.2/ext/concurrent-ruby/com/concurrent_ruby/ext/SynchronizationLibrary.java b/docs/website/vendor/bundle/ruby/3.0.0/gems/concurrent-ruby-1.2.2/ext/concurrent-ruby/com/concurrent_ruby/ext/SynchronizationLibrary.java
deleted file mode 100644
index f0c75ee..0000000
--- a/docs/website/vendor/bundle/ruby/3.0.0/gems/concurrent-ruby-1.2.2/ext/concurrent-ruby/com/concurrent_ruby/ext/SynchronizationLibrary.java
+++ /dev/null
@@ -1,292 +0,0 @@
-package com.concurrent_ruby.ext;
-
-import org.jruby.Ruby;
-import org.jruby.RubyBasicObject;
-import org.jruby.RubyClass;
-import org.jruby.RubyModule;
-import org.jruby.RubyObject;
-import org.jruby.RubyThread;
-import org.jruby.anno.JRubyClass;
-import org.jruby.anno.JRubyMethod;
-import org.jruby.runtime.Block;
-import org.jruby.runtime.ObjectAllocator;
-import org.jruby.runtime.ThreadContext;
-import org.jruby.runtime.Visibility;
-import org.jruby.runtime.builtin.IRubyObject;
-import org.jruby.runtime.load.Library;
-import sun.misc.Unsafe;
-
-import java.io.IOException;
-import java.lang.reflect.Field;
-import java.lang.reflect.Method;
-
-public class SynchronizationLibrary implements Library {
-
- private static final Unsafe UNSAFE = loadUnsafe();
- private static final boolean FULL_FENCE = supportsFences();
-
- private static Unsafe loadUnsafe() {
- try {
- Class ncdfe = Class.forName("sun.misc.Unsafe");
- Field f = ncdfe.getDeclaredField("theUnsafe");
- f.setAccessible(true);
- return (Unsafe) f.get((java.lang.Object) null);
- } catch (Exception var2) {
- return null;
- } catch (NoClassDefFoundError var3) {
- return null;
- }
- }
-
- private static boolean supportsFences() {
- if (UNSAFE == null) {
- return false;
- } else {
- try {
- Method m = UNSAFE.getClass().getDeclaredMethod("fullFence", new Class[0]);
- if (m != null) {
- return true;
- }
- } catch (Exception var1) {
- // nothing
- }
-
- return false;
- }
- }
-
- private static final ObjectAllocator OBJECT_ALLOCATOR = new ObjectAllocator() {
- public IRubyObject allocate(Ruby runtime, RubyClass klazz) {
- return new Object(runtime, klazz);
- }
- };
-
- private static final ObjectAllocator ABSTRACT_LOCKABLE_OBJECT_ALLOCATOR = new ObjectAllocator() {
- public IRubyObject allocate(Ruby runtime, RubyClass klazz) {
- return new AbstractLockableObject(runtime, klazz);
- }
- };
-
- private static final ObjectAllocator JRUBY_LOCKABLE_OBJECT_ALLOCATOR = new ObjectAllocator() {
- public IRubyObject allocate(Ruby runtime, RubyClass klazz) {
- return new JRubyLockableObject(runtime, klazz);
- }
- };
-
- public void load(Ruby runtime, boolean wrap) throws IOException {
- RubyModule synchronizationModule = runtime.
- defineModule("Concurrent").
- defineModuleUnder("Synchronization");
-
- RubyModule jrubyAttrVolatileModule = synchronizationModule.defineModuleUnder("JRubyAttrVolatile");
- jrubyAttrVolatileModule.defineAnnotatedMethods(JRubyAttrVolatile.class);
-
- defineClass(runtime, synchronizationModule, "AbstractObject", "Object",
- Object.class, OBJECT_ALLOCATOR);
-
- defineClass(runtime, synchronizationModule, "Object", "AbstractLockableObject",
- AbstractLockableObject.class, ABSTRACT_LOCKABLE_OBJECT_ALLOCATOR);
-
- defineClass(runtime, synchronizationModule, "AbstractLockableObject", "JRubyLockableObject",
- JRubyLockableObject.class, JRUBY_LOCKABLE_OBJECT_ALLOCATOR);
-
- defineClass(runtime, synchronizationModule, "Object", "JRuby",
- JRuby.class, new ObjectAllocator() {
- @Override
- public IRubyObject allocate(Ruby runtime, RubyClass klazz) {
- return new JRuby(runtime, klazz);
- }
- });
- }
-
- private RubyClass defineClass(
- Ruby runtime,
- RubyModule namespace,
- String parentName,
- String name,
- Class javaImplementation,
- ObjectAllocator allocator) {
- final RubyClass parentClass = namespace.getClass(parentName);
-
- if (parentClass == null) {
- System.out.println("not found " + parentName);
- throw runtime.newRuntimeError(namespace.toString() + "::" + parentName + " is missing");
- }
-
- final RubyClass newClass = namespace.defineClassUnder(name, parentClass, allocator);
- newClass.defineAnnotatedMethods(javaImplementation);
- return newClass;
- }
-
- // Facts:
- // - all ivar reads are without any synchronisation of fences see
- // https://github.com/jruby/jruby/blob/master/core/src/main/java/org/jruby/runtime/ivars/VariableAccessor.java#L110-110
- // - writes depend on UnsafeHolder.U, null -> SynchronizedVariableAccessor, !null -> StampedVariableAccessor
- // SynchronizedVariableAccessor wraps with synchronized block, StampedVariableAccessor uses fullFence or
- // volatilePut
- // TODO (pitr 16-Sep-2015): what do we do in Java 9 ?
-
- // module JRubyAttrVolatile
- public static class JRubyAttrVolatile {
-
- // volatile threadContext is used as a memory barrier per the JVM memory model happens-before semantic
- // on volatile fields. any volatile field could have been used but using the thread context is an
- // attempt to avoid code elimination.
- private static volatile int volatileField;
-
- @JRubyMethod(name = "full_memory_barrier", visibility = Visibility.PUBLIC, module = true)
- public static IRubyObject fullMemoryBarrier(ThreadContext context, IRubyObject module) {
- // Prevent reordering of ivar writes with publication of this instance
- if (!FULL_FENCE) {
- // Assuming that following volatile read and write is not eliminated it simulates fullFence.
- // If it's eliminated it'll cause problems only on non-x86 platforms.
- // http://shipilev.net/blog/2014/jmm-pragmatics/#_happens_before_test_your_understanding
- final int volatileRead = volatileField;
- volatileField = context.getLine();
- } else {
- UNSAFE.fullFence();
- }
- return context.nil;
- }
-
- @JRubyMethod(name = "instance_variable_get_volatile", visibility = Visibility.PUBLIC, module = true)
- public static IRubyObject instanceVariableGetVolatile(
- ThreadContext context,
- IRubyObject module,
- IRubyObject self,
- IRubyObject name) {
- // Ensure we ses latest value with loadFence
- if (!FULL_FENCE) {
- // piggybacking on volatile read, simulating loadFence
- final int volatileRead = volatileField;
- return ((RubyBasicObject) self).instance_variable_get(context, name);
- } else {
- UNSAFE.loadFence();
- return ((RubyBasicObject) self).instance_variable_get(context, name);
- }
- }
-
- @JRubyMethod(name = "instance_variable_set_volatile", visibility = Visibility.PUBLIC, module = true)
- public static IRubyObject InstanceVariableSetVolatile(
- ThreadContext context,
- IRubyObject module,
- IRubyObject self,
- IRubyObject name,
- IRubyObject value) {
- // Ensure we make last update visible
- if (!FULL_FENCE) {
- // piggybacking on volatile write, simulating storeFence
- final IRubyObject result = ((RubyBasicObject) self).instance_variable_set(name, value);
- volatileField = context.getLine();
- return result;
- } else {
- // JRuby uses StampedVariableAccessor which calls fullFence
- // so no additional steps needed.
- // See https://github.com/jruby/jruby/blob/master/core/src/main/java/org/jruby/runtime/ivars/StampedVariableAccessor.java#L151-L159
- return ((RubyBasicObject) self).instance_variable_set(name, value);
- }
- }
- }
-
- @JRubyClass(name = "Object", parent = "AbstractObject")
- public static class Object extends RubyObject {
-
- public Object(Ruby runtime, RubyClass metaClass) {
- super(runtime, metaClass);
- }
- }
-
- @JRubyClass(name = "AbstractLockableObject", parent = "Object")
- public static class AbstractLockableObject extends Object {
-
- public AbstractLockableObject(Ruby runtime, RubyClass metaClass) {
- super(runtime, metaClass);
- }
- }
-
- @JRubyClass(name = "JRubyLockableObject", parent = "AbstractLockableObject")
- public static class JRubyLockableObject extends AbstractLockableObject {
-
- public JRubyLockableObject(Ruby runtime, RubyClass metaClass) {
- super(runtime, metaClass);
- }
-
- @JRubyMethod(name = "synchronize", visibility = Visibility.PROTECTED)
- public IRubyObject rubySynchronize(ThreadContext context, Block block) {
- synchronized (this) {
- return block.yield(context, null);
- }
- }
-
- @JRubyMethod(name = "ns_wait", optional = 1, visibility = Visibility.PROTECTED)
- public IRubyObject nsWait(ThreadContext context, IRubyObject[] args) {
- Ruby runtime = context.runtime;
- if (args.length > 1) {
- throw runtime.newArgumentError(args.length, 1);
- }
- Double timeout = null;
- if (args.length > 0 && !args[0].isNil()) {
- timeout = args[0].convertToFloat().getDoubleValue();
- if (timeout < 0) {
- throw runtime.newArgumentError("time interval must be positive");
- }
- }
- if (Thread.interrupted()) {
- throw runtime.newConcurrencyError("thread interrupted");
- }
- boolean success = false;
- try {
- success = context.getThread().wait_timeout(this, timeout);
- } catch (InterruptedException ie) {
- throw runtime.newConcurrencyError(ie.getLocalizedMessage());
- } finally {
- // An interrupt or timeout may have caused us to miss
- // a notify that we consumed, so do another notify in
- // case someone else is available to pick it up.
- if (!success) {
- this.notify();
- }
- }
- return this;
- }
-
- @JRubyMethod(name = "ns_signal", visibility = Visibility.PROTECTED)
- public IRubyObject nsSignal(ThreadContext context) {
- notify();
- return this;
- }
-
- @JRubyMethod(name = "ns_broadcast", visibility = Visibility.PROTECTED)
- public IRubyObject nsBroadcast(ThreadContext context) {
- notifyAll();
- return this;
- }
- }
-
- @JRubyClass(name = "JRuby")
- public static class JRuby extends RubyObject {
- public JRuby(Ruby runtime, RubyClass metaClass) {
- super(runtime, metaClass);
- }
-
- @JRubyMethod(name = "sleep_interruptibly", visibility = Visibility.PUBLIC, module = true)
- public static IRubyObject sleepInterruptibly(final ThreadContext context, IRubyObject receiver, final Block block) {
- try {
- context.getThread().executeBlockingTask(new RubyThread.BlockingTask() {
- @Override
- public void run() throws InterruptedException {
- block.call(context);
- }
-
- @Override
- public void wakeup() {
- context.getThread().getNativeThread().interrupt();
- }
- });
- } catch (InterruptedException e) {
- throw context.runtime.newThreadError("interrupted in Concurrent::Synchronization::JRuby.sleep_interruptibly");
- }
- return context.nil;
- }
- }
-}
diff --git a/docs/website/vendor/bundle/ruby/3.0.0/gems/concurrent-ruby-1.2.2/ext/concurrent-ruby/com/concurrent_ruby/ext/jsr166e/ConcurrentHashMap.java b/docs/website/vendor/bundle/ruby/3.0.0/gems/concurrent-ruby-1.2.2/ext/concurrent-ruby/com/concurrent_ruby/ext/jsr166e/ConcurrentHashMap.java
deleted file mode 100644
index e11e15a..0000000
--- a/docs/website/vendor/bundle/ruby/3.0.0/gems/concurrent-ruby-1.2.2/ext/concurrent-ruby/com/concurrent_ruby/ext/jsr166e/ConcurrentHashMap.java
+++ /dev/null
@@ -1,31 +0,0 @@
-package com.concurrent_ruby.ext.jsr166e;
-
-import java.util.Map;
-import java.util.Set;
-
-public interface ConcurrentHashMap {
- /** Interface describing a function of one argument */
- public interface Fun { T apply(A a); }
- /** Interface describing a function of two arguments */
- public interface BiFun { T apply(A a, B b); }
-
- public V get(K key);
- public V put(K key, V value);
- public V putIfAbsent(K key, V value);
- public V computeIfAbsent(K key, Fun super K, ? extends V> mf);
- public V computeIfPresent(K key, BiFun super K, ? super V, ? extends V> mf);
- public V compute(K key, BiFun super K, ? super V, ? extends V> mf);
- public V merge(K key, V value, BiFun super V, ? super V, ? extends V> mf);
- public boolean replace(K key, V oldVal, V newVal);
- public V replace(K key, V value);
- public boolean containsKey(K key);
- public boolean remove(Object key, Object value);
- public V remove(K key);
- public void clear();
- public Set> entrySet();
- public int size();
- public V getValueOrDefault(Object key, V defaultValue);
-
- public boolean containsValue(V value);
- public K findKey(V value);
-}
diff --git a/docs/website/vendor/bundle/ruby/3.0.0/gems/concurrent-ruby-1.2.2/ext/concurrent-ruby/com/concurrent_ruby/ext/jsr166e/ConcurrentHashMapV8.java b/docs/website/vendor/bundle/ruby/3.0.0/gems/concurrent-ruby-1.2.2/ext/concurrent-ruby/com/concurrent_ruby/ext/jsr166e/ConcurrentHashMapV8.java
deleted file mode 100644
index 86aa4eb..0000000
--- a/docs/website/vendor/bundle/ruby/3.0.0/gems/concurrent-ruby-1.2.2/ext/concurrent-ruby/com/concurrent_ruby/ext/jsr166e/ConcurrentHashMapV8.java
+++ /dev/null
@@ -1,3863 +0,0 @@
-/*
- * Written by Doug Lea with assistance from members of JCP JSR-166
- * Expert Group and released to the public domain, as explained at
- * http://creativecommons.org/publicdomain/zero/1.0/
- */
-
-// This is based on the 1.79 version.
-
-package com.concurrent_ruby.ext.jsr166e;
-
-import org.jruby.RubyClass;
-import org.jruby.RubyNumeric;
-import org.jruby.RubyObject;
-import org.jruby.exceptions.RaiseException;
-import com.concurrent_ruby.ext.jsr166y.ThreadLocalRandom;
-import org.jruby.runtime.ThreadContext;
-import org.jruby.runtime.builtin.IRubyObject;
-
-import java.util.Arrays;
-import java.util.Map;
-import java.util.Set;
-import java.util.Collection;
-import java.util.Hashtable;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.Enumeration;
-import java.util.ConcurrentModificationException;
-import java.util.NoSuchElementException;
-import java.util.concurrent.ConcurrentMap;
-import java.util.concurrent.locks.AbstractQueuedSynchronizer;
-
-import java.io.Serializable;
-
-/**
- * A hash table supporting full concurrency of retrievals and
- * high expected concurrency for updates. This class obeys the
- * same functional specification as {@link java.util.Hashtable}, and
- * includes versions of methods corresponding to each method of
- * {@code Hashtable}. However, even though all operations are
- * thread-safe, retrieval operations do not entail locking,
- * and there is not any support for locking the entire table
- * in a way that prevents all access. This class is fully
- * interoperable with {@code Hashtable} in programs that rely on its
- * thread safety but not on its synchronization details.
- *
- * Retrieval operations (including {@code get}) generally do not
- * block, so may overlap with update operations (including {@code put}
- * and {@code remove}). Retrievals reflect the results of the most
- * recently completed update operations holding upon their
- * onset. (More formally, an update operation for a given key bears a
- * happens-before relation with any (non-null) retrieval for
- * that key reporting the updated value.) For aggregate operations
- * such as {@code putAll} and {@code clear}, concurrent retrievals may
- * reflect insertion or removal of only some entries. Similarly,
- * Iterators and Enumerations return elements reflecting the state of
- * the hash table at some point at or since the creation of the
- * iterator/enumeration. They do not throw {@link
- * ConcurrentModificationException}. However, iterators are designed
- * to be used by only one thread at a time. Bear in mind that the
- * results of aggregate status methods including {@code size}, {@code
- * isEmpty}, and {@code containsValue} are typically useful only when
- * a map is not undergoing concurrent updates in other threads.
- * Otherwise the results of these methods reflect transient states
- * that may be adequate for monitoring or estimation purposes, but not
- * for program control.
- *
- *
The table is dynamically expanded when there are too many
- * collisions (i.e., keys that have distinct hash codes but fall into
- * the same slot modulo the table size), with the expected average
- * effect of maintaining roughly two bins per mapping (corresponding
- * to a 0.75 load factor threshold for resizing). There may be much
- * variance around this average as mappings are added and removed, but
- * overall, this maintains a commonly accepted time/space tradeoff for
- * hash tables. However, resizing this or any other kind of hash
- * table may be a relatively slow operation. When possible, it is a
- * good idea to provide a size estimate as an optional {@code
- * initialCapacity} constructor argument. An additional optional
- * {@code loadFactor} constructor argument provides a further means of
- * customizing initial table capacity by specifying the table density
- * to be used in calculating the amount of space to allocate for the
- * given number of elements. Also, for compatibility with previous
- * versions of this class, constructors may optionally specify an
- * expected {@code concurrencyLevel} as an additional hint for
- * internal sizing. Note that using many keys with exactly the same
- * {@code hashCode()} is a sure way to slow down performance of any
- * hash table.
- *
- *
A {@link Set} projection of a ConcurrentHashMapV8 may be created
- * (using {@link #newKeySet()} or {@link #newKeySet(int)}), or viewed
- * (using {@link #keySet(Object)} when only keys are of interest, and the
- * mapped values are (perhaps transiently) not used or all take the
- * same mapping value.
- *
- *
A ConcurrentHashMapV8 can be used as scalable frequency map (a
- * form of histogram or multiset) by using {@link LongAdder} values
- * and initializing via {@link #computeIfAbsent}. For example, to add
- * a count to a {@code ConcurrentHashMapV8 freqs}, you
- * can use {@code freqs.computeIfAbsent(k -> new
- * LongAdder()).increment();}
- *
- * This class and its views and iterators implement all of the
- * optional methods of the {@link Map} and {@link Iterator}
- * interfaces.
- *
- *
Like {@link Hashtable} but unlike {@link HashMap}, this class
- * does not allow {@code null} to be used as a key or value.
- *
- *
ConcurrentHashMapV8s support parallel operations using the {@link
- * ForkJoinPool#commonPool}. (Tasks that may be used in other contexts
- * are available in class {@link ForkJoinTasks}). These operations are
- * designed to be safely, and often sensibly, applied even with maps
- * that are being concurrently updated by other threads; for example,
- * when computing a snapshot summary of the values in a shared
- * registry. There are three kinds of operation, each with four
- * forms, accepting functions with Keys, Values, Entries, and (Key,
- * Value) arguments and/or return values. (The first three forms are
- * also available via the {@link #keySet()}, {@link #values()} and
- * {@link #entrySet()} views). Because the elements of a
- * ConcurrentHashMapV8 are not ordered in any particular way, and may be
- * processed in different orders in different parallel executions, the
- * correctness of supplied functions should not depend on any
- * ordering, or on any other objects or values that may transiently
- * change while computation is in progress; and except for forEach
- * actions, should ideally be side-effect-free.
- *
- *
- * - forEach: Perform a given action on each element.
- * A variant form applies a given transformation on each element
- * before performing the action.
- *
- * - search: Return the first available non-null result of
- * applying a given function on each element; skipping further
- * search when a result is found.
- *
- * - reduce: Accumulate each element. The supplied reduction
- * function cannot rely on ordering (more formally, it should be
- * both associative and commutative). There are five variants:
- *
- *
- *
- * - Plain reductions. (There is not a form of this method for
- * (key, value) function arguments since there is no corresponding
- * return type.)
- *
- * - Mapped reductions that accumulate the results of a given
- * function applied to each element.
- *
- * - Reductions to scalar doubles, longs, and ints, using a
- * given basis value.
- *
- *
- *
- *
- *
- * The concurrency properties of bulk operations follow
- * from those of ConcurrentHashMapV8: Any non-null result returned
- * from {@code get(key)} and related access methods bears a
- * happens-before relation with the associated insertion or
- * update. The result of any bulk operation reflects the
- * composition of these per-element relations (but is not
- * necessarily atomic with respect to the map as a whole unless it
- * is somehow known to be quiescent). Conversely, because keys
- * and values in the map are never null, null serves as a reliable
- * atomic indicator of the current lack of any result. To
- * maintain this property, null serves as an implicit basis for
- * all non-scalar reduction operations. For the double, long, and
- * int versions, the basis should be one that, when combined with
- * any other value, returns that other value (more formally, it
- * should be the identity element for the reduction). Most common
- * reductions have these properties; for example, computing a sum
- * with basis 0 or a minimum with basis MAX_VALUE.
- *
- *
Search and transformation functions provided as arguments
- * should similarly return null to indicate the lack of any result
- * (in which case it is not used). In the case of mapped
- * reductions, this also enables transformations to serve as
- * filters, returning null (or, in the case of primitive
- * specializations, the identity basis) if the element should not
- * be combined. You can create compound transformations and
- * filterings by composing them yourself under this "null means
- * there is nothing there now" rule before using them in search or
- * reduce operations.
- *
- *
Methods accepting and/or returning Entry arguments maintain
- * key-value associations. They may be useful for example when
- * finding the key for the greatest value. Note that "plain" Entry
- * arguments can be supplied using {@code new
- * AbstractMap.SimpleEntry(k,v)}.
- *
- *
Bulk operations may complete abruptly, throwing an
- * exception encountered in the application of a supplied
- * function. Bear in mind when handling such exceptions that other
- * concurrently executing functions could also have thrown
- * exceptions, or would have done so if the first exception had
- * not occurred.
- *
- *
Parallel speedups for bulk operations compared to sequential
- * processing are common but not guaranteed. Operations involving
- * brief functions on small maps may execute more slowly than
- * sequential loops if the underlying work to parallelize the
- * computation is more expensive than the computation itself.
- * Similarly, parallelization may not lead to much actual parallelism
- * if all processors are busy performing unrelated tasks.
- *
- *
All arguments to all task methods must be non-null.
- *
- *
jsr166e note: During transition, this class
- * uses nested functional interfaces with different names but the
- * same forms as those expected for JDK8.
- *
- *
This class is a member of the
- *
- * Java Collections Framework.
- *
- * @since 1.5
- * @author Doug Lea
- * @param the type of keys maintained by this map
- * @param the type of mapped values
- */
-public class ConcurrentHashMapV8
- implements ConcurrentMap, Serializable, ConcurrentHashMap {
- private static final long serialVersionUID = 7249069246763182397L;
-
- /**
- * A partitionable iterator. A Spliterator can be traversed
- * directly, but can also be partitioned (before traversal) by
- * creating another Spliterator that covers a non-overlapping
- * portion of the elements, and so may be amenable to parallel
- * execution.
- *
- * This interface exports a subset of expected JDK8
- * functionality.
- *
- *
Sample usage: Here is one (of the several) ways to compute
- * the sum of the values held in a map using the ForkJoin
- * framework. As illustrated here, Spliterators are well suited to
- * designs in which a task repeatedly splits off half its work
- * into forked subtasks until small enough to process directly,
- * and then joins these subtasks. Variants of this style can also
- * be used in completion-based designs.
- *
- *
- * {@code ConcurrentHashMapV8 m = ...
- * // split as if have 8 * parallelism, for load balance
- * int n = m.size();
- * int p = aForkJoinPool.getParallelism() * 8;
- * int split = (n < p)? n : p;
- * long sum = aForkJoinPool.invoke(new SumValues(m.valueSpliterator(), split, null));
- * // ...
- * static class SumValues extends RecursiveTask {
- * final Spliterator s;
- * final int split; // split while > 1
- * final SumValues nextJoin; // records forked subtasks to join
- * SumValues(Spliterator s, int depth, SumValues nextJoin) {
- * this.s = s; this.depth = depth; this.nextJoin = nextJoin;
- * }
- * public Long compute() {
- * long sum = 0;
- * SumValues subtasks = null; // fork subtasks
- * for (int s = split >>> 1; s > 0; s >>>= 1)
- * (subtasks = new SumValues(s.split(), s, subtasks)).fork();
- * while (s.hasNext()) // directly process remaining elements
- * sum += s.next();
- * for (SumValues t = subtasks; t != null; t = t.nextJoin)
- * sum += t.join(); // collect subtask results
- * return sum;
- * }
- * }
- * }
- */
- public static interface Spliterator extends Iterator {
- /**
- * Returns a Spliterator covering approximately half of the
- * elements, guaranteed not to overlap with those subsequently
- * returned by this Spliterator. After invoking this method,
- * the current Spliterator will not produce any of
- * the elements of the returned Spliterator, but the two
- * Spliterators together will produce all of the elements that
- * would have been produced by this Spliterator had this
- * method not been called. The exact number of elements
- * produced by the returned Spliterator is not guaranteed, and
- * may be zero (i.e., with {@code hasNext()} reporting {@code
- * false}) if this Spliterator cannot be further split.
- *
- * @return a Spliterator covering approximately half of the
- * elements
- * @throws IllegalStateException if this Spliterator has
- * already commenced traversing elements
- */
- Spliterator split();
- }
-
-
- /*
- * Overview:
- *
- * The primary design goal of this hash table is to maintain
- * concurrent readability (typically method get(), but also
- * iterators and related methods) while minimizing update
- * contention. Secondary goals are to keep space consumption about
- * the same or better than java.util.HashMap, and to support high
- * initial insertion rates on an empty table by many threads.
- *
- * Each key-value mapping is held in a Node. Because Node fields
- * can contain special values, they are defined using plain Object
- * types. Similarly in turn, all internal methods that use them
- * work off Object types. And similarly, so do the internal
- * methods of auxiliary iterator and view classes. All public
- * generic typed methods relay in/out of these internal methods,
- * supplying null-checks and casts as needed. This also allows
- * many of the public methods to be factored into a smaller number
- * of internal methods (although sadly not so for the five
- * variants of put-related operations). The validation-based
- * approach explained below leads to a lot of code sprawl because
- * retry-control precludes factoring into smaller methods.
- *
- * The table is lazily initialized to a power-of-two size upon the
- * first insertion. Each bin in the table normally contains a
- * list of Nodes (most often, the list has only zero or one Node).
- * Table accesses require volatile/atomic reads, writes, and
- * CASes. Because there is no other way to arrange this without
- * adding further indirections, we use intrinsics
- * (sun.misc.Unsafe) operations. The lists of nodes within bins
- * are always accurately traversable under volatile reads, so long
- * as lookups check hash code and non-nullness of value before
- * checking key equality.
- *
- * We use the top two bits of Node hash fields for control
- * purposes -- they are available anyway because of addressing
- * constraints. As explained further below, these top bits are
- * used as follows:
- * 00 - Normal
- * 01 - Locked
- * 11 - Locked and may have a thread waiting for lock
- * 10 - Node is a forwarding node
- *
- * The lower 30 bits of each Node's hash field contain a
- * transformation of the key's hash code, except for forwarding
- * nodes, for which the lower bits are zero (and so always have
- * hash field == MOVED).
- *
- * Insertion (via put or its variants) of the first node in an
- * empty bin is performed by just CASing it to the bin. This is
- * by far the most common case for put operations under most
- * key/hash distributions. Other update operations (insert,
- * delete, and replace) require locks. We do not want to waste
- * the space required to associate a distinct lock object with
- * each bin, so instead use the first node of a bin list itself as
- * a lock. Blocking support for these locks relies on the builtin
- * "synchronized" monitors. However, we also need a tryLock
- * construction, so we overlay these by using bits of the Node
- * hash field for lock control (see above), and so normally use
- * builtin monitors only for blocking and signalling using
- * wait/notifyAll constructions. See Node.tryAwaitLock.
- *
- * Using the first node of a list as a lock does not by itself
- * suffice though: When a node is locked, any update must first
- * validate that it is still the first node after locking it, and
- * retry if not. Because new nodes are always appended to lists,
- * once a node is first in a bin, it remains first until deleted
- * or the bin becomes invalidated (upon resizing). However,
- * operations that only conditionally update may inspect nodes
- * until the point of update. This is a converse of sorts to the
- * lazy locking technique described by Herlihy & Shavit.
- *
- * The main disadvantage of per-bin locks is that other update
- * operations on other nodes in a bin list protected by the same
- * lock can stall, for example when user equals() or mapping
- * functions take a long time. However, statistically, under
- * random hash codes, this is not a common problem. Ideally, the
- * frequency of nodes in bins follows a Poisson distribution
- * (http://en.wikipedia.org/wiki/Poisson_distribution) with a
- * parameter of about 0.5 on average, given the resizing threshold
- * of 0.75, although with a large variance because of resizing
- * granularity. Ignoring variance, the expected occurrences of
- * list size k are (exp(-0.5) * pow(0.5, k) / factorial(k)). The
- * first values are:
- *
- * 0: 0.60653066
- * 1: 0.30326533
- * 2: 0.07581633
- * 3: 0.01263606
- * 4: 0.00157952
- * 5: 0.00015795
- * 6: 0.00001316
- * 7: 0.00000094
- * 8: 0.00000006
- * more: less than 1 in ten million
- *
- * Lock contention probability for two threads accessing distinct
- * elements is roughly 1 / (8 * #elements) under random hashes.
- *
- * Actual hash code distributions encountered in practice
- * sometimes deviate significantly from uniform randomness. This
- * includes the case when N > (1<<30), so some keys MUST collide.
- * Similarly for dumb or hostile usages in which multiple keys are
- * designed to have identical hash codes. Also, although we guard
- * against the worst effects of this (see method spread), sets of
- * hashes may differ only in bits that do not impact their bin
- * index for a given power-of-two mask. So we use a secondary
- * strategy that applies when the number of nodes in a bin exceeds
- * a threshold, and at least one of the keys implements
- * Comparable. These TreeBins use a balanced tree to hold nodes
- * (a specialized form of red-black trees), bounding search time
- * to O(log N). Each search step in a TreeBin is around twice as
- * slow as in a regular list, but given that N cannot exceed
- * (1<<64) (before running out of addresses) this bounds search
- * steps, lock hold times, etc, to reasonable constants (roughly
- * 100 nodes inspected per operation worst case) so long as keys
- * are Comparable (which is very common -- String, Long, etc).
- * TreeBin nodes (TreeNodes) also maintain the same "next"
- * traversal pointers as regular nodes, so can be traversed in
- * iterators in the same way.
- *
- * The table is resized when occupancy exceeds a percentage
- * threshold (nominally, 0.75, but see below). Only a single
- * thread performs the resize (using field "sizeCtl", to arrange
- * exclusion), but the table otherwise remains usable for reads
- * and updates. Resizing proceeds by transferring bins, one by
- * one, from the table to the next table. Because we are using
- * power-of-two expansion, the elements from each bin must either
- * stay at same index, or move with a power of two offset. We
- * eliminate unnecessary node creation by catching cases where old
- * nodes can be reused because their next fields won't change. On
- * average, only about one-sixth of them need cloning when a table
- * doubles. The nodes they replace will be garbage collectable as
- * soon as they are no longer referenced by any reader thread that
- * may be in the midst of concurrently traversing table. Upon
- * transfer, the old table bin contains only a special forwarding
- * node (with hash field "MOVED") that contains the next table as
- * its key. On encountering a forwarding node, access and update
- * operations restart, using the new table.
- *
- * Each bin transfer requires its bin lock. However, unlike other
- * cases, a transfer can skip a bin if it fails to acquire its
- * lock, and revisit it later (unless it is a TreeBin). Method
- * rebuild maintains a buffer of TRANSFER_BUFFER_SIZE bins that
- * have been skipped because of failure to acquire a lock, and
- * blocks only if none are available (i.e., only very rarely).
- * The transfer operation must also ensure that all accessible
- * bins in both the old and new table are usable by any traversal.
- * When there are no lock acquisition failures, this is arranged
- * simply by proceeding from the last bin (table.length - 1) up
- * towards the first. Upon seeing a forwarding node, traversals
- * (see class Iter) arrange to move to the new table
- * without revisiting nodes. However, when any node is skipped
- * during a transfer, all earlier table bins may have become
- * visible, so are initialized with a reverse-forwarding node back
- * to the old table until the new ones are established. (This
- * sometimes requires transiently locking a forwarding node, which
- * is possible under the above encoding.) These more expensive
- * mechanics trigger only when necessary.
- *
- * The traversal scheme also applies to partial traversals of
- * ranges of bins (via an alternate Traverser constructor)
- * to support partitioned aggregate operations. Also, read-only
- * operations give up if ever forwarded to a null table, which
- * provides support for shutdown-style clearing, which is also not
- * currently implemented.
- *
- * Lazy table initialization minimizes footprint until first use,
- * and also avoids resizings when the first operation is from a
- * putAll, constructor with map argument, or deserialization.
- * These cases attempt to override the initial capacity settings,
- * but harmlessly fail to take effect in cases of races.
- *
- * The element count is maintained using a LongAdder, which avoids
- * contention on updates but can encounter cache thrashing if read
- * too frequently during concurrent access. To avoid reading so
- * often, resizing is attempted either when a bin lock is
- * contended, or upon adding to a bin already holding two or more
- * nodes (checked before adding in the xIfAbsent methods, after
- * adding in others). Under uniform hash distributions, the
- * probability of this occurring at threshold is around 13%,
- * meaning that only about 1 in 8 puts check threshold (and after
- * resizing, many fewer do so). But this approximation has high
- * variance for small table sizes, so we check on any collision
- * for sizes <= 64. The bulk putAll operation further reduces
- * contention by only committing count updates upon these size
- * checks.
- *
- * Maintaining API and serialization compatibility with previous
- * versions of this class introduces several oddities. Mainly: We
- * leave untouched but unused constructor arguments refering to
- * concurrencyLevel. We accept a loadFactor constructor argument,
- * but apply it only to initial table capacity (which is the only
- * time that we can guarantee to honor it.) We also declare an
- * unused "Segment" class that is instantiated in minimal form
- * only when serializing.
- */
-
- /* ---------------- Constants -------------- */
-
- /**
- * The largest possible table capacity. This value must be
- * exactly 1<<30 to stay within Java array allocation and indexing
- * bounds for power of two table sizes, and is further required
- * because the top two bits of 32bit hash fields are used for
- * control purposes.
- */
- private static final int MAXIMUM_CAPACITY = 1 << 30;
-
- /**
- * The default initial table capacity. Must be a power of 2
- * (i.e., at least 1) and at most MAXIMUM_CAPACITY.
- */
- private static final int DEFAULT_CAPACITY = 16;
-
- /**
- * The largest possible (non-power of two) array size.
- * Needed by toArray and related methods.
- */
- static final int MAX_ARRAY_SIZE = Integer.MAX_VALUE - 8;
-
- /**
- * The default concurrency level for this table. Unused but
- * defined for compatibility with previous versions of this class.
- */
- private static final int DEFAULT_CONCURRENCY_LEVEL = 16;
-
- /**
- * The load factor for this table. Overrides of this value in
- * constructors affect only the initial table capacity. The
- * actual floating point value isn't normally used -- it is
- * simpler to use expressions such as {@code n - (n >>> 2)} for
- * the associated resizing threshold.
- */
- private static final float LOAD_FACTOR = 0.75f;
-
- /**
- * The buffer size for skipped bins during transfers. The
- * value is arbitrary but should be large enough to avoid
- * most locking stalls during resizes.
- */
- private static final int TRANSFER_BUFFER_SIZE = 32;
-
- /**
- * The bin count threshold for using a tree rather than list for a
- * bin. The value reflects the approximate break-even point for
- * using tree-based operations.
- * Note that Doug's version defaults to 8, but when dealing with
- * Ruby objects it is actually beneficial to avoid TreeNodes
- * as long as possible as it usually means going into Ruby land.
- */
- private static final int TREE_THRESHOLD = 16;
-
- /*
- * Encodings for special uses of Node hash fields. See above for
- * explanation.
- */
- static final int MOVED = 0x80000000; // hash field for forwarding nodes
- static final int LOCKED = 0x40000000; // set/tested only as a bit
- static final int WAITING = 0xc0000000; // both bits set/tested together
- static final int HASH_BITS = 0x3fffffff; // usable bits of normal node hash
-
- /* ---------------- Fields -------------- */
-
- /**
- * The array of bins. Lazily initialized upon first insertion.
- * Size is always a power of two. Accessed directly by iterators.
- */
- transient volatile Node[] table;
-
- /**
- * The counter maintaining number of elements.
- */
- private transient final LongAdder counter;
-
- /**
- * Table initialization and resizing control. When negative, the
- * table is being initialized or resized. Otherwise, when table is
- * null, holds the initial table size to use upon creation, or 0
- * for default. After initialization, holds the next element count
- * value upon which to resize the table.
- */
- private transient volatile int sizeCtl;
-
- // views
- private transient KeySetView keySet;
- private transient ValuesView values;
- private transient EntrySetView entrySet;
-
- /** For serialization compatibility. Null unless serialized; see below */
- private Segment[] segments;
-
- /* ---------------- Table element access -------------- */
-
- /*
- * Volatile access methods are used for table elements as well as
- * elements of in-progress next table while resizing. Uses are
- * null checked by callers, and implicitly bounds-checked, relying
- * on the invariants that tab arrays have non-zero size, and all
- * indices are masked with (tab.length - 1) which is never
- * negative and always less than length. Note that, to be correct
- * wrt arbitrary concurrency errors by users, bounds checks must
- * operate on local variables, which accounts for some odd-looking
- * inline assignments below.
- */
-
- static final Node tabAt(Node[] tab, int i) { // used by Iter
- return (Node)UNSAFE.getObjectVolatile(tab, ((long)i< 1 ? 64 : 1;
-
- /**
- * Spins a while if LOCKED bit set and this node is the first
- * of its bin, and then sets WAITING bits on hash field and
- * blocks (once) if they are still set. It is OK for this
- * method to return even if lock is not available upon exit,
- * which enables these simple single-wait mechanics.
- *
- * The corresponding signalling operation is performed within
- * callers: Upon detecting that WAITING has been set when
- * unlocking lock (via a failed CAS from non-waiting LOCKED
- * state), unlockers acquire the sync lock and perform a
- * notifyAll.
- *
- * The initial sanity check on tab and bounds is not currently
- * necessary in the only usages of this method, but enables
- * use in other future contexts.
- */
- final void tryAwaitLock(Node[] tab, int i) {
- if (tab != null && i >= 0 && i < tab.length) { // sanity check
- int r = ThreadLocalRandom.current().nextInt(); // randomize spins
- int spins = MAX_SPINS, h;
- while (tabAt(tab, i) == this && ((h = hash) & LOCKED) != 0) {
- if (spins >= 0) {
- r ^= r << 1; r ^= r >>> 3; r ^= r << 10; // xorshift
- if (r >= 0 && --spins == 0)
- Thread.yield(); // yield before block
- }
- else if (casHash(h, h | WAITING)) {
- synchronized (this) {
- if (tabAt(tab, i) == this &&
- (hash & WAITING) == WAITING) {
- try {
- wait();
- } catch (InterruptedException ie) {
- Thread.currentThread().interrupt();
- }
- }
- else
- notifyAll(); // possibly won race vs signaller
- }
- break;
- }
- }
- }
- }
-
- // Unsafe mechanics for casHash
- private static final sun.misc.Unsafe UNSAFE;
- private static final long hashOffset;
-
- static {
- try {
- UNSAFE = getUnsafe();
- Class> k = Node.class;
- hashOffset = UNSAFE.objectFieldOffset
- (k.getDeclaredField("hash"));
- } catch (Exception e) {
- throw new Error(e);
- }
- }
- }
-
- /* ---------------- TreeBins -------------- */
-
- /**
- * Nodes for use in TreeBins
- */
- static final class TreeNode extends Node {
- TreeNode parent; // red-black tree links
- TreeNode left;
- TreeNode right;
- TreeNode prev; // needed to unlink next upon deletion
- boolean red;
-
- TreeNode(int hash, Object key, Object val, Node next, TreeNode parent) {
- super(hash, key, val, next);
- this.parent = parent;
- }
- }
-
- /**
- * A specialized form of red-black tree for use in bins
- * whose size exceeds a threshold.
- *
- * TreeBins use a special form of comparison for search and
- * related operations (which is the main reason we cannot use
- * existing collections such as TreeMaps). TreeBins contain
- * Comparable elements, but may contain others, as well as
- * elements that are Comparable but not necessarily Comparable
- * for the same T, so we cannot invoke compareTo among them. To
- * handle this, the tree is ordered primarily by hash value, then
- * by getClass().getName() order, and then by Comparator order
- * among elements of the same class. On lookup at a node, if
- * elements are not comparable or compare as 0, both left and
- * right children may need to be searched in the case of tied hash
- * values. (This corresponds to the full list search that would be
- * necessary if all elements were non-Comparable and had tied
- * hashes.) The red-black balancing code is updated from
- * pre-jdk-collections
- * (http://gee.cs.oswego.edu/dl/classes/collections/RBCell.java)
- * based in turn on Cormen, Leiserson, and Rivest "Introduction to
- * Algorithms" (CLR).
- *
- * TreeBins also maintain a separate locking discipline than
- * regular bins. Because they are forwarded via special MOVED
- * nodes at bin heads (which can never change once established),
- * we cannot use those nodes as locks. Instead, TreeBin
- * extends AbstractQueuedSynchronizer to support a simple form of
- * read-write lock. For update operations and table validation,
- * the exclusive form of lock behaves in the same way as bin-head
- * locks. However, lookups use shared read-lock mechanics to allow
- * multiple readers in the absence of writers. Additionally,
- * these lookups do not ever block: While the lock is not
- * available, they proceed along the slow traversal path (via
- * next-pointers) until the lock becomes available or the list is
- * exhausted, whichever comes first. (These cases are not fast,
- * but maximize aggregate expected throughput.) The AQS mechanics
- * for doing this are straightforward. The lock state is held as
- * AQS getState(). Read counts are negative; the write count (1)
- * is positive. There are no signalling preferences among readers
- * and writers. Since we don't need to export full Lock API, we
- * just override the minimal AQS methods and use them directly.
- */
- static final class TreeBin extends AbstractQueuedSynchronizer {
- private static final long serialVersionUID = 2249069246763182397L;
- transient TreeNode root; // root of tree
- transient TreeNode first; // head of next-pointer list
-
- /* AQS overrides */
- public final boolean isHeldExclusively() { return getState() > 0; }
- public final boolean tryAcquire(int ignore) {
- if (compareAndSetState(0, 1)) {
- setExclusiveOwnerThread(Thread.currentThread());
- return true;
- }
- return false;
- }
- public final boolean tryRelease(int ignore) {
- setExclusiveOwnerThread(null);
- setState(0);
- return true;
- }
- public final int tryAcquireShared(int ignore) {
- for (int c;;) {
- if ((c = getState()) > 0)
- return -1;
- if (compareAndSetState(c, c -1))
- return 1;
- }
- }
- public final boolean tryReleaseShared(int ignore) {
- int c;
- do {} while (!compareAndSetState(c = getState(), c + 1));
- return c == -1;
- }
-
- /** From CLR */
- private void rotateLeft(TreeNode p) {
- if (p != null) {
- TreeNode r = p.right, pp, rl;
- if ((rl = p.right = r.left) != null)
- rl.parent = p;
- if ((pp = r.parent = p.parent) == null)
- root = r;
- else if (pp.left == p)
- pp.left = r;
- else
- pp.right = r;
- r.left = p;
- p.parent = r;
- }
- }
-
- /** From CLR */
- private void rotateRight(TreeNode p) {
- if (p != null) {
- TreeNode l = p.left, pp, lr;
- if ((lr = p.left = l.right) != null)
- lr.parent = p;
- if ((pp = l.parent = p.parent) == null)
- root = l;
- else if (pp.right == p)
- pp.right = l;
- else
- pp.left = l;
- l.right = p;
- p.parent = l;
- }
- }
-
- @SuppressWarnings("unchecked") final TreeNode getTreeNode
- (int h, Object k, TreeNode p) {
- return getTreeNode(h, (RubyObject)k, p);
- }
-
- /**
- * Returns the TreeNode (or null if not found) for the given key
- * starting at given root.
- */
- @SuppressWarnings("unchecked") final TreeNode getTreeNode
- (int h, RubyObject k, TreeNode p) {
- RubyClass c = k.getMetaClass(); boolean kNotComparable = !k.respondsTo("<=>");
- while (p != null) {
- int dir, ph; RubyObject pk; RubyClass pc;
- if ((ph = p.hash) == h) {
- if ((pk = (RubyObject)p.key) == k || k.equals(pk))
- return p;
- if (c != (pc = (RubyClass)pk.getMetaClass()) ||
- kNotComparable ||
- (dir = rubyCompare(k, pk)) == 0) {
- dir = (c == pc) ? 0 : c.getName().compareTo(pc.getName());
- if (dir == 0) { // if still stuck, need to check both sides
- TreeNode r = null, pl, pr;
- // try to recurse on the right
- if ((pr = p.right) != null && h >= pr.hash && (r = getTreeNode(h, k, pr)) != null)
- return r;
- // try to continue iterating on the left side
- else if ((pl = p.left) != null && h <= pl.hash)
- dir = -1;
- else // no matching node found
- return null;
- }
- }
- }
- else
- dir = (h < ph) ? -1 : 1;
- p = (dir > 0) ? p.right : p.left;
- }
- return null;
- }
-
- int rubyCompare(RubyObject l, RubyObject r) {
- ThreadContext context = l.getMetaClass().getRuntime().getCurrentContext();
- IRubyObject result;
- try {
- result = l.callMethod(context, "<=>", r);
- } catch (RaiseException e) {
- // handle objects "lying" about responding to <=>, ie: an Array containing non-comparable keys
- if (context.runtime.getNoMethodError().isInstance(e.getException())) {
- return 0;
- }
- throw e;
- }
-
- return result.isNil() ? 0 : RubyNumeric.num2int(result.convertToInteger());
- }
-
- /**
- * Wrapper for getTreeNode used by CHM.get. Tries to obtain
- * read-lock to call getTreeNode, but during failure to get
- * lock, searches along next links.
- */
- final Object getValue(int h, Object k) {
- Node r = null;
- int c = getState(); // Must read lock state first
- for (Node e = first; e != null; e = e.next) {
- if (c <= 0 && compareAndSetState(c, c - 1)) {
- try {
- r = getTreeNode(h, k, root);
- } finally {
- releaseShared(0);
- }
- break;
- }
- else if ((e.hash & HASH_BITS) == h && k.equals(e.key)) {
- r = e;
- break;
- }
- else
- c = getState();
- }
- return r == null ? null : r.val;
- }
-
- @SuppressWarnings("unchecked") final TreeNode putTreeNode
- (int h, Object k, Object v) {
- return putTreeNode(h, (RubyObject)k, v);
- }
-
- /**
- * Finds or adds a node.
- * @return null if added
- */
- @SuppressWarnings("unchecked") final TreeNode putTreeNode
- (int h, RubyObject k, Object v) {
- RubyClass c = k.getMetaClass();
- boolean kNotComparable = !k.respondsTo("<=>");
- TreeNode pp = root, p = null;
- int dir = 0;
- while (pp != null) { // find existing node or leaf to insert at
- int ph; RubyObject pk; RubyClass pc;
- p = pp;
- if ((ph = p.hash) == h) {
- if ((pk = (RubyObject)p.key) == k || k.equals(pk))
- return p;
- if (c != (pc = pk.getMetaClass()) ||
- kNotComparable ||
- (dir = rubyCompare(k, pk)) == 0) {
- dir = (c == pc) ? 0 : c.getName().compareTo(pc.getName());
- if (dir == 0) { // if still stuck, need to check both sides
- TreeNode r = null, pr;
- // try to recurse on the right
- if ((pr = p.right) != null && h >= pr.hash && (r = getTreeNode(h, k, pr)) != null)
- return r;
- else // continue descending down the left subtree
- dir = -1;
- }
- }
- }
- else
- dir = (h < ph) ? -1 : 1;
- pp = (dir > 0) ? p.right : p.left;
- }
-
- TreeNode f = first;
- TreeNode x = first = new TreeNode(h, (Object)k, v, f, p);
- if (p == null)
- root = x;
- else { // attach and rebalance; adapted from CLR
- TreeNode xp, xpp;
- if (f != null)
- f.prev = x;
- if (dir <= 0)
- p.left = x;
- else
- p.right = x;
- x.red = true;
- while (x != null && (xp = x.parent) != null && xp.red &&
- (xpp = xp.parent) != null) {
- TreeNode xppl = xpp.left;
- if (xp == xppl) {
- TreeNode y = xpp.right;
- if (y != null && y.red) {
- y.red = false;
- xp.red = false;
- xpp.red = true;
- x = xpp;
- }
- else {
- if (x == xp.right) {
- rotateLeft(x = xp);
- xpp = (xp = x.parent) == null ? null : xp.parent;
- }
- if (xp != null) {
- xp.red = false;
- if (xpp != null) {
- xpp.red = true;
- rotateRight(xpp);
- }
- }
- }
- }
- else {
- TreeNode y = xppl;
- if (y != null && y.red) {
- y.red = false;
- xp.red = false;
- xpp.red = true;
- x = xpp;
- }
- else {
- if (x == xp.left) {
- rotateRight(x = xp);
- xpp = (xp = x.parent) == null ? null : xp.parent;
- }
- if (xp != null) {
- xp.red = false;
- if (xpp != null) {
- xpp.red = true;
- rotateLeft(xpp);
- }
- }
- }
- }
- }
- TreeNode r = root;
- if (r != null && r.red)
- r.red = false;
- }
- return null;
- }
-
- /**
- * Removes the given node, that must be present before this
- * call. This is messier than typical red-black deletion code
- * because we cannot swap the contents of an interior node
- * with a leaf successor that is pinned by "next" pointers
- * that are accessible independently of lock. So instead we
- * swap the tree linkages.
- */
- final void deleteTreeNode(TreeNode p) {
- TreeNode next = (TreeNode)p.next; // unlink traversal pointers
- TreeNode pred = p.prev;
- if (pred == null)
- first = next;
- else
- pred.next = next;
- if (next != null)
- next.prev = pred;
- TreeNode replacement;
- TreeNode pl = p.left;
- TreeNode pr = p.right;
- if (pl != null && pr != null) {
- TreeNode s = pr, sl;
- while ((sl = s.left) != null) // find successor
- s = sl;
- boolean c = s.red; s.red = p.red; p.red = c; // swap colors
- TreeNode sr = s.right;
- TreeNode pp = p.parent;
- if (s == pr) { // p was s's direct parent
- p.parent = s;
- s.right = p;
- }
- else {
- TreeNode sp = s.parent;
- if ((p.parent = sp) != null) {
- if (s == sp.left)
- sp.left = p;
- else
- sp.right = p;
- }
- if ((s.right = pr) != null)
- pr.parent = s;
- }
- p.left = null;
- if ((p.right = sr) != null)
- sr.parent = p;
- if ((s.left = pl) != null)
- pl.parent = s;
- if ((s.parent = pp) == null)
- root = s;
- else if (p == pp.left)
- pp.left = s;
- else
- pp.right = s;
- replacement = sr;
- }
- else
- replacement = (pl != null) ? pl : pr;
- TreeNode pp = p.parent;
- if (replacement == null) {
- if (pp == null) {
- root = null;
- return;
- }
- replacement = p;
- }
- else {
- replacement.parent = pp;
- if (pp == null)
- root = replacement;
- else if (p == pp.left)
- pp.left = replacement;
- else
- pp.right = replacement;
- p.left = p.right = p.parent = null;
- }
- if (!p.red) { // rebalance, from CLR
- TreeNode x = replacement;
- while (x != null) {
- TreeNode xp, xpl;
- if (x.red || (xp = x.parent) == null) {
- x.red = false;
- break;
- }
- if (x == (xpl = xp.left)) {
- TreeNode sib = xp.right;
- if (sib != null && sib.red) {
- sib.red = false;
- xp.red = true;
- rotateLeft(xp);
- sib = (xp = x.parent) == null ? null : xp.right;
- }
- if (sib == null)
- x = xp;
- else {
- TreeNode sl = sib.left, sr = sib.right;
- if ((sr == null || !sr.red) &&
- (sl == null || !sl.red)) {
- sib.red = true;
- x = xp;
- }
- else {
- if (sr == null || !sr.red) {
- if (sl != null)
- sl.red = false;
- sib.red = true;
- rotateRight(sib);
- sib = (xp = x.parent) == null ? null : xp.right;
- }
- if (sib != null) {
- sib.red = (xp == null) ? false : xp.red;
- if ((sr = sib.right) != null)
- sr.red = false;
- }
- if (xp != null) {
- xp.red = false;
- rotateLeft(xp);
- }
- x = root;
- }
- }
- }
- else { // symmetric
- TreeNode sib = xpl;
- if (sib != null && sib.red) {
- sib.red = false;
- xp.red = true;
- rotateRight(xp);
- sib = (xp = x.parent) == null ? null : xp.left;
- }
- if (sib == null)
- x = xp;
- else {
- TreeNode sl = sib.left, sr = sib.right;
- if ((sl == null || !sl.red) &&
- (sr == null || !sr.red)) {
- sib.red = true;
- x = xp;
- }
- else {
- if (sl == null || !sl.red) {
- if (sr != null)
- sr.red = false;
- sib.red = true;
- rotateLeft(sib);
- sib = (xp = x.parent) == null ? null : xp.left;
- }
- if (sib != null) {
- sib.red = (xp == null) ? false : xp.red;
- if ((sl = sib.left) != null)
- sl.red = false;
- }
- if (xp != null) {
- xp.red = false;
- rotateRight(xp);
- }
- x = root;
- }
- }
- }
- }
- }
- if (p == replacement && (pp = p.parent) != null) {
- if (p == pp.left) // detach pointers
- pp.left = null;
- else if (p == pp.right)
- pp.right = null;
- p.parent = null;
- }
- }
- }
-
- /* ---------------- Collision reduction methods -------------- */
-
- /**
- * Spreads higher bits to lower, and also forces top 2 bits to 0.
- * Because the table uses power-of-two masking, sets of hashes
- * that vary only in bits above the current mask will always
- * collide. (Among known examples are sets of Float keys holding
- * consecutive whole numbers in small tables.) To counter this,
- * we apply a transform that spreads the impact of higher bits
- * downward. There is a tradeoff between speed, utility, and
- * quality of bit-spreading. Because many common sets of hashes
- * are already reasonably distributed across bits (so don't benefit
- * from spreading), and because we use trees to handle large sets
- * of collisions in bins, we don't need excessively high quality.
- */
- private static final int spread(int h) {
- h ^= (h >>> 18) ^ (h >>> 12);
- return (h ^ (h >>> 10)) & HASH_BITS;
- }
-
- /**
- * Replaces a list bin with a tree bin. Call only when locked.
- * Fails to replace if the given key is non-comparable or table
- * is, or needs, resizing.
- */
- private final void replaceWithTreeBin(Node[] tab, int index, Object key) {
- if ((key instanceof Comparable) &&
- (tab.length >= MAXIMUM_CAPACITY || counter.sum() < (long)sizeCtl)) {
- TreeBin t = new TreeBin();
- for (Node e = tabAt(tab, index); e != null; e = e.next)
- t.putTreeNode(e.hash & HASH_BITS, e.key, e.val);
- setTabAt(tab, index, new Node(MOVED, t, null, null));
- }
- }
-
- /* ---------------- Internal access and update methods -------------- */
-
- /** Implementation for get and containsKey */
- private final Object internalGet(Object k) {
- int h = spread(k.hashCode());
- retry: for (Node[] tab = table; tab != null;) {
- Node e, p; Object ek, ev; int eh; // locals to read fields once
- for (e = tabAt(tab, (tab.length - 1) & h); e != null; e = e.next) {
- if ((eh = e.hash) == MOVED) {
- if ((ek = e.key) instanceof TreeBin) // search TreeBin
- return ((TreeBin)ek).getValue(h, k);
- else { // restart with new table
- tab = (Node[])ek;
- continue retry;
- }
- }
- else if ((eh & HASH_BITS) == h && (ev = e.val) != null &&
- ((ek = e.key) == k || k.equals(ek)))
- return ev;
- }
- break;
- }
- return null;
- }
-
- /**
- * Implementation for the four public remove/replace methods:
- * Replaces node value with v, conditional upon match of cv if
- * non-null. If resulting value is null, delete.
- */
- private final Object internalReplace(Object k, Object v, Object cv) {
- int h = spread(k.hashCode());
- Object oldVal = null;
- for (Node[] tab = table;;) {
- Node f; int i, fh; Object fk;
- if (tab == null ||
- (f = tabAt(tab, i = (tab.length - 1) & h)) == null)
- break;
- else if ((fh = f.hash) == MOVED) {
- if ((fk = f.key) instanceof TreeBin) {
- TreeBin t = (TreeBin)fk;
- boolean validated = false;
- boolean deleted = false;
- t.acquire(0);
- try {
- if (tabAt(tab, i) == f) {
- validated = true;
- TreeNode p = t.getTreeNode(h, k, t.root);
- if (p != null) {
- Object pv = p.val;
- if (cv == null || cv == pv || cv.equals(pv)) {
- oldVal = pv;
- if ((p.val = v) == null) {
- deleted = true;
- t.deleteTreeNode(p);
- }
- }
- }
- }
- } finally {
- t.release(0);
- }
- if (validated) {
- if (deleted)
- counter.add(-1L);
- break;
- }
- }
- else
- tab = (Node[])fk;
- }
- else if ((fh & HASH_BITS) != h && f.next == null) // precheck
- break; // rules out possible existence
- else if ((fh & LOCKED) != 0) {
- checkForResize(); // try resizing if can't get lock
- f.tryAwaitLock(tab, i);
- }
- else if (f.casHash(fh, fh | LOCKED)) {
- boolean validated = false;
- boolean deleted = false;
- try {
- if (tabAt(tab, i) == f) {
- validated = true;
- for (Node e = f, pred = null;;) {
- Object ek, ev;
- if ((e.hash & HASH_BITS) == h &&
- ((ev = e.val) != null) &&
- ((ek = e.key) == k || k.equals(ek))) {
- if (cv == null || cv == ev || cv.equals(ev)) {
- oldVal = ev;
- if ((e.val = v) == null) {
- deleted = true;
- Node en = e.next;
- if (pred != null)
- pred.next = en;
- else
- setTabAt(tab, i, en);
- }
- }
- break;
- }
- pred = e;
- if ((e = e.next) == null)
- break;
- }
- }
- } finally {
- if (!f.casHash(fh | LOCKED, fh)) {
- f.hash = fh;
- synchronized (f) { f.notifyAll(); };
- }
- }
- if (validated) {
- if (deleted)
- counter.add(-1L);
- break;
- }
- }
- }
- return oldVal;
- }
-
- /*
- * Internal versions of the six insertion methods, each a
- * little more complicated than the last. All have
- * the same basic structure as the first (internalPut):
- * 1. If table uninitialized, create
- * 2. If bin empty, try to CAS new node
- * 3. If bin stale, use new table
- * 4. if bin converted to TreeBin, validate and relay to TreeBin methods
- * 5. Lock and validate; if valid, scan and add or update
- *
- * The others interweave other checks and/or alternative actions:
- * * Plain put checks for and performs resize after insertion.
- * * putIfAbsent prescans for mapping without lock (and fails to add
- * if present), which also makes pre-emptive resize checks worthwhile.
- * * computeIfAbsent extends form used in putIfAbsent with additional
- * mechanics to deal with, calls, potential exceptions and null
- * returns from function call.
- * * compute uses the same function-call mechanics, but without
- * the prescans
- * * merge acts as putIfAbsent in the absent case, but invokes the
- * update function if present
- * * putAll attempts to pre-allocate enough table space
- * and more lazily performs count updates and checks.
- *
- * Someday when details settle down a bit more, it might be worth
- * some factoring to reduce sprawl.
- */
-
- /** Implementation for put */
- private final Object internalPut(Object k, Object v) {
- int h = spread(k.hashCode());
- int count = 0;
- for (Node[] tab = table;;) {
- int i; Node f; int fh; Object fk;
- if (tab == null)
- tab = initTable();
- else if ((f = tabAt(tab, i = (tab.length - 1) & h)) == null) {
- if (casTabAt(tab, i, null, new Node(h, k, v, null)))
- break; // no lock when adding to empty bin
- }
- else if ((fh = f.hash) == MOVED) {
- if ((fk = f.key) instanceof TreeBin) {
- TreeBin t = (TreeBin)fk;
- Object oldVal = null;
- t.acquire(0);
- try {
- if (tabAt(tab, i) == f) {
- count = 2;
- TreeNode p = t.putTreeNode(h, k, v);
- if (p != null) {
- oldVal = p.val;
- p.val = v;
- }
- }
- } finally {
- t.release(0);
- }
- if (count != 0) {
- if (oldVal != null)
- return oldVal;
- break;
- }
- }
- else
- tab = (Node[])fk;
- }
- else if ((fh & LOCKED) != 0) {
- checkForResize();
- f.tryAwaitLock(tab, i);
- }
- else if (f.casHash(fh, fh | LOCKED)) {
- Object oldVal = null;
- try { // needed in case equals() throws
- if (tabAt(tab, i) == f) {
- count = 1;
- for (Node e = f;; ++count) {
- Object ek, ev;
- if ((e.hash & HASH_BITS) == h &&
- (ev = e.val) != null &&
- ((ek = e.key) == k || k.equals(ek))) {
- oldVal = ev;
- e.val = v;
- break;
- }
- Node last = e;
- if ((e = e.next) == null) {
- last.next = new Node(h, k, v, null);
- if (count >= TREE_THRESHOLD)
- replaceWithTreeBin(tab, i, k);
- break;
- }
- }
- }
- } finally { // unlock and signal if needed
- if (!f.casHash(fh | LOCKED, fh)) {
- f.hash = fh;
- synchronized (f) { f.notifyAll(); };
- }
- }
- if (count != 0) {
- if (oldVal != null)
- return oldVal;
- if (tab.length <= 64)
- count = 2;
- break;
- }
- }
- }
- counter.add(1L);
- if (count > 1)
- checkForResize();
- return null;
- }
-
- /** Implementation for putIfAbsent */
- private final Object internalPutIfAbsent(Object k, Object v) {
- int h = spread(k.hashCode());
- int count = 0;
- for (Node[] tab = table;;) {
- int i; Node f; int fh; Object fk, fv;
- if (tab == null)
- tab = initTable();
- else if ((f = tabAt(tab, i = (tab.length - 1) & h)) == null) {
- if (casTabAt(tab, i, null, new Node(h, k, v, null)))
- break;
- }
- else if ((fh = f.hash) == MOVED) {
- if ((fk = f.key) instanceof TreeBin) {
- TreeBin t = (TreeBin)fk;
- Object oldVal = null;
- t.acquire(0);
- try {
- if (tabAt(tab, i) == f) {
- count = 2;
- TreeNode p = t.putTreeNode(h, k, v);
- if (p != null)
- oldVal = p.val;
- }
- } finally {
- t.release(0);
- }
- if (count != 0) {
- if (oldVal != null)
- return oldVal;
- break;
- }
- }
- else
- tab = (Node[])fk;
- }
- else if ((fh & HASH_BITS) == h && (fv = f.val) != null &&
- ((fk = f.key) == k || k.equals(fk)))
- return fv;
- else {
- Node g = f.next;
- if (g != null) { // at least 2 nodes -- search and maybe resize
- for (Node e = g;;) {
- Object ek, ev;
- if ((e.hash & HASH_BITS) == h && (ev = e.val) != null &&
- ((ek = e.key) == k || k.equals(ek)))
- return ev;
- if ((e = e.next) == null) {
- checkForResize();
- break;
- }
- }
- }
- if (((fh = f.hash) & LOCKED) != 0) {
- checkForResize();
- f.tryAwaitLock(tab, i);
- }
- else if (tabAt(tab, i) == f && f.casHash(fh, fh | LOCKED)) {
- Object oldVal = null;
- try {
- if (tabAt(tab, i) == f) {
- count = 1;
- for (Node e = f;; ++count) {
- Object ek, ev;
- if ((e.hash & HASH_BITS) == h &&
- (ev = e.val) != null &&
- ((ek = e.key) == k || k.equals(ek))) {
- oldVal = ev;
- break;
- }
- Node last = e;
- if ((e = e.next) == null) {
- last.next = new Node(h, k, v, null);
- if (count >= TREE_THRESHOLD)
- replaceWithTreeBin(tab, i, k);
- break;
- }
- }
- }
- } finally {
- if (!f.casHash(fh | LOCKED, fh)) {
- f.hash = fh;
- synchronized (f) { f.notifyAll(); };
- }
- }
- if (count != 0) {
- if (oldVal != null)
- return oldVal;
- if (tab.length <= 64)
- count = 2;
- break;
- }
- }
- }
- }
- counter.add(1L);
- if (count > 1)
- checkForResize();
- return null;
- }
-
- /** Implementation for computeIfAbsent */
- private final Object internalComputeIfAbsent(K k,
- Fun super K, ?> mf) {
- int h = spread(k.hashCode());
- Object val = null;
- int count = 0;
- for (Node[] tab = table;;) {
- Node f; int i, fh; Object fk, fv;
- if (tab == null)
- tab = initTable();
- else if ((f = tabAt(tab, i = (tab.length - 1) & h)) == null) {
- Node node = new Node(fh = h | LOCKED, k, null, null);
- if (casTabAt(tab, i, null, node)) {
- count = 1;
- try {
- if ((val = mf.apply(k)) != null)
- node.val = val;
- } finally {
- if (val == null)
- setTabAt(tab, i, null);
- if (!node.casHash(fh, h)) {
- node.hash = h;
- synchronized (node) { node.notifyAll(); };
- }
- }
- }
- if (count != 0)
- break;
- }
- else if ((fh = f.hash) == MOVED) {
- if ((fk = f.key) instanceof TreeBin) {
- TreeBin t = (TreeBin)fk;
- boolean added = false;
- t.acquire(0);
- try {
- if (tabAt(tab, i) == f) {
- count = 1;
- TreeNode p = t.getTreeNode(h, k, t.root);
- if (p != null)
- val = p.val;
- else if ((val = mf.apply(k)) != null) {
- added = true;
- count = 2;
- t.putTreeNode(h, k, val);
- }
- }
- } finally {
- t.release(0);
- }
- if (count != 0) {
- if (!added)
- return val;
- break;
- }
- }
- else
- tab = (Node[])fk;
- }
- else if ((fh & HASH_BITS) == h && (fv = f.val) != null &&
- ((fk = f.key) == k || k.equals(fk)))
- return fv;
- else {
- Node g = f.next;
- if (g != null) {
- for (Node e = g;;) {
- Object ek, ev;
- if ((e.hash & HASH_BITS) == h && (ev = e.val) != null &&
- ((ek = e.key) == k || k.equals(ek)))
- return ev;
- if ((e = e.next) == null) {
- checkForResize();
- break;
- }
- }
- }
- if (((fh = f.hash) & LOCKED) != 0) {
- checkForResize();
- f.tryAwaitLock(tab, i);
- }
- else if (tabAt(tab, i) == f && f.casHash(fh, fh | LOCKED)) {
- boolean added = false;
- try {
- if (tabAt(tab, i) == f) {
- count = 1;
- for (Node e = f;; ++count) {
- Object ek, ev;
- if ((e.hash & HASH_BITS) == h &&
- (ev = e.val) != null &&
- ((ek = e.key) == k || k.equals(ek))) {
- val = ev;
- break;
- }
- Node last = e;
- if ((e = e.next) == null) {
- if ((val = mf.apply(k)) != null) {
- added = true;
- last.next = new Node(h, k, val, null);
- if (count >= TREE_THRESHOLD)
- replaceWithTreeBin(tab, i, k);
- }
- break;
- }
- }
- }
- } finally {
- if (!f.casHash(fh | LOCKED, fh)) {
- f.hash = fh;
- synchronized (f) { f.notifyAll(); };
- }
- }
- if (count != 0) {
- if (!added)
- return val;
- if (tab.length <= 64)
- count = 2;
- break;
- }
- }
- }
- }
- if (val != null) {
- counter.add(1L);
- if (count > 1)
- checkForResize();
- }
- return val;
- }
-
- /** Implementation for compute */
- @SuppressWarnings("unchecked") private final Object internalCompute
- (K k, boolean onlyIfPresent, BiFun super K, ? super V, ? extends V> mf) {
- int h = spread(k.hashCode());
- Object val = null;
- int delta = 0;
- int count = 0;
- for (Node[] tab = table;;) {
- Node f; int i, fh; Object fk;
- if (tab == null)
- tab = initTable();
- else if ((f = tabAt(tab, i = (tab.length - 1) & h)) == null) {
- if (onlyIfPresent)
- break;
- Node node = new Node(fh = h | LOCKED, k, null, null);
- if (casTabAt(tab, i, null, node)) {
- try {
- count = 1;
- if ((val = mf.apply(k, null)) != null) {
- node.val = val;
- delta = 1;
- }
- } finally {
- if (delta == 0)
- setTabAt(tab, i, null);
- if (!node.casHash(fh, h)) {
- node.hash = h;
- synchronized (node) { node.notifyAll(); };
- }
- }
- }
- if (count != 0)
- break;
- }
- else if ((fh = f.hash) == MOVED) {
- if ((fk = f.key) instanceof TreeBin) {
- TreeBin t = (TreeBin)fk;
- t.acquire(0);
- try {
- if (tabAt(tab, i) == f) {
- count = 1;
- TreeNode p = t.getTreeNode(h, k, t.root);
- Object pv;
- if (p == null) {
- if (onlyIfPresent)
- break;
- pv = null;
- } else
- pv = p.val;
- if ((val = mf.apply(k, (V)pv)) != null) {
- if (p != null)
- p.val = val;
- else {
- count = 2;
- delta = 1;
- t.putTreeNode(h, k, val);
- }
- }
- else if (p != null) {
- delta = -1;
- t.deleteTreeNode(p);
- }
- }
- } finally {
- t.release(0);
- }
- if (count != 0)
- break;
- }
- else
- tab = (Node[])fk;
- }
- else if ((fh & LOCKED) != 0) {
- checkForResize();
- f.tryAwaitLock(tab, i);
- }
- else if (f.casHash(fh, fh | LOCKED)) {
- try {
- if (tabAt(tab, i) == f) {
- count = 1;
- for (Node e = f, pred = null;; ++count) {
- Object ek, ev;
- if ((e.hash & HASH_BITS) == h &&
- (ev = e.val) != null &&
- ((ek = e.key) == k || k.equals(ek))) {
- val = mf.apply(k, (V)ev);
- if (val != null)
- e.val = val;
- else {
- delta = -1;
- Node en = e.next;
- if (pred != null)
- pred.next = en;
- else
- setTabAt(tab, i, en);
- }
- break;
- }
- pred = e;
- if ((e = e.next) == null) {
- if (!onlyIfPresent && (val = mf.apply(k, null)) != null) {
- pred.next = new Node(h, k, val, null);
- delta = 1;
- if (count >= TREE_THRESHOLD)
- replaceWithTreeBin(tab, i, k);
- }
- break;
- }
- }
- }
- } finally {
- if (!f.casHash(fh | LOCKED, fh)) {
- f.hash = fh;
- synchronized (f) { f.notifyAll(); };
- }
- }
- if (count != 0) {
- if (tab.length <= 64)
- count = 2;
- break;
- }
- }
- }
- if (delta != 0) {
- counter.add((long)delta);
- if (count > 1)
- checkForResize();
- }
- return val;
- }
-
- /** Implementation for merge */
- @SuppressWarnings("unchecked") private final Object internalMerge
- (K k, V v, BiFun super V, ? super V, ? extends V> mf) {
- int h = spread(k.hashCode());
- Object val = null;
- int delta = 0;
- int count = 0;
- for (Node[] tab = table;;) {
- int i; Node f; int fh; Object fk, fv;
- if (tab == null)
- tab = initTable();
- else if ((f = tabAt(tab, i = (tab.length - 1) & h)) == null) {
- if (casTabAt(tab, i, null, new Node(h, k, v, null))) {
- delta = 1;
- val = v;
- break;
- }
- }
- else if ((fh = f.hash) == MOVED) {
- if ((fk = f.key) instanceof TreeBin) {
- TreeBin t = (TreeBin)fk;
- t.acquire(0);
- try {
- if (tabAt(tab, i) == f) {
- count = 1;
- TreeNode p = t.getTreeNode(h, k, t.root);
- val = (p == null) ? v : mf.apply((V)p.val, v);
- if (val != null) {
- if (p != null)
- p.val = val;
- else {
- count = 2;
- delta = 1;
- t.putTreeNode(h, k, val);
- }
- }
- else if (p != null) {
- delta = -1;
- t.deleteTreeNode(p);
- }
- }
- } finally {
- t.release(0);
- }
- if (count != 0)
- break;
- }
- else
- tab = (Node[])fk;
- }
- else if ((fh & LOCKED) != 0) {
- checkForResize();
- f.tryAwaitLock(tab, i);
- }
- else if (f.casHash(fh, fh | LOCKED)) {
- try {
- if (tabAt(tab, i) == f) {
- count = 1;
- for (Node e = f, pred = null;; ++count) {
- Object ek, ev;
- if ((e.hash & HASH_BITS) == h &&
- (ev = e.val) != null &&
- ((ek = e.key) == k || k.equals(ek))) {
- val = mf.apply((V)ev, v);
- if (val != null)
- e.val = val;
- else {
- delta = -1;
- Node en = e.next;
- if (pred != null)
- pred.next = en;
- else
- setTabAt(tab, i, en);
- }
- break;
- }
- pred = e;
- if ((e = e.next) == null) {
- val = v;
- pred.next = new Node(h, k, val, null);
- delta = 1;
- if (count >= TREE_THRESHOLD)
- replaceWithTreeBin(tab, i, k);
- break;
- }
- }
- }
- } finally {
- if (!f.casHash(fh | LOCKED, fh)) {
- f.hash = fh;
- synchronized (f) { f.notifyAll(); };
- }
- }
- if (count != 0) {
- if (tab.length <= 64)
- count = 2;
- break;
- }
- }
- }
- if (delta != 0) {
- counter.add((long)delta);
- if (count > 1)
- checkForResize();
- }
- return val;
- }
-
- /** Implementation for putAll */
- private final void internalPutAll(Map, ?> m) {
- tryPresize(m.size());
- long delta = 0L; // number of uncommitted additions
- boolean npe = false; // to throw exception on exit for nulls
- try { // to clean up counts on other exceptions
- for (Map.Entry, ?> entry : m.entrySet()) {
- Object k, v;
- if (entry == null || (k = entry.getKey()) == null ||
- (v = entry.getValue()) == null) {
- npe = true;
- break;
- }
- int h = spread(k.hashCode());
- for (Node[] tab = table;;) {
- int i; Node f; int fh; Object fk;
- if (tab == null)
- tab = initTable();
- else if ((f = tabAt(tab, i = (tab.length - 1) & h)) == null){
- if (casTabAt(tab, i, null, new Node(h, k, v, null))) {
- ++delta;
- break;
- }
- }
- else if ((fh = f.hash) == MOVED) {
- if ((fk = f.key) instanceof TreeBin) {
- TreeBin t = (TreeBin)fk;
- boolean validated = false;
- t.acquire(0);
- try {
- if (tabAt(tab, i) == f) {
- validated = true;
- TreeNode p = t.getTreeNode(h, k, t.root);
- if (p != null)
- p.val = v;
- else {
- t.putTreeNode(h, k, v);
- ++delta;
- }
- }
- } finally {
- t.release(0);
- }
- if (validated)
- break;
- }
- else
- tab = (Node[])fk;
- }
- else if ((fh & LOCKED) != 0) {
- counter.add(delta);
- delta = 0L;
- checkForResize();
- f.tryAwaitLock(tab, i);
- }
- else if (f.casHash(fh, fh | LOCKED)) {
- int count = 0;
- try {
- if (tabAt(tab, i) == f) {
- count = 1;
- for (Node e = f;; ++count) {
- Object ek, ev;
- if ((e.hash & HASH_BITS) == h &&
- (ev = e.val) != null &&
- ((ek = e.key) == k || k.equals(ek))) {
- e.val = v;
- break;
- }
- Node last = e;
- if ((e = e.next) == null) {
- ++delta;
- last.next = new Node(h, k, v, null);
- if (count >= TREE_THRESHOLD)
- replaceWithTreeBin(tab, i, k);
- break;
- }
- }
- }
- } finally {
- if (!f.casHash(fh | LOCKED, fh)) {
- f.hash = fh;
- synchronized (f) { f.notifyAll(); };
- }
- }
- if (count != 0) {
- if (count > 1) {
- counter.add(delta);
- delta = 0L;
- checkForResize();
- }
- break;
- }
- }
- }
- }
- } finally {
- if (delta != 0)
- counter.add(delta);
- }
- if (npe)
- throw new NullPointerException();
- }
-
- /* ---------------- Table Initialization and Resizing -------------- */
-
- /**
- * Returns a power of two table size for the given desired capacity.
- * See Hackers Delight, sec 3.2
- */
- private static final int tableSizeFor(int c) {
- int n = c - 1;
- n |= n >>> 1;
- n |= n >>> 2;
- n |= n >>> 4;
- n |= n >>> 8;
- n |= n >>> 16;
- return (n < 0) ? 1 : (n >= MAXIMUM_CAPACITY) ? MAXIMUM_CAPACITY : n + 1;
- }
-
- /**
- * Initializes table, using the size recorded in sizeCtl.
- */
- private final Node[] initTable() {
- Node[] tab; int sc;
- while ((tab = table) == null) {
- if ((sc = sizeCtl) < 0)
- Thread.yield(); // lost initialization race; just spin
- else if (UNSAFE.compareAndSwapInt(this, sizeCtlOffset, sc, -1)) {
- try {
- if ((tab = table) == null) {
- int n = (sc > 0) ? sc : DEFAULT_CAPACITY;
- tab = table = new Node[n];
- sc = n - (n >>> 2);
- }
- } finally {
- sizeCtl = sc;
- }
- break;
- }
- }
- return tab;
- }
-
- /**
- * If table is too small and not already resizing, creates next
- * table and transfers bins. Rechecks occupancy after a transfer
- * to see if another resize is already needed because resizings
- * are lagging additions.
- */
- private final void checkForResize() {
- Node[] tab; int n, sc;
- while ((tab = table) != null &&
- (n = tab.length) < MAXIMUM_CAPACITY &&
- (sc = sizeCtl) >= 0 && counter.sum() >= (long)sc &&
- UNSAFE.compareAndSwapInt(this, sizeCtlOffset, sc, -1)) {
- try {
- if (tab == table) {
- table = rebuild(tab);
- sc = (n << 1) - (n >>> 1);
- }
- } finally {
- sizeCtl = sc;
- }
- }
- }
-
- /**
- * Tries to presize table to accommodate the given number of elements.
- *
- * @param size number of elements (doesn't need to be perfectly accurate)
- */
- private final void tryPresize(int size) {
- int c = (size >= (MAXIMUM_CAPACITY >>> 1)) ? MAXIMUM_CAPACITY :
- tableSizeFor(size + (size >>> 1) + 1);
- int sc;
- while ((sc = sizeCtl) >= 0) {
- Node[] tab = table; int n;
- if (tab == null || (n = tab.length) == 0) {
- n = (sc > c) ? sc : c;
- if (UNSAFE.compareAndSwapInt(this, sizeCtlOffset, sc, -1)) {
- try {
- if (table == tab) {
- table = new Node[n];
- sc = n - (n >>> 2);
- }
- } finally {
- sizeCtl = sc;
- }
- }
- }
- else if (c <= sc || n >= MAXIMUM_CAPACITY)
- break;
- else if (UNSAFE.compareAndSwapInt(this, sizeCtlOffset, sc, -1)) {
- try {
- if (table == tab) {
- table = rebuild(tab);
- sc = (n << 1) - (n >>> 1);
- }
- } finally {
- sizeCtl = sc;
- }
- }
- }
- }
-
- /*
- * Moves and/or copies the nodes in each bin to new table. See
- * above for explanation.
- *
- * @return the new table
- */
- private static final Node[] rebuild(Node[] tab) {
- int n = tab.length;
- Node[] nextTab = new Node[n << 1];
- Node fwd = new Node(MOVED, nextTab, null, null);
- int[] buffer = null; // holds bins to revisit; null until needed
- Node rev = null; // reverse forwarder; null until needed
- int nbuffered = 0; // the number of bins in buffer list
- int bufferIndex = 0; // buffer index of current buffered bin
- int bin = n - 1; // current non-buffered bin or -1 if none
-
- for (int i = bin;;) { // start upwards sweep
- int fh; Node f;
- if ((f = tabAt(tab, i)) == null) {
- if (bin >= 0) { // Unbuffered; no lock needed (or available)
- if (!casTabAt(tab, i, f, fwd))
- continue;
- }
- else { // transiently use a locked forwarding node
- Node g = new Node(MOVED|LOCKED, nextTab, null, null);
- if (!casTabAt(tab, i, f, g))
- continue;
- setTabAt(nextTab, i, null);
- setTabAt(nextTab, i + n, null);
- setTabAt(tab, i, fwd);
- if (!g.casHash(MOVED|LOCKED, MOVED)) {
- g.hash = MOVED;
- synchronized (g) { g.notifyAll(); }
- }
- }
- }
- else if ((fh = f.hash) == MOVED) {
- Object fk = f.key;
- if (fk instanceof TreeBin) {
- TreeBin t = (TreeBin)fk;
- boolean validated = false;
- t.acquire(0);
- try {
- if (tabAt(tab, i) == f) {
- validated = true;
- splitTreeBin(nextTab, i, t);
- setTabAt(tab, i, fwd);
- }
- } finally {
- t.release(0);
- }
- if (!validated)
- continue;
- }
- }
- else if ((fh & LOCKED) == 0 && f.casHash(fh, fh|LOCKED)) {
- boolean validated = false;
- try { // split to lo and hi lists; copying as needed
- if (tabAt(tab, i) == f) {
- validated = true;
- splitBin(nextTab, i, f);
- setTabAt(tab, i, fwd);
- }
- } finally {
- if (!f.casHash(fh | LOCKED, fh)) {
- f.hash = fh;
- synchronized (f) { f.notifyAll(); };
- }
- }
- if (!validated)
- continue;
- }
- else {
- if (buffer == null) // initialize buffer for revisits
- buffer = new int[TRANSFER_BUFFER_SIZE];
- if (bin < 0 && bufferIndex > 0) {
- int j = buffer[--bufferIndex];
- buffer[bufferIndex] = i;
- i = j; // swap with another bin
- continue;
- }
- if (bin < 0 || nbuffered >= TRANSFER_BUFFER_SIZE) {
- f.tryAwaitLock(tab, i);
- continue; // no other options -- block
- }
- if (rev == null) // initialize reverse-forwarder
- rev = new Node(MOVED, tab, null, null);
- if (tabAt(tab, i) != f || (f.hash & LOCKED) == 0)
- continue; // recheck before adding to list
- buffer[nbuffered++] = i;
- setTabAt(nextTab, i, rev); // install place-holders
- setTabAt(nextTab, i + n, rev);
- }
-
- if (bin > 0)
- i = --bin;
- else if (buffer != null && nbuffered > 0) {
- bin = -1;
- i = buffer[bufferIndex = --nbuffered];
- }
- else
- return nextTab;
- }
- }
-
- /**
- * Splits a normal bin with list headed by e into lo and hi parts;
- * installs in given table.
- */
- private static void splitBin(Node[] nextTab, int i, Node e) {
- int bit = nextTab.length >>> 1; // bit to split on
- int runBit = e.hash & bit;
- Node lastRun = e, lo = null, hi = null;
- for (Node p = e.next; p != null; p = p.next) {
- int b = p.hash & bit;
- if (b != runBit) {
- runBit = b;
- lastRun = p;
- }
- }
- if (runBit == 0)
- lo = lastRun;
- else
- hi = lastRun;
- for (Node p = e; p != lastRun; p = p.next) {
- int ph = p.hash & HASH_BITS;
- Object pk = p.key, pv = p.val;
- if ((ph & bit) == 0)
- lo = new Node(ph, pk, pv, lo);
- else
- hi = new Node(ph, pk, pv, hi);
- }
- setTabAt(nextTab, i, lo);
- setTabAt(nextTab, i + bit, hi);
- }
-
- /**
- * Splits a tree bin into lo and hi parts; installs in given table.
- */
- private static void splitTreeBin(Node[] nextTab, int i, TreeBin t) {
- int bit = nextTab.length >>> 1;
- TreeBin lt = new TreeBin();
- TreeBin ht = new TreeBin();
- int lc = 0, hc = 0;
- for (Node e = t.first; e != null; e = e.next) {
- int h = e.hash & HASH_BITS;
- Object k = e.key, v = e.val;
- if ((h & bit) == 0) {
- ++lc;
- lt.putTreeNode(h, k, v);
- }
- else {
- ++hc;
- ht.putTreeNode(h, k, v);
- }
- }
- Node ln, hn; // throw away trees if too small
- if (lc <= (TREE_THRESHOLD >>> 1)) {
- ln = null;
- for (Node p = lt.first; p != null; p = p.next)
- ln = new Node(p.hash, p.key, p.val, ln);
- }
- else
- ln = new Node(MOVED, lt, null, null);
- setTabAt(nextTab, i, ln);
- if (hc <= (TREE_THRESHOLD >>> 1)) {
- hn = null;
- for (Node p = ht.first; p != null; p = p.next)
- hn = new Node(p.hash, p.key, p.val, hn);
- }
- else
- hn = new Node(MOVED, ht, null, null);
- setTabAt(nextTab, i + bit, hn);
- }
-
- /**
- * Implementation for clear. Steps through each bin, removing all
- * nodes.
- */
- private final void internalClear() {
- long delta = 0L; // negative number of deletions
- int i = 0;
- Node[] tab = table;
- while (tab != null && i < tab.length) {
- int fh; Object fk;
- Node f = tabAt(tab, i);
- if (f == null)
- ++i;
- else if ((fh = f.hash) == MOVED) {
- if ((fk = f.key) instanceof TreeBin) {
- TreeBin t = (TreeBin)fk;
- t.acquire(0);
- try {
- if (tabAt(tab, i) == f) {
- for (Node p = t.first; p != null; p = p.next) {
- if (p.val != null) { // (currently always true)
- p.val = null;
- --delta;
- }
- }
- t.first = null;
- t.root = null;
- ++i;
- }
- } finally {
- t.release(0);
- }
- }
- else
- tab = (Node[])fk;
- }
- else if ((fh & LOCKED) != 0) {
- counter.add(delta); // opportunistically update count
- delta = 0L;
- f.tryAwaitLock(tab, i);
- }
- else if (f.casHash(fh, fh | LOCKED)) {
- try {
- if (tabAt(tab, i) == f) {
- for (Node e = f; e != null; e = e.next) {
- if (e.val != null) { // (currently always true)
- e.val = null;
- --delta;
- }
- }
- setTabAt(tab, i, null);
- ++i;
- }
- } finally {
- if (!f.casHash(fh | LOCKED, fh)) {
- f.hash = fh;
- synchronized (f) { f.notifyAll(); };
- }
- }
- }
- }
- if (delta != 0)
- counter.add(delta);
- }
-
- /* ----------------Table Traversal -------------- */
-
- /**
- * Encapsulates traversal for methods such as containsValue; also
- * serves as a base class for other iterators and bulk tasks.
- *
- * At each step, the iterator snapshots the key ("nextKey") and
- * value ("nextVal") of a valid node (i.e., one that, at point of
- * snapshot, has a non-null user value). Because val fields can
- * change (including to null, indicating deletion), field nextVal
- * might not be accurate at point of use, but still maintains the
- * weak consistency property of holding a value that was once
- * valid. To support iterator.remove, the nextKey field is not
- * updated (nulled out) when the iterator cannot advance.
- *
- * Internal traversals directly access these fields, as in:
- * {@code while (it.advance() != null) { process(it.nextKey); }}
- *
- * Exported iterators must track whether the iterator has advanced
- * (in hasNext vs next) (by setting/checking/nulling field
- * nextVal), and then extract key, value, or key-value pairs as
- * return values of next().
- *
- * The iterator visits once each still-valid node that was
- * reachable upon iterator construction. It might miss some that
- * were added to a bin after the bin was visited, which is OK wrt
- * consistency guarantees. Maintaining this property in the face
- * of possible ongoing resizes requires a fair amount of
- * bookkeeping state that is difficult to optimize away amidst
- * volatile accesses. Even so, traversal maintains reasonable
- * throughput.
- *
- * Normally, iteration proceeds bin-by-bin traversing lists.
- * However, if the table has been resized, then all future steps
- * must traverse both the bin at the current index as well as at
- * (index + baseSize); and so on for further resizings. To
- * paranoically cope with potential sharing by users of iterators
- * across threads, iteration terminates if a bounds checks fails
- * for a table read.
- *
- * This class extends ForkJoinTask to streamline parallel
- * iteration in bulk operations (see BulkTask). This adds only an
- * int of space overhead, which is close enough to negligible in
- * cases where it is not needed to not worry about it. Because
- * ForkJoinTask is Serializable, but iterators need not be, we
- * need to add warning suppressions.
- */
- @SuppressWarnings("serial") static class Traverser {
- final ConcurrentHashMapV8 map;
- Node next; // the next entry to use
- K nextKey; // cached key field of next
- V nextVal; // cached val field of next
- Node[] tab; // current table; updated if resized
- int index; // index of bin to use next
- int baseIndex; // current index of initial table
- int baseLimit; // index bound for initial table
- int baseSize; // initial table size
-
- /** Creates iterator for all entries in the table. */
- Traverser(ConcurrentHashMapV8 map) {
- this.map = map;
- }
-
- /** Creates iterator for split() methods */
- Traverser(Traverser it) {
- ConcurrentHashMapV8 m; Node[] t;
- if ((m = this.map = it.map) == null)
- t = null;
- else if ((t = it.tab) == null && // force parent tab initialization
- (t = it.tab = m.table) != null)
- it.baseLimit = it.baseSize = t.length;
- this.tab = t;
- this.baseSize = it.baseSize;
- it.baseLimit = this.index = this.baseIndex =
- ((this.baseLimit = it.baseLimit) + it.baseIndex + 1) >>> 1;
- }
-
- /**
- * Advances next; returns nextVal or null if terminated.
- * See above for explanation.
- */
- final V advance() {
- Node e = next;
- V ev = null;
- outer: do {
- if (e != null) // advance past used/skipped node
- e = e.next;
- while (e == null) { // get to next non-null bin
- ConcurrentHashMapV8 m;
- Node[] t; int b, i, n; Object ek; // checks must use locals
- if ((t = tab) != null)
- n = t.length;
- else if ((m = map) != null && (t = tab = m.table) != null)
- n = baseLimit = baseSize = t.length;
- else
- break outer;
- if ((b = baseIndex) >= baseLimit ||
- (i = index) < 0 || i >= n)
- break outer;
- if ((e = tabAt(t, i)) != null && e.hash == MOVED) {
- if ((ek = e.key) instanceof TreeBin)
- e = ((TreeBin)ek).first;
- else {
- tab = (Node[])ek;
- continue; // restarts due to null val
- }
- } // visit upper slots if present
- index = (i += baseSize) < n ? i : (baseIndex = b + 1);
- }
- nextKey = (K) e.key;
- } while ((ev = (V) e.val) == null); // skip deleted or special nodes
- next = e;
- return nextVal = ev;
- }
-
- public final void remove() {
- Object k = nextKey;
- if (k == null && (advance() == null || (k = nextKey) == null))
- throw new IllegalStateException();
- map.internalReplace(k, null, null);
- }
-
- public final boolean hasNext() {
- return nextVal != null || advance() != null;
- }
-
- public final boolean hasMoreElements() { return hasNext(); }
- public final void setRawResult(Object x) { }
- public R getRawResult() { return null; }
- public boolean exec() { return true; }
- }
-
- /* ---------------- Public operations -------------- */
-
- /**
- * Creates a new, empty map with the default initial table size (16).
- */
- public ConcurrentHashMapV8() {
- this.counter = new LongAdder();
- }
-
- /**
- * Creates a new, empty map with an initial table size
- * accommodating the specified number of elements without the need
- * to dynamically resize.
- *
- * @param initialCapacity The implementation performs internal
- * sizing to accommodate this many elements.
- * @throws IllegalArgumentException if the initial capacity of
- * elements is negative
- */
- public ConcurrentHashMapV8(int initialCapacity) {
- if (initialCapacity < 0)
- throw new IllegalArgumentException();
- int cap = ((initialCapacity >= (MAXIMUM_CAPACITY >>> 1)) ?
- MAXIMUM_CAPACITY :
- tableSizeFor(initialCapacity + (initialCapacity >>> 1) + 1));
- this.counter = new LongAdder();
- this.sizeCtl = cap;
- }
-
- /**
- * Creates a new map with the same mappings as the given map.
- *
- * @param m the map
- */
- public ConcurrentHashMapV8(Map extends K, ? extends V> m) {
- this.counter = new LongAdder();
- this.sizeCtl = DEFAULT_CAPACITY;
- internalPutAll(m);
- }
-
- /**
- * Creates a new, empty map with an initial table size based on
- * the given number of elements ({@code initialCapacity}) and
- * initial table density ({@code loadFactor}).
- *
- * @param initialCapacity the initial capacity. The implementation
- * performs internal sizing to accommodate this many elements,
- * given the specified load factor.
- * @param loadFactor the load factor (table density) for
- * establishing the initial table size
- * @throws IllegalArgumentException if the initial capacity of
- * elements is negative or the load factor is nonpositive
- *
- * @since 1.6
- */
- public ConcurrentHashMapV8(int initialCapacity, float loadFactor) {
- this(initialCapacity, loadFactor, 1);
- }
-
- /**
- * Creates a new, empty map with an initial table size based on
- * the given number of elements ({@code initialCapacity}), table
- * density ({@code loadFactor}), and number of concurrently
- * updating threads ({@code concurrencyLevel}).
- *
- * @param initialCapacity the initial capacity. The implementation
- * performs internal sizing to accommodate this many elements,
- * given the specified load factor.
- * @param loadFactor the load factor (table density) for
- * establishing the initial table size
- * @param concurrencyLevel the estimated number of concurrently
- * updating threads. The implementation may use this value as
- * a sizing hint.
- * @throws IllegalArgumentException if the initial capacity is
- * negative or the load factor or concurrencyLevel are
- * nonpositive
- */
- public ConcurrentHashMapV8(int initialCapacity,
- float loadFactor, int concurrencyLevel) {
- if (!(loadFactor > 0.0f) || initialCapacity < 0 || concurrencyLevel <= 0)
- throw new IllegalArgumentException();
- if (initialCapacity < concurrencyLevel) // Use at least as many bins
- initialCapacity = concurrencyLevel; // as estimated threads
- long size = (long)(1.0 + (long)initialCapacity / loadFactor);
- int cap = (size >= (long)MAXIMUM_CAPACITY) ?
- MAXIMUM_CAPACITY : tableSizeFor((int)size);
- this.counter = new LongAdder();
- this.sizeCtl = cap;
- }
-
- /**
- * Creates a new {@link Set} backed by a ConcurrentHashMapV8
- * from the given type to {@code Boolean.TRUE}.
- *
- * @return the new set
- */
- public static KeySetView newKeySet() {
- return new KeySetView(new ConcurrentHashMapV8(),
- Boolean.TRUE);
- }
-
- /**
- * Creates a new {@link Set} backed by a ConcurrentHashMapV8
- * from the given type to {@code Boolean.TRUE}.
- *
- * @param initialCapacity The implementation performs internal
- * sizing to accommodate this many elements.
- * @throws IllegalArgumentException if the initial capacity of
- * elements is negative
- * @return the new set
- */
- public static KeySetView newKeySet(int initialCapacity) {
- return new KeySetView(new ConcurrentHashMapV8(initialCapacity),
- Boolean.TRUE);
- }
-
- /**
- * {@inheritDoc}
- */
- public boolean isEmpty() {
- return counter.sum() <= 0L; // ignore transient negative values
- }
-
- /**
- * {@inheritDoc}
- */
- public int size() {
- long n = counter.sum();
- return ((n < 0L) ? 0 :
- (n > (long)Integer.MAX_VALUE) ? Integer.MAX_VALUE :
- (int)n);
- }
-
- /**
- * Returns the number of mappings. This method should be used
- * instead of {@link #size} because a ConcurrentHashMapV8 may
- * contain more mappings than can be represented as an int. The
- * value returned is a snapshot; the actual count may differ if
- * there are ongoing concurrent insertions or removals.
- *
- * @return the number of mappings
- */
- public long mappingCount() {
- long n = counter.sum();
- return (n < 0L) ? 0L : n; // ignore transient negative values
- }
-
- /**
- * Returns the value to which the specified key is mapped,
- * or {@code null} if this map contains no mapping for the key.
- *
- * More formally, if this map contains a mapping from a key
- * {@code k} to a value {@code v} such that {@code key.equals(k)},
- * then this method returns {@code v}; otherwise it returns
- * {@code null}. (There can be at most one such mapping.)
- *
- * @throws NullPointerException if the specified key is null
- */
- @SuppressWarnings("unchecked") public V get(Object key) {
- if (key == null)
- throw new NullPointerException();
- return (V)internalGet(key);
- }
-
- /**
- * Returns the value to which the specified key is mapped,
- * or the given defaultValue if this map contains no mapping for the key.
- *
- * @param key the key
- * @param defaultValue the value to return if this map contains
- * no mapping for the given key
- * @return the mapping for the key, if present; else the defaultValue
- * @throws NullPointerException if the specified key is null
- */
- @SuppressWarnings("unchecked") public V getValueOrDefault(Object key, V defaultValue) {
- if (key == null)
- throw new NullPointerException();
- V v = (V) internalGet(key);
- return v == null ? defaultValue : v;
- }
-
- /**
- * Tests if the specified object is a key in this table.
- *
- * @param key possible key
- * @return {@code true} if and only if the specified object
- * is a key in this table, as determined by the
- * {@code equals} method; {@code false} otherwise
- * @throws NullPointerException if the specified key is null
- */
- public boolean containsKey(Object key) {
- if (key == null)
- throw new NullPointerException();
- return internalGet(key) != null;
- }
-
- /**
- * Returns {@code true} if this map maps one or more keys to the
- * specified value. Note: This method may require a full traversal
- * of the map, and is much slower than method {@code containsKey}.
- *
- * @param value value whose presence in this map is to be tested
- * @return {@code true} if this map maps one or more keys to the
- * specified value
- * @throws NullPointerException if the specified value is null
- */
- public boolean containsValue(Object value) {
- if (value == null)
- throw new NullPointerException();
- Object v;
- Traverser it = new Traverser(this);
- while ((v = it.advance()) != null) {
- if (v == value || value.equals(v))
- return true;
- }
- return false;
- }
-
- public K findKey(Object value) {
- if (value == null)
- throw new NullPointerException();
- Object v;
- Traverser it = new Traverser(this);
- while ((v = it.advance()) != null) {
- if (v == value || value.equals(v))
- return it.nextKey;
- }
- return null;
- }
-
- /**
- * Legacy method testing if some key maps into the specified value
- * in this table. This method is identical in functionality to
- * {@link #containsValue}, and exists solely to ensure
- * full compatibility with class {@link java.util.Hashtable},
- * which supported this method prior to introduction of the
- * Java Collections framework.
- *
- * @param value a value to search for
- * @return {@code true} if and only if some key maps to the
- * {@code value} argument in this table as
- * determined by the {@code equals} method;
- * {@code false} otherwise
- * @throws NullPointerException if the specified value is null
- */
- public boolean contains(Object value) {
- return containsValue(value);
- }
-
- /**
- * Maps the specified key to the specified value in this table.
- * Neither the key nor the value can be null.
- *
- * The value can be retrieved by calling the {@code get} method
- * with a key that is equal to the original key.
- *
- * @param key key with which the specified value is to be associated
- * @param value value to be associated with the specified key
- * @return the previous value associated with {@code key}, or
- * {@code null} if there was no mapping for {@code key}
- * @throws NullPointerException if the specified key or value is null
- */
- @SuppressWarnings("unchecked") public V put(K key, V value) {
- if (key == null || value == null)
- throw new NullPointerException();
- return (V)internalPut(key, value);
- }
-
- /**
- * {@inheritDoc}
- *
- * @return the previous value associated with the specified key,
- * or {@code null} if there was no mapping for the key
- * @throws NullPointerException if the specified key or value is null
- */
- @SuppressWarnings("unchecked") public V putIfAbsent(K key, V value) {
- if (key == null || value == null)
- throw new NullPointerException();
- return (V)internalPutIfAbsent(key, value);
- }
-
- /**
- * Copies all of the mappings from the specified map to this one.
- * These mappings replace any mappings that this map had for any of the
- * keys currently in the specified map.
- *
- * @param m mappings to be stored in this map
- */
- public void putAll(Map extends K, ? extends V> m) {
- internalPutAll(m);
- }
-
- /**
- * If the specified key is not already associated with a value,
- * computes its value using the given mappingFunction and enters
- * it into the map unless null. This is equivalent to
- *
{@code
- * if (map.containsKey(key))
- * return map.get(key);
- * value = mappingFunction.apply(key);
- * if (value != null)
- * map.put(key, value);
- * return value;}
- *
- * except that the action is performed atomically. If the
- * function returns {@code null} no mapping is recorded. If the
- * function itself throws an (unchecked) exception, the exception
- * is rethrown to its caller, and no mapping is recorded. Some
- * attempted update operations on this map by other threads may be
- * blocked while computation is in progress, so the computation
- * should be short and simple, and must not attempt to update any
- * other mappings of this Map. The most appropriate usage is to
- * construct a new object serving as an initial mapped value, or
- * memoized result, as in:
- *
- * {@code
- * map.computeIfAbsent(key, new Fun() {
- * public V map(K k) { return new Value(f(k)); }});}
- *
- * @param key key with which the specified value is to be associated
- * @param mappingFunction the function to compute a value
- * @return the current (existing or computed) value associated with
- * the specified key, or null if the computed value is null
- * @throws NullPointerException if the specified key or mappingFunction
- * is null
- * @throws IllegalStateException if the computation detectably
- * attempts a recursive update to this map that would
- * otherwise never complete
- * @throws RuntimeException or Error if the mappingFunction does so,
- * in which case the mapping is left unestablished
- */
- @SuppressWarnings("unchecked") public V computeIfAbsent
- (K key, Fun super K, ? extends V> mappingFunction) {
- if (key == null || mappingFunction == null)
- throw new NullPointerException();
- return (V)internalComputeIfAbsent(key, mappingFunction);
- }
-
- /**
- * If the given key is present, computes a new mapping value given a key and
- * its current mapped value. This is equivalent to
- * {@code
- * if (map.containsKey(key)) {
- * value = remappingFunction.apply(key, map.get(key));
- * if (value != null)
- * map.put(key, value);
- * else
- * map.remove(key);
- * }
- * }
- *
- * except that the action is performed atomically. If the
- * function returns {@code null}, the mapping is removed. If the
- * function itself throws an (unchecked) exception, the exception
- * is rethrown to its caller, and the current mapping is left
- * unchanged. Some attempted update operations on this map by
- * other threads may be blocked while computation is in progress,
- * so the computation should be short and simple, and must not
- * attempt to update any other mappings of this Map. For example,
- * to either create or append new messages to a value mapping:
- *
- * @param key key with which the specified value is to be associated
- * @param remappingFunction the function to compute a value
- * @return the new value associated with the specified key, or null if none
- * @throws NullPointerException if the specified key or remappingFunction
- * is null
- * @throws IllegalStateException if the computation detectably
- * attempts a recursive update to this map that would
- * otherwise never complete
- * @throws RuntimeException or Error if the remappingFunction does so,
- * in which case the mapping is unchanged
- */
- @SuppressWarnings("unchecked") public V computeIfPresent
- (K key, BiFun super K, ? super V, ? extends V> remappingFunction) {
- if (key == null || remappingFunction == null)
- throw new NullPointerException();
- return (V)internalCompute(key, true, remappingFunction);
- }
-
- /**
- * Computes a new mapping value given a key and
- * its current mapped value (or {@code null} if there is no current
- * mapping). This is equivalent to
- * {@code
- * value = remappingFunction.apply(key, map.get(key));
- * if (value != null)
- * map.put(key, value);
- * else
- * map.remove(key);
- * }
- *
- * except that the action is performed atomically. If the
- * function returns {@code null}, the mapping is removed. If the
- * function itself throws an (unchecked) exception, the exception
- * is rethrown to its caller, and the current mapping is left
- * unchanged. Some attempted update operations on this map by
- * other threads may be blocked while computation is in progress,
- * so the computation should be short and simple, and must not
- * attempt to update any other mappings of this Map. For example,
- * to either create or append new messages to a value mapping:
- *
- * {@code
- * Map map = ...;
- * final String msg = ...;
- * map.compute(key, new BiFun() {
- * public String apply(Key k, String v) {
- * return (v == null) ? msg : v + msg;});}}
- *
- * @param key key with which the specified value is to be associated
- * @param remappingFunction the function to compute a value
- * @return the new value associated with the specified key, or null if none
- * @throws NullPointerException if the specified key or remappingFunction
- * is null
- * @throws IllegalStateException if the computation detectably
- * attempts a recursive update to this map that would
- * otherwise never complete
- * @throws RuntimeException or Error if the remappingFunction does so,
- * in which case the mapping is unchanged
- */
- @SuppressWarnings("unchecked") public V compute
- (K key, BiFun super K, ? super V, ? extends V> remappingFunction) {
- if (key == null || remappingFunction == null)
- throw new NullPointerException();
- return (V)internalCompute(key, false, remappingFunction);
- }
-
- /**
- * If the specified key is not already associated
- * with a value, associate it with the given value.
- * Otherwise, replace the value with the results of
- * the given remapping function. This is equivalent to:
- * {@code
- * if (!map.containsKey(key))
- * map.put(value);
- * else {
- * newValue = remappingFunction.apply(map.get(key), value);
- * if (value != null)
- * map.put(key, value);
- * else
- * map.remove(key);
- * }
- * }
- * except that the action is performed atomically. If the
- * function returns {@code null}, the mapping is removed. If the
- * function itself throws an (unchecked) exception, the exception
- * is rethrown to its caller, and the current mapping is left
- * unchanged. Some attempted update operations on this map by
- * other threads may be blocked while computation is in progress,
- * so the computation should be short and simple, and must not
- * attempt to update any other mappings of this Map.
- */
- @SuppressWarnings("unchecked") public V merge
- (K key, V value, BiFun super V, ? super V, ? extends V> remappingFunction) {
- if (key == null || value == null || remappingFunction == null)
- throw new NullPointerException();
- return (V)internalMerge(key, value, remappingFunction);
- }
-
- /**
- * Removes the key (and its corresponding value) from this map.
- * This method does nothing if the key is not in the map.
- *
- * @param key the key that needs to be removed
- * @return the previous value associated with {@code key}, or
- * {@code null} if there was no mapping for {@code key}
- * @throws NullPointerException if the specified key is null
- */
- @SuppressWarnings("unchecked") public V remove(Object key) {
- if (key == null)
- throw new NullPointerException();
- return (V)internalReplace(key, null, null);
- }
-
- /**
- * {@inheritDoc}
- *
- * @throws NullPointerException if the specified key is null
- */
- public boolean remove(Object key, Object value) {
- if (key == null)
- throw new NullPointerException();
- if (value == null)
- return false;
- return internalReplace(key, null, value) != null;
- }
-
- /**
- * {@inheritDoc}
- *
- * @throws NullPointerException if any of the arguments are null
- */
- public boolean replace(K key, V oldValue, V newValue) {
- if (key == null || oldValue == null || newValue == null)
- throw new NullPointerException();
- return internalReplace(key, newValue, oldValue) != null;
- }
-
- /**
- * {@inheritDoc}
- *
- * @return the previous value associated with the specified key,
- * or {@code null} if there was no mapping for the key
- * @throws NullPointerException if the specified key or value is null
- */
- @SuppressWarnings("unchecked") public V replace(K key, V value) {
- if (key == null || value == null)
- throw new NullPointerException();
- return (V)internalReplace(key, value, null);
- }
-
- /**
- * Removes all of the mappings from this map.
- */
- public void clear() {
- internalClear();
- }
-
- /**
- * Returns a {@link Set} view of the keys contained in this map.
- * The set is backed by the map, so changes to the map are
- * reflected in the set, and vice-versa.
- *
- * @return the set view
- */
- public KeySetView keySet() {
- KeySetView ks = keySet;
- return (ks != null) ? ks : (keySet = new KeySetView(this, null));
- }
-
- /**
- * Returns a {@link Set} view of the keys in this map, using the
- * given common mapped value for any additions (i.e., {@link
- * Collection#add} and {@link Collection#addAll}). This is of
- * course only appropriate if it is acceptable to use the same
- * value for all additions from this view.
- *
- * @param mappedValue the mapped value to use for any
- * additions.
- * @return the set view
- * @throws NullPointerException if the mappedValue is null
- */
- public KeySetView keySet(V mappedValue) {
- if (mappedValue == null)
- throw new NullPointerException();
- return new KeySetView(this, mappedValue);
- }
-
- /**
- * Returns a {@link Collection} view of the values contained in this map.
- * The collection is backed by the map, so changes to the map are
- * reflected in the collection, and vice-versa.
- */
- public ValuesView values() {
- ValuesView vs = values;
- return (vs != null) ? vs : (values = new ValuesView(this));
- }
-
- /**
- * Returns a {@link Set} view of the mappings contained in this map.
- * The set is backed by the map, so changes to the map are
- * reflected in the set, and vice-versa. The set supports element
- * removal, which removes the corresponding mapping from the map,
- * via the {@code Iterator.remove}, {@code Set.remove},
- * {@code removeAll}, {@code retainAll}, and {@code clear}
- * operations. It does not support the {@code add} or
- * {@code addAll} operations.
- *
- * The view's {@code iterator} is a "weakly consistent" iterator
- * that will never throw {@link ConcurrentModificationException},
- * and guarantees to traverse elements as they existed upon
- * construction of the iterator, and may (but is not guaranteed to)
- * reflect any modifications subsequent to construction.
- */
- public Set> entrySet() {
- EntrySetView es = entrySet;
- return (es != null) ? es : (entrySet = new EntrySetView(this));
- }
-
- /**
- * Returns an enumeration of the keys in this table.
- *
- * @return an enumeration of the keys in this table
- * @see #keySet()
- */
- public Enumeration keys() {
- return new KeyIterator(this);
- }
-
- /**
- * Returns an enumeration of the values in this table.
- *
- * @return an enumeration of the values in this table
- * @see #values()
- */
- public Enumeration elements() {
- return new ValueIterator(this);
- }
-
- /**
- * Returns a partitionable iterator of the keys in this map.
- *
- * @return a partitionable iterator of the keys in this map
- */
- public Spliterator keySpliterator() {
- return new KeyIterator(this);
- }
-
- /**
- * Returns a partitionable iterator of the values in this map.
- *
- * @return a partitionable iterator of the values in this map
- */
- public Spliterator valueSpliterator() {
- return new ValueIterator(this);
- }
-
- /**
- * Returns a partitionable iterator of the entries in this map.
- *
- * @return a partitionable iterator of the entries in this map
- */
- public Spliterator> entrySpliterator() {
- return new EntryIterator(this);
- }
-
- /**
- * Returns the hash code value for this {@link Map}, i.e.,
- * the sum of, for each key-value pair in the map,
- * {@code key.hashCode() ^ value.hashCode()}.
- *
- * @return the hash code value for this map
- */
- public int hashCode() {
- int h = 0;
- Traverser it = new Traverser(this);
- Object v;
- while ((v = it.advance()) != null) {
- h += it.nextKey.hashCode() ^ v.hashCode();
- }
- return h;
- }
-
- /**
- * Returns a string representation of this map. The string
- * representation consists of a list of key-value mappings (in no
- * particular order) enclosed in braces ("{@code {}}"). Adjacent
- * mappings are separated by the characters {@code ", "} (comma
- * and space). Each key-value mapping is rendered as the key
- * followed by an equals sign ("{@code =}") followed by the
- * associated value.
- *
- * @return a string representation of this map
- */
- public String toString() {
- Traverser it = new Traverser(this);
- StringBuilder sb = new StringBuilder();
- sb.append('{');
- Object v;
- if ((v = it.advance()) != null) {
- for (;;) {
- Object k = it.nextKey;
- sb.append(k == this ? "(this Map)" : k);
- sb.append('=');
- sb.append(v == this ? "(this Map)" : v);
- if ((v = it.advance()) == null)
- break;
- sb.append(',').append(' ');
- }
- }
- return sb.append('}').toString();
- }
-
- /**
- * Compares the specified object with this map for equality.
- * Returns {@code true} if the given object is a map with the same
- * mappings as this map. This operation may return misleading
- * results if either map is concurrently modified during execution
- * of this method.
- *
- * @param o object to be compared for equality with this map
- * @return {@code true} if the specified object is equal to this map
- */
- public boolean equals(Object o) {
- if (o != this) {
- if (!(o instanceof Map))
- return false;
- Map,?> m = (Map,?>) o;
- Traverser it = new Traverser(this);
- Object val;
- while ((val = it.advance()) != null) {
- Object v = m.get(it.nextKey);
- if (v == null || (v != val && !v.equals(val)))
- return false;
- }
- for (Map.Entry,?> e : m.entrySet()) {
- Object mk, mv, v;
- if ((mk = e.getKey()) == null ||
- (mv = e.getValue()) == null ||
- (v = internalGet(mk)) == null ||
- (mv != v && !mv.equals(v)))
- return false;
- }
- }
- return true;
- }
-
- /* ----------------Iterators -------------- */
-
- @SuppressWarnings("serial") static final class KeyIterator extends Traverser
- implements Spliterator, Enumeration {
- KeyIterator(ConcurrentHashMapV8 map) { super(map); }
- KeyIterator(Traverser it) {
- super(it);
- }
- public KeyIterator split() {
- if (nextKey != null)
- throw new IllegalStateException();
- return new KeyIterator(this);
- }
- @SuppressWarnings("unchecked") public final K next() {
- if (nextVal == null && advance() == null)
- throw new NoSuchElementException();
- Object k = nextKey;
- nextVal = null;
- return (K) k;
- }
-
- public final K nextElement() { return next(); }
- }
-
- @SuppressWarnings("serial") static final class ValueIterator extends Traverser