From d869b6bce0f688d74ede5471d5489307b2b5f78d Mon Sep 17 00:00:00 2001 From: Chris Saxon Date: Mon, 20 May 2024 21:33:43 +0100 Subject: [PATCH 01/10] 21c window function enhancements (#47) --- features/_versions/21.3.adoc | 12 +++ features/window-clause.adoc | 92 +++++++++++++++++++ .../window-functions-exclusion-frame.adoc | 88 ++++++++++++++++++ features/window-functions-groups-frame.adoc | 67 ++++++++++++++ 4 files changed, 259 insertions(+) create mode 100644 features/_versions/21.3.adoc create mode 100644 features/window-clause.adoc create mode 100644 features/window-functions-exclusion-frame.adoc create mode 100644 features/window-functions-groups-frame.adoc diff --git a/features/_versions/21.3.adoc b/features/_versions/21.3.adoc new file mode 100644 index 0000000..c10a019 --- /dev/null +++ b/features/_versions/21.3.adoc @@ -0,0 +1,12 @@ += 21.3 + +Oracle Database 21c was first released in August 2021. + +== Marquee Features + +* JSON Data Type +* Blockchain Tables +* SQL Macros +* Enhanced Analytic Functions + +For more information about all the new features in this release, see link:https://docs.oracle.com/en/database/oracle/oracle-database/21/nfcon/introduction.html[Oracle Database 21c New Features]. \ No newline at end of file diff --git a/features/window-clause.adoc b/features/window-clause.adoc new file mode 100644 index 0000000..17f5e85 --- /dev/null +++ b/features/window-clause.adoc @@ -0,0 +1,92 @@ += WINDOW clause +:database-version: 21.3 +:database-category: sql + +[[feature_summary]] + +The `WINDOW` clause enables you to define `PARTITION BY`, `ORDER BY`, and window frames for analytic functions. You can use these named windows in the `OVER` clause of functions in the `SELECT` clause. + +[source,sql] +[subs="verbatim"] +---- +alter session set nls_date_format = 'DD-MON-YYYY'; + +select employee_id, + department_id, salary, + -- these calculate totals per department + count (*) over ( dept_w ) emps_per_dept, + sum ( salary ) over ( dept_w ) wages_per_dept, + hire_date, + -- this gets the running total of salaries/dept in order they were hired + sum ( salary ) over ( hired_w ) cumul_sal, + -- this gets the moving average of salaries for the last four hires/dept + round ( avg ( salary ) over last_four ) rolling_mean +from hr.employees +where department_id < 50 +window dept_w as ( + -- split by department + partition by department_id +), hired_w as ( + -- sort by date hired + dept_w order by hire_date +), last_four as ( + -- include the previous three rows & current + hired_w rows 3 preceding +); +---- + +.Result +[source,sql] +[subs="verbatim"] +---- +SQL> alter session set nls_date_format = 'DD-MON-YYYY'; + +Session altered. + +SQL> select employee_id, + 2 department_id, salary, + 3 -- these calculate totals per department + 4 count (*) over ( dept_w ) emps_per_dept, + 5 sum ( salary ) over ( dept_w ) wages_per_dept, + 6 hire_date, + 7 -- this gets the running total of salaries/dept in order they were hired + 8 sum ( salary ) over ( hired_w ) cumul_sal, + 9 -- this gets the moving average of salaries for the last four hires/dept + 10 round ( avg ( salary ) over last_four ) rolling_mean + 11 from hr.employees + 12 where department_id < 50 + 13 window dept_w as ( + 14 -- split by department + 15 partition by department_id + 16 ), hired_w as ( + 17 -- sort by date hired + 18 dept_w order by hire_date + 19 ), last_four as ( + 20 -- include the previous three rows & current + 21 hired_w rows 3 preceding + 22 ); + +EMPLOYEE_ID DEPARTMENT_ID SALARY EMPS_PER_DEPT WAGES_PER_DEPT HIRE_DATE CUMUL_SAL ROLLING_MEAN +----------- ------------- ---------- ------------- -------------- ----------- ---------- ------------ + 200 10 4400 1 4400 17-SEP-2013 4400 4400 + 201 20 13000 2 19000 17-FEB-2014 13000 13000 + 202 20 6000 2 19000 17-AUG-2015 19000 9500 + 114 30 11000 6 24900 07-DEC-2012 11000 11000 + 115 30 3100 6 24900 18-MAY-2013 14100 7050 + 117 30 2800 6 24900 24-JUL-2015 16900 5633 + 116 30 2900 6 24900 24-DEC-2015 19800 4950 + 118 30 2600 6 24900 15-NOV-2016 22400 2850 + 119 30 2500 6 24900 10-AUG-2017 24900 2700 + 203 40 6500 1 6500 07-JUN-2012 6500 6500 + +10 rows selected. +---- + +== Benefits + +The `WINDOW` clause enables you to define common windows once and reuse them in a statement. This makes queries easier to maintain. + +== Further information + +* Availability: All Offerings +* https://docs.oracle.com/en/database/oracle/oracle-database/21/dwhsg/sql-analysis-reporting-data-warehouses.html#GUID-2877E1A5-9F11-47F1-A5ED-D7D5C7DED90A[Documentation] diff --git a/features/window-functions-exclusion-frame.adoc b/features/window-functions-exclusion-frame.adoc new file mode 100644 index 0000000..42aa69d --- /dev/null +++ b/features/window-functions-exclusion-frame.adoc @@ -0,0 +1,88 @@ += Window functions frame exclusion +:database-version: 21.3 +:database-category: sql + +[[feature_summary]] + +Use frame exclusion to omit rows from the calculation in window functions. This has four options: + +* `EXCLUDE CURRENT ROW` - remove the row being processed from the calculation. +* `EXCLUDE GROUP` - omit all rows with the same value for the window's `ORDER BY` columns as the current row +* `EXCLUDE TIES` - omit all other rows with the same value for the window's `ORDER BY` columns from the total as the current row, but include the current row +* `EXCLUDE NO OTHERS` - Include all rows in the window in the calculation. This is the default. + +[source,sql] +[subs="verbatim"] +---- +alter session set nls_date_format = 'DD-MON-YYYY'; + +select hire_date + , count(*) over ( + -- include all previous rows; default + hire_w rows unbounded preceding exclude no others + ) include_all + , count(*) over ( + -- omit this row from the count + hire_w rows unbounded preceding exclude current row + ) omit_current + , count(*) over ( + -- omit all rows with the same value for hire_date as this + hire_w rows unbounded preceding exclude group + ) omit_group + , count(*) over ( + -- omit other rows with the same value for hire_date as this + hire_w rows unbounded preceding exclude ties + ) omit_ties +from hr.employees +where hire_date >= date'2015-03-03' +window hire_w as ( order by hire_date ) +fetch first 5 rows only; +---- + +.Result +[source,sql] +[subs="verbatim"] +---- +SQL> alter session set nls_date_format = 'DD-MON-YYYY'; + +Session altered. + +SQL> select hire_date + 2 , count(*) over ( + 3 -- include all previous rows; default + 4 hire_w rows unbounded preceding exclude no others + 5 ) include_all + 6 , count(*) over ( + 7 -- omit this row from the count + 8 hire_w rows unbounded preceding exclude current row + 9 ) omit_current + 10 , count(*) over ( + 11 -- omit all rows with the same value for hire_date as this + 12 hire_w rows unbounded preceding exclude group + 13 ) omit_group + 14 , count(*) over ( + 15 -- omit other rows with the same value for hire_date as this + 16 hire_w rows unbounded preceding exclude ties + 17 ) omit_ties + 18 from hr.employees + 19 where hire_date >= date'2015-03-03' + 20 window hire_w as ( order by hire_date ) + 21 fetch first 5 rows only; + +HIRE_DATE INCLUDE_ALL OMIT_CURRENT OMIT_GROUP OMIT_TIES +----------- ----------- ------------ ---------- ---------- +03-MAR-2015 1 0 0 1 +10-MAR-2015 2 1 1 2 +10-MAR-2015 3 2 1 2 +11-MAR-2015 4 3 3 4 +19-MAR-2015 5 4 4 5 +---- + +== Benefits + +Frame exclusion simplifies SQL statements that need to remove rows from running total and moving window calculations + +== Further information + +* Availability: All Offerings +* https://docs.oracle.com/en/database/oracle/oracle-database/21/dwhsg/sql-analysis-reporting-data-warehouses.html#GUID-2877E1A5-9F11-47F1-A5ED-D7D5C7DED90A[Documentation] diff --git a/features/window-functions-groups-frame.adoc b/features/window-functions-groups-frame.adoc new file mode 100644 index 0000000..68fece6 --- /dev/null +++ b/features/window-functions-groups-frame.adoc @@ -0,0 +1,67 @@ += Window functions GROUPS frame +:database-version: 21.3 +:database-category: sql + +[[feature_summary]] + +The `GROUPS` frame enables you to get running totals over the previous N sort values in window functions. + +This in addition to the existing `ROWS` and `RANGE` frames. The differences between these are: + +* `ROWS :N PRECEDING` - include the current row and up to N rows before it +* `RANGE :N PRECEDING` - include all rows between _current_ - N and _current_; _current_ is the value of the `ORDER BY` column for the row the function is processing +* `GROUPS :N PRECEDING` - include all rows with the same value and previous N unique values for the columns in the window's `ORDER BY` + +[source,sql] +[subs="verbatim"] +---- +alter session set nls_date_format = 'DD-MON-YYYY'; + +select hire_date + -- include current & three previous rows + , count(*) over ( order by hire_date rows 3 preceding ) prev3_rows + -- include all rows between hire_date - 3 and hire_date for the current row + , count(*) over ( order by hire_date range 3 preceding ) prev3_days + -- include all rows with the any of the previous three and current hire_dates + , count(*) over ( order by hire_date groups 3 preceding ) prev3_values +from hr.employees +where hire_date >= date'2015-03-03' +fetch first 5 rows only; +---- + +.Result +[source,sql] +[subs="verbatim"] +---- +SQL> alter session set nls_date_format = 'DD-MON-YYYY'; + +Session altered. + +SQL> select hire_date + 2 -- include current & three previous rows + 3 , count(*) over ( order by hire_date rows 3 preceding ) prev3_rows + 4 -- include all rows between hire_date - 3 and hire_date for the current row + 5 , count(*) over ( order by hire_date range 3 preceding ) prev3_days + 6 -- include all rows with the any of the previous three and current hire_dates + 7 , count(*) over ( order by hire_date groups 3 preceding ) prev3_values + 8 from hr.employees + 9 where hire_date >= date'2015-03-03' + 10 fetch first 5 rows only; + +HIRE_DATE PREV3_ROWS PREV3_DAYS PREV3_VALUES +----------- ---------- ---------- ------------ +03-MAR-2015 1 1 1 +10-MAR-2015 2 2 3 +10-MAR-2015 3 2 3 +11-MAR-2015 4 3 4 +19-MAR-2015 4 1 5 +---- + +== Benefits + +The `GROUPS` frame simplifies SQL statements that need to calculate running totals over the previous N unique values. + +== Further information + +* Availability: All Offerings +* https://docs.oracle.com/en/database/oracle/oracle-database/21/dwhsg/sql-analysis-reporting-data-warehouses.html#GUID-2877E1A5-9F11-47F1-A5ED-D7D5C7DED90A[Documentation] From 662f7ad1adcd0763d151b18c5ba7bba14e285a73 Mon Sep 17 00:00:00 2001 From: Gerald Venzl Date: Thu, 13 Jun 2024 09:57:40 -0700 Subject: [PATCH 02/10] Intro feature #29 (#48) Signed-off-by: Gerald Venzl --- features/seamless-concat.adoc | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 features/seamless-concat.adoc diff --git a/features/seamless-concat.adoc b/features/seamless-concat.adoc new file mode 100644 index 0000000..6564f95 --- /dev/null +++ b/features/seamless-concat.adoc @@ -0,0 +1,33 @@ += Seamless concatenation via Varargs +:database-version: 23.2 +:database-category: sql + +[[feature_summary]] + +You can now concatenate an unlimited number of parameters via the `CONCAT()` function. + +[source,sql] +[subs="verbatim"] +---- +SELECT CONCAT('Hello World! It currently is ', TO_CHAR(sysdate,'YYYY-MM-DD HH24:MI:SS'), ' here in Vienna.') AS my_string; +---- + +.Result +[source,sql] +[subs="verbatim"] +---- +SQL> SELECT CONCAT('Hello World! It currently is ', TO_CHAR(sysdate,'YYYY-MM-DD HH24:MI:SS'), ' here in Vienna.') AS my_string; + +MY_STRING +___________________________________________________________________ +Hello World! It currently is 2024-06-13 16:50:50 here in Vienna. +---- + +== Benefits + +Not having to nest multiple concatenations in multiple `CONCAT()` calls aids the readability and maintainability of code. + +== Further information + +* Availability: All Offerings +* link:https://docs.oracle.com/en/database/oracle/oracle-database/23/sqlrf/CONCAT.html[CONCAT Documentation] From 2be5035f6dacc31b58e41ea330d5bd1038cee79d Mon Sep 17 00:00:00 2001 From: Andres Almiray Date: Wed, 7 Aug 2024 15:57:17 +0200 Subject: [PATCH 03/10] build: Switch to PrismJS Related to #20 --- .../modules/ROOT/pages/add-static-files.adoc | 99 - .../modules/ROOT/pages/copy-to-clipboard.adoc | 48 - antora-default-ui/gulp.d/tasks/pack.js | 11 - antora-default-ui/src/partials/toolbar.hbs | 13 - .../.editorconfig | 0 .../.eslintrc | 7 +- .../.gitignore | 0 .../.gitlab-ci.yml | 0 .../.gulp.json | 0 .../.nvmrc | 0 .../.stylelintrc | 0 .../LICENSE | 0 .../README.adoc | 0 .../docs/antora.yml | 0 .../ROOT/examples/latest-release-notes.js | 93 + .../docs/modules/ROOT/pages/add-fonts.adoc | 6 +- .../modules/ROOT/pages/add-static-files.adoc | 227 ++ .../modules/ROOT/pages/admonition-styles.adoc | 0 .../modules/ROOT/pages/build-preview-ui.adoc | 8 +- .../docs/modules/ROOT/pages/code-blocks.adoc | 92 + .../modules/ROOT/pages/create-helper.adoc | 20 + .../ROOT/pages/development-workflow.adoc | 0 .../docs/modules/ROOT/pages/image-styles.adoc | 59 + .../docs/modules/ROOT/pages/index.adoc | 7 +- .../ROOT/pages/inline-text-styles.adoc | 0 .../docs/modules/ROOT/pages/list-styles.adoc | 0 .../modules/ROOT/pages/prerequisites.adoc | 16 +- .../modules/ROOT/pages/set-up-project.adoc | 13 +- .../modules/ROOT/pages/sidebar-styles.adoc | 0 .../docs/modules/ROOT/pages/style-guide.adoc | 7 +- .../docs/modules/ROOT/pages/stylesheets.adoc | 6 +- .../ROOT/pages/template-customization.adoc | 96 + .../docs/modules/ROOT/pages/templates.adoc | 128 +- .../modules/ROOT/pages/ui-macro-styles.adoc | 0 .../gulp.d/lib/create-task.js | 0 .../gulp.d/lib/export-tasks.js | 0 .../gulp.d/lib/gulp-prettier-eslint.js | 0 .../gulp.d/tasks/build-preview-pages.js | 4 +- .../gulp.d/tasks/build.js | 13 +- .../gulp.d/tasks/format.js | 0 .../gulp.d/tasks/index.js | 2 +- .../gulp.d/tasks/lint-css.js | 0 .../gulp.d/tasks/lint-js.js | 0 antora-ui-default/gulp.d/tasks/pack.js | 17 + .../gulp.d/tasks/remove.js | 0 .../gulp.d/tasks/serve.js | 0 .../gulpfile.js | 2 +- .../index.js | 0 .../preview-src/404.adoc | 0 .../preview-src/index.adoc | 43 +- .../preview-src/multirepo-ssg.svg | 0 .../preview-src/ui-model.yml | 0 .../src/css/base.css | 0 .../src/css/body.css | 0 .../src/css/breadcrumbs.css | 0 .../src/css/doc.css | 138 +- .../src/css/footer.css | 0 .../src/css/header.css | 6 +- .../src/css/highlight.css | 0 .../src/css/main.css | 4 + .../src/css/nav.css | 57 +- .../src/css/page-versions.css | 0 .../src/css/pagination.css | 0 .../src/css/print.css | 0 antora-ui-default/src/css/prism.css | 140 ++ .../src/css/site.css | 0 .../src/css/toc.css | 4 - .../src/css/toolbar.css | 0 .../src/css/typeface-roboto-mono.css | 22 +- .../src/css/typeface-roboto.css | 36 +- .../src/css/vars.css | 4 +- .../src/helpers/and.js | 0 .../src/helpers/detag.js | 0 .../src/helpers/eq.js | 0 .../src/helpers/increment.js | 0 .../src/helpers/ne.js | 0 .../src/helpers/not.js | 0 .../src/helpers/or.js | 0 .../src/helpers/relativize.js | 12 +- .../src/helpers/year.js | 0 .../src/img/back.svg | 0 .../src/img/caret.svg | 0 .../src/img/chevron.svg | 0 .../src/img/home-o.svg | 0 .../src/img/home.svg | 0 .../src/img/menu.svg | 0 .../src/img/octicons-16.svg | 15 + .../src/js/01-nav.js | 18 + .../src/js/02-on-this-page.js | 3 +- .../src/js/03-fragment-jumper.js | 1 + .../src/js/04-page-versions.js | 0 .../src/js/05-mobile-navbar.js | 4 +- .../src/js/06-copy-to-clipboard.js | 4 +- .../src/js/vendor/highlight.bundle.js | 7 +- .../src/js/vendor/prism.bundle.js | 15 + .../src/layouts/404.hbs | 0 .../src/layouts/default.hbs | 0 .../src/partials/article-404.hbs | 0 .../src/partials/article.hbs | 0 .../src/partials/body.hbs | 0 .../src/partials/breadcrumbs.hbs | 0 .../src/partials/edit-this-page.hbs | 5 + .../src/partials/footer-content.hbs | 0 .../src/partials/footer-scripts.hbs | 0 .../src/partials/footer.hbs | 0 .../src/partials/head-icons.hbs | 0 .../src/partials/head-info.hbs | 0 .../src/partials/head-meta.hbs | 0 .../src/partials/head-prelude.hbs | 0 .../src/partials/head-scripts.hbs | 2 + .../src/partials/head-styles.hbs | 0 .../src/partials/head-title.hbs | 0 .../src/partials/head.hbs | 0 .../src/partials/header-content.hbs | 2 +- .../src/partials/header-scripts.hbs | 0 .../src/partials/header.hbs | 0 .../src/partials/main.hbs | 0 .../src/partials/nav-explore.hbs | 6 +- .../src/partials/nav-menu.hbs | 1 + .../src/partials/nav-toggle.hbs | 0 .../src/partials/nav-tree.hbs | 0 .../src/partials/nav.hbs | 0 .../src/partials/page-versions.hbs | 0 .../src/partials/pagination.hbs | 4 + .../src/partials/toc.hbs | 0 antora-ui-default/src/partials/toolbar.hbs | 9 + supplemental_ui/css/prism.css | 140 ++ supplemental_ui/css/site.css | 4 +- .../font/roboto-cyrillic-400-italic.woff2 | Bin 0 -> 10292 bytes .../font/roboto-cyrillic-400-normal.woff2 | Bin 0 -> 9628 bytes .../font/roboto-cyrillic-500-italic.woff2 | Bin 0 -> 10640 bytes .../font/roboto-cyrillic-500-normal.woff2 | Bin 0 -> 9840 bytes supplemental_ui/js/site.js | 62 +- supplemental_ui/js/vendor/highlight.js | 1870 ----------------- supplemental_ui/partials/footer-scripts.hbs | 2 +- supplemental_ui/partials/head-styles.hbs | 1 + ui-bundle.zip | Bin 278557 -> 322004 bytes 137 files changed, 1386 insertions(+), 2249 deletions(-) delete mode 100644 antora-default-ui/docs/modules/ROOT/pages/add-static-files.adoc delete mode 100644 antora-default-ui/docs/modules/ROOT/pages/copy-to-clipboard.adoc delete mode 100644 antora-default-ui/gulp.d/tasks/pack.js delete mode 100644 antora-default-ui/src/partials/toolbar.hbs rename {antora-default-ui => antora-ui-default}/.editorconfig (100%) rename {antora-default-ui => antora-ui-default}/.eslintrc (61%) rename {antora-default-ui => antora-ui-default}/.gitignore (100%) rename {antora-default-ui => antora-ui-default}/.gitlab-ci.yml (100%) rename {antora-default-ui => antora-ui-default}/.gulp.json (100%) rename {antora-default-ui => antora-ui-default}/.nvmrc (100%) rename {antora-default-ui => antora-ui-default}/.stylelintrc (100%) rename {antora-default-ui => antora-ui-default}/LICENSE (100%) rename {antora-default-ui => antora-ui-default}/README.adoc (100%) rename {antora-default-ui => antora-ui-default}/docs/antora.yml (100%) create mode 100644 antora-ui-default/docs/modules/ROOT/examples/latest-release-notes.js rename {antora-default-ui => antora-ui-default}/docs/modules/ROOT/pages/add-fonts.adoc (98%) create mode 100644 antora-ui-default/docs/modules/ROOT/pages/add-static-files.adoc rename {antora-default-ui => antora-ui-default}/docs/modules/ROOT/pages/admonition-styles.adoc (100%) rename {antora-default-ui => antora-ui-default}/docs/modules/ROOT/pages/build-preview-ui.adoc (96%) create mode 100644 antora-ui-default/docs/modules/ROOT/pages/code-blocks.adoc rename {antora-default-ui => antora-ui-default}/docs/modules/ROOT/pages/create-helper.adoc (92%) rename {antora-default-ui => antora-ui-default}/docs/modules/ROOT/pages/development-workflow.adoc (100%) create mode 100644 antora-ui-default/docs/modules/ROOT/pages/image-styles.adoc rename {antora-default-ui => antora-ui-default}/docs/modules/ROOT/pages/index.adoc (97%) rename {antora-default-ui => antora-ui-default}/docs/modules/ROOT/pages/inline-text-styles.adoc (100%) rename {antora-default-ui => antora-ui-default}/docs/modules/ROOT/pages/list-styles.adoc (100%) rename {antora-default-ui => antora-ui-default}/docs/modules/ROOT/pages/prerequisites.adoc (77%) rename {antora-default-ui => antora-ui-default}/docs/modules/ROOT/pages/set-up-project.adoc (84%) rename {antora-default-ui => antora-ui-default}/docs/modules/ROOT/pages/sidebar-styles.adoc (100%) rename {antora-default-ui => antora-ui-default}/docs/modules/ROOT/pages/style-guide.adoc (75%) rename {antora-default-ui => antora-ui-default}/docs/modules/ROOT/pages/stylesheets.adoc (66%) create mode 100644 antora-ui-default/docs/modules/ROOT/pages/template-customization.adoc rename {antora-default-ui => antora-ui-default}/docs/modules/ROOT/pages/templates.adoc (64%) rename {antora-default-ui => antora-ui-default}/docs/modules/ROOT/pages/ui-macro-styles.adoc (100%) rename {antora-default-ui => antora-ui-default}/gulp.d/lib/create-task.js (100%) rename {antora-default-ui => antora-ui-default}/gulp.d/lib/export-tasks.js (100%) rename {antora-default-ui => antora-ui-default}/gulp.d/lib/gulp-prettier-eslint.js (100%) rename {antora-default-ui => antora-ui-default}/gulp.d/tasks/build-preview-pages.js (97%) rename {antora-default-ui => antora-ui-default}/gulp.d/tasks/build.js (93%) rename {antora-default-ui => antora-ui-default}/gulp.d/tasks/format.js (100%) rename {antora-default-ui => antora-ui-default}/gulp.d/tasks/index.js (58%) rename {antora-default-ui => antora-ui-default}/gulp.d/tasks/lint-css.js (100%) rename {antora-default-ui => antora-ui-default}/gulp.d/tasks/lint-js.js (100%) create mode 100644 antora-ui-default/gulp.d/tasks/pack.js rename {antora-default-ui => antora-ui-default}/gulp.d/tasks/remove.js (100%) rename {antora-default-ui => antora-ui-default}/gulp.d/tasks/serve.js (100%) rename {antora-default-ui => antora-ui-default}/gulpfile.js (96%) rename {antora-default-ui => antora-ui-default}/index.js (100%) rename {antora-default-ui => antora-ui-default}/preview-src/404.adoc (100%) rename {antora-default-ui => antora-ui-default}/preview-src/index.adoc (89%) rename {antora-default-ui => antora-ui-default}/preview-src/multirepo-ssg.svg (100%) rename {antora-default-ui => antora-ui-default}/preview-src/ui-model.yml (100%) rename {antora-default-ui => antora-ui-default}/src/css/base.css (100%) rename {antora-default-ui => antora-ui-default}/src/css/body.css (100%) rename {antora-default-ui => antora-ui-default}/src/css/breadcrumbs.css (100%) rename {antora-default-ui => antora-ui-default}/src/css/doc.css (91%) rename {antora-default-ui => antora-ui-default}/src/css/footer.css (100%) rename {antora-default-ui => antora-ui-default}/src/css/header.css (98%) rename {antora-default-ui => antora-ui-default}/src/css/highlight.css (100%) rename {antora-default-ui => antora-ui-default}/src/css/main.css (92%) rename {antora-default-ui => antora-ui-default}/src/css/nav.css (82%) rename {antora-default-ui => antora-ui-default}/src/css/page-versions.css (100%) rename {antora-default-ui => antora-ui-default}/src/css/pagination.css (100%) rename {antora-default-ui => antora-ui-default}/src/css/print.css (100%) create mode 100644 antora-ui-default/src/css/prism.css rename {antora-default-ui => antora-ui-default}/src/css/site.css (100%) rename {antora-default-ui => antora-ui-default}/src/css/toc.css (96%) rename {antora-default-ui => antora-ui-default}/src/css/toolbar.css (100%) rename {antora-default-ui => antora-ui-default}/src/css/typeface-roboto-mono.css (61%) rename {antora-default-ui => antora-ui-default}/src/css/typeface-roboto.css (62%) rename {antora-default-ui => antora-ui-default}/src/css/vars.css (98%) rename {antora-default-ui => antora-ui-default}/src/helpers/and.js (100%) rename {antora-default-ui => antora-ui-default}/src/helpers/detag.js (100%) rename {antora-default-ui => antora-ui-default}/src/helpers/eq.js (100%) rename {antora-default-ui => antora-ui-default}/src/helpers/increment.js (100%) rename {antora-default-ui => antora-ui-default}/src/helpers/ne.js (100%) rename {antora-default-ui => antora-ui-default}/src/helpers/not.js (100%) rename {antora-default-ui => antora-ui-default}/src/helpers/or.js (100%) rename {antora-default-ui => antora-ui-default}/src/helpers/relativize.js (60%) rename {antora-default-ui => antora-ui-default}/src/helpers/year.js (100%) rename {antora-default-ui => antora-ui-default}/src/img/back.svg (100%) rename {antora-default-ui => antora-ui-default}/src/img/caret.svg (100%) rename {antora-default-ui => antora-ui-default}/src/img/chevron.svg (100%) rename {antora-default-ui => antora-ui-default}/src/img/home-o.svg (100%) rename {antora-default-ui => antora-ui-default}/src/img/home.svg (100%) rename {antora-default-ui => antora-ui-default}/src/img/menu.svg (100%) rename {antora-default-ui => antora-ui-default}/src/img/octicons-16.svg (52%) rename {antora-default-ui => antora-ui-default}/src/js/01-nav.js (87%) rename {antora-default-ui => antora-ui-default}/src/js/02-on-this-page.js (97%) rename {antora-default-ui => antora-ui-default}/src/js/03-fragment-jumper.js (98%) rename {antora-default-ui => antora-ui-default}/src/js/04-page-versions.js (100%) rename {antora-default-ui => antora-ui-default}/src/js/05-mobile-navbar.js (79%) rename {antora-default-ui => antora-ui-default}/src/js/06-copy-to-clipboard.js (97%) rename {antora-default-ui => antora-ui-default}/src/js/vendor/highlight.bundle.js (94%) create mode 100644 antora-ui-default/src/js/vendor/prism.bundle.js rename {antora-default-ui => antora-ui-default}/src/layouts/404.hbs (100%) rename {antora-default-ui => antora-ui-default}/src/layouts/default.hbs (100%) rename {antora-default-ui => antora-ui-default}/src/partials/article-404.hbs (100%) rename {antora-default-ui => antora-ui-default}/src/partials/article.hbs (100%) rename {antora-default-ui => antora-ui-default}/src/partials/body.hbs (100%) rename {antora-default-ui => antora-ui-default}/src/partials/breadcrumbs.hbs (100%) create mode 100644 antora-ui-default/src/partials/edit-this-page.hbs rename {antora-default-ui => antora-ui-default}/src/partials/footer-content.hbs (100%) rename {antora-default-ui => antora-ui-default}/src/partials/footer-scripts.hbs (100%) rename {antora-default-ui => antora-ui-default}/src/partials/footer.hbs (100%) rename {antora-default-ui => antora-ui-default}/src/partials/head-icons.hbs (100%) rename {antora-default-ui => antora-ui-default}/src/partials/head-info.hbs (100%) rename {antora-default-ui => antora-ui-default}/src/partials/head-meta.hbs (100%) rename {antora-default-ui => antora-ui-default}/src/partials/head-prelude.hbs (100%) rename {antora-default-ui => antora-ui-default}/src/partials/head-scripts.hbs (94%) rename {antora-default-ui => antora-ui-default}/src/partials/head-styles.hbs (100%) rename {antora-default-ui => antora-ui-default}/src/partials/head-title.hbs (100%) rename {antora-default-ui => antora-ui-default}/src/partials/head.hbs (100%) rename {antora-default-ui => antora-ui-default}/src/partials/header-content.hbs (93%) rename {antora-default-ui => antora-ui-default}/src/partials/header-scripts.hbs (100%) rename {antora-default-ui => antora-ui-default}/src/partials/header.hbs (100%) rename {antora-default-ui => antora-ui-default}/src/partials/main.hbs (100%) rename {antora-default-ui => antora-ui-default}/src/partials/nav-explore.hbs (67%) rename {antora-default-ui => antora-ui-default}/src/partials/nav-menu.hbs (73%) rename {antora-default-ui => antora-ui-default}/src/partials/nav-toggle.hbs (100%) rename {antora-default-ui => antora-ui-default}/src/partials/nav-tree.hbs (100%) rename {antora-default-ui => antora-ui-default}/src/partials/nav.hbs (100%) rename {antora-default-ui => antora-ui-default}/src/partials/page-versions.hbs (100%) rename {antora-default-ui => antora-ui-default}/src/partials/pagination.hbs (76%) rename {antora-default-ui => antora-ui-default}/src/partials/toc.hbs (100%) create mode 100644 antora-ui-default/src/partials/toolbar.hbs create mode 100644 supplemental_ui/css/prism.css create mode 100644 supplemental_ui/font/roboto-cyrillic-400-italic.woff2 create mode 100644 supplemental_ui/font/roboto-cyrillic-400-normal.woff2 create mode 100644 supplemental_ui/font/roboto-cyrillic-500-italic.woff2 create mode 100644 supplemental_ui/font/roboto-cyrillic-500-normal.woff2 delete mode 100644 supplemental_ui/js/vendor/highlight.js diff --git a/antora-default-ui/docs/modules/ROOT/pages/add-static-files.adoc b/antora-default-ui/docs/modules/ROOT/pages/add-static-files.adoc deleted file mode 100644 index a5ddb79..0000000 --- a/antora-default-ui/docs/modules/ROOT/pages/add-static-files.adoc +++ /dev/null @@ -1,99 +0,0 @@ -= Add Static Files - -A static UI file is any file provided by the UI that is added directly to your site. -A common example of a static file is a favicon image. -One way to add static files is by using the xref:antora:playbook:ui-supplemental-files.adoc[supplemental UI], which is defined in your Antora playbook. -This document explains how to add static files using a UI bundle instead. - -== Set up the static files folder - -You'll first need a place to store the static files in the UI project. -Let's create a folder under [.path]_src_ named [.path]_static_ for this purpose. - - $ mkdir src/static - -You can add static files, such as a favicon image (e.g., [.path]_favicon.ico_), to this folder. -The UI build will add files in this folder to the root of the UI bundle, dropping the [.path]_static_ folder prefix from the path. - -Antora automatically passes through static files in the bundle to the UI output folder (`+_+` by default), ignoring any hidden files (i.e., files that begin with a dot). -A static file is any file that's not designated as a layout, partial, or helper. -That means our favicon image file will end up at the path [.path]_++_/favicon.ico++_. - -.Contents of site -.... -_/ - favicon.ico - css/ - site.css - ... -sitemap.xml -... -.... - -If that's where you want the file to go, there's nothing else you have to do. -Otherwise, you have the option of promoting select static files to the site root. - -== Promote static files - -If you want to promote certain static files out of the UI output folder, you need to identify them. -Antora looks for a file named [.path]_ui.yml_, the UI descriptor, in the UI bundle to configure the behavior of the UI. - -Start by creating the file [.path]_src/ui.yml_ in your UI project. -The UI build copies this file, if present, to the root of the UI bundle. - -This file does not have any required keys. -The key we're interested in is `static_files`. -This key identifies files by relative path in the UI bundle that should be promoted from the UI output folder to the site root. -The files must be specified as an array, where each entry is either a relative paths or a path glob. -Unlike other static files, promoted static files can begin with a dot. - -Here's how to configure the UI descriptor to promote the favicon image file to the site root. - -.src/ui.yml -[,yaml] ----- -static_files: -- favicon.ico ----- - -If you have multiple favicon files with different file extensions, you can match all of them using a glob. - -.src/ui.yml -[,yaml] ----- -static_files: -- favicon* ----- - -With this configuration in place, Antora will read the favicon image from the UI bundle and copy it to the root of the site. - -.Contents of site -.... -_/ - css/ - site.css - ... -favicon.ico -sitemap.xml -... -.... - -Let's now look at how to put the static files to use. - -== Use the static files - -Often when you add static files to your site, you need to reference them somewhere. -In the case of a favicon image, it must be referenced in the `` of the HTML page. -If you are referencing a promoted static file, you'll use the prefix `+{{{siteRootPath}}}+`. -Otherwise, you'll use the prefix `+{{{uiRootPath}}}+`. - -Let's update the [.path]_src/partials/head-icons.hbs_ partial to reference the favicon image at the root of the site. - -.src/partials/head-icons.hbs -[,yaml] ----- - ----- - -Rebuild the UI with `gulp bundle`. -You should now see that your site has a favicon image that's provided by the UI bundle. diff --git a/antora-default-ui/docs/modules/ROOT/pages/copy-to-clipboard.adoc b/antora-default-ui/docs/modules/ROOT/pages/copy-to-clipboard.adoc deleted file mode 100644 index 0eaf058..0000000 --- a/antora-default-ui/docs/modules/ROOT/pages/copy-to-clipboard.adoc +++ /dev/null @@ -1,48 +0,0 @@ -= Copy to clipboard - -This page describes the copy to clipboard feature added to source blocks when using the default UI. - -== Source blocks - -The default UI provides JavaScript that adds a clipboard button to all source blocks. -The clipboard button shows up next to the language label when the mouse is hovered over the block. -When the user clicks the clipboard button, the contents of the source block will be copied to the user's clipboard. - -You can try this behavior below: - -[,ruby] ----- -puts 'Take me to your clipboard!' ----- - -IMPORTANT: Copy to clipboard only works for a local site or if the site is hosted over https (SSL). -The copy to clipboard does not work on an insecure site (http) since the clipboard API is not available in that environment. -In that case, the behavior gracefully degrades so the user will not see the clipboard button or an error. - -== Console blocks - -The default UI also adds a clipboard button to all console blocks. -A console block is either a literal paragraph that begins with a `$` or a source block with the language `console`. - -The script provided by the default UI will automatically strip the `$` prompt at the beginning of each line and join the lines with `&&`. -In <>, since the language is `console` and each line begins with a `$`, the console copy-paste logic is triggered. - -.Copy to clipboard for a multi-line console command -[#ex-console-copy-paste] ------- -[,console] ----- -$ mkdir example -$ cd example ----- ------- - -When a user uses the copy-to-clipboard button, they will copy the combined command `mkdir example && cd example` instead of the literal text shown. -This can be useful for tutorial examples that a user is expected to copy-paste to run. -You can try this behavior below: - -[,console] ----- -$ mkdir example -$ cd example ----- diff --git a/antora-default-ui/gulp.d/tasks/pack.js b/antora-default-ui/gulp.d/tasks/pack.js deleted file mode 100644 index a792e72..0000000 --- a/antora-default-ui/gulp.d/tasks/pack.js +++ /dev/null @@ -1,11 +0,0 @@ -'use strict' - -const vfs = require('vinyl-fs') -const zip = require('gulp-vinyl-zip') -const path = require('path') - -module.exports = (src, dest, bundleName, onFinish) => () => - vfs - .src('**/*', { base: src, cwd: src }) - .pipe(zip.dest(path.join(dest, `${bundleName}-bundle.zip`))) - .on('finish', () => onFinish && onFinish(path.resolve(dest, `${bundleName}-bundle.zip`))) diff --git a/antora-default-ui/src/partials/toolbar.hbs b/antora-default-ui/src/partials/toolbar.hbs deleted file mode 100644 index c6e9ea6..0000000 --- a/antora-default-ui/src/partials/toolbar.hbs +++ /dev/null @@ -1,13 +0,0 @@ - diff --git a/antora-default-ui/.editorconfig b/antora-ui-default/.editorconfig similarity index 100% rename from antora-default-ui/.editorconfig rename to antora-ui-default/.editorconfig diff --git a/antora-default-ui/.eslintrc b/antora-ui-default/.eslintrc similarity index 61% rename from antora-default-ui/.eslintrc rename to antora-ui-default/.eslintrc index fc50489..fa994a2 100644 --- a/antora-default-ui/.eslintrc +++ b/antora-ui-default/.eslintrc @@ -8,7 +8,12 @@ "imports": "always-multiline", "exports": "always-multiline" }], + "no-restricted-properties": ["error", { + "property": "substr", + "message": "Use String#slice instead." + }], "max-len": [1, 120, 2], - "spaced-comment": "off" + "spaced-comment": "off", + "radix": ["error", "always"] } } diff --git a/antora-default-ui/.gitignore b/antora-ui-default/.gitignore similarity index 100% rename from antora-default-ui/.gitignore rename to antora-ui-default/.gitignore diff --git a/antora-default-ui/.gitlab-ci.yml b/antora-ui-default/.gitlab-ci.yml similarity index 100% rename from antora-default-ui/.gitlab-ci.yml rename to antora-ui-default/.gitlab-ci.yml diff --git a/antora-default-ui/.gulp.json b/antora-ui-default/.gulp.json similarity index 100% rename from antora-default-ui/.gulp.json rename to antora-ui-default/.gulp.json diff --git a/antora-default-ui/.nvmrc b/antora-ui-default/.nvmrc similarity index 100% rename from antora-default-ui/.nvmrc rename to antora-ui-default/.nvmrc diff --git a/antora-default-ui/.stylelintrc b/antora-ui-default/.stylelintrc similarity index 100% rename from antora-default-ui/.stylelintrc rename to antora-ui-default/.stylelintrc diff --git a/antora-default-ui/LICENSE b/antora-ui-default/LICENSE similarity index 100% rename from antora-default-ui/LICENSE rename to antora-ui-default/LICENSE diff --git a/antora-default-ui/README.adoc b/antora-ui-default/README.adoc similarity index 100% rename from antora-default-ui/README.adoc rename to antora-ui-default/README.adoc diff --git a/antora-default-ui/docs/antora.yml b/antora-ui-default/docs/antora.yml similarity index 100% rename from antora-default-ui/docs/antora.yml rename to antora-ui-default/docs/antora.yml diff --git a/antora-ui-default/docs/modules/ROOT/examples/latest-release-notes.js b/antora-ui-default/docs/modules/ROOT/examples/latest-release-notes.js new file mode 100644 index 0000000..18f9f8d --- /dev/null +++ b/antora-ui-default/docs/modules/ROOT/examples/latest-release-notes.js @@ -0,0 +1,93 @@ +'use strict' + +module.exports = (numOfItems, { data }) => { + const { contentCatalog, site } = data.root + if (!contentCatalog) return + const rawPages = getDatedReleaseNotesRawPages(contentCatalog) + const pageUiModels = turnRawPagesIntoPageUiModels(site, rawPages, contentCatalog) + return getMostRecentlyUpdatedPages(pageUiModels, numOfItems) +} + +let buildPageUiModel + +function getDatedReleaseNotesRawPages (contentCatalog) { + return contentCatalog.getPages(({ asciidoc, out }) => { + if (!asciidoc || !out) return + return getReleaseNotesWithRevdate(asciidoc) + }) +} + +function getReleaseNotesWithRevdate (asciidoc) { + const attributes = asciidoc.attributes + return asciidoc.attributes && isReleaseNotes(attributes) && hasRevDate(attributes) +} + +function isReleaseNotes (attributes) { + return attributes['page-component-name'] === 'release-notes' +} + +function hasRevDate (attributes) { + return 'page-revdate' in attributes +} + +function turnRawPagesIntoPageUiModels (site, pages, contentCatalog) { + buildPageUiModel ??= module.parent.require('@antora/page-composer/build-ui-model').buildPageUiModel + return pages + .map((page) => buildPageUiModel(site, page, contentCatalog)) + .filter((page) => isValidDate(page.attributes?.revdate)) + .sort(sortByRevDate) +} + +function isValidDate (dateStr) { + return !isNaN(Date.parse(dateStr)) +} + +function sortByRevDate (a, b) { + return new Date(b.attributes.revdate) - new Date(a.attributes.revdate) +} + +function getMostRecentlyUpdatedPages (pageUiModels, numOfItems) { + return getResultList(pageUiModels, Math.min(pageUiModels.length, numOfItems)) +} + +function getResultList (pageUiModels, maxNumberOfPages) { + const resultList = [] + for (let i = 0; i < maxNumberOfPages; i++) { + const page = pageUiModels[i] + if (page.attributes?.revdate) resultList.push(getSelectedAttributes(page)) + } + return resultList +} + +function getSelectedAttributes (page) { + const latestVersion = getLatestVersion(page.contents.toString()) + return { + latestVersionAnchor: latestVersion?.anchor, + latestVersionName: latestVersion?.innerText, + revdateWithoutYear: removeYear(page.attributes?.revdate), + title: cleanTitle(page.title), + url: page.url, + } +} + +function getLatestVersion (contentsStr) { + const firstVersion = contentsStr.match(/

(.+?)<\/h2>/) + if (!firstVersion) return + const result = { anchor: firstVersion[1] } + if (isVersion(firstVersion[2])) result.innerText = firstVersion[2] + return result +} + +function isVersion (versionText) { + return /^[0-9]+\.[0-9]+(?:\.[0-9]+)?/.test(versionText) +} + +function removeYear (dateStr) { + if (!isValidDate(dateStr)) return + const dateObj = new Date(dateStr) + return `${dateObj.toLocaleString('default', { month: 'short' })} ${dateObj.getDate()}` +} + +function cleanTitle (title) { + return title.split('Release Notes')[0].trim() +} diff --git a/antora-default-ui/docs/modules/ROOT/pages/add-fonts.adoc b/antora-ui-default/docs/modules/ROOT/pages/add-fonts.adoc similarity index 98% rename from antora-default-ui/docs/modules/ROOT/pages/add-fonts.adoc rename to antora-ui-default/docs/modules/ROOT/pages/add-fonts.adoc index e4d2848..977551f 100644 --- a/antora-default-ui/docs/modules/ROOT/pages/add-fonts.adoc +++ b/antora-ui-default/docs/modules/ROOT/pages/add-fonts.adoc @@ -21,7 +21,7 @@ Here are the steps involved. . Use npm (or Yarn) to install the font files from a package (e.g., https://www.npmjs.com/package/typeface-open-sans[typeface-open-sans]) - $ npm install --save typeface-open-sans + $ npm i --save typeface-open-sans . In [.path]_src/css_, add a corresponding CSS file (e.g., [.path]_typeface-open-sans.css_) . In that file, declare the font face: @@ -64,7 +64,7 @@ TIP: If you're building on the default UI, you may instead want to define or upd . Test the new font by previewing your UI: - $ gulp preview + $ npx gulp preview If you see the new font, you've now successfully added it to your UI. If you aren't sure, look for the https://developer.mozilla.org/en-US/docs/Tools/Page_Inspector/How_to/Edit_fonts[All fonts on page] section in your browser's developer tools to see whether the font was loaded. @@ -117,7 +117,7 @@ TIP: If you're building on the default UI, you may instead want to define or upd . Test the new font by previewing your UI: - $ gulp preview + $ npx gulp preview If you see the new font, you've now successfully added it to your UI. If you aren't sure, look for the https://developer.mozilla.org/en-US/docs/Tools/Page_Inspector/How_to/Edit_fonts[All fonts on page] section in your browser's developer tools to see whether the font was loaded. diff --git a/antora-ui-default/docs/modules/ROOT/pages/add-static-files.adoc b/antora-ui-default/docs/modules/ROOT/pages/add-static-files.adoc new file mode 100644 index 0000000..0f07416 --- /dev/null +++ b/antora-ui-default/docs/modules/ROOT/pages/add-static-files.adoc @@ -0,0 +1,227 @@ += Add Static Files + +A static UI file is any file provided by the UI that's copied directly to your site. +A common example of a static file is a favicon image. +One way to add additional static files is by using the xref:antora:playbook:ui-supplemental-files.adoc[supplemental UI], which is defined in your Antora playbook. +This document explains how to add static files from the UI bundle instead. +A key benefit of putting static files in the UI bundle is that they can be shared across multiple projects instead of having to add them per project using the supplemental UI. + +== How Antora identifies static UI files + +Antora recognizes a number of non-publishable files and folders at the top level of a UI bundle. +This list consists of the folders [.path]_helpers_, [.path]_layouts_, and [.path]_partials_ and the optional [.path]_ui.yml_ file. +Although these files and folders are present in the UI bundle, they are not copied into the site's output directory. +In other words, they are _not_ static files. +Instead, they're used to compose the HTML pages that are published or for configuration. + +Any files or folders from the UI bundle that Antora does not recognize are classified as static. +Static files and folders are automatically copied from the UI bundle to the site's output directory underneath the UI output directory (e.g., [.path]_++_++_), preserving the relative path of the file from the UI bundle. +Any files or folders that begin with a dot (i.e., hidden) are ignored unless explicitly listed as static files. + +Antora's default UI already has several intrinsic static folders. +This list includes the [.path]_css_, [.path]_font_ (generated), [.path]_img_, and [.path]_js_ folders. + +Although not used in the default UI, the UI build also recognizes another static folder named [.path]_src/static_. +If the UI build finds any files inside this folder, including any files that are nested, it copies them directly to the root of the UI bundle, preserving any subfolders. + +Let's take advantage of this feature to add several new static files to the UI bundle. +First, create a folder under [.path]_src_ named [.path]_static_: + + $ mkdir src/static + +Let's now add several files, including one that is hidden, to the [.path]_src/static_ folder. +Here's a file tree that shows the location of these new files: + +.... +src/ + static/ + about/ + notice.txt + .DS_Store + favicon.ico + favicon.png +.... + +Let's now consider how static files flow from the UI project to the published site. +We'll start with where these files reside within the UI project (non-static files not shown here): + +.UI project +.... +src/ + ... + css/ + ... + img/ + back.svg + ... + js/ + ... + static/ + about/ + notice.txt + .DS_Store + favicon.ico + favicon.png +.... + +The UI build will assemble the files into the UI bundle as follows: + +.Contents of UI bundle +.... +... +css/ + site.css +font/ + roboto-latin-400-italic.woff + ... +img/ + back.svg + ... +js/ + site.js +about/ + notice.txt +.DS_Store +favicon.ico +favicon.png +.... + +NOTE: The [.path]_font_ folder is introduced by the UI build. + +When using this UI bundle in an Antora build, the contents of the output directory of your site will look like this: + +.Contents of site output directory +.... +_/ + css/ + site.css + font/ + roboto-latin-400-italic.woff + ... + img/ + back.svg + ... + js/ + site.js + about/ + notice.txt + favicon.ico + favicon.png +component-a/ + ... +sitemap.xml +... +.... + +As stated earlier, static files are copied to the UI output directory (e.g., [.path]_++_++_) in the published site by default. +In this directory, we see the [.path]_css_, [.path]_font_, [.path]_img_ and [.path]_js_ folders, all static folders provided by the default UI. +We also see the [.path]_about_ folder and the favicon files we added to the UI project in the first step. +We do not see the [.path]_helpers_, [.path]_partials_, and [.path]_layouts_ folders since they're not static files. +We also don't see the [.path]_.DS_Store_ file since it's a hidden file. + +If the UI output directory is where you want static files to end up, there's nothing else you have to do. +If you want all or some of the static files to be moved to the site root, you need to add additional configuration to promote them. + +== Promote static files + +If you want to promote certain static files to the root of your site, you need to identify them. +You identify them using the [.path]_ui.yml_ file. +This file, called the UI descriptor, is used to configure the behavior of the UI. +The UI descriptor must be located at the root of the UI bundle. + +The UI descriptor has one required key, `static_files`, which is the one we're interested in. +The `static_files` key identifies files that should be promoted from the UI output directory to the site root (i.e., the site output directory). +The files you want to promote must be specified as an array, where each entry is either an exact relative path or a glob of relative paths in the UI bundle. +The exact path or path glob must match files, not folders. +Unlike implicit static files, promoted static files can begin with a dot (and are thus not ignored). + +To configure static files to promote, start by creating the file [.path]_src/ui.yml_ in your UI project. +If this file exists, the UI build will copy the file from there to the root of the UI bundle. + +Next, add the `static_files` key to this file and add an entry for the [.path]_favicon.ico_ file. +This entry will configure the UI to promote the favicon to the site root. + +.src/ui.yml +[,yaml] +---- +static_files: +- favicon.ico +---- + +If you have multiple favicon files with different suffixes or file extensions, you can match all of them using a wildcard (aka glob). + +.src/ui.yml +[,yaml] +---- +static_files: +- favicon* +---- + +With this configuration in place, Antora will read the favicon images from the UI bundle and copy them to the root of the site. +Static files that are not identified are still copied to UI output directory. +The result of the above [.path]_ui.yml_ would be the following: + +.Contents of site output directory +.... +_/ + css/ + site.css + font/ + roboto-latin-400-italic.woff + ... + img/ + back.svg + ... + js/ + site.js + about/ + notice.txt +component-a/ +favicon.ico +favicon.png + ... +sitemap.xml +... +.... + +Notice that the promoted favicon files are now at the site root rather than inside the UI output directory. +However, the [.path]_about_ folder is still inside the UI output directory. +Let's promote that one as well. + +You can identify all files in a folder using the wildcard `+*+` in the last path segment, such as `+folder/*+`. +You can identify all files in a folder at any depth using the wildcard `+**+` in the last path segment, such as `+folder/**+`. +Matching a folder has no effect (e.g., `folder`). +Wildcards never match hidden files. +Hidden files must always be written using an exact path match. + +Let's also promote all files in the [.path]_about_ folder by adding the wildcard match the `static_files` key in the [.path]_ui.yml_ file. + +.src/ui.yml +.... +static_files: +- favicon* +- about/* +.... + +Using this configuration, the [.path]_about_ folder will end up at the site root, adjacent to the favicon files, instead of inside the UI output directory. +Notice that the [.path]_about_ folder is copied too, not just its contents. + +Now that the static files are where you want them, let's look at how to reference them from the HTML pages. + +== Use the static files + +Often when you add static files to your site, you need to reference them somewhere. +In the case of a favicon image, it must be referenced in the `` of the HTML page. +If you are referencing a promoted static file, you'll use the prefix `+{{{siteRootPath}}}+`. +Otherwise, you'll use the prefix `+{{{uiRootPath}}}+`. + +Let's update the [.path]_src/partials/head-icons.hbs_ partial to reference a promoted favicon image at the root of the site. + +.src/partials/head-icons.hbs +[,yaml,indent=4] +---- + +---- + +Rebuild the UI with `gulp bundle`. +You should now see that your site has a favicon image that's provided by the UI bundle. diff --git a/antora-default-ui/docs/modules/ROOT/pages/admonition-styles.adoc b/antora-ui-default/docs/modules/ROOT/pages/admonition-styles.adoc similarity index 100% rename from antora-default-ui/docs/modules/ROOT/pages/admonition-styles.adoc rename to antora-ui-default/docs/modules/ROOT/pages/admonition-styles.adoc diff --git a/antora-default-ui/docs/modules/ROOT/pages/build-preview-ui.adoc b/antora-ui-default/docs/modules/ROOT/pages/build-preview-ui.adoc similarity index 96% rename from antora-default-ui/docs/modules/ROOT/pages/build-preview-ui.adoc rename to antora-ui-default/docs/modules/ROOT/pages/build-preview-ui.adoc index f55cdd7..7f1f0c6 100644 --- a/antora-default-ui/docs/modules/ROOT/pages/build-preview-ui.adoc +++ b/antora-ui-default/docs/modules/ROOT/pages/build-preview-ui.adoc @@ -20,7 +20,7 @@ The next two sections explain how to use these modes. To build the UI once for preview, then stop, execute the following command: - $ gulp preview:build + $ npx gulp preview:build This task pre-compiles the UI files into the [.path]_public_ directory. To view the preview pages, navigate to the HTML pages in the [.path]_public_ directory using your browser (e.g., [.path]_public/index.html_). @@ -32,7 +32,7 @@ This task also launches a local HTTP server so updates get synchronized with the To launch the preview server, execute the following command: - $ gulp preview + $ npx gulp preview You'll see a URL listed in the output of this command: @@ -53,7 +53,7 @@ Press kbd:[Ctrl+C] to stop the preview server and end the continuous build. If you need to bundle the UI in order to preview the UI on the real site in local development, run the following command: - $ gulp bundle + $ npx gulp bundle The `bundle` command also invokes the `lint` command to check that the CSS and JavaScript follow the coding standards. @@ -62,6 +62,6 @@ You can then point Antora at this bundle using the `--ui-bundle-url` command-lin If you have the preview running, and you want to bundle without causing the preview to be clobbered, use: - $ gulp bundle:pack + $ npx gulp bundle:pack The UI bundle will again be available at [.path]_build/ui-bundle.zip_. diff --git a/antora-ui-default/docs/modules/ROOT/pages/code-blocks.adoc b/antora-ui-default/docs/modules/ROOT/pages/code-blocks.adoc new file mode 100644 index 0000000..b334b3d --- /dev/null +++ b/antora-ui-default/docs/modules/ROOT/pages/code-blocks.adoc @@ -0,0 +1,92 @@ += Code Blocks +:page-aliases: copy-to-clipboard.adoc + +This page describes some of the styles and behaviors of code blocks and how to support them in a custom UI. + +In AsciiDoc, code blocks a referred to as source and listing blocks. +A source block is a listing block that has a source language defined on it (e.g., javascript). +Refer to xref:antora:asciidoc:source.adoc[source blocks] to learn more about source blocks in AsciiDoc and how they are used in Antora. + +Readers typically expect that a source block will be presented with syntax highlighting, so we'll start there. + +== Syntax highlighting + +Antora uses highlight.js as syntax highlighter in the AsciiDoc processor by default. + +If you want to turn off syntax highlighting, you can do so by unsetting the `source-highlighter` attribute in the Antora playbook. + +[,yaml] +---- +asciidoc: + attributes: + source-highlighter: ~ +---- + +If you soft unset the value instead (i.e., set the value to `false`), it allows individual pages to selectively turn syntax highlighting back on. + +By default, Antora highlights a restricted set of languages in order to minimize the size of the supporting asset files. +However, you can add or remove support for languages in your own UI bundle. +To do so, follow these steps: + +. Switch to your UI project. +. Open the file [.path]_src/js/vendor/highlight.bundle.js_. +. Add or remove one of the `registerLanguage` statements. + +For example, to add AsciiDoc syntax highlighting, add the following line: + +[,js] +---- + hljs.registerLanguage('asciidoc', require('highlight.js/lib/languages/asciidoc')) +---- + +Keep in mind, the language must be supported by highlight.js. +To find out what languages are supported and how to abbreviate them, set the https://github.com/highlightjs/highlight.js/tree/9-18-stable/src/languages[languages] folder in the project on GitHub. + +== Copy to clipboard + +This page describes the copy to clipboard feature added to source blocks when using the default UI. + +=== Source blocks + +The default UI automatically adds a clipboard button to all source blocks and provides the necesssary CSS and JavaScript to support that behavior. +The clipboard button shows up next to the language label when the mouse is hovered over the block. +When the user clicks the clipboard button, the contents of the source block will be copied to the user's clipboard and a notification overlay will be briefly shown. + +You can try this behavior below: + +[,ruby] +---- +puts 'Take me to your clipboard!' +---- + +IMPORTANT: Copy to clipboard only works for a local site or if the site is hosted over https (SSL). +The copy to clipboard does not work on an insecure site (http) since the clipboard API is not available in that environment. +In that case, the behavior gracefully degrades so the user will not see the clipboard button or an error. + +=== Console blocks + +The default UI also adds a clipboard button to all console blocks. +A console block is either a literal paragraph that begins with a `$` or a source block with the language `console`. + +The script provided by the default UI will automatically strip the `$` prompt at the beginning of each line and join the lines with `&&`. +In <>, since the language is `console` and each line begins with a `$`, the console copy-paste logic is triggered. + +.Copy to clipboard for a multi-line console command +[#ex-console-copy-paste] +------ +[,console] +---- +$ mkdir example +$ cd example +---- +------ + +When a user uses the copy-to-clipboard button, they will copy the combined command `mkdir example && cd example` instead of the literal text shown. +This can be useful for tutorial examples that a user is expected to copy-paste to run. +You can try this behavior below: + +[,console] +---- +$ mkdir example +$ cd example +---- diff --git a/antora-default-ui/docs/modules/ROOT/pages/create-helper.adoc b/antora-ui-default/docs/modules/ROOT/pages/create-helper.adoc similarity index 92% rename from antora-default-ui/docs/modules/ROOT/pages/create-helper.adoc rename to antora-ui-default/docs/modules/ROOT/pages/create-helper.adoc index dfdb142..d9199be 100644 --- a/antora-default-ui/docs/modules/ROOT/pages/create-helper.adoc +++ b/antora-ui-default/docs/modules/ROOT/pages/create-helper.adoc @@ -175,3 +175,23 @@ This can impact performance. If it's called on every page in your site, be sure that the operation is efficient to avoid slowing down site generation. As an alternative to using a helper, you may want to consider whether writing an Antora extension is a better option. + +== Find latest release notes + +Here's another example of a helper that finds the latest release notes in a component named `release-notes`. + +[,js] +---- +include::example$latest-release-notes.js[] +---- + +Here's how might use it to create a list of release notes. + +[,hbs] +---- + +---- diff --git a/antora-default-ui/docs/modules/ROOT/pages/development-workflow.adoc b/antora-ui-default/docs/modules/ROOT/pages/development-workflow.adoc similarity index 100% rename from antora-default-ui/docs/modules/ROOT/pages/development-workflow.adoc rename to antora-ui-default/docs/modules/ROOT/pages/development-workflow.adoc diff --git a/antora-ui-default/docs/modules/ROOT/pages/image-styles.adoc b/antora-ui-default/docs/modules/ROOT/pages/image-styles.adoc new file mode 100644 index 0000000..242dcc7 --- /dev/null +++ b/antora-ui-default/docs/modules/ROOT/pages/image-styles.adoc @@ -0,0 +1,59 @@ += Image Styles +:navtitle: Images + +This page describes how images in the content are styled and how to customize these styles. +It covers both block and inline images, which are styled differently. + +[#size] +== Image size + +If a width is not specified on the image macro, the image will be sized to match its intrinsic width. +However, if that width exceeds the available width (i.e., the width of the content area), the image's width will be capped to fit the available space (`max-width: 100%`). + +If the image is an SVG, and a width is not specified on the image macro or on the root tag in the SVG, the image will use the maximum width available (i.e., the width of the content area). + +The image's height is not used when sizing the image. +However, the aspect ratio of the image is preserved. + +[#block-position] +== Block image position + +By default, a block image is centered within the content area of the page. +If the block has a caption, that caption will also be centered under the image, but the text will be left-aligned. +The caption may exceed the width of the image. + +If you want the image and its caption to be aligned to the left side of the content, add the `text-left` role to the image block. + +[,asciidoc] +---- +[.text-left] +image::my-image.png[] +---- + +If you want the image and its caption to be aligned to the right side of the content, add the `text-right` role to the image block. + +[,asciidoc] +---- +[.text-left] +image::my-image.png[] +---- + +Applying the `text-right` role also flips the text alignment of the caption to right-aligned. + +== Float an image + +You can float either a block or inline image to the left or right using the `float` attribute. +When an image is configured to float, the content that follows it will wrap around it (on the opposing side) until that content clears the bottom of the image. + +Typically, you use the `float` property with an inline image since you can control when the floating starts relative to the surrounding content. + +[,asciidoc] +---- +image:subject.png[Subject,250,float=right] +This paragraph can refer to the image on the right. +---- + +If you use `float` on a block image, it overrides its default positioning (it will be aligned in the direction of the float). + +Using float implies that the image occupies less than the width of the content area. +If, on the other hand, it extends from margin to margin, than it ceases to function as a float. diff --git a/antora-default-ui/docs/modules/ROOT/pages/index.adoc b/antora-ui-default/docs/modules/ROOT/pages/index.adoc similarity index 97% rename from antora-default-ui/docs/modules/ROOT/pages/index.adoc rename to antora-ui-default/docs/modules/ROOT/pages/index.adoc index 1d97ef3..4a9a41d 100644 --- a/antora-default-ui/docs/modules/ROOT/pages/index.adoc +++ b/antora-ui-default/docs/modules/ROOT/pages/index.adoc @@ -1,4 +1,4 @@ -= Antora Default UI += Antora Default UI Documentation // Settings: :hide-uri-scheme: // URLs: @@ -54,6 +54,11 @@ npm manages software packages (i.e., software dependencies) that it downloads fr Software this project uses includes libraries that handle compilation as well as shared assets such as font files that are distributed as npm packages. npm is part of Node.js. +npx (command: `npx`):: +npx runs bin scripts that are either installed in [.path]_node_modules/.bin_ or that it manages itself (if there's no package.json). +npx is the preferred way to run any command. +npx is part of Node.js. + package.json::: This file keeps track of the dependencies (described using fuzzy versions) that npm (or Yarn) should fetch. diff --git a/antora-default-ui/docs/modules/ROOT/pages/inline-text-styles.adoc b/antora-ui-default/docs/modules/ROOT/pages/inline-text-styles.adoc similarity index 100% rename from antora-default-ui/docs/modules/ROOT/pages/inline-text-styles.adoc rename to antora-ui-default/docs/modules/ROOT/pages/inline-text-styles.adoc diff --git a/antora-default-ui/docs/modules/ROOT/pages/list-styles.adoc b/antora-ui-default/docs/modules/ROOT/pages/list-styles.adoc similarity index 100% rename from antora-default-ui/docs/modules/ROOT/pages/list-styles.adoc rename to antora-ui-default/docs/modules/ROOT/pages/list-styles.adoc diff --git a/antora-default-ui/docs/modules/ROOT/pages/prerequisites.adoc b/antora-ui-default/docs/modules/ROOT/pages/prerequisites.adoc similarity index 77% rename from antora-default-ui/docs/modules/ROOT/pages/prerequisites.adoc rename to antora-ui-default/docs/modules/ROOT/pages/prerequisites.adoc index 0b6571b..64df89b 100644 --- a/antora-default-ui/docs/modules/ROOT/pages/prerequisites.adoc +++ b/antora-ui-default/docs/modules/ROOT/pages/prerequisites.adoc @@ -10,9 +10,9 @@ An Antora UI project is based on tools built atop Node.js, namely: -* {url-node}[Node.js] (commands: `node` and `npm`) +* {url-node}[Node.js] (commands: `node`, `npm`, and `npx`) ** {url-nvm}[nvm] (optional, but strongly recommended) -* {url-gulp}[Gulp CLI] (command: `gulp`) +* {url-gulp}[Gulp CLI] (command: `gulp`) (can be accessed via `npx gulp`) You also need {url-git}[git] (command: `git`) to pull down the project and push updates to it. @@ -47,10 +47,16 @@ Once you have Node.js installed, you can proceed with installing the Gulp CLI. == Gulp CLI -Next, you'll need the Gulp CLI (aka wrapper). +Next, you may choose to install the Gulp CLI globally. This package provides the `gulp` command which executes the version of Gulp declared by the project. -You should install the Gulp CLI globally (which resolves to a location in your user directory if you're using nvm) using the following command: +You can install the Gulp CLI globally (which resolves to a location in your user directory if you're using nvm) using the following command: - $ npm install -g gulp-cli + $ npm i -g gulp-cli + +Alternately, you can run the `gulp` command using `npx` once you've installed the project dependencies, thus waiving the requirement to install it globally. + + $ npx gulp + +Using `npx gulp` is the preferred way to invoke the `gulp` command. Now that you have Node.js and Gulp installed, you're ready to set up the project. diff --git a/antora-default-ui/docs/modules/ROOT/pages/set-up-project.adoc b/antora-ui-default/docs/modules/ROOT/pages/set-up-project.adoc similarity index 84% rename from antora-default-ui/docs/modules/ROOT/pages/set-up-project.adoc rename to antora-ui-default/docs/modules/ROOT/pages/set-up-project.adoc index 03b7ed1..8c9fcdd 100644 --- a/antora-default-ui/docs/modules/ROOT/pages/set-up-project.adoc +++ b/antora-ui-default/docs/modules/ROOT/pages/set-up-project.adoc @@ -23,9 +23,9 @@ That's the job of npm. In your terminal, execute the following command (while inside the project folder): - $ npm install + $ npm i -This command installs the dependencies listed in [.path]_package.json_ into the [.path]_node_modules/_ folder inside the project. +The `npm i` command, short for `npm install`, installs the dependencies listed in [.path]_package.json_ into the [.path]_node_modules/_ folder inside the project. This folder does not get included in the UI bundle. The folder is safe to delete, though npm does a great job of managing it. @@ -33,14 +33,19 @@ You'll notice another file which seems to be relevant here, [.path]_package-lock npm uses this file to determine which concrete version of a dependency to use, since versions in [.path]_package.json_ are typically just a range. The information in this file makes the build reproducible across different machines and runs. -If a new dependency must be resolved that isn't yet listed in [.path]_package-lock.json_, npm will update this file with the new information when you run `npm install`. +Installing the dependencies makes the `npx gulp` command available. +You can verify this by querying the Gulp version: + + $ npx gulp -v + +If a new dependency must be resolved that isn't yet listed in [.path]_package-lock.json_, npm will update this file with the new information when you run `npm i`. Therefore, you're advised to commit the [.path]_package-lock.json_ file into the repository whenever it changes. == Supported build tasks Now that the dependencies are installed, you should be able to run the `gulp` command to find out what tasks the build supports: - $ gulp --tasks-simple + $ npx gulp --tasks-simple You should see: diff --git a/antora-default-ui/docs/modules/ROOT/pages/sidebar-styles.adoc b/antora-ui-default/docs/modules/ROOT/pages/sidebar-styles.adoc similarity index 100% rename from antora-default-ui/docs/modules/ROOT/pages/sidebar-styles.adoc rename to antora-ui-default/docs/modules/ROOT/pages/sidebar-styles.adoc diff --git a/antora-default-ui/docs/modules/ROOT/pages/style-guide.adoc b/antora-ui-default/docs/modules/ROOT/pages/style-guide.adoc similarity index 75% rename from antora-default-ui/docs/modules/ROOT/pages/style-guide.adoc rename to antora-ui-default/docs/modules/ROOT/pages/style-guide.adoc index 24c245e..e1559ed 100644 --- a/antora-default-ui/docs/modules/ROOT/pages/style-guide.adoc +++ b/antora-ui-default/docs/modules/ROOT/pages/style-guide.adoc @@ -1,7 +1,7 @@ -= UI Element Style Guide -:navtitle: UI Element Styles += UI Element Style and Behavior Guide +:navtitle: UI Element Styles and Behaviors -When creating a UI theme for Antora, there are certain elements in the UI that require support from the CSS to work correctly. +When creating a UI theme for Antora, there are certain elements in the UI that require support from the CSS--as well as JavaScript in some cases--to work correctly. This list includes elements in the shell (i.e., frame) and in the document content. This document identifies these UI elements. @@ -21,3 +21,4 @@ These elements include: * xref:list-styles.adoc[Lists] * xref:sidebar-styles.adoc[Sidebars] * xref:ui-macro-styles.adoc[Button, keybinding, and menu UI macros] +* xref:code-blocks.adoc[Code blocks] diff --git a/antora-default-ui/docs/modules/ROOT/pages/stylesheets.adoc b/antora-ui-default/docs/modules/ROOT/pages/stylesheets.adoc similarity index 66% rename from antora-default-ui/docs/modules/ROOT/pages/stylesheets.adoc rename to antora-ui-default/docs/modules/ROOT/pages/stylesheets.adoc index aff5316..b2f1a9a 100644 --- a/antora-default-ui/docs/modules/ROOT/pages/stylesheets.adoc +++ b/antora-ui-default/docs/modules/ROOT/pages/stylesheets.adoc @@ -8,7 +8,11 @@ These stylesheets utilize CSS variables to keep the CSS DRY and easy to customiz Within the default UI project, the stylesheet files are separated into modules to help organize the rules and make them easier to find. The UI build combines and minifies these files into a single file named [.path]_site.css_. During the build, the CSS is enhanced using PostCSS in much the same way as a CSS preprocessor works, only the modifications are made to the CSS directly. -The modifications mostly center around injecting vendor prefixes for compatibility or backporting new features to more broadly supported syntax. +The modifications mostly revolve around injecting vendor prefixes for compatibility or backporting new features to more broadly supported syntax. + +NOTE: An Antora UI provides its own styles. +While these styles are expected to support any roles defined in the AsciiDoc Language documentation, it does not provide all the selectors found in the Asciidoctor default stylesheet. +If there's a selector that the Asciidoctor default stylesheet provides that you need in your Antora site, you'll need to add it to the CSS for your own UI. == Add a new CSS rule diff --git a/antora-ui-default/docs/modules/ROOT/pages/template-customization.adoc b/antora-ui-default/docs/modules/ROOT/pages/template-customization.adoc new file mode 100644 index 0000000..6377746 --- /dev/null +++ b/antora-ui-default/docs/modules/ROOT/pages/template-customization.adoc @@ -0,0 +1,96 @@ += Template Customization + +The default UI bundle can be customized using AsciiDoc attributes. +xref:templates.adoc[] explains how to access such attributes. +But what are the attributes that actually used by the templates. +If you're going to use the default UI bundle for your project, you'll want to know. + +== page-role attribute + +The `page-role` attribute is typically defined per-page. +This attribute is used to add one or more space-separated classes to the `` tag of that page. + +A common use of the `page-role` attribute is to label the home page. + +[,asciidoc] +---- += Home +:page-role: home + +This is the home page. +---- + +//// +Alternately, the role can be set on the document itself. + +[,asciidoc] +---- +[.home] += Home + +This is the home page. +---- +//// + +The resulting HTML will include the following `` start tag: + +[,html] +---- + +---- + +The stylesheet can now take advantage of this identity to assign styles to pages that have a given role. +For example, the home page often requires a different appearance. +Being able to target that page with CSS allows UI developers to apply that customization. + +Note that the UI templates could make use of the page role in other ways. +The default UI currently only appends the value to the `class` attribute on the `` tag. + +=== Hide the TOC sidebar + +The one reserved page role that the default UI recognizes is `-toc`. +This role instructs the site script to remove (i.e., hide) the TOC sidebar. +Here's how to set it. + +[,asciidoc] +---- += Page Title +:page-role: -toc + +The TOC sidebar is not displayed even though this page has sections. + +== First Section + +== Second Section +---- + +The AsciiDoc `toc` attribute controls whether the TOC is rendered in the *body* of the article. +Since the default UI provides an alternate TOC, you most likely don't want to activate the built-in TOC functionality in AsciiDoc when using Antora. + +== page-pagination attribute + +The `page-pagination` attribute is set in your xref:antora:playbook:asciidoc-attributes.adoc[playbook] in order to enable pagination, if your UI bundle supports it. +The default UI bundle supports this and you'll get the links to previous and next pages at the bottom of every page, based your navigation. + +.Enable pagination +[,yaml] +---- +asciidoc: + attributes: + page-pagination: '' +---- + +Antora automatically calculates the appropriate URLs and inserts the correct links. + +Since you most likely want this enabled for every page in your site, there's no point setting this attribute per page. +However, if you do want to be able to override it per page, such as to turn it off, then you need to soft set the value in the playbook. + +.Enable pagination, but make it overriddable +[,yaml] +---- +asciidoc: + attributes: + page-pagination: '@' +---- + +You can now turn page pagination off by unsetting the `page-pagination` attribute in the document header. diff --git a/antora-default-ui/docs/modules/ROOT/pages/templates.adoc b/antora-ui-default/docs/modules/ROOT/pages/templates.adoc similarity index 64% rename from antora-default-ui/docs/modules/ROOT/pages/templates.adoc rename to antora-ui-default/docs/modules/ROOT/pages/templates.adoc index 5cb9257..25bf1fc 100644 --- a/antora-default-ui/docs/modules/ROOT/pages/templates.adoc +++ b/antora-ui-default/docs/modules/ROOT/pages/templates.adoc @@ -37,6 +37,8 @@ s| [[site]]site | site.url | The base URL of the site, if specified in the playbook. If a site start page is defined, the visitor will be redirected from this location to the start page. +Includes the value of `site.path`. +Can be prepended to `page.url` to create an absolute URL for a page (e.g., `+{{{site.url}}}{{{page.url}}}+`). | site.path | The pathname (i.e., subpath) of the site.url under which the site is hosted (e.g., /docs). @@ -132,8 +134,8 @@ Each navigation item contains the property `content` as well as the optional pro | page.url | The URL for the current page. -This value is a root-relative path. -It's often used as the base URL to generate relative URLs from this page. +This URL is a root-relative path (i.e., it begins with `/`), where root refers to where Antora published the files. +The value is most often used by the `relativize` helper to generate relative URLs from this page. | page.canonicalUrl | The canonical URL for the current page. @@ -220,3 +222,125 @@ Each template file has access to the template model, which exposes information a The variables currently available are listed in <>. Save the file, commit it to git, push the branch, and allow the approval workflow to play out. + +== Using built-in helpers + +Antora provides the following built-in template helpers: + +relativize:: Converts a root-relative URL to a URL path that is relative to the current page. +resolvePageURL:: Resolves the specified page from a page reference and returns the root-relative URL of that page. +resolvePage:: Resolves the specified page from a page reference, converts it to a UI page model (unless `model=false`), and returns it. + +These helpers are available in any Antora UI, not just the default UI. + +=== relativize + +Antora stores the URL of each publishable resource as a root-relative URL (i.e., /component/version/module/page.html). +The root in this case is the root of the site (the site URL). +Antora stores URLs in this way so they can be used to create a relative path from the current page to the target resource, independent of the site's configuration. +That's the purpose of the `relativize` helper in a template. + +.Why use relativize? +**** +By using relative paths for references, the site is not couple to the URL from which it is served. +That means the site can be moved around without breaking references. +It also means the site can be previewed locally without a web server. +**** + +You can find the `relativize` helper used throughout the templates in the default UI. +Here's an example that uses the `relativize` helper to create a relative link to the next page in the navigation. + +[,html] +---- +{{#with page.next}} +{{{./content}}} +{{/with}} +---- + +When creating a link to a URL within the site, you should always wrap it in the `relativize` helper. + +=== resolvePageURL + +If you want to create a link to another page in your template, you can use the `resolvePageURL` helper. +This helper resolves the specified page and returns the root-relative URL of that page. +It's the commplement of the xref macro in the AsciiDoc source. + +This helper accepts a page reference, just like the target of the xref macro. +Internally, this helper uses `ContentCatalog#resolvePage` to resolve the reference. +The reference will be resolved relative to the module of the page being composed unless broadened by an explicit module, version, or component segment. +However, since a template is often used by every page in the site, you almost always want this reference to be fully-qualified. + +For information about the syntax of a page reference, refer to xref:antora:page:resource-id-coordinates.adoc[resource reference] documentation. + +Here's an example that creates a link to another page using the `resolvePageURL` helper. + +[,html] +---- +Support +---- + +This helper also accepts a context object for specifying the module, version, and component, which can be useful when pages share a common naming pattern. + +[,html] +---- +Support +---- + +The disadvantage of the `resolvePageURL` helper is that it only returns the root-relative URL, not the model of the page. +If you need more information about the page, such as its title, you can use the `resolvePage` instead. + +=== resolvePage + +If you want to resolve another page in your template, perhaps to create a link to it, or perhaps to show some information from its model, you can use the `resolvePage` helper. +This helper resolves the specified page and returns the page model for that page. +//The page model is the same model used for the `page` variable in the template. +//In other words, this helper allows you to switch the context of the template to that of another page. + +This helper accepts a page reference. +Internally, this helper uses `ContentCatalog#resolvePage` to resolve the reference. + +Here's an example of how to use the `resolvePage` helper to make a link to another page, using the title of that page as the link text. + +[,html] +---- +{{#with (resolvePage 'about::support.adoc')}}{{{./title}}}{{/with}} +---- + +This helper also accepts a context object for specifying the module, version, and component, which can be useful when pages share a common naming pattern. + +[,html] +---- +{{#with (resolvePage 'support.adoc' component='about')}}{{{./title}}}{{/with}} +---- + +The object returned by the `resolvePage` helper is the UI page model, which is the same model used by the `page` variable. +You can use the `log` helper inspect the object that this helper returns. + +[,html] +---- +{{log (resolvePage 'about::support.adoc')}} +---- + +NOTE: The `resolvePage` helper is typically used inside a `with` block to switch the template's context to the resolved object. + +If you want the original virtual file as returned by `ContentCatalog#resolvePage`, you must set the `model=false` argument on the helper. +Among other things, this gives you access to all the document attributes associated with that page, not just the page attributes. + +[,html] +---- +{{#with (resolvePage 'program::policy-a.adoc' model=false)}} +{{{./asciidoc.xreftext}}} {{./asciidoc.attributes.next-review-date}} +{{/with}} +---- + +If you need to access the virtual file for the current page, you can do so as follows: + +[,html] +---- +{{#with (resolvePage page.relativeSrcPath model=false)}} +{{log ./asciidoc.attributes}} +{{/with}} +---- + +Currently, there is no equivalent helper for resolving a non-page resource, but that may be added in the future. +In the meantime, you could develop your own helper to provide that functionality. diff --git a/antora-default-ui/docs/modules/ROOT/pages/ui-macro-styles.adoc b/antora-ui-default/docs/modules/ROOT/pages/ui-macro-styles.adoc similarity index 100% rename from antora-default-ui/docs/modules/ROOT/pages/ui-macro-styles.adoc rename to antora-ui-default/docs/modules/ROOT/pages/ui-macro-styles.adoc diff --git a/antora-default-ui/gulp.d/lib/create-task.js b/antora-ui-default/gulp.d/lib/create-task.js similarity index 100% rename from antora-default-ui/gulp.d/lib/create-task.js rename to antora-ui-default/gulp.d/lib/create-task.js diff --git a/antora-default-ui/gulp.d/lib/export-tasks.js b/antora-ui-default/gulp.d/lib/export-tasks.js similarity index 100% rename from antora-default-ui/gulp.d/lib/export-tasks.js rename to antora-ui-default/gulp.d/lib/export-tasks.js diff --git a/antora-default-ui/gulp.d/lib/gulp-prettier-eslint.js b/antora-ui-default/gulp.d/lib/gulp-prettier-eslint.js similarity index 100% rename from antora-default-ui/gulp.d/lib/gulp-prettier-eslint.js rename to antora-ui-default/gulp.d/lib/gulp-prettier-eslint.js diff --git a/antora-default-ui/gulp.d/tasks/build-preview-pages.js b/antora-ui-default/gulp.d/tasks/build-preview-pages.js similarity index 97% rename from antora-default-ui/gulp.d/tasks/build-preview-pages.js rename to antora-ui-default/gulp.d/tasks/build-preview-pages.js index 364f561..7516e0d 100644 --- a/antora-default-ui/gulp.d/tasks/build-preview-pages.js +++ b/antora-ui-default/gulp.d/tasks/build-preview-pages.js @@ -53,7 +53,7 @@ module.exports = (src, previewSrc, previewDest, sink = () => map()) => (done) => uiModel.page.attributes = Object.entries(doc.getAttributes()) .filter(([name, val]) => name.startsWith('page-')) .reduce((accum, [name, val]) => { - accum[name.substr(5)] = val + accum[name.slice(5)] = val return accum }, {}) uiModel.page.layout = doc.getAttribute('page-layout', 'default') @@ -134,7 +134,7 @@ function transformHandlebarsError ({ message, stack }, layout) { const m = stack.match(/^ *at Object\.ret \[as (.+?)\]/m) const templatePath = `src/${m ? 'partials/' + m[1] : 'layouts/' + layout}.hbs` const err = new Error(`${message}${~message.indexOf('\n') ? '\n^ ' : ' '}in UI template ${templatePath}`) - err.stack = [err.toString()].concat(stack.substr(message.length + 8)).join('\n') + err.stack = [err.toString()].concat(stack.slice(message.length + 8)).join('\n') return err } diff --git a/antora-default-ui/gulp.d/tasks/build.js b/antora-ui-default/gulp.d/tasks/build.js similarity index 93% rename from antora-default-ui/gulp.d/tasks/build.js rename to antora-ui-default/gulp.d/tasks/build.js index 60a1da8..7ca7c76 100644 --- a/antora-default-ui/gulp.d/tasks/build.js +++ b/antora-ui-default/gulp.d/tasks/build.js @@ -17,8 +17,7 @@ const postcssVar = require('postcss-custom-properties') const { Transform } = require('stream') const map = (transform) => new Transform({ objectMode: true, transform }) const through = () => map((file, enc, next) => next(null, file)) -const terser = require('gulp-terser') -const terserConfig = { keep_fnames: true, mangle: false } +const uglify = require('gulp-uglify') const vfs = require('vinyl-fs') module.exports = (src, dest, preview) => () => { @@ -37,9 +36,9 @@ module.exports = (src, dest, preview) => () => { }), postcssUrl([ { - filter: new RegExp('^src/css/[~][^/]*(?:font|face)[^/]*/.*/files/.+[.](?:ttf|woff2?)$'), + filter: (asset) => new RegExp('^[~][^/]*(?:font|typeface)[^/]*/.*/files/.+[.](?:ttf|woff2?)$').test(asset.url), url: (asset) => { - const relpath = asset.pathname.substr(1) + const relpath = asset.pathname.slice(1) const abspath = require.resolve(relpath) const basename = ospath.basename(abspath) const destpath = ospath.join(dest, 'font', basename) @@ -63,13 +62,13 @@ module.exports = (src, dest, preview) => () => { vfs .src('js/+([0-9])-*.js', { ...opts, read: false, sourcemaps }) .pipe(bundle(opts)) - .pipe(terser(terserConfig)) + .pipe(uglify({ output: { comments: /^! / } })) // NOTE concat already uses stat from newest combined file .pipe(concat('js/site.js')), vfs - .src('js/vendor/*([^.])?(.bundle).js', { ...opts, read: false }) + .src('js/vendor/+([^.])?(.bundle).js', { ...opts, read: false }) .pipe(bundle(opts)) - .pipe(terser(terserConfig)), + .pipe(uglify({ output: { comments: /^! / } })), vfs .src('js/vendor/*.min.js', opts) .pipe(map((file, enc, next) => next(null, Object.assign(file, { extname: '' }, { extname: '.js' })))), diff --git a/antora-default-ui/gulp.d/tasks/format.js b/antora-ui-default/gulp.d/tasks/format.js similarity index 100% rename from antora-default-ui/gulp.d/tasks/format.js rename to antora-ui-default/gulp.d/tasks/format.js diff --git a/antora-default-ui/gulp.d/tasks/index.js b/antora-ui-default/gulp.d/tasks/index.js similarity index 58% rename from antora-default-ui/gulp.d/tasks/index.js rename to antora-ui-default/gulp.d/tasks/index.js index a5795fc..4178c8f 100644 --- a/antora-default-ui/gulp.d/tasks/index.js +++ b/antora-ui-default/gulp.d/tasks/index.js @@ -1,5 +1,5 @@ 'use strict' -const camelCase = (name) => name.replace(/[-]./g, (m) => m.substr(1).toUpperCase()) +const camelCase = (name) => name.replace(/[-]./g, (m) => m.slice(1).toUpperCase()) module.exports = require('require-directory')(module, __dirname, { recurse: false, rename: camelCase }) diff --git a/antora-default-ui/gulp.d/tasks/lint-css.js b/antora-ui-default/gulp.d/tasks/lint-css.js similarity index 100% rename from antora-default-ui/gulp.d/tasks/lint-css.js rename to antora-ui-default/gulp.d/tasks/lint-css.js diff --git a/antora-default-ui/gulp.d/tasks/lint-js.js b/antora-ui-default/gulp.d/tasks/lint-js.js similarity index 100% rename from antora-default-ui/gulp.d/tasks/lint-js.js rename to antora-ui-default/gulp.d/tasks/lint-js.js diff --git a/antora-ui-default/gulp.d/tasks/pack.js b/antora-ui-default/gulp.d/tasks/pack.js new file mode 100644 index 0000000..30cb07f --- /dev/null +++ b/antora-ui-default/gulp.d/tasks/pack.js @@ -0,0 +1,17 @@ +'use strict' + +const ospath = require('path') +const vfs = require('vinyl-fs') +const zip = (() => { + try { + return require('@vscode/gulp-vinyl-zip') + } catch { + return require('gulp-vinyl-zip') + } +})() + +module.exports = (src, dest, bundleName, onFinish) => () => + vfs + .src('**/*', { base: src, cwd: src, dot: true }) + .pipe(zip.dest(ospath.join(dest, `${bundleName}-bundle.zip`))) + .on('finish', () => onFinish && onFinish(ospath.resolve(dest, `${bundleName}-bundle.zip`))) diff --git a/antora-default-ui/gulp.d/tasks/remove.js b/antora-ui-default/gulp.d/tasks/remove.js similarity index 100% rename from antora-default-ui/gulp.d/tasks/remove.js rename to antora-ui-default/gulp.d/tasks/remove.js diff --git a/antora-default-ui/gulp.d/tasks/serve.js b/antora-ui-default/gulp.d/tasks/serve.js similarity index 100% rename from antora-default-ui/gulp.d/tasks/serve.js rename to antora-ui-default/gulp.d/tasks/serve.js diff --git a/antora-default-ui/gulpfile.js b/antora-ui-default/gulpfile.js similarity index 96% rename from antora-default-ui/gulpfile.js rename to antora-ui-default/gulpfile.js index 25ce769..824ca04 100644 --- a/antora-default-ui/gulpfile.js +++ b/antora-ui-default/gulpfile.js @@ -18,7 +18,7 @@ const task = require('./gulp.d/tasks') const glob = { all: [srcDir, previewSrcDir], css: `${srcDir}/css/**/*.css`, - js: ['gulpfile.js', 'gulp.d/**/*.js', `${srcDir}/{helpers,js}/**/*.js`], + js: ['gulpfile.js', 'gulp.d/**/*.js', `${srcDir}/helpers/*.js`, `${srcDir}/js/**/+([^.])?(.bundle).js`], } const cleanTask = createTask({ diff --git a/antora-default-ui/index.js b/antora-ui-default/index.js similarity index 100% rename from antora-default-ui/index.js rename to antora-ui-default/index.js diff --git a/antora-default-ui/preview-src/404.adoc b/antora-ui-default/preview-src/404.adoc similarity index 100% rename from antora-default-ui/preview-src/404.adoc rename to antora-ui-default/preview-src/404.adoc diff --git a/antora-default-ui/preview-src/index.adoc b/antora-ui-default/preview-src/index.adoc similarity index 89% rename from antora-default-ui/preview-src/index.adoc rename to antora-ui-default/preview-src/index.adoc index af1200f..7cedc12 100644 --- a/antora-default-ui/preview-src/index.adoc +++ b/antora-ui-default/preview-src/index.adoc @@ -4,6 +4,7 @@ Author Name :idseparator: - :!example-caption: :!table-caption: +//:page-role: -toc :page-pagination: [.float-group] @@ -22,46 +23,13 @@ Quisque pharetra tristique arcu fringilla dapibus. https://example.org[Curabitur,role=unresolved] ut massa aliquam, cursus enim et, accumsan lectus. Mauris eget leo nunc, nec tempus mi? Curabitur id nisl mi, ut vulputate urna. - -[source,sql] ----- -WITH - -- Function to capitalize input string - FUNCTION capitalize - ( - p_string VARCHAR2 - ) - RETURN VARCHAR2 - IS - BEGIN - RETURN CONCAT(UPPER(SUBSTR(p_string,1,1)), SUBSTR(p_string,2)); - END; - -- Function to retrieve the domain name from a URL - FUNCTION get_domain_name - ( - p_url VARCHAR2, - p_sub_domain VARCHAR2 DEFAULT 'www.' - ) - RETURN VARCHAR2 - IS - v_begin_pos BINARY_INTEGER; - v_length BINARY_INTEGER; - BEGIN - v_begin_pos := INSTR(p_url, p_sub_domain) + LENGTH(p_sub_domain); - v_length := INSTR(SUBSTR(p_url, v_begin_pos), '.') - 1; - RETURN SUBSTR(p_url, v_begin_pos, v_length); - END; --- SQL statement -SELECT capitalize(name) as name, capitalize(get_domain_name(url)) AS domain_name, url - FROM products; ----- - == Cu solet Nominavi luptatum eos, an vim hinc philosophia intellegebat. Lorem pertinacia `expetenda` et nec, [.underline]#wisi# illud [.line-through]#sonet# qui ea. H~2~0. E = mc^2^. +*Alphabet* *алфавит* _алфавит_ *_алфавит_*. Eum an doctus <>. Eu mea inani iriure.footnote:[Quisque porta facilisis tortor, vitae bibendum velit fringilla vitae! Lorem ipsum dolor sit amet, consectetur adipiscing elit.] @@ -234,6 +202,7 @@ sed:: splendide sed mea:: +tad:: agam graeci Let's look at that another way. @@ -330,6 +299,9 @@ Eu mea inani iriure. [discrete] == Voluptua singulis +[discrete] +=== Nominavi luptatum + Cum dicat putant ne. Est in reque homero principes, meis deleniti mediocrem ad has. Ex nam suas nemore dignissim, vel apeirian democritum et. @@ -337,6 +309,9 @@ Ex nam suas nemore dignissim, vel apeirian democritum et. .Antora is a multi-repo documentation site generator image::multirepo-ssg.svg[Multirepo SSG,3000,opts=interactive] +.Let's see that again, but a little smaller +image::multirepo-ssg.svg[Multirepo SSG,300,role=text-left] + Make the switch today! .Full Circle with Jake Blauvelt diff --git a/antora-default-ui/preview-src/multirepo-ssg.svg b/antora-ui-default/preview-src/multirepo-ssg.svg similarity index 100% rename from antora-default-ui/preview-src/multirepo-ssg.svg rename to antora-ui-default/preview-src/multirepo-ssg.svg diff --git a/antora-default-ui/preview-src/ui-model.yml b/antora-ui-default/preview-src/ui-model.yml similarity index 100% rename from antora-default-ui/preview-src/ui-model.yml rename to antora-ui-default/preview-src/ui-model.yml diff --git a/antora-default-ui/src/css/base.css b/antora-ui-default/src/css/base.css similarity index 100% rename from antora-default-ui/src/css/base.css rename to antora-ui-default/src/css/base.css diff --git a/antora-default-ui/src/css/body.css b/antora-ui-default/src/css/body.css similarity index 100% rename from antora-default-ui/src/css/body.css rename to antora-ui-default/src/css/body.css diff --git a/antora-default-ui/src/css/breadcrumbs.css b/antora-ui-default/src/css/breadcrumbs.css similarity index 100% rename from antora-default-ui/src/css/breadcrumbs.css rename to antora-ui-default/src/css/breadcrumbs.css diff --git a/antora-default-ui/src/css/doc.css b/antora-ui-default/src/css/doc.css similarity index 91% rename from antora-default-ui/src/css/doc.css rename to antora-ui-default/src/css/doc.css index 021d1d1..4acb338 100644 --- a/antora-default-ui/src/css/doc.css +++ b/antora-ui-default/src/css/doc.css @@ -185,10 +185,34 @@ clear: both; } +.doc .text-left { + text-align: left; +} + +.doc .text-center { + text-align: center; +} + +.doc .text-right { + text-align: right; +} + +.doc .text-justify { + text-align: justify; +} + .doc .stretch { width: 100%; } +.doc .big { + font-size: larger; +} + +.doc .small { + font-size: smaller; +} + .doc .underline { text-decoration: underline; } @@ -217,10 +241,8 @@ margin: 1rem 0 0; } -.doc table.tableblock { - font-size: calc(15 / var(--rem-base) * 1rem); -} - +.doc > table.tableblock, +.doc > table.tableblock + *, .doc .tablecontainer, .doc .tablecontainer + *, .doc :not(.tablecontainer) > table.tableblock, @@ -228,10 +250,22 @@ margin-top: 1.5rem; } +.doc table.tableblock { + font-size: calc(15 / var(--rem-base) * 1rem); +} + .doc p.tableblock + p.tableblock { margin-top: 0.5rem; } +.doc table.tableblock pre { + font-size: inherit; +} + +.doc td.tableblock > .content { + word-wrap: anywhere; /* aka overflow-wrap; used when hyphens are disabled or aren't sufficient */ +} + .doc td.tableblock > .content > :first-child { margin-top: 0; } @@ -344,7 +378,7 @@ margin-top: 0; } -.doc .admonitionblock pre { +.doc .admonitionblock td.content pre { font-size: calc(15 / var(--rem-base) * 1rem); } @@ -361,55 +395,59 @@ word-wrap: anywhere; } -.doc .admonitionblock .icon { +.doc .admonitionblock td.icon { + font-size: calc(15 / var(--rem-base) * 1rem); + left: 0; + line-height: 1; + padding: 0; position: absolute; top: 0; - left: 0; - font-size: calc(15 / var(--rem-base) * 1rem); - padding: 0 0.5rem; + transform: translate(-0.5rem, -50%); +} + +.doc .admonitionblock td.icon i { + align-items: center; + border-radius: 0.45rem; + display: inline-flex; + filter: initial; height: 1.25rem; - line-height: 1; + padding: 0 0.5rem; + vertical-align: initial; + width: fit-content; +} + +.doc .admonitionblock td.icon i::after { + content: attr(title); font-weight: var(--admonition-label-font-weight); + font-style: normal; text-transform: uppercase; - border-radius: 0.45rem; - transform: translate(-0.5rem, -50%); } -.doc .admonitionblock.caution .icon { +.doc .admonitionblock td.icon i.icon-caution { background-color: var(--caution-color); color: var(--caution-on-color); } -.doc .admonitionblock.important .icon { +.doc .admonitionblock td.icon i.icon-important { background-color: var(--important-color); color: var(--important-on-color); } -.doc .admonitionblock.note .icon { +.doc .admonitionblock td.icon i.icon-note { background-color: var(--note-color); color: var(--note-on-color); } -.doc .admonitionblock.tip .icon { +.doc .admonitionblock td.icon i.icon-tip { background-color: var(--tip-color); color: var(--tip-on-color); } -.doc .admonitionblock.warning .icon { +.doc .admonitionblock td.icon i.icon-warning { background-color: var(--warning-color); color: var(--warning-on-color); } -.doc .admonitionblock .icon i { - display: inline-flex; - align-items: center; - height: 100%; -} - -.doc .admonitionblock .icon i::after { - content: attr(title); -} - .doc .imageblock, .doc .videoblock { display: flex; @@ -417,16 +455,29 @@ align-items: center; } +.doc .imageblock .content { + align-self: stretch; + text-align: center; +} + .doc .imageblock.text-left, .doc .videoblock.text-left { align-items: flex-start; } +.doc .imageblock.text-left .content { + text-align: left; +} + .doc .imageblock.text-right, .doc .videoblock.text-right { align-items: flex-end; } +.doc .imageblock.text-right .content { + text-align: right; +} + .doc .imageblock img, .doc .imageblock object, .doc .imageblock svg, @@ -443,7 +494,8 @@ margin-top: -0.2em; } -.doc .videoblock iframe { +.doc .videoblock iframe, +.doc .videoblock video { max-width: 100%; vertical-align: middle; } @@ -617,7 +669,7 @@ .doc .listingblock .title, .doc .openblock .title, .doc .videoblock .title, -.doc .tableblock caption { +.doc table.tableblock caption { color: var(--caption-font-color); font-size: calc(16 / var(--rem-base) * 1rem); font-style: var(--caption-font-style); @@ -627,18 +679,19 @@ padding-bottom: 0.075rem; } -.doc .tableblock caption { +.doc table.tableblock caption { text-align: left; } -.doc .ulist .title, -.doc .olist .title { +.doc .olist .title, +.doc .ulist .title { font-style: var(--caption-font-style); font-weight: var(--caption-font-weight); margin-bottom: 0.25rem; } -.doc .imageblock .title { +.doc .imageblock .title, +.doc .videoblock .title { margin-top: 0.5rem; padding-bottom: 0; } @@ -728,21 +781,22 @@ font-size: calc(22.5 / var(--rem-base) * 1rem); font-weight: var(--alt-heading-font-weight); line-height: 1.3; - margin-bottom: -0.3em; + margin-bottom: 0.5rem; text-align: center; } +.doc .sidebarblock > .content > .title + *, .doc .sidebarblock > .content > :not(.title):first-child { margin-top: 0; } /* NEEDS REVIEW prevent pre in table from causing article to exceed bounds */ -.doc .tableblock pre, +.doc table.tableblock pre, .doc .listingblock.wrap pre { white-space: pre-wrap; } -.doc pre.highlight code, +.doc pre.highlight > code, .doc .listingblock pre:not(.highlight), .doc .literalblock pre { background: var(--pre-background); @@ -766,6 +820,7 @@ font-family: var(--body-font-family); font-size: calc(13 / var(--rem-base) * 1rem); line-height: 1; + user-select: none; white-space: nowrap; z-index: 1; } @@ -855,11 +910,12 @@ } .doc .dlist dd { - margin: 0 0 0.25rem 1.5rem; + margin: 0 0 0 1.5rem; } -.doc .dlist dd:last-of-type { - margin-bottom: 0; +.doc .dlist dd + dt, +.doc .dlist dd > p:first-child { + margin-top: 0.5rem; } .doc td.hdlist1, @@ -995,6 +1051,10 @@ word-wrap: normal; } +.doc :not(pre).pre-wrap { + white-space: pre-wrap; +} + #footnotes { font-size: 0.85em; line-height: 1.5; diff --git a/antora-default-ui/src/css/footer.css b/antora-ui-default/src/css/footer.css similarity index 100% rename from antora-default-ui/src/css/footer.css rename to antora-ui-default/src/css/footer.css diff --git a/antora-default-ui/src/css/header.css b/antora-ui-default/src/css/header.css similarity index 98% rename from antora-default-ui/src/css/header.css rename to antora-ui-default/src/css/header.css index 278abbe..9a2b294 100644 --- a/antora-default-ui/src/css/header.css +++ b/antora-ui-default/src/css/header.css @@ -1,5 +1,7 @@ -html.is-clipped--navbar { - overflow-y: hidden; +@media screen and (max-width: 1023.5px) { + html.is-clipped--navbar { + overflow-y: hidden; + } } body { diff --git a/antora-default-ui/src/css/highlight.css b/antora-ui-default/src/css/highlight.css similarity index 100% rename from antora-default-ui/src/css/highlight.css rename to antora-ui-default/src/css/highlight.css diff --git a/antora-default-ui/src/css/main.css b/antora-ui-default/src/css/main.css similarity index 92% rename from antora-default-ui/src/css/main.css rename to antora-ui-default/src/css/main.css index e89461a..83a333c 100644 --- a/antora-default-ui/src/css/main.css +++ b/antora-ui-default/src/css/main.css @@ -1,3 +1,7 @@ +body.-toc aside.toc.sidebar { + display: none; +} + @media screen and (max-width: 1023.5px) { aside.toc.sidebar { display: none; diff --git a/antora-default-ui/src/css/nav.css b/antora-ui-default/src/css/nav.css similarity index 82% rename from antora-default-ui/src/css/nav.css rename to antora-ui-default/src/css/nav.css index 6f277b1..81f7d9e 100644 --- a/antora-default-ui/src/css/nav.css +++ b/antora-ui-default/src/css/nav.css @@ -1,3 +1,9 @@ +@media screen and (max-width: 1023.5px) { + html.is-clipped--nav { + overflow-y: hidden; + } +} + .nav-container { position: fixed; top: var(--navbar-height); @@ -60,16 +66,16 @@ height: inherit; } -html.is-clipped--nav { - overflow-y: hidden; -} - .nav-panel-menu { overflow-y: scroll; overscroll-behavior: none; height: var(--nav-panel-menu-height); } +.nav-panel-menu:only-child { + height: 100%; +} + .nav-panel-menu:not(.is-active) .nav-menu { opacity: 0.75; } @@ -92,6 +98,29 @@ html.is-clipped--nav { position: relative; } +.nav-menu-toggle { + background: transparent url(../img/octicons-16.svg#view-unfold) no-repeat center / 100% 100%; + border: none; + float: right; + height: 1em; + margin-right: -0.5rem; + opacity: 0.75; + outline: none; + padding: 0; + position: sticky; + top: calc((var(--nav-line-height) - 1 + 0.5) * 1rem); + visibility: hidden; + width: 1em; +} + +.nav-menu-toggle.is-active { + background-image: url(../img/octicons-16.svg#view-fold); +} + +.nav-panel-menu.is-active:hover .nav-menu-toggle { + visibility: visible; +} + .nav-menu h3.title { color: var(--nav-heading-font-color); font-size: inherit; @@ -197,11 +226,11 @@ html.is-clipped--nav { } .nav-panel-explore .components { - line-height: var(--doc-line-height); + line-height: var(--nav-line-height); flex-grow: 1; box-shadow: inset 0 1px 5px var(--nav-panel-divider-color); background: var(--nav-secondary-background); - padding: 0.5rem 0.75rem 0 0.75rem; + padding: 0.75rem 0.75rem 0 0.75rem; margin: 0; overflow-y: scroll; overscroll-behavior: none; @@ -218,7 +247,7 @@ html.is-clipped--nav { } .nav-panel-explore .component + .component { - margin-top: 0.5rem; + margin-top: 0.75rem; } .nav-panel-explore .component:last-child { @@ -227,13 +256,14 @@ html.is-clipped--nav { .nav-panel-explore .component .title { font-weight: var(--body-font-weight-bold); + text-indent: 0.375rem hanging; } .nav-panel-explore .versions { display: flex; flex-wrap: wrap; padding-left: 0; - margin-top: -0.25rem; + margin: -0.125rem -0.375rem 0 0.375rem; line-height: 1; list-style: none; } @@ -243,16 +273,17 @@ html.is-clipped--nav { } .nav-panel-explore .component .version a { - border: 1px solid var(--nav-border-color); + background: var(--nav-border-color); border-radius: 0.25rem; - opacity: 0.75; white-space: nowrap; - padding: 0.125em 0.25em; + padding: 0.25em 0.5em; display: inherit; + opacity: 0.75; } .nav-panel-explore .component .is-current a { - border-color: currentColor; - opacity: 0.9; + background: var(--nav-heading-font-color); + color: var(--nav-secondary-background); font-weight: var(--body-font-weight-bold); + opacity: 1; } diff --git a/antora-default-ui/src/css/page-versions.css b/antora-ui-default/src/css/page-versions.css similarity index 100% rename from antora-default-ui/src/css/page-versions.css rename to antora-ui-default/src/css/page-versions.css diff --git a/antora-default-ui/src/css/pagination.css b/antora-ui-default/src/css/pagination.css similarity index 100% rename from antora-default-ui/src/css/pagination.css rename to antora-ui-default/src/css/pagination.css diff --git a/antora-default-ui/src/css/print.css b/antora-ui-default/src/css/print.css similarity index 100% rename from antora-default-ui/src/css/print.css rename to antora-ui-default/src/css/print.css diff --git a/antora-ui-default/src/css/prism.css b/antora-ui-default/src/css/prism.css new file mode 100644 index 0000000..5b8ed2d --- /dev/null +++ b/antora-ui-default/src/css/prism.css @@ -0,0 +1,140 @@ +/** + * prism.js default theme for JavaScript, CSS and HTML + * Based on dabblet (http://dabblet.com) + * @author Lea Verou + */ + +code[class*="language-"], +pre[class*="language-"] { + color: black; + background: none; + text-shadow: 0 1px white; + font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; + font-size: 1em; + text-align: left; + white-space: pre; + word-spacing: normal; + word-break: normal; + word-wrap: normal; + line-height: 1.5; + + -moz-tab-size: 4; + -o-tab-size: 4; + tab-size: 4; + + -webkit-hyphens: none; + -moz-hyphens: none; + -ms-hyphens: none; + hyphens: none; +} + +pre[class*="language-"]::-moz-selection, pre[class*="language-"] ::-moz-selection, +code[class*="language-"]::-moz-selection, code[class*="language-"] ::-moz-selection { + text-shadow: none; + background: #b3d4fc; +} + +pre[class*="language-"]::selection, pre[class*="language-"] ::selection, +code[class*="language-"]::selection, code[class*="language-"] ::selection { + text-shadow: none; + background: #b3d4fc; +} + +@media print { + code[class*="language-"], + pre[class*="language-"] { + text-shadow: none; + } +} + +/* Code blocks */ +pre[class*="language-"] { + padding: 1em; + margin: .5em 0; + overflow: auto; +} + +:not(pre) > code[class*="language-"], +pre[class*="language-"] { + background: #f5f2f0; +} + +/* Inline code */ +:not(pre) > code[class*="language-"] { + padding: .1em; + border-radius: .3em; + white-space: normal; +} + +.token.comment, +.token.prolog, +.token.doctype, +.token.cdata { + color: slategray; +} + +.token.punctuation { + color: #999; +} + +.token.namespace { + opacity: .7; +} + +.token.property, +.token.tag, +.token.boolean, +.token.number, +.token.constant, +.token.symbol, +.token.deleted { + color: #905; +} + +.token.selector, +.token.attr-name, +.token.string, +.token.char, +.token.builtin, +.token.inserted { + color: #690; +} + +.token.operator, +.token.entity, +.token.url, +.language-css .token.string, +.style .token.string { + color: #9a6e3a; + /* This background color was intended by the author of this theme. */ + background: hsla(0, 0%, 100%, .5); +} + +.token.atrule, +.token.attr-value, +.token.keyword { + color: #07a; +} + +.token.function, +.token.class-name { + color: #DD4A68; +} + +.token.regex, +.token.important, +.token.variable { + color: #e90; +} + +.token.important, +.token.bold { + font-weight: bold; +} +.token.italic { + font-style: italic; +} + +.token.entity { + cursor: help; +} diff --git a/antora-default-ui/src/css/site.css b/antora-ui-default/src/css/site.css similarity index 100% rename from antora-default-ui/src/css/site.css rename to antora-ui-default/src/css/site.css diff --git a/antora-default-ui/src/css/toc.css b/antora-ui-default/src/css/toc.css similarity index 96% rename from antora-default-ui/src/css/toc.css rename to antora-ui-default/src/css/toc.css index 08989fe..dc33497 100644 --- a/antora-default-ui/src/css/toc.css +++ b/antora-ui-default/src/css/toc.css @@ -96,7 +96,3 @@ .sidebar.toc .toc-menu a:focus { background: var(--panel-background); } - -.toc .toc-menu .is-hidden-toc { - display: none !important; -} diff --git a/antora-default-ui/src/css/toolbar.css b/antora-ui-default/src/css/toolbar.css similarity index 100% rename from antora-default-ui/src/css/toolbar.css rename to antora-ui-default/src/css/toolbar.css diff --git a/antora-default-ui/src/css/typeface-roboto-mono.css b/antora-ui-default/src/css/typeface-roboto-mono.css similarity index 61% rename from antora-default-ui/src/css/typeface-roboto-mono.css rename to antora-ui-default/src/css/typeface-roboto-mono.css index 841df08..b25128c 100644 --- a/antora-default-ui/src/css/typeface-roboto-mono.css +++ b/antora-ui-default/src/css/typeface-roboto-mono.css @@ -8,12 +8,32 @@ unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; } +/* @font-face { font-family: "Roboto Mono"; font-style: normal; - font-weight: 500; + font-weight: 400; + src: url(~@fontsource/roboto-mono/files/roboto-mono-cyrillic-400-normal.woff2) format("woff2"); + unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; +} +*/ + +@font-face { + font-family: "Roboto Mono"; + font-style: normal; + font-weight: 600; src: url(~@fontsource/roboto-mono/files/roboto-mono-latin-500-normal.woff2) format("woff2"), url(~@fontsource/roboto-mono/files/roboto-mono-latin-500-normal.woff) format("woff"); unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; } + +/* +@font-face { + font-family: "Roboto Mono"; + font-style: normal; + font-weight: 600; + src: url(~@fontsource/roboto-mono/files/roboto-mono-cyrillic-500-normal.woff2) format("woff2"); + unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; +} +*/ diff --git a/antora-default-ui/src/css/typeface-roboto.css b/antora-ui-default/src/css/typeface-roboto.css similarity index 62% rename from antora-default-ui/src/css/typeface-roboto.css rename to antora-ui-default/src/css/typeface-roboto.css index 1648a2b..931cc2c 100644 --- a/antora-default-ui/src/css/typeface-roboto.css +++ b/antora-ui-default/src/css/typeface-roboto.css @@ -8,6 +8,14 @@ unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; } +@font-face { + font-family: "Roboto"; + font-style: normal; + font-weight: 400; + src: url(~@fontsource/roboto/files/roboto-cyrillic-400-normal.woff2) format("woff2"); + unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; +} + @font-face { font-family: "Roboto"; font-style: italic; @@ -18,22 +26,46 @@ unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; } +@font-face { + font-family: "Roboto"; + font-style: italic; + font-weight: 400; + src: url(~@fontsource/roboto/files/roboto-cyrillic-400-italic.woff2) format("woff2"); + unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; +} + @font-face { font-family: "Roboto"; font-style: normal; - font-weight: 500; + font-weight: 600; src: url(~@fontsource/roboto/files/roboto-latin-500-normal.woff2) format("woff2"), url(~@fontsource/roboto/files/roboto-latin-500-normal.woff) format("woff"); unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; } +@font-face { + font-family: "Roboto"; + font-style: normal; + font-weight: 600; + src: url(~@fontsource/roboto/files/roboto-cyrillic-500-normal.woff2) format("woff2"); + unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; +} + @font-face { font-family: "Roboto"; font-style: italic; - font-weight: 500; + font-weight: 600; src: url(~@fontsource/roboto/files/roboto-latin-500-italic.woff2) format("woff2"), url(~@fontsource/roboto/files/roboto-latin-500-italic.woff) format("woff"); unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; } + +@font-face { + font-family: "Roboto"; + font-style: italic; + font-weight: 600; + src: url(~@fontsource/roboto/files/roboto-cyrillic-500-italic.woff2) format("woff2"); + unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; +} diff --git a/antora-default-ui/src/css/vars.css b/antora-ui-default/src/css/vars.css similarity index 98% rename from antora-default-ui/src/css/vars.css rename to antora-ui-default/src/css/vars.css index 5df9e8b..91c9c09 100644 --- a/antora-default-ui/src/css/vars.css +++ b/antora-ui-default/src/css/vars.css @@ -25,9 +25,9 @@ --body-line-height: 1.15; --body-font-color: var(--color-jet-70); --body-font-family: "Roboto", sans-serif; - --body-font-weight-bold: 500; + --body-font-weight-bold: 600; --monospace-font-family: "Roboto Mono", monospace; - --monospace-font-weight-bold: 500; + --monospace-font-weight-bold: 600; /* base */ --body-background: var(--color-white); --panel-background: var(--color-smoke-30); diff --git a/antora-default-ui/src/helpers/and.js b/antora-ui-default/src/helpers/and.js similarity index 100% rename from antora-default-ui/src/helpers/and.js rename to antora-ui-default/src/helpers/and.js diff --git a/antora-default-ui/src/helpers/detag.js b/antora-ui-default/src/helpers/detag.js similarity index 100% rename from antora-default-ui/src/helpers/detag.js rename to antora-ui-default/src/helpers/detag.js diff --git a/antora-default-ui/src/helpers/eq.js b/antora-ui-default/src/helpers/eq.js similarity index 100% rename from antora-default-ui/src/helpers/eq.js rename to antora-ui-default/src/helpers/eq.js diff --git a/antora-default-ui/src/helpers/increment.js b/antora-ui-default/src/helpers/increment.js similarity index 100% rename from antora-default-ui/src/helpers/increment.js rename to antora-ui-default/src/helpers/increment.js diff --git a/antora-default-ui/src/helpers/ne.js b/antora-ui-default/src/helpers/ne.js similarity index 100% rename from antora-default-ui/src/helpers/ne.js rename to antora-ui-default/src/helpers/ne.js diff --git a/antora-default-ui/src/helpers/not.js b/antora-ui-default/src/helpers/not.js similarity index 100% rename from antora-default-ui/src/helpers/not.js rename to antora-ui-default/src/helpers/not.js diff --git a/antora-default-ui/src/helpers/or.js b/antora-ui-default/src/helpers/or.js similarity index 100% rename from antora-default-ui/src/helpers/or.js rename to antora-ui-default/src/helpers/or.js diff --git a/antora-default-ui/src/helpers/relativize.js b/antora-ui-default/src/helpers/relativize.js similarity index 60% rename from antora-default-ui/src/helpers/relativize.js rename to antora-ui-default/src/helpers/relativize.js index 6fdfb45..7989319 100644 --- a/antora-default-ui/src/helpers/relativize.js +++ b/antora-ui-default/src/helpers/relativize.js @@ -4,19 +4,19 @@ const { posix: path } = require('path') module.exports = (to, from, ctx) => { if (!to) return '#' + if (to.charAt() !== '/') return to // NOTE only legacy invocation provides both to and from if (!ctx) from = (ctx = from).data.root.page.url - if (to.charAt() !== '/') return to if (!from) return (ctx.data.root.site.path || '') + to let hash = '' const hashIdx = to.indexOf('#') if (~hashIdx) { - hash = to.substr(hashIdx) - to = to.substr(0, hashIdx) + hash = to.slice(hashIdx) + to = to.slice(0, hashIdx) } - return to === from - ? hash || (isDir(to) ? './' : path.basename(to)) - : (path.relative(path.dirname(from + '.'), to) || '.') + (isDir(to) ? '/' + hash : hash) + if (to === from) return hash || (isDir(to) ? './' : path.basename(to)) + const rel = path.relative(path.dirname(from + '.'), to) + return rel ? (isDir(to) ? rel + '/' : rel) + hash : (isDir(to) ? './' : '../' + path.basename(to)) + hash } function isDir (str) { diff --git a/antora-default-ui/src/helpers/year.js b/antora-ui-default/src/helpers/year.js similarity index 100% rename from antora-default-ui/src/helpers/year.js rename to antora-ui-default/src/helpers/year.js diff --git a/antora-default-ui/src/img/back.svg b/antora-ui-default/src/img/back.svg similarity index 100% rename from antora-default-ui/src/img/back.svg rename to antora-ui-default/src/img/back.svg diff --git a/antora-default-ui/src/img/caret.svg b/antora-ui-default/src/img/caret.svg similarity index 100% rename from antora-default-ui/src/img/caret.svg rename to antora-ui-default/src/img/caret.svg diff --git a/antora-default-ui/src/img/chevron.svg b/antora-ui-default/src/img/chevron.svg similarity index 100% rename from antora-default-ui/src/img/chevron.svg rename to antora-ui-default/src/img/chevron.svg diff --git a/antora-default-ui/src/img/home-o.svg b/antora-ui-default/src/img/home-o.svg similarity index 100% rename from antora-default-ui/src/img/home-o.svg rename to antora-ui-default/src/img/home-o.svg diff --git a/antora-default-ui/src/img/home.svg b/antora-ui-default/src/img/home.svg similarity index 100% rename from antora-default-ui/src/img/home.svg rename to antora-ui-default/src/img/home.svg diff --git a/antora-default-ui/src/img/menu.svg b/antora-ui-default/src/img/menu.svg similarity index 100% rename from antora-default-ui/src/img/menu.svg rename to antora-ui-default/src/img/menu.svg diff --git a/antora-default-ui/src/img/octicons-16.svg b/antora-ui-default/src/img/octicons-16.svg similarity index 52% rename from antora-default-ui/src/img/octicons-16.svg rename to antora-ui-default/src/img/octicons-16.svg index d8415d0..0e8ab39 100644 --- a/antora-default-ui/src/img/octicons-16.svg +++ b/antora-ui-default/src/img/octicons-16.svg @@ -31,6 +31,21 @@ fill-rule="evenodd" d="M5.75 1a.75.75 0 00-.75.75v3c0 .414.336.75.75.75h4.5a.75.75 0 00.75-.75v-3a.75.75 0 00-.75-.75h-4.5zm.75 3V2.5h3V4h-3zm-2.874-.467a.75.75 0 00-.752-1.298A1.75 1.75 0 002 3.75v9.5c0 .966.784 1.75 1.75 1.75h8.5A1.75 1.75 0 0014 13.25v-9.5a1.75 1.75 0 00-.874-1.515.75.75 0 10-.752 1.298.25.25 0 01.126.217v9.5a.25.25 0 01-.25.25h-8.5a.25.25 0 01-.25-.25v-9.5a.25.25 0 01.126-.217z" /> + + + + + + + + + + + + + + + diff --git a/antora-default-ui/src/js/01-nav.js b/antora-ui-default/src/js/01-nav.js similarity index 87% rename from antora-default-ui/src/js/01-nav.js rename to antora-ui-default/src/js/01-nav.js index 80937ee..eed4fc6 100644 --- a/antora-default-ui/src/js/01-nav.js +++ b/antora-ui-default/src/js/01-nav.js @@ -5,7 +5,9 @@ var navContainer = document.querySelector('.nav-container') var navToggle = document.querySelector('.nav-toggle') + if (!navContainer && (!navToggle || (navToggle.hidden = true))) return var nav = navContainer.querySelector('.nav') + var navMenuToggle = navContainer.querySelector('.nav-menu-toggle') navToggle.addEventListener('click', showNav) navContainer.addEventListener('click', trapEvent) @@ -33,6 +35,22 @@ } }) + if (navMenuToggle && menuPanel.querySelector('.nav-item-toggle')) { + navMenuToggle.style.display = '' + navMenuToggle.addEventListener('click', function () { + var collapse = !this.classList.toggle('is-active') + find(menuPanel, '.nav-item > .nav-item-toggle').forEach(function (btn) { + collapse ? btn.parentElement.classList.remove('is-active') : btn.parentElement.classList.add('is-active') + }) + if (currentPageItem) { + if (collapse) activateCurrentPath(currentPageItem) + scrollItemToMidpoint(menuPanel, currentPageItem.querySelector('.nav-link')) + } else { + menuPanel.scrollTop = 0 + } + }) + } + if (explorePanel) { explorePanel.querySelector('.context').addEventListener('click', function () { // NOTE logic assumes there are only two panels diff --git a/antora-default-ui/src/js/02-on-this-page.js b/antora-ui-default/src/js/02-on-this-page.js similarity index 97% rename from antora-default-ui/src/js/02-on-this-page.js rename to antora-ui-default/src/js/02-on-this-page.js index 035bea4..f3b2732 100644 --- a/antora-default-ui/src/js/02-on-this-page.js +++ b/antora-ui-default/src/js/02-on-this-page.js @@ -9,12 +9,13 @@ var articleSelector = 'article.doc' var article = document.querySelector(articleSelector) + if (!article) return var headingsSelector = [] for (var level = 0; level <= levels; level++) { var headingSelector = [articleSelector] if (level) { for (var l = 1; l <= level; l++) headingSelector.push((l === 2 ? '.sectionbody>' : '') + '.sect' + l) - headingSelector.push('h' + (level + 1) + '[id]') + headingSelector.push('h' + (level + 1) + '[id]' + (level > 1 ? ':not(.discrete)' : '')) } else { headingSelector.push('h1[id].sect0') } diff --git a/antora-default-ui/src/js/03-fragment-jumper.js b/antora-ui-default/src/js/03-fragment-jumper.js similarity index 98% rename from antora-default-ui/src/js/03-fragment-jumper.js rename to antora-ui-default/src/js/03-fragment-jumper.js index d112e47..bff0896 100644 --- a/antora-default-ui/src/js/03-fragment-jumper.js +++ b/antora-ui-default/src/js/03-fragment-jumper.js @@ -2,6 +2,7 @@ 'use strict' var article = document.querySelector('article.doc') + if (!article) return var toolbar = document.querySelector('.toolbar') var supportsScrollToOptions = 'scrollTo' in document.documentElement diff --git a/antora-default-ui/src/js/04-page-versions.js b/antora-ui-default/src/js/04-page-versions.js similarity index 100% rename from antora-default-ui/src/js/04-page-versions.js rename to antora-ui-default/src/js/04-page-versions.js diff --git a/antora-default-ui/src/js/05-mobile-navbar.js b/antora-ui-default/src/js/05-mobile-navbar.js similarity index 79% rename from antora-default-ui/src/js/05-mobile-navbar.js rename to antora-ui-default/src/js/05-mobile-navbar.js index 892d0e7..d85abb2 100644 --- a/antora-default-ui/src/js/05-mobile-navbar.js +++ b/antora-ui-default/src/js/05-mobile-navbar.js @@ -8,8 +8,8 @@ function toggleNavbarMenu (e) { e.stopPropagation() // trap event document.documentElement.classList.toggle('is-clipped--navbar') - this.classList.toggle('is-active') - var menu = document.getElementById(this.dataset.target) + navbarBurger.setAttribute('aria-expanded', this.classList.toggle('is-active')) + var menu = document.getElementById(this.getAttribute('aria-controls') || this.dataset.target) if (menu.classList.toggle('is-active')) { menu.style.maxHeight = '' var expectedMaxHeight = window.innerHeight - Math.round(menu.getBoundingClientRect().top) diff --git a/antora-default-ui/src/js/06-copy-to-clipboard.js b/antora-ui-default/src/js/06-copy-to-clipboard.js similarity index 97% rename from antora-default-ui/src/js/06-copy-to-clipboard.js rename to antora-ui-default/src/js/06-copy-to-clipboard.js index df86df8..8c9d698 100644 --- a/antora-default-ui/src/js/06-copy-to-clipboard.js +++ b/antora-ui-default/src/js/06-copy-to-clipboard.js @@ -6,9 +6,9 @@ var TRAILING_SPACE_RX = / +$/gm var config = (document.getElementById('site-script') || { dataset: {} }).dataset - var uiRootPath = config.uiRootPath == null ? '.' : config.uiRootPath - var svgAs = config.svgAs var supportsCopy = window.navigator.clipboard + var svgAs = config.svgAs + var uiRootPath = (config.uiRootPath == null ? window.uiRootPath : config.uiRootPath) || '.' ;[].slice.call(document.querySelectorAll('.doc pre.highlight, .doc .literalblock pre')).forEach(function (pre) { var code, language, lang, copy, toast, toolbox diff --git a/antora-default-ui/src/js/vendor/highlight.bundle.js b/antora-ui-default/src/js/vendor/highlight.bundle.js similarity index 94% rename from antora-default-ui/src/js/vendor/highlight.bundle.js rename to antora-ui-default/src/js/vendor/highlight.bundle.js index f679686..fe8ae5d 100644 --- a/antora-default-ui/src/js/vendor/highlight.bundle.js +++ b/antora-ui-default/src/js/vendor/highlight.bundle.js @@ -1,12 +1,12 @@ ;(function () { 'use strict' - var hljs = require('highlight.js/lib/core') + var hljs = require('highlight.js/lib/highlight') hljs.registerLanguage('asciidoc', require('highlight.js/lib/languages/asciidoc')) hljs.registerLanguage('bash', require('highlight.js/lib/languages/bash')) hljs.registerLanguage('clojure', require('highlight.js/lib/languages/clojure')) hljs.registerLanguage('cpp', require('highlight.js/lib/languages/cpp')) - hljs.registerLanguage('cs', require('highlight.js/lib/languages/csharp')) + hljs.registerLanguage('cs', require('highlight.js/lib/languages/cs')) hljs.registerLanguage('css', require('highlight.js/lib/languages/css')) hljs.registerLanguage('diff', require('highlight.js/lib/languages/diff')) hljs.registerLanguage('dockerfile', require('highlight.js/lib/languages/dockerfile')) @@ -17,6 +17,7 @@ hljs.registerLanguage('java', require('highlight.js/lib/languages/java')) hljs.registerLanguage('javascript', require('highlight.js/lib/languages/javascript')) hljs.registerLanguage('json', require('highlight.js/lib/languages/json')) + hljs.registerLanguage('julia', require('highlight.js/lib/languages/julia')) hljs.registerLanguage('kotlin', require('highlight.js/lib/languages/kotlin')) hljs.registerLanguage('lua', require('highlight.js/lib/languages/lua')) hljs.registerLanguage('markdown', require('highlight.js/lib/languages/markdown')) @@ -37,6 +38,6 @@ hljs.registerLanguage('xml', require('highlight.js/lib/languages/xml')) hljs.registerLanguage('yaml', require('highlight.js/lib/languages/yaml')) ;[].slice.call(document.querySelectorAll('pre code.hljs[data-lang]')).forEach(function (node) { - hljs.highlightElement(node) + hljs.highlightBlock(node) }) })() diff --git a/antora-ui-default/src/js/vendor/prism.bundle.js b/antora-ui-default/src/js/vendor/prism.bundle.js new file mode 100644 index 0000000..a52b168 --- /dev/null +++ b/antora-ui-default/src/js/vendor/prism.bundle.js @@ -0,0 +1,15 @@ +;(function () { + var Prism = require('prismjs') + window.Prism = Prism + require('prismjs/components/prism-clike') + require('prismjs/components/prism-markup') + require('prismjs/components/prism-css') + require('prismjs/components/prism-javascript') + require('prismjs/components/prism-bash') + require('prismjs/components/prism-sql') + require('prismjs/components/prism-plsql') + require('prismjs/components/prism-yaml') + require('prismjs/components/prism-json') + require('prismjs/plugins/keep-markup/prism-keep-markup.min') + require('prismjs/plugins/line-numbers/prism-line-numbers.min') +})() diff --git a/antora-default-ui/src/layouts/404.hbs b/antora-ui-default/src/layouts/404.hbs similarity index 100% rename from antora-default-ui/src/layouts/404.hbs rename to antora-ui-default/src/layouts/404.hbs diff --git a/antora-default-ui/src/layouts/default.hbs b/antora-ui-default/src/layouts/default.hbs similarity index 100% rename from antora-default-ui/src/layouts/default.hbs rename to antora-ui-default/src/layouts/default.hbs diff --git a/antora-default-ui/src/partials/article-404.hbs b/antora-ui-default/src/partials/article-404.hbs similarity index 100% rename from antora-default-ui/src/partials/article-404.hbs rename to antora-ui-default/src/partials/article-404.hbs diff --git a/antora-default-ui/src/partials/article.hbs b/antora-ui-default/src/partials/article.hbs similarity index 100% rename from antora-default-ui/src/partials/article.hbs rename to antora-ui-default/src/partials/article.hbs diff --git a/antora-default-ui/src/partials/body.hbs b/antora-ui-default/src/partials/body.hbs similarity index 100% rename from antora-default-ui/src/partials/body.hbs rename to antora-ui-default/src/partials/body.hbs diff --git a/antora-default-ui/src/partials/breadcrumbs.hbs b/antora-ui-default/src/partials/breadcrumbs.hbs similarity index 100% rename from antora-default-ui/src/partials/breadcrumbs.hbs rename to antora-ui-default/src/partials/breadcrumbs.hbs diff --git a/antora-ui-default/src/partials/edit-this-page.hbs b/antora-ui-default/src/partials/edit-this-page.hbs new file mode 100644 index 0000000..27946f4 --- /dev/null +++ b/antora-ui-default/src/partials/edit-this-page.hbs @@ -0,0 +1,5 @@ +{{#if (and page.fileUri (not env.CI))}} + +{{else if (and page.editUrl (or env.FORCE_SHOW_EDIT_PAGE_LINK (not page.origin.private)))}} + +{{/if}} diff --git a/antora-default-ui/src/partials/footer-content.hbs b/antora-ui-default/src/partials/footer-content.hbs similarity index 100% rename from antora-default-ui/src/partials/footer-content.hbs rename to antora-ui-default/src/partials/footer-content.hbs diff --git a/antora-default-ui/src/partials/footer-scripts.hbs b/antora-ui-default/src/partials/footer-scripts.hbs similarity index 100% rename from antora-default-ui/src/partials/footer-scripts.hbs rename to antora-ui-default/src/partials/footer-scripts.hbs diff --git a/antora-default-ui/src/partials/footer.hbs b/antora-ui-default/src/partials/footer.hbs similarity index 100% rename from antora-default-ui/src/partials/footer.hbs rename to antora-ui-default/src/partials/footer.hbs diff --git a/antora-default-ui/src/partials/head-icons.hbs b/antora-ui-default/src/partials/head-icons.hbs similarity index 100% rename from antora-default-ui/src/partials/head-icons.hbs rename to antora-ui-default/src/partials/head-icons.hbs diff --git a/antora-default-ui/src/partials/head-info.hbs b/antora-ui-default/src/partials/head-info.hbs similarity index 100% rename from antora-default-ui/src/partials/head-info.hbs rename to antora-ui-default/src/partials/head-info.hbs diff --git a/antora-default-ui/src/partials/head-meta.hbs b/antora-ui-default/src/partials/head-meta.hbs similarity index 100% rename from antora-default-ui/src/partials/head-meta.hbs rename to antora-ui-default/src/partials/head-meta.hbs diff --git a/antora-default-ui/src/partials/head-prelude.hbs b/antora-ui-default/src/partials/head-prelude.hbs similarity index 100% rename from antora-default-ui/src/partials/head-prelude.hbs rename to antora-ui-default/src/partials/head-prelude.hbs diff --git a/antora-default-ui/src/partials/head-scripts.hbs b/antora-ui-default/src/partials/head-scripts.hbs similarity index 94% rename from antora-default-ui/src/partials/head-scripts.hbs rename to antora-ui-default/src/partials/head-scripts.hbs index 3db8cee..8dbc7d0 100644 --- a/antora-default-ui/src/partials/head-scripts.hbs +++ b/antora-ui-default/src/partials/head-scripts.hbs @@ -2,4 +2,6 @@ {{/with}} + {{!-- + --}} diff --git a/antora-default-ui/src/partials/head-styles.hbs b/antora-ui-default/src/partials/head-styles.hbs similarity index 100% rename from antora-default-ui/src/partials/head-styles.hbs rename to antora-ui-default/src/partials/head-styles.hbs diff --git a/antora-default-ui/src/partials/head-title.hbs b/antora-ui-default/src/partials/head-title.hbs similarity index 100% rename from antora-default-ui/src/partials/head-title.hbs rename to antora-ui-default/src/partials/head-title.hbs diff --git a/antora-default-ui/src/partials/head.hbs b/antora-ui-default/src/partials/head.hbs similarity index 100% rename from antora-default-ui/src/partials/head.hbs rename to antora-ui-default/src/partials/head.hbs diff --git a/antora-default-ui/src/partials/header-content.hbs b/antora-ui-default/src/partials/header-content.hbs similarity index 93% rename from antora-default-ui/src/partials/header-content.hbs rename to antora-ui-default/src/partials/header-content.hbs index 8a094a4..f11bd60 100644 --- a/antora-default-ui/src/partials/header-content.hbs +++ b/antora-ui-default/src/partials/header-content.hbs @@ -9,7 +9,7 @@ {{/if}} - {{#with @root.page.componentVersion}}

{{./title}}

{{/with}} diff --git a/antora-default-ui/src/partials/nav-toggle.hbs b/antora-ui-default/src/partials/nav-toggle.hbs similarity index 100% rename from antora-default-ui/src/partials/nav-toggle.hbs rename to antora-ui-default/src/partials/nav-toggle.hbs diff --git a/antora-default-ui/src/partials/nav-tree.hbs b/antora-ui-default/src/partials/nav-tree.hbs similarity index 100% rename from antora-default-ui/src/partials/nav-tree.hbs rename to antora-ui-default/src/partials/nav-tree.hbs diff --git a/antora-default-ui/src/partials/nav.hbs b/antora-ui-default/src/partials/nav.hbs similarity index 100% rename from antora-default-ui/src/partials/nav.hbs rename to antora-ui-default/src/partials/nav.hbs diff --git a/antora-default-ui/src/partials/page-versions.hbs b/antora-ui-default/src/partials/page-versions.hbs similarity index 100% rename from antora-default-ui/src/partials/page-versions.hbs rename to antora-ui-default/src/partials/page-versions.hbs diff --git a/antora-default-ui/src/partials/pagination.hbs b/antora-ui-default/src/partials/pagination.hbs similarity index 76% rename from antora-default-ui/src/partials/pagination.hbs rename to antora-ui-default/src/partials/pagination.hbs index 4f6300f..ba9d704 100644 --- a/antora-default-ui/src/partials/pagination.hbs +++ b/antora-ui-default/src/partials/pagination.hbs @@ -1,12 +1,16 @@ {{#unless (eq page.attributes.pagination undefined)}} {{#if (or page.previous page.next)}} {{/if}} {{/unless}} diff --git a/antora-default-ui/src/partials/toc.hbs b/antora-ui-default/src/partials/toc.hbs similarity index 100% rename from antora-default-ui/src/partials/toc.hbs rename to antora-ui-default/src/partials/toc.hbs diff --git a/antora-ui-default/src/partials/toolbar.hbs b/antora-ui-default/src/partials/toolbar.hbs new file mode 100644 index 0000000..797aa05 --- /dev/null +++ b/antora-ui-default/src/partials/toolbar.hbs @@ -0,0 +1,9 @@ + diff --git a/supplemental_ui/css/prism.css b/supplemental_ui/css/prism.css new file mode 100644 index 0000000..5b8ed2d --- /dev/null +++ b/supplemental_ui/css/prism.css @@ -0,0 +1,140 @@ +/** + * prism.js default theme for JavaScript, CSS and HTML + * Based on dabblet (http://dabblet.com) + * @author Lea Verou + */ + +code[class*="language-"], +pre[class*="language-"] { + color: black; + background: none; + text-shadow: 0 1px white; + font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; + font-size: 1em; + text-align: left; + white-space: pre; + word-spacing: normal; + word-break: normal; + word-wrap: normal; + line-height: 1.5; + + -moz-tab-size: 4; + -o-tab-size: 4; + tab-size: 4; + + -webkit-hyphens: none; + -moz-hyphens: none; + -ms-hyphens: none; + hyphens: none; +} + +pre[class*="language-"]::-moz-selection, pre[class*="language-"] ::-moz-selection, +code[class*="language-"]::-moz-selection, code[class*="language-"] ::-moz-selection { + text-shadow: none; + background: #b3d4fc; +} + +pre[class*="language-"]::selection, pre[class*="language-"] ::selection, +code[class*="language-"]::selection, code[class*="language-"] ::selection { + text-shadow: none; + background: #b3d4fc; +} + +@media print { + code[class*="language-"], + pre[class*="language-"] { + text-shadow: none; + } +} + +/* Code blocks */ +pre[class*="language-"] { + padding: 1em; + margin: .5em 0; + overflow: auto; +} + +:not(pre) > code[class*="language-"], +pre[class*="language-"] { + background: #f5f2f0; +} + +/* Inline code */ +:not(pre) > code[class*="language-"] { + padding: .1em; + border-radius: .3em; + white-space: normal; +} + +.token.comment, +.token.prolog, +.token.doctype, +.token.cdata { + color: slategray; +} + +.token.punctuation { + color: #999; +} + +.token.namespace { + opacity: .7; +} + +.token.property, +.token.tag, +.token.boolean, +.token.number, +.token.constant, +.token.symbol, +.token.deleted { + color: #905; +} + +.token.selector, +.token.attr-name, +.token.string, +.token.char, +.token.builtin, +.token.inserted { + color: #690; +} + +.token.operator, +.token.entity, +.token.url, +.language-css .token.string, +.style .token.string { + color: #9a6e3a; + /* This background color was intended by the author of this theme. */ + background: hsla(0, 0%, 100%, .5); +} + +.token.atrule, +.token.attr-value, +.token.keyword { + color: #07a; +} + +.token.function, +.token.class-name { + color: #DD4A68; +} + +.token.regex, +.token.important, +.token.variable { + color: #e90; +} + +.token.important, +.token.bold { + font-weight: bold; +} +.token.italic { + font-style: italic; +} + +.token.entity { + cursor: help; +} diff --git a/supplemental_ui/css/site.css b/supplemental_ui/css/site.css index 53f6256..b502bd6 100644 --- a/supplemental_ui/css/site.css +++ b/supplemental_ui/css/site.css @@ -1,3 +1,3 @@ -@font-face{font-family:Roboto;font-style:normal;font-weight:400;src:url(../font/roboto-latin-400-normal.woff2) format("woff2"),url(../font/roboto-latin-400-normal.woff) format("woff");unicode-range:U+00??,U+0131,U+0152-0153,U+02bb-02bc,U+02c6,U+02da,U+02dc,U+2000-206f,U+2074,U+20ac,U+2122,U+2191,U+2193,U+2212,U+2215,U+feff,U+fffd}@font-face{font-family:Roboto;font-style:italic;font-weight:400;src:url(../font/roboto-latin-400-italic.woff2) format("woff2"),url(../font/roboto-latin-400-italic.woff) format("woff");unicode-range:U+00??,U+0131,U+0152-0153,U+02bb-02bc,U+02c6,U+02da,U+02dc,U+2000-206f,U+2074,U+20ac,U+2122,U+2191,U+2193,U+2212,U+2215,U+feff,U+fffd}@font-face{font-family:Roboto;font-style:normal;font-weight:500;src:url(../font/roboto-latin-500-normal.woff2) format("woff2"),url(../font/roboto-latin-500-normal.woff) format("woff");unicode-range:U+00??,U+0131,U+0152-0153,U+02bb-02bc,U+02c6,U+02da,U+02dc,U+2000-206f,U+2074,U+20ac,U+2122,U+2191,U+2193,U+2212,U+2215,U+feff,U+fffd}@font-face{font-family:Roboto;font-style:italic;font-weight:500;src:url(../font/roboto-latin-500-italic.woff2) format("woff2"),url(../font/roboto-latin-500-italic.woff) format("woff");unicode-range:U+00??,U+0131,U+0152-0153,U+02bb-02bc,U+02c6,U+02da,U+02dc,U+2000-206f,U+2074,U+20ac,U+2122,U+2191,U+2193,U+2212,U+2215,U+feff,U+fffd}@font-face{font-family:Roboto Mono;font-style:normal;font-weight:400;src:url(../font/roboto-mono-latin-400-normal.woff2) format("woff2"),url(../font/roboto-mono-latin-400-normal.woff) format("woff");unicode-range:U+00??,U+0131,U+0152-0153,U+02bb-02bc,U+02c6,U+02da,U+02dc,U+2000-206f,U+2074,U+20ac,U+2122,U+2191,U+2193,U+2212,U+2215,U+feff,U+fffd}@font-face{font-family:Roboto Mono;font-style:normal;font-weight:500;src:url(../font/roboto-mono-latin-500-normal.woff2) format("woff2"),url(../font/roboto-mono-latin-500-normal.woff) format("woff");unicode-range:U+00??,U+0131,U+0152-0153,U+02bb-02bc,U+02c6,U+02da,U+02dc,U+2000-206f,U+2074,U+20ac,U+2122,U+2191,U+2193,U+2212,U+2215,U+feff,U+fffd}*,::after,::before{-webkit-box-sizing:inherit;box-sizing:inherit}html{-webkit-box-sizing:border-box;box-sizing:border-box;font-size:1.0625em;height:100%;scroll-behavior:smooth}@media screen and (min-width:1024px){html{font-size:1.125em}}body{background:#fff;color:#222;font-family:Roboto,sans-serif;line-height:1.15;margin:0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;word-wrap:anywhere}a{text-decoration:none}a:hover{text-decoration:underline}a:active{background-color:none}code,kbd,pre{font-family:Roboto Mono,monospace}b,dt,strong,th{font-weight:500}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}em em{font-style:normal}strong strong{font-weight:400}button{cursor:pointer;font-family:inherit;font-size:1em;line-height:1.15;margin:0}button::-moz-focus-inner{border:none;padding:0}summary{cursor:pointer;-webkit-tap-highlight-color:transparent;outline:none}table{border-collapse:collapse;word-wrap:normal}object[type="image/svg+xml"]:not([width]){width:-webkit-fit-content;width:-moz-fit-content;width:fit-content}::-webkit-input-placeholder{opacity:.5}::-moz-placeholder{opacity:.5}:-ms-input-placeholder{opacity:.5}::-ms-input-placeholder{opacity:.5}::placeholder{opacity:.5}@media (pointer:fine){@supports (scrollbar-width:thin){html{scrollbar-color:#c1c1c1 #fafafa}body *{scrollbar-width:thin;scrollbar-color:#c1c1c1 transparent}}html::-webkit-scrollbar{background-color:#fafafa;height:12px;width:12px}body ::-webkit-scrollbar{height:6px;width:6px}::-webkit-scrollbar-thumb{background-clip:padding-box;background-color:#c1c1c1;border:3px solid transparent;border-radius:12px}body ::-webkit-scrollbar-thumb{border-width:1.75px;border-radius:6px}::-webkit-scrollbar-thumb:hover{background-color:#9c9c9c}}@media screen and (min-width:1024px){.body{display:-webkit-box;display:-ms-flexbox;display:flex}}.nav-container{position:fixed;top:3.5rem;left:0;width:100%;font-size:.94444rem;z-index:1;visibility:hidden}@media screen and (min-width:769px){.nav-container{width:15rem}}@media screen and (min-width:1024px){.nav-container{font-size:.86111rem;-webkit-box-flex:0;-ms-flex:none;flex:none;position:static;top:0;visibility:visible}}.nav-container.is-active{visibility:visible}.nav{background:#fafafa;position:relative;top:2.5rem;height:calc(100vh - 6rem)}@media screen and (min-width:769px){.nav{-webkit-box-shadow:.5px 0 3px #c1c1c1;box-shadow:.5px 0 3px #c1c1c1}}@media screen and (min-width:1024px){.nav{top:3.5rem;-webkit-box-shadow:none;box-shadow:none;position:sticky;height:calc(100vh - 3.5rem)}}.nav a{color:inherit}.nav .panels{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;height:inherit}html.is-clipped--nav{overflow-y:hidden}.nav-panel-menu{overflow-y:scroll;-ms-scroll-chaining:none;overscroll-behavior:none;height:calc(100% - 2.5rem)}.nav-panel-menu:not(.is-active) .nav-menu{opacity:.75}.nav-panel-menu:not(.is-active)::after{content:"";background:rgba(0,0,0,.5);display:block;position:absolute;top:0;right:0;bottom:0;left:0}.nav-menu{min-height:100%;padding:.5rem .75rem;line-height:1.35;position:relative}.nav-menu h3.title{color:#424242;font-size:inherit;font-weight:500;margin:0;padding:.25em 0 .125em}.nav-list{list-style:none;margin:0 0 0 .75rem;padding:0}.nav-menu>.nav-list+.nav-list{margin-top:.5rem}.nav-item{margin-top:.5em}.nav-item-toggle~.nav-list{padding-bottom:.125rem}.nav-item[data-depth="0"]>.nav-list:first-child{display:block;margin:0}.nav-item:not(.is-active)>.nav-list{display:none}.nav-item-toggle{background:transparent url(../img/caret.svg) no-repeat 50%/50%;border:none;outline:none;line-height:inherit;padding:0;position:absolute;height:1.35em;width:1.35em;margin-top:-.05em;margin-left:-1.35em}.nav-item.is-active>.nav-item-toggle{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.is-current-page>.nav-link,.is-current-page>.nav-text{font-weight:500}.nav-panel-explore{background:#fafafa;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;position:absolute;top:0;right:0;bottom:0;left:0}.nav-panel-explore:not(:first-child){top:auto;max-height:calc(50% + 2.5rem)}.nav-panel-explore .context{font-size:.83333rem;-ms-flex-negative:0;flex-shrink:0;color:#5d5d5d;-webkit-box-shadow:0 -1px 0 #e1e1e1;box-shadow:0 -1px 0 #e1e1e1;padding:0 .5rem;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;line-height:1;height:2.5rem}.nav-panel-explore:not(:first-child) .context{cursor:pointer}.nav-panel-explore .context .version{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:inherit;-ms-flex-align:inherit;align-items:inherit}.nav-panel-explore .context .version::after{content:"";background:url(../img/chevron.svg) no-repeat 100%/auto 100%;width:1.25em;height:.75em}.nav-panel-explore .components{line-height:1.6;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-webkit-box-shadow:inset 0 1px 5px #e1e1e1;box-shadow:inset 0 1px 5px #e1e1e1;background:#f0f0f0;padding:.5rem .75rem 0;margin:0;overflow-y:scroll;-ms-scroll-chaining:none;overscroll-behavior:none;max-height:100%;display:block}.nav-panel-explore:not(.is-active) .components{display:none}.nav-panel-explore .component{display:block}.nav-panel-explore .component+.component{margin-top:.5rem}.nav-panel-explore .component:last-child{margin-bottom:.75rem}.nav-panel-explore .component .title{font-weight:500}.nav-panel-explore .versions{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding-left:0;margin-top:-.25rem;line-height:1;list-style:none}.nav-panel-explore .component .version{margin:.375rem .375rem 0 0}.nav-panel-explore .component .version a{border:1px solid #c1c1c1;border-radius:.25rem;opacity:.75;white-space:nowrap;padding:.125em .25em;display:inherit}.nav-panel-explore .component .is-current a{border-color:currentColor;opacity:.9;font-weight:500}@media screen and (max-width:1023.5px){aside.toc.sidebar{display:none}main>.content{overflow-x:auto}}@media screen and (min-width:1024px){main{-webkit-box-flex:1;-ms-flex:auto;flex:auto;min-width:0}main>.content{display:-webkit-box;display:-ms-flexbox;display:flex}aside.toc.embedded{display:none}aside.toc.sidebar{-webkit-box-flex:0;-ms-flex:0 0 9rem;flex:0 0 9rem;-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}}@media screen and (min-width:1216px){aside.toc.sidebar{-ms-flex-preferred-size:12rem;flex-basis:12rem}}.toolbar{color:#5d5d5d;-webkit-box-align:center;-ms-flex-align:center;align-items:center;background-color:#fafafa;-webkit-box-shadow:0 1px 0 #e1e1e1;box-shadow:0 1px 0 #e1e1e1;display:-webkit-box;display:-ms-flexbox;display:flex;font-size:.83333rem;height:2.5rem;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;position:sticky;top:3.5rem;z-index:2}.toolbar a{color:inherit}.nav-toggle{background:url(../img/menu.svg) no-repeat 50% 47.5%;background-size:49%;border:none;outline:none;line-height:inherit;padding:0;height:2.5rem;width:2.5rem;margin-right:-.25rem}@media screen and (min-width:1024px){.nav-toggle{display:none}}.nav-toggle.is-active{background-image:url(../img/back.svg);background-size:41.5%}.home-link{display:block;background:url(../img/home-o.svg) no-repeat 50%;height:1.25rem;width:1.25rem;margin:.625rem}.home-link.is-current,.home-link:hover{background-image:url(../img/home.svg)}.edit-this-page{display:none;padding-right:.5rem}@media screen and (min-width:1024px){.edit-this-page{display:block}}.toolbar .edit-this-page a{color:#8e8e8e}.breadcrumbs{display:none;-webkit-box-flex:1;-ms-flex:1 1;flex:1 1;padding:0 .5rem 0 .75rem;line-height:1.35}@media screen and (min-width:1024px){.breadcrumbs{display:block}}a+.breadcrumbs{padding-left:.05rem}.breadcrumbs ul{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin:0;padding:0;list-style:none}.breadcrumbs li{display:inline;margin:0}.breadcrumbs li::after{content:"/";padding:0 .5rem}.breadcrumbs li:last-of-type::after{content:none}.page-versions{margin:0 .2rem 0 auto;position:relative;line-height:1}@media screen and (min-width:1024px){.page-versions{margin-right:.7rem}}.page-versions .version-menu-toggle{color:inherit;background:url(../img/chevron.svg) no-repeat;background-position:right .5rem top 50%;background-size:auto .75em;border:none;outline:none;line-height:inherit;padding:.5rem 1.5rem .5rem .5rem;position:relative;z-index:3}.page-versions .version-menu{display:-webkit-box;display:-ms-flexbox;display:flex;min-width:100%;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end;background:-webkit-gradient(linear,left top,left bottom,from(#f0f0f0),to(#f0f0f0)) no-repeat;background:linear-gradient(180deg,#f0f0f0 0,#f0f0f0) no-repeat;padding:1.375rem 1.5rem .5rem .5rem;position:absolute;top:0;right:0;white-space:nowrap}.page-versions:not(.is-active) .version-menu{display:none}.page-versions .version{display:block;padding-top:.5rem}.page-versions .version.is-current{display:none}.page-versions .version.is-missing{color:#8e8e8e;font-style:italic;text-decoration:none}.toc-menu{color:#5d5d5d}.toc.sidebar .toc-menu{margin-right:.75rem;position:sticky;top:6rem}.toc .toc-menu h3{color:#333;font-size:.88889rem;font-weight:500;line-height:1.3;margin:0 -.5px;padding-bottom:.25rem}.toc.sidebar .toc-menu h3{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;height:2.5rem;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end}.toc .toc-menu ul{font-size:.83333rem;line-height:1.2;list-style:none;margin:0;padding:0}.toc.sidebar .toc-menu ul{max-height:calc(100vh - 8.5rem);overflow-y:auto;-ms-scroll-chaining:none;overscroll-behavior:none}@supports (scrollbar-width:none){.toc.sidebar .toc-menu ul{scrollbar-width:none}}.toc .toc-menu ul::-webkit-scrollbar{width:0;height:0}@media screen and (min-width:1024px){.toc .toc-menu h3{font-size:.83333rem}.toc .toc-menu ul{font-size:.75rem}}.toc .toc-menu li{margin:0}.toc .toc-menu li[data-level="2"] a{padding-left:1.25rem}.toc .toc-menu li[data-level="3"] a{padding-left:2rem}.toc .toc-menu a{color:inherit;border-left:2px solid #e1e1e1;display:inline-block;padding:.25rem 0 .25rem .5rem;text-decoration:none}.sidebar.toc .toc-menu a{display:block;outline:none}.toc .toc-menu a:hover{color:#1565c0}.toc .toc-menu a.is-active{border-left-color:#1565c0;color:#333}.sidebar.toc .toc-menu a:focus{background:#fafafa}.toc .toc-menu .is-hidden-toc{display:none!important}.doc{color:#333;font-size:inherit;-webkit-hyphens:auto;-ms-hyphens:auto;hyphens:auto;line-height:1.6;margin:0 auto;max-width:40rem;padding:0 1rem 4rem}@media screen and (min-width:1024px){.doc{-webkit-box-flex:1;-ms-flex:auto;flex:auto;font-size:.94444rem;margin:0 2rem;max-width:46rem;min-width:0}}.doc h1,.doc h2,.doc h3,.doc h4,.doc h5,.doc h6{color:#191919;font-weight:400;-webkit-hyphens:none;-ms-hyphens:none;hyphens:none;line-height:1.3;margin:1rem 0 0}.doc>h1.page:first-child{font-size:2rem;margin:1.5rem 0}@media screen and (min-width:769px){.doc>h1.page:first-child{margin-top:2.5rem}}.doc>h1.page:first-child+aside.toc.embedded{margin-top:-.5rem}.doc>h2#name+.sectionbody{margin-top:1rem}#preamble+.sect1,.doc .sect1+.sect1{margin-top:2rem}.doc h1.sect0{background:#f0f0f0;font-size:1.8em;margin:1.5rem -1rem 0;padding:.5rem 1rem}.doc h2:not(.discrete){border-bottom:1px solid #e1e1e1;margin-left:-1rem;margin-right:-1rem;padding:.4rem 1rem .1rem}.doc h3:not(.discrete),.doc h4:not(.discrete){font-weight:500}.doc h1 .anchor,.doc h2 .anchor,.doc h3 .anchor,.doc h4 .anchor,.doc h5 .anchor,.doc h6 .anchor{position:absolute;text-decoration:none;width:1.75ex;margin-left:-1.5ex;visibility:hidden;font-size:.8em;font-weight:400;padding-top:.05em}.doc h1 .anchor::before,.doc h2 .anchor::before,.doc h3 .anchor::before,.doc h4 .anchor::before,.doc h5 .anchor::before,.doc h6 .anchor::before{content:"\00a7"}.doc h1:hover .anchor,.doc h2:hover .anchor,.doc h3:hover .anchor,.doc h4:hover .anchor,.doc h5:hover .anchor,.doc h6:hover .anchor{visibility:visible}.doc dl,.doc p{margin:0}.doc a{color:#1565c0}.doc a:hover{color:#104d92}.doc a.bare{-webkit-hyphens:none;-ms-hyphens:none;hyphens:none}.doc a.unresolved{color:#d32f2f}.doc i.fa{-webkit-hyphens:none;-ms-hyphens:none;hyphens:none;font-style:normal}.doc .colist>table code,.doc p code,.doc thead code{color:#222;background:#fafafa;border-radius:.25em;font-size:.95em;padding:.125em .25em}.doc code,.doc pre{-webkit-hyphens:none;-ms-hyphens:none;hyphens:none}.doc pre{font-size:.88889rem;line-height:1.5;margin:0}.doc blockquote{margin:0}.doc .paragraph.lead>p{font-size:1rem}.doc .right{float:right}.doc .left{float:left}.doc .float-gap.right{margin:0 1rem 1rem 0}.doc .float-gap.left{margin:0 0 1rem 1rem}.doc .float-group::after{content:"";display:table;clear:both}.doc .stretch{width:100%}.doc .underline{text-decoration:underline}.doc .line-through{text-decoration:line-through}.doc .dlist,.doc .exampleblock,.doc .hdlist,.doc .imageblock,.doc .listingblock,.doc .literalblock,.doc .olist,.doc .paragraph,.doc .partintro,.doc .quoteblock,.doc .sidebarblock,.doc .tabs,.doc .ulist,.doc .verseblock,.doc .videoblock,.doc details,.doc hr{margin:1rem 0 0}.doc table.tableblock{font-size:.83333rem}.doc .tablecontainer,.doc .tablecontainer+*,.doc :not(.tablecontainer)>table.tableblock,.doc :not(.tablecontainer)>table.tableblock+*{margin-top:1.5rem}.doc p.tableblock+p.tableblock{margin-top:.5rem}.doc td.tableblock>.content>:first-child{margin-top:0}.doc table.tableblock td,.doc table.tableblock th{padding:.5rem}.doc table.tableblock,.doc table.tableblock>*>tr>*{border:0 solid #e1e1e1}.doc table.grid-all>*>tr>*{border-width:1px}.doc table.grid-cols>*>tr>*{border-width:0 1px}.doc table.grid-rows>*>tr>*{border-width:1px 0}.doc table.grid-all>thead th,.doc table.grid-rows>thead th{border-bottom-width:2.5px}.doc table.frame-all{border-width:1px}.doc table.frame-ends{border-width:1px 0}.doc table.frame-sides{border-width:0 1px}.doc table.frame-none>colgroup+*>:first-child>*,.doc table.frame-sides>colgroup+*>:first-child>*{border-top-width:0}.doc table.frame-sides>:last-child>:last-child>*{border-bottom-width:0}.doc table.frame-ends>*>tr>:first-child,.doc table.frame-none>*>tr>:first-child{border-left-width:0}.doc table.frame-ends>*>tr>:last-child,.doc table.frame-none>*>tr>:last-child{border-right-width:0}.doc table.stripes-all>tbody>tr,.doc table.stripes-even>tbody>tr:nth-of-type(2n),.doc table.stripes-hover>tbody>tr:hover,.doc table.stripes-odd>tbody>tr:nth-of-type(odd){background:#fafafa}.doc table.tableblock>tfoot{background:-webkit-gradient(linear,left top,left bottom,from(#f0f0f0),to(#fff));background:linear-gradient(180deg,#f0f0f0 0,#fff)}.doc .halign-left{text-align:left}.doc .halign-right{text-align:right}.doc .halign-center{text-align:center}.doc .valign-top{vertical-align:top}.doc .valign-bottom{vertical-align:bottom}.doc .valign-middle{vertical-align:middle}.doc .admonitionblock{margin:1.4rem 0 0}.doc .admonitionblock p,.doc .admonitionblock td.content{font-size:.88889rem}.doc .admonitionblock td.content>.title+*,.doc .admonitionblock td.content>:not(.title):first-child{margin-top:0}.doc .admonitionblock pre{font-size:.83333rem}.doc .admonitionblock>table{table-layout:fixed;position:relative;width:100%}.doc .admonitionblock td.content{padding:1rem 1rem .75rem;background:#fafafa;width:100%;word-wrap:anywhere}.doc .admonitionblock .icon{position:absolute;top:0;left:0;font-size:.83333rem;padding:0 .5rem;height:1.25rem;line-height:1;font-weight:500;text-transform:uppercase;border-radius:.45rem;-webkit-transform:translate(-.5rem,-50%);transform:translate(-.5rem,-50%)}.doc .admonitionblock.caution .icon{background-color:#a0439c;color:#fff}.doc .admonitionblock.important .icon{background-color:#d32f2f;color:#fff}.doc .admonitionblock.note .icon{background-color:#217ee7;color:#fff}.doc .admonitionblock.tip .icon{background-color:#41af46;color:#fff}.doc .admonitionblock.warning .icon{background-color:#e18114;color:#fff}.doc .admonitionblock .icon i{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;height:100%}.doc .admonitionblock .icon i::after{content:attr(title)}.doc .imageblock,.doc .videoblock{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.doc .imageblock.text-left,.doc .videoblock.text-left{-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.doc .imageblock.text-right,.doc .videoblock.text-right{-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end}.doc .image>img,.doc .image>object,.doc .image>svg,.doc .imageblock img,.doc .imageblock object,.doc .imageblock svg{display:inline-block;height:auto;max-width:100%;vertical-align:middle}.doc .image:not(.left):not(.right)>img{margin-top:-.2em}.doc .videoblock iframe{max-width:100%;vertical-align:middle}#preamble .abstract blockquote{background:#f0f0f0;border-left:5px solid #e1e1e1;color:#4a4a4a;font-size:.88889rem;padding:.75em 1em}.doc .quoteblock,.doc .verseblock{background:#fafafa;border-left:5px solid #5d5d5d;color:#5d5d5d}.doc .quoteblock{padding:.25rem 2rem 1.25rem}.doc .quoteblock .attribution{color:#8e8e8e;font-size:.83333rem;margin-top:.75rem}.doc .quoteblock blockquote{margin-top:1rem}.doc .quoteblock .paragraph{font-style:italic}.doc .quoteblock cite{padding-left:1em}.doc .verseblock{font-size:1.15em;padding:1rem 2rem}.doc .verseblock pre{font-family:inherit;font-size:inherit}.doc ol,.doc ul{margin:0;padding:0 0 0 2rem}.doc ol.none,.doc ol.unnumbered,.doc ol.unstyled,.doc ul.checklist,.doc ul.no-bullet,.doc ul.none,.doc ul.unstyled{list-style-type:none}.doc ol.unnumbered,.doc ul.no-bullet{padding-left:1.25rem}.doc ol.unstyled,.doc ul.unstyled{padding-left:0}.doc ul.circle{list-style-type:circle}.doc ul.disc{list-style-type:disc}.doc ul.square{list-style-type:square}.doc ul.circle ul:not([class]),.doc ul.disc ul:not([class]),.doc ul.square ul:not([class]){list-style:inherit}.doc ol.arabic{list-style-type:decimal}.doc ol.decimal{list-style-type:decimal-leading-zero}.doc ol.loweralpha{list-style-type:lower-alpha}.doc ol.upperalpha{list-style-type:upper-alpha}.doc ol.lowerroman{list-style-type:lower-roman}.doc ol.upperroman{list-style-type:upper-roman}.doc ol.lowergreek{list-style-type:lower-greek}.doc ul.checklist{padding-left:1.75rem}.doc ul.checklist p>i.fa-check-square-o:first-child,.doc ul.checklist p>i.fa-square-o:first-child{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:1.25rem;margin-left:-1.25rem}.doc ul.checklist i.fa-check-square-o::before{content:"\2713"}.doc ul.checklist i.fa-square-o::before{content:"\274f"}.doc .dlist .dlist,.doc .dlist .olist,.doc .dlist .ulist,.doc .olist .dlist,.doc .olist .olist,.doc .olist .ulist,.doc .olist li+li,.doc .ulist .dlist,.doc .ulist .olist,.doc .ulist .ulist,.doc .ulist li+li{margin-top:.5rem}.doc .admonitionblock .listingblock,.doc .olist .listingblock,.doc .ulist .listingblock{padding:0}.doc .admonitionblock .title,.doc .exampleblock .title,.doc .imageblock .title,.doc .listingblock .title,.doc .literalblock .title,.doc .openblock .title,.doc .tableblock caption,.doc .videoblock .title{color:#5d5d5d;font-size:.88889rem;font-style:italic;font-weight:500;-webkit-hyphens:none;-ms-hyphens:none;hyphens:none;letter-spacing:.01em;padding-bottom:.075rem}.doc .tableblock caption{text-align:left}.doc .olist .title,.doc .ulist .title{font-style:italic;font-weight:500;margin-bottom:.25rem}.doc .imageblock .title{margin-top:.5rem;padding-bottom:0}.doc details{margin-left:1rem}.doc details>summary{display:block;position:relative;line-height:1.6;margin-bottom:.5rem}.doc details>summary::-webkit-details-marker{display:none}.doc details>summary::before{content:"";border:solid transparent;border-left:solid;border-width:.3em 0 .3em .5em;position:absolute;top:.5em;left:-1rem;-webkit-transform:translateX(15%);transform:translateX(15%)}.doc details[open]>summary::before{border-color:currentColor transparent transparent;border-width:.5rem .3rem 0;-webkit-transform:translateY(15%);transform:translateY(15%)}.doc details>summary::after{content:"";width:1rem;height:1em;position:absolute;top:.3em;left:-1rem}.doc details.result{margin-top:.25rem}.doc details.result>summary{color:#5d5d5d;font-style:italic;margin-bottom:0}.doc details.result>.content{margin-left:-1rem}.doc .exampleblock>.content,.doc details.result>.content{background:#fff;border:.25rem solid #5d5d5d;border-radius:.5rem;padding:.75rem}.doc .exampleblock>.content::after,.doc details.result>.content::after{content:"";display:table;clear:both}.doc .exampleblock>.content>:first-child,.doc details>.content>:first-child{margin-top:0}.doc .sidebarblock{background:#e1e1e1;border-radius:.75rem;padding:.75rem 1.5rem}.doc .sidebarblock>.content>.title{font-size:1.25rem;font-weight:500;line-height:1.3;margin-bottom:-.3em;text-align:center}.doc .sidebarblock>.content>:not(.title):first-child{margin-top:0}.doc .listingblock.wrap pre,.doc .tableblock pre{white-space:pre-wrap}.doc .listingblock pre:not(.highlight),.doc .literalblock pre,.doc pre.highlight code{background:#fafafa;-webkit-box-shadow:inset 0 0 1.75px #e1e1e1;box-shadow:inset 0 0 1.75px #e1e1e1;display:block;overflow-x:auto;padding:.875em}.doc .listingblock>.content{position:relative}.doc .source-toolbox{display:-webkit-box;display:-ms-flexbox;display:flex;visibility:hidden;position:absolute;top:.25rem;right:.5rem;color:grey;font-family:Roboto,sans-serif;font-size:.72222rem;line-height:1;white-space:nowrap;z-index:1}.doc .listingblock:hover .source-toolbox{visibility:visible}.doc .source-toolbox .source-lang{text-transform:uppercase;letter-spacing:.075em}.doc .source-toolbox>:not(:last-child)::after{content:"|";letter-spacing:0;padding:0 1ch}.doc .source-toolbox .copy-button{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;background:none;border:none;color:inherit;outline:none;padding:0;font-size:inherit;line-height:inherit;width:1em;height:1em}.doc .source-toolbox .copy-icon{-webkit-box-flex:0;-ms-flex:none;flex:none;width:inherit;height:inherit}.doc .source-toolbox img.copy-icon{-webkit-filter:invert(50.2%);filter:invert(50.2%)}.doc .source-toolbox svg.copy-icon{fill:currentColor}.doc .source-toolbox .copy-toast{-webkit-box-flex:0;-ms-flex:none;flex:none;position:relative;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;margin-top:1em;background-color:#333;border-radius:.25em;padding:.5em;color:#fff;cursor:auto;opacity:0;-webkit-transition:opacity .5s ease .5s;transition:opacity .5s ease .5s}.doc .source-toolbox .copy-toast::after{content:"";position:absolute;top:0;width:1em;height:1em;border:.55em solid transparent;border-left-color:#333;-webkit-transform:rotate(-90deg) translateX(50%) translateY(50%);transform:rotate(-90deg) translateX(50%) translateY(50%);-webkit-transform-origin:left;transform-origin:left}.doc .source-toolbox .copy-button.clicked .copy-toast{opacity:1;-webkit-transition:none;transition:none}.doc .language-console .hljs-meta{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.doc .dlist dt{font-style:italic}.doc .dlist dd{margin:0 0 .25rem 1.5rem}.doc .dlist dd:last-of-type{margin-bottom:0}.doc td.hdlist1,.doc td.hdlist2{padding:.5rem 0 0;vertical-align:top}.doc tr:first-child>.hdlist1,.doc tr:first-child>.hdlist2{padding-top:0}.doc td.hdlist1{font-weight:500;padding-right:.25rem}.doc td.hdlist2{padding-left:.25rem}.doc .colist{font-size:.88889rem;margin:.25rem 0 -.25rem}.doc .colist>table>tbody>tr>:first-child,.doc .colist>table>tr>:first-child{padding:.25em .5rem 0;vertical-align:top}.doc .colist>table>tbody>tr>:last-child,.doc .colist>table>tr>:last-child{padding:.25rem 0}.doc .conum[data-value]{border:1px solid;border-radius:100%;display:inline-block;font-family:Roboto,sans-serif;font-size:.75rem;font-style:normal;line-height:1.2;text-align:center;width:1.25em;height:1.25em;letter-spacing:-.25ex;text-indent:-.25ex}.doc .conum[data-value]::after{content:attr(data-value)}.doc .conum[data-value]+b{display:none}.doc hr{border:solid #e1e1e1;border-width:2px 0 0;height:0}.doc b.button{white-space:nowrap}.doc b.button::before{content:"[";padding-right:.25em}.doc b.button::after{content:"]";padding-left:.25em}.doc kbd{display:inline-block;font-size:.66667rem;background:#fafafa;border:1px solid #c1c1c1;border-radius:.25em;-webkit-box-shadow:0 1px 0 #c1c1c1,0 0 0 .1em #fff inset;box-shadow:0 1px 0 #c1c1c1,inset 0 0 0 .1em #fff;padding:.25em .5em;vertical-align:text-bottom;white-space:nowrap}.doc .keyseq,.doc kbd{line-height:1}.doc .keyseq{font-size:.88889rem}.doc .keyseq kbd{margin:0 .125em}.doc .keyseq kbd:first-child{margin-left:0}.doc .keyseq kbd:last-child{margin-right:0}.doc .menuseq,.doc .path{-webkit-hyphens:none;-ms-hyphens:none;hyphens:none}.doc .menuseq i.caret::before{content:"\203a";font-size:1.1em;font-weight:500;line-height:.90909}.doc :not(pre).nowrap{white-space:nowrap}.doc .nobreak{-webkit-hyphens:none;-ms-hyphens:none;hyphens:none;word-wrap:normal}#footnotes{font-size:.85em;line-height:1.5;margin:2rem -.5rem 0}.doc td.tableblock>.content #footnotes{margin:2rem 0 0}#footnotes hr{border-top-width:1px;margin-top:0;width:20%}#footnotes .footnote{margin:.5em 0 0 1em}#footnotes .footnote+.footnote{margin-top:.25em}#footnotes .footnote>a:first-of-type{display:inline-block;margin-left:-2em;text-align:right;width:1.5em}nav.pagination{border-top:1px solid #e1e1e1;line-height:1;margin:2rem -1rem -1rem;padding:.75rem 1rem 0}nav.pagination,nav.pagination span{display:-webkit-box;display:-ms-flexbox;display:flex}nav.pagination span{-webkit-box-flex:50%;-ms-flex:50%;flex:50%;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}nav.pagination .prev{padding-right:.5rem}nav.pagination .next{margin-left:auto;padding-left:.5rem;text-align:right}nav.pagination span::before{color:#8e8e8e;font-size:.75em;padding-bottom:.1em}nav.pagination .prev::before{content:"Prev"}nav.pagination .next::before{content:"Next"}nav.pagination a{font-weight:500;line-height:1.3;position:relative}nav.pagination a::after,nav.pagination a::before{color:#8e8e8e;font-weight:400;font-size:1.5em;line-height:.75;position:absolute;top:0;width:1rem}nav.pagination .prev a::before{content:"\2039";-webkit-transform:translateX(-100%);transform:translateX(-100%)}nav.pagination .next a::after{content:"\203a"}html.is-clipped--navbar{overflow-y:hidden}body{padding-top:3.5rem}.navbar{background:#191919;color:#fff;font-size:.88889rem;height:3.5rem;position:fixed;top:0;width:100%;z-index:4}.navbar a{text-decoration:none}.navbar-brand{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-ms-flex:auto;flex:auto;padding-left:1rem}.navbar-brand .navbar-item{color:#fff}.navbar-brand .navbar-item:first-child{-ms-flex-item-align:center;align-self:center;padding:0;font-size:1.22222rem;-ms-flex-wrap:wrap;flex-wrap:wrap;line-height:1}.navbar-brand .navbar-item:first-child a{color:inherit;word-wrap:normal}.navbar-brand .navbar-item:first-child :not(:last-child){padding-right:.375rem}.navbar-brand .navbar-item.search{-webkit-box-flex:1;-ms-flex:auto;flex:auto;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end}#search-input{color:#333;font-family:inherit;font-size:.95rem;width:150px;border:1px solid #dbdbdb;border-radius:.1em;line-height:1.5;padding:0 .25em}#search-input:disabled{background-color:#dbdbdb;cursor:not-allowed;pointer-events:all!important}#search-input:disabled::-webkit-input-placeholder{color:#4c4c4c}#search-input:disabled::-moz-placeholder{color:#4c4c4c}#search-input:disabled:-ms-input-placeholder{color:#4c4c4c}#search-input:disabled::-ms-input-placeholder{color:#4c4c4c}#search-input:disabled::placeholder{color:#4c4c4c}#search-input:focus{outline:none}.navbar-burger{background:none;border:none;outline:none;line-height:1;position:relative;width:3rem;padding:0;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;margin-left:auto;min-width:0}.navbar-burger span{background-color:#fff;height:1.5px;width:1rem}.navbar-burger:not(.is-active) span{-webkit-transition:opacity 0s .25s,margin-top .25s ease-out .25s,-webkit-transform .25s ease-out;transition:opacity 0s .25s,margin-top .25s ease-out .25s,-webkit-transform .25s ease-out;transition:transform .25s ease-out,opacity 0s .25s,margin-top .25s ease-out .25s;transition:transform .25s ease-out,opacity 0s .25s,margin-top .25s ease-out .25s,-webkit-transform .25s ease-out}.navbar-burger span+span{margin-top:.25rem}.navbar-burger.is-active span+span{margin-top:-1.5px}.navbar-burger.is-active span:first-child{-webkit-transform:rotate(45deg);transform:rotate(45deg)}.navbar-burger.is-active span:nth-child(2){opacity:0}.navbar-burger.is-active span:nth-child(3){-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}.navbar-item,.navbar-link{color:#222;display:block;line-height:1.6;padding:.5rem 1rem}.navbar-item.has-dropdown{padding:0}.navbar-item .icon{width:1.25rem;height:1.25rem;display:block}.navbar-item .icon img,.navbar-item .icon svg{fill:currentColor;width:inherit;height:inherit}.navbar-link{padding-right:2.5em}.navbar-dropdown .navbar-item{padding-left:1.5rem;padding-right:1.5rem}.navbar-dropdown .navbar-item.has-label{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.navbar-dropdown .navbar-item small{color:#8e8e8e;font-size:.66667rem}.navbar-divider{background-color:#e1e1e1;border:none;height:1px;margin:.25rem 0}.navbar .button{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;background:#fff;border:1px solid #e1e1e1;border-radius:.15rem;height:1.75rem;color:#222;padding:0 .75em;white-space:nowrap}@media screen and (max-width:768.5px){.navbar-brand .navbar-item.search{padding-left:0;padding-right:0}}@media screen and (min-width:769px){#search-input{width:200px}}@media screen and (max-width:1023.5px){.navbar-brand{height:inherit}.navbar-brand .navbar-item{-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-ms-flexbox;display:flex}.navbar-menu{background:#fff;-webkit-box-shadow:0 8px 16px rgba(10,10,10,.1);box-shadow:0 8px 16px rgba(10,10,10,.1);max-height:calc(100vh - 3.5rem);overflow-y:auto;-ms-scroll-chaining:none;overscroll-behavior:none;padding:.5rem 0}.navbar-menu:not(.is-active){display:none}.navbar-menu .navbar-link:hover,.navbar-menu a.navbar-item:hover{background:#f5f5f5}}@media screen and (min-width:1024px){.navbar-burger{display:none}.navbar,.navbar-end,.navbar-item,.navbar-link,.navbar-menu{display:-webkit-box;display:-ms-flexbox;display:flex}.navbar-item,.navbar-link{position:relative;-webkit-box-flex:0;-ms-flex:none;flex:none}.navbar-item:not(.has-dropdown),.navbar-link{-webkit-box-align:center;-ms-flex-align:center;align-items:center}.navbar-item.is-hoverable:hover .navbar-dropdown{display:block}.navbar-link::after{border-width:0 0 1px 1px;border-style:solid;content:"";display:block;height:.5em;pointer-events:none;position:absolute;-webkit-transform:rotate(-45deg);transform:rotate(-45deg);width:.5em;margin-top:-.375em;right:1.125em;top:50%}.navbar-end .navbar-link,.navbar-end>.navbar-item{color:#fff}.navbar-end .navbar-item.has-dropdown:hover .navbar-link,.navbar-end .navbar-link:hover,.navbar-end>a.navbar-item:hover{background:#000;color:#fff}.navbar-end .navbar-link::after{border-color:currentColor}.navbar-dropdown{background:#fff;border:1px solid #e1e1e1;border-top:none;border-radius:0 0 .25rem .25rem;display:none;top:100%;left:0;min-width:100%;position:absolute}.navbar-dropdown .navbar-item{padding:.5rem 3rem .5rem 1rem;white-space:nowrap}.navbar-dropdown .navbar-item small{position:relative;right:-2rem}.navbar-dropdown .navbar-item:last-child{border-radius:inherit}.navbar-dropdown.is-right{left:auto;right:0}.navbar-dropdown a.navbar-item:hover{background:#f5f5f5}}footer.footer{background-color:#e1e1e1;color:#5d5d5d;font-size:.83333rem;line-height:1.6;padding:1.5rem}.footer p{margin:.5rem 0}.footer a{color:#191919} +@font-face{font-family:Roboto;font-style:normal;font-weight:400;src:url(../font/roboto-latin-400-normal.woff2) format("woff2"),url(../font/roboto-latin-400-normal.woff) format("woff");unicode-range:U+00??,U+0131,U+0152-0153,U+02bb-02bc,U+02c6,U+02da,U+02dc,U+2000-206f,U+2074,U+20ac,U+2122,U+2191,U+2193,U+2212,U+2215,U+feff,U+fffd}@font-face{font-family:Roboto;font-style:normal;font-weight:400;src:url(../font/roboto-cyrillic-400-normal.woff2) format("woff2");unicode-range:U+0301,U+0400-045f,U+0490-0491,U+04b0-04b1,U+2116}@font-face{font-family:Roboto;font-style:italic;font-weight:400;src:url(../font/roboto-latin-400-italic.woff2) format("woff2"),url(../font/roboto-latin-400-italic.woff) format("woff");unicode-range:U+00??,U+0131,U+0152-0153,U+02bb-02bc,U+02c6,U+02da,U+02dc,U+2000-206f,U+2074,U+20ac,U+2122,U+2191,U+2193,U+2212,U+2215,U+feff,U+fffd}@font-face{font-family:Roboto;font-style:italic;font-weight:400;src:url(../font/roboto-cyrillic-400-italic.woff2) format("woff2");unicode-range:U+0301,U+0400-045f,U+0490-0491,U+04b0-04b1,U+2116}@font-face{font-family:Roboto;font-style:normal;font-weight:600;src:url(../font/roboto-latin-500-normal.woff2) format("woff2"),url(../font/roboto-latin-500-normal.woff) format("woff");unicode-range:U+00??,U+0131,U+0152-0153,U+02bb-02bc,U+02c6,U+02da,U+02dc,U+2000-206f,U+2074,U+20ac,U+2122,U+2191,U+2193,U+2212,U+2215,U+feff,U+fffd}@font-face{font-family:Roboto;font-style:normal;font-weight:600;src:url(../font/roboto-cyrillic-500-normal.woff2) format("woff2");unicode-range:U+0301,U+0400-045f,U+0490-0491,U+04b0-04b1,U+2116}@font-face{font-family:Roboto;font-style:italic;font-weight:600;src:url(../font/roboto-latin-500-italic.woff2) format("woff2"),url(../font/roboto-latin-500-italic.woff) format("woff");unicode-range:U+00??,U+0131,U+0152-0153,U+02bb-02bc,U+02c6,U+02da,U+02dc,U+2000-206f,U+2074,U+20ac,U+2122,U+2191,U+2193,U+2212,U+2215,U+feff,U+fffd}@font-face{font-family:Roboto;font-style:italic;font-weight:600;src:url(../font/roboto-cyrillic-500-italic.woff2) format("woff2");unicode-range:U+0301,U+0400-045f,U+0490-0491,U+04b0-04b1,U+2116}@font-face{font-family:Roboto Mono;font-style:normal;font-weight:400;src:url(../font/roboto-mono-latin-400-normal.woff2) format("woff2"),url(../font/roboto-mono-latin-400-normal.woff) format("woff");unicode-range:U+00??,U+0131,U+0152-0153,U+02bb-02bc,U+02c6,U+02da,U+02dc,U+2000-206f,U+2074,U+20ac,U+2122,U+2191,U+2193,U+2212,U+2215,U+feff,U+fffd}@font-face{font-family:Roboto Mono;font-style:normal;font-weight:600;src:url(../font/roboto-mono-latin-500-normal.woff2) format("woff2"),url(../font/roboto-mono-latin-500-normal.woff) format("woff");unicode-range:U+00??,U+0131,U+0152-0153,U+02bb-02bc,U+02c6,U+02da,U+02dc,U+2000-206f,U+2074,U+20ac,U+2122,U+2191,U+2193,U+2212,U+2215,U+feff,U+fffd}*,::after,::before{-webkit-box-sizing:inherit;box-sizing:inherit}html{-webkit-box-sizing:border-box;box-sizing:border-box;font-size:1.0625em;height:100%;scroll-behavior:smooth}@media screen and (min-width:1024px){html{font-size:1.125em}}body{background:#fff;color:#222;font-family:Roboto,sans-serif;line-height:1.15;margin:0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;word-wrap:anywhere}a{text-decoration:none}a:hover{text-decoration:underline}a:active{background-color:none}code,kbd,pre{font-family:Roboto Mono,monospace}b,dt,strong,th{font-weight:600}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}em em{font-style:normal}strong strong{font-weight:400}button{cursor:pointer;font-family:inherit;font-size:1em;line-height:1.15;margin:0}button::-moz-focus-inner{border:none;padding:0}summary{cursor:pointer;-webkit-tap-highlight-color:transparent;outline:none}table{border-collapse:collapse;word-wrap:normal}object[type="image/svg+xml"]:not([width]){width:-webkit-fit-content;width:-moz-fit-content;width:fit-content}::-webkit-input-placeholder{opacity:.5}::-moz-placeholder{opacity:.5}:-ms-input-placeholder{opacity:.5}::-ms-input-placeholder{opacity:.5}::placeholder{opacity:.5}@media (pointer:fine){@supports (scrollbar-width:thin){html{scrollbar-color:#c1c1c1 #fafafa}body *{scrollbar-width:thin;scrollbar-color:#c1c1c1 transparent}}html::-webkit-scrollbar{background-color:#fafafa;height:12px;width:12px}body ::-webkit-scrollbar{height:6px;width:6px}::-webkit-scrollbar-thumb{background-clip:padding-box;background-color:#c1c1c1;border:3px solid transparent;border-radius:12px}body ::-webkit-scrollbar-thumb{border-width:1.75px;border-radius:6px}::-webkit-scrollbar-thumb:hover{background-color:#9c9c9c}}@media screen and (min-width:1024px){.body{display:-webkit-box;display:-ms-flexbox;display:flex}}@media screen and (max-width:1023.5px){html.is-clipped--nav{overflow-y:hidden}}.nav-container{position:fixed;top:3.5rem;left:0;width:100%;font-size:.94444rem;z-index:1;visibility:hidden}@media screen and (min-width:769px){.nav-container{width:15rem}}@media screen and (min-width:1024px){.nav-container{font-size:.86111rem;-webkit-box-flex:0;-ms-flex:none;flex:none;position:static;top:0;visibility:visible}}.nav-container.is-active{visibility:visible}.nav{background:#fafafa;position:relative;top:2.5rem;height:calc(100vh - 6rem)}@media screen and (min-width:769px){.nav{-webkit-box-shadow:.5px 0 3px #c1c1c1;box-shadow:.5px 0 3px #c1c1c1}}@media screen and (min-width:1024px){.nav{top:3.5rem;-webkit-box-shadow:none;box-shadow:none;position:sticky;height:calc(100vh - 3.5rem)}}.nav a{color:inherit}.nav .panels{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;height:inherit}.nav-panel-menu{overflow-y:scroll;-ms-scroll-chaining:none;overscroll-behavior:none;height:calc(100% - 2.5rem)}.nav-panel-menu:only-child{height:100%}.nav-panel-menu:not(.is-active) .nav-menu{opacity:.75}.nav-panel-menu:not(.is-active)::after{content:"";background:rgba(0,0,0,.5);display:block;position:absolute;top:0;right:0;bottom:0;left:0}.nav-menu{min-height:100%;padding:.5rem .75rem;line-height:1.35;position:relative}.nav-menu-toggle{background:transparent url(../img/octicons-16.svg#view-unfold) no-repeat 50%/100% 100%;border:none;float:right;height:1em;margin-right:-.5rem;opacity:.75;outline:none;padding:0;position:sticky;top:.85rem;visibility:hidden;width:1em}.nav-menu-toggle.is-active{background-image:url(../img/octicons-16.svg#view-fold)}.nav-panel-menu.is-active:hover .nav-menu-toggle{visibility:visible}.nav-menu h3.title{color:#424242;font-size:inherit;font-weight:600;margin:0;padding:.25em 0 .125em}.nav-list{list-style:none;margin:0 0 0 .75rem;padding:0}.nav-menu>.nav-list+.nav-list{margin-top:.5rem}.nav-item{margin-top:.5em}.nav-item-toggle~.nav-list{padding-bottom:.125rem}.nav-item[data-depth="0"]>.nav-list:first-child{display:block;margin:0}.nav-item:not(.is-active)>.nav-list{display:none}.nav-item-toggle{background:transparent url(../img/caret.svg) no-repeat 50%/50%;border:none;outline:none;line-height:inherit;padding:0;position:absolute;height:1.35em;width:1.35em;margin-top:-.05em;margin-left:-1.35em}.nav-item.is-active>.nav-item-toggle{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.is-current-page>.nav-link,.is-current-page>.nav-text{font-weight:600}.nav-panel-explore{background:#fafafa;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;position:absolute;top:0;right:0;bottom:0;left:0}.nav-panel-explore:not(:first-child){top:auto;max-height:calc(50% + 2.5rem)}.nav-panel-explore .context{font-size:.83333rem;-ms-flex-negative:0;flex-shrink:0;color:#5d5d5d;-webkit-box-shadow:0 -1px 0 #e1e1e1;box-shadow:0 -1px 0 #e1e1e1;padding:0 .5rem;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;line-height:1;height:2.5rem}.nav-panel-explore:not(:first-child) .context{cursor:pointer}.nav-panel-explore .context .version{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:inherit;-ms-flex-align:inherit;align-items:inherit}.nav-panel-explore .context .version::after{content:"";background:url(../img/chevron.svg) no-repeat 100%/auto 100%;width:1.25em;height:.75em}.nav-panel-explore .components{line-height:1.35;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-webkit-box-shadow:inset 0 1px 5px #e1e1e1;box-shadow:inset 0 1px 5px #e1e1e1;background:#f0f0f0;padding:.75rem .75rem 0;margin:0;overflow-y:scroll;-ms-scroll-chaining:none;overscroll-behavior:none;max-height:100%;display:block}.nav-panel-explore:not(.is-active) .components{display:none}.nav-panel-explore .component{display:block}.nav-panel-explore .component+.component{margin-top:.75rem}.nav-panel-explore .component:last-child{margin-bottom:.75rem}.nav-panel-explore .component .title{font-weight:600;text-indent:.375rem hanging}.nav-panel-explore .versions{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding-left:0;margin:-.125rem -.375rem 0 .375rem;line-height:1;list-style:none}.nav-panel-explore .component .version{margin:.375rem .375rem 0 0}.nav-panel-explore .component .version a{background:#c1c1c1;border-radius:.25rem;white-space:nowrap;padding:.25em .5em;display:inherit;opacity:.75}.nav-panel-explore .component .is-current a{background:#424242;color:#f0f0f0;font-weight:600;opacity:1}body.-toc aside.toc.sidebar{display:none}@media screen and (max-width:1023.5px){aside.toc.sidebar{display:none}main>.content{overflow-x:auto}}@media screen and (min-width:1024px){main{-webkit-box-flex:1;-ms-flex:auto;flex:auto;min-width:0}main>.content{display:-webkit-box;display:-ms-flexbox;display:flex}aside.toc.embedded{display:none}aside.toc.sidebar{-webkit-box-flex:0;-ms-flex:0 0 9rem;flex:0 0 9rem;-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}}@media screen and (min-width:1216px){aside.toc.sidebar{-ms-flex-preferred-size:12rem;flex-basis:12rem}}.toolbar{color:#5d5d5d;-webkit-box-align:center;-ms-flex-align:center;align-items:center;background-color:#fafafa;-webkit-box-shadow:0 1px 0 #e1e1e1;box-shadow:0 1px 0 #e1e1e1;display:-webkit-box;display:-ms-flexbox;display:flex;font-size:.83333rem;height:2.5rem;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;position:sticky;top:3.5rem;z-index:2}.toolbar a{color:inherit}.nav-toggle{background:url(../img/menu.svg) no-repeat 50% 47.5%;background-size:49%;border:none;outline:none;line-height:inherit;padding:0;height:2.5rem;width:2.5rem;margin-right:-.25rem}@media screen and (min-width:1024px){.nav-toggle{display:none}}.nav-toggle.is-active{background-image:url(../img/back.svg);background-size:41.5%}.home-link{display:block;background:url(../img/home-o.svg) no-repeat 50%;height:1.25rem;width:1.25rem;margin:.625rem}.home-link.is-current,.home-link:hover{background-image:url(../img/home.svg)}.edit-this-page{display:none;padding-right:.5rem}@media screen and (min-width:1024px){.edit-this-page{display:block}}.toolbar .edit-this-page a{color:#8e8e8e}.breadcrumbs{display:none;-webkit-box-flex:1;-ms-flex:1 1;flex:1 1;padding:0 .5rem 0 .75rem;line-height:1.35}@media screen and (min-width:1024px){.breadcrumbs{display:block}}a+.breadcrumbs{padding-left:.05rem}.breadcrumbs ul{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin:0;padding:0;list-style:none}.breadcrumbs li{display:inline;margin:0}.breadcrumbs li::after{content:"/";padding:0 .5rem}.breadcrumbs li:last-of-type::after{content:none}.page-versions{margin:0 .2rem 0 auto;position:relative;line-height:1}@media screen and (min-width:1024px){.page-versions{margin-right:.7rem}}.page-versions .version-menu-toggle{color:inherit;background:url(../img/chevron.svg) no-repeat;background-position:right .5rem top 50%;background-size:auto .75em;border:none;outline:none;line-height:inherit;padding:.5rem 1.5rem .5rem .5rem;position:relative;z-index:3}.page-versions .version-menu{display:-webkit-box;display:-ms-flexbox;display:flex;min-width:100%;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end;background:-webkit-gradient(linear,left top,left bottom,from(#f0f0f0),to(#f0f0f0)) no-repeat;background:linear-gradient(180deg,#f0f0f0 0,#f0f0f0) no-repeat;padding:1.375rem 1.5rem .5rem .5rem;position:absolute;top:0;right:0;white-space:nowrap}.page-versions:not(.is-active) .version-menu{display:none}.page-versions .version{display:block;padding-top:.5rem}.page-versions .version.is-current{display:none}.page-versions .version.is-missing{color:#8e8e8e;font-style:italic;text-decoration:none}.toc-menu{color:#5d5d5d}.toc.sidebar .toc-menu{margin-right:.75rem;position:sticky;top:6rem}.toc .toc-menu h3{color:#333;font-size:.88889rem;font-weight:600;line-height:1.3;margin:0 -.5px;padding-bottom:.25rem}.toc.sidebar .toc-menu h3{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;height:2.5rem;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end}.toc .toc-menu ul{font-size:.83333rem;line-height:1.2;list-style:none;margin:0;padding:0}.toc.sidebar .toc-menu ul{max-height:calc(100vh - 8.5rem);overflow-y:auto;-ms-scroll-chaining:none;overscroll-behavior:none}@supports (scrollbar-width:none){.toc.sidebar .toc-menu ul{scrollbar-width:none}}.toc .toc-menu ul::-webkit-scrollbar{width:0;height:0}@media screen and (min-width:1024px){.toc .toc-menu h3{font-size:.83333rem}.toc .toc-menu ul{font-size:.75rem}}.toc .toc-menu li{margin:0}.toc .toc-menu li[data-level="2"] a{padding-left:1.25rem}.toc .toc-menu li[data-level="3"] a{padding-left:2rem}.toc .toc-menu a{color:inherit;border-left:2px solid #e1e1e1;display:inline-block;padding:.25rem 0 .25rem .5rem;text-decoration:none}.sidebar.toc .toc-menu a{display:block;outline:none}.toc .toc-menu a:hover{color:#1565c0}.toc .toc-menu a.is-active{border-left-color:#1565c0;color:#333}.sidebar.toc .toc-menu a:focus{background:#fafafa}.doc{color:#333;font-size:inherit;-ms-hyphens:auto;hyphens:auto;line-height:1.6;margin:0 auto;max-width:40rem;padding:0 1rem 4rem}@media screen and (min-width:1024px){.doc{-webkit-box-flex:1;-ms-flex:auto;flex:auto;font-size:.94444rem;margin:0 2rem;max-width:46rem;min-width:0}}.doc h1,.doc h2,.doc h3,.doc h4,.doc h5,.doc h6{color:#191919;font-weight:400;-ms-hyphens:none;hyphens:none;line-height:1.3;margin:1rem 0 0}.doc>h1.page:first-child{font-size:2rem;margin:1.5rem 0}@media screen and (min-width:769px){.doc>h1.page:first-child{margin-top:2.5rem}}.doc>h1.page:first-child+aside.toc.embedded{margin-top:-.5rem}.doc>h2#name+.sectionbody{margin-top:1rem}#preamble+.sect1,.doc .sect1+.sect1{margin-top:2rem}.doc h1.sect0{background:#f0f0f0;font-size:1.8em;margin:1.5rem -1rem 0;padding:.5rem 1rem}.doc h2:not(.discrete){border-bottom:1px solid #e1e1e1;margin-left:-1rem;margin-right:-1rem;padding:.4rem 1rem .1rem}.doc h3:not(.discrete),.doc h4:not(.discrete){font-weight:600}.doc h1 .anchor,.doc h2 .anchor,.doc h3 .anchor,.doc h4 .anchor,.doc h5 .anchor,.doc h6 .anchor{position:absolute;text-decoration:none;width:1.75ex;margin-left:-1.5ex;visibility:hidden;font-size:.8em;font-weight:400;padding-top:.05em}.doc h1 .anchor::before,.doc h2 .anchor::before,.doc h3 .anchor::before,.doc h4 .anchor::before,.doc h5 .anchor::before,.doc h6 .anchor::before{content:"\00a7"}.doc h1:hover .anchor,.doc h2:hover .anchor,.doc h3:hover .anchor,.doc h4:hover .anchor,.doc h5:hover .anchor,.doc h6:hover .anchor{visibility:visible}.doc dl,.doc p{margin:0}.doc a{color:#1565c0}.doc a:hover{color:#104d92}.doc a.bare{-ms-hyphens:none;hyphens:none}.doc a.unresolved{color:#d32f2f}.doc i.fa{-ms-hyphens:none;hyphens:none;font-style:normal}.doc .colist>table code,.doc p code,.doc thead code{color:#222;background:#fafafa;border-radius:.25em;font-size:.95em;padding:.125em .25em}.doc code,.doc pre{-ms-hyphens:none;hyphens:none}.doc pre{font-size:.88889rem;line-height:1.5;margin:0}.doc blockquote{margin:0}.doc .paragraph.lead>p{font-size:1rem}.doc .right{float:right}.doc .left{float:left}.doc .float-gap.right{margin:0 1rem 1rem 0}.doc .float-gap.left{margin:0 0 1rem 1rem}.doc .float-group::after{content:"";display:table;clear:both}.doc .text-left{text-align:left}.doc .text-center{text-align:center}.doc .text-right{text-align:right}.doc .text-justify{text-align:justify}.doc .stretch{width:100%}.doc .big{font-size:larger}.doc .small{font-size:smaller}.doc .underline{text-decoration:underline}.doc .line-through{text-decoration:line-through}.doc .dlist,.doc .exampleblock,.doc .hdlist,.doc .imageblock,.doc .listingblock,.doc .literalblock,.doc .olist,.doc .paragraph,.doc .partintro,.doc .quoteblock,.doc .sidebarblock,.doc .tabs,.doc .ulist,.doc .verseblock,.doc .videoblock,.doc details,.doc hr{margin:1rem 0 0}.doc .tablecontainer,.doc .tablecontainer+*,.doc :not(.tablecontainer)>table.tableblock,.doc :not(.tablecontainer)>table.tableblock+*,.doc>table.tableblock,.doc>table.tableblock+*{margin-top:1.5rem}.doc table.tableblock{font-size:.83333rem}.doc p.tableblock+p.tableblock{margin-top:.5rem}.doc table.tableblock pre{font-size:inherit}.doc td.tableblock>.content{word-wrap:anywhere}.doc td.tableblock>.content>:first-child{margin-top:0}.doc table.tableblock td,.doc table.tableblock th{padding:.5rem}.doc table.tableblock,.doc table.tableblock>*>tr>*{border:0 solid #e1e1e1}.doc table.grid-all>*>tr>*{border-width:1px}.doc table.grid-cols>*>tr>*{border-width:0 1px}.doc table.grid-rows>*>tr>*{border-width:1px 0}.doc table.grid-all>thead th,.doc table.grid-rows>thead th{border-bottom-width:2.5px}.doc table.frame-all{border-width:1px}.doc table.frame-ends{border-width:1px 0}.doc table.frame-sides{border-width:0 1px}.doc table.frame-none>colgroup+*>:first-child>*,.doc table.frame-sides>colgroup+*>:first-child>*{border-top-width:0}.doc table.frame-sides>:last-child>:last-child>*{border-bottom-width:0}.doc table.frame-ends>*>tr>:first-child,.doc table.frame-none>*>tr>:first-child{border-left-width:0}.doc table.frame-ends>*>tr>:last-child,.doc table.frame-none>*>tr>:last-child{border-right-width:0}.doc table.stripes-all>tbody>tr,.doc table.stripes-even>tbody>tr:nth-of-type(2n),.doc table.stripes-hover>tbody>tr:hover,.doc table.stripes-odd>tbody>tr:nth-of-type(odd){background:#fafafa}.doc table.tableblock>tfoot{background:-webkit-gradient(linear,left top,left bottom,from(#f0f0f0),to(#fff));background:linear-gradient(180deg,#f0f0f0 0,#fff)}.doc .halign-left{text-align:left}.doc .halign-right{text-align:right}.doc .halign-center{text-align:center}.doc .valign-top{vertical-align:top}.doc .valign-bottom{vertical-align:bottom}.doc .valign-middle{vertical-align:middle}.doc .admonitionblock{margin:1.4rem 0 0}.doc .admonitionblock p,.doc .admonitionblock td.content{font-size:.88889rem}.doc .admonitionblock td.content>.title+*,.doc .admonitionblock td.content>:not(.title):first-child{margin-top:0}.doc .admonitionblock td.content pre{font-size:.83333rem}.doc .admonitionblock>table{table-layout:fixed;position:relative;width:100%}.doc .admonitionblock td.content{padding:1rem 1rem .75rem;background:#fafafa;width:100%;word-wrap:anywhere}.doc .admonitionblock td.icon{font-size:.83333rem;left:0;line-height:1;padding:0;position:absolute;top:0;-webkit-transform:translate(-.5rem,-50%);transform:translate(-.5rem,-50%)}.doc .admonitionblock td.icon i{-webkit-box-align:center;-ms-flex-align:center;align-items:center;border-radius:.45rem;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-filter:initial;filter:none;height:1.25rem;padding:0 .5rem;vertical-align:initial;width:-webkit-fit-content;width:-moz-fit-content;width:fit-content}.doc .admonitionblock td.icon i::after{content:attr(title);font-weight:600;font-style:normal;text-transform:uppercase}.doc .admonitionblock td.icon i.icon-caution{background-color:#a0439c;color:#fff}.doc .admonitionblock td.icon i.icon-important{background-color:#d32f2f;color:#fff}.doc .admonitionblock td.icon i.icon-note{background-color:#217ee7;color:#fff}.doc .admonitionblock td.icon i.icon-tip{background-color:#41af46;color:#fff}.doc .admonitionblock td.icon i.icon-warning{background-color:#e18114;color:#fff}.doc .imageblock,.doc .videoblock{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.doc .imageblock .content{-ms-flex-item-align:stretch;align-self:stretch;text-align:center}.doc .imageblock.text-left,.doc .videoblock.text-left{-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.doc .imageblock.text-left .content{text-align:left}.doc .imageblock.text-right,.doc .videoblock.text-right{-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end}.doc .imageblock.text-right .content{text-align:right}.doc .image>img,.doc .image>object,.doc .image>svg,.doc .imageblock img,.doc .imageblock object,.doc .imageblock svg{display:inline-block;height:auto;max-width:100%;vertical-align:middle}.doc .image:not(.left):not(.right)>img{margin-top:-.2em}.doc .videoblock iframe,.doc .videoblock video{max-width:100%;vertical-align:middle}#preamble .abstract blockquote{background:#f0f0f0;border-left:5px solid #e1e1e1;color:#4a4a4a;font-size:.88889rem;padding:.75em 1em}.doc .quoteblock,.doc .verseblock{background:#fafafa;border-left:5px solid #5d5d5d;color:#5d5d5d}.doc .quoteblock{padding:.25rem 2rem 1.25rem}.doc .quoteblock .attribution{color:#8e8e8e;font-size:.83333rem;margin-top:.75rem}.doc .quoteblock blockquote{margin-top:1rem}.doc .quoteblock .paragraph{font-style:italic}.doc .quoteblock cite{padding-left:1em}.doc .verseblock{font-size:1.15em;padding:1rem 2rem}.doc .verseblock pre{font-family:inherit;font-size:inherit}.doc ol,.doc ul{margin:0;padding:0 0 0 2rem}.doc ol.none,.doc ol.unnumbered,.doc ol.unstyled,.doc ul.checklist,.doc ul.no-bullet,.doc ul.none,.doc ul.unstyled{list-style-type:none}.doc ol.unnumbered,.doc ul.no-bullet{padding-left:1.25rem}.doc ol.unstyled,.doc ul.unstyled{padding-left:0}.doc ul.circle{list-style-type:circle}.doc ul.disc{list-style-type:disc}.doc ul.square{list-style-type:square}.doc ul.circle ul:not([class]),.doc ul.disc ul:not([class]),.doc ul.square ul:not([class]){list-style:inherit}.doc ol.arabic{list-style-type:decimal}.doc ol.decimal{list-style-type:decimal-leading-zero}.doc ol.loweralpha{list-style-type:lower-alpha}.doc ol.upperalpha{list-style-type:upper-alpha}.doc ol.lowerroman{list-style-type:lower-roman}.doc ol.upperroman{list-style-type:upper-roman}.doc ol.lowergreek{list-style-type:lower-greek}.doc ul.checklist{padding-left:1.75rem}.doc ul.checklist p>i.fa-check-square-o:first-child,.doc ul.checklist p>i.fa-square-o:first-child{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:1.25rem;margin-left:-1.25rem}.doc ul.checklist i.fa-check-square-o::before{content:"\2713"}.doc ul.checklist i.fa-square-o::before{content:"\274f"}.doc .dlist .dlist,.doc .dlist .olist,.doc .dlist .ulist,.doc .olist .dlist,.doc .olist .olist,.doc .olist .ulist,.doc .olist li+li,.doc .ulist .dlist,.doc .ulist .olist,.doc .ulist .ulist,.doc .ulist li+li{margin-top:.5rem}.doc .admonitionblock .listingblock,.doc .olist .listingblock,.doc .ulist .listingblock{padding:0}.doc .admonitionblock .title,.doc .exampleblock .title,.doc .imageblock .title,.doc .listingblock .title,.doc .literalblock .title,.doc .openblock .title,.doc .videoblock .title,.doc table.tableblock caption{color:#5d5d5d;font-size:.88889rem;font-style:italic;font-weight:600;-ms-hyphens:none;hyphens:none;letter-spacing:.01em;padding-bottom:.075rem}.doc table.tableblock caption{text-align:left}.doc .olist .title,.doc .ulist .title{font-style:italic;font-weight:600;margin-bottom:.25rem}.doc .imageblock .title,.doc .videoblock .title{margin-top:.5rem;padding-bottom:0}.doc details{margin-left:1rem}.doc details>summary{display:block;position:relative;line-height:1.6;margin-bottom:.5rem}.doc details>summary::-webkit-details-marker{display:none}.doc details>summary::before{content:"";border:solid transparent;border-left:solid;border-width:.3em 0 .3em .5em;position:absolute;top:.5em;left:-1rem;-webkit-transform:translateX(15%);transform:translateX(15%)}.doc details[open]>summary::before{border-color:currentColor transparent transparent;border-width:.5rem .3rem 0;-webkit-transform:translateY(15%);transform:translateY(15%)}.doc details>summary::after{content:"";width:1rem;height:1em;position:absolute;top:.3em;left:-1rem}.doc details.result{margin-top:.25rem}.doc details.result>summary{color:#5d5d5d;font-style:italic;margin-bottom:0}.doc details.result>.content{margin-left:-1rem}.doc .exampleblock>.content,.doc details.result>.content{background:#fff;border:.25rem solid #5d5d5d;border-radius:.5rem;padding:.75rem}.doc .exampleblock>.content::after,.doc details.result>.content::after{content:"";display:table;clear:both}.doc .exampleblock>.content>:first-child,.doc details>.content>:first-child{margin-top:0}.doc .sidebarblock{background:#e1e1e1;border-radius:.75rem;padding:.75rem 1.5rem}.doc .sidebarblock>.content>.title{font-size:1.25rem;font-weight:600;line-height:1.3;margin-bottom:.5rem;text-align:center}.doc .sidebarblock>.content>.title+*,.doc .sidebarblock>.content>:not(.title):first-child{margin-top:0}.doc .listingblock.wrap pre,.doc table.tableblock pre{white-space:pre-wrap}.doc .listingblock pre:not(.highlight),.doc .literalblock pre,.doc pre.highlight>code{background:#fafafa;-webkit-box-shadow:inset 0 0 1.75px #e1e1e1;box-shadow:inset 0 0 1.75px #e1e1e1;display:block;overflow-x:auto;padding:.875em}.doc .listingblock>.content{position:relative}.doc .source-toolbox{display:-webkit-box;display:-ms-flexbox;display:flex;visibility:hidden;position:absolute;top:.25rem;right:.5rem;color:grey;font-family:Roboto,sans-serif;font-size:.72222rem;line-height:1;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;white-space:nowrap;z-index:1}.doc .listingblock:hover .source-toolbox{visibility:visible}.doc .source-toolbox .source-lang{text-transform:uppercase;letter-spacing:.075em}.doc .source-toolbox>:not(:last-child)::after{content:"|";letter-spacing:0;padding:0 1ch}.doc .source-toolbox .copy-button{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;background:none;border:none;color:inherit;outline:none;padding:0;font-size:inherit;line-height:inherit;width:1em;height:1em}.doc .source-toolbox .copy-icon{-webkit-box-flex:0;-ms-flex:none;flex:none;width:inherit;height:inherit}.doc .source-toolbox img.copy-icon{-webkit-filter:invert(50.2%);filter:invert(50.2%)}.doc .source-toolbox svg.copy-icon{fill:currentColor}.doc .source-toolbox .copy-toast{-webkit-box-flex:0;-ms-flex:none;flex:none;position:relative;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;margin-top:1em;background-color:#333;border-radius:.25em;padding:.5em;color:#fff;cursor:auto;opacity:0;-webkit-transition:opacity .5s ease .5s;transition:opacity .5s ease .5s}.doc .source-toolbox .copy-toast::after{content:"";position:absolute;top:0;width:1em;height:1em;border:.55em solid transparent;border-left-color:#333;-webkit-transform:rotate(-90deg) translateX(50%) translateY(50%);transform:rotate(-90deg) translateX(50%) translateY(50%);-webkit-transform-origin:left;transform-origin:left}.doc .source-toolbox .copy-button.clicked .copy-toast{opacity:1;-webkit-transition:none;transition:none}.doc .language-console .hljs-meta{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.doc .dlist dt{font-style:italic}.doc .dlist dd{margin:0 0 0 1.5rem}.doc .dlist dd+dt,.doc .dlist dd>p:first-child{margin-top:.5rem}.doc td.hdlist1,.doc td.hdlist2{padding:.5rem 0 0;vertical-align:top}.doc tr:first-child>.hdlist1,.doc tr:first-child>.hdlist2{padding-top:0}.doc td.hdlist1{font-weight:600;padding-right:.25rem}.doc td.hdlist2{padding-left:.25rem}.doc .colist{font-size:.88889rem;margin:.25rem 0 -.25rem}.doc .colist>table>tbody>tr>:first-child,.doc .colist>table>tr>:first-child{padding:.25em .5rem 0;vertical-align:top}.doc .colist>table>tbody>tr>:last-child,.doc .colist>table>tr>:last-child{padding:.25rem 0}.doc .conum[data-value]{border:1px solid;border-radius:100%;display:inline-block;font-family:Roboto,sans-serif;font-size:.75rem;font-style:normal;line-height:1.2;text-align:center;width:1.25em;height:1.25em;letter-spacing:-.25ex;text-indent:-.25ex}.doc .conum[data-value]::after{content:attr(data-value)}.doc .conum[data-value]+b{display:none}.doc hr{border:solid #e1e1e1;border-width:2px 0 0;height:0}.doc b.button{white-space:nowrap}.doc b.button::before{content:"[";padding-right:.25em}.doc b.button::after{content:"]";padding-left:.25em}.doc kbd{display:inline-block;font-size:.66667rem;background:#fafafa;border:1px solid #c1c1c1;border-radius:.25em;-webkit-box-shadow:0 1px 0 #c1c1c1,0 0 0 .1em #fff inset;box-shadow:0 1px 0 #c1c1c1,inset 0 0 0 .1em #fff;padding:.25em .5em;vertical-align:text-bottom;white-space:nowrap}.doc .keyseq,.doc kbd{line-height:1}.doc .keyseq{font-size:.88889rem}.doc .keyseq kbd{margin:0 .125em}.doc .keyseq kbd:first-child{margin-left:0}.doc .keyseq kbd:last-child{margin-right:0}.doc .menuseq,.doc .path{-ms-hyphens:none;hyphens:none}.doc .menuseq i.caret::before{content:"\203a";font-size:1.1em;font-weight:600;line-height:.90909}.doc :not(pre).nowrap{white-space:nowrap}.doc .nobreak{-ms-hyphens:none;hyphens:none;word-wrap:normal}.doc :not(pre).pre-wrap{white-space:pre-wrap}#footnotes{font-size:.85em;line-height:1.5;margin:2rem -.5rem 0}.doc td.tableblock>.content #footnotes{margin:2rem 0 0}#footnotes hr{border-top-width:1px;margin-top:0;width:20%}#footnotes .footnote{margin:.5em 0 0 1em}#footnotes .footnote+.footnote{margin-top:.25em}#footnotes .footnote>a:first-of-type{display:inline-block;margin-left:-2em;text-align:right;width:1.5em}nav.pagination{border-top:1px solid #e1e1e1;line-height:1;margin:2rem -1rem -1rem;padding:.75rem 1rem 0}nav.pagination,nav.pagination span{display:-webkit-box;display:-ms-flexbox;display:flex}nav.pagination span{-webkit-box-flex:50%;-ms-flex:50%;flex:50%;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}nav.pagination .prev{padding-right:.5rem}nav.pagination .next{margin-left:auto;padding-left:.5rem;text-align:right}nav.pagination span::before{color:#8e8e8e;font-size:.75em;padding-bottom:.1em}nav.pagination .prev::before{content:"Prev"}nav.pagination .next::before{content:"Next"}nav.pagination a{font-weight:600;line-height:1.3;position:relative}nav.pagination a::after,nav.pagination a::before{color:#8e8e8e;font-weight:400;font-size:1.5em;line-height:.75;position:absolute;top:0;width:1rem}nav.pagination .prev a::before{content:"\2039";-webkit-transform:translateX(-100%);transform:translateX(-100%)}nav.pagination .next a::after{content:"\203a"}@media screen and (max-width:1023.5px){html.is-clipped--navbar{overflow-y:hidden}}body{padding-top:3.5rem}.navbar{background:#191919;color:#fff;font-size:.88889rem;height:3.5rem;position:fixed;top:0;width:100%;z-index:4}.navbar a{text-decoration:none}.navbar-brand{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-ms-flex:auto;flex:auto;padding-left:1rem}.navbar-brand .navbar-item{color:#fff}.navbar-brand .navbar-item:first-child{-ms-flex-item-align:center;align-self:center;padding:0;font-size:1.22222rem;-ms-flex-wrap:wrap;flex-wrap:wrap;line-height:1}.navbar-brand .navbar-item:first-child a{color:inherit;word-wrap:normal}.navbar-brand .navbar-item:first-child :not(:last-child){padding-right:.375rem}.navbar-brand .navbar-item.search{-webkit-box-flex:1;-ms-flex:auto;flex:auto;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end}#search-input{color:#333;font-family:inherit;font-size:.95rem;width:150px;border:1px solid #dbdbdb;border-radius:.1em;line-height:1.5;padding:0 .25em}#search-input:disabled{background-color:#dbdbdb;cursor:not-allowed;pointer-events:all!important}#search-input:disabled::-webkit-input-placeholder{color:#4c4c4c}#search-input:disabled::-moz-placeholder{color:#4c4c4c}#search-input:disabled:-ms-input-placeholder{color:#4c4c4c}#search-input:disabled::-ms-input-placeholder{color:#4c4c4c}#search-input:disabled::placeholder{color:#4c4c4c}#search-input:focus{outline:none}.navbar-burger{background:none;border:none;outline:none;line-height:1;position:relative;width:3rem;padding:0;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;margin-left:auto;min-width:0}.navbar-burger span{background-color:#fff;height:1.5px;width:1rem}.navbar-burger:not(.is-active) span{-webkit-transition:opacity 0s .25s,margin-top .25s ease-out .25s,-webkit-transform .25s ease-out;transition:opacity 0s .25s,margin-top .25s ease-out .25s,-webkit-transform .25s ease-out;transition:transform .25s ease-out,opacity 0s .25s,margin-top .25s ease-out .25s;transition:transform .25s ease-out,opacity 0s .25s,margin-top .25s ease-out .25s,-webkit-transform .25s ease-out}.navbar-burger span+span{margin-top:.25rem}.navbar-burger.is-active span+span{margin-top:-1.5px}.navbar-burger.is-active span:first-child{-webkit-transform:rotate(45deg);transform:rotate(45deg)}.navbar-burger.is-active span:nth-child(2){opacity:0}.navbar-burger.is-active span:nth-child(3){-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}.navbar-item,.navbar-link{color:#222;display:block;line-height:1.6;padding:.5rem 1rem}.navbar-item.has-dropdown{padding:0}.navbar-item .icon{width:1.25rem;height:1.25rem;display:block}.navbar-item .icon img,.navbar-item .icon svg{fill:currentColor;width:inherit;height:inherit}.navbar-link{padding-right:2.5em}.navbar-dropdown .navbar-item{padding-left:1.5rem;padding-right:1.5rem}.navbar-dropdown .navbar-item.has-label{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.navbar-dropdown .navbar-item small{color:#8e8e8e;font-size:.66667rem}.navbar-divider{background-color:#e1e1e1;border:none;height:1px;margin:.25rem 0}.navbar .button{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;background:#fff;border:1px solid #e1e1e1;border-radius:.15rem;height:1.75rem;color:#222;padding:0 .75em;white-space:nowrap}@media screen and (max-width:768.5px){.navbar-brand .navbar-item.search{padding-left:0;padding-right:0}}@media screen and (min-width:769px){#search-input{width:200px}}@media screen and (max-width:1023.5px){.navbar-brand{height:inherit}.navbar-brand .navbar-item{-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-ms-flexbox;display:flex}.navbar-menu{background:#fff;-webkit-box-shadow:0 8px 16px rgba(10,10,10,.1);box-shadow:0 8px 16px rgba(10,10,10,.1);max-height:calc(100vh - 3.5rem);overflow-y:auto;-ms-scroll-chaining:none;overscroll-behavior:none;padding:.5rem 0}.navbar-menu:not(.is-active){display:none}.navbar-menu .navbar-link:hover,.navbar-menu a.navbar-item:hover{background:#f5f5f5}}@media screen and (min-width:1024px){.navbar-burger{display:none}.navbar,.navbar-end,.navbar-item,.navbar-link,.navbar-menu{display:-webkit-box;display:-ms-flexbox;display:flex}.navbar-item,.navbar-link{position:relative;-webkit-box-flex:0;-ms-flex:none;flex:none}.navbar-item:not(.has-dropdown),.navbar-link{-webkit-box-align:center;-ms-flex-align:center;align-items:center}.navbar-item.is-hoverable:hover .navbar-dropdown{display:block}.navbar-link::after{border-width:0 0 1px 1px;border-style:solid;content:"";display:block;height:.5em;pointer-events:none;position:absolute;-webkit-transform:rotate(-45deg);transform:rotate(-45deg);width:.5em;margin-top:-.375em;right:1.125em;top:50%}.navbar-end .navbar-link,.navbar-end>.navbar-item{color:#fff}.navbar-end .navbar-item.has-dropdown:hover .navbar-link,.navbar-end .navbar-link:hover,.navbar-end>a.navbar-item:hover{background:#000;color:#fff}.navbar-end .navbar-link::after{border-color:currentColor}.navbar-dropdown{background:#fff;border:1px solid #e1e1e1;border-top:none;border-radius:0 0 .25rem .25rem;display:none;top:100%;left:0;min-width:100%;position:absolute}.navbar-dropdown .navbar-item{padding:.5rem 3rem .5rem 1rem;white-space:nowrap}.navbar-dropdown .navbar-item small{position:relative;right:-2rem}.navbar-dropdown .navbar-item:last-child{border-radius:inherit}.navbar-dropdown.is-right{left:auto;right:0}.navbar-dropdown a.navbar-item:hover{background:#f5f5f5}}footer.footer{background-color:#e1e1e1;color:#5d5d5d;font-size:.83333rem;line-height:1.6;padding:1.5rem}.footer p{margin:.5rem 0}.footer a{color:#191919} -/*! Adapted from the GitHub style by Vasily Polovnyov */.hljs-comment,.hljs-quote{color:#998;font-style:italic}.hljs-keyword,.hljs-selector-tag,.hljs-subst{color:#333;font-weight:500}.hljs-literal,.hljs-number,.hljs-tag .hljs-attr,.hljs-template-variable,.hljs-variable{color:teal}.hljs-doctag,.hljs-string{color:#d14}.hljs-section,.hljs-selector-id,.hljs-title{color:#900;font-weight:500}.hljs-subst{font-weight:400}.hljs-class .hljs-title,.hljs-type{color:#458;font-weight:500}.hljs-attribute,.hljs-name,.hljs-tag{color:navy;font-weight:400}.hljs-link,.hljs-regexp{color:#009926}.hljs-bullet,.hljs-symbol{color:#990073}.hljs-built_in,.hljs-builtin-name{color:#0086b3}.hljs-meta{color:#999;font-weight:500}.hljs-deletion{background:#fdd}.hljs-addition{background:#dfd}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:500}@page{margin:.5in}@media print{.hide-for-print{display:none!important}html{font-size:.9375em}a{color:inherit!important;text-decoration:underline}a.bare,a[href^="#"],a[href^="mailto:"]{text-decoration:none}img,object,svg,tr{page-break-inside:avoid}thead{display:table-header-group}pre{-webkit-hyphens:none;-ms-hyphens:none;hyphens:none;white-space:pre-wrap}body{padding-top:2rem}.navbar{background:none;color:inherit;position:absolute}.navbar *{color:inherit!important}.nav-container,.navbar>:not(.navbar-brand),.toolbar,aside.toc,nav.pagination{display:none}.doc{color:inherit;margin:auto;max-width:none;padding-bottom:2rem}.doc .admonitionblock td.icon{-webkit-print-color-adjust:exact;color-adjust:exact}.doc .listingblock code[data-lang]::before{display:block}footer.footer{background:none;border-top:1px solid #e1e1e1;color:#8e8e8e;padding:.25rem .5rem 0}.footer *{color:inherit}} \ No newline at end of file +/*! Adapted from the GitHub style by Vasily Polovnyov */.hljs-comment,.hljs-quote{color:#998;font-style:italic}.hljs-keyword,.hljs-selector-tag,.hljs-subst{color:#333;font-weight:600}.hljs-literal,.hljs-number,.hljs-tag .hljs-attr,.hljs-template-variable,.hljs-variable{color:teal}.hljs-doctag,.hljs-string{color:#d14}.hljs-section,.hljs-selector-id,.hljs-title{color:#900;font-weight:600}.hljs-subst{font-weight:400}.hljs-class .hljs-title,.hljs-type{color:#458;font-weight:600}.hljs-attribute,.hljs-name,.hljs-tag{color:navy;font-weight:400}.hljs-link,.hljs-regexp{color:#009926}.hljs-bullet,.hljs-symbol{color:#990073}.hljs-built_in,.hljs-builtin-name{color:#0086b3}.hljs-meta{color:#999;font-weight:600}.hljs-deletion{background:#fdd}.hljs-addition{background:#dfd}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:600}@page{margin:.5in}@media print{.hide-for-print{display:none!important}html{font-size:.9375em}a{color:inherit!important;text-decoration:underline}a.bare,a[href^="#"],a[href^="mailto:"]{text-decoration:none}img,object,svg,tr{page-break-inside:avoid}thead{display:table-header-group}pre{-ms-hyphens:none;hyphens:none;white-space:pre-wrap}body{padding-top:2rem}.navbar{background:none;color:inherit;position:absolute}.navbar *{color:inherit!important}.nav-container,.navbar>:not(.navbar-brand),.toolbar,aside.toc,nav.pagination{display:none}.doc{color:inherit;margin:auto;max-width:none;padding-bottom:2rem}.doc .admonitionblock td.icon{-webkit-print-color-adjust:exact;color-adjust:exact}.doc .listingblock code[data-lang]::before{display:block}footer.footer{background:none;border-top:1px solid #e1e1e1;color:#8e8e8e;padding:.25rem .5rem 0}.footer *{color:inherit}} \ No newline at end of file diff --git a/supplemental_ui/font/roboto-cyrillic-400-italic.woff2 b/supplemental_ui/font/roboto-cyrillic-400-italic.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..dd587a2bcb38c94ebd054732d6c3b36e351dd2c0 GIT binary patch literal 10292 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.IQi(wS`Rph{L7HS(io&gTqB)B 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 G!T|u%&BW^f literal 0 HcmV?d00001 diff --git a/supplemental_ui/font/roboto-cyrillic-400-normal.woff2 b/supplemental_ui/font/roboto-cyrillic-400-normal.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..47da362999e33cd11a91f4d62dc06d3b18df64f9 GIT binary patch literal 9628 zcmV;NC1cumPew8T0RR91041CN5&!@I09dd903|s90RR9100000000000000000000 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 W*E`Tm7TU08C~GZ@>+Fazi~#^e8{{qk literal 0 HcmV?d00001 diff --git a/supplemental_ui/js/site.js b/supplemental_ui/js/site.js index 78a823b..d35a1fd 100644 --- a/supplemental_ui/js/site.js +++ b/supplemental_ui/js/site.js @@ -1,56 +1,6 @@ -!function(){"use strict";var SECT_CLASS_RX=/^sect(\d)$/,navContainer=document.querySelector(".nav-container"),navToggle=document.querySelector(".nav-toggle"),nav=navContainer.querySelector(".nav");navToggle.addEventListener("click",(function showNav(e){if(navToggle.classList.contains("is-active"))return hideNav(e);trapEvent(e);var html=document.documentElement;html.classList.add("is-clipped--nav"),navToggle.classList.add("is-active"),navContainer.classList.add("is-active");var bounds=nav.getBoundingClientRect(),expectedHeight=window.innerHeight-Math.round(bounds.top);Math.round(bounds.height)!==expectedHeight&&(nav.style.height=expectedHeight+"px");html.addEventListener("click",hideNav)})),navContainer.addEventListener("click",trapEvent);var menuPanel=navContainer.querySelector("[data-panel=menu]");if(menuPanel){var explorePanel=navContainer.querySelector("[data-panel=explore]"),currentPageItem=menuPanel.querySelector(".is-current-page"),originalPageItem=currentPageItem;currentPageItem?(activateCurrentPath(currentPageItem),scrollItemToMidpoint(menuPanel,currentPageItem.querySelector(".nav-link"))):menuPanel.scrollTop=0,find(menuPanel,".nav-item-toggle").forEach((function(btn){var li=btn.parentElement;btn.addEventListener("click",toggleActive.bind(li));var navItemSpan=function findNextElement(from,selector){var el=from.nextElementSibling;return el&&selector?el[el.matches?"matches":"msMatchesSelector"](selector)&&el:el}(btn,".nav-text");navItemSpan&&(navItemSpan.style.cursor="pointer",navItemSpan.addEventListener("click",toggleActive.bind(li)))})),explorePanel&&explorePanel.querySelector(".context").addEventListener("click",(function(){find(nav,"[data-panel]").forEach((function(panel){panel.classList.toggle("is-active")}))})),menuPanel.addEventListener("mousedown",(function(e){e.detail>1&&e.preventDefault()})),menuPanel.querySelector('.nav-link[href^="#"]')&&(window.location.hash&&onHashChange(),window.addEventListener("hashchange",onHashChange))}function onHashChange(){var navLink,navItem,hash=window.location.hash;if(hash&&(hash.indexOf("%")&&(hash=decodeURIComponent(hash)),!(navLink=menuPanel.querySelector('.nav-link[href="'+hash+'"]')))){var targetNode=document.getElementById(hash.slice(1));if(targetNode)for(var current=targetNode,ceiling=document.querySelector("article.doc");(current=current.parentNode)&¤t!==ceiling;){var id=current.id;if(!id&&(id=SECT_CLASS_RX.test(current.className))&&(id=(current.firstElementChild||{}).id),id&&(navLink=menuPanel.querySelector('.nav-link[href="#'+id+'"]')))break}}if(navLink)navItem=navLink.parentNode;else{if(!originalPageItem)return;navLink=(navItem=originalPageItem).querySelector(".nav-link")}navItem!==currentPageItem&&(find(menuPanel,".nav-item.is-active").forEach((function(el){el.classList.remove("is-active","is-current-path","is-current-page")})),navItem.classList.add("is-current-page"),currentPageItem=navItem,activateCurrentPath(navItem),scrollItemToMidpoint(menuPanel,navLink))}function activateCurrentPath(navItem){for(var ancestorClasses,ancestor=navItem.parentNode;!(ancestorClasses=ancestor.classList).contains("nav-menu");)"LI"===ancestor.tagName&&ancestorClasses.contains("nav-item")&&ancestorClasses.add("is-active","is-current-path"),ancestor=ancestor.parentNode;navItem.classList.add("is-active")}function toggleActive(){if(this.classList.toggle("is-active")){var padding=parseFloat(window.getComputedStyle(this).marginTop),rect=this.getBoundingClientRect(),menuPanelRect=menuPanel.getBoundingClientRect(),overflowY=(rect.bottom-menuPanelRect.top-menuPanelRect.height+padding).toFixed();overflowY>0&&(menuPanel.scrollTop+=Math.min((rect.top-menuPanelRect.top-padding).toFixed(),overflowY))}}function hideNav(e){trapEvent(e);var html=document.documentElement;html.classList.remove("is-clipped--nav"),navToggle.classList.remove("is-active"),navContainer.classList.remove("is-active"),html.removeEventListener("click",hideNav)}function trapEvent(e){e.stopPropagation()}function scrollItemToMidpoint(panel,el){var rect=panel.getBoundingClientRect(),effectiveHeight=rect.height,navStyle=window.getComputedStyle(nav);"sticky"===navStyle.position&&(effectiveHeight-=rect.top-parseFloat(navStyle.top)),panel.scrollTop=Math.max(0,.5*(el.getBoundingClientRect().height-effectiveHeight)+el.offsetTop)}function find(from,selector){return[].slice.call(from.querySelectorAll(selector))}}(); -!function(){"use strict";var sidebar=document.querySelector("aside.toc.sidebar");if(sidebar){if(document.querySelector("body.-toc"))return sidebar.parentNode.removeChild(sidebar);var levels=parseInt(sidebar.dataset.levels||2,10);if(!(levels<0)){for(var article=document.querySelector("article.doc"),headingsSelector=[],level=0;level<=levels;level++){var headingSelector=["article.doc"];if(level){for(var l=1;l<=level;l++)headingSelector.push((2===l?".sectionbody>":"")+".sect"+l);headingSelector.push("h"+(level+1)+"[id]")}else headingSelector.push("h1[id].sect0");headingsSelector.push(headingSelector.join(">"))}var lastActiveFragment,headings=function find(selector,from){return[].slice.call((from||document).querySelectorAll(selector))}(headingsSelector.join(","),article.parentNode);if(!headings.length)return sidebar.parentNode.removeChild(sidebar);var links={},list=headings.reduce((function(accum,heading){var link=document.createElement("a");link.textContent=heading.textContent,links[link.href="#"+heading.id]=link;var listItem=document.createElement("li");return listItem.dataset.level=parseInt(heading.nodeName.slice(1),10)-1,listItem.appendChild(link),accum.appendChild(listItem),accum}),document.createElement("ul")),menu=sidebar.querySelector(".toc-menu");menu||((menu=document.createElement("div")).className="toc-menu");var title=document.createElement("h3");title.textContent=sidebar.dataset.title||"Contents",menu.appendChild(title),menu.appendChild(list);var startOfContent=!document.getElementById("toc")&&article.querySelector("h1.page ~ :not(.is-before-toc)");if(startOfContent){var embeddedToc=document.createElement("aside");embeddedToc.className="toc embedded",embeddedToc.appendChild(menu.cloneNode(!0)),startOfContent.parentNode.insertBefore(embeddedToc,startOfContent)}window.addEventListener("load",(function(){onScroll(),window.addEventListener("scroll",onScroll)}))}}function onScroll(){var activeFragment,scrolledBy=window.pageYOffset,buffer=1.15*getNumericStyleVal(document.documentElement,"fontSize"),ceil=article.offsetTop;if(scrolledBy&&window.innerHeight+scrolledBy+2>=document.documentElement.scrollHeight){lastActiveFragment=Array.isArray(lastActiveFragment)?lastActiveFragment:Array(lastActiveFragment||0);var activeFragments=[],lastIdx=headings.length-1;return headings.forEach((function(heading,idx){var fragment="#"+heading.id;idx===lastIdx||heading.getBoundingClientRect().top+getNumericStyleVal(heading,"paddingTop")>ceil?(activeFragments.push(fragment),lastActiveFragment.indexOf(fragment)<0&&links[fragment].classList.add("is-active")):~lastActiveFragment.indexOf(fragment)&&links[lastActiveFragment.shift()].classList.remove("is-active")})),list.scrollTop=list.scrollHeight-list.offsetHeight,void(lastActiveFragment=activeFragments.length>1?activeFragments:activeFragments[0])}if(Array.isArray(lastActiveFragment)&&(lastActiveFragment.forEach((function(fragment){links[fragment].classList.remove("is-active")})),lastActiveFragment=void 0),headings.some((function(heading){if(heading.getBoundingClientRect().top+getNumericStyleVal(heading,"paddingTop")-buffer>ceil)return!0;activeFragment="#"+heading.id})),activeFragment){if(activeFragment===lastActiveFragment)return;lastActiveFragment&&links[lastActiveFragment].classList.remove("is-active");var activeLink=links[activeFragment];activeLink.classList.add("is-active"),list.scrollHeight>list.offsetHeight&&(list.scrollTop=Math.max(0,activeLink.offsetTop+activeLink.offsetHeight-list.offsetHeight)),lastActiveFragment=activeFragment}else lastActiveFragment&&(links[lastActiveFragment].classList.remove("is-active"),lastActiveFragment=void 0)}function getNumericStyleVal(el,prop){return parseFloat(window.getComputedStyle(el)[prop])}}(); -!function(){"use strict";var article=document.querySelector("article.doc"),toolbar=document.querySelector(".toolbar"),supportsScrollToOptions="scrollTo"in document.documentElement;function decodeFragment(hash){return hash&&(~hash.indexOf("%")?decodeURIComponent(hash):hash).slice(1)}function computePosition(el,sum){return article.contains(el)?computePosition(el.offsetParent,el.offsetTop+sum):sum}function jumpToAnchor(e){if(e){if(e.altKey||e.ctrlKey)return;window.location.hash="#"+this.id,e.preventDefault()}var y=computePosition(this,0)-toolbar.getBoundingClientRect().bottom;!1===e&&supportsScrollToOptions?window.scrollTo({left:0,top:y,behavior:"instant"}):window.scrollTo(0,y)}window.addEventListener("load",(function jumpOnLoad(e){var fragment,target;(fragment=decodeFragment(window.location.hash))&&(target=document.getElementById(fragment))&&(jumpToAnchor.call(target,!1),setTimeout(jumpToAnchor.bind(target,!1),250)),window.removeEventListener("load",jumpOnLoad)})),Array.prototype.slice.call(document.querySelectorAll('a[href^="#"]')).forEach((function(el){var fragment,target;(fragment=decodeFragment(el.hash))&&(target=document.getElementById(fragment))&&el.addEventListener("click",jumpToAnchor.bind(target))}))}(); -!function(){"use strict";var toggle=document.querySelector(".page-versions .version-menu-toggle");if(toggle){var selector=document.querySelector(".page-versions");toggle.addEventListener("click",(function(e){selector.classList.toggle("is-active"),e.stopPropagation()})),document.documentElement.addEventListener("click",(function(){selector.classList.remove("is-active")}))}}(); -!function(){"use strict";var navbarBurger=document.querySelector(".navbar-burger");navbarBurger&&navbarBurger.addEventListener("click",function toggleNavbarMenu(e){e.stopPropagation(),document.documentElement.classList.toggle("is-clipped--navbar"),this.classList.toggle("is-active");var menu=document.getElementById(this.dataset.target);if(menu.classList.toggle("is-active")){menu.style.maxHeight="";var expectedMaxHeight=window.innerHeight-Math.round(menu.getBoundingClientRect().top);parseInt(window.getComputedStyle(menu).maxHeight,10)!==expectedMaxHeight&&(menu.style.maxHeight=expectedMaxHeight+"px")}}.bind(navbarBurger))}(); -!function(){"use strict";var CMD_RX=/^\$ (\S[^\\\n]*(\\\n(?!\$ )[^\\\n]*)*)(?=\n|$)/gm,LINE_CONTINUATION_RX=/( ) *\\\n *|\\\n( ?) */g,TRAILING_SPACE_RX=/ +$/gm,config=(document.getElementById("site-script")||{dataset:{}}).dataset,uiRootPath=null==config.uiRootPath?".":config.uiRootPath,svgAs=config.svgAs,supportsCopy=window.navigator.clipboard;function writeToClipboard(code){var text=code.innerText.replace(TRAILING_SPACE_RX,"");"console"===code.dataset.lang&&text.startsWith("$ ")&&(text=function extractCommands(text){for(var m,cmds=[];m=CMD_RX.exec(text);)cmds.push(m[1].replace(LINE_CONTINUATION_RX,"$1$2"));return cmds.join(" && ")}(text)),window.navigator.clipboard.writeText(text).then(function(){this.classList.add("clicked"),this.offsetHeight,this.classList.remove("clicked")}.bind(this),(function(){}))}[].slice.call(document.querySelectorAll(".doc pre.highlight, .doc .literalblock pre")).forEach((function(pre){var code,language,lang,copy,toast,toolbox;if(pre.classList.contains("highlight"))(language=(code=pre.querySelector("code")).dataset.lang)&&"console"!==language&&((lang=document.createElement("span")).className="source-lang",lang.appendChild(document.createTextNode(language)));else{if(!pre.innerText.startsWith("$ "))return;var block=pre.parentNode.parentNode;block.classList.remove("literalblock"),block.classList.add("listingblock"),pre.classList.add("highlightjs","highlight"),(code=document.createElement("code")).className="language-console hljs",code.dataset.lang="console",code.appendChild(pre.firstChild),pre.appendChild(code)}if((toolbox=document.createElement("div")).className="source-toolbox",lang&&toolbox.appendChild(lang),supportsCopy){if((copy=document.createElement("button")).className="copy-button",copy.setAttribute("title","Copy to clipboard"),"svg"===svgAs){var svg=document.createElementNS("http://www.w3.org/2000/svg","svg");svg.setAttribute("class","copy-icon");var use=document.createElementNS("http://www.w3.org/2000/svg","use");use.setAttribute("href",uiRootPath+"/img/octicons-16.svg#icon-clippy"),svg.appendChild(use),copy.appendChild(svg)}else{var img=document.createElement("img");img.src=uiRootPath+"/img/octicons-16.svg#view-clippy",img.alt="copy icon",img.className="copy-icon",copy.appendChild(img)}(toast=document.createElement("span")).className="copy-toast",toast.appendChild(document.createTextNode("Copied!")),copy.appendChild(toast),toolbox.appendChild(copy)}pre.parentNode.appendChild(toolbox),copy&©.addEventListener("click",writeToClipboard.bind(copy,code))}))}(); -(function () { - 'use strict' - - var hash = window.location.hash - find('.tabset').forEach(function (tabset) { - var active - var tabs = tabset.querySelector('.tabs') - if (tabs) { - var first - find('li', tabs).forEach(function (tab, idx) { - var id = (tab.querySelector('a[id]') || tab).id - if (!id) return - var pane = getPane(id, tabset) - if (!idx) first = { tab: tab, pane: pane } - if (!active && hash === '#' + id && (active = true)) { - tab.classList.add('is-active') - if (pane) pane.classList.add('is-active') - } else if (!idx) { - tab.classList.remove('is-active') - if (pane) pane.classList.remove('is-active') - } - tab.addEventListener('click', activateTab.bind({ tabset: tabset, tab: tab, pane: pane })) - }) - if (!active && first) { - first.tab.classList.add('is-active') - if (first.pane) first.pane.classList.add('is-active') - } - } - tabset.classList.remove('is-loading') - }) - - function activateTab (e) { - var tab = this.tab - var pane = this.pane - find('.tabs li, .tab-pane', this.tabset).forEach(function (it) { - it === tab || it === pane ? it.classList.add('is-active') : it.classList.remove('is-active') - }) - e.preventDefault() - } - - function find (selector, from) { - return Array.prototype.slice.call((from || document).querySelectorAll(selector)) - } - - function getPane (id, tabset) { - return find('.tab-pane', tabset).find(function (it) { - return it.getAttribute('aria-labelledby') === id - }) - } -})() +!function(){"use strict";var c,e,o,t,s,r,l=/^sect(\d)$/,i=document.querySelector(".nav-container"),a=document.querySelector(".nav-toggle");function n(){var e,t,n=window.location.hash;if(n&&(n.indexOf("%")&&(n=decodeURIComponent(n)),!(e=o.querySelector('.nav-link[href="'+n+'"]')))){n=document.getElementById(n.slice(1));if(n)for(var i=n,a=document.querySelector("article.doc");(i=i.parentNode)&&i!==a;){var c=i.id;if((c=c||(c=l.test(i.className))&&(i.firstElementChild||{}).id)&&(e=o.querySelector('.nav-link[href="#'+c+'"]')))break}}if(e)t=e.parentNode;else{if(!r)return;e=(t=r).querySelector(".nav-link")}t!==s&&(g(o,".nav-item.is-active").forEach(function(e){e.classList.remove("is-active","is-current-path","is-current-page")}),t.classList.add("is-current-page"),d(s=t),p(o,e))}function d(e){for(var t,n=e.parentNode;!(t=n.classList).contains("nav-menu");)"LI"===n.tagName&&t.contains("nav-item")&&t.add("is-active","is-current-path"),n=n.parentNode;e.classList.add("is-active")}function u(){var e,t,n,i;this.classList.toggle("is-active")&&(e=parseFloat(window.getComputedStyle(this).marginTop),t=this.getBoundingClientRect(),n=o.getBoundingClientRect(),0<(i=(t.bottom-n.top-n.height+e).toFixed()))&&(o.scrollTop+=Math.min((t.top-n.top-e).toFixed(),i))}function v(e){m(e);e=document.documentElement;e.classList.remove("is-clipped--nav"),a.classList.remove("is-active"),i.classList.remove("is-active"),e.removeEventListener("click",v)}function m(e){e.stopPropagation()}function p(e,t){var n=e.getBoundingClientRect(),i=n.height,a=window.getComputedStyle(c);"sticky"===a.position&&(i-=n.top-parseFloat(a.top)),e.scrollTop=Math.max(0,.5*(t.getBoundingClientRect().height-i)+t.offsetTop)}function g(e,t){return[].slice.call(e.querySelectorAll(t))}(i?(c=i.querySelector(".nav"),e=i.querySelector(".nav-menu-toggle"),a.addEventListener("click",function(e){if(a.classList.contains("is-active"))return v(e);m(e);var e=document.documentElement,t=(e.classList.add("is-clipped--nav"),a.classList.add("is-active"),i.classList.add("is-active"),c.getBoundingClientRect()),n=window.innerHeight-Math.round(t.top);Math.round(t.height)!==n&&(c.style.height=n+"px");e.addEventListener("click",v)}),i.addEventListener("click",m),o=i.querySelector("[data-panel=menu]")):a&&!(a.hidden=!0))&&(t=i.querySelector("[data-panel=explore]"),s=o.querySelector(".is-current-page"),(r=s)?(d(s),p(o,s.querySelector(".nav-link"))):o.scrollTop=0,g(o,".nav-item-toggle").forEach(function(e){var t=e.parentElement,e=(e.addEventListener("click",u.bind(t)),function(e,t){e=e.nextElementSibling;return(!e||!t||e[e.matches?"matches":"msMatchesSelector"](t))&&e}(e,".nav-text"));e&&(e.style.cursor="pointer",e.addEventListener("click",u.bind(t)))}),e&&o.querySelector(".nav-item-toggle")&&(e.style.display="",e.addEventListener("click",function(){var t=!this.classList.toggle("is-active");g(o,".nav-item > .nav-item-toggle").forEach(function(e){t?e.parentElement.classList.remove("is-active"):e.parentElement.classList.add("is-active")}),s?(t&&d(s),p(o,s.querySelector(".nav-link"))):o.scrollTop=0})),t&&t.querySelector(".context").addEventListener("click",function(){g(c,"[data-panel]").forEach(function(e){e.classList.toggle("is-active")})}),o.addEventListener("mousedown",function(e){1":"")+".sect"+c);r.push("h"+(i+1)+"[id]"+(1"))}m=n.join(","),f=d.parentNode;var a,s=[].slice.call((f||document).querySelectorAll(m));if(!s.length)return e.parentNode.removeChild(e);var l={},u=s.reduce(function(e,t){var o=document.createElement("a"),n=(o.textContent=t.textContent,l[o.href="#"+t.id]=o,document.createElement("li"));return n.dataset.level=parseInt(t.nodeName.slice(1),10)-1,n.appendChild(o),e.appendChild(n),e},document.createElement("ul")),f=e.querySelector(".toc-menu"),m=(f||((f=document.createElement("div")).className="toc-menu"),document.createElement("h3")),e=(m.textContent=e.dataset.title||"Contents",f.appendChild(m),f.appendChild(u),!document.getElementById("toc")&&d.querySelector("h1.page ~ :not(.is-before-toc)"));e&&((m=document.createElement("aside")).className="toc embedded",m.appendChild(f.cloneNode(!0)),e.parentNode.insertBefore(m,e)),window.addEventListener("load",function(){p(),window.addEventListener("scroll",p)})}}}function p(){var n,i,t,e=window.pageYOffset,o=1.15*h(document.documentElement,"fontSize"),r=d.offsetTop;e&&window.innerHeight+e+2>=document.documentElement.scrollHeight?(a=Array.isArray(a)?a:Array(a||0),n=[],i=s.length-1,s.forEach(function(e,t){var o="#"+e.id;t===i||e.getBoundingClientRect().top+h(e,"paddingTop")>r?(n.push(o),a.indexOf(o)<0&&l[o].classList.add("is-active")):~a.indexOf(o)&&l[a.shift()].classList.remove("is-active")}),u.scrollTop=u.scrollHeight-u.offsetHeight,a=1r)return!0;t="#"+e.id}),t?t!==a&&(a&&l[a].classList.remove("is-active"),(e=l[t]).classList.add("is-active"),u.scrollHeight>u.offsetHeight&&(u.scrollTop=Math.max(0,e.offsetTop+e.offsetHeight-u.offsetHeight)),a=t):a&&(l[a].classList.remove("is-active"),a=void 0))}function h(e,t){return parseFloat(window.getComputedStyle(e)[t])}}(); +!function(){"use strict";var n,o,i=document.querySelector("article.doc");function c(e){return e&&(~e.indexOf("%")?decodeURIComponent(e):e).slice(1)}function r(e){if(e){if(e.altKey||e.ctrlKey)return;window.location.hash="#"+this.id,e.preventDefault()}var t=function e(t,n){return i.contains(t)?e(t.offsetParent,t.offsetTop+n):n}(this,0)-n.getBoundingClientRect().bottom;!1===e&&o?window.scrollTo({left:0,top:t,behavior:"instant"}):window.scrollTo(0,t)}i&&(n=document.querySelector(".toolbar"),o="scrollTo"in document.documentElement,window.addEventListener("load",function e(t){var n;(n=c(window.location.hash))&&(n=document.getElementById(n))&&(r.call(n,!1),setTimeout(r.bind(n,!1),250)),window.removeEventListener("load",e)}),Array.prototype.slice.call(document.querySelectorAll('a[href^="#"]')).forEach(function(e){var t;(t=c(e.hash))&&(t=document.getElementById(t))&&e.addEventListener("click",r.bind(t))}))}(); +!function(){"use strict";var t,e=document.querySelector(".page-versions .version-menu-toggle");e&&(t=document.querySelector(".page-versions"),e.addEventListener("click",function(e){t.classList.toggle("is-active"),e.stopPropagation()}),document.documentElement.addEventListener("click",function(){t.classList.remove("is-active")}))}(); +!function(){"use strict";var i=document.querySelector(".navbar-burger");i&&i.addEventListener("click",function(t){t.stopPropagation(),document.documentElement.classList.toggle("is-clipped--navbar"),i.setAttribute("aria-expanded",this.classList.toggle("is-active"));t=document.getElementById(this.getAttribute("aria-controls")||this.dataset.target);{var e;t.classList.toggle("is-active")&&(t.style.maxHeight="",e=window.innerHeight-Math.round(t.getBoundingClientRect().top),parseInt(window.getComputedStyle(t).maxHeight,10)!==e)&&(t.style.maxHeight=e+"px")}}.bind(i))}(); +!function(){"use strict";var o=/^\$ (\S[^\\\n]*(\\\n(?!\$ )[^\\\n]*)*)(?=\n|$)/gm,s=/( ) *\\\n *|\\\n( ?) */g,l=/ +$/gm,e=(document.getElementById("site-script")||{dataset:{}}).dataset,d=window.navigator.clipboard,r=e.svgAs,p=(null==e.uiRootPath?window:e).uiRootPath||".";[].slice.call(document.querySelectorAll(".doc pre.highlight, .doc .literalblock pre")).forEach(function(e){var t,n,a,c;if(e.classList.contains("highlight"))(i=(t=e.querySelector("code")).dataset.lang)&&"console"!==i&&((a=document.createElement("span")).className="source-lang",a.appendChild(document.createTextNode(i)));else{if(!e.innerText.startsWith("$ "))return;var i=e.parentNode.parentNode;i.classList.remove("literalblock"),i.classList.add("listingblock"),e.classList.add("highlightjs","highlight"),(t=document.createElement("code")).className="language-console hljs",t.dataset.lang="console",t.appendChild(e.firstChild),e.appendChild(t)}(i=document.createElement("div")).className="source-toolbox",a&&i.appendChild(a),d&&((n=document.createElement("button")).className="copy-button",n.setAttribute("title","Copy to clipboard"),"svg"===r?((a=document.createElementNS("http://www.w3.org/2000/svg","svg")).setAttribute("class","copy-icon"),(c=document.createElementNS("http://www.w3.org/2000/svg","use")).setAttribute("href",p+"/img/octicons-16.svg#icon-clippy"),a.appendChild(c),n.appendChild(a)):((c=document.createElement("img")).src=p+"/img/octicons-16.svg#view-clippy",c.alt="copy icon",c.className="copy-icon",n.appendChild(c)),(a=document.createElement("span")).className="copy-toast",a.appendChild(document.createTextNode("Copied!")),n.appendChild(a),i.appendChild(n)),e.parentNode.appendChild(i),n&&n.addEventListener("click",function(e){var t=e.innerText.replace(l,"");"console"===e.dataset.lang&&t.startsWith("$ ")&&(t=function(e){var t,n=[];for(;t=o.exec(e);)n.push(t[1].replace(s,"$1$2"));return n.join(" && ")}(t));window.navigator.clipboard.writeText(t).then(function(){this.classList.add("clicked"),this.offsetHeight,this.classList.remove("clicked")}.bind(this),function(){})}.bind(n,t))})}(); \ No newline at end of file diff --git a/supplemental_ui/js/vendor/highlight.js b/supplemental_ui/js/vendor/highlight.js deleted file mode 100644 index f168784..0000000 --- a/supplemental_ui/js/vendor/highlight.js +++ /dev/null @@ -1,1870 +0,0 @@ -!(function () { - var e, - n, - a = {}; - function t(e) { - return { - aliases: ["adoc"], - contains: [ - e.COMMENT("^/{4,}\\n", "\\n/{4,}$", { relevance: 10 }), - e.COMMENT("^//", "$", { relevance: 0 }), - { className: "title", begin: "^\\.\\w.*$" }, - { begin: "^[=\\*]{4,}\\n", end: "\\n^[=\\*]{4,}$", relevance: 10 }, - { className: "section", relevance: 10, variants: [{ begin: "^(={1,5}) .+?( \\1)?$" }, { begin: "^[^\\[\\]\\n]+?\\n[=\\-~\\^\\+]{2,}$" }] }, - { className: "meta", begin: "^:.+?:", end: "\\s", excludeEnd: !0, relevance: 10 }, - { className: "meta", begin: "^\\[.+?\\]$", relevance: 0 }, - { className: "quote", begin: "^_{4,}\\n", end: "\\n_{4,}$", relevance: 10 }, - { className: "code", begin: "^[\\-\\.]{4,}\\n", end: "\\n[\\-\\.]{4,}$", relevance: 10 }, - { begin: "^\\+{4,}\\n", end: "\\n\\+{4,}$", contains: [{ begin: "<", end: ">", subLanguage: "xml", relevance: 0 }], relevance: 10 }, - { className: "bullet", begin: "^(\\*+|\\-+|\\.+|[^\\n]+?::)\\s+" }, - { className: "symbol", begin: "^(NOTE|TIP|IMPORTANT|WARNING|CAUTION):\\s+", relevance: 10 }, - { className: "strong", begin: "\\B\\*(?![\\*\\s])", end: "(\\n{2}|\\*)", contains: [{ begin: "\\\\*\\w", relevance: 0 }] }, - { className: "emphasis", begin: "\\B'(?!['\\s])", end: "(\\n{2}|')", contains: [{ begin: "\\\\'\\w", relevance: 0 }], relevance: 0 }, - { className: "emphasis", begin: "_(?![_\\s])", end: "(\\n{2}|_)", relevance: 0 }, - { className: "string", variants: [{ begin: "``.+?''" }, { begin: "`.+?'" }] }, - { className: "code", begin: "(`.+?`|\\+.+?\\+)", relevance: 0 }, - { className: "code", begin: "^[ \\t]", end: "$", relevance: 0 }, - { begin: "^'{3,}[ \\t]*$", relevance: 10 }, - { - begin: "(link:)?(http|https|ftp|file|irc|image:?):\\S+\\[.*?\\]", - returnBegin: !0, - contains: [ - { begin: "(link|image:?):", relevance: 0 }, - { className: "link", begin: "\\w", end: "[^\\[]+", relevance: 0 }, - { className: "string", begin: "\\[", end: "\\]", excludeBegin: !0, excludeEnd: !0, relevance: 0 }, - ], - relevance: 10, - }, - ], - }; - } - function i(e) { - var n = { className: "variable", variants: [{ begin: /\$[\w\d#@][\w\d_]*/ }, { begin: /\$\{(.*?)}/ }] }, - a = { className: "string", begin: /"/, end: /"/, contains: [e.BACKSLASH_ESCAPE, n, { className: "variable", begin: /\$\(/, end: /\)/, contains: [e.BACKSLASH_ESCAPE] }] }; - return { - aliases: ["sh", "zsh"], - lexemes: /\b-?[a-z\._]+\b/, - keywords: { - keyword: "if then else elif fi for while in do done case esac function", - literal: "true false", - built_in: - "break cd continue eval exec exit export getopts hash pwd readonly return shift test times trap umask unset alias bind builtin caller command declare echo enable help let local logout mapfile printf read readarray source type typeset ulimit unalias set shopt autoload bg bindkey bye cap chdir clone comparguments compcall compctl compdescribe compfiles compgroups compquote comptags comptry compvalues dirs disable disown echotc echoti emulate fc fg float functions getcap getln history integer jobs kill limit log noglob popd print pushd pushln rehash sched setcap setopt stat suspend ttyctl unfunction unhash unlimit unsetopt vared wait whence where which zcompile zformat zftp zle zmodload zparseopts zprof zpty zregexparse zsocket zstyle ztcp", - _: "-ne -eq -lt -gt -f -d -e -s -l -a", - }, - contains: [ - { className: "meta", begin: /^#![^\n]+sh\s*$/, relevance: 10 }, - { className: "function", begin: /\w[\w\d_]*\s*\(\s*\)\s*\{/, returnBegin: !0, contains: [e.inherit(e.TITLE_MODE, { begin: /\w[\w\d_]*/ })], relevance: 0 }, - e.HASH_COMMENT_MODE, - a, - { className: "", begin: /\\"/ }, - { className: "string", begin: /'/, end: /'/ }, - n, - ], - }; - } - function s(e) { - var n = "a-zA-Z_\\-!.?+*=<>&#'", - a = { begin: (u = "[" + n + "][" + n + "0-9/;:]*"), relevance: 0 }, - t = { className: "number", begin: "[-+]?\\d+(\\.\\d+)?", relevance: 0 }, - i = e.inherit(e.QUOTE_STRING_MODE, { illegal: null }), - s = e.COMMENT(";", "$", { relevance: 0 }), - r = { className: "literal", begin: /\b(true|false|nil)\b/ }, - l = { begin: "[\\[\\{]", end: "[\\]\\}]" }, - o = { className: "comment", begin: "\\^" + u }, - c = e.COMMENT("\\^\\{", "\\}"), - d = { className: "symbol", begin: "[:]{1,2}" + u }, - g = { begin: "\\(", end: "\\)" }, - u = { - keywords: { - "builtin-name": - "def defonce cond apply if-not if-let if not not= = < > <= >= == + / * - rem quot neg? pos? delay? symbol? keyword? true? false? integer? empty? coll? list? set? ifn? fn? associative? sequential? sorted? counted? reversible? number? decimal? class? distinct? isa? float? rational? reduced? ratio? odd? even? char? seq? vector? string? map? nil? contains? zero? instance? not-every? not-any? libspec? -> ->> .. . inc compare do dotimes mapcat take remove take-while drop letfn drop-last take-last drop-while while intern condp case reduced cycle split-at split-with repeat replicate iterate range merge zipmap declare line-seq sort comparator sort-by dorun doall nthnext nthrest partition eval doseq await await-for let agent atom send send-off release-pending-sends add-watch mapv filterv remove-watch agent-error restart-agent set-error-handler error-handler set-error-mode! error-mode shutdown-agents quote var fn loop recur throw try monitor-enter monitor-exit defmacro defn defn- macroexpand macroexpand-1 for dosync and or when when-not when-let comp juxt partial sequence memoize constantly complement identity assert peek pop doto proxy defstruct first rest cons defprotocol cast coll deftype defrecord last butlast sigs reify second ffirst fnext nfirst nnext defmulti defmethod meta with-meta ns in-ns create-ns import refer keys select-keys vals key val rseq name namespace promise into transient persistent! conj! assoc! dissoc! pop! disj! use class type num float double short byte boolean bigint biginteger bigdec print-method print-dup throw-if printf format load compile get-in update-in pr pr-on newline flush read slurp read-line subvec with-open memfn time re-find re-groups rand-int rand mod locking assert-valid-fdecl alias resolve ref deref refset swap! reset! set-validator! compare-and-set! alter-meta! reset-meta! commute get-validator alter ref-set ref-history-count ref-min-history ref-max-history ensure sync io! new next conj set! to-array future future-call into-array aset gen-class reduce map filter find empty hash-map hash-set sorted-map sorted-map-by sorted-set sorted-set-by vec vector seq flatten reverse assoc dissoc list disj get union difference intersection extend extend-type extend-protocol int nth delay count concat chunk chunk-buffer chunk-append chunk-first chunk-rest max min dec unchecked-inc-int unchecked-inc unchecked-dec-inc unchecked-dec unchecked-negate unchecked-add-int unchecked-add unchecked-subtract-int unchecked-subtract chunk-next chunk-cons chunked-seq? prn vary-meta lazy-seq spread list* str find-keyword keyword symbol gensym force rationalize", - }, - lexemes: u, - className: "name", - begin: u, - starts: (n = { endsWithParent: !0, relevance: 0 }), - }, - a = [g, i, o, c, s, d, l, t, r, a]; - return (g.contains = [e.COMMENT("comment", ""), u, n]), (n.contains = a), (l.contains = a), (c.contains = [l]), { aliases: ["clj"], illegal: /\S/, contains: [g, i, o, c, s, d, l, t, r] }; - } - function r(e) { - function n(e) { - return "(?:" + e + ")?"; - } - var a = "decltype\\(auto\\)", - t = (n((g = "[a-zA-Z_]\\w*::")), n("<.*?>"), { className: "keyword", begin: "\\b[a-z\\d_]*_t\\b" }), - i = { - className: "string", - variants: [ - { begin: '(u8?|U|L)?"', end: '"', illegal: "\\n", contains: [e.BACKSLASH_ESCAPE] }, - { begin: "(u8?|U|L)?'(\\\\(x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4,8}|[0-7]{3}|\\S)|.)", end: "'", illegal: "." }, - { begin: /(?:u8?|U|L)?R"([^()\\ ]{0,16})\((?:.|\n)*?\)\1"/ }, - ], - }, - s = { - className: "number", - variants: [{ begin: "\\b(0b[01']+)" }, { begin: "(-?)\\b([\\d']+(\\.[\\d']*)?|\\.[\\d']+)(u|U|l|L|ul|UL|f|F|b|B)" }, { begin: "(-?)(\\b0[xX][a-fA-F0-9']+|(\\b[\\d']+(\\.[\\d']*)?|\\.[\\d']+)([eE][-+]?[\\d']+)?)" }], - relevance: 0, - }, - r = { - className: "meta", - begin: /#\s*[a-z]+\b/, - end: /$/, - keywords: { "meta-keyword": "if else elif endif define undef warning error line pragma _Pragma ifdef ifndef include" }, - contains: [{ begin: /\\\n/, relevance: 0 }, e.inherit(i, { className: "meta-string" }), { className: "meta-string", begin: /<.*?>/, end: /$/, illegal: "\\n" }, e.C_LINE_COMMENT_MODE, e.C_BLOCK_COMMENT_MODE], - }, - l = { className: "title", begin: n(g) + e.IDENT_RE, relevance: 0 }, - o = n(g) + e.IDENT_RE + "\\s*\\(", - c = { - keyword: - "int float while private char char8_t char16_t char32_t catch import module export virtual operator sizeof dynamic_cast|10 typedef const_cast|10 const for static_cast|10 union namespace unsigned long volatile static protected bool template mutable if public friend do goto auto void enum else break extern using asm case typeid wchar_tshort reinterpret_cast|10 default double register explicit signed typename try this switch continue inline delete alignas alignof constexpr consteval constinit decltype concept co_await co_return co_yield requires noexcept static_assert thread_local restrict final override atomic_bool atomic_char atomic_schar atomic_uchar atomic_short atomic_ushort atomic_int atomic_uint atomic_long atomic_ulong atomic_llong atomic_ullong new throw return and and_eq bitand bitor compl not not_eq or or_eq xor xor_eq", - built_in: - "std string wstring cin cout cerr clog stdin stdout stderr stringstream istringstream ostringstream auto_ptr deque list queue stack vector map set bitset multiset multimap unordered_set unordered_map unordered_multiset unordered_multimap array shared_ptr abort terminate abs acos asin atan2 atan calloc ceil cosh cos exit exp fabs floor fmod fprintf fputs free frexp fscanf future isalnum isalpha iscntrl isdigit isgraph islower isprint ispunct isspace isupper isxdigit tolower toupper labs ldexp log10 log malloc realloc memchr memcmp memcpy memset modf pow printf putchar puts scanf sinh sin snprintf sprintf sqrt sscanf strcat strchr strcmp strcpy strcspn strlen strncat strncmp strncpy strpbrk strrchr strspn strstr tanh tan vfprintf vprintf vsprintf endl initializer_list unique_ptr _Bool complex _Complex imaginary _Imaginary", - literal: "true false nullptr NULL", - }, - d = [t, e.C_LINE_COMMENT_MODE, e.C_BLOCK_COMMENT_MODE, s, i], - g = { - variants: [ - { begin: /=/, end: /;/ }, - { begin: /\(/, end: /\)/ }, - { beginKeywords: "new throw return else", end: /;/ }, - ], - keywords: c, - contains: d.concat([{ begin: /\(/, end: /\)/, keywords: c, contains: d.concat(["self"]), relevance: 0 }]), - relevance: 0, - }, - s = { - className: "function", - begin: "((decltype\\(auto\\)|(?:[a-zA-Z_]\\w*::)?[a-zA-Z_]\\w*(?:<.*?>)?)[\\*&\\s]+)+" + o, - returnBegin: !0, - end: /[{;=]/, - excludeEnd: !0, - keywords: c, - illegal: /[^\w\s\*&:<>]/, - contains: [ - { begin: a, keywords: c, relevance: 0 }, - { begin: o, returnBegin: !0, contains: [l], relevance: 0 }, - { - className: "params", - begin: /\(/, - end: /\)/, - keywords: c, - relevance: 0, - contains: [e.C_LINE_COMMENT_MODE, e.C_BLOCK_COMMENT_MODE, i, s, t, { begin: /\(/, end: /\)/, keywords: c, relevance: 0, contains: ["self", e.C_LINE_COMMENT_MODE, e.C_BLOCK_COMMENT_MODE, i, s, t] }], - }, - t, - e.C_LINE_COMMENT_MODE, - e.C_BLOCK_COMMENT_MODE, - r, - ], - }; - return { - aliases: ["c", "cc", "h", "c++", "h++", "hpp", "hh", "hxx", "cxx"], - keywords: c, - illegal: "", keywords: c, contains: ["self", t] }, - { begin: e.IDENT_RE + "::", keywords: c }, - { className: "class", beginKeywords: "class struct", end: /[{;:]/, contains: [{ begin: //, contains: ["self"] }, e.TITLE_MODE] }, - ]), - exports: { preprocessor: r, strings: i, keywords: c }, - }; - } - function l(e) { - var n = { - keyword: - "abstract as base bool break byte case catch char checked const continue decimal default delegate do double enum event explicit extern finally fixed float for foreach goto if implicit in int interface internal is lock long object operator out override params private protected public readonly ref sbyte sealed short sizeof stackalloc static string struct switch this try typeof uint ulong unchecked unsafe ushort using virtual void volatile while add alias ascending async await by descending dynamic equals from get global group into join let nameof on orderby partial remove select set value var when where yield", - literal: "null false true", - }, - a = { - className: "number", - variants: [{ begin: "\\b(0b[01']+)" }, { begin: "(-?)\\b([\\d']+(\\.[\\d']*)?|\\.[\\d']+)(u|U|l|L|ul|UL|f|F|b|B)" }, { begin: "(-?)(\\b0[xX][a-fA-F0-9']+|(\\b[\\d']+(\\.[\\d']*)?|\\.[\\d']+)([eE][-+]?[\\d']+)?)" }], - relevance: 0, - }, - t = { className: "string", begin: '@"', end: '"', contains: [{ begin: '""' }] }, - i = e.inherit(t, { illegal: /\n/ }), - s = { className: "subst", begin: "{", end: "}", keywords: n }, - r = e.inherit(s, { illegal: /\n/ }), - l = { className: "string", begin: /\$"/, end: '"', illegal: /\n/, contains: [{ begin: "{{" }, { begin: "}}" }, e.BACKSLASH_ESCAPE, r] }, - o = { className: "string", begin: /\$@"/, end: '"', contains: [{ begin: "{{" }, { begin: "}}" }, { begin: '""' }, s] }, - c = e.inherit(o, { illegal: /\n/, contains: [{ begin: "{{" }, { begin: "}}" }, { begin: '""' }, r] }); - return ( - (s.contains = [o, l, t, e.APOS_STRING_MODE, e.QUOTE_STRING_MODE, a, e.C_BLOCK_COMMENT_MODE]), - (r.contains = [c, l, i, e.APOS_STRING_MODE, e.QUOTE_STRING_MODE, a, e.inherit(e.C_BLOCK_COMMENT_MODE, { illegal: /\n/ })]), - (l = { variants: [o, l, t, e.APOS_STRING_MODE, e.QUOTE_STRING_MODE] }), - (t = e.IDENT_RE + "(<" + e.IDENT_RE + "(\\s*,\\s*" + e.IDENT_RE + ")*>)?(\\[\\])?"), - { - aliases: ["csharp", "c#"], - keywords: n, - illegal: /::/, - contains: [ - e.COMMENT("///", "$", { returnBegin: !0, contains: [{ className: "doctag", variants: [{ begin: "///", relevance: 0 }, { begin: "\x3c!--|--\x3e" }, { begin: "" }] }] }), - e.C_LINE_COMMENT_MODE, - e.C_BLOCK_COMMENT_MODE, - { className: "meta", begin: "#", end: "$", keywords: { "meta-keyword": "if else elif endif define undef warning error line region endregion pragma checksum" } }, - l, - a, - { beginKeywords: "class interface", end: /[{;=]/, illegal: /[^\s:,]/, contains: [e.TITLE_MODE, e.C_LINE_COMMENT_MODE, e.C_BLOCK_COMMENT_MODE] }, - { beginKeywords: "namespace", end: /[{;=]/, illegal: /[^\s:]/, contains: [e.inherit(e.TITLE_MODE, { begin: "[a-zA-Z](\\.?\\w)*" }), e.C_LINE_COMMENT_MODE, e.C_BLOCK_COMMENT_MODE] }, - { className: "meta", begin: "^\\s*\\[", excludeBegin: !0, end: "\\]", excludeEnd: !0, contains: [{ className: "meta-string", begin: /"/, end: /"/ }] }, - { beginKeywords: "new return throw await else", relevance: 0 }, - { - className: "function", - begin: "(" + t + "\\s+)+" + e.IDENT_RE + "\\s*\\(", - returnBegin: !0, - end: /\s*[{;=]/, - excludeEnd: !0, - keywords: n, - contains: [ - { begin: e.IDENT_RE + "\\s*\\(", returnBegin: !0, contains: [e.TITLE_MODE], relevance: 0 }, - { className: "params", begin: /\(/, end: /\)/, excludeBegin: !0, excludeEnd: !0, keywords: n, relevance: 0, contains: [l, a, e.C_BLOCK_COMMENT_MODE] }, - e.C_LINE_COMMENT_MODE, - e.C_BLOCK_COMMENT_MODE, - ], - }, - ], - } - ); - } - function o(e) { - var n = { - begin: /(?:[A-Z\_\.\-]+|--[a-zA-Z0-9_-]+)\s*:/, - returnBegin: !0, - end: ";", - endsWithParent: !0, - contains: [ - { - className: "attribute", - begin: /\S/, - end: ":", - excludeEnd: !0, - starts: { - endsWithParent: !0, - excludeEnd: !0, - contains: [ - { - begin: /[\w-]+\(/, - returnBegin: !0, - contains: [ - { className: "built_in", begin: /[\w-]+/ }, - { begin: /\(/, end: /\)/, contains: [e.APOS_STRING_MODE, e.QUOTE_STRING_MODE, e.CSS_NUMBER_MODE] }, - ], - }, - e.CSS_NUMBER_MODE, - e.QUOTE_STRING_MODE, - e.APOS_STRING_MODE, - e.C_BLOCK_COMMENT_MODE, - { className: "number", begin: "#[0-9A-Fa-f]+" }, - { className: "meta", begin: "!important" }, - ], - }, - }, - ], - }; - return { - case_insensitive: !0, - illegal: /[=\/|'\$]/, - contains: [ - e.C_BLOCK_COMMENT_MODE, - { className: "selector-id", begin: /#[A-Za-z0-9_-]+/ }, - { className: "selector-class", begin: /\.[A-Za-z0-9_-]+/ }, - { className: "selector-attr", begin: /\[/, end: /\]/, illegal: "$", contains: [e.APOS_STRING_MODE, e.QUOTE_STRING_MODE] }, - { className: "selector-pseudo", begin: /:(:)?[a-zA-Z0-9\_\-\+\(\)"'.]+/ }, - { begin: "@(page|font-face)", lexemes: "@[a-z-]+", keywords: "@page @font-face" }, - { - begin: "@", - end: "[{;]", - illegal: /:/, - returnBegin: !0, - contains: [ - { className: "keyword", begin: /@\-?\w[\w]*(\-\w+)*/ }, - { begin: /\s/, endsWithParent: !0, excludeEnd: !0, relevance: 0, keywords: "and or not only", contains: [{ begin: /[a-z-]+:/, className: "attribute" }, e.APOS_STRING_MODE, e.QUOTE_STRING_MODE, e.CSS_NUMBER_MODE] }, - ], - }, - { className: "selector-tag", begin: "[a-zA-Z-][a-zA-Z0-9_-]*", relevance: 0 }, - { begin: "{", end: "}", illegal: /\S/, contains: [e.C_BLOCK_COMMENT_MODE, n] }, - ], - }; - } - function c(e) { - return { - aliases: ["patch"], - contains: [ - { className: "meta", relevance: 10, variants: [{ begin: /^@@ +\-\d+,\d+ +\+\d+,\d+ +@@$/ }, { begin: /^\*\*\* +\d+,\d+ +\*\*\*\*$/ }, { begin: /^\-\-\- +\d+,\d+ +\-\-\-\-$/ }] }, - { className: "comment", variants: [{ begin: /Index: /, end: /$/ }, { begin: /={3,}/, end: /$/ }, { begin: /^\-{3}/, end: /$/ }, { begin: /^\*{3} /, end: /$/ }, { begin: /^\+{3}/, end: /$/ }, { begin: /^\*{15}$/ }] }, - { className: "addition", begin: "^\\+", end: "$" }, - { className: "deletion", begin: "^\\-", end: "$" }, - { className: "addition", begin: "^\\!", end: "$" }, - ], - }; - } - function d(e) { - return { - aliases: ["docker"], - case_insensitive: !0, - keywords: "from maintainer expose env arg user onbuild stopsignal", - contains: [e.HASH_COMMENT_MODE, e.APOS_STRING_MODE, e.QUOTE_STRING_MODE, e.NUMBER_MODE, { beginKeywords: "run cmd entrypoint volume add copy workdir label healthcheck shell", starts: { end: /[^\\]$/, subLanguage: "bash" } }], - illegal: "/ }, - ], - }, - ], - }, - ], - }, - s = { - className: "string", - begin: "~[A-Z](?=" + o + ")", - contains: [ - { begin: /"/, end: /"/ }, - { begin: /'/, end: /'/ }, - { begin: /\//, end: /\// }, - { begin: /\|/, end: /\|/ }, - { begin: /\(/, end: /\)/ }, - { begin: /\[/, end: /\]/ }, - { begin: /\{/, end: /\}/ }, - { begin: /\/ }, - ], - }, - r = { - className: "string", - contains: [e.BACKSLASH_ESCAPE, t], - variants: [ - { begin: /"""/, end: /"""/ }, - { begin: /'''/, end: /'''/ }, - { begin: /~S"""/, end: /"""/, contains: [] }, - { begin: /~S"/, end: /"/, contains: [] }, - { begin: /~S'''/, end: /'''/, contains: [] }, - { begin: /~S'/, end: /'/, contains: [] }, - { begin: /'/, end: /'/ }, - { begin: /"/, end: /"/ }, - ], - }, - l = { className: "function", beginKeywords: "def defp defmacro", end: /\B\b/, contains: [e.inherit(e.TITLE_MODE, { begin: n, endsParent: !0 })] }, - o = e.inherit(l, { className: "class", beginKeywords: "defimpl defmodule defprotocol defrecord", end: /\bdo\b|$|;/ }), - e = [ - r, - s, - i, - e.HASH_COMMENT_MODE, - o, - l, - { begin: "::" }, - { className: "symbol", begin: ":(?![\\s:])", contains: [r, { begin: "[a-zA-Z_]\\w*[!?=]?|[-+~]\\@|<<|>>|=~|===?|<=>|[<>]=?|\\*\\*|[-/+%^&*~`|]|\\[\\]=?" }], relevance: 0 }, - { className: "symbol", begin: n + ":(?!:)", relevance: 0 }, - { className: "number", begin: "(\\b0o[0-7_]+)|(\\b0b[01_]+)|(\\b0x[0-9a-fA-F_]+)|(-?\\b[1-9][0-9_]*(.[0-9_]+([eE][-+]?[0-9]+)?)?)", relevance: 0 }, - { className: "variable", begin: "(\\$\\W)|((\\$|\\@\\@?)(\\w+))" }, - { begin: "->" }, - { - begin: "(" + e.RE_STARTERS_RE + ")\\s*", - contains: [ - e.HASH_COMMENT_MODE, - { - className: "regexp", - illegal: "\\n", - contains: [e.BACKSLASH_ESCAPE, t], - variants: [ - { begin: "/", end: "/[a-z]*" }, - { begin: "%r\\[", end: "\\][a-z]*" }, - ], - }, - ], - relevance: 0, - }, - ]; - return { lexemes: n, keywords: a, contains: (t.contains = e) }; - } - function u(e) { - var n = { - keyword: - "break default func interface select case map struct chan else goto package switch const fallthrough if range type continue for import return var go defer bool byte complex64 complex128 float32 float64 int8 int16 int32 int64 string uint8 uint16 uint32 uint64 int uint uintptr rune", - literal: "true false iota nil", - built_in: "append cap close complex copy imag len make new panic print println real recover delete", - }; - return { - aliases: ["golang"], - keywords: n, - illegal: "|<-" }, - ], - }; - } - function b(e) { - var n = - "false synchronized int abstract float private char boolean var static null if const for true while long strictfp finally protected import native final void enum else break transient catch instanceof byte super volatile case assert short package default double public try this switch continue throws protected public private module requires exports do", - a = { - className: "number", - begin: "\\b(0[bB]([01]+[01_]+[01]+|[01]+)|0[xX]([a-fA-F0-9]+[a-fA-F0-9_]+[a-fA-F0-9]+|[a-fA-F0-9]+)|(([\\d]+[\\d_]+[\\d]+|[\\d]+)(\\.([\\d]+[\\d_]+[\\d]+|[\\d]+))?|\\.([\\d]+[\\d_]+[\\d]+|[\\d]+))([eE][-+]?\\d+)?)[lLfF]?", - relevance: 0, - }; - return { - aliases: ["jsp"], - keywords: n, - illegal: /<\/|#/, - contains: [ - e.COMMENT("/\\*\\*", "\\*/", { - relevance: 0, - contains: [ - { begin: /\w+@/, relevance: 0 }, - { className: "doctag", begin: "@[A-Za-z]+" }, - ], - }), - e.C_LINE_COMMENT_MODE, - e.C_BLOCK_COMMENT_MODE, - e.APOS_STRING_MODE, - e.QUOTE_STRING_MODE, - { className: "class", beginKeywords: "class interface", end: /[{;=]/, excludeEnd: !0, keywords: "class interface", illegal: /[:"\[\]]/, contains: [{ beginKeywords: "extends implements" }, e.UNDERSCORE_TITLE_MODE] }, - { beginKeywords: "new throw return else", relevance: 0 }, - { - className: "function", - begin: "([À-ʸa-zA-Z_$][À-ʸa-zA-Z_$0-9]*(<[À-ʸa-zA-Z_$][À-ʸa-zA-Z_$0-9]*(\\s*,\\s*[À-ʸa-zA-Z_$][À-ʸa-zA-Z_$0-9]*)*>)?\\s+)+" + e.UNDERSCORE_IDENT_RE + "\\s*\\(", - returnBegin: !0, - end: /[{;=]/, - excludeEnd: !0, - keywords: n, - contains: [ - { begin: e.UNDERSCORE_IDENT_RE + "\\s*\\(", returnBegin: !0, relevance: 0, contains: [e.UNDERSCORE_TITLE_MODE] }, - { className: "params", begin: /\(/, end: /\)/, keywords: n, relevance: 0, contains: [e.APOS_STRING_MODE, e.QUOTE_STRING_MODE, e.C_NUMBER_MODE, e.C_BLOCK_COMMENT_MODE] }, - e.C_LINE_COMMENT_MODE, - e.C_BLOCK_COMMENT_MODE, - ], - }, - a, - { className: "meta", begin: "@[A-Za-z]+" }, - ], - }; - } - function p(e) { - var n = "<>", - a = "", - t = { begin: /<[A-Za-z0-9\\._:-]+/, end: /\/[A-Za-z0-9\\._:-]+>|\/>/ }, - i = "[A-Za-z$_][0-9A-Za-z$_]*", - s = { - keyword: - "in of if for while finally var new function do return void else break catch instanceof with throw case default try this switch continue typeof delete let yield const export super debugger as async await static import from as", - literal: "true false null undefined NaN Infinity", - built_in: - "eval isFinite isNaN parseFloat parseInt decodeURI decodeURIComponent encodeURI encodeURIComponent escape unescape Object Function Boolean Error EvalError InternalError RangeError ReferenceError StopIteration SyntaxError TypeError URIError Number Math Date String RegExp Array Float32Array Float64Array Int16Array Int32Array Int8Array Uint16Array Uint32Array Uint8Array Uint8ClampedArray ArrayBuffer DataView JSON Intl arguments require module console window document Symbol Set Map WeakSet WeakMap Proxy Reflect Promise", - }, - r = { className: "number", variants: [{ begin: "\\b(0[bB][01]+)n?" }, { begin: "\\b(0[oO][0-7]+)n?" }, { begin: e.C_NUMBER_RE + "n?" }], relevance: 0 }, - l = { className: "subst", begin: "\\$\\{", end: "\\}", keywords: s, contains: [] }, - o = { begin: "html`", end: "", starts: { end: "`", returnEnd: !1, contains: [e.BACKSLASH_ESCAPE, l], subLanguage: "xml" } }, - c = { begin: "css`", end: "", starts: { end: "`", returnEnd: !1, contains: [e.BACKSLASH_ESCAPE, l], subLanguage: "css" } }, - d = { className: "string", begin: "`", end: "`", contains: [e.BACKSLASH_ESCAPE, l] }; - return ( - (l.contains = [e.APOS_STRING_MODE, e.QUOTE_STRING_MODE, o, c, d, r, e.REGEXP_MODE]), - (l = l.contains.concat([e.C_BLOCK_COMMENT_MODE, e.C_LINE_COMMENT_MODE])), - { - aliases: ["js", "jsx", "mjs", "cjs"], - keywords: s, - contains: [ - { className: "meta", relevance: 10, begin: /^\s*['"]use (strict|asm)['"]/ }, - { className: "meta", begin: /^#!/, end: /$/ }, - e.APOS_STRING_MODE, - e.QUOTE_STRING_MODE, - o, - c, - d, - e.C_LINE_COMMENT_MODE, - e.COMMENT("/\\*\\*", "\\*/", { - relevance: 0, - contains: [ - { - className: "doctag", - begin: "@[A-Za-z]+", - contains: [ - { className: "type", begin: "\\{", end: "\\}", relevance: 0 }, - { className: "variable", begin: i + "(?=\\s*(-)|$)", endsParent: !0, relevance: 0 }, - { begin: /(?=[^\n])\s/, relevance: 0 }, - ], - }, - ], - }), - e.C_BLOCK_COMMENT_MODE, - r, - { begin: /[{,\n]\s*/, relevance: 0, contains: [{ begin: i + "\\s*:", returnBegin: !0, relevance: 0, contains: [{ className: "attr", begin: i, relevance: 0 }] }] }, - { - begin: "(" + e.RE_STARTERS_RE + "|\\b(case|return|throw)\\b)\\s*", - keywords: "return throw case", - contains: [ - e.C_LINE_COMMENT_MODE, - e.C_BLOCK_COMMENT_MODE, - e.REGEXP_MODE, - { - className: "function", - begin: "(\\(.*?\\)|" + i + ")\\s*=>", - returnBegin: !0, - end: "\\s*=>", - contains: [{ className: "params", variants: [{ begin: i }, { begin: /\(\s*\)/ }, { begin: /\(/, end: /\)/, excludeBegin: !0, excludeEnd: !0, keywords: s, contains: l }] }], - }, - { className: "", begin: /\s/, end: /\s*/, skip: !0 }, - { - variants: [ - { begin: n, end: a }, - { begin: t.begin, end: t.end }, - ], - subLanguage: "xml", - contains: [{ begin: t.begin, end: t.end, skip: !0, contains: ["self"] }], - }, - ], - relevance: 0, - }, - { - className: "function", - beginKeywords: "function", - end: /\{/, - excludeEnd: !0, - contains: [e.inherit(e.TITLE_MODE, { begin: i }), { className: "params", begin: /\(/, end: /\)/, excludeBegin: !0, excludeEnd: !0, contains: l }], - illegal: /\[|%/, - }, - { begin: /\$[(.]/ }, - e.METHOD_GUARD, - { className: "class", beginKeywords: "class", end: /[{;=]/, excludeEnd: !0, illegal: /[:"\[\]]/, contains: [{ beginKeywords: "extends" }, e.UNDERSCORE_TITLE_MODE] }, - { beginKeywords: "constructor get set", end: /\{/, excludeEnd: !0 }, - ], - illegal: /#(?!!)/, - } - ); - } - function f(e) { - var n = { literal: "true false null" }, - a = [e.C_LINE_COMMENT_MODE, e.C_BLOCK_COMMENT_MODE], - t = [e.QUOTE_STRING_MODE, e.C_NUMBER_MODE], - i = { end: ",", endsWithParent: !0, excludeEnd: !0, contains: t, keywords: n }, - s = { begin: "{", end: "}", contains: [{ className: "attr", begin: /"/, end: /"/, contains: [e.BACKSLASH_ESCAPE], illegal: "\\n" }, e.inherit(i, { begin: /:/ })].concat(a), illegal: "\\S" }, - i = { begin: "\\[", end: "\\]", contains: [e.inherit(i)], illegal: "\\S" }; - return ( - t.push(s, i), - a.forEach(function (e) { - t.push(e); - }), - { contains: t, keywords: n, illegal: "\\S" } - ); - } - function E(e) { - var n = { - keyword: - "abstract as val var vararg get set class object open private protected public noinline crossinline dynamic final enum if else do while for when throw try catch finally import package is in fun override companion reified inline lateinit init interface annotation data sealed internal infix operator out by constructor super tailrec where const inner suspend typealias external expect actual trait volatile transient native default", - built_in: "Byte Short Char Int Long Boolean Float Double Void Unit Nothing", - literal: "true false null", - }, - a = { className: "symbol", begin: e.UNDERSCORE_IDENT_RE + "@" }, - t = { className: "subst", begin: "\\${", end: "}", contains: [e.C_NUMBER_MODE] }, - i = { - className: "string", - variants: [ - { begin: '"""', end: '"""(?=[^"])', contains: [(c = { className: "variable", begin: "\\$" + e.UNDERSCORE_IDENT_RE }), t] }, - { begin: "'", end: "'", illegal: /\n/, contains: [e.BACKSLASH_ESCAPE] }, - { begin: '"', end: '"', illegal: /\n/, contains: [e.BACKSLASH_ESCAPE, c, t] }, - ], - }; - t.contains.push(i); - var s = { className: "meta", begin: "@(?:file|property|field|get|set|receiver|param|setparam|delegate)\\s*:(?:\\s*" + e.UNDERSCORE_IDENT_RE + ")?" }, - r = { className: "meta", begin: "@" + e.UNDERSCORE_IDENT_RE, contains: [{ begin: /\(/, end: /\)/, contains: [e.inherit(i, { className: "meta-string" })] }] }, - l = { - className: "number", - begin: "\\b(0[bB]([01]+[01_]+[01]+|[01]+)|0[xX]([a-fA-F0-9]+[a-fA-F0-9_]+[a-fA-F0-9]+|[a-fA-F0-9]+)|(([\\d]+[\\d_]+[\\d]+|[\\d]+)(\\.([\\d]+[\\d_]+[\\d]+|[\\d]+))?|\\.([\\d]+[\\d_]+[\\d]+|[\\d]+))([eE][-+]?\\d+)?)[lLfF]?", - relevance: 0, - }, - o = e.COMMENT("/\\*", "\\*/", { contains: [e.C_BLOCK_COMMENT_MODE] }), - c = { - variants: [ - { className: "type", begin: e.UNDERSCORE_IDENT_RE }, - { begin: /\(/, end: /\)/, contains: [] }, - ], - }; - return ( - ((t = c).variants[1].contains = [c]), - (c.variants[1].contains = [t]), - { - aliases: ["kt"], - keywords: n, - contains: [ - e.COMMENT("/\\*\\*", "\\*/", { relevance: 0, contains: [{ className: "doctag", begin: "@[A-Za-z]+" }] }), - e.C_LINE_COMMENT_MODE, - o, - { className: "keyword", begin: /\b(break|continue|return|this)\b/, starts: { contains: [{ className: "symbol", begin: /@\w+/ }] } }, - a, - s, - r, - { - className: "function", - beginKeywords: "fun", - end: "[(]|$", - returnBegin: !0, - excludeEnd: !0, - keywords: n, - illegal: /fun\s+(<.*>)?[^\s\(]+(\s+[^\s\(]+)\s*=/, - relevance: 5, - contains: [ - { begin: e.UNDERSCORE_IDENT_RE + "\\s*\\(", returnBegin: !0, relevance: 0, contains: [e.UNDERSCORE_TITLE_MODE] }, - { className: "type", begin: //, keywords: "reified", relevance: 0 }, - { - className: "params", - begin: /\(/, - end: /\)/, - endsParent: !0, - keywords: n, - relevance: 0, - contains: [{ begin: /:/, end: /[=,\/]/, endsWithParent: !0, contains: [c, e.C_LINE_COMMENT_MODE, o], relevance: 0 }, e.C_LINE_COMMENT_MODE, o, s, r, i, e.C_NUMBER_MODE], - }, - o, - ], - }, - { - className: "class", - beginKeywords: "class interface trait", - end: /[:\{(]|$/, - excludeEnd: !0, - illegal: "extends implements", - contains: [ - { beginKeywords: "public protected internal private constructor" }, - e.UNDERSCORE_TITLE_MODE, - { className: "type", begin: //, excludeBegin: !0, excludeEnd: !0, relevance: 0 }, - { className: "type", begin: /[,:]\s*/, end: /[<\(,]|$/, excludeBegin: !0, returnEnd: !0 }, - s, - r, - ], - }, - i, - { className: "meta", begin: "^#!/usr/bin/env", end: "$", illegal: "\n" }, - l, - ], - } - ); - } - function N(e) { - return { - aliases: ["md", "mkdown", "mkd"], - contains: [ - { className: "section", variants: [{ begin: "^#{1,6}", end: "$" }, { begin: "^.+?\\n[=-]{2,}$" }] }, - { begin: "<", end: ">", subLanguage: "xml", relevance: 0 }, - { className: "bullet", begin: "^\\s*([*+-]|(\\d+\\.))\\s+" }, - { className: "strong", begin: "[*_]{2}.+?[*_]{2}" }, - { className: "emphasis", variants: [{ begin: "\\*.+?\\*" }, { begin: "_.+?_", relevance: 0 }] }, - { className: "quote", begin: "^>\\s+", end: "$" }, - { className: "code", variants: [{ begin: "^```\\w*\\s*$", end: "^```[ ]*$" }, { begin: "`.+?`" }, { begin: "^( {4}|\\t)", end: "$", relevance: 0 }] }, - { begin: "^[-\\*]{3,}", end: "$" }, - { - begin: "\\[.+?\\][\\(\\[].*?[\\)\\]]", - returnBegin: !0, - contains: [ - { className: "string", begin: "\\[", end: "\\]", excludeBegin: !0, returnEnd: !0, relevance: 0 }, - { className: "link", begin: "\\]\\(", end: "\\)", excludeBegin: !0, excludeEnd: !0 }, - { className: "symbol", begin: "\\]\\[", end: "\\]", excludeBegin: !0, excludeEnd: !0 }, - ], - relevance: 10, - }, - { - begin: /^\[[^\n]+\]:/, - returnBegin: !0, - contains: [ - { className: "symbol", begin: /\[/, end: /\]/, excludeBegin: !0, excludeEnd: !0 }, - { className: "link", begin: /:\s*/, end: /$/, excludeBegin: !0 }, - ], - }, - ], - }; - } - function h(e) { - var n = { keyword: "rec with let in inherit assert if else then", literal: "true false or and null", built_in: "import abort baseNameOf dirOf isNull builtins map removeAttrs throw toString derivation" }, - a = { className: "subst", begin: /\$\{/, end: /}/, keywords: n }, - t = { - className: "string", - contains: [a], - variants: [ - { begin: "''", end: "''" }, - { begin: '"', end: '"' }, - ], - }, - t = [e.NUMBER_MODE, e.HASH_COMMENT_MODE, e.C_BLOCK_COMMENT_MODE, t, { begin: /[a-zA-Z0-9-_]+(\s*=)/, returnBegin: !0, relevance: 0, contains: [{ className: "attr", begin: /\S+/ }] }]; - return { aliases: ["nixos"], keywords: n, contains: (a.contains = t) }; - } - function v(e) { - var n = /[a-zA-Z@][a-zA-Z0-9_]*/, - a = "@interface @class @protocol @implementation"; - return { - aliases: ["mm", "objc", "obj-c"], - keywords: { - keyword: - "int float while char export sizeof typedef const struct for union unsigned long volatile static bool mutable if do return goto void enum else break extern asm case short default double register explicit signed typename this switch continue wchar_t inline readonly assign readwrite self @synchronized id typeof nonatomic super unichar IBOutlet IBAction strong weak copy in out inout bycopy byref oneway __strong __weak __block __autoreleasing @private @protected @public @try @property @end @throw @catch @finally @autoreleasepool @synthesize @dynamic @selector @optional @required @encode @package @import @defs @compatibility_alias __bridge __bridge_transfer __bridge_retained __bridge_retain __covariant __contravariant __kindof _Nonnull _Nullable _Null_unspecified __FUNCTION__ __PRETTY_FUNCTION__ __attribute__ getter setter retain unsafe_unretained nonnull nullable null_unspecified null_resettable class instancetype NS_DESIGNATED_INITIALIZER NS_UNAVAILABLE NS_REQUIRES_SUPER NS_RETURNS_INNER_POINTER NS_INLINE NS_AVAILABLE NS_DEPRECATED NS_ENUM NS_OPTIONS NS_SWIFT_UNAVAILABLE NS_ASSUME_NONNULL_BEGIN NS_ASSUME_NONNULL_END NS_REFINED_FOR_SWIFT NS_SWIFT_NAME NS_SWIFT_NOTHROW NS_DURING NS_HANDLER NS_ENDHANDLER NS_VALUERETURN NS_VOIDRETURN", - literal: "false true FALSE TRUE nil YES NO NULL", - built_in: "BOOL dispatch_once_t dispatch_queue_t dispatch_sync dispatch_async dispatch_once", - }, - lexemes: n, - illegal: "/, end: /$/, illegal: "\\n" }, - e.C_LINE_COMMENT_MODE, - e.C_BLOCK_COMMENT_MODE, - ], - }, - { className: "class", begin: "(" + a.split(" ").join("|") + ")\\b", end: "({|$)", excludeEnd: !0, keywords: a, lexemes: n, contains: [e.UNDERSCORE_TITLE_MODE] }, - { begin: "\\." + e.UNDERSCORE_IDENT_RE, relevance: 0 }, - ], - }; - } - function y(e) { - var n = - "getpwent getservent quotemeta msgrcv scalar kill dbmclose undef lc ma syswrite tr send umask sysopen shmwrite vec qx utime local oct semctl localtime readpipe do return format read sprintf dbmopen pop getpgrp not getpwnam rewinddir qqfileno qw endprotoent wait sethostent bless s|0 opendir continue each sleep endgrent shutdown dump chomp connect getsockname die socketpair close flock exists index shmgetsub for endpwent redo lstat msgctl setpgrp abs exit select print ref gethostbyaddr unshift fcntl syscall goto getnetbyaddr join gmtime symlink semget splice x|0 getpeername recv log setsockopt cos last reverse gethostbyname getgrnam study formline endhostent times chop length gethostent getnetent pack getprotoent getservbyname rand mkdir pos chmod y|0 substr endnetent printf next open msgsnd readdir use unlink getsockopt getpriority rindex wantarray hex system getservbyport endservent int chr untie rmdir prototype tell listen fork shmread ucfirst setprotoent else sysseek link getgrgid shmctl waitpid unpack getnetbyname reset chdir grep split require caller lcfirst until warn while values shift telldir getpwuid my getprotobynumber delete and sort uc defined srand accept package seekdir getprotobyname semop our rename seek if q|0 chroot sysread setpwent no crypt getc chown sqrt write setnetent setpriority foreach tie sin msgget map stat getlogin unless elsif truncate exec keys glob tied closedirioctl socket readlink eval xor readline binmode setservent eof ord bind alarm pipe atan2 getgrent exp time push setgrent gt lt or ne m|0 break given say state when", - a = { className: "subst", begin: "[$@]\\{", end: "\\}", keywords: n }, - t = { begin: "->{", end: "}" }, - i = { variants: [{ begin: /\$\d/ }, { begin: /[\$%@](\^\w\b|#\w+(::\w+)*|{\w+}|\w+(::\w*)*)/ }, { begin: /[\$%@][^\s\w{]/, relevance: 0 }] }, - s = [e.BACKSLASH_ESCAPE, a, i], - e = [ - i, - e.HASH_COMMENT_MODE, - e.COMMENT("^\\=\\w", "\\=cut", { endsWithParent: !0 }), - t, - { - className: "string", - contains: s, - variants: [ - { begin: "q[qwxr]?\\s*\\(", end: "\\)", relevance: 5 }, - { begin: "q[qwxr]?\\s*\\[", end: "\\]", relevance: 5 }, - { begin: "q[qwxr]?\\s*\\{", end: "\\}", relevance: 5 }, - { begin: "q[qwxr]?\\s*\\|", end: "\\|", relevance: 5 }, - { begin: "q[qwxr]?\\s*\\<", end: "\\>", relevance: 5 }, - { begin: "qw\\s+q", end: "q", relevance: 5 }, - { begin: "'", end: "'", contains: [e.BACKSLASH_ESCAPE] }, - { begin: '"', end: '"' }, - { begin: "`", end: "`", contains: [e.BACKSLASH_ESCAPE] }, - { begin: "{\\w+}", contains: [], relevance: 0 }, - { begin: "-?\\w+\\s*\\=\\>", contains: [], relevance: 0 }, - ], - }, - { className: "number", begin: "(\\b0[0-7_]+)|(\\b0x[0-9a-fA-F_]+)|(\\b[1-9][0-9_]*(\\.[0-9_]+)?)|[0_]\\b", relevance: 0 }, - { - begin: "(\\/\\/|" + e.RE_STARTERS_RE + "|\\b(split|return|print|reverse|grep)\\b)\\s*", - keywords: "split return print reverse grep", - relevance: 0, - contains: [ - e.HASH_COMMENT_MODE, - { className: "regexp", begin: "(s|tr|y)/(\\\\.|[^/])*/(\\\\.|[^/])*/[a-z]*", relevance: 10 }, - { className: "regexp", begin: "(m|qr)?/", end: "/[a-z]*", contains: [e.BACKSLASH_ESCAPE], relevance: 0 }, - ], - }, - { className: "function", beginKeywords: "sub", end: "(\\s*\\(.*?\\))?[;{]", excludeEnd: !0, relevance: 5, contains: [e.TITLE_MODE] }, - { begin: "-\\w\\b", relevance: 0 }, - { begin: "^__DATA__$", end: "^__END__$", subLanguage: "mojolicious", contains: [{ begin: "^@@.*", end: "$", className: "comment" }] }, - ]; - return (a.contains = e), { aliases: ["pl", "pm"], lexemes: /[\w\.]+/, keywords: n, contains: (t.contains = e) }; - } - function w(e) { - var n = { begin: "\\$+[a-zA-Z_-ÿ][a-zA-Z0-9_-ÿ]*" }, - a = { className: "meta", begin: /<\?(php)?|\?>/ }, - t = { - className: "string", - contains: [e.BACKSLASH_ESCAPE, a], - variants: [{ begin: 'b"', end: '"' }, { begin: "b'", end: "'" }, e.inherit(e.APOS_STRING_MODE, { illegal: null }), e.inherit(e.QUOTE_STRING_MODE, { illegal: null })], - }, - i = { variants: [e.BINARY_NUMBER_MODE, e.C_NUMBER_MODE] }; - return { - aliases: ["php", "php3", "php4", "php5", "php6", "php7"], - case_insensitive: !0, - keywords: - "and include_once list abstract global private echo interface as static endswitch array null if endwhile or const for endforeach self var while isset public protected exit foreach throw elseif include __FILE__ empty require_once do xor return parent clone use __CLASS__ __LINE__ else break print eval new catch __METHOD__ case exception default die require __FUNCTION__ enddeclare final try switch continue endfor endif declare unset true false trait goto instanceof insteadof __DIR__ __NAMESPACE__ yield finally", - contains: [ - e.HASH_COMMENT_MODE, - e.COMMENT("//", "$", { contains: [a] }), - e.COMMENT("/\\*", "\\*/", { contains: [{ className: "doctag", begin: "@[A-Za-z]+" }] }), - e.COMMENT("__halt_compiler.+?;", !1, { endsWithParent: !0, keywords: "__halt_compiler", lexemes: e.UNDERSCORE_IDENT_RE }), - { className: "string", begin: /<<<['"]?\w+['"]?$/, end: /^\w+;?$/, contains: [e.BACKSLASH_ESCAPE, { className: "subst", variants: [{ begin: /\$\w+/ }, { begin: /\{\$/, end: /\}/ }] }] }, - a, - { className: "keyword", begin: /\$this\b/ }, - n, - { begin: /(::|->)+[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*/ }, - { - className: "function", - beginKeywords: "function", - end: /[;{]/, - excludeEnd: !0, - illegal: "\\$|\\[|%", - contains: [e.UNDERSCORE_TITLE_MODE, { className: "params", begin: "\\(", end: "\\)", contains: ["self", n, e.C_BLOCK_COMMENT_MODE, t, i] }], - }, - { className: "class", beginKeywords: "class interface", end: "{", excludeEnd: !0, illegal: /[:\(\$"]/, contains: [{ beginKeywords: "extends implements" }, e.UNDERSCORE_TITLE_MODE] }, - { beginKeywords: "namespace", end: ";", illegal: /[\.']/, contains: [e.UNDERSCORE_TITLE_MODE] }, - { beginKeywords: "use", end: ";", contains: [e.UNDERSCORE_TITLE_MODE] }, - { begin: "=>" }, - t, - i, - ], - }; - } - function O(e) { - var n = "[ \\t\\f]*", - a = "(" + n + "[:=]" + n + "|[ \\t\\f]+)", - t = "([^\\\\\\W:= \\t\\f\\n]|\\\\.)+", - i = "([^\\\\:= \\t\\f\\n]|\\\\.)+", - s = { end: a, relevance: 0, starts: { className: "string", end: /$/, relevance: 0, contains: [{ begin: "\\\\\\n" }] } }; - return { - case_insensitive: !0, - illegal: /\S/, - contains: [ - e.COMMENT("^\\s*[!#]", "$"), - { begin: t + a, returnBegin: !0, contains: [{ className: "attr", begin: t, endsParent: !0, relevance: 0 }], starts: s }, - { begin: i + a, returnBegin: !0, relevance: 0, contains: [{ className: "meta", begin: i, endsParent: !0, relevance: 0 }], starts: s }, - { className: "attr", relevance: 0, begin: i + n + "$" }, - ], - }; - } - function M(e) { - var n = e.COMMENT("#", "$"), - a = "([A-Za-z_]|::)(\\w|::)*", - t = e.inherit(e.TITLE_MODE, { begin: a }), - i = { className: "variable", begin: "\\$" + a }, - a = { - className: "string", - contains: [e.BACKSLASH_ESCAPE, i], - variants: [ - { begin: /'/, end: /'/ }, - { begin: /"/, end: /"/ }, - ], - }; - return { - aliases: ["pp"], - contains: [ - n, - i, - a, - { beginKeywords: "class", end: "\\{|;", illegal: /=/, contains: [t, n] }, - { beginKeywords: "define", end: /\{/, contains: [{ className: "section", begin: e.IDENT_RE, endsParent: !0 }] }, - { - begin: e.IDENT_RE + "\\s+\\{", - returnBegin: !0, - end: /\S/, - contains: [ - { className: "keyword", begin: e.IDENT_RE }, - { - begin: /\{/, - end: /\}/, - keywords: { - keyword: "and case default else elsif false if in import enherits node or true undef unless main settings $string ", - literal: - "alias audit before loglevel noop require subscribe tag owner ensure group mode name|0 changes context force incl lens load_path onlyif provider returns root show_diff type_check en_address ip_address realname command environment hour monute month monthday special target weekday creates cwd ogoutput refresh refreshonly tries try_sleep umask backup checksum content ctime force ignore links mtime purge recurse recurselimit replace selinux_ignore_defaults selrange selrole seltype seluser source souirce_permissions sourceselect validate_cmd validate_replacement allowdupe attribute_membership auth_membership forcelocal gid ia_load_module members system host_aliases ip allowed_trunk_vlans description device_url duplex encapsulation etherchannel native_vlan speed principals allow_root auth_class auth_type authenticate_user k_of_n mechanisms rule session_owner shared options device fstype enable hasrestart directory present absent link atboot blockdevice device dump pass remounts poller_tag use message withpath adminfile allow_virtual allowcdrom category configfiles flavor install_options instance package_settings platform responsefile status uninstall_options vendor unless_system_user unless_uid binary control flags hasstatus manifest pattern restart running start stop allowdupe auths expiry gid groups home iterations key_membership keys managehome membership password password_max_age password_min_age profile_membership profiles project purge_ssh_keys role_membership roles salt shell uid baseurl cost descr enabled enablegroups exclude failovermethod gpgcheck gpgkey http_caching include includepkgs keepalive metadata_expire metalink mirrorlist priority protect proxy proxy_password proxy_username repo_gpgcheck s3_enabled skip_if_unavailable sslcacert sslclientcert sslclientkey sslverify mounted", - built_in: - "architecture augeasversion blockdevices boardmanufacturer boardproductname boardserialnumber cfkey dhcp_servers domain ec2_ ec2_userdata facterversion filesystems ldom fqdn gid hardwareisa hardwaremodel hostname id|0 interfaces ipaddress ipaddress_ ipaddress6 ipaddress6_ iphostnumber is_virtual kernel kernelmajversion kernelrelease kernelversion kernelrelease kernelversion lsbdistcodename lsbdistdescription lsbdistid lsbdistrelease lsbmajdistrelease lsbminordistrelease lsbrelease macaddress macaddress_ macosx_buildversion macosx_productname macosx_productversion macosx_productverson_major macosx_productversion_minor manufacturer memoryfree memorysize netmask metmask_ network_ operatingsystem operatingsystemmajrelease operatingsystemrelease osfamily partitions path physicalprocessorcount processor processorcount productname ps puppetversion rubysitedir rubyversion selinux selinux_config_mode selinux_config_policy selinux_current_mode selinux_current_mode selinux_enforced selinux_policyversion serialnumber sp_ sshdsakey sshecdsakey sshrsakey swapencrypted swapfree swapsize timezone type uniqueid uptime uptime_days uptime_hours uptime_seconds uuid virtual vlans xendomains zfs_version zonenae zones zpool_version", - }, - relevance: 0, - contains: [ - a, - n, - { begin: "[a-zA-Z_]+\\s*=>", returnBegin: !0, end: "=>", contains: [{ className: "attr", begin: e.IDENT_RE }] }, - { className: "number", begin: "(\\b0[0-7_]+)|(\\b0x[0-9a-fA-F_]+)|(\\b[1-9][0-9_]*(\\.[0-9_]+)?)|[0_]\\b", relevance: 0 }, - i, - ], - }, - ], - relevance: 0, - }, - ], - }; - } - function x(e) { - var n = { - keyword: "and elif is global as in if from raise for except finally print import pass return exec else break not with class assert yield try while continue del or def lambda async await nonlocal|10", - built_in: "Ellipsis NotImplemented", - literal: "False None True", - }, - a = { className: "meta", begin: /^(>>>|\.\.\.) / }, - t = { className: "subst", begin: /\{/, end: /\}/, keywords: n, illegal: /#/ }, - i = { begin: /\{\{/, relevance: 0 }, - s = { - className: "string", - contains: [e.BACKSLASH_ESCAPE], - variants: [ - { begin: /(u|b)?r?'''/, end: /'''/, contains: [e.BACKSLASH_ESCAPE, a], relevance: 10 }, - { begin: /(u|b)?r?"""/, end: /"""/, contains: [e.BACKSLASH_ESCAPE, a], relevance: 10 }, - { begin: /(fr|rf|f)'''/, end: /'''/, contains: [e.BACKSLASH_ESCAPE, a, i, t] }, - { begin: /(fr|rf|f)"""/, end: /"""/, contains: [e.BACKSLASH_ESCAPE, a, i, t] }, - { begin: /(u|r|ur)'/, end: /'/, relevance: 10 }, - { begin: /(u|r|ur)"/, end: /"/, relevance: 10 }, - { begin: /(b|br)'/, end: /'/ }, - { begin: /(b|br)"/, end: /"/ }, - { begin: /(fr|rf|f)'/, end: /'/, contains: [e.BACKSLASH_ESCAPE, i, t] }, - { begin: /(fr|rf|f)"/, end: /"/, contains: [e.BACKSLASH_ESCAPE, i, t] }, - e.APOS_STRING_MODE, - e.QUOTE_STRING_MODE, - ], - }, - r = { className: "number", relevance: 0, variants: [{ begin: e.BINARY_NUMBER_RE + "[lLjJ]?" }, { begin: "\\b(0o[0-7]+)[lLjJ]?" }, { begin: e.C_NUMBER_RE + "[lLjJ]?" }] }, - i = { className: "params", begin: /\(/, end: /\)/, contains: ["self", a, r, s, e.HASH_COMMENT_MODE] }; - return ( - (t.contains = [s, r, a]), - { - aliases: ["py", "gyp", "ipython"], - keywords: n, - illegal: /(<\/|->|\?)|=>/, - contains: [ - a, - r, - { beginKeywords: "if", relevance: 0 }, - s, - e.HASH_COMMENT_MODE, - { - variants: [ - { className: "function", beginKeywords: "def" }, - { className: "class", beginKeywords: "class" }, - ], - end: /:/, - illegal: /[${=;\n,]/, - contains: [e.UNDERSCORE_TITLE_MODE, i, { begin: /->/, endsWithParent: !0, keywords: "None" }], - }, - { className: "meta", begin: /^[\t ]*@/, end: /$/ }, - { begin: /\b(print|exec)\(/ }, - ], - } - ); - } - function C(e) { - var n = "[a-zA-Z_]\\w*[!?=]?|[-+~]\\@|<<|>>|=~|===?|<=>|[<>]=?|\\*\\*|[-/+%^&*~`|]|\\[\\]=?", - a = { - keyword: - "and then defined module in return redo if BEGIN retry end for self when next until do begin unless END rescue else break undef not super class case require yield alias while ensure elsif or include attr_reader attr_writer attr_accessor", - literal: "true false nil", - }, - t = { className: "doctag", begin: "@[A-Za-z]+" }, - i = { begin: "#<", end: ">" }, - s = [e.COMMENT("#", "$", { contains: [t] }), e.COMMENT("^\\=begin", "^\\=end", { contains: [t], relevance: 10 }), e.COMMENT("^__END__", "\\n$")], - r = { className: "subst", begin: "#\\{", end: "}", keywords: a }, - l = { - className: "string", - contains: [e.BACKSLASH_ESCAPE, r], - variants: [ - { begin: /'/, end: /'/ }, - { begin: /"/, end: /"/ }, - { begin: /`/, end: /`/ }, - { begin: "%[qQwWx]?\\(", end: "\\)" }, - { begin: "%[qQwWx]?\\[", end: "\\]" }, - { begin: "%[qQwWx]?{", end: "}" }, - { begin: "%[qQwWx]?<", end: ">" }, - { begin: "%[qQwWx]?/", end: "/" }, - { begin: "%[qQwWx]?%", end: "%" }, - { begin: "%[qQwWx]?-", end: "-" }, - { begin: "%[qQwWx]?\\|", end: "\\|" }, - { begin: /\B\?(\\\d{1,3}|\\x[A-Fa-f0-9]{1,2}|\\u[A-Fa-f0-9]{4}|\\?\S)\b/ }, - { begin: /<<[-~]?'?(\w+)(?:.|\n)*?\n\s*\1\b/, returnBegin: !0, contains: [{ begin: /<<[-~]?'?/ }, { begin: /\w+/, endSameAsBegin: !0, contains: [e.BACKSLASH_ESCAPE, r] }] }, - ], - }, - t = { className: "params", begin: "\\(", end: "\\)", endsParent: !0, keywords: a }, - e = [ - l, - i, - { - className: "class", - beginKeywords: "class module", - end: "$|;", - illegal: /=/, - contains: [e.inherit(e.TITLE_MODE, { begin: "[A-Za-z_]\\w*(::\\w+)*(\\?|\\!)?" }), { begin: "<\\s*", contains: [{ begin: "(" + e.IDENT_RE + "::)?" + e.IDENT_RE }] }].concat(s), - }, - { className: "function", beginKeywords: "def", end: "$|;", contains: [e.inherit(e.TITLE_MODE, { begin: n }), t].concat(s) }, - { begin: e.IDENT_RE + "::" }, - { className: "symbol", begin: e.UNDERSCORE_IDENT_RE + "(\\!|\\?)?:", relevance: 0 }, - { className: "symbol", begin: ":(?!\\s)", contains: [l, { begin: n }], relevance: 0 }, - { className: "number", begin: "(\\b0[0-7_]+)|(\\b0x[0-9a-fA-F_]+)|(\\b[1-9][0-9_]*(\\.[0-9_]+)?)|[0_]\\b", relevance: 0 }, - { begin: "(\\$\\W)|((\\$|\\@\\@?)(\\w+))" }, - { className: "params", begin: /\|/, end: /\|/, keywords: a }, - { - begin: "(" + e.RE_STARTERS_RE + "|unless)\\s*", - keywords: "unless", - contains: [ - i, - { - className: "regexp", - contains: [e.BACKSLASH_ESCAPE, r], - illegal: /\n/, - variants: [ - { begin: "/", end: "/[a-z]*" }, - { begin: "%r{", end: "}[a-z]*" }, - { begin: "%r\\(", end: "\\)[a-z]*" }, - { begin: "%r!", end: "![a-z]*" }, - { begin: "%r\\[", end: "\\][a-z]*" }, - ], - }, - ].concat(s), - relevance: 0, - }, - ].concat(s); - return ( - (r.contains = e), - (t = [ - { begin: /^\s*=>/, starts: { end: "$", contains: (t.contains = e) } }, - { className: "meta", begin: "^([>?]>|[\\w#]+\\(\\w+\\):\\d+:\\d+>|(\\w+-)?\\d+\\.\\d+\\.\\d(p\\d+)?[^>]+>)", starts: { end: "$", contains: e } }, - ]), - { aliases: ["rb", "gemspec", "podspec", "thor", "irb"], keywords: a, illegal: /\/\*/, contains: s.concat(t).concat(e) } - ); - } - function S(e) { - var n = "([ui](8|16|32|64|128|size)|f(32|64))?", - a = - "drop i8 i16 i32 i64 i128 isize u8 u16 u32 u64 u128 usize f32 f64 str char bool Box Option Result String Vec Copy Send Sized Sync Drop Fn FnMut FnOnce ToOwned Clone Debug PartialEq PartialOrd Eq Ord AsRef AsMut Into From Default Iterator Extend IntoIterator DoubleEndedIterator ExactSizeIterator SliceConcatExt ToString assert! assert_eq! bitflags! bytes! cfg! col! concat! concat_idents! debug_assert! debug_assert_eq! env! panic! file! format! format_args! include_bin! include_str! line! local_data_key! module_path! option_env! print! println! select! stringify! try! unimplemented! unreachable! vec! write! writeln! macro_rules! assert_ne! debug_assert_ne!"; - return { - aliases: ["rs"], - keywords: { - keyword: - "abstract as async await become box break const continue crate do dyn else enum extern false final fn for if impl in let loop macro match mod move mut override priv pub ref return self Self static struct super trait true try type typeof unsafe unsized use virtual where while yield", - literal: "true false Some None Ok Err", - built_in: a, - }, - lexemes: e.IDENT_RE + "!?", - illegal: "" }, - ], - }; - } - function T(e) { - var n = { className: "subst", variants: [{ begin: "\\$[A-Za-z0-9_]+" }, { begin: "\\${", end: "}" }] }, - a = { - className: "string", - variants: [ - { begin: '"', end: '"', illegal: "\\n", contains: [e.BACKSLASH_ESCAPE] }, - { begin: '"""', end: '"""', relevance: 10 }, - { begin: '[a-z]+"', end: '"', illegal: "\\n", contains: [e.BACKSLASH_ESCAPE, n] }, - { className: "string", begin: '[a-z]+"""', end: '"""', contains: [n], relevance: 10 }, - ], - }, - t = { className: "type", begin: "\\b[A-Z][A-Za-z0-9_]*", relevance: 0 }, - n = { - className: "class", - beginKeywords: "class object trait type", - end: /[:={\[\n;]/, - excludeEnd: !0, - contains: [ - { beginKeywords: "extends with", relevance: 10 }, - { begin: /\[/, end: /\]/, excludeBegin: !0, excludeEnd: !0, relevance: 0, contains: [t] }, - { className: "params", begin: /\(/, end: /\)/, excludeBegin: !0, excludeEnd: !0, relevance: 0, contains: [t] }, - (i = { className: "title", begin: /[^0-9\n\t "'(),.`{}\[\]:;][^\n\t "'(),.`{}\[\]:;]+|[^0-9\n\t "'(),.`{}\[\]:;=]/, relevance: 0 }), - ], - }, - i = { className: "function", beginKeywords: "def", end: /[:={\[(\n;]/, excludeEnd: !0, contains: [i] }; - return { - keywords: { - literal: "true false null", - keyword: - "type yield lazy override def with val var sealed abstract private trait object if forSome for while throw finally protected extends import final return else break new catch super class case package default try this match continue throws implicit", - }, - contains: [e.C_LINE_COMMENT_MODE, e.C_BLOCK_COMMENT_MODE, a, { className: "symbol", begin: "'\\w[\\w\\d_]*(?!')" }, t, i, n, e.C_NUMBER_MODE, { className: "meta", begin: "@[A-Za-z]+" }], - }; - } - function k(e) { - return { aliases: ["console"], contains: [{ className: "meta", begin: "^\\s{0,3}[/\\w\\d\\[\\]()@-]*[>%$#]", starts: { end: "$", subLanguage: "bash" } }] }; - } - function A(e) { - var n = e.COMMENT("--", "$"); - return { - case_insensitive: !0, - illegal: /[<>{}*]/, - contains: [ - { - beginKeywords: - "begin end start commit rollback savepoint lock alter create drop rename call delete do handler insert load replace select truncate update set show pragma grant merge describe use explain help declare prepare execute deallocate release unlock purge reset change stop analyze cache flush optimize repair kill install uninstall checksum restore check backup revoke comment values with", - end: /;/, - endsWithParent: !0, - lexemes: /[\w\.]+/, - keywords: { - keyword: - "as abort abs absolute acc acce accep accept access accessed accessible account acos action activate add addtime admin administer advanced advise aes_decrypt aes_encrypt after agent aggregate ali alia alias all allocate allow alter always analyze ancillary and anti any anydata anydataset anyschema anytype apply archive archived archivelog are as asc ascii asin assembly assertion associate asynchronous at atan atn2 attr attri attrib attribu attribut attribute attributes audit authenticated authentication authid authors auto autoallocate autodblink autoextend automatic availability avg backup badfile basicfile before begin beginning benchmark between bfile bfile_base big bigfile bin binary_double binary_float binlog bit_and bit_count bit_length bit_or bit_xor bitmap blob_base block blocksize body both bound bucket buffer_cache buffer_pool build bulk by byte byteordermark bytes cache caching call calling cancel capacity cascade cascaded case cast catalog category ceil ceiling chain change changed char_base char_length character_length characters characterset charindex charset charsetform charsetid check checksum checksum_agg child choose chr chunk class cleanup clear client clob clob_base clone close cluster_id cluster_probability cluster_set clustering coalesce coercibility col collate collation collect colu colum column column_value columns columns_updated comment commit compact compatibility compiled complete composite_limit compound compress compute concat concat_ws concurrent confirm conn connec connect connect_by_iscycle connect_by_isleaf connect_by_root connect_time connection consider consistent constant constraint constraints constructor container content contents context contributors controlfile conv convert convert_tz corr corr_k corr_s corresponding corruption cos cost count count_big counted covar_pop covar_samp cpu_per_call cpu_per_session crc32 create creation critical cross cube cume_dist curdate current current_date current_time current_timestamp current_user cursor curtime customdatum cycle data database databases datafile datafiles datalength date_add date_cache date_format date_sub dateadd datediff datefromparts datename datepart datetime2fromparts day day_to_second dayname dayofmonth dayofweek dayofyear days db_role_change dbtimezone ddl deallocate declare decode decompose decrement decrypt deduplicate def defa defau defaul default defaults deferred defi defin define degrees delayed delegate delete delete_all delimited demand dense_rank depth dequeue des_decrypt des_encrypt des_key_file desc descr descri describ describe descriptor deterministic diagnostics difference dimension direct_load directory disable disable_all disallow disassociate discardfile disconnect diskgroup distinct distinctrow distribute distributed div do document domain dotnet double downgrade drop dumpfile duplicate duration each edition editionable editions element ellipsis else elsif elt empty enable enable_all enclosed encode encoding encrypt end end-exec endian enforced engine engines enqueue enterprise entityescaping eomonth error errors escaped evalname evaluate event eventdata events except exception exceptions exchange exclude excluding execu execut execute exempt exists exit exp expire explain explode export export_set extended extent external external_1 external_2 externally extract failed failed_login_attempts failover failure far fast feature_set feature_value fetch field fields file file_name_convert filesystem_like_logging final finish first first_value fixed flash_cache flashback floor flush following follows for forall force foreign form forma format found found_rows freelist freelists freepools fresh from from_base64 from_days ftp full function general generated get get_format get_lock getdate getutcdate global global_name globally go goto grant grants greatest group group_concat group_id grouping grouping_id groups gtid_subtract guarantee guard handler hash hashkeys having hea head headi headin heading heap help hex hierarchy high high_priority hosts hour hours http id ident_current ident_incr ident_seed identified identity idle_time if ifnull ignore iif ilike ilm immediate import in include including increment index indexes indexing indextype indicator indices inet6_aton inet6_ntoa inet_aton inet_ntoa infile initial initialized initially initrans inmemory inner innodb input insert install instance instantiable instr interface interleaved intersect into invalidate invisible is is_free_lock is_ipv4 is_ipv4_compat is_not is_not_null is_used_lock isdate isnull isolation iterate java join json json_exists keep keep_duplicates key keys kill language large last last_day last_insert_id last_value lateral lax lcase lead leading least leaves left len lenght length less level levels library like like2 like4 likec limit lines link list listagg little ln load load_file lob lobs local localtime localtimestamp locate locator lock locked log log10 log2 logfile logfiles logging logical logical_reads_per_call logoff logon logs long loop low low_priority lower lpad lrtrim ltrim main make_set makedate maketime managed management manual map mapping mask master master_pos_wait match matched materialized max maxextents maximize maxinstances maxlen maxlogfiles maxloghistory maxlogmembers maxsize maxtrans md5 measures median medium member memcompress memory merge microsecond mid migration min minextents minimum mining minus minute minutes minvalue missing mod mode model modification modify module monitoring month months mount move movement multiset mutex name name_const names nan national native natural nav nchar nclob nested never new newline next nextval no no_write_to_binlog noarchivelog noaudit nobadfile nocheck nocompress nocopy nocycle nodelay nodiscardfile noentityescaping noguarantee nokeep nologfile nomapping nomaxvalue nominimize nominvalue nomonitoring none noneditionable nonschema noorder nopr nopro noprom nopromp noprompt norely noresetlogs noreverse normal norowdependencies noschemacheck noswitch not nothing notice notnull notrim novalidate now nowait nth_value nullif nulls num numb numbe nvarchar nvarchar2 object ocicoll ocidate ocidatetime ociduration ociinterval ociloblocator ocinumber ociref ocirefcursor ocirowid ocistring ocitype oct octet_length of off offline offset oid oidindex old on online only opaque open operations operator optimal optimize option optionally or oracle oracle_date oradata ord ordaudio orddicom orddoc order ordimage ordinality ordvideo organization orlany orlvary out outer outfile outline output over overflow overriding package pad parallel parallel_enable parameters parent parse partial partition partitions pascal passing password password_grace_time password_lock_time password_reuse_max password_reuse_time password_verify_function patch path patindex pctincrease pctthreshold pctused pctversion percent percent_rank percentile_cont percentile_disc performance period period_add period_diff permanent physical pi pipe pipelined pivot pluggable plugin policy position post_transaction pow power pragma prebuilt precedes preceding precision prediction prediction_cost prediction_details prediction_probability prediction_set prepare present preserve prior priority private private_sga privileges procedural procedure procedure_analyze processlist profiles project prompt protection public publishingservername purge quarter query quick quiesce quota quotename radians raise rand range rank raw read reads readsize rebuild record records recover recovery recursive recycle redo reduced ref reference referenced references referencing refresh regexp_like register regr_avgx regr_avgy regr_count regr_intercept regr_r2 regr_slope regr_sxx regr_sxy reject rekey relational relative relaylog release release_lock relies_on relocate rely rem remainder rename repair repeat replace replicate replication required reset resetlogs resize resource respect restore restricted result result_cache resumable resume retention return returning returns reuse reverse revoke right rlike role roles rollback rolling rollup round row row_count rowdependencies rowid rownum rows rtrim rules safe salt sample save savepoint sb1 sb2 sb4 scan schema schemacheck scn scope scroll sdo_georaster sdo_topo_geometry search sec_to_time second seconds section securefile security seed segment select self semi sequence sequential serializable server servererror session session_user sessions_per_user set sets settings sha sha1 sha2 share shared shared_pool short show shrink shutdown si_averagecolor si_colorhistogram si_featurelist si_positionalcolor si_stillimage si_texture siblings sid sign sin size size_t sizes skip slave sleep smalldatetimefromparts smallfile snapshot some soname sort soundex source space sparse spfile split sql sql_big_result sql_buffer_result sql_cache sql_calc_found_rows sql_small_result sql_variant_property sqlcode sqldata sqlerror sqlname sqlstate sqrt square standalone standby start starting startup statement static statistics stats_binomial_test stats_crosstab stats_ks_test stats_mode stats_mw_test stats_one_way_anova stats_t_test_ stats_t_test_indep stats_t_test_one stats_t_test_paired stats_wsr_test status std stddev stddev_pop stddev_samp stdev stop storage store stored str str_to_date straight_join strcmp strict string struct stuff style subdate subpartition subpartitions substitutable substr substring subtime subtring_index subtype success sum suspend switch switchoffset switchover sync synchronous synonym sys sys_xmlagg sysasm sysaux sysdate sysdatetimeoffset sysdba sysoper system system_user sysutcdatetime table tables tablespace tablesample tan tdo template temporary terminated tertiary_weights test than then thread through tier ties time time_format time_zone timediff timefromparts timeout timestamp timestampadd timestampdiff timezone_abbr timezone_minute timezone_region to to_base64 to_date to_days to_seconds todatetimeoffset trace tracking transaction transactional translate translation treat trigger trigger_nestlevel triggers trim truncate try_cast try_convert try_parse type ub1 ub2 ub4 ucase unarchived unbounded uncompress under undo unhex unicode uniform uninstall union unique unix_timestamp unknown unlimited unlock unnest unpivot unrecoverable unsafe unsigned until untrusted unusable unused update updated upgrade upped upper upsert url urowid usable usage use use_stored_outlines user user_data user_resources users using utc_date utc_timestamp uuid uuid_short validate validate_password_strength validation valist value values var var_samp varcharc vari varia variab variabl variable variables variance varp varraw varrawc varray verify version versions view virtual visible void wait wallet warning warnings week weekday weekofyear wellformed when whene whenev wheneve whenever where while whitespace window with within without work wrapped xdb xml xmlagg xmlattributes xmlcast xmlcolattval xmlelement xmlexists xmlforest xmlindex xmlnamespaces xmlpi xmlquery xmlroot xmlschema xmlserialize xmltable xmltype xor year year_to_month years yearweek", - literal: "true false null unknown", - built_in: - "array bigint binary bit blob bool boolean char character date dec decimal float int int8 integer interval number numeric real record serial serial8 smallint text time timestamp tinyint varchar varchar2 varying void", - }, - contains: [ - { className: "string", begin: "'", end: "'", contains: [{ begin: "''" }] }, - { className: "string", begin: '"', end: '"', contains: [{ begin: '""' }] }, - { className: "string", begin: "`", end: "`" }, - e.C_NUMBER_MODE, - e.C_BLOCK_COMMENT_MODE, - n, - e.HASH_COMMENT_MODE, - ], - }, - e.C_BLOCK_COMMENT_MODE, - n, - e.HASH_COMMENT_MODE, - ], - }; - } - function R(e) { - var n = { - keyword: - "#available #colorLiteral #column #else #elseif #endif #file #fileLiteral #function #if #imageLiteral #line #selector #sourceLocation _ __COLUMN__ __FILE__ __FUNCTION__ __LINE__ Any as as! as? associatedtype associativity break case catch class continue convenience default defer deinit didSet do dynamic dynamicType else enum extension fallthrough false fileprivate final for func get guard if import in indirect infix init inout internal is lazy left let mutating nil none nonmutating open operator optional override postfix precedence prefix private protocol Protocol public repeat required rethrows return right self Self set static struct subscript super switch throw throws true try try! try? Type typealias unowned var weak where while willSet", - literal: "true false nil", - built_in: - "abs advance alignof alignofValue anyGenerator assert assertionFailure bridgeFromObjectiveC bridgeFromObjectiveCUnconditional bridgeToObjectiveC bridgeToObjectiveCUnconditional c contains count countElements countLeadingZeros debugPrint debugPrintln distance dropFirst dropLast dump encodeBitsAsWords enumerate equal fatalError filter find getBridgedObjectiveCType getVaList indices insertionSort isBridgedToObjectiveC isBridgedVerbatimToObjectiveC isUniquelyReferenced isUniquelyReferencedNonObjC join lazy lexicographicalCompare map max maxElement min minElement numericCast overlaps partition posix precondition preconditionFailure print println quickSort readLine reduce reflect reinterpretCast reverse roundUpToAlignment sizeof sizeofValue sort split startsWith stride strideof strideofValue swap toString transcode underestimateCount unsafeAddressOf unsafeBitCast unsafeDowncast unsafeUnwrap unsafeReflect withExtendedLifetime withObjectAtPlusZero withUnsafePointer withUnsafePointerToObject withUnsafeMutablePointer withUnsafeMutablePointers withUnsafePointer withUnsafePointers withVaList zip", - }, - a = e.COMMENT("/\\*", "\\*/", { contains: ["self"] }), - t = { className: "subst", begin: /\\\(/, end: "\\)", keywords: n, contains: [] }, - i = { - className: "string", - contains: [e.BACKSLASH_ESCAPE, t], - variants: [ - { begin: /"""/, end: /"""/ }, - { begin: /"/, end: /"/ }, - ], - }, - s = { className: "number", begin: "\\b([\\d_]+(\\.[\\deE_]+)?|0x[a-fA-F0-9_]+(\\.[a-fA-F0-9p_]+)?|0b[01_]+|0o[0-7_]+)\\b", relevance: 0 }; - return ( - (t.contains = [s]), - { - keywords: n, - contains: [ - i, - e.C_LINE_COMMENT_MODE, - a, - { className: "type", begin: "\\b[A-Z][\\wÀ-ʸ']*[!?]" }, - { className: "type", begin: "\\b[A-Z][\\wÀ-ʸ']*", relevance: 0 }, - s, - { - className: "function", - beginKeywords: "func", - end: "{", - excludeEnd: !0, - contains: [ - e.inherit(e.TITLE_MODE, { begin: /[A-Za-z$_][0-9A-Za-z$_]*/ }), - { begin: // }, - { className: "params", begin: /\(/, end: /\)/, endsParent: !0, keywords: n, contains: ["self", s, i, e.C_BLOCK_COMMENT_MODE, { begin: ":" }], illegal: /["']/ }, - ], - illegal: /\[|%/, - }, - { className: "class", beginKeywords: "struct protocol class extension enum", keywords: n, end: "\\{", excludeEnd: !0, contains: [e.inherit(e.TITLE_MODE, { begin: /[A-Za-z$_][\u00C0-\u02B80-9A-Za-z$_]*/ })] }, - { - className: "meta", - begin: - "(@discardableResult|@warn_unused_result|@exported|@lazy|@noescape|@NSCopying|@NSManaged|@objc|@objcMembers|@convention|@required|@noreturn|@IBAction|@IBDesignable|@IBInspectable|@IBOutlet|@infix|@prefix|@postfix|@autoclosure|@testable|@available|@nonobjc|@NSApplicationMain|@UIApplicationMain|@dynamicMemberLookup|@propertyWrapper)", - }, - { beginKeywords: "import", end: /$/, contains: [e.C_LINE_COMMENT_MODE, a] }, - ], - } - ); - } - function D(e) { - var n = { className: "symbol", begin: "&[a-z]+;|&#[0-9]+;|&#x[a-f0-9]+;" }, - a = { begin: "\\s", contains: [{ className: "meta-keyword", begin: "#?[a-z_][a-z1-9_-]+", illegal: "\\n" }] }, - t = e.inherit(a, { begin: "\\(", end: "\\)" }), - i = e.inherit(e.APOS_STRING_MODE, { className: "meta-string" }), - s = e.inherit(e.QUOTE_STRING_MODE, { className: "meta-string" }), - r = { - endsWithParent: !0, - illegal: /`]+/ }] }] }, - ], - }; - return { - aliases: ["html", "xhtml", "rss", "atom", "xjb", "xsd", "xsl", "plist", "wsf", "svg"], - case_insensitive: !0, - contains: [ - { className: "meta", begin: "", relevance: 10, contains: [a, s, i, t, { begin: "\\[", end: "\\]", contains: [{ className: "meta", begin: "", contains: [a, t, s, i] }] }] }, - e.COMMENT("\x3c!--", "--\x3e", { relevance: 10 }), - { begin: "<\\!\\[CDATA\\[", end: "\\]\\]>", relevance: 10 }, - n, - { className: "meta", begin: /<\?xml/, end: /\?>/, relevance: 10 }, - { - begin: /<\?(php)?/, - end: /\?>/, - subLanguage: "php", - contains: [ - { begin: "/\\*", end: "\\*/", skip: !0 }, - { begin: 'b"', end: '"', skip: !0 }, - { begin: "b'", end: "'", skip: !0 }, - e.inherit(e.APOS_STRING_MODE, { illegal: null, className: null, contains: null, skip: !0 }), - e.inherit(e.QUOTE_STRING_MODE, { illegal: null, className: null, contains: null, skip: !0 }), - ], - }, - { className: "tag", begin: ")", end: ">", keywords: { name: "style" }, contains: [r], starts: { end: "", returnEnd: !0, subLanguage: ["css", "xml"] } }, - { className: "tag", begin: ")", end: ">", keywords: { name: "script" }, contains: [r], starts: { end: "", returnEnd: !0, subLanguage: ["actionscript", "javascript", "handlebars", "xml"] } }, - { className: "tag", begin: "", contains: [{ className: "name", begin: /[^\/><\s]+/, relevance: 0 }, r] }, - ], - }; - } - function L(e) { - var n = "true false yes no null", - a = { - className: "string", - relevance: 0, - variants: [{ begin: /'/, end: /'/ }, { begin: /"/, end: /"/ }, { begin: /\S+/ }], - contains: [ - e.BACKSLASH_ESCAPE, - { - className: "template-variable", - variants: [ - { begin: "{{", end: "}}" }, - { begin: "%{", end: "}" }, - ], - }, - ], - }; - return { - case_insensitive: !0, - aliases: ["yml", "YAML", "yaml"], - contains: [ - { className: "attr", variants: [{ begin: "\\w[\\w :\\/.-]*:(?=[ \t]|$)" }, { begin: '"\\w[\\w :\\/.-]*":(?=[ \t]|$)' }, { begin: "'\\w[\\w :\\/.-]*':(?=[ \t]|$)" }] }, - { className: "meta", begin: "^---s*$", relevance: 10 }, - { className: "string", begin: "[\\|>]([0-9]?[+-])?[ ]*\\n( *)[\\S ]+\\n(\\2[\\S ]+\\n?)*" }, - { begin: "<%[%=-]?", end: "[%-]?%>", subLanguage: "ruby", excludeBegin: !0, excludeEnd: !0, relevance: 0 }, - { className: "type", begin: "!" + e.UNDERSCORE_IDENT_RE }, - { className: "type", begin: "!!" + e.UNDERSCORE_IDENT_RE }, - { className: "meta", begin: "&" + e.UNDERSCORE_IDENT_RE + "$" }, - { className: "meta", begin: "\\*" + e.UNDERSCORE_IDENT_RE + "$" }, - { className: "bullet", begin: "\\-(?=[ ]|$)", relevance: 0 }, - e.HASH_COMMENT_MODE, - { beginKeywords: n, keywords: { literal: n } }, - { className: "number", begin: e.C_NUMBER_RE + "\\b" }, - a, - ], - }; - } - (e = function (t) { - var a, - g = [], - s = Object.keys, - w = Object.create(null), - r = Object.create(null), - O = !0, - n = /^(no-?highlight|plain|text)$/i, - l = /\blang(?:uage)?-([\w-]+)\b/i, - i = /((^(<[^>]+>|\t|)+|(?:\n)))/gm, - M = "", - x = "Could not find the language '{}', did you forget to load/include a language module?", - C = { classPrefix: "hljs-", tabReplace: null, useBR: !1, languages: void 0 }, - o = "of and for in not or if then".split(" "); - function S(e) { - return e.replace(/&/g, "&").replace(//g, ">"); - } - function u(e) { - return e.nodeName.toLowerCase(); - } - function c(e) { - return n.test(e); - } - function d(e) { - var n, - a = {}, - t = Array.prototype.slice.call(arguments, 1); - for (n in e) a[n] = e[n]; - return ( - t.forEach(function (e) { - for (n in e) a[n] = e[n]; - }), - a - ); - } - function m(e) { - var i = []; - return ( - (function e(n, a) { - for (var t = n.firstChild; t; t = t.nextSibling) - 3 === t.nodeType ? (a += t.nodeValue.length) : 1 === t.nodeType && (i.push({ event: "start", offset: a, node: t }), (a = e(t, a)), u(t).match(/br|hr|img|input/) || i.push({ event: "stop", offset: a, node: t })); - return a; - })(e, 0), - i - ); - } - function _(e, n, a) { - var t = 0, - i = "", - s = []; - function r() { - return e.length && n.length ? (e[0].offset !== n[0].offset ? (e[0].offset < n[0].offset ? e : n) : "start" === n[0].event ? e : n) : e.length ? e : n; - } - function l(e) { - i += - "<" + - u(e) + - g.map - .call(e.attributes, function (e) { - return " " + e.nodeName + '="' + S(e.value).replace(/"/g, """) + '"'; - }) - .join("") + - ">"; - } - function o(e) { - i += ""; - } - function c(e) { - ("start" === e.event ? l : o)(e.node); - } - for (; e.length || n.length; ) { - var d = r(); - if (((i += S(a.substring(t, d[0].offset))), (t = d[0].offset), d === e)) { - for (s.reverse().forEach(o); c(d.splice(0, 1)[0]), (d = r()), d === e && d.length && d[0].offset === t; ); - s.reverse().forEach(l); - } else "start" === d[0].event ? s.push(d[0].node) : s.pop(), c(d.splice(0, 1)[0]); - } - return i + S(a.substr(t)); - } - function b(n) { - return ( - n.variants && - !n.cached_variants && - (n.cached_variants = n.variants.map(function (e) { - return d(n, { variants: null }, e); - })), - n.cached_variants || - ((function e(n) { - return !!n && (n.endsWithParent || e(n.starts)); - })(n) - ? [d(n, { starts: n.starts ? d(n.starts) : null })] - : Object.isFrozen(n) - ? [d(n)] - : [n]) - ); - } - function p(e) { - if (a && !e.langApiRestored) { - for (var n in ((e.langApiRestored = !0), a)) e[n] && (e[a[n]] = e[n]); - (e.contains || []).concat(e.variants || []).forEach(p); - } - } - function f(n, t) { - var i = {}; - return ( - "string" == typeof n - ? a("keyword", n) - : s(n).forEach(function (e) { - a(e, n[e]); - }), - i - ); - function a(a, e) { - t && (e = e.toLowerCase()), - e.split(" ").forEach(function (e) { - var n = e.split("|"); - i[n[0]] = [ - a, - ((e = n[0]), - (n = n[1]) - ? Number(n) - : (function (e) { - return -1 != o.indexOf(e.toLowerCase()); - })(e) - ? 0 - : 1), - ]; - }); - } - } - function T(t) { - function d(e) { - return (e && e.source) || e; - } - function g(e, n) { - return new RegExp(d(e), "m" + (t.case_insensitive ? "i" : "") + (n ? "g" : "")); - } - function i(i) { - var s = {}, - r = [], - l = {}, - a = 1; - function e(e, n) { - (s[a] = e), r.push([e, n]), (a += new RegExp(n.toString() + "|").exec("").length - 1 + 1); - } - for (var n = 0; n < i.contains.length; n++) { - var t, - o = (t = i.contains[n]).beginKeywords ? "\\.?(?:" + t.begin + ")\\.?" : t.begin; - e(t, o); - } - i.terminator_end && e("end", i.terminator_end), i.illegal && e("illegal", i.illegal); - var c = g( - (function (e, n) { - for (var a = /\[(?:[^\\\]]|\\.)*\]|\(\??|\\([1-9][0-9]*)|\\./, t = 0, i = "", s = 0; s < e.length; s++) { - var r = (t += 1), - l = d(e[s]); - for (0 < s && (i += n), i += "("; 0 < l.length; ) { - var o = a.exec(l); - if (null == o) { - i += l; - break; - } - (i += l.substring(0, o.index)), (l = l.substring(o.index + o[0].length)), "\\" == o[0][0] && o[1] ? (i += "\\" + String(Number(o[1]) + r)) : ((i += o[0]), "(" == o[0] && t++); - } - i += ")"; - } - return i; - })( - r.map(function (e) { - return e[1]; - }), - "|" - ), - !0 - ); - return ( - (l.lastIndex = 0), - (l.exec = function (e) { - var n; - if (0 === r.length) return null; - c.lastIndex = l.lastIndex; - var a = c.exec(e); - if (!a) return null; - for (var t = 0; t < a.length; t++) - if (null != a[t] && null != s["" + t]) { - n = s["" + t]; - break; - } - return "string" == typeof n ? ((a.type = n), (a.extra = [i.illegal, i.terminator_end])) : ((a.type = "begin"), (a.rule = n)), a; - }), - l - ); - } - if (t.contains && -1 != t.contains.indexOf("self")) { - if (!O) throw new Error("ERR: contains `self` is not supported at the top-level of a language. See documentation."); - t.contains = t.contains.filter(function (e) { - return "self" != e; - }); - } - !(function n(a, e) { - a.compiled || - ((a.compiled = !0), - (a.keywords = a.keywords || a.beginKeywords), - a.keywords && (a.keywords = f(a.keywords, t.case_insensitive)), - (a.lexemesRe = g(a.lexemes || /\w+/, !0)), - e && - (a.beginKeywords && (a.begin = "\\b(" + a.beginKeywords.split(" ").join("|") + ")\\b"), - a.begin || (a.begin = /\B|\b/), - (a.beginRe = g(a.begin)), - a.endSameAsBegin && (a.end = a.begin), - a.end || a.endsWithParent || (a.end = /\B|\b/), - a.end && (a.endRe = g(a.end)), - (a.terminator_end = d(a.end) || ""), - a.endsWithParent && e.terminator_end && (a.terminator_end += (a.end ? "|" : "") + e.terminator_end)), - a.illegal && (a.illegalRe = g(a.illegal)), - null == a.relevance && (a.relevance = 1), - a.contains || (a.contains = []), - (a.contains = Array.prototype.concat.apply( - [], - a.contains.map(function (e) { - return b("self" === e ? a : e); - }) - )), - a.contains.forEach(function (e) { - n(e, a); - }), - a.starts && n(a.starts, e), - (a.terminators = i(a))); - })(t); - } - function k(n, e, t, a) { - var i = e; - function s(e, n, a, t) { - if (!a && "" === n) return ""; - if (!e) return n; - t = '') + n + (a ? "" : M); - } - function r() { - var e, n, a, t, i; - if (!_.keywords) return S(E); - for (a = "", e = 0, _.lexemesRe.lastIndex = 0, n = _.lexemesRe.exec(E); n; ) - (a += S(E.substring(e, n.index))), - (t = _), - (i = n), - (i = m.case_insensitive ? i[0].toLowerCase() : i[0]), - (i = t.keywords.hasOwnProperty(i) && t.keywords[i]) ? ((N += i[1]), (a += s(i[0], S(n[0])))) : (a += S(n[0])), - (e = _.lexemesRe.lastIndex), - (n = _.lexemesRe.exec(E)); - return a + S(E.substr(e)); - } - function l() { - (p += (null != _.subLanguage - ? function () { - var e = "string" == typeof _.subLanguage; - if (e && !w[_.subLanguage]) return S(E); - var n = e ? k(_.subLanguage, E, !0, b[_.subLanguage]) : A(E, _.subLanguage.length ? _.subLanguage : void 0); - return 0 < _.relevance && (N += n.relevance), e && (b[_.subLanguage] = n.top), s(n.language, n.value, !1, !0); - } - : r)()), - (E = ""); - } - function o(e) { - (p += e.className ? s(e.className, "", !0) : ""), (_ = Object.create(e, { parent: { value: _ } })); - } - function c(e) { - var n = e[0], - e = e.rule; - return ( - e && e.endSameAsBegin && (e.endRe = new RegExp(n.replace(/[-\/\\^$*+?.()|[\]{}]/g, "\\$&"), "m")), - e.skip ? (E += n) : (e.excludeBegin && (E += n), l(), e.returnBegin || e.excludeBegin || (E = n)), - o(e), - e.returnBegin ? 0 : n.length - ); - } - function d(e) { - var n = e[0], - e = i.substr(e.index), - a = (function e(n, a) { - if (((t = n.endRe), (i = a), (i = t && t.exec(i)) && 0 === i.index)) { - for (; n.endsParent && n.parent; ) n = n.parent; - return n; - } - var t, i; - if (n.endsWithParent) return e(n.parent, a); - })(_, e); - if (a) { - e = _; - for (e.skip ? (E += n) : (e.returnEnd || e.excludeEnd || (E += n), l(), e.excludeEnd && (E = n)); _.className && (p += M), _.skip || _.subLanguage || (N += _.relevance), (_ = _.parent), _ !== a.parent; ); - return a.starts && (a.endSameAsBegin && (a.starts.endRe = a.endRe), o(a.starts)), e.returnEnd ? 0 : n.length; - } - } - var g = {}; - function u(e, n) { - var a = n && n[0]; - if (((E += e), null == a)) return l(), 0; - if ("begin" == g.type && "end" == n.type && g.index == n.index && "" === a) return (E += i.slice(n.index, n.index + 1)), 1; - if ("illegal" === g.type && "" === a) return (E += i.slice(n.index, n.index + 1)), 1; - if ("begin" === (g = n).type) return c(n); - if ("illegal" === n.type && !t) throw new Error('Illegal lexeme "' + a + '" for mode "' + (_.className || "") + '"'); - if ("end" === n.type) { - n = d(n); - if (null != n) return n; - } - return (E += a), a.length; - } - var m = R(n); - if (!m) throw (console.error(x.replace("{}", n)), new Error('Unknown language: "' + n + '"')); - T(m); - for (var _ = a || m, b = {}, p = "", f = _; f !== m; f = f.parent) f.className && (p = s(f.className, "", !0) + p); - var E = "", - N = 0; - try { - for (var h, v, y = 0; (_.terminators.lastIndex = y), (h = _.terminators.exec(i)); ) (v = u(i.substring(y, h.index), h)), (y = h.index + v); - for (u(i.substr(y)), f = _; f.parent; f = f.parent) f.className && (p += M); - return { relevance: N, value: p, illegal: !1, language: n, top: _ }; - } catch (e) { - if (e.message && -1 !== e.message.indexOf("Illegal")) return { illegal: !0, relevance: 0, value: S(i) }; - if (O) return { relevance: 0, value: S(i), language: n, top: _, errorRaised: e }; - throw e; - } - } - function A(a, e) { - e = e || C.languages || s(w); - var t = { relevance: 0, value: S(a) }, - i = t; - return ( - e - .filter(R) - .filter(y) - .forEach(function (e) { - var n = k(e, a, !1); - (n.language = e), n.relevance > i.relevance && (i = n), n.relevance > t.relevance && ((i = t), (t = n)); - }), - i.language && (t.second_best = i), - t - ); - } - function E(e) { - return C.tabReplace || C.useBR - ? e.replace(i, function (e, n) { - return C.useBR && "\n" === e ? "
" : C.tabReplace ? n.replace(/\t/g, C.tabReplace) : ""; - }) - : e; - } - function N(e) { - var n, - a, - t, - i, - s = (function (e) { - var n, - a, - t, - i, - s = e.className + " "; - if (((s += e.parentNode ? e.parentNode.className : ""), (a = l.exec(s)))) { - var r = R(a[1]); - return r || (console.warn(x.replace("{}", a[1])), console.warn("Falling back to no-highlight mode for this block.", e)), r ? a[1] : "no-highlight"; - } - for (n = 0, t = (s = s.split(/\s+/)).length; n < t; n++) if (c((i = s[n])) || R(i)) return i; - })(e); - c(s) || - (C.useBR ? ((n = document.createElement("div")).innerHTML = e.innerHTML.replace(/\n/g, "").replace(//g, "\n")) : (n = e), - (i = n.textContent), - (a = s ? k(s, i, !0) : A(i)), - (n = m(n)).length && (((t = document.createElement("div")).innerHTML = a.value), (a.value = _(n, m(t), i))), - (a.value = E(a.value)), - (e.innerHTML = a.value), - (e.className = ((t = e.className), (i = s), (s = a.language), (i = i ? r[i] : s), (s = [t.trim()]), t.match(/\bhljs\b/) || s.push("hljs"), -1 === t.indexOf(i) && s.push(i), s.join(" ").trim())), - (e.result = { language: a.language, re: a.relevance }), - a.second_best && (e.second_best = { language: a.second_best.language, re: a.second_best.relevance })); - } - function h() { - var e; - h.called || ((h.called = !0), (e = document.querySelectorAll("pre code")), g.forEach.call(e, N)); - } - var v = { disableAutodetect: !0 }; - function R(e) { - return (e = (e || "").toLowerCase()), w[e] || w[r[e]]; - } - function y(e) { - e = R(e); - return e && !e.disableAutodetect; - } - return ( - (t.highlight = k), - (t.highlightAuto = A), - (t.fixMarkup = E), - (t.highlightBlock = N), - (t.configure = function (e) { - C = d(C, e); - }), - (t.initHighlighting = h), - (t.initHighlightingOnLoad = function () { - window.addEventListener("DOMContentLoaded", h, !1), window.addEventListener("load", h, !1); - }), - (t.registerLanguage = function (n, e) { - var a; - try { - a = e(t); - } catch (e) { - if ((console.error("Language definition for '{}' could not be registered.".replace("{}", n)), !O)) throw e; - console.error(e), (a = v); - } - p((w[n] = a)), - (a.rawDefinition = e.bind(null, t)), - a.aliases && - a.aliases.forEach(function (e) { - r[e] = n; - }); - }), - (t.listLanguages = function () { - return s(w); - }), - (t.getLanguage = R), - (t.requireLanguage = function (e) { - var n = R(e); - if (n) return n; - throw new Error("The '{}' language is required, but not loaded.".replace("{}", e)); - }), - (t.autoDetection = y), - (t.inherit = d), - (t.debugMode = function () { - O = !1; - }), - (t.IDENT_RE = "[a-zA-Z]\\w*"), - (t.UNDERSCORE_IDENT_RE = "[a-zA-Z_]\\w*"), - (t.NUMBER_RE = "\\b\\d+(\\.\\d+)?"), - (t.C_NUMBER_RE = "(-?)(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)"), - (t.BINARY_NUMBER_RE = "\\b(0b[01]+)"), - (t.RE_STARTERS_RE = "!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~"), - (t.BACKSLASH_ESCAPE = { begin: "\\\\[\\s\\S]", relevance: 0 }), - (t.APOS_STRING_MODE = { className: "string", begin: "'", end: "'", illegal: "\\n", contains: [t.BACKSLASH_ESCAPE] }), - (t.QUOTE_STRING_MODE = { className: "string", begin: '"', end: '"', illegal: "\\n", contains: [t.BACKSLASH_ESCAPE] }), - (t.PHRASAL_WORDS_MODE = { begin: /\b(a|an|the|are|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such|will|you|your|they|like|more)\b/ }), - (t.COMMENT = function (e, n, a) { - a = t.inherit({ className: "comment", begin: e, end: n, contains: [] }, a || {}); - return a.contains.push(t.PHRASAL_WORDS_MODE), a.contains.push({ className: "doctag", begin: "(?:TODO|FIXME|NOTE|BUG|XXX):", relevance: 0 }), a; - }), - (t.C_LINE_COMMENT_MODE = t.COMMENT("//", "$")), - (t.C_BLOCK_COMMENT_MODE = t.COMMENT("/\\*", "\\*/")), - (t.HASH_COMMENT_MODE = t.COMMENT("#", "$")), - (t.NUMBER_MODE = { className: "number", begin: t.NUMBER_RE, relevance: 0 }), - (t.C_NUMBER_MODE = { className: "number", begin: t.C_NUMBER_RE, relevance: 0 }), - (t.BINARY_NUMBER_MODE = { className: "number", begin: t.BINARY_NUMBER_RE, relevance: 0 }), - (t.CSS_NUMBER_MODE = { className: "number", begin: t.NUMBER_RE + "(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?", relevance: 0 }), - (t.REGEXP_MODE = { className: "regexp", begin: /\//, end: /\/[gimuy]*/, illegal: /\n/, contains: [t.BACKSLASH_ESCAPE, { begin: /\[/, end: /\]/, relevance: 0, contains: [t.BACKSLASH_ESCAPE] }] }), - (t.TITLE_MODE = { className: "title", begin: t.IDENT_RE, relevance: 0 }), - (t.UNDERSCORE_TITLE_MODE = { className: "title", begin: t.UNDERSCORE_IDENT_RE, relevance: 0 }), - (t.METHOD_GUARD = { begin: "\\.\\s*" + t.UNDERSCORE_IDENT_RE, relevance: 0 }), - [ - t.BACKSLASH_ESCAPE, - t.APOS_STRING_MODE, - t.QUOTE_STRING_MODE, - t.PHRASAL_WORDS_MODE, - t.COMMENT, - t.C_LINE_COMMENT_MODE, - t.C_BLOCK_COMMENT_MODE, - t.HASH_COMMENT_MODE, - t.NUMBER_MODE, - t.C_NUMBER_MODE, - t.BINARY_NUMBER_MODE, - t.CSS_NUMBER_MODE, - t.REGEXP_MODE, - t.TITLE_MODE, - t.UNDERSCORE_TITLE_MODE, - t.METHOD_GUARD, - ].forEach(function (e) { - !(function n(a) { - Object.freeze(a); - var t = "function" == typeof a; - Object.getOwnPropertyNames(a).forEach(function (e) { - !a.hasOwnProperty(e) || null === a[e] || ("object" != typeof a[e] && "function" != typeof a[e]) || (t && ("caller" === e || "callee" === e || "arguments" === e)) || Object.isFrozen(a[e]) || n(a[e]); - }); - return a; - })(e); - }), - t - ); - }), - (n = ("object" == typeof window && window) || ("object" == typeof self && self)), - void 0 === a || a.nodeType - ? n && - ((n.hljs = e({})), - "function" == typeof define && - define.amd && - define([], function () { - return n.hljs; - })) - : e(a), - (function () { - "use strict"; - a.registerLanguage("asciidoc", t), - a.registerLanguage("bash", i), - a.registerLanguage("clojure", s), - a.registerLanguage("cpp", r), - a.registerLanguage("cs", l), - a.registerLanguage("css", o), - a.registerLanguage("diff", c), - a.registerLanguage("dockerfile", d), - a.registerLanguage("elixir", g), - a.registerLanguage("go", u), - a.registerLanguage("groovy", m), - a.registerLanguage("haskell", _), - a.registerLanguage("java", b), - a.registerLanguage("javascript", p), - a.registerLanguage("json", f), - a.registerLanguage("kotlin", E), - a.registerLanguage("markdown", N), - a.registerLanguage("nix", h), - a.registerLanguage("objectivec", v), - a.registerLanguage("perl", y), - a.registerLanguage("php", w), - a.registerLanguage("properties", O), - a.registerLanguage("puppet", M), - a.registerLanguage("python", x), - a.registerLanguage("ruby", C), - a.registerLanguage("rust", S), - a.registerLanguage("scala", T), - a.registerLanguage("shell", k), - a.registerLanguage("sql", A), - a.registerLanguage("swift", R), - a.registerLanguage("xml", D), - a.registerLanguage("yaml", L), - [].slice.call(document.querySelectorAll("pre code.hljs")).forEach(function (e) { - a.highlightBlock(e); - }); - })(); -})(); diff --git a/supplemental_ui/partials/footer-scripts.hbs b/supplemental_ui/partials/footer-scripts.hbs index 3d9b577..8f4178a 100644 --- a/supplemental_ui/partials/footer-scripts.hbs +++ b/supplemental_ui/partials/footer-scripts.hbs @@ -1,5 +1,5 @@ - + {{#if env.SITE_SEARCH_PROVIDER}} {{> search-scripts}} {{/if}} diff --git a/supplemental_ui/partials/head-styles.hbs b/supplemental_ui/partials/head-styles.hbs index 8bdc3e9..cece11f 100644 --- a/supplemental_ui/partials/head-styles.hbs +++ b/supplemental_ui/partials/head-styles.hbs @@ -1,3 +1,4 @@ + diff --git a/ui-bundle.zip b/ui-bundle.zip index 9341217a5b5d0e336ebc6fbcd27733cc4a99e3ba..bdde6f1fbeffdf2347fa76dcea5e36dc17ea8141 100644 GIT binary patch delta 209060 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
+E>H=hRc`{#Y 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 Date: Tue, 13 Aug 2024 17:41:13 +0200 Subject: [PATCH 04/10] feat: Point feature pages to their correct edit url Related to #19 --- antora-playbook.yml | 4 ++++ extensions/edit-url/extension.js | 22 ++++++++++++++++++++++ local-playbook.yml | 4 ++++ 3 files changed, 30 insertions(+) create mode 100644 extensions/edit-url/extension.js diff --git a/antora-playbook.yml b/antora-playbook.yml index 1fbf59f..fa2c6c5 100644 --- a/antora-playbook.yml +++ b/antora-playbook.yml @@ -18,3 +18,7 @@ asciidoc: extensions: - ./extensions/remote-include-processor/extension - ./extensions/tabs-block/extension + +antora: + extensions: + - ./extensions/edit-url/extension diff --git a/extensions/edit-url/extension.js b/extensions/edit-url/extension.js new file mode 100644 index 0000000..966af1a --- /dev/null +++ b/extensions/edit-url/extension.js @@ -0,0 +1,22 @@ +'use strict' + +const CATEGORIES = "categories/pages" +const VERSIONS = "versions/pages" +const INDEX = "index.adoc" + +module.exports.register = function () { + this + .on('contentAggregated', ({ contentAggregate }) => { + contentAggregate.forEach(({ name, title, version, nav, files }) => { + files.forEach((file) => { + if (file.src.basename == INDEX) return + if (file.src.path.substring(CATEGORIES) || + file.src.path.substring(VERSIONS)) { + file.src.editUrl = file.src.origin.webUrl + "/blob/" + + file.src.origin.refname + "/features/" + + file.src.basename + } + }) + }) + }) +} \ No newline at end of file diff --git a/local-playbook.yml b/local-playbook.yml index 1ec4dc1..eeba5bb 100644 --- a/local-playbook.yml +++ b/local-playbook.yml @@ -18,3 +18,7 @@ asciidoc: extensions: - ./extensions/remote-include-processor/extension - ./extensions/tabs-block/extension + +antora: + extensions: + - ./extensions/edit-url/extension From 365501bd85f4c93455b25413411a29790917a7c5 Mon Sep 17 00:00:00 2001 From: Andres Almiray Date: Wed, 14 Aug 2024 12:02:04 +0200 Subject: [PATCH 05/10] feat: Point category/version pages to their correct url Related to #19 --- extensions/edit-url/extension.js | 62 +++++++++++++++++++++++--------- 1 file changed, 46 insertions(+), 16 deletions(-) diff --git a/extensions/edit-url/extension.js b/extensions/edit-url/extension.js index 966af1a..f6f4ec4 100644 --- a/extensions/edit-url/extension.js +++ b/extensions/edit-url/extension.js @@ -1,22 +1,52 @@ 'use strict' -const CATEGORIES = "categories/pages" -const VERSIONS = "versions/pages" -const INDEX = "index.adoc" +const PARTIALS = "partials" +const CATEGORIES = "categories/pages" +const VERSIONS = "versions/pages" +const INDEX = "index.adoc" +const RE_CATEGORY1 = /modules\/categories\/pages\/(?\w+)\/index.adoc/ +const RE_VERSION1 = /modules\/versions\/pages\/(?.+?)\/index.adoc/ +const RE_CATEGORY2 = /modules\/categories\/pages\/\w+\/(?.+?)\/index.adoc/ +const RE_VERSION2 = /modules\/versions\/pages\/.+?\/(?\w+)\/index.adoc/ module.exports.register = function () { - this - .on('contentAggregated', ({ contentAggregate }) => { - contentAggregate.forEach(({ name, title, version, nav, files }) => { - files.forEach((file) => { - if (file.src.basename == INDEX) return - if (file.src.path.substring(CATEGORIES) || - file.src.path.substring(VERSIONS)) { - file.src.editUrl = file.src.origin.webUrl + "/blob/" + - file.src.origin.refname + "/features/" + - file.src.basename - } - }) - }) + this.on('contentAggregated', ({ contentAggregate }) => { + contentAggregate.forEach(({ name, title, version, nav, files }) => { + files.forEach((file) => { + let path = file.src.path + + if (path.includes(PARTIALS)) { + // skip + } else if (file.src.basename == INDEX) { + let match_c1 = path.match(RE_CATEGORY1) + let match_c2 = path.match(RE_CATEGORY2) + let match_v1 = path.match(RE_VERSION1) + let match_v2 = path.match(RE_VERSION2) + + if (match_c1) { + file.src.editUrl = file.src.origin.webUrl + "/blob/" + + file.src.origin.refname + "/features/_categories/" + + match_c1.groups.category + ".adoc" + } else if(match_c2) { + file.src.editUrl = file.src.origin.webUrl + "/blob/" + + file.src.origin.refname + "/features/_versions/" + + match_c2.groups.version + ".adoc" + } else if(match_v2) { + file.src.editUrl = file.src.origin.webUrl + "/blob/" + + file.src.origin.refname + "/features/_categories/" + + match_v2.groups.category + ".adoc" + } else if (match_v1) { + file.src.editUrl = file.src.origin.webUrl + "/blob/" + + file.src.origin.refname + "/features/_versions/" + + match_v1.groups.version + ".adoc" + } + } else if (path.includes(CATEGORIES) || + path.includes(VERSIONS)) { + file.src.editUrl = file.src.origin.webUrl + "/blob/" + + file.src.origin.refname + "/features/" + + file.src.basename + } + }) }) + }) } \ No newline at end of file From a38c210e678eabde65e0d9020ab726edec295628 Mon Sep 17 00:00:00 2001 From: Andres Almiray Date: Wed, 14 Aug 2024 14:02:02 +0200 Subject: [PATCH 06/10] feat: Add lunr extension to enable search Fixes #17 --- .gitignore | 1 - antora-playbook.yml | 1 + antora-ui-default/package.json | 59 ++++++++++++++++++++++++++++++++++ local-playbook.yml | 1 + package.json | 12 +++++++ 5 files changed, 73 insertions(+), 1 deletion(-) create mode 100644 antora-ui-default/package.json create mode 100644 package.json diff --git a/.gitignore b/.gitignore index e8e3377..3dc1741 100644 --- a/.gitignore +++ b/.gitignore @@ -10,7 +10,6 @@ target/ .project tmp/ .DS_Store -package.json package-lock.json node_modules diff --git a/antora-playbook.yml b/antora-playbook.yml index fa2c6c5..86bd23b 100644 --- a/antora-playbook.yml +++ b/antora-playbook.yml @@ -22,3 +22,4 @@ asciidoc: antora: extensions: - ./extensions/edit-url/extension + - '@antora/lunr-extension' diff --git a/antora-ui-default/package.json b/antora-ui-default/package.json new file mode 100644 index 0000000..5b3a066 --- /dev/null +++ b/antora-ui-default/package.json @@ -0,0 +1,59 @@ +{ + "name": "@antora/ui-default", + "description": "An archetype project that produces a UI for creating documentation sites with Antora", + "homepage": "https://gitlab.com/antora/antora-ui-default", + "license": "MPL-2.0", + "repository": { + "type": "git", + "url": "https://gitlab.com/antora/antora-ui-default.git" + }, + "engines": { + "node": ">= 8.0.0" + }, + "browserslist": [ + "last 2 versions" + ], + "devDependencies": { + "@asciidoctor/core": "~2.2", + "@fontsource/roboto": "~4.5", + "@fontsource/roboto-mono": "~4.5", + "@vscode/gulp-vinyl-zip": "~2.5", + "autoprefixer": "~9.7", + "browser-pack-flat": "~3.4", + "browserify": "~16.5", + "cssnano": "~4.1", + "eslint": "~6.8", + "eslint-config-standard": "~14.1", + "eslint-plugin-import": "~2.20", + "eslint-plugin-node": "~11.1", + "eslint-plugin-promise": "~4.2", + "eslint-plugin-standard": "~4.0", + "fancy-log": "~1.3", + "fs-extra": "~8.1", + "gulp": "~4.0", + "gulp-concat": "~2.6", + "gulp-connect": "~5.7", + "gulp-eslint": "~6.0", + "gulp-imagemin": "~6.2", + "gulp-postcss": "~8.0", + "gulp-stylelint": "~13.0", + "gulp-uglify": "~3.0", + "handlebars": "~4.7", + "highlight.js": "9.18.3", + "js-yaml": "~3.13", + "merge-stream": "~2.0", + "postcss-calc": "~7.0", + "postcss-custom-properties": "~9.1", + "postcss-import": "~12.0", + "postcss-url": "~8.0", + "prettier-eslint": "~9.0", + "require-directory": "~2.1", + "require-from-string": "~2.0", + "stylelint": "~13.3", + "stylelint-config-standard": "~20.0", + "vinyl-fs": "~3.0" + }, + "dependencies": { + "prismjs": "^1.29.0" + } +} diff --git a/local-playbook.yml b/local-playbook.yml index eeba5bb..9ba659e 100644 --- a/local-playbook.yml +++ b/local-playbook.yml @@ -22,3 +22,4 @@ asciidoc: antora: extensions: - ./extensions/edit-url/extension + - '@antora/lunr-extension' diff --git a/package.json b/package.json new file mode 100644 index 0000000..f97b196 --- /dev/null +++ b/package.json @@ -0,0 +1,12 @@ +{ + "devDependencies": { + "@antora/cli": "3.1.2", + "@antora/site-generator": "3.1.2" + }, + "dependencies": { + "@antora/lunr-extension": "^1.0.0-alpha.8", + "antora": "^3.1.9", + "prism": "^1.0.0", + "prismjs": "^1.29.0" + } +} From 8355104f52b6f051db0dad25b75a3f712c8c8dde Mon Sep 17 00:00:00 2001 From: Andres Almiray Date: Wed, 14 Aug 2024 14:17:27 +0200 Subject: [PATCH 07/10] fix: Install dependencies before generating the site --- generate.sh | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/generate.sh b/generate.sh index 0bbb6d5..26f5c76 100755 --- a/generate.sh +++ b/generate.sh @@ -3,6 +3,11 @@ echo "🔄 Generating navigation" java .github/scripts/generate_navigation.java "$(pwd)" +echo "" +echo "📦 Installing dependencies" +echo "Please wait..." +npm install + echo "" echo "🛠️ Building site" echo "Please wait..." From cab45481fb8f045dc9c3585bd2bff6dd6ef152c3 Mon Sep 17 00:00:00 2001 From: Andres Almiray Date: Wed, 14 Aug 2024 14:24:40 +0200 Subject: [PATCH 08/10] build: Update GH workflows --- .github/workflows/push.yml | 6 +++--- .github/workflows/site.yml | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/push.yml b/.github/workflows/push.yml index 37650e2..cd272f7 100644 --- a/.github/workflows/push.yml +++ b/.github/workflows/push.yml @@ -12,13 +12,13 @@ jobs: uses: actions/checkout@v4 - name: Setup Java - uses: actions/setup-java@v3 + uses: actions/setup-java@v4 with: java-version: 17 distribution: oracle - name: Setup node - uses: actions/setup-node@v3 + uses: actions/setup-node@v4 with: node-version: latest @@ -34,7 +34,7 @@ jobs: touch website/.nojekyll - name: Deploy to GitHub Pages - uses: JamesIves/github-pages-deploy-action@4.0.0 + uses: JamesIves/github-pages-deploy-action@4.6.3 with: folder: website branch: 'gh-pages' diff --git a/.github/workflows/site.yml b/.github/workflows/site.yml index b511faa..0bb09ac 100644 --- a/.github/workflows/site.yml +++ b/.github/workflows/site.yml @@ -11,13 +11,13 @@ jobs: uses: actions/checkout@v4 - name: Setup Java - uses: actions/setup-java@v3 + uses: actions/setup-java@v4 with: java-version: 17 distribution: oracle - name: Setup node - uses: actions/setup-node@v3 + uses: actions/setup-node@v4 with: node-version: latest @@ -33,7 +33,7 @@ jobs: touch website/.nojekyll - name: Deploy to GitHub Pages - uses: JamesIves/github-pages-deploy-action@4.0.0 + uses: JamesIves/github-pages-deploy-action@4.6.3 with: folder: website branch: 'gh-pages' From e5f70431c2ce2ce30cf1d9f4d2055e3c7dece0f6 Mon Sep 17 00:00:00 2001 From: Andres Almiray Date: Wed, 14 Aug 2024 14:32:54 +0200 Subject: [PATCH 09/10] build: Update GH workflows --- .github/workflows/push.yml | 2 +- .github/workflows/site.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/push.yml b/.github/workflows/push.yml index cd272f7..88d5a4b 100644 --- a/.github/workflows/push.yml +++ b/.github/workflows/push.yml @@ -34,7 +34,7 @@ jobs: touch website/.nojekyll - name: Deploy to GitHub Pages - uses: JamesIves/github-pages-deploy-action@4.6.3 + uses: JamesIves/github-pages-deploy-action@v4.6.3 with: folder: website branch: 'gh-pages' diff --git a/.github/workflows/site.yml b/.github/workflows/site.yml index 0bb09ac..e68d6fb 100644 --- a/.github/workflows/site.yml +++ b/.github/workflows/site.yml @@ -33,7 +33,7 @@ jobs: touch website/.nojekyll - name: Deploy to GitHub Pages - uses: JamesIves/github-pages-deploy-action@4.6.3 + uses: JamesIves/github-pages-deploy-action@v4.6.3 with: folder: website branch: 'gh-pages' From 0a72a8003b5038b7bc5fba0330d6ed962de0b837 Mon Sep 17 00:00:00 2001 From: Andres Almiray Date: Sun, 24 Aug 2025 14:31:21 +0200 Subject: [PATCH 10/10] feat: Update SQL keywords --- antora-playbook.yml | 3 +- antora-ui-default/package.json | 2 +- local-playbook.yml | 3 +- package.json | 2 +- prismjs/CHANGELOG.md | 3068 +++++++++++++++++ prismjs/LICENSE | 21 + prismjs/README.md | 51 + prismjs/components.js | 2 + prismjs/components.json | 1766 ++++++++++ prismjs/components/index.js | 56 + prismjs/components/prism-abap.js | 48 + prismjs/components/prism-abap.min.js | 1 + prismjs/components/prism-abnf.js | 54 + prismjs/components/prism-abnf.min.js | 1 + prismjs/components/prism-actionscript.js | 19 + prismjs/components/prism-actionscript.min.js | 1 + prismjs/components/prism-ada.js | 22 + prismjs/components/prism-ada.min.js | 1 + prismjs/components/prism-agda.js | 24 + prismjs/components/prism-agda.min.js | 1 + prismjs/components/prism-al.js | 25 + prismjs/components/prism-al.min.js | 1 + prismjs/components/prism-antlr4.js | 65 + prismjs/components/prism-antlr4.min.js | 1 + prismjs/components/prism-apacheconf.js | 47 + prismjs/components/prism-apacheconf.min.js | 1 + prismjs/components/prism-apex.js | 65 + prismjs/components/prism-apex.min.js | 1 + prismjs/components/prism-apl.js | 32 + prismjs/components/prism-apl.min.js | 1 + prismjs/components/prism-applescript.js | 17 + prismjs/components/prism-applescript.min.js | 1 + prismjs/components/prism-aql.js | 49 + prismjs/components/prism-aql.min.js | 1 + prismjs/components/prism-arduino.js | 7 + prismjs/components/prism-arduino.min.js | 1 + prismjs/components/prism-arff.js | 10 + prismjs/components/prism-arff.min.js | 1 + prismjs/components/prism-armasm.js | 49 + prismjs/components/prism-armasm.min.js | 1 + prismjs/components/prism-arturo.js | 105 + prismjs/components/prism-arturo.min.js | 1 + prismjs/components/prism-asciidoc.js | 234 ++ prismjs/components/prism-asciidoc.min.js | 1 + prismjs/components/prism-asm6502.js | 29 + prismjs/components/prism-asm6502.min.js | 1 + prismjs/components/prism-asmatmel.js | 43 + prismjs/components/prism-asmatmel.min.js | 1 + prismjs/components/prism-aspnet.js | 48 + prismjs/components/prism-aspnet.min.js | 1 + prismjs/components/prism-autohotkey.js | 44 + prismjs/components/prism-autohotkey.min.js | 1 + prismjs/components/prism-autoit.js | 34 + prismjs/components/prism-autoit.min.js | 1 + prismjs/components/prism-avisynth.js | 188 + prismjs/components/prism-avisynth.min.js | 1 + prismjs/components/prism-avro-idl.js | 50 + prismjs/components/prism-avro-idl.min.js | 1 + prismjs/components/prism-awk.js | 32 + prismjs/components/prism-awk.min.js | 1 + prismjs/components/prism-bash.js | 235 ++ prismjs/components/prism-bash.min.js | 1 + prismjs/components/prism-basic.js | 17 + prismjs/components/prism-basic.min.js | 1 + prismjs/components/prism-batch.js | 99 + prismjs/components/prism-batch.min.js | 1 + prismjs/components/prism-bbcode.js | 29 + prismjs/components/prism-bbcode.min.js | 1 + prismjs/components/prism-bbj.js | 19 + prismjs/components/prism-bbj.min.js | 1 + prismjs/components/prism-bicep.js | 77 + prismjs/components/prism-bicep.min.js | 1 + prismjs/components/prism-birb.js | 23 + prismjs/components/prism-birb.min.js | 1 + prismjs/components/prism-bison.js | 39 + prismjs/components/prism-bison.min.js | 1 + prismjs/components/prism-bnf.js | 21 + prismjs/components/prism-bnf.min.js | 1 + prismjs/components/prism-bqn.js | 63 + prismjs/components/prism-bqn.min.js | 1 + prismjs/components/prism-brainfuck.js | 20 + prismjs/components/prism-brainfuck.min.js | 1 + prismjs/components/prism-brightscript.js | 44 + prismjs/components/prism-brightscript.min.js | 1 + prismjs/components/prism-bro.js | 37 + prismjs/components/prism-bro.min.js | 1 + prismjs/components/prism-bsl.js | 75 + prismjs/components/prism-bsl.min.js | 1 + prismjs/components/prism-c.js | 80 + prismjs/components/prism-c.min.js | 1 + prismjs/components/prism-cfscript.js | 44 + prismjs/components/prism-cfscript.min.js | 1 + prismjs/components/prism-chaiscript.js | 60 + prismjs/components/prism-chaiscript.min.js | 1 + prismjs/components/prism-cil.js | 27 + prismjs/components/prism-cil.min.js | 1 + prismjs/components/prism-cilkc.js | 8 + prismjs/components/prism-cilkc.min.js | 1 + prismjs/components/prism-cilkcpp.js | 9 + prismjs/components/prism-cilkcpp.min.js | 1 + prismjs/components/prism-clike.js | 31 + prismjs/components/prism-clike.min.js | 1 + prismjs/components/prism-clojure.js | 31 + prismjs/components/prism-clojure.min.js | 1 + prismjs/components/prism-cmake.js | 29 + prismjs/components/prism-cmake.min.js | 1 + prismjs/components/prism-cobol.js | 53 + prismjs/components/prism-cobol.min.js | 1 + prismjs/components/prism-coffeescript.js | 96 + prismjs/components/prism-coffeescript.min.js | 1 + prismjs/components/prism-concurnas.js | 61 + prismjs/components/prism-concurnas.min.js | 1 + prismjs/components/prism-cooklang.js | 146 + prismjs/components/prism-cooklang.min.js | 1 + prismjs/components/prism-coq.js | 54 + prismjs/components/prism-coq.min.js | 1 + prismjs/components/prism-core.js | 1263 +++++++ prismjs/components/prism-core.min.js | 1 + prismjs/components/prism-cpp.js | 99 + prismjs/components/prism-cpp.min.js | 1 + prismjs/components/prism-crystal.js | 57 + prismjs/components/prism-crystal.min.js | 1 + prismjs/components/prism-csharp.js | 366 ++ prismjs/components/prism-csharp.min.js | 1 + prismjs/components/prism-cshtml.js | 199 ++ prismjs/components/prism-cshtml.min.js | 1 + prismjs/components/prism-csp.js | 76 + prismjs/components/prism-csp.min.js | 1 + prismjs/components/prism-css-extras.js | 120 + prismjs/components/prism-css-extras.min.js | 1 + prismjs/components/prism-css.js | 64 + prismjs/components/prism-css.min.js | 1 + prismjs/components/prism-csv.js | 6 + prismjs/components/prism-csv.min.js | 1 + prismjs/components/prism-cue.js | 84 + prismjs/components/prism-cue.min.js | 1 + prismjs/components/prism-cypher.js | 36 + prismjs/components/prism-cypher.min.js | 1 + prismjs/components/prism-d.js | 84 + prismjs/components/prism-d.min.js | 1 + prismjs/components/prism-dart.js | 79 + prismjs/components/prism-dart.min.js | 1 + prismjs/components/prism-dataweave.js | 41 + prismjs/components/prism-dataweave.min.js | 1 + prismjs/components/prism-dax.js | 27 + prismjs/components/prism-dax.min.js | 1 + prismjs/components/prism-dhall.js | 69 + prismjs/components/prism-dhall.min.js | 1 + prismjs/components/prism-diff.js | 64 + prismjs/components/prism-diff.min.js | 1 + prismjs/components/prism-django.js | 60 + prismjs/components/prism-django.min.js | 1 + prismjs/components/prism-dns-zone-file.js | 33 + prismjs/components/prism-dns-zone-file.min.js | 1 + prismjs/components/prism-docker.js | 98 + prismjs/components/prism-docker.min.js | 1 + prismjs/components/prism-dot.js | 76 + prismjs/components/prism-dot.min.js | 1 + prismjs/components/prism-ebnf.js | 22 + prismjs/components/prism-ebnf.min.js | 1 + prismjs/components/prism-editorconfig.js | 26 + prismjs/components/prism-editorconfig.min.js | 1 + prismjs/components/prism-eiffel.js | 34 + prismjs/components/prism-eiffel.min.js | 1 + prismjs/components/prism-ejs.js | 26 + prismjs/components/prism-ejs.min.js | 1 + prismjs/components/prism-elixir.js | 98 + prismjs/components/prism-elixir.min.js | 1 + prismjs/components/prism-elm.js | 45 + prismjs/components/prism-elm.min.js | 1 + prismjs/components/prism-erb.js | 25 + prismjs/components/prism-erb.min.js | 1 + prismjs/components/prism-erlang.js | 44 + prismjs/components/prism-erlang.min.js | 1 + prismjs/components/prism-etlua.js | 23 + prismjs/components/prism-etlua.min.js | 1 + prismjs/components/prism-excel-formula.js | 66 + prismjs/components/prism-excel-formula.min.js | 1 + prismjs/components/prism-factor.js | 403 +++ prismjs/components/prism-factor.min.js | 1 + prismjs/components/prism-false.js | 32 + prismjs/components/prism-false.min.js | 1 + .../prism-firestore-security-rules.js | 35 + .../prism-firestore-security-rules.min.js | 1 + prismjs/components/prism-flow.js | 35 + prismjs/components/prism-flow.min.js | 1 + prismjs/components/prism-fortran.js | 40 + prismjs/components/prism-fortran.min.js | 1 + prismjs/components/prism-fsharp.js | 75 + prismjs/components/prism-fsharp.min.js | 1 + prismjs/components/prism-ftl.js | 98 + prismjs/components/prism-ftl.min.js | 1 + prismjs/components/prism-gap.js | 54 + prismjs/components/prism-gap.min.js | 1 + prismjs/components/prism-gcode.js | 16 + prismjs/components/prism-gcode.min.js | 1 + prismjs/components/prism-gdscript.js | 27 + prismjs/components/prism-gdscript.min.js | 1 + prismjs/components/prism-gedcom.js | 28 + prismjs/components/prism-gedcom.min.js | 1 + prismjs/components/prism-gettext.js | 43 + prismjs/components/prism-gettext.min.js | 1 + prismjs/components/prism-gherkin.js | 85 + prismjs/components/prism-gherkin.min.js | 1 + prismjs/components/prism-git.js | 68 + prismjs/components/prism-git.min.js | 1 + prismjs/components/prism-glsl.js | 3 + prismjs/components/prism-glsl.min.js | 1 + prismjs/components/prism-gml.js | 7 + prismjs/components/prism-gml.min.js | 1 + prismjs/components/prism-gn.js | 51 + prismjs/components/prism-gn.min.js | 1 + prismjs/components/prism-go-module.js | 24 + prismjs/components/prism-go-module.min.js | 1 + prismjs/components/prism-go.js | 28 + prismjs/components/prism-go.min.js | 1 + prismjs/components/prism-gradle.js | 63 + prismjs/components/prism-gradle.min.js | 1 + prismjs/components/prism-graphql.js | 211 ++ prismjs/components/prism-graphql.min.js | 1 + prismjs/components/prism-groovy.js | 65 + prismjs/components/prism-groovy.min.js | 1 + prismjs/components/prism-haml.js | 149 + prismjs/components/prism-haml.min.js | 1 + prismjs/components/prism-handlebars.js | 40 + prismjs/components/prism-handlebars.min.js | 1 + prismjs/components/prism-haskell.js | 66 + prismjs/components/prism-haskell.min.js | 1 + prismjs/components/prism-haxe.js | 78 + prismjs/components/prism-haxe.min.js | 1 + prismjs/components/prism-hcl.js | 63 + prismjs/components/prism-hcl.min.js | 1 + prismjs/components/prism-hlsl.js | 20 + prismjs/components/prism-hlsl.min.js | 1 + prismjs/components/prism-hoon.js | 14 + prismjs/components/prism-hoon.min.js | 1 + prismjs/components/prism-hpkp.js | 14 + prismjs/components/prism-hpkp.min.js | 1 + prismjs/components/prism-hsts.js | 14 + prismjs/components/prism-hsts.min.js | 1 + prismjs/components/prism-http.js | 151 + prismjs/components/prism-http.min.js | 1 + prismjs/components/prism-ichigojam.js | 15 + prismjs/components/prism-ichigojam.min.js | 1 + prismjs/components/prism-icon.js | 20 + prismjs/components/prism-icon.min.js | 1 + .../components/prism-icu-message-format.js | 148 + .../prism-icu-message-format.min.js | 1 + prismjs/components/prism-idris.js | 19 + prismjs/components/prism-idris.min.js | 1 + prismjs/components/prism-iecst.js | 32 + prismjs/components/prism-iecst.min.js | 1 + prismjs/components/prism-ignore.js | 23 + prismjs/components/prism-ignore.min.js | 1 + prismjs/components/prism-inform7.js | 61 + prismjs/components/prism-inform7.min.js | 1 + prismjs/components/prism-ini.js | 42 + prismjs/components/prism-ini.min.js | 1 + prismjs/components/prism-io.js | 22 + prismjs/components/prism-io.min.js | 1 + prismjs/components/prism-j.js | 28 + prismjs/components/prism-j.min.js | 1 + prismjs/components/prism-java.js | 124 + prismjs/components/prism-java.min.js | 1 + prismjs/components/prism-javadoc.js | 82 + prismjs/components/prism-javadoc.min.js | 1 + prismjs/components/prism-javadoclike.js | 87 + prismjs/components/prism-javadoclike.min.js | 1 + prismjs/components/prism-javascript.js | 172 + prismjs/components/prism-javascript.min.js | 1 + prismjs/components/prism-javastacktrace.js | 142 + .../components/prism-javastacktrace.min.js | 1 + prismjs/components/prism-jexl.js | 14 + prismjs/components/prism-jexl.min.js | 1 + prismjs/components/prism-jolie.js | 41 + prismjs/components/prism-jolie.min.js | 1 + prismjs/components/prism-jq.js | 69 + prismjs/components/prism-jq.min.js | 1 + prismjs/components/prism-js-extras.js | 135 + prismjs/components/prism-js-extras.min.js | 1 + prismjs/components/prism-js-templates.js | 349 ++ prismjs/components/prism-js-templates.min.js | 1 + prismjs/components/prism-jsdoc.js | 78 + prismjs/components/prism-jsdoc.min.js | 1 + prismjs/components/prism-json.js | 27 + prismjs/components/prism-json.min.js | 1 + prismjs/components/prism-json5.js | 23 + prismjs/components/prism-json5.min.js | 1 + prismjs/components/prism-jsonp.js | 7 + prismjs/components/prism-jsonp.min.js | 1 + prismjs/components/prism-jsstacktrace.js | 49 + prismjs/components/prism-jsstacktrace.min.js | 1 + prismjs/components/prism-jsx.js | 145 + prismjs/components/prism-jsx.min.js | 1 + prismjs/components/prism-julia.js | 35 + prismjs/components/prism-julia.min.js | 1 + prismjs/components/prism-keepalived.js | 51 + prismjs/components/prism-keepalived.min.js | 1 + prismjs/components/prism-keyman.js | 44 + prismjs/components/prism-keyman.min.js | 1 + prismjs/components/prism-kotlin.js | 88 + prismjs/components/prism-kotlin.min.js | 1 + prismjs/components/prism-kumir.js | 106 + prismjs/components/prism-kumir.min.js | 1 + prismjs/components/prism-kusto.js | 44 + prismjs/components/prism-kusto.min.js | 1 + prismjs/components/prism-latex.js | 64 + prismjs/components/prism-latex.min.js | 1 + prismjs/components/prism-latte.js | 63 + prismjs/components/prism-latte.min.js | 1 + prismjs/components/prism-less.js | 54 + prismjs/components/prism-less.min.js | 1 + prismjs/components/prism-lilypond.js | 69 + prismjs/components/prism-lilypond.min.js | 1 + prismjs/components/prism-linker-script.js | 30 + prismjs/components/prism-linker-script.min.js | 1 + prismjs/components/prism-liquid.js | 66 + prismjs/components/prism-liquid.min.js | 1 + prismjs/components/prism-lisp.js | 197 ++ prismjs/components/prism-lisp.min.js | 1 + prismjs/components/prism-livescript.js | 119 + prismjs/components/prism-livescript.min.js | 1 + prismjs/components/prism-llvm.js | 19 + prismjs/components/prism-llvm.min.js | 1 + prismjs/components/prism-log.js | 120 + prismjs/components/prism-log.min.js | 1 + prismjs/components/prism-lolcode.js | 55 + prismjs/components/prism-lolcode.min.js | 1 + prismjs/components/prism-lua.js | 20 + prismjs/components/prism-lua.min.js | 1 + prismjs/components/prism-magma.js | 35 + prismjs/components/prism-magma.min.js | 1 + prismjs/components/prism-makefile.js | 34 + prismjs/components/prism-makefile.min.js | 1 + prismjs/components/prism-markdown.js | 415 +++ prismjs/components/prism-markdown.min.js | 1 + prismjs/components/prism-markup-templating.js | 124 + .../components/prism-markup-templating.min.js | 1 + prismjs/components/prism-markup.js | 186 + prismjs/components/prism-markup.min.js | 1 + prismjs/components/prism-mata.js | 50 + prismjs/components/prism-mata.min.js | 1 + prismjs/components/prism-matlab.js | 16 + prismjs/components/prism-matlab.min.js | 1 + prismjs/components/prism-maxscript.js | 91 + prismjs/components/prism-maxscript.min.js | 1 + prismjs/components/prism-mel.js | 46 + prismjs/components/prism-mel.min.js | 1 + prismjs/components/prism-mermaid.js | 113 + prismjs/components/prism-mermaid.min.js | 1 + prismjs/components/prism-metafont.js | 84 + prismjs/components/prism-metafont.min.js | 1 + prismjs/components/prism-mizar.js | 12 + prismjs/components/prism-mizar.min.js | 1 + prismjs/components/prism-mongodb.js | 97 + prismjs/components/prism-mongodb.min.js | 1 + prismjs/components/prism-monkey.js | 29 + prismjs/components/prism-monkey.min.js | 1 + prismjs/components/prism-moonscript.js | 57 + prismjs/components/prism-moonscript.min.js | 1 + prismjs/components/prism-n1ql.js | 24 + prismjs/components/prism-n1ql.min.js | 1 + prismjs/components/prism-n4js.js | 14 + prismjs/components/prism-n4js.min.js | 1 + prismjs/components/prism-nand2tetris-hdl.js | 9 + .../components/prism-nand2tetris-hdl.min.js | 1 + prismjs/components/prism-naniscript.js | 170 + prismjs/components/prism-naniscript.min.js | 1 + prismjs/components/prism-nasm.js | 24 + prismjs/components/prism-nasm.min.js | 1 + prismjs/components/prism-neon.js | 40 + prismjs/components/prism-neon.min.js | 1 + prismjs/components/prism-nevod.js | 125 + prismjs/components/prism-nevod.min.js | 1 + prismjs/components/prism-nginx.js | 54 + prismjs/components/prism-nginx.min.js | 1 + prismjs/components/prism-nim.js | 44 + prismjs/components/prism-nim.min.js | 1 + prismjs/components/prism-nix.js | 37 + prismjs/components/prism-nix.min.js | 1 + prismjs/components/prism-nsis.js | 30 + prismjs/components/prism-nsis.min.js | 1 + prismjs/components/prism-objectivec.js | 12 + prismjs/components/prism-objectivec.min.js | 1 + prismjs/components/prism-ocaml.js | 58 + prismjs/components/prism-ocaml.min.js | 1 + prismjs/components/prism-odin.js | 99 + prismjs/components/prism-odin.min.js | 1 + prismjs/components/prism-opencl.js | 61 + prismjs/components/prism-opencl.min.js | 1 + prismjs/components/prism-openqasm.js | 23 + prismjs/components/prism-openqasm.min.js | 1 + prismjs/components/prism-oz.js | 28 + prismjs/components/prism-oz.min.js | 1 + prismjs/components/prism-parigp.js | 30 + prismjs/components/prism-parigp.min.js | 1 + prismjs/components/prism-parser.js | 73 + prismjs/components/prism-parser.min.js | 1 + prismjs/components/prism-pascal.js | 71 + prismjs/components/prism-pascal.min.js | 1 + prismjs/components/prism-pascaligo.js | 62 + prismjs/components/prism-pascaligo.min.js | 1 + prismjs/components/prism-pcaxis.js | 53 + prismjs/components/prism-pcaxis.min.js | 1 + prismjs/components/prism-peoplecode.js | 42 + prismjs/components/prism-peoplecode.min.js | 1 + prismjs/components/prism-perl.js | 156 + prismjs/components/prism-perl.min.js | 1 + prismjs/components/prism-php-extras.js | 14 + prismjs/components/prism-php-extras.min.js | 1 + prismjs/components/prism-php.js | 342 ++ prismjs/components/prism-php.min.js | 1 + prismjs/components/prism-phpdoc.js | 27 + prismjs/components/prism-phpdoc.min.js | 1 + prismjs/components/prism-plant-uml.js | 103 + prismjs/components/prism-plant-uml.min.js | 1 + prismjs/components/prism-plsql.js | 17 + prismjs/components/prism-plsql.min.js | 1 + prismjs/components/prism-powerquery.js | 55 + prismjs/components/prism-powerquery.min.js | 1 + prismjs/components/prism-powershell.js | 58 + prismjs/components/prism-powershell.min.js | 1 + prismjs/components/prism-processing.js | 15 + prismjs/components/prism-processing.min.js | 1 + prismjs/components/prism-prolog.js | 19 + prismjs/components/prism-prolog.min.js | 1 + prismjs/components/prism-promql.js | 99 + prismjs/components/prism-promql.min.js | 1 + prismjs/components/prism-properties.js | 13 + prismjs/components/prism-properties.min.js | 1 + prismjs/components/prism-protobuf.js | 43 + prismjs/components/prism-protobuf.min.js | 1 + prismjs/components/prism-psl.js | 35 + prismjs/components/prism-psl.min.js | 1 + prismjs/components/prism-pug.js | 188 + prismjs/components/prism-pug.min.js | 1 + prismjs/components/prism-puppet.js | 136 + prismjs/components/prism-puppet.min.js | 1 + prismjs/components/prism-pure.js | 82 + prismjs/components/prism-pure.min.js | 1 + prismjs/components/prism-purebasic.js | 70 + prismjs/components/prism-purebasic.min.js | 1 + prismjs/components/prism-purescript.js | 31 + prismjs/components/prism-purescript.min.js | 1 + prismjs/components/prism-python.js | 65 + prismjs/components/prism-python.min.js | 1 + prismjs/components/prism-q.js | 51 + prismjs/components/prism-q.min.js | 1 + prismjs/components/prism-qml.js | 61 + prismjs/components/prism-qml.min.js | 1 + prismjs/components/prism-qore.js | 20 + prismjs/components/prism-qore.min.js | 1 + prismjs/components/prism-qsharp.js | 132 + prismjs/components/prism-qsharp.min.js | 1 + prismjs/components/prism-r.js | 22 + prismjs/components/prism-r.min.js | 1 + prismjs/components/prism-racket.js | 18 + prismjs/components/prism-racket.min.js | 1 + prismjs/components/prism-reason.js | 25 + prismjs/components/prism-reason.min.js | 1 + prismjs/components/prism-regex.js | 104 + prismjs/components/prism-regex.min.js | 1 + prismjs/components/prism-rego.js | 30 + prismjs/components/prism-rego.min.js | 1 + prismjs/components/prism-renpy.js | 29 + prismjs/components/prism-renpy.min.js | 1 + prismjs/components/prism-rescript.js | 60 + prismjs/components/prism-rescript.min.js | 1 + prismjs/components/prism-rest.js | 205 ++ prismjs/components/prism-rest.min.js | 1 + prismjs/components/prism-rip.js | 38 + prismjs/components/prism-rip.min.js | 1 + prismjs/components/prism-roboconf.js | 27 + prismjs/components/prism-roboconf.min.js | 1 + prismjs/components/prism-robotframework.js | 104 + .../components/prism-robotframework.min.js | 1 + prismjs/components/prism-ruby.js | 189 + prismjs/components/prism-ruby.min.js | 1 + prismjs/components/prism-rust.js | 128 + prismjs/components/prism-rust.min.js | 1 + prismjs/components/prism-sas.js | 326 ++ prismjs/components/prism-sas.min.js | 1 + prismjs/components/prism-sass.js | 77 + prismjs/components/prism-sass.min.js | 1 + prismjs/components/prism-scala.js | 50 + prismjs/components/prism-scala.min.js | 1 + prismjs/components/prism-scheme.js | 120 + prismjs/components/prism-scheme.min.js | 1 + prismjs/components/prism-scss.js | 81 + prismjs/components/prism-scss.min.js | 1 + prismjs/components/prism-shell-session.js | 70 + prismjs/components/prism-shell-session.min.js | 1 + prismjs/components/prism-smali.js | 87 + prismjs/components/prism-smali.min.js | 1 + prismjs/components/prism-smalltalk.js | 38 + prismjs/components/prism-smalltalk.min.js | 1 + prismjs/components/prism-smarty.js | 131 + prismjs/components/prism-smarty.min.js | 1 + prismjs/components/prism-sml.js | 68 + prismjs/components/prism-sml.min.js | 1 + prismjs/components/prism-solidity.js | 22 + prismjs/components/prism-solidity.min.js | 1 + prismjs/components/prism-solution-file.js | 51 + prismjs/components/prism-solution-file.min.js | 1 + prismjs/components/prism-soy.js | 96 + prismjs/components/prism-soy.min.js | 1 + prismjs/components/prism-sparql.js | 18 + prismjs/components/prism-sparql.min.js | 1 + prismjs/components/prism-splunk-spl.js | 24 + prismjs/components/prism-splunk-spl.min.js | 1 + prismjs/components/prism-sqf.js | 34 + prismjs/components/prism-sqf.min.js | 1 + prismjs/components/prism-sql.js | 32 + prismjs/components/prism-sql.min.js | 1 + prismjs/components/prism-squirrel.js | 47 + prismjs/components/prism-squirrel.min.js | 1 + prismjs/components/prism-stan.js | 65 + prismjs/components/prism-stan.min.js | 1 + prismjs/components/prism-stata.js | 76 + prismjs/components/prism-stata.min.js | 1 + prismjs/components/prism-stylus.js | 143 + prismjs/components/prism-stylus.min.js | 1 + prismjs/components/prism-supercollider.js | 36 + prismjs/components/prism-supercollider.min.js | 1 + prismjs/components/prism-swift.js | 148 + prismjs/components/prism-swift.min.js | 1 + prismjs/components/prism-systemd.js | 74 + prismjs/components/prism-systemd.min.js | 1 + prismjs/components/prism-t4-cs.js | 1 + prismjs/components/prism-t4-cs.min.js | 1 + prismjs/components/prism-t4-templating.js | 49 + prismjs/components/prism-t4-templating.min.js | 1 + prismjs/components/prism-t4-vb.js | 1 + prismjs/components/prism-t4-vb.min.js | 1 + prismjs/components/prism-tap.js | 22 + prismjs/components/prism-tap.min.js | 1 + prismjs/components/prism-tcl.js | 46 + prismjs/components/prism-tcl.min.js | 1 + prismjs/components/prism-textile.js | 286 ++ prismjs/components/prism-textile.min.js | 1 + prismjs/components/prism-toml.js | 49 + prismjs/components/prism-toml.min.js | 1 + prismjs/components/prism-tremor.js | 72 + prismjs/components/prism-tremor.min.js | 1 + prismjs/components/prism-tsx.js | 15 + prismjs/components/prism-tsx.min.js | 1 + prismjs/components/prism-tt2.js | 53 + prismjs/components/prism-tt2.min.js | 1 + prismjs/components/prism-turtle.js | 54 + prismjs/components/prism-turtle.min.js | 1 + prismjs/components/prism-twig.js | 44 + prismjs/components/prism-twig.min.js | 1 + prismjs/components/prism-typescript.js | 60 + prismjs/components/prism-typescript.min.js | 1 + prismjs/components/prism-typoscript.js | 80 + prismjs/components/prism-typoscript.min.js | 1 + prismjs/components/prism-unrealscript.js | 42 + prismjs/components/prism-unrealscript.min.js | 1 + prismjs/components/prism-uorazor.js | 48 + prismjs/components/prism-uorazor.min.js | 1 + prismjs/components/prism-uri.js | 96 + prismjs/components/prism-uri.min.js | 1 + prismjs/components/prism-v.js | 81 + prismjs/components/prism-v.min.js | 1 + prismjs/components/prism-vala.js | 84 + prismjs/components/prism-vala.min.js | 1 + prismjs/components/prism-vbnet.js | 22 + prismjs/components/prism-vbnet.min.js | 1 + prismjs/components/prism-velocity.js | 72 + prismjs/components/prism-velocity.min.js | 1 + prismjs/components/prism-verilog.js | 26 + prismjs/components/prism-verilog.min.js | 1 + prismjs/components/prism-vhdl.js | 26 + prismjs/components/prism-vhdl.min.js | 1 + prismjs/components/prism-vim.js | 10 + prismjs/components/prism-vim.min.js | 1 + prismjs/components/prism-visual-basic.js | 29 + prismjs/components/prism-visual-basic.min.js | 1 + prismjs/components/prism-warpscript.js | 21 + prismjs/components/prism-warpscript.min.js | 1 + prismjs/components/prism-wasm.js | 31 + prismjs/components/prism-wasm.min.js | 1 + prismjs/components/prism-web-idl.js | 101 + prismjs/components/prism-web-idl.min.js | 1 + prismjs/components/prism-wgsl.js | 69 + prismjs/components/prism-wgsl.min.js | 1 + prismjs/components/prism-wiki.js | 82 + prismjs/components/prism-wiki.min.js | 1 + prismjs/components/prism-wolfram.js | 29 + prismjs/components/prism-wolfram.min.js | 1 + prismjs/components/prism-wren.js | 100 + prismjs/components/prism-wren.min.js | 1 + prismjs/components/prism-xeora.js | 114 + prismjs/components/prism-xeora.min.js | 1 + prismjs/components/prism-xml-doc.js | 40 + prismjs/components/prism-xml-doc.min.js | 1 + prismjs/components/prism-xojo.js | 21 + prismjs/components/prism-xojo.min.js | 1 + prismjs/components/prism-xquery.js | 162 + prismjs/components/prism-xquery.min.js | 1 + prismjs/components/prism-yaml.js | 83 + prismjs/components/prism-yaml.min.js | 1 + prismjs/components/prism-yang.js | 20 + prismjs/components/prism-yang.min.js | 1 + prismjs/components/prism-zig.js | 101 + prismjs/components/prism-zig.min.js | 1 + prismjs/dependencies.js | 452 +++ prismjs/package.json | 87 + .../plugins/autolinker/prism-autolinker.css | 3 + .../plugins/autolinker/prism-autolinker.js | 76 + .../autolinker/prism-autolinker.min.css | 1 + .../autolinker/prism-autolinker.min.js | 1 + .../plugins/autoloader/prism-autoloader.js | 541 +++ .../autoloader/prism-autoloader.min.js | 1 + .../command-line/prism-command-line.css | 43 + .../command-line/prism-command-line.js | 239 ++ .../command-line/prism-command-line.min.css | 1 + .../command-line/prism-command-line.min.js | 1 + .../prism-copy-to-clipboard.js | 160 + .../prism-copy-to-clipboard.min.js | 1 + .../custom-class/prism-custom-class.js | 110 + .../custom-class/prism-custom-class.min.js | 1 + .../prism-data-uri-highlight.js | 94 + .../prism-data-uri-highlight.min.js | 1 + .../diff-highlight/prism-diff-highlight.css | 13 + .../diff-highlight/prism-diff-highlight.js | 90 + .../prism-diff-highlight.min.css | 1 + .../prism-diff-highlight.min.js | 1 + .../download-button/prism-download-button.js | 20 + .../prism-download-button.min.js | 1 + .../file-highlight/prism-file-highlight.js | 195 ++ .../prism-file-highlight.min.js | 1 + .../prism-filter-highlight-all.js | 127 + .../prism-filter-highlight-all.min.js | 1 + .../prism-highlight-keywords.js | 14 + .../prism-highlight-keywords.min.js | 1 + .../inline-color/prism-inline-color.css | 33 + .../inline-color/prism-inline-color.js | 105 + .../inline-color/prism-inline-color.min.css | 1 + .../inline-color/prism-inline-color.min.js | 1 + .../jsonp-highlight/prism-jsonp-highlight.js | 303 ++ .../prism-jsonp-highlight.min.js | 1 + .../plugins/keep-markup/prism-keep-markup.js | 126 + .../keep-markup/prism-keep-markup.min.js | 1 + .../line-highlight/prism-line-highlight.css | 70 + .../line-highlight/prism-line-highlight.js | 346 ++ .../prism-line-highlight.min.css | 1 + .../prism-line-highlight.min.js | 1 + .../line-numbers/prism-line-numbers.css | 40 + .../line-numbers/prism-line-numbers.js | 252 ++ .../line-numbers/prism-line-numbers.min.css | 1 + .../line-numbers/prism-line-numbers.min.js | 1 + .../match-braces/prism-match-braces.css | 29 + .../match-braces/prism-match-braces.js | 190 + .../match-braces/prism-match-braces.min.css | 1 + .../match-braces/prism-match-braces.min.js | 1 + .../prism-normalize-whitespace.js | 229 ++ .../prism-normalize-whitespace.min.js | 1 + .../plugins/previewers/prism-previewers.css | 243 ++ .../plugins/previewers/prism-previewers.js | 712 ++++ .../previewers/prism-previewers.min.css | 1 + .../previewers/prism-previewers.min.js | 1 + .../prism-remove-initial-line-feed.js | 21 + .../prism-remove-initial-line-feed.min.js | 1 + .../show-invisibles/prism-show-invisibles.css | 34 + .../show-invisibles/prism-show-invisibles.js | 83 + .../prism-show-invisibles.min.css | 1 + .../prism-show-invisibles.min.js | 1 + .../show-language/prism-show-language.js | 325 ++ .../show-language/prism-show-language.min.js | 1 + prismjs/plugins/toolbar/prism-toolbar.css | 65 + prismjs/plugins/toolbar/prism-toolbar.js | 179 + prismjs/plugins/toolbar/prism-toolbar.min.css | 1 + prismjs/plugins/toolbar/prism-toolbar.min.js | 1 + prismjs/plugins/treeview/prism-treeview.css | 168 + prismjs/plugins/treeview/prism-treeview.js | 70 + .../plugins/treeview/prism-treeview.min.css | 1 + .../plugins/treeview/prism-treeview.min.js | 1 + .../prism-unescaped-markup.css | 10 + .../prism-unescaped-markup.js | 62 + .../prism-unescaped-markup.min.css | 1 + .../prism-unescaped-markup.min.js | 1 + prismjs/plugins/wpd/prism-wpd.css | 11 + prismjs/plugins/wpd/prism-wpd.js | 154 + prismjs/plugins/wpd/prism-wpd.min.css | 1 + prismjs/plugins/wpd/prism-wpd.min.js | 1 + prismjs/prism.js | 1946 +++++++++++ prismjs/themes/prism-coy.css | 219 ++ prismjs/themes/prism-coy.min.css | 1 + prismjs/themes/prism-dark.css | 129 + prismjs/themes/prism-dark.min.css | 1 + prismjs/themes/prism-funky.css | 130 + prismjs/themes/prism-funky.min.css | 1 + prismjs/themes/prism-okaidia.css | 123 + prismjs/themes/prism-okaidia.min.css | 1 + prismjs/themes/prism-solarizedlight.css | 150 + prismjs/themes/prism-solarizedlight.min.css | 1 + prismjs/themes/prism-tomorrow.css | 122 + prismjs/themes/prism-tomorrow.min.css | 1 + prismjs/themes/prism-twilight.css | 169 + prismjs/themes/prism-twilight.min.css | 1 + prismjs/themes/prism.css | 140 + prismjs/themes/prism.min.css | 1 + supplemental_ui/js/vendor/prism.js | 1 + 704 files changed, 35782 insertions(+), 4 deletions(-) create mode 100644 prismjs/CHANGELOG.md create mode 100644 prismjs/LICENSE create mode 100644 prismjs/README.md create mode 100644 prismjs/components.js create mode 100644 prismjs/components.json create mode 100644 prismjs/components/index.js create mode 100644 prismjs/components/prism-abap.js create mode 100644 prismjs/components/prism-abap.min.js create mode 100644 prismjs/components/prism-abnf.js create mode 100644 prismjs/components/prism-abnf.min.js create mode 100644 prismjs/components/prism-actionscript.js create mode 100644 prismjs/components/prism-actionscript.min.js create mode 100644 prismjs/components/prism-ada.js create mode 100644 prismjs/components/prism-ada.min.js create mode 100644 prismjs/components/prism-agda.js create mode 100644 prismjs/components/prism-agda.min.js create mode 100644 prismjs/components/prism-al.js create mode 100644 prismjs/components/prism-al.min.js create mode 100644 prismjs/components/prism-antlr4.js create mode 100644 prismjs/components/prism-antlr4.min.js create mode 100644 prismjs/components/prism-apacheconf.js create mode 100644 prismjs/components/prism-apacheconf.min.js create mode 100644 prismjs/components/prism-apex.js create mode 100644 prismjs/components/prism-apex.min.js create mode 100644 prismjs/components/prism-apl.js create mode 100644 prismjs/components/prism-apl.min.js create mode 100644 prismjs/components/prism-applescript.js create mode 100644 prismjs/components/prism-applescript.min.js create mode 100644 prismjs/components/prism-aql.js create mode 100644 prismjs/components/prism-aql.min.js create mode 100644 prismjs/components/prism-arduino.js create mode 100644 prismjs/components/prism-arduino.min.js create mode 100644 prismjs/components/prism-arff.js create mode 100644 prismjs/components/prism-arff.min.js create mode 100644 prismjs/components/prism-armasm.js create mode 100644 prismjs/components/prism-armasm.min.js create mode 100644 prismjs/components/prism-arturo.js create mode 100644 prismjs/components/prism-arturo.min.js create mode 100644 prismjs/components/prism-asciidoc.js create mode 100644 prismjs/components/prism-asciidoc.min.js create mode 100644 prismjs/components/prism-asm6502.js create mode 100644 prismjs/components/prism-asm6502.min.js create mode 100644 prismjs/components/prism-asmatmel.js create mode 100644 prismjs/components/prism-asmatmel.min.js create mode 100644 prismjs/components/prism-aspnet.js create mode 100644 prismjs/components/prism-aspnet.min.js create mode 100644 prismjs/components/prism-autohotkey.js create mode 100644 prismjs/components/prism-autohotkey.min.js create mode 100644 prismjs/components/prism-autoit.js create mode 100644 prismjs/components/prism-autoit.min.js create mode 100644 prismjs/components/prism-avisynth.js create mode 100644 prismjs/components/prism-avisynth.min.js create mode 100644 prismjs/components/prism-avro-idl.js create mode 100644 prismjs/components/prism-avro-idl.min.js create mode 100644 prismjs/components/prism-awk.js create mode 100644 prismjs/components/prism-awk.min.js create mode 100644 prismjs/components/prism-bash.js create mode 100644 prismjs/components/prism-bash.min.js create mode 100644 prismjs/components/prism-basic.js create mode 100644 prismjs/components/prism-basic.min.js create mode 100644 prismjs/components/prism-batch.js create mode 100644 prismjs/components/prism-batch.min.js create mode 100644 prismjs/components/prism-bbcode.js create mode 100644 prismjs/components/prism-bbcode.min.js create mode 100644 prismjs/components/prism-bbj.js create mode 100644 prismjs/components/prism-bbj.min.js create mode 100644 prismjs/components/prism-bicep.js create mode 100644 prismjs/components/prism-bicep.min.js create mode 100644 prismjs/components/prism-birb.js create mode 100644 prismjs/components/prism-birb.min.js create mode 100644 prismjs/components/prism-bison.js create mode 100644 prismjs/components/prism-bison.min.js create mode 100644 prismjs/components/prism-bnf.js create mode 100644 prismjs/components/prism-bnf.min.js create mode 100644 prismjs/components/prism-bqn.js create mode 100644 prismjs/components/prism-bqn.min.js create mode 100644 prismjs/components/prism-brainfuck.js create mode 100644 prismjs/components/prism-brainfuck.min.js create mode 100644 prismjs/components/prism-brightscript.js create mode 100644 prismjs/components/prism-brightscript.min.js create mode 100644 prismjs/components/prism-bro.js create mode 100644 prismjs/components/prism-bro.min.js create mode 100644 prismjs/components/prism-bsl.js create mode 100644 prismjs/components/prism-bsl.min.js create mode 100644 prismjs/components/prism-c.js create mode 100644 prismjs/components/prism-c.min.js create mode 100644 prismjs/components/prism-cfscript.js create mode 100644 prismjs/components/prism-cfscript.min.js create mode 100644 prismjs/components/prism-chaiscript.js create mode 100644 prismjs/components/prism-chaiscript.min.js create mode 100644 prismjs/components/prism-cil.js create mode 100644 prismjs/components/prism-cil.min.js create mode 100644 prismjs/components/prism-cilkc.js create mode 100644 prismjs/components/prism-cilkc.min.js create mode 100644 prismjs/components/prism-cilkcpp.js create mode 100644 prismjs/components/prism-cilkcpp.min.js create mode 100644 prismjs/components/prism-clike.js create mode 100644 prismjs/components/prism-clike.min.js create mode 100644 prismjs/components/prism-clojure.js create mode 100644 prismjs/components/prism-clojure.min.js create mode 100644 prismjs/components/prism-cmake.js create mode 100644 prismjs/components/prism-cmake.min.js create mode 100644 prismjs/components/prism-cobol.js create mode 100644 prismjs/components/prism-cobol.min.js create mode 100644 prismjs/components/prism-coffeescript.js create mode 100644 prismjs/components/prism-coffeescript.min.js create mode 100644 prismjs/components/prism-concurnas.js create mode 100644 prismjs/components/prism-concurnas.min.js create mode 100644 prismjs/components/prism-cooklang.js create mode 100644 prismjs/components/prism-cooklang.min.js create mode 100644 prismjs/components/prism-coq.js create mode 100644 prismjs/components/prism-coq.min.js create mode 100644 prismjs/components/prism-core.js create mode 100644 prismjs/components/prism-core.min.js create mode 100644 prismjs/components/prism-cpp.js create mode 100644 prismjs/components/prism-cpp.min.js create mode 100644 prismjs/components/prism-crystal.js create mode 100644 prismjs/components/prism-crystal.min.js create mode 100644 prismjs/components/prism-csharp.js create mode 100644 prismjs/components/prism-csharp.min.js create mode 100644 prismjs/components/prism-cshtml.js create mode 100644 prismjs/components/prism-cshtml.min.js create mode 100644 prismjs/components/prism-csp.js create mode 100644 prismjs/components/prism-csp.min.js create mode 100644 prismjs/components/prism-css-extras.js create mode 100644 prismjs/components/prism-css-extras.min.js create mode 100644 prismjs/components/prism-css.js create mode 100644 prismjs/components/prism-css.min.js create mode 100644 prismjs/components/prism-csv.js create mode 100644 prismjs/components/prism-csv.min.js create mode 100644 prismjs/components/prism-cue.js create mode 100644 prismjs/components/prism-cue.min.js create mode 100644 prismjs/components/prism-cypher.js create mode 100644 prismjs/components/prism-cypher.min.js create mode 100644 prismjs/components/prism-d.js create mode 100644 prismjs/components/prism-d.min.js create mode 100644 prismjs/components/prism-dart.js create mode 100644 prismjs/components/prism-dart.min.js create mode 100644 prismjs/components/prism-dataweave.js create mode 100644 prismjs/components/prism-dataweave.min.js create mode 100644 prismjs/components/prism-dax.js create mode 100644 prismjs/components/prism-dax.min.js create mode 100644 prismjs/components/prism-dhall.js create mode 100644 prismjs/components/prism-dhall.min.js create mode 100644 prismjs/components/prism-diff.js create mode 100644 prismjs/components/prism-diff.min.js create mode 100644 prismjs/components/prism-django.js create mode 100644 prismjs/components/prism-django.min.js create mode 100644 prismjs/components/prism-dns-zone-file.js create mode 100644 prismjs/components/prism-dns-zone-file.min.js create mode 100644 prismjs/components/prism-docker.js create mode 100644 prismjs/components/prism-docker.min.js create mode 100644 prismjs/components/prism-dot.js create mode 100644 prismjs/components/prism-dot.min.js create mode 100644 prismjs/components/prism-ebnf.js create mode 100644 prismjs/components/prism-ebnf.min.js create mode 100644 prismjs/components/prism-editorconfig.js create mode 100644 prismjs/components/prism-editorconfig.min.js create mode 100644 prismjs/components/prism-eiffel.js create mode 100644 prismjs/components/prism-eiffel.min.js create mode 100644 prismjs/components/prism-ejs.js create mode 100644 prismjs/components/prism-ejs.min.js create mode 100644 prismjs/components/prism-elixir.js create mode 100644 prismjs/components/prism-elixir.min.js create mode 100644 prismjs/components/prism-elm.js create mode 100644 prismjs/components/prism-elm.min.js create mode 100644 prismjs/components/prism-erb.js create mode 100644 prismjs/components/prism-erb.min.js create mode 100644 prismjs/components/prism-erlang.js create mode 100644 prismjs/components/prism-erlang.min.js create mode 100644 prismjs/components/prism-etlua.js create mode 100644 prismjs/components/prism-etlua.min.js create mode 100644 prismjs/components/prism-excel-formula.js create mode 100644 prismjs/components/prism-excel-formula.min.js create mode 100644 prismjs/components/prism-factor.js create mode 100644 prismjs/components/prism-factor.min.js create mode 100644 prismjs/components/prism-false.js create mode 100644 prismjs/components/prism-false.min.js create mode 100644 prismjs/components/prism-firestore-security-rules.js create mode 100644 prismjs/components/prism-firestore-security-rules.min.js create mode 100644 prismjs/components/prism-flow.js create mode 100644 prismjs/components/prism-flow.min.js create mode 100644 prismjs/components/prism-fortran.js create mode 100644 prismjs/components/prism-fortran.min.js create mode 100644 prismjs/components/prism-fsharp.js create mode 100644 prismjs/components/prism-fsharp.min.js create mode 100644 prismjs/components/prism-ftl.js create mode 100644 prismjs/components/prism-ftl.min.js create mode 100644 prismjs/components/prism-gap.js create mode 100644 prismjs/components/prism-gap.min.js create mode 100644 prismjs/components/prism-gcode.js create mode 100644 prismjs/components/prism-gcode.min.js create mode 100644 prismjs/components/prism-gdscript.js create mode 100644 prismjs/components/prism-gdscript.min.js create mode 100644 prismjs/components/prism-gedcom.js create mode 100644 prismjs/components/prism-gedcom.min.js create mode 100644 prismjs/components/prism-gettext.js create mode 100644 prismjs/components/prism-gettext.min.js create mode 100644 prismjs/components/prism-gherkin.js create mode 100644 prismjs/components/prism-gherkin.min.js create mode 100644 prismjs/components/prism-git.js create mode 100644 prismjs/components/prism-git.min.js create mode 100644 prismjs/components/prism-glsl.js create mode 100644 prismjs/components/prism-glsl.min.js create mode 100644 prismjs/components/prism-gml.js create mode 100644 prismjs/components/prism-gml.min.js create mode 100644 prismjs/components/prism-gn.js create mode 100644 prismjs/components/prism-gn.min.js create mode 100644 prismjs/components/prism-go-module.js create mode 100644 prismjs/components/prism-go-module.min.js create mode 100644 prismjs/components/prism-go.js create mode 100644 prismjs/components/prism-go.min.js create mode 100644 prismjs/components/prism-gradle.js create mode 100644 prismjs/components/prism-gradle.min.js create mode 100644 prismjs/components/prism-graphql.js create mode 100644 prismjs/components/prism-graphql.min.js create mode 100644 prismjs/components/prism-groovy.js create mode 100644 prismjs/components/prism-groovy.min.js create mode 100644 prismjs/components/prism-haml.js create mode 100644 prismjs/components/prism-haml.min.js create mode 100644 prismjs/components/prism-handlebars.js create mode 100644 prismjs/components/prism-handlebars.min.js create mode 100644 prismjs/components/prism-haskell.js create mode 100644 prismjs/components/prism-haskell.min.js create mode 100644 prismjs/components/prism-haxe.js create mode 100644 prismjs/components/prism-haxe.min.js create mode 100644 prismjs/components/prism-hcl.js create mode 100644 prismjs/components/prism-hcl.min.js create mode 100644 prismjs/components/prism-hlsl.js create mode 100644 prismjs/components/prism-hlsl.min.js create mode 100644 prismjs/components/prism-hoon.js create mode 100644 prismjs/components/prism-hoon.min.js create mode 100644 prismjs/components/prism-hpkp.js create mode 100644 prismjs/components/prism-hpkp.min.js create mode 100644 prismjs/components/prism-hsts.js create mode 100644 prismjs/components/prism-hsts.min.js create mode 100644 prismjs/components/prism-http.js create mode 100644 prismjs/components/prism-http.min.js create mode 100644 prismjs/components/prism-ichigojam.js create mode 100644 prismjs/components/prism-ichigojam.min.js create mode 100644 prismjs/components/prism-icon.js create mode 100644 prismjs/components/prism-icon.min.js create mode 100644 prismjs/components/prism-icu-message-format.js create mode 100644 prismjs/components/prism-icu-message-format.min.js create mode 100644 prismjs/components/prism-idris.js create mode 100644 prismjs/components/prism-idris.min.js create mode 100644 prismjs/components/prism-iecst.js create mode 100644 prismjs/components/prism-iecst.min.js create mode 100644 prismjs/components/prism-ignore.js create mode 100644 prismjs/components/prism-ignore.min.js create mode 100644 prismjs/components/prism-inform7.js create mode 100644 prismjs/components/prism-inform7.min.js create mode 100644 prismjs/components/prism-ini.js create mode 100644 prismjs/components/prism-ini.min.js create mode 100644 prismjs/components/prism-io.js create mode 100644 prismjs/components/prism-io.min.js create mode 100644 prismjs/components/prism-j.js create mode 100644 prismjs/components/prism-j.min.js create mode 100644 prismjs/components/prism-java.js create mode 100644 prismjs/components/prism-java.min.js create mode 100644 prismjs/components/prism-javadoc.js create mode 100644 prismjs/components/prism-javadoc.min.js create mode 100644 prismjs/components/prism-javadoclike.js create mode 100644 prismjs/components/prism-javadoclike.min.js create mode 100644 prismjs/components/prism-javascript.js create mode 100644 prismjs/components/prism-javascript.min.js create mode 100644 prismjs/components/prism-javastacktrace.js create mode 100644 prismjs/components/prism-javastacktrace.min.js create mode 100644 prismjs/components/prism-jexl.js create mode 100644 prismjs/components/prism-jexl.min.js create mode 100644 prismjs/components/prism-jolie.js create mode 100644 prismjs/components/prism-jolie.min.js create mode 100644 prismjs/components/prism-jq.js create mode 100644 prismjs/components/prism-jq.min.js create mode 100644 prismjs/components/prism-js-extras.js create mode 100644 prismjs/components/prism-js-extras.min.js create mode 100644 prismjs/components/prism-js-templates.js create mode 100644 prismjs/components/prism-js-templates.min.js create mode 100644 prismjs/components/prism-jsdoc.js create mode 100644 prismjs/components/prism-jsdoc.min.js create mode 100644 prismjs/components/prism-json.js create mode 100644 prismjs/components/prism-json.min.js create mode 100644 prismjs/components/prism-json5.js create mode 100644 prismjs/components/prism-json5.min.js create mode 100644 prismjs/components/prism-jsonp.js create mode 100644 prismjs/components/prism-jsonp.min.js create mode 100644 prismjs/components/prism-jsstacktrace.js create mode 100644 prismjs/components/prism-jsstacktrace.min.js create mode 100644 prismjs/components/prism-jsx.js create mode 100644 prismjs/components/prism-jsx.min.js create mode 100644 prismjs/components/prism-julia.js create mode 100644 prismjs/components/prism-julia.min.js create mode 100644 prismjs/components/prism-keepalived.js create mode 100644 prismjs/components/prism-keepalived.min.js create mode 100644 prismjs/components/prism-keyman.js create mode 100644 prismjs/components/prism-keyman.min.js create mode 100644 prismjs/components/prism-kotlin.js create mode 100644 prismjs/components/prism-kotlin.min.js create mode 100644 prismjs/components/prism-kumir.js create mode 100644 prismjs/components/prism-kumir.min.js create mode 100644 prismjs/components/prism-kusto.js create mode 100644 prismjs/components/prism-kusto.min.js create mode 100644 prismjs/components/prism-latex.js create mode 100644 prismjs/components/prism-latex.min.js create mode 100644 prismjs/components/prism-latte.js create mode 100644 prismjs/components/prism-latte.min.js create mode 100644 prismjs/components/prism-less.js create mode 100644 prismjs/components/prism-less.min.js create mode 100644 prismjs/components/prism-lilypond.js create mode 100644 prismjs/components/prism-lilypond.min.js create mode 100644 prismjs/components/prism-linker-script.js create mode 100644 prismjs/components/prism-linker-script.min.js create mode 100644 prismjs/components/prism-liquid.js create mode 100644 prismjs/components/prism-liquid.min.js create mode 100644 prismjs/components/prism-lisp.js create mode 100644 prismjs/components/prism-lisp.min.js create mode 100644 prismjs/components/prism-livescript.js create mode 100644 prismjs/components/prism-livescript.min.js create mode 100644 prismjs/components/prism-llvm.js create mode 100644 prismjs/components/prism-llvm.min.js create mode 100644 prismjs/components/prism-log.js create mode 100644 prismjs/components/prism-log.min.js create mode 100644 prismjs/components/prism-lolcode.js create mode 100644 prismjs/components/prism-lolcode.min.js create mode 100644 prismjs/components/prism-lua.js create mode 100644 prismjs/components/prism-lua.min.js create mode 100644 prismjs/components/prism-magma.js create mode 100644 prismjs/components/prism-magma.min.js create mode 100644 prismjs/components/prism-makefile.js create mode 100644 prismjs/components/prism-makefile.min.js create mode 100644 prismjs/components/prism-markdown.js create mode 100644 prismjs/components/prism-markdown.min.js create mode 100644 prismjs/components/prism-markup-templating.js create mode 100644 prismjs/components/prism-markup-templating.min.js create mode 100644 prismjs/components/prism-markup.js create mode 100644 prismjs/components/prism-markup.min.js create mode 100644 prismjs/components/prism-mata.js create mode 100644 prismjs/components/prism-mata.min.js create mode 100644 prismjs/components/prism-matlab.js create mode 100644 prismjs/components/prism-matlab.min.js create mode 100644 prismjs/components/prism-maxscript.js create mode 100644 prismjs/components/prism-maxscript.min.js create mode 100644 prismjs/components/prism-mel.js create mode 100644 prismjs/components/prism-mel.min.js create mode 100644 prismjs/components/prism-mermaid.js create mode 100644 prismjs/components/prism-mermaid.min.js create mode 100644 prismjs/components/prism-metafont.js create mode 100644 prismjs/components/prism-metafont.min.js create mode 100644 prismjs/components/prism-mizar.js create mode 100644 prismjs/components/prism-mizar.min.js create mode 100644 prismjs/components/prism-mongodb.js create mode 100644 prismjs/components/prism-mongodb.min.js create mode 100644 prismjs/components/prism-monkey.js create mode 100644 prismjs/components/prism-monkey.min.js create mode 100644 prismjs/components/prism-moonscript.js create mode 100644 prismjs/components/prism-moonscript.min.js create mode 100644 prismjs/components/prism-n1ql.js create mode 100644 prismjs/components/prism-n1ql.min.js create mode 100644 prismjs/components/prism-n4js.js create mode 100644 prismjs/components/prism-n4js.min.js create mode 100644 prismjs/components/prism-nand2tetris-hdl.js create mode 100644 prismjs/components/prism-nand2tetris-hdl.min.js create mode 100644 prismjs/components/prism-naniscript.js create mode 100644 prismjs/components/prism-naniscript.min.js create mode 100644 prismjs/components/prism-nasm.js create mode 100644 prismjs/components/prism-nasm.min.js create mode 100644 prismjs/components/prism-neon.js create mode 100644 prismjs/components/prism-neon.min.js create mode 100644 prismjs/components/prism-nevod.js create mode 100644 prismjs/components/prism-nevod.min.js create mode 100644 prismjs/components/prism-nginx.js create mode 100644 prismjs/components/prism-nginx.min.js create mode 100644 prismjs/components/prism-nim.js create mode 100644 prismjs/components/prism-nim.min.js create mode 100644 prismjs/components/prism-nix.js create mode 100644 prismjs/components/prism-nix.min.js create mode 100644 prismjs/components/prism-nsis.js create mode 100644 prismjs/components/prism-nsis.min.js create mode 100644 prismjs/components/prism-objectivec.js create mode 100644 prismjs/components/prism-objectivec.min.js create mode 100644 prismjs/components/prism-ocaml.js create mode 100644 prismjs/components/prism-ocaml.min.js create mode 100644 prismjs/components/prism-odin.js create mode 100644 prismjs/components/prism-odin.min.js create mode 100644 prismjs/components/prism-opencl.js create mode 100644 prismjs/components/prism-opencl.min.js create mode 100644 prismjs/components/prism-openqasm.js create mode 100644 prismjs/components/prism-openqasm.min.js create mode 100644 prismjs/components/prism-oz.js create mode 100644 prismjs/components/prism-oz.min.js create mode 100644 prismjs/components/prism-parigp.js create mode 100644 prismjs/components/prism-parigp.min.js create mode 100644 prismjs/components/prism-parser.js create mode 100644 prismjs/components/prism-parser.min.js create mode 100644 prismjs/components/prism-pascal.js create mode 100644 prismjs/components/prism-pascal.min.js create mode 100644 prismjs/components/prism-pascaligo.js create mode 100644 prismjs/components/prism-pascaligo.min.js create mode 100644 prismjs/components/prism-pcaxis.js create mode 100644 prismjs/components/prism-pcaxis.min.js create mode 100644 prismjs/components/prism-peoplecode.js create mode 100644 prismjs/components/prism-peoplecode.min.js create mode 100644 prismjs/components/prism-perl.js create mode 100644 prismjs/components/prism-perl.min.js create mode 100644 prismjs/components/prism-php-extras.js create mode 100644 prismjs/components/prism-php-extras.min.js create mode 100644 prismjs/components/prism-php.js create mode 100644 prismjs/components/prism-php.min.js create mode 100644 prismjs/components/prism-phpdoc.js create mode 100644 prismjs/components/prism-phpdoc.min.js create mode 100644 prismjs/components/prism-plant-uml.js create mode 100644 prismjs/components/prism-plant-uml.min.js create mode 100644 prismjs/components/prism-plsql.js create mode 100644 prismjs/components/prism-plsql.min.js create mode 100644 prismjs/components/prism-powerquery.js create mode 100644 prismjs/components/prism-powerquery.min.js create mode 100644 prismjs/components/prism-powershell.js create mode 100644 prismjs/components/prism-powershell.min.js create mode 100644 prismjs/components/prism-processing.js create mode 100644 prismjs/components/prism-processing.min.js create mode 100644 prismjs/components/prism-prolog.js create mode 100644 prismjs/components/prism-prolog.min.js create mode 100644 prismjs/components/prism-promql.js create mode 100644 prismjs/components/prism-promql.min.js create mode 100644 prismjs/components/prism-properties.js create mode 100644 prismjs/components/prism-properties.min.js create mode 100644 prismjs/components/prism-protobuf.js create mode 100644 prismjs/components/prism-protobuf.min.js create mode 100644 prismjs/components/prism-psl.js create mode 100644 prismjs/components/prism-psl.min.js create mode 100644 prismjs/components/prism-pug.js create mode 100644 prismjs/components/prism-pug.min.js create mode 100644 prismjs/components/prism-puppet.js create mode 100644 prismjs/components/prism-puppet.min.js create mode 100644 prismjs/components/prism-pure.js create mode 100644 prismjs/components/prism-pure.min.js create mode 100644 prismjs/components/prism-purebasic.js create mode 100644 prismjs/components/prism-purebasic.min.js create mode 100644 prismjs/components/prism-purescript.js create mode 100644 prismjs/components/prism-purescript.min.js create mode 100644 prismjs/components/prism-python.js create mode 100644 prismjs/components/prism-python.min.js create mode 100644 prismjs/components/prism-q.js create mode 100644 prismjs/components/prism-q.min.js create mode 100644 prismjs/components/prism-qml.js create mode 100644 prismjs/components/prism-qml.min.js create mode 100644 prismjs/components/prism-qore.js create mode 100644 prismjs/components/prism-qore.min.js create mode 100644 prismjs/components/prism-qsharp.js create mode 100644 prismjs/components/prism-qsharp.min.js create mode 100644 prismjs/components/prism-r.js create mode 100644 prismjs/components/prism-r.min.js create mode 100644 prismjs/components/prism-racket.js create mode 100644 prismjs/components/prism-racket.min.js create mode 100644 prismjs/components/prism-reason.js create mode 100644 prismjs/components/prism-reason.min.js create mode 100644 prismjs/components/prism-regex.js create mode 100644 prismjs/components/prism-regex.min.js create mode 100644 prismjs/components/prism-rego.js create mode 100644 prismjs/components/prism-rego.min.js create mode 100644 prismjs/components/prism-renpy.js create mode 100644 prismjs/components/prism-renpy.min.js create mode 100644 prismjs/components/prism-rescript.js create mode 100644 prismjs/components/prism-rescript.min.js create mode 100644 prismjs/components/prism-rest.js create mode 100644 prismjs/components/prism-rest.min.js create mode 100644 prismjs/components/prism-rip.js create mode 100644 prismjs/components/prism-rip.min.js create mode 100644 prismjs/components/prism-roboconf.js create mode 100644 prismjs/components/prism-roboconf.min.js create mode 100644 prismjs/components/prism-robotframework.js create mode 100644 prismjs/components/prism-robotframework.min.js create mode 100644 prismjs/components/prism-ruby.js create mode 100644 prismjs/components/prism-ruby.min.js create mode 100644 prismjs/components/prism-rust.js create mode 100644 prismjs/components/prism-rust.min.js create mode 100644 prismjs/components/prism-sas.js create mode 100644 prismjs/components/prism-sas.min.js create mode 100644 prismjs/components/prism-sass.js create mode 100644 prismjs/components/prism-sass.min.js create mode 100644 prismjs/components/prism-scala.js create mode 100644 prismjs/components/prism-scala.min.js create mode 100644 prismjs/components/prism-scheme.js create mode 100644 prismjs/components/prism-scheme.min.js create mode 100644 prismjs/components/prism-scss.js create mode 100644 prismjs/components/prism-scss.min.js create mode 100644 prismjs/components/prism-shell-session.js create mode 100644 prismjs/components/prism-shell-session.min.js create mode 100644 prismjs/components/prism-smali.js create mode 100644 prismjs/components/prism-smali.min.js create mode 100644 prismjs/components/prism-smalltalk.js create mode 100644 prismjs/components/prism-smalltalk.min.js create mode 100644 prismjs/components/prism-smarty.js create mode 100644 prismjs/components/prism-smarty.min.js create mode 100644 prismjs/components/prism-sml.js create mode 100644 prismjs/components/prism-sml.min.js create mode 100644 prismjs/components/prism-solidity.js create mode 100644 prismjs/components/prism-solidity.min.js create mode 100644 prismjs/components/prism-solution-file.js create mode 100644 prismjs/components/prism-solution-file.min.js create mode 100644 prismjs/components/prism-soy.js create mode 100644 prismjs/components/prism-soy.min.js create mode 100644 prismjs/components/prism-sparql.js create mode 100644 prismjs/components/prism-sparql.min.js create mode 100644 prismjs/components/prism-splunk-spl.js create mode 100644 prismjs/components/prism-splunk-spl.min.js create mode 100644 prismjs/components/prism-sqf.js create mode 100644 prismjs/components/prism-sqf.min.js create mode 100644 prismjs/components/prism-sql.js create mode 100644 prismjs/components/prism-sql.min.js create mode 100644 prismjs/components/prism-squirrel.js create mode 100644 prismjs/components/prism-squirrel.min.js create mode 100644 prismjs/components/prism-stan.js create mode 100644 prismjs/components/prism-stan.min.js create mode 100644 prismjs/components/prism-stata.js create mode 100644 prismjs/components/prism-stata.min.js create mode 100644 prismjs/components/prism-stylus.js create mode 100644 prismjs/components/prism-stylus.min.js create mode 100644 prismjs/components/prism-supercollider.js create mode 100644 prismjs/components/prism-supercollider.min.js create mode 100644 prismjs/components/prism-swift.js create mode 100644 prismjs/components/prism-swift.min.js create mode 100644 prismjs/components/prism-systemd.js create mode 100644 prismjs/components/prism-systemd.min.js create mode 100644 prismjs/components/prism-t4-cs.js create mode 100644 prismjs/components/prism-t4-cs.min.js create mode 100644 prismjs/components/prism-t4-templating.js create mode 100644 prismjs/components/prism-t4-templating.min.js create mode 100644 prismjs/components/prism-t4-vb.js create mode 100644 prismjs/components/prism-t4-vb.min.js create mode 100644 prismjs/components/prism-tap.js create mode 100644 prismjs/components/prism-tap.min.js create mode 100644 prismjs/components/prism-tcl.js create mode 100644 prismjs/components/prism-tcl.min.js create mode 100644 prismjs/components/prism-textile.js create mode 100644 prismjs/components/prism-textile.min.js create mode 100644 prismjs/components/prism-toml.js create mode 100644 prismjs/components/prism-toml.min.js create mode 100644 prismjs/components/prism-tremor.js create mode 100644 prismjs/components/prism-tremor.min.js create mode 100644 prismjs/components/prism-tsx.js create mode 100644 prismjs/components/prism-tsx.min.js create mode 100644 prismjs/components/prism-tt2.js create mode 100644 prismjs/components/prism-tt2.min.js create mode 100644 prismjs/components/prism-turtle.js create mode 100644 prismjs/components/prism-turtle.min.js create mode 100644 prismjs/components/prism-twig.js create mode 100644 prismjs/components/prism-twig.min.js create mode 100644 prismjs/components/prism-typescript.js create mode 100644 prismjs/components/prism-typescript.min.js create mode 100644 prismjs/components/prism-typoscript.js create mode 100644 prismjs/components/prism-typoscript.min.js create mode 100644 prismjs/components/prism-unrealscript.js create mode 100644 prismjs/components/prism-unrealscript.min.js create mode 100644 prismjs/components/prism-uorazor.js create mode 100644 prismjs/components/prism-uorazor.min.js create mode 100644 prismjs/components/prism-uri.js create mode 100644 prismjs/components/prism-uri.min.js create mode 100644 prismjs/components/prism-v.js create mode 100644 prismjs/components/prism-v.min.js create mode 100644 prismjs/components/prism-vala.js create mode 100644 prismjs/components/prism-vala.min.js create mode 100644 prismjs/components/prism-vbnet.js create mode 100644 prismjs/components/prism-vbnet.min.js create mode 100644 prismjs/components/prism-velocity.js create mode 100644 prismjs/components/prism-velocity.min.js create mode 100644 prismjs/components/prism-verilog.js create mode 100644 prismjs/components/prism-verilog.min.js create mode 100644 prismjs/components/prism-vhdl.js create mode 100644 prismjs/components/prism-vhdl.min.js create mode 100644 prismjs/components/prism-vim.js create mode 100644 prismjs/components/prism-vim.min.js create mode 100644 prismjs/components/prism-visual-basic.js create mode 100644 prismjs/components/prism-visual-basic.min.js create mode 100644 prismjs/components/prism-warpscript.js create mode 100644 prismjs/components/prism-warpscript.min.js create mode 100644 prismjs/components/prism-wasm.js create mode 100644 prismjs/components/prism-wasm.min.js create mode 100644 prismjs/components/prism-web-idl.js create mode 100644 prismjs/components/prism-web-idl.min.js create mode 100644 prismjs/components/prism-wgsl.js create mode 100644 prismjs/components/prism-wgsl.min.js create mode 100644 prismjs/components/prism-wiki.js create mode 100644 prismjs/components/prism-wiki.min.js create mode 100644 prismjs/components/prism-wolfram.js create mode 100644 prismjs/components/prism-wolfram.min.js create mode 100644 prismjs/components/prism-wren.js create mode 100644 prismjs/components/prism-wren.min.js create mode 100644 prismjs/components/prism-xeora.js create mode 100644 prismjs/components/prism-xeora.min.js create mode 100644 prismjs/components/prism-xml-doc.js create mode 100644 prismjs/components/prism-xml-doc.min.js create mode 100644 prismjs/components/prism-xojo.js create mode 100644 prismjs/components/prism-xojo.min.js create mode 100644 prismjs/components/prism-xquery.js create mode 100644 prismjs/components/prism-xquery.min.js create mode 100644 prismjs/components/prism-yaml.js create mode 100644 prismjs/components/prism-yaml.min.js create mode 100644 prismjs/components/prism-yang.js create mode 100644 prismjs/components/prism-yang.min.js create mode 100644 prismjs/components/prism-zig.js create mode 100644 prismjs/components/prism-zig.min.js create mode 100644 prismjs/dependencies.js create mode 100644 prismjs/package.json create mode 100644 prismjs/plugins/autolinker/prism-autolinker.css create mode 100644 prismjs/plugins/autolinker/prism-autolinker.js create mode 100644 prismjs/plugins/autolinker/prism-autolinker.min.css create mode 100644 prismjs/plugins/autolinker/prism-autolinker.min.js create mode 100644 prismjs/plugins/autoloader/prism-autoloader.js create mode 100644 prismjs/plugins/autoloader/prism-autoloader.min.js create mode 100644 prismjs/plugins/command-line/prism-command-line.css create mode 100644 prismjs/plugins/command-line/prism-command-line.js create mode 100644 prismjs/plugins/command-line/prism-command-line.min.css create mode 100644 prismjs/plugins/command-line/prism-command-line.min.js create mode 100644 prismjs/plugins/copy-to-clipboard/prism-copy-to-clipboard.js create mode 100644 prismjs/plugins/copy-to-clipboard/prism-copy-to-clipboard.min.js create mode 100644 prismjs/plugins/custom-class/prism-custom-class.js create mode 100644 prismjs/plugins/custom-class/prism-custom-class.min.js create mode 100644 prismjs/plugins/data-uri-highlight/prism-data-uri-highlight.js create mode 100644 prismjs/plugins/data-uri-highlight/prism-data-uri-highlight.min.js create mode 100644 prismjs/plugins/diff-highlight/prism-diff-highlight.css create mode 100644 prismjs/plugins/diff-highlight/prism-diff-highlight.js create mode 100644 prismjs/plugins/diff-highlight/prism-diff-highlight.min.css create mode 100644 prismjs/plugins/diff-highlight/prism-diff-highlight.min.js create mode 100644 prismjs/plugins/download-button/prism-download-button.js create mode 100644 prismjs/plugins/download-button/prism-download-button.min.js create mode 100644 prismjs/plugins/file-highlight/prism-file-highlight.js create mode 100644 prismjs/plugins/file-highlight/prism-file-highlight.min.js create mode 100644 prismjs/plugins/filter-highlight-all/prism-filter-highlight-all.js create mode 100644 prismjs/plugins/filter-highlight-all/prism-filter-highlight-all.min.js create mode 100644 prismjs/plugins/highlight-keywords/prism-highlight-keywords.js create mode 100644 prismjs/plugins/highlight-keywords/prism-highlight-keywords.min.js create mode 100644 prismjs/plugins/inline-color/prism-inline-color.css create mode 100644 prismjs/plugins/inline-color/prism-inline-color.js create mode 100644 prismjs/plugins/inline-color/prism-inline-color.min.css create mode 100644 prismjs/plugins/inline-color/prism-inline-color.min.js create mode 100644 prismjs/plugins/jsonp-highlight/prism-jsonp-highlight.js create mode 100644 prismjs/plugins/jsonp-highlight/prism-jsonp-highlight.min.js create mode 100644 prismjs/plugins/keep-markup/prism-keep-markup.js create mode 100644 prismjs/plugins/keep-markup/prism-keep-markup.min.js create mode 100644 prismjs/plugins/line-highlight/prism-line-highlight.css create mode 100644 prismjs/plugins/line-highlight/prism-line-highlight.js create mode 100644 prismjs/plugins/line-highlight/prism-line-highlight.min.css create mode 100644 prismjs/plugins/line-highlight/prism-line-highlight.min.js create mode 100644 prismjs/plugins/line-numbers/prism-line-numbers.css create mode 100644 prismjs/plugins/line-numbers/prism-line-numbers.js create mode 100644 prismjs/plugins/line-numbers/prism-line-numbers.min.css create mode 100644 prismjs/plugins/line-numbers/prism-line-numbers.min.js create mode 100644 prismjs/plugins/match-braces/prism-match-braces.css create mode 100644 prismjs/plugins/match-braces/prism-match-braces.js create mode 100644 prismjs/plugins/match-braces/prism-match-braces.min.css create mode 100644 prismjs/plugins/match-braces/prism-match-braces.min.js create mode 100644 prismjs/plugins/normalize-whitespace/prism-normalize-whitespace.js create mode 100644 prismjs/plugins/normalize-whitespace/prism-normalize-whitespace.min.js create mode 100644 prismjs/plugins/previewers/prism-previewers.css create mode 100644 prismjs/plugins/previewers/prism-previewers.js create mode 100644 prismjs/plugins/previewers/prism-previewers.min.css create mode 100644 prismjs/plugins/previewers/prism-previewers.min.js create mode 100644 prismjs/plugins/remove-initial-line-feed/prism-remove-initial-line-feed.js create mode 100644 prismjs/plugins/remove-initial-line-feed/prism-remove-initial-line-feed.min.js create mode 100644 prismjs/plugins/show-invisibles/prism-show-invisibles.css create mode 100644 prismjs/plugins/show-invisibles/prism-show-invisibles.js create mode 100644 prismjs/plugins/show-invisibles/prism-show-invisibles.min.css create mode 100644 prismjs/plugins/show-invisibles/prism-show-invisibles.min.js create mode 100644 prismjs/plugins/show-language/prism-show-language.js create mode 100644 prismjs/plugins/show-language/prism-show-language.min.js create mode 100644 prismjs/plugins/toolbar/prism-toolbar.css create mode 100644 prismjs/plugins/toolbar/prism-toolbar.js create mode 100644 prismjs/plugins/toolbar/prism-toolbar.min.css create mode 100644 prismjs/plugins/toolbar/prism-toolbar.min.js create mode 100644 prismjs/plugins/treeview/prism-treeview.css create mode 100644 prismjs/plugins/treeview/prism-treeview.js create mode 100644 prismjs/plugins/treeview/prism-treeview.min.css create mode 100644 prismjs/plugins/treeview/prism-treeview.min.js create mode 100644 prismjs/plugins/unescaped-markup/prism-unescaped-markup.css create mode 100644 prismjs/plugins/unescaped-markup/prism-unescaped-markup.js create mode 100644 prismjs/plugins/unescaped-markup/prism-unescaped-markup.min.css create mode 100644 prismjs/plugins/unescaped-markup/prism-unescaped-markup.min.js create mode 100644 prismjs/plugins/wpd/prism-wpd.css create mode 100644 prismjs/plugins/wpd/prism-wpd.js create mode 100644 prismjs/plugins/wpd/prism-wpd.min.css create mode 100644 prismjs/plugins/wpd/prism-wpd.min.js create mode 100644 prismjs/prism.js create mode 100644 prismjs/themes/prism-coy.css create mode 100644 prismjs/themes/prism-coy.min.css create mode 100644 prismjs/themes/prism-dark.css create mode 100644 prismjs/themes/prism-dark.min.css create mode 100644 prismjs/themes/prism-funky.css create mode 100644 prismjs/themes/prism-funky.min.css create mode 100644 prismjs/themes/prism-okaidia.css create mode 100644 prismjs/themes/prism-okaidia.min.css create mode 100644 prismjs/themes/prism-solarizedlight.css create mode 100644 prismjs/themes/prism-solarizedlight.min.css create mode 100644 prismjs/themes/prism-tomorrow.css create mode 100644 prismjs/themes/prism-tomorrow.min.css create mode 100644 prismjs/themes/prism-twilight.css create mode 100644 prismjs/themes/prism-twilight.min.css create mode 100644 prismjs/themes/prism.css create mode 100644 prismjs/themes/prism.min.css create mode 100644 supplemental_ui/js/vendor/prism.js diff --git a/antora-playbook.yml b/antora-playbook.yml index 86bd23b..4c362ec 100644 --- a/antora-playbook.yml +++ b/antora-playbook.yml @@ -11,7 +11,8 @@ content: ui: bundle: - url: ./ui-bundle.zip + url: https://gitlab.com/antora/antora-ui-default/-/jobs/artifacts/HEAD/raw/build/ui-bundle.zip?job=bundle-stable + snapshot: true supplemental_files: ./supplemental_ui asciidoc: diff --git a/antora-ui-default/package.json b/antora-ui-default/package.json index 5b3a066..528c3ef 100644 --- a/antora-ui-default/package.json +++ b/antora-ui-default/package.json @@ -54,6 +54,6 @@ "vinyl-fs": "~3.0" }, "dependencies": { - "prismjs": "^1.29.0" + "prismjs": "file:./../primsmjs" } } diff --git a/local-playbook.yml b/local-playbook.yml index 9ba659e..06d4d05 100644 --- a/local-playbook.yml +++ b/local-playbook.yml @@ -11,7 +11,8 @@ content: ui: bundle: - url: ./ui-bundle.zip + url: https://gitlab.com/antora/antora-ui-default/-/jobs/artifacts/HEAD/raw/build/ui-bundle.zip?job=bundle-stable + snapshot: true supplemental_files: ./supplemental_ui asciidoc: diff --git a/package.json b/package.json index f97b196..93b2c31 100644 --- a/package.json +++ b/package.json @@ -7,6 +7,6 @@ "@antora/lunr-extension": "^1.0.0-alpha.8", "antora": "^3.1.9", "prism": "^1.0.0", - "prismjs": "^1.29.0" + "prismjs": "file:./prismjs" } } diff --git a/prismjs/CHANGELOG.md b/prismjs/CHANGELOG.md new file mode 100644 index 0000000..e6a8659 --- /dev/null +++ b/prismjs/CHANGELOG.md @@ -0,0 +1,3068 @@ +# Prism Changelog + +## 1.29.0 (2022-08-23) + +### New components + +* __BBj__ ([#3511](https://github.com/PrismJS/prism/issues/3511)) [`1134bdfc`](https://github.com/PrismJS/prism/commit/1134bdfc) +* __BQN__ ([#3515](https://github.com/PrismJS/prism/issues/3515)) [`859f99a0`](https://github.com/PrismJS/prism/commit/859f99a0) +* __Cilk/C__ & __Cilk/C++__ ([#3522](https://github.com/PrismJS/prism/issues/3522)) [`c8462a29`](https://github.com/PrismJS/prism/commit/c8462a29) +* __Gradle__ ([#3443](https://github.com/PrismJS/prism/issues/3443)) [`32119823`](https://github.com/PrismJS/prism/commit/32119823) +* __METAFONT__ ([#3465](https://github.com/PrismJS/prism/issues/3465)) [`2815f699`](https://github.com/PrismJS/prism/commit/2815f699) +* __WGSL__ ([#3455](https://github.com/PrismJS/prism/issues/3455)) [`4c87d418`](https://github.com/PrismJS/prism/commit/4c87d418) + +### Updated components + +* __AsciiDoc__ + * Some regexes are too greedy ([#3481](https://github.com/PrismJS/prism/issues/3481)) [`c4cbeeaa`](https://github.com/PrismJS/prism/commit/c4cbeeaa) +* __Bash__ + * Added "sh" alias ([#3509](https://github.com/PrismJS/prism/issues/3509)) [`6b824d47`](https://github.com/PrismJS/prism/commit/6b824d47) + * Added support for parameters and the `java` and `sysctl` commands. ([#3505](https://github.com/PrismJS/prism/issues/3505)) [`b9512b22`](https://github.com/PrismJS/prism/commit/b9512b22) + * Added `cargo` command ([#3488](https://github.com/PrismJS/prism/issues/3488)) [`3e937137`](https://github.com/PrismJS/prism/commit/3e937137) +* __BBj__ + * Improve regexes ([#3512](https://github.com/PrismJS/prism/issues/3512)) [`0cad9ae5`](https://github.com/PrismJS/prism/commit/0cad9ae5) +* __CSS__ + * Fixed @-rules not accounting for strings ([#3438](https://github.com/PrismJS/prism/issues/3438)) [`0d4b6cb6`](https://github.com/PrismJS/prism/commit/0d4b6cb6) +* __CSS Extras__ + * Added support for `RebeccaPurple` color ([#3448](https://github.com/PrismJS/prism/issues/3448)) [`646b2e0a`](https://github.com/PrismJS/prism/commit/646b2e0a) +* __Hoon__ + * Fixed escaped strings ([#3473](https://github.com/PrismJS/prism/issues/3473)) [`64642716`](https://github.com/PrismJS/prism/commit/64642716) +* __Java__ + * Added support for constants ([#3507](https://github.com/PrismJS/prism/issues/3507)) [`342a0039`](https://github.com/PrismJS/prism/commit/342a0039) +* __Markup__ + * Fixed quotes in HTML attribute values ([#3442](https://github.com/PrismJS/prism/issues/3442)) [`ca8eaeee`](https://github.com/PrismJS/prism/commit/ca8eaeee) +* __NSIS__ + * Added missing commands ([#3504](https://github.com/PrismJS/prism/issues/3504)) [`b0c2a9b4`](https://github.com/PrismJS/prism/commit/b0c2a9b4) +* __Scala__ + * Updated keywords to support Scala 3 ([#3506](https://github.com/PrismJS/prism/issues/3506)) [`a090d063`](https://github.com/PrismJS/prism/commit/a090d063) +* __SCSS__ + * Fix casing in title of the `scss` lang ([#3501](https://github.com/PrismJS/prism/issues/3501)) [`2aed9ce7`](https://github.com/PrismJS/prism/commit/2aed9ce7) + +### Updated plugins + +* __Line Highlight__ + * Account for offset when clamping ranges ([#3518](https://github.com/PrismJS/prism/issues/3518)) [`098e3000`](https://github.com/PrismJS/prism/commit/098e3000) + * Ignore ranges outside of actual lines ([#3475](https://github.com/PrismJS/prism/issues/3475)) [`9a4e725b`](https://github.com/PrismJS/prism/commit/9a4e725b) +* __Normalize Whitespace__ + * Add configuration via attributes ([#3467](https://github.com/PrismJS/prism/issues/3467)) [`91dea0c8`](https://github.com/PrismJS/prism/commit/91dea0c8) + +### Other + +* Added security policy ([#3070](https://github.com/PrismJS/prism/issues/3070)) [`05ee042a`](https://github.com/PrismJS/prism/commit/05ee042a) +* Added list of maintainers ([#3410](https://github.com/PrismJS/prism/issues/3410)) [`866b302e`](https://github.com/PrismJS/prism/commit/866b302e) +* Included githubactions in the dependabot config ([#3470](https://github.com/PrismJS/prism/issues/3470)) [`9561a9ab`](https://github.com/PrismJS/prism/commit/9561a9ab) +* Set permissions for GitHub actions ([#3468](https://github.com/PrismJS/prism/issues/3468)) [`b85e1ada`](https://github.com/PrismJS/prism/commit/b85e1ada) +* __Website__ + * Website: Added third-party tutorial for Pug template ([#3459](https://github.com/PrismJS/prism/issues/3459)) [`15272f76`](https://github.com/PrismJS/prism/commit/15272f76) + * Docs: Add missing word ([#3489](https://github.com/PrismJS/prism/issues/3489)) [`9d603ef4`](https://github.com/PrismJS/prism/commit/9d603ef4) + +## 1.28.0 (2022-04-17) + +### New components + +* __Ado__ & __Mata__ (Stata) ([#3383](https://github.com/PrismJS/prism/issues/3383)) [`63806d57`](https://github.com/PrismJS/prism/commit/63806d57) +* __ARM Assembly__ ([#3376](https://github.com/PrismJS/prism/issues/3376)) [`554ff324`](https://github.com/PrismJS/prism/commit/554ff324) +* __Arturo__ ([#3403](https://github.com/PrismJS/prism/issues/3403)) [`e2fe1f79`](https://github.com/PrismJS/prism/commit/e2fe1f79) +* __AWK__ & __GAWK__ ([#3374](https://github.com/PrismJS/prism/issues/3374)) [`ea8a0f40`](https://github.com/PrismJS/prism/commit/ea8a0f40) +* __Cooklang__ ([#3337](https://github.com/PrismJS/prism/issues/3337)) [`4eb928c3`](https://github.com/PrismJS/prism/commit/4eb928c3) +* __CUE__ ([#3375](https://github.com/PrismJS/prism/issues/3375)) [`a1340666`](https://github.com/PrismJS/prism/commit/a1340666) +* __gettext__ ([#3369](https://github.com/PrismJS/prism/issues/3369)) [`dfef9b61`](https://github.com/PrismJS/prism/commit/dfef9b61) +* __GNU Linker Script__ ([#3373](https://github.com/PrismJS/prism/issues/3373)) [`33f2cf95`](https://github.com/PrismJS/prism/commit/33f2cf95) +* __Odin__ ([#3424](https://github.com/PrismJS/prism/issues/3424)) [`8a3fef6d`](https://github.com/PrismJS/prism/commit/8a3fef6d) +* __PlantUML__ ([#3372](https://github.com/PrismJS/prism/issues/3372)) [`0d49553c`](https://github.com/PrismJS/prism/commit/0d49553c) +* __ReScript__ ([#3435](https://github.com/PrismJS/prism/issues/3435)) [`cbef9af7`](https://github.com/PrismJS/prism/commit/cbef9af7) +* __SuperCollider__ ([#3371](https://github.com/PrismJS/prism/issues/3371)) [`1b1d6731`](https://github.com/PrismJS/prism/commit/1b1d6731) + +### Updated components + +* __.properties__ + * Use `key`, `value` for token names; `attr-name`, `attr-value` as aliases ([#3377](https://github.com/PrismJS/prism/issues/3377)) [`b94a664d`](https://github.com/PrismJS/prism/commit/b94a664d) +* __ABAP__ + * Sorted keyword list ([#3368](https://github.com/PrismJS/prism/issues/3368)) [`7bda2bf1`](https://github.com/PrismJS/prism/commit/7bda2bf1) +* __Ada__ + * Changed `attr-name` to `attribute`; Use `attr-name` as alias ([#3381](https://github.com/PrismJS/prism/issues/3381)) [`cde0b5b2`](https://github.com/PrismJS/prism/commit/cde0b5b2) + * Added `or` keyword ([#3380](https://github.com/PrismJS/prism/issues/3380)) [`c30b736f`](https://github.com/PrismJS/prism/commit/c30b736f) +* __Atmel AVR Assembly__ + * Fixed `&=` and `|=` operators ([#3395](https://github.com/PrismJS/prism/issues/3395)) [`8c4ae5a5`](https://github.com/PrismJS/prism/commit/8c4ae5a5) +* __AutoHotkey__ + * Use standard tokens ([#3385](https://github.com/PrismJS/prism/issues/3385)) [`61c460e8`](https://github.com/PrismJS/prism/commit/61c460e8) + * Use general pattern instead of name list for directives ([#3384](https://github.com/PrismJS/prism/issues/3384)) [`7ac84dda`](https://github.com/PrismJS/prism/commit/7ac84dda) +* __CFScript__ + * Simplified operator regex ([#3396](https://github.com/PrismJS/prism/issues/3396)) [`6a215fe0`](https://github.com/PrismJS/prism/commit/6a215fe0) +* __CMake__ + * Simplified `variable` and `operator` regexes ([#3398](https://github.com/PrismJS/prism/issues/3398)) [`8e59744b`](https://github.com/PrismJS/prism/commit/8e59744b) +* __Erlang__ + * Added `begin` keyword ([#3387](https://github.com/PrismJS/prism/issues/3387)) [`cf38d059`](https://github.com/PrismJS/prism/commit/cf38d059) +* __Excel Formula__ + * Use more fitting aliases for `function-name`, `range`, and `cell` ([#3391](https://github.com/PrismJS/prism/issues/3391)) [`ef0ec02a`](https://github.com/PrismJS/prism/commit/ef0ec02a) +* __Flow__ + * Changed alias of `type` to `class-name` ([#3390](https://github.com/PrismJS/prism/issues/3390)) [`ce41434d`](https://github.com/PrismJS/prism/commit/ce41434d) + * Recognise `[Ss]ymbol` as a type ([#3388](https://github.com/PrismJS/prism/issues/3388)) [`3916883a`](https://github.com/PrismJS/prism/commit/3916883a) +* __GEDCOM__ + * Update `tag` to `record` ([#3386](https://github.com/PrismJS/prism/issues/3386)) [`f8f95340`](https://github.com/PrismJS/prism/commit/f8f95340) +* __Groovy__ + * Added string interpolation without hook ([#3366](https://github.com/PrismJS/prism/issues/3366)) [`5617765f`](https://github.com/PrismJS/prism/commit/5617765f) +* __Handlebars__ + * Added Mustache alias ([#3422](https://github.com/PrismJS/prism/issues/3422)) [`cb5229af`](https://github.com/PrismJS/prism/commit/cb5229af) +* __Java__ + * Improved class name detection ([#3351](https://github.com/PrismJS/prism/issues/3351)) [`4cb3d038`](https://github.com/PrismJS/prism/commit/4cb3d038) + * Fixed `record` false positives ([#3348](https://github.com/PrismJS/prism/issues/3348)) [`3bd8fdb1`](https://github.com/PrismJS/prism/commit/3bd8fdb1) +* __JavaScript__ + * Added support for new regex syntax ([#3399](https://github.com/PrismJS/prism/issues/3399)) [`ca78cde6`](https://github.com/PrismJS/prism/commit/ca78cde6) +* __Keyman__ + * Added new keywords ([#3401](https://github.com/PrismJS/prism/issues/3401)) [`bac36827`](https://github.com/PrismJS/prism/commit/bac36827) +* __MEL__ + * Improved functions, code, and comments ([#3393](https://github.com/PrismJS/prism/issues/3393)) [`8e648dab`](https://github.com/PrismJS/prism/commit/8e648dab) +* __NEON__ + * Change alias of `key` to `property` ([#3394](https://github.com/PrismJS/prism/issues/3394)) [`1c533f4a`](https://github.com/PrismJS/prism/commit/1c533f4a) +* __PHP__ + * Added `never` return type + minor fix of named arguments ([#3421](https://github.com/PrismJS/prism/issues/3421)) [`4ffab525`](https://github.com/PrismJS/prism/commit/4ffab525) + * Added `readonly` keyword ([#3349](https://github.com/PrismJS/prism/issues/3349)) [`4c3f1969`](https://github.com/PrismJS/prism/commit/4c3f1969) +* __PureBasic__ + * Added support for pointer to string operator ([#3362](https://github.com/PrismJS/prism/issues/3362)) [`499b1fa0`](https://github.com/PrismJS/prism/commit/499b1fa0) +* __Razor C#__ + * Added support for `@helper` and inline C# inside attribute values ([#3355](https://github.com/PrismJS/prism/issues/3355)) [`31a38d0c`](https://github.com/PrismJS/prism/commit/31a38d0c) +* __VHDL__ + * Add `private`, `view` keywords; Distinguish `attribute` from `keyword` ([#3389](https://github.com/PrismJS/prism/issues/3389)) [`d1a5ce30`](https://github.com/PrismJS/prism/commit/d1a5ce30) +* __Wolfram language__ + * Simplified `operator` regex ([#3397](https://github.com/PrismJS/prism/issues/3397)) [`10ae6da3`](https://github.com/PrismJS/prism/commit/10ae6da3) + +### Updated plugins + +* __Autolinker__ + * Fixed URL regex to match more valid URLs ([#3358](https://github.com/PrismJS/prism/issues/3358)) [`17ed9160`](https://github.com/PrismJS/prism/commit/17ed9160) +* __Command Line__ + * Add support for command continuation prefix ([#3344](https://github.com/PrismJS/prism/issues/3344)) [`b53832cd`](https://github.com/PrismJS/prism/commit/b53832cd) + * Increased prompt opacity ([#3352](https://github.com/PrismJS/prism/issues/3352)) [`f95dd190`](https://github.com/PrismJS/prism/commit/f95dd190) +* __Keep Markup__ + * Use original nodes instead of clones ([#3365](https://github.com/PrismJS/prism/issues/3365)) [`8a843a17`](https://github.com/PrismJS/prism/commit/8a843a17) + +### Other + +* __Infrastructure__ + * Use terser ([#3407](https://github.com/PrismJS/prism/issues/3407)) [`11c54624`](https://github.com/PrismJS/prism/commit/11c54624) + * Tests: Cache results for exp backtracking check ([#3356](https://github.com/PrismJS/prism/issues/3356)) [`ead22e1e`](https://github.com/PrismJS/prism/commit/ead22e1e) +* __Website__ + * More documentation for language definitons ([#3427](https://github.com/PrismJS/prism/issues/3427)) [`333bd590`](https://github.com/PrismJS/prism/commit/333bd590) + +## 1.27.0 (2022-02-17) + +### New components + +* __UO Razor Script__ ([#3309](https://github.com/PrismJS/prism/issues/3309)) [`3f8cc5a0`](https://github.com/PrismJS/prism/commit/3f8cc5a0) + +### Updated components + +* __AutoIt__ + * Allow hyphen in directive ([#3308](https://github.com/PrismJS/prism/issues/3308)) [`bcb2e2c8`](https://github.com/PrismJS/prism/commit/bcb2e2c8) +* __EditorConfig__ + * Change alias of `section` from `keyword` to `selector` ([#3305](https://github.com/PrismJS/prism/issues/3305)) [`e46501b9`](https://github.com/PrismJS/prism/commit/e46501b9) +* __Ini__ + * Swap out `header` for `section` ([#3304](https://github.com/PrismJS/prism/issues/3304)) [`deb3a97f`](https://github.com/PrismJS/prism/commit/deb3a97f) +* __MongoDB__ + * Added v5 support ([#3297](https://github.com/PrismJS/prism/issues/3297)) [`8458c41f`](https://github.com/PrismJS/prism/commit/8458c41f) +* __PureBasic__ + * Added missing keyword and fixed constants ending with `$` ([#3320](https://github.com/PrismJS/prism/issues/3320)) [`d6c53726`](https://github.com/PrismJS/prism/commit/d6c53726) +* __Scala__ + * Added support for interpolated strings ([#3293](https://github.com/PrismJS/prism/issues/3293)) [`441a1422`](https://github.com/PrismJS/prism/commit/441a1422) +* __Systemd configuration file__ + * Swap out `operator` for `punctuation` ([#3306](https://github.com/PrismJS/prism/issues/3306)) [`2eb89e15`](https://github.com/PrismJS/prism/commit/2eb89e15) + +### Updated plugins + +* __Command Line__ + * Escape markup in command line output ([#3341](https://github.com/PrismJS/prism/issues/3341)) [`e002e78c`](https://github.com/PrismJS/prism/commit/e002e78c) + * Add support for line continuation and improved colors ([#3326](https://github.com/PrismJS/prism/issues/3326)) [`1784b175`](https://github.com/PrismJS/prism/commit/1784b175) + * Added span around command and output ([#3312](https://github.com/PrismJS/prism/issues/3312)) [`82d0ca15`](https://github.com/PrismJS/prism/commit/82d0ca15) + +### Other + +* __Core__ + * Added better error message for missing grammars ([#3311](https://github.com/PrismJS/prism/issues/3311)) [`2cc4660b`](https://github.com/PrismJS/prism/commit/2cc4660b) + +## 1.26.0 (2022-01-06) + +### New components + +* __Atmel AVR Assembly__ ([#2078](https://github.com/PrismJS/prism/issues/2078)) [`b5a70e4c`](https://github.com/PrismJS/prism/commit/b5a70e4c) +* __Go module__ ([#3209](https://github.com/PrismJS/prism/issues/3209)) [`8476a9ab`](https://github.com/PrismJS/prism/commit/8476a9ab) +* __Keepalived Configure__ ([#2417](https://github.com/PrismJS/prism/issues/2417)) [`d908e457`](https://github.com/PrismJS/prism/commit/d908e457) +* __Tremor__ & __Trickle__ & __Troy__ ([#3087](https://github.com/PrismJS/prism/issues/3087)) [`ec25ba65`](https://github.com/PrismJS/prism/commit/ec25ba65) +* __Web IDL__ ([#3107](https://github.com/PrismJS/prism/issues/3107)) [`ef53f021`](https://github.com/PrismJS/prism/commit/ef53f021) + +### Updated components + +* Use `\d` for `[0-9]` ([#3097](https://github.com/PrismJS/prism/issues/3097)) [`9fe2f93e`](https://github.com/PrismJS/prism/commit/9fe2f93e) +* __6502 Assembly__ + * Use standard tokens and minor improvements ([#3184](https://github.com/PrismJS/prism/issues/3184)) [`929c33e0`](https://github.com/PrismJS/prism/commit/929c33e0) +* __AppleScript__ + * Use `class-name` standard token ([#3182](https://github.com/PrismJS/prism/issues/3182)) [`9f5e511d`](https://github.com/PrismJS/prism/commit/9f5e511d) +* __AQL__ + * Differentiate between strings and identifiers ([#3183](https://github.com/PrismJS/prism/issues/3183)) [`fa540ab7`](https://github.com/PrismJS/prism/commit/fa540ab7) +* __Arduino__ + * Added `ino` alias ([#2990](https://github.com/PrismJS/prism/issues/2990)) [`5b7ce5e4`](https://github.com/PrismJS/prism/commit/5b7ce5e4) +* __Avro IDL__ + * Removed char syntax ([#3185](https://github.com/PrismJS/prism/issues/3185)) [`c7809285`](https://github.com/PrismJS/prism/commit/c7809285) +* __Bash__ + * Added `node` to known commands ([#3291](https://github.com/PrismJS/prism/issues/3291)) [`4b19b502`](https://github.com/PrismJS/prism/commit/4b19b502) + * Added `vcpkg` command ([#3282](https://github.com/PrismJS/prism/issues/3282)) [`b351bc69`](https://github.com/PrismJS/prism/commit/b351bc69) + * Added `docker` and `podman` commands ([#3237](https://github.com/PrismJS/prism/issues/3237)) [`8c5ed251`](https://github.com/PrismJS/prism/commit/8c5ed251) +* __Birb__ + * Fixed class name false positives ([#3111](https://github.com/PrismJS/prism/issues/3111)) [`d7017beb`](https://github.com/PrismJS/prism/commit/d7017beb) +* __Bro__ + * Removed `variable` and minor improvements ([#3186](https://github.com/PrismJS/prism/issues/3186)) [`4cebf34c`](https://github.com/PrismJS/prism/commit/4cebf34c) +* __BSL (1C:Enterprise)__ + * Made `directive` greedy ([#3112](https://github.com/PrismJS/prism/issues/3112)) [`5c412cbb`](https://github.com/PrismJS/prism/commit/5c412cbb) +* __C__ + * Added `char` token ([#3207](https://github.com/PrismJS/prism/issues/3207)) [`d85a64ae`](https://github.com/PrismJS/prism/commit/d85a64ae) +* __C#__ + * Added `char` token ([#3270](https://github.com/PrismJS/prism/issues/3270)) [`220bc40f`](https://github.com/PrismJS/prism/commit/220bc40f) + * Move everything into the IIFE ([#3077](https://github.com/PrismJS/prism/issues/3077)) [`9ed4cf6e`](https://github.com/PrismJS/prism/commit/9ed4cf6e) +* __Clojure__ + * Added `char` token ([#3188](https://github.com/PrismJS/prism/issues/3188)) [`1c88c7da`](https://github.com/PrismJS/prism/commit/1c88c7da) +* __Concurnas__ + * Improved tokenization ([#3189](https://github.com/PrismJS/prism/issues/3189)) [`7b34e65d`](https://github.com/PrismJS/prism/commit/7b34e65d) +* __Content-Security-Policy__ + * Improved tokenization ([#3276](https://github.com/PrismJS/prism/issues/3276)) [`a943f2bb`](https://github.com/PrismJS/prism/commit/a943f2bb) +* __Coq__ + * Improved attribute pattern performance ([#3085](https://github.com/PrismJS/prism/issues/3085)) [`2f9672aa`](https://github.com/PrismJS/prism/commit/2f9672aa) +* __Crystal__ + * Improved tokenization ([#3194](https://github.com/PrismJS/prism/issues/3194)) [`51e3ecc0`](https://github.com/PrismJS/prism/commit/51e3ecc0) +* __Cypher__ + * Removed non-standard use of `symbol` token name ([#3195](https://github.com/PrismJS/prism/issues/3195)) [`6af8a644`](https://github.com/PrismJS/prism/commit/6af8a644) +* __D__ + * Added standard char token ([#3196](https://github.com/PrismJS/prism/issues/3196)) [`dafdbdec`](https://github.com/PrismJS/prism/commit/dafdbdec) +* __Dart__ + * Added string interpolation and improved metadata ([#3197](https://github.com/PrismJS/prism/issues/3197)) [`e1370357`](https://github.com/PrismJS/prism/commit/e1370357) +* __DataWeave__ + * Fixed keywords being highlighted as functions ([#3113](https://github.com/PrismJS/prism/issues/3113)) [`532212b2`](https://github.com/PrismJS/prism/commit/532212b2) +* __EditorConfig__ + * Swap out `property` for `key`; alias with `attr-name` ([#3272](https://github.com/PrismJS/prism/issues/3272)) [`bee6ad56`](https://github.com/PrismJS/prism/commit/bee6ad56) +* __Eiffel__ + * Removed non-standard use of `builtin` name ([#3198](https://github.com/PrismJS/prism/issues/3198)) [`6add768b`](https://github.com/PrismJS/prism/commit/6add768b) +* __Elm__ + * Recognize unicode escapes as valid Char ([#3105](https://github.com/PrismJS/prism/issues/3105)) [`736c581d`](https://github.com/PrismJS/prism/commit/736c581d) +* __ERB__ + * Better embedding of Ruby ([#3192](https://github.com/PrismJS/prism/issues/3192)) [`336edeea`](https://github.com/PrismJS/prism/commit/336edeea) +* __F#__ + * Added `char` token ([#3271](https://github.com/PrismJS/prism/issues/3271)) [`b58cd722`](https://github.com/PrismJS/prism/commit/b58cd722) +* __G-code__ + * Use standard-conforming alias for checksum ([#3205](https://github.com/PrismJS/prism/issues/3205)) [`ee7ab563`](https://github.com/PrismJS/prism/commit/ee7ab563) +* __GameMaker Language__ + * Fixed `operator` token and added tests ([#3114](https://github.com/PrismJS/prism/issues/3114)) [`d359eeae`](https://github.com/PrismJS/prism/commit/d359eeae) +* __Go__ + * Added `char` token and improved `string` and `number` tokens ([#3208](https://github.com/PrismJS/prism/issues/3208)) [`f11b86e2`](https://github.com/PrismJS/prism/commit/f11b86e2) +* __GraphQL__ + * Optimized regexes ([#3136](https://github.com/PrismJS/prism/issues/3136)) [`8494519e`](https://github.com/PrismJS/prism/commit/8494519e) +* __Haml__ + * Use `symbol` alias for filter names ([#3210](https://github.com/PrismJS/prism/issues/3210)) [`3d410670`](https://github.com/PrismJS/prism/commit/3d410670) + * Improved filter and interpolation tokenization ([#3191](https://github.com/PrismJS/prism/issues/3191)) [`005ba469`](https://github.com/PrismJS/prism/commit/005ba469) +* __Haxe__ + * Improved tokenization ([#3211](https://github.com/PrismJS/prism/issues/3211)) [`f41bcf23`](https://github.com/PrismJS/prism/commit/f41bcf23) +* __Hoon__ + * Simplified the language definition a little ([#3212](https://github.com/PrismJS/prism/issues/3212)) [`81920b62`](https://github.com/PrismJS/prism/commit/81920b62) +* __HTTP__ + * Added support for special header value tokenization ([#3275](https://github.com/PrismJS/prism/issues/3275)) [`3362fc79`](https://github.com/PrismJS/prism/commit/3362fc79) + * Relax pattern for body ([#3169](https://github.com/PrismJS/prism/issues/3169)) [`22d0c6ba`](https://github.com/PrismJS/prism/commit/22d0c6ba) +* __HTTP Public-Key-Pins__ + * Improved tokenization ([#3278](https://github.com/PrismJS/prism/issues/3278)) [`0f1b5810`](https://github.com/PrismJS/prism/commit/0f1b5810) +* __HTTP Strict-Transport-Security__ + * Improved tokenization ([#3277](https://github.com/PrismJS/prism/issues/3277)) [`3d708b97`](https://github.com/PrismJS/prism/commit/3d708b97) +* __Idris__ + * Fixed import statements ([#3115](https://github.com/PrismJS/prism/issues/3115)) [`15cb3b78`](https://github.com/PrismJS/prism/commit/15cb3b78) +* __Io__ + * Simplified comment token ([#3214](https://github.com/PrismJS/prism/issues/3214)) [`c2afa59b`](https://github.com/PrismJS/prism/commit/c2afa59b) +* __J__ + * Made comments greedy ([#3215](https://github.com/PrismJS/prism/issues/3215)) [`5af16014`](https://github.com/PrismJS/prism/commit/5af16014) +* __Java__ + * Added `char` token ([#3217](https://github.com/PrismJS/prism/issues/3217)) [`0a9f909c`](https://github.com/PrismJS/prism/commit/0a9f909c) +* __Java stack trace__ + * Removed unreachable parts of regexes ([#3219](https://github.com/PrismJS/prism/issues/3219)) [`fa55492b`](https://github.com/PrismJS/prism/commit/fa55492b) + * Added missing lookbehinds ([#3116](https://github.com/PrismJS/prism/issues/3116)) [`cfb2e782`](https://github.com/PrismJS/prism/commit/cfb2e782) +* __JavaScript__ + * Improved `number` pattern ([#3149](https://github.com/PrismJS/prism/issues/3149)) [`5a24cbff`](https://github.com/PrismJS/prism/commit/5a24cbff) + * Added properties ([#3099](https://github.com/PrismJS/prism/issues/3099)) [`3b2238fa`](https://github.com/PrismJS/prism/commit/3b2238fa) +* __Jolie__ + * Improved tokenization ([#3221](https://github.com/PrismJS/prism/issues/3221)) [`dfbb2020`](https://github.com/PrismJS/prism/commit/dfbb2020) +* __JQ__ + * Improved performance of strings ([#3084](https://github.com/PrismJS/prism/issues/3084)) [`233415b8`](https://github.com/PrismJS/prism/commit/233415b8) +* __JS stack trace__ + * Added missing boundary assertion ([#3117](https://github.com/PrismJS/prism/issues/3117)) [`23d9aec1`](https://github.com/PrismJS/prism/commit/23d9aec1) +* __Julia__ + * Added `char` token ([#3223](https://github.com/PrismJS/prism/issues/3223)) [`3a876df0`](https://github.com/PrismJS/prism/commit/3a876df0) +* __Keyman__ + * Improved tokenization ([#3224](https://github.com/PrismJS/prism/issues/3224)) [`baa95cab`](https://github.com/PrismJS/prism/commit/baa95cab) +* __Kotlin__ + * Added `char` token and improved string interpolation ([#3225](https://github.com/PrismJS/prism/issues/3225)) [`563cd73e`](https://github.com/PrismJS/prism/commit/563cd73e) +* __Latte__ + * Use standard token names and combined delimiter tokens ([#3226](https://github.com/PrismJS/prism/issues/3226)) [`6b168a3b`](https://github.com/PrismJS/prism/commit/6b168a3b) +* __Liquid__ + * Removed unmatchable object variants ([#3135](https://github.com/PrismJS/prism/issues/3135)) [`05e7ab04`](https://github.com/PrismJS/prism/commit/05e7ab04) +* __Lisp__ + * Improved `defun` ([#3130](https://github.com/PrismJS/prism/issues/3130)) [`e8f84a6c`](https://github.com/PrismJS/prism/commit/e8f84a6c) +* __Makefile__ + * Use standard token names correctly ([#3227](https://github.com/PrismJS/prism/issues/3227)) [`21a3c2d7`](https://github.com/PrismJS/prism/commit/21a3c2d7) +* __Markdown__ + * Fixed typo in token name ([#3101](https://github.com/PrismJS/prism/issues/3101)) [`00f77a2c`](https://github.com/PrismJS/prism/commit/00f77a2c) +* __MAXScript__ + * Various improvements ([#3181](https://github.com/PrismJS/prism/issues/3181)) [`e9b856c8`](https://github.com/PrismJS/prism/commit/e9b856c8) + * Fixed booleans not being highlighted ([#3134](https://github.com/PrismJS/prism/issues/3134)) [`c6574e6b`](https://github.com/PrismJS/prism/commit/c6574e6b) +* __Monkey__ + * Use standard tokens correctly ([#3228](https://github.com/PrismJS/prism/issues/3228)) [`c1025aa6`](https://github.com/PrismJS/prism/commit/c1025aa6) +* __N1QL__ + * Updated keywords + minor improvements ([#3229](https://github.com/PrismJS/prism/issues/3229)) [`642d93ec`](https://github.com/PrismJS/prism/commit/642d93ec) +* __nginx__ + * Made some patterns greedy ([#3230](https://github.com/PrismJS/prism/issues/3230)) [`7b72e0ad`](https://github.com/PrismJS/prism/commit/7b72e0ad) +* __Nim__ + * Added `char` token and made some tokens greedy ([#3231](https://github.com/PrismJS/prism/issues/3231)) [`2334b4b6`](https://github.com/PrismJS/prism/commit/2334b4b6) + * Fixed backtick identifier ([#3118](https://github.com/PrismJS/prism/issues/3118)) [`75331bea`](https://github.com/PrismJS/prism/commit/75331bea) +* __Nix__ + * Use standard token name correctly ([#3232](https://github.com/PrismJS/prism/issues/3232)) [`5bf6e35f`](https://github.com/PrismJS/prism/commit/5bf6e35f) + * Removed unmatchable token ([#3119](https://github.com/PrismJS/prism/issues/3119)) [`dc1e808f`](https://github.com/PrismJS/prism/commit/dc1e808f) +* __NSIS__ + * Made `comment` greedy ([#3234](https://github.com/PrismJS/prism/issues/3234)) [`969f152a`](https://github.com/PrismJS/prism/commit/969f152a) + * Update regex pattern for variables ([#3266](https://github.com/PrismJS/prism/issues/3266)) [`adcc8784`](https://github.com/PrismJS/prism/commit/adcc8784) + * Update regex for constants pattern ([#3267](https://github.com/PrismJS/prism/issues/3267)) [`55583fb2`](https://github.com/PrismJS/prism/commit/55583fb2) +* __Objective-C__ + * Improved `string` token ([#3235](https://github.com/PrismJS/prism/issues/3235)) [`8e0e95f3`](https://github.com/PrismJS/prism/commit/8e0e95f3) +* __OCaml__ + * Improved tokenization ([#3269](https://github.com/PrismJS/prism/issues/3269)) [`7bcc5da0`](https://github.com/PrismJS/prism/commit/7bcc5da0) + * Removed unmatchable punctuation variant ([#3120](https://github.com/PrismJS/prism/issues/3120)) [`314d6994`](https://github.com/PrismJS/prism/commit/314d6994) +* __Oz__ + * Improved tokenization ([#3240](https://github.com/PrismJS/prism/issues/3240)) [`a3905c04`](https://github.com/PrismJS/prism/commit/a3905c04) +* __Pascal__ + * Added support for asm and directives ([#2653](https://github.com/PrismJS/prism/issues/2653)) [`f053af13`](https://github.com/PrismJS/prism/commit/f053af13) +* __PATROL Scripting Language__ + * Added `boolean` token ([#3248](https://github.com/PrismJS/prism/issues/3248)) [`a5b6c5eb`](https://github.com/PrismJS/prism/commit/a5b6c5eb) +* __Perl__ + * Improved tokenization ([#3241](https://github.com/PrismJS/prism/issues/3241)) [`f22ea9f9`](https://github.com/PrismJS/prism/commit/f22ea9f9) +* __PHP__ + * Removed useless keyword tokens ([#3121](https://github.com/PrismJS/prism/issues/3121)) [`ee62a080`](https://github.com/PrismJS/prism/commit/ee62a080) +* __PHP Extras__ + * Improved `scope` and `this` ([#3243](https://github.com/PrismJS/prism/issues/3243)) [`59ef51db`](https://github.com/PrismJS/prism/commit/59ef51db) +* __PL/SQL__ + * Updated keywords + other improvements ([#3109](https://github.com/PrismJS/prism/issues/3109)) [`e7ba877b`](https://github.com/PrismJS/prism/commit/e7ba877b) +* __PowerQuery__ + * Improved tokenization and use standard tokens correctly ([#3244](https://github.com/PrismJS/prism/issues/3244)) [`5688f487`](https://github.com/PrismJS/prism/commit/5688f487) + * Removed useless `data-type` alternative ([#3122](https://github.com/PrismJS/prism/issues/3122)) [`eeb13996`](https://github.com/PrismJS/prism/commit/eeb13996) +* __PowerShell__ + * Fixed lookbehind + refactoring ([#3245](https://github.com/PrismJS/prism/issues/3245)) [`d30a2da6`](https://github.com/PrismJS/prism/commit/d30a2da6) +* __Processing__ + * Use standard tokens correctly ([#3246](https://github.com/PrismJS/prism/issues/3246)) [`5ee8c557`](https://github.com/PrismJS/prism/commit/5ee8c557) +* __Prolog__ + * Removed variable token + minor improvements ([#3247](https://github.com/PrismJS/prism/issues/3247)) [`bacf9ae3`](https://github.com/PrismJS/prism/commit/bacf9ae3) +* __Pug__ + * Improved filter tokenization ([#3258](https://github.com/PrismJS/prism/issues/3258)) [`0390e644`](https://github.com/PrismJS/prism/commit/0390e644) +* __PureBasic__ + * Fixed token order inside `asm` token ([#3123](https://github.com/PrismJS/prism/issues/3123)) [`f3b25786`](https://github.com/PrismJS/prism/commit/f3b25786) +* __Python__ + * Made `comment` greedy ([#3249](https://github.com/PrismJS/prism/issues/3249)) [`8ecef306`](https://github.com/PrismJS/prism/commit/8ecef306) + * Add `match` and `case` (soft) keywords ([#3142](https://github.com/PrismJS/prism/issues/3142)) [`3f24dc72`](https://github.com/PrismJS/prism/commit/3f24dc72) + * Recognize walrus operator ([#3126](https://github.com/PrismJS/prism/issues/3126)) [`18bd101c`](https://github.com/PrismJS/prism/commit/18bd101c) + * Fixed numbers ending with a dot ([#3106](https://github.com/PrismJS/prism/issues/3106)) [`2c63efa6`](https://github.com/PrismJS/prism/commit/2c63efa6) +* __QML__ + * Made `string` greedy ([#3250](https://github.com/PrismJS/prism/issues/3250)) [`1e6dcb51`](https://github.com/PrismJS/prism/commit/1e6dcb51) +* __React JSX__ + * Move alias property ([#3222](https://github.com/PrismJS/prism/issues/3222)) [`18c92048`](https://github.com/PrismJS/prism/commit/18c92048) +* __React TSX__ + * Removed `parameter` token ([#3090](https://github.com/PrismJS/prism/issues/3090)) [`0a313f4f`](https://github.com/PrismJS/prism/commit/0a313f4f) +* __Reason__ + * Use standard tokens correctly ([#3251](https://github.com/PrismJS/prism/issues/3251)) [`809af0d9`](https://github.com/PrismJS/prism/commit/809af0d9) +* __Regex__ + * Fixed char-class/char-set confusion ([#3124](https://github.com/PrismJS/prism/issues/3124)) [`4dde2e20`](https://github.com/PrismJS/prism/commit/4dde2e20) +* __Ren'py__ + * Improved language + added tests ([#3125](https://github.com/PrismJS/prism/issues/3125)) [`ede55b2c`](https://github.com/PrismJS/prism/commit/ede55b2c) +* __Rip__ + * Use standard `char` token ([#3252](https://github.com/PrismJS/prism/issues/3252)) [`2069ab0c`](https://github.com/PrismJS/prism/commit/2069ab0c) +* __Ruby__ + * Improved tokenization ([#3193](https://github.com/PrismJS/prism/issues/3193)) [`86028adb`](https://github.com/PrismJS/prism/commit/86028adb) +* __Rust__ + * Improved `type-definition` and use standard tokens correctly ([#3253](https://github.com/PrismJS/prism/issues/3253)) [`4049e5c6`](https://github.com/PrismJS/prism/commit/4049e5c6) +* __Scheme__ + * Use standard `char` token ([#3254](https://github.com/PrismJS/prism/issues/3254)) [`7d740c45`](https://github.com/PrismJS/prism/commit/7d740c45) + * Updates syntax for reals ([#3159](https://github.com/PrismJS/prism/issues/3159)) [`4eb81fa1`](https://github.com/PrismJS/prism/commit/4eb81fa1) +* __Smalltalk__ + * Use standard `char` token ([#3255](https://github.com/PrismJS/prism/issues/3255)) [`a7bb3001`](https://github.com/PrismJS/prism/commit/a7bb3001) + * Added `boolean` token ([#3100](https://github.com/PrismJS/prism/issues/3100)) [`51382524`](https://github.com/PrismJS/prism/commit/51382524) +* __Smarty__ + * Improved tokenization ([#3268](https://github.com/PrismJS/prism/issues/3268)) [`acc0bc09`](https://github.com/PrismJS/prism/commit/acc0bc09) +* __SQL__ + * Added identifier token ([#3141](https://github.com/PrismJS/prism/issues/3141)) [`4e00cddd`](https://github.com/PrismJS/prism/commit/4e00cddd) +* __Squirrel__ + * Use standard `char` token ([#3256](https://github.com/PrismJS/prism/issues/3256)) [`58a65bfd`](https://github.com/PrismJS/prism/commit/58a65bfd) +* __Stan__ + * Added missing keywords and HOFs ([#3238](https://github.com/PrismJS/prism/issues/3238)) [`afd77ed1`](https://github.com/PrismJS/prism/commit/afd77ed1) +* __Structured Text (IEC 61131-3)__ + * Structured text: Improved tokenization ([#3213](https://github.com/PrismJS/prism/issues/3213)) [`d04d166d`](https://github.com/PrismJS/prism/commit/d04d166d) +* __Swift__ + * Added support for `isolated` keyword ([#3174](https://github.com/PrismJS/prism/issues/3174)) [`18c828a6`](https://github.com/PrismJS/prism/commit/18c828a6) +* __TAP__ + * Conform to quoted-properties style ([#3127](https://github.com/PrismJS/prism/issues/3127)) [`3ef71533`](https://github.com/PrismJS/prism/commit/3ef71533) +* __Tremor__ + * Use standard `regex` token ([#3257](https://github.com/PrismJS/prism/issues/3257)) [`c56e4bf5`](https://github.com/PrismJS/prism/commit/c56e4bf5) +* __Twig__ + * Improved tokenization ([#3259](https://github.com/PrismJS/prism/issues/3259)) [`e03a7c24`](https://github.com/PrismJS/prism/commit/e03a7c24) +* __TypeScript__ + * Removed duplicate keywords ([#3132](https://github.com/PrismJS/prism/issues/3132)) [`91060fd6`](https://github.com/PrismJS/prism/commit/91060fd6) +* __URI__ + * Fixed IPv4 regex ([#3128](https://github.com/PrismJS/prism/issues/3128)) [`599e30ee`](https://github.com/PrismJS/prism/commit/599e30ee) +* __V__ + * Use standard `char` token ([#3260](https://github.com/PrismJS/prism/issues/3260)) [`e4373256`](https://github.com/PrismJS/prism/commit/e4373256) +* __Verilog__ + * Use standard tokens correctly ([#3261](https://github.com/PrismJS/prism/issues/3261)) [`43124129`](https://github.com/PrismJS/prism/commit/43124129) +* __Visual Basic__ + * Simplify regexes and use more common aliases ([#3262](https://github.com/PrismJS/prism/issues/3262)) [`aa73d448`](https://github.com/PrismJS/prism/commit/aa73d448) +* __Wolfram language__ + * Removed unmatchable punctuation variant ([#3133](https://github.com/PrismJS/prism/issues/3133)) [`a28a86ad`](https://github.com/PrismJS/prism/commit/a28a86ad) +* __Xojo (REALbasic)__ + * Proper token name for directives ([#3263](https://github.com/PrismJS/prism/issues/3263)) [`ffd8343f`](https://github.com/PrismJS/prism/commit/ffd8343f) +* __Zig__ + * Added missing keywords ([#3279](https://github.com/PrismJS/prism/issues/3279)) [`deed35e3`](https://github.com/PrismJS/prism/commit/deed35e3) + * Use standard `char` token ([#3264](https://github.com/PrismJS/prism/issues/3264)) [`c3f9fb70`](https://github.com/PrismJS/prism/commit/c3f9fb70) + * Fixed module comments and astral chars ([#3129](https://github.com/PrismJS/prism/issues/3129)) [`09a0e2ba`](https://github.com/PrismJS/prism/commit/09a0e2ba) + +### Updated plugins + +* __File Highlight__ + * File highlight+data range ([#1813](https://github.com/PrismJS/prism/issues/1813)) [`d38592c5`](https://github.com/PrismJS/prism/commit/d38592c5) +* __Keep Markup__ + * Added `drop-tokens` option class ([#3166](https://github.com/PrismJS/prism/issues/3166)) [`b679cfe6`](https://github.com/PrismJS/prism/commit/b679cfe6) +* __Line Highlight__ + * Expose `highlightLines` function as `Prism.plugins.highlightLines` ([#3086](https://github.com/PrismJS/prism/issues/3086)) [`9f4c0e74`](https://github.com/PrismJS/prism/commit/9f4c0e74) +* __Toolbar__ + * Set `z-index` of `.toolbar` to 10 ([#3163](https://github.com/PrismJS/prism/issues/3163)) [`1cac3559`](https://github.com/PrismJS/prism/commit/1cac3559) + +### Updated themes + +* Coy: Set `z-index` to make shadows visible in colored table cells ([#3161](https://github.com/PrismJS/prism/issues/3161)) [`79f250f3`](https://github.com/PrismJS/prism/commit/79f250f3) +* Coy: Added padding to account for box shadow ([#3143](https://github.com/PrismJS/prism/issues/3143)) [`a6a4ce7e`](https://github.com/PrismJS/prism/commit/a6a4ce7e) + +### Other + +* __Core__ + * Added `setLanguage` util function ([#3167](https://github.com/PrismJS/prism/issues/3167)) [`b631949a`](https://github.com/PrismJS/prism/commit/b631949a) + * Fixed type error on null ([#3057](https://github.com/PrismJS/prism/issues/3057)) [`a80a68ba`](https://github.com/PrismJS/prism/commit/a80a68ba) + * Document `disableWorkerMessageHandler` ([#3088](https://github.com/PrismJS/prism/issues/3088)) [`213cf7be`](https://github.com/PrismJS/prism/commit/213cf7be) +* __Infrastructure__ + * Tests: Added `.html.test` files for replace `.js` language tests ([#3148](https://github.com/PrismJS/prism/issues/3148)) [`2e834c8c`](https://github.com/PrismJS/prism/commit/2e834c8c) + * Added regex coverage ([#3138](https://github.com/PrismJS/prism/issues/3138)) [`5333e281`](https://github.com/PrismJS/prism/commit/5333e281) + * Tests: Added `TestCaseFile` class and generalized `runTestCase` ([#3147](https://github.com/PrismJS/prism/issues/3147)) [`ae8888a0`](https://github.com/PrismJS/prism/commit/ae8888a0) + * Added even more language tests ([#3137](https://github.com/PrismJS/prism/issues/3137)) [`344d0b27`](https://github.com/PrismJS/prism/commit/344d0b27) + * Added more plugin tests ([#1969](https://github.com/PrismJS/prism/issues/1969)) [`a394a14d`](https://github.com/PrismJS/prism/commit/a394a14d) + * Added more language tests ([#3131](https://github.com/PrismJS/prism/issues/3131)) [`2f7f7364`](https://github.com/PrismJS/prism/commit/2f7f7364) + * `package.json`: Added `engines.node` field ([#3108](https://github.com/PrismJS/prism/issues/3108)) [`798ee4f6`](https://github.com/PrismJS/prism/commit/798ee4f6) + * Use tabs in `package(-lock).json` ([#3098](https://github.com/PrismJS/prism/issues/3098)) [`8daebb4a`](https://github.com/PrismJS/prism/commit/8daebb4a) + * Update `eslint-plugin-regexp@1.2.0` ([#3091](https://github.com/PrismJS/prism/issues/3091)) [`e6e1d5ae`](https://github.com/PrismJS/prism/commit/e6e1d5ae) + * Added minified CSS ([#3073](https://github.com/PrismJS/prism/issues/3073)) [`d63d6c0e`](https://github.com/PrismJS/prism/commit/d63d6c0e) +* __Website__ + * Readme: Clarify usage of our build system ([#3239](https://github.com/PrismJS/prism/issues/3239)) [`6f1d904a`](https://github.com/PrismJS/prism/commit/6f1d904a) + * Improved CDN usage URLs ([#3285](https://github.com/PrismJS/prism/issues/3285)) [`6c21b2f7`](https://github.com/PrismJS/prism/commit/6c21b2f7) + * Update download.html [`9d5424b6`](https://github.com/PrismJS/prism/commit/9d5424b6) + * Autoloader: Mention how to load grammars from URLs ([#3218](https://github.com/PrismJS/prism/issues/3218)) [`cefccdd1`](https://github.com/PrismJS/prism/commit/cefccdd1) + * Added PrismJS React and HTML tutorial link ([#3190](https://github.com/PrismJS/prism/issues/3190)) [`0ecdbdce`](https://github.com/PrismJS/prism/commit/0ecdbdce) + * Improved readability ([#3177](https://github.com/PrismJS/prism/issues/3177)) [`4433d7fe`](https://github.com/PrismJS/prism/commit/4433d7fe) + * Fixed red highlighting in Firefox ([#3178](https://github.com/PrismJS/prism/issues/3178)) [`746da79b`](https://github.com/PrismJS/prism/commit/746da79b) + * Use Keep markup to highlight code section ([#3164](https://github.com/PrismJS/prism/issues/3164)) [`ebd59e32`](https://github.com/PrismJS/prism/commit/ebd59e32) + * Document standard tokens and provide examples ([#3104](https://github.com/PrismJS/prism/issues/3104)) [`37551200`](https://github.com/PrismJS/prism/commit/37551200) + * Fixed dead link to third-party tutorial [#3155](https://github.com/PrismJS/prism/issues/3155) ([#3156](https://github.com/PrismJS/prism/issues/3156)) [`31b4c1b8`](https://github.com/PrismJS/prism/commit/31b4c1b8) + * Repositioned theme selector ([#3146](https://github.com/PrismJS/prism/issues/3146)) [`ea361e5a`](https://github.com/PrismJS/prism/commit/ea361e5a) + * Adjusted TOC's line height for better readability ([#3145](https://github.com/PrismJS/prism/issues/3145)) [`c5629706`](https://github.com/PrismJS/prism/commit/c5629706) + * Updated plugin header template ([#3144](https://github.com/PrismJS/prism/issues/3144)) [`faedfe85`](https://github.com/PrismJS/prism/commit/faedfe85) + * Update test and example pages to use Autoloader ([#1936](https://github.com/PrismJS/prism/issues/1936)) [`3d96eedc`](https://github.com/PrismJS/prism/commit/3d96eedc) + +## 1.25.0 (2021-09-16) + +### New components + +* __AviSynth__ ([#3071](https://github.com/PrismJS/prism/issues/3071)) [`746a4b1a`](https://github.com/PrismJS/prism/commit/746a4b1a) +* __Avro IDL__ ([#3051](https://github.com/PrismJS/prism/issues/3051)) [`87e5a376`](https://github.com/PrismJS/prism/commit/87e5a376) +* __Bicep__ ([#3027](https://github.com/PrismJS/prism/issues/3027)) [`c1dce998`](https://github.com/PrismJS/prism/commit/c1dce998) +* __GAP (CAS)__ ([#3054](https://github.com/PrismJS/prism/issues/3054)) [`23cd9b65`](https://github.com/PrismJS/prism/commit/23cd9b65) +* __GN__ ([#3062](https://github.com/PrismJS/prism/issues/3062)) [`4f97b82b`](https://github.com/PrismJS/prism/commit/4f97b82b) +* __Hoon__ ([#2978](https://github.com/PrismJS/prism/issues/2978)) [`ea776756`](https://github.com/PrismJS/prism/commit/ea776756) +* __Kusto__ ([#3068](https://github.com/PrismJS/prism/issues/3068)) [`e008ea05`](https://github.com/PrismJS/prism/commit/e008ea05) +* __Magma (CAS)__ ([#3055](https://github.com/PrismJS/prism/issues/3055)) [`a1b67ce3`](https://github.com/PrismJS/prism/commit/a1b67ce3) +* __MAXScript__ ([#3060](https://github.com/PrismJS/prism/issues/3060)) [`4fbdd2f8`](https://github.com/PrismJS/prism/commit/4fbdd2f8) +* __Mermaid__ ([#3050](https://github.com/PrismJS/prism/issues/3050)) [`148c1eca`](https://github.com/PrismJS/prism/commit/148c1eca) +* __Razor C#__ ([#3064](https://github.com/PrismJS/prism/issues/3064)) [`4433ccfc`](https://github.com/PrismJS/prism/commit/4433ccfc) +* __Systemd configuration file__ ([#3053](https://github.com/PrismJS/prism/issues/3053)) [`8df825e0`](https://github.com/PrismJS/prism/commit/8df825e0) +* __Wren__ ([#3063](https://github.com/PrismJS/prism/issues/3063)) [`6a356d25`](https://github.com/PrismJS/prism/commit/6a356d25) + +### Updated components + +* __Bicep__ + * Added support for multiline and interpolated strings and other improvements ([#3028](https://github.com/PrismJS/prism/issues/3028)) [`748bb9ac`](https://github.com/PrismJS/prism/commit/748bb9ac) +* __C#__ + * Added `with` keyword & improved record support ([#2993](https://github.com/PrismJS/prism/issues/2993)) [`fdd291c0`](https://github.com/PrismJS/prism/commit/fdd291c0) + * Added `record`, `init`, and `nullable` keyword ([#2991](https://github.com/PrismJS/prism/issues/2991)) [`9b561565`](https://github.com/PrismJS/prism/commit/9b561565) + * Added context check for `from` keyword ([#2970](https://github.com/PrismJS/prism/issues/2970)) [`158f25d4`](https://github.com/PrismJS/prism/commit/158f25d4) +* __C++__ + * Fixed generic function false positive ([#3043](https://github.com/PrismJS/prism/issues/3043)) [`5de8947f`](https://github.com/PrismJS/prism/commit/5de8947f) +* __Clojure__ + * Improved tokenization ([#3056](https://github.com/PrismJS/prism/issues/3056)) [`8d0b74b5`](https://github.com/PrismJS/prism/commit/8d0b74b5) +* __Hoon__ + * Fixed mixed-case aura tokenization ([#3002](https://github.com/PrismJS/prism/issues/3002)) [`9c8911bd`](https://github.com/PrismJS/prism/commit/9c8911bd) +* __Liquid__ + * Added all objects from Shopify reference ([#2998](https://github.com/PrismJS/prism/issues/2998)) [`693b7433`](https://github.com/PrismJS/prism/commit/693b7433) + * Added `empty` keyword ([#2997](https://github.com/PrismJS/prism/issues/2997)) [`fe3bc526`](https://github.com/PrismJS/prism/commit/fe3bc526) +* __Log file__ + * Added support for Java stack traces ([#3003](https://github.com/PrismJS/prism/issues/3003)) [`b0365e70`](https://github.com/PrismJS/prism/commit/b0365e70) +* __Markup__ + * Made most patterns greedy ([#3065](https://github.com/PrismJS/prism/issues/3065)) [`52e8cee9`](https://github.com/PrismJS/prism/commit/52e8cee9) + * Fixed ReDoS ([#3078](https://github.com/PrismJS/prism/issues/3078)) [`0ff371bb`](https://github.com/PrismJS/prism/commit/0ff371bb) +* __PureScript__ + * Made `∀` a keyword (alias for `forall`) ([#3005](https://github.com/PrismJS/prism/issues/3005)) [`b38fc89a`](https://github.com/PrismJS/prism/commit/b38fc89a) + * Improved Haskell and PureScript ([#3020](https://github.com/PrismJS/prism/issues/3020)) [`679539ec`](https://github.com/PrismJS/prism/commit/679539ec) +* __Python__ + * Support for underscores in numbers ([#3039](https://github.com/PrismJS/prism/issues/3039)) [`6f5d68f7`](https://github.com/PrismJS/prism/commit/6f5d68f7) +* __Sass__ + * Fixed issues with CSS Extras ([#2994](https://github.com/PrismJS/prism/issues/2994)) [`14fdfe32`](https://github.com/PrismJS/prism/commit/14fdfe32) +* __Shell session__ + * Fixed command false positives ([#3048](https://github.com/PrismJS/prism/issues/3048)) [`35b88fcf`](https://github.com/PrismJS/prism/commit/35b88fcf) + * Added support for the percent sign as shell symbol ([#3010](https://github.com/PrismJS/prism/issues/3010)) [`4492b62b`](https://github.com/PrismJS/prism/commit/4492b62b) +* __Swift__ + * Major improvements ([#3022](https://github.com/PrismJS/prism/issues/3022)) [`8541db2e`](https://github.com/PrismJS/prism/commit/8541db2e) + * Added support for `@propertyWrapper`, `@MainActor`, and `@globalActor` ([#3009](https://github.com/PrismJS/prism/issues/3009)) [`ce5e0f01`](https://github.com/PrismJS/prism/commit/ce5e0f01) + * Added support for new Swift 5.5 keywords ([#2988](https://github.com/PrismJS/prism/issues/2988)) [`bb93fac0`](https://github.com/PrismJS/prism/commit/bb93fac0) +* __TypeScript__ + * Fixed keyword false positives ([#3001](https://github.com/PrismJS/prism/issues/3001)) [`212e0ef2`](https://github.com/PrismJS/prism/commit/212e0ef2) + +### Updated plugins + +* __JSONP Highlight__ + * Refactored JSONP logic ([#3018](https://github.com/PrismJS/prism/issues/3018)) [`5126d1e1`](https://github.com/PrismJS/prism/commit/5126d1e1) +* __Line Highlight__ + * Extend highlight to full line width inside scroll container ([#3011](https://github.com/PrismJS/prism/issues/3011)) [`e289ec60`](https://github.com/PrismJS/prism/commit/e289ec60) +* __Normalize Whitespace__ + * Removed unnecessary checks ([#3017](https://github.com/PrismJS/prism/issues/3017)) [`63edf14c`](https://github.com/PrismJS/prism/commit/63edf14c) +* __Previewers__ + * Ensure popup is visible across themes ([#3080](https://github.com/PrismJS/prism/issues/3080)) [`c7b6a7f6`](https://github.com/PrismJS/prism/commit/c7b6a7f6) + +### Updated themes + +* __Twilight__ + * Increase selector specificities of plugin overrides ([#3081](https://github.com/PrismJS/prism/issues/3081)) [`ffb20439`](https://github.com/PrismJS/prism/commit/ffb20439) + +### Other + +* __Infrastructure__ + * Added benchmark suite ([#2153](https://github.com/PrismJS/prism/issues/2153)) [`44456b21`](https://github.com/PrismJS/prism/commit/44456b21) + * Tests: Insert expected JSON by Default ([#2960](https://github.com/PrismJS/prism/issues/2960)) [`e997dd35`](https://github.com/PrismJS/prism/commit/e997dd35) + * Tests: Improved dection of empty patterns ([#3058](https://github.com/PrismJS/prism/issues/3058)) [`d216e602`](https://github.com/PrismJS/prism/commit/d216e602) +* __Website__ + * Highlight Keywords: More documentation ([#3049](https://github.com/PrismJS/prism/issues/3049)) [`247fd9a3`](https://github.com/PrismJS/prism/commit/247fd9a3) + + +## 1.24.1 (2021-07-03) + +### Updated components + +* __Markdown__ + * Fixed Markdown not working in NodeJS ([#2977](https://github.com/PrismJS/prism/issues/2977)) [`151121cd`](https://github.com/PrismJS/prism/commit/151121cd) + +### Updated plugins + +* __Toolbar__ + * Fixed styles being applies to nested elements ([#2980](https://github.com/PrismJS/prism/issues/2980)) [`748ecddc`](https://github.com/PrismJS/prism/commit/748ecddc) + + +## 1.24.0 (2021-06-27) + +### New components + +* __CFScript__ ([#2771](https://github.com/PrismJS/prism/issues/2771)) [`b0a6ec85`](https://github.com/PrismJS/prism/commit/b0a6ec85) +* __ChaiScript__ ([#2706](https://github.com/PrismJS/prism/issues/2706)) [`3f7d7453`](https://github.com/PrismJS/prism/commit/3f7d7453) +* __COBOL__ ([#2800](https://github.com/PrismJS/prism/issues/2800)) [`7e5f78ff`](https://github.com/PrismJS/prism/commit/7e5f78ff) +* __Coq__ ([#2803](https://github.com/PrismJS/prism/issues/2803)) [`41e25d3c`](https://github.com/PrismJS/prism/commit/41e25d3c) +* __CSV__ ([#2794](https://github.com/PrismJS/prism/issues/2794)) [`f9b69528`](https://github.com/PrismJS/prism/commit/f9b69528) +* __DOT (Graphviz)__ ([#2690](https://github.com/PrismJS/prism/issues/2690)) [`1f91868e`](https://github.com/PrismJS/prism/commit/1f91868e) +* __False__ ([#2802](https://github.com/PrismJS/prism/issues/2802)) [`99a21dc5`](https://github.com/PrismJS/prism/commit/99a21dc5) +* __ICU Message Format__ ([#2745](https://github.com/PrismJS/prism/issues/2745)) [`bf4e7ba9`](https://github.com/PrismJS/prism/commit/bf4e7ba9) +* __Idris__ ([#2755](https://github.com/PrismJS/prism/issues/2755)) [`e9314415`](https://github.com/PrismJS/prism/commit/e9314415) +* __Jexl__ ([#2764](https://github.com/PrismJS/prism/issues/2764)) [`7e51b99c`](https://github.com/PrismJS/prism/commit/7e51b99c) +* __KuMir (КуМир)__ ([#2760](https://github.com/PrismJS/prism/issues/2760)) [`3419fb77`](https://github.com/PrismJS/prism/commit/3419fb77) +* __Log file__ ([#2796](https://github.com/PrismJS/prism/issues/2796)) [`2bc6475b`](https://github.com/PrismJS/prism/commit/2bc6475b) +* __Nevod__ ([#2798](https://github.com/PrismJS/prism/issues/2798)) [`f84c49c5`](https://github.com/PrismJS/prism/commit/f84c49c5) +* __OpenQasm__ ([#2797](https://github.com/PrismJS/prism/issues/2797)) [`1a2347a3`](https://github.com/PrismJS/prism/commit/1a2347a3) +* __PATROL Scripting Language__ ([#2739](https://github.com/PrismJS/prism/issues/2739)) [`18c67b49`](https://github.com/PrismJS/prism/commit/18c67b49) +* __Q#__ ([#2804](https://github.com/PrismJS/prism/issues/2804)) [`1b63cd01`](https://github.com/PrismJS/prism/commit/1b63cd01) +* __Rego__ ([#2624](https://github.com/PrismJS/prism/issues/2624)) [`e38986f9`](https://github.com/PrismJS/prism/commit/e38986f9) +* __Squirrel__ ([#2721](https://github.com/PrismJS/prism/issues/2721)) [`fd1081d2`](https://github.com/PrismJS/prism/commit/fd1081d2) +* __URI__ ([#2708](https://github.com/PrismJS/prism/issues/2708)) [`bbc77d19`](https://github.com/PrismJS/prism/commit/bbc77d19) +* __V__ ([#2687](https://github.com/PrismJS/prism/issues/2687)) [`72962701`](https://github.com/PrismJS/prism/commit/72962701) +* __Wolfram language__ & __Mathematica__ & __Mathematica Notebook__ ([#2921](https://github.com/PrismJS/prism/issues/2921)) [`c4f6b2cc`](https://github.com/PrismJS/prism/commit/c4f6b2cc) + +### Updated components + +* Fixed problems reported by `regexp/no-dupe-disjunctions` ([#2952](https://github.com/PrismJS/prism/issues/2952)) [`f471d2d7`](https://github.com/PrismJS/prism/commit/f471d2d7) +* Fixed some cases of quadratic worst-case runtime ([#2922](https://github.com/PrismJS/prism/issues/2922)) [`79d22182`](https://github.com/PrismJS/prism/commit/79d22182) +* Fixed 2 cases of exponential backtracking ([#2774](https://github.com/PrismJS/prism/issues/2774)) [`d85e30da`](https://github.com/PrismJS/prism/commit/d85e30da) +* __AQL__ + * Update for ArangoDB 3.8 ([#2842](https://github.com/PrismJS/prism/issues/2842)) [`ea82478d`](https://github.com/PrismJS/prism/commit/ea82478d) +* __AutoHotkey__ + * Improved tag pattern ([#2920](https://github.com/PrismJS/prism/issues/2920)) [`fc2a3334`](https://github.com/PrismJS/prism/commit/fc2a3334) +* __Bash__ + * Accept hyphens in function names ([#2832](https://github.com/PrismJS/prism/issues/2832)) [`e4ad22ad`](https://github.com/PrismJS/prism/commit/e4ad22ad) + * Fixed single-quoted strings ([#2792](https://github.com/PrismJS/prism/issues/2792)) [`e5cfdb4a`](https://github.com/PrismJS/prism/commit/e5cfdb4a) +* __C++__ + * Added support for generic functions and made `::` punctuation ([#2814](https://github.com/PrismJS/prism/issues/2814)) [`3df62fd0`](https://github.com/PrismJS/prism/commit/3df62fd0) + * Added missing keywords and modules ([#2763](https://github.com/PrismJS/prism/issues/2763)) [`88fa72cf`](https://github.com/PrismJS/prism/commit/88fa72cf) +* __Dart__ + * Improved support for classes & generics ([#2810](https://github.com/PrismJS/prism/issues/2810)) [`d0bcd074`](https://github.com/PrismJS/prism/commit/d0bcd074) +* __Docker__ + * Improvements ([#2720](https://github.com/PrismJS/prism/issues/2720)) [`93dd83c2`](https://github.com/PrismJS/prism/commit/93dd83c2) +* __Elixir__ + * Added missing keywords ([#2958](https://github.com/PrismJS/prism/issues/2958)) [`114e4626`](https://github.com/PrismJS/prism/commit/114e4626) + * Added missing keyword and other improvements ([#2773](https://github.com/PrismJS/prism/issues/2773)) [`e6c0d298`](https://github.com/PrismJS/prism/commit/e6c0d298) + * Added `defdelagate` keyword and highlighting for function/module names ([#2709](https://github.com/PrismJS/prism/issues/2709)) [`59f725d7`](https://github.com/PrismJS/prism/commit/59f725d7) +* __F#__ + * Fixed comment false positive ([#2703](https://github.com/PrismJS/prism/issues/2703)) [`a5d7178c`](https://github.com/PrismJS/prism/commit/a5d7178c) +* __GraphQL__ + * Fixed `definition-query` and `definition-mutation` tokens ([#2964](https://github.com/PrismJS/prism/issues/2964)) [`bfd7fded`](https://github.com/PrismJS/prism/commit/bfd7fded) + * Added more detailed tokens ([#2939](https://github.com/PrismJS/prism/issues/2939)) [`34f24ac9`](https://github.com/PrismJS/prism/commit/34f24ac9) +* __Handlebars__ + * Added `hbs` alias ([#2874](https://github.com/PrismJS/prism/issues/2874)) [`43976351`](https://github.com/PrismJS/prism/commit/43976351) +* __HTTP__ + * Fixed body not being highlighted ([#2734](https://github.com/PrismJS/prism/issues/2734)) [`1dfc8271`](https://github.com/PrismJS/prism/commit/1dfc8271) + * More granular tokenization ([#2722](https://github.com/PrismJS/prism/issues/2722)) [`6183fd9b`](https://github.com/PrismJS/prism/commit/6183fd9b) + * Allow root path in request line ([#2711](https://github.com/PrismJS/prism/issues/2711)) [`4e7b2a82`](https://github.com/PrismJS/prism/commit/4e7b2a82) +* __Ini__ + * Consistently mimic Win32 INI parsing ([#2779](https://github.com/PrismJS/prism/issues/2779)) [`42d24fa2`](https://github.com/PrismJS/prism/commit/42d24fa2) +* __Java__ + * Improved generics ([#2812](https://github.com/PrismJS/prism/issues/2812)) [`4ec7535c`](https://github.com/PrismJS/prism/commit/4ec7535c) +* __JavaScript__ + * Added support for import assertions ([#2953](https://github.com/PrismJS/prism/issues/2953)) [`ab7c9953`](https://github.com/PrismJS/prism/commit/ab7c9953) + * Added support for RegExp Match Indices ([#2900](https://github.com/PrismJS/prism/issues/2900)) [`415651a0`](https://github.com/PrismJS/prism/commit/415651a0) + * Added hashbang and private getters/setters ([#2815](https://github.com/PrismJS/prism/issues/2815)) [`9c610ae6`](https://github.com/PrismJS/prism/commit/9c610ae6) + * Improved contextual keywords ([#2713](https://github.com/PrismJS/prism/issues/2713)) [`022f90a0`](https://github.com/PrismJS/prism/commit/022f90a0) +* __JS Templates__ + * Added SQL templates ([#2945](https://github.com/PrismJS/prism/issues/2945)) [`abab9104`](https://github.com/PrismJS/prism/commit/abab9104) +* __JSON__ + * Fixed backtracking issue in Safari ([#2691](https://github.com/PrismJS/prism/issues/2691)) [`cf28d1b2`](https://github.com/PrismJS/prism/commit/cf28d1b2) +* __Liquid__ + * Added Markup support, missing tokens, and other improvements ([#2950](https://github.com/PrismJS/prism/issues/2950)) [`ac1d12f9`](https://github.com/PrismJS/prism/commit/ac1d12f9) +* __Log file__ + * Minor improvements ([#2851](https://github.com/PrismJS/prism/issues/2851)) [`45ec4a88`](https://github.com/PrismJS/prism/commit/45ec4a88) +* __Markdown__ + * Improved code snippets ([#2967](https://github.com/PrismJS/prism/issues/2967)) [`e9477d83`](https://github.com/PrismJS/prism/commit/e9477d83) + * Workaround for incorrect highlighting due to double `wrap` hook ([#2719](https://github.com/PrismJS/prism/issues/2719)) [`2b355c98`](https://github.com/PrismJS/prism/commit/2b355c98) +* __Markup__ + * Added support for DOM event attributes ([#2702](https://github.com/PrismJS/prism/issues/2702)) [`8dbbbb35`](https://github.com/PrismJS/prism/commit/8dbbbb35) +* __nginx__ + * Complete rewrite ([#2793](https://github.com/PrismJS/prism/issues/2793)) [`5943f4cb`](https://github.com/PrismJS/prism/commit/5943f4cb) +* __PHP__ + * Fixed functions with namespaces ([#2889](https://github.com/PrismJS/prism/issues/2889)) [`87d79390`](https://github.com/PrismJS/prism/commit/87d79390) + * Fixed string interpolation ([#2864](https://github.com/PrismJS/prism/issues/2864)) [`cf3755cb`](https://github.com/PrismJS/prism/commit/cf3755cb) + * Added missing PHP 7.4 `fn` keyword ([#2858](https://github.com/PrismJS/prism/issues/2858)) [`e0ee93f1`](https://github.com/PrismJS/prism/commit/e0ee93f1) + * Fixed methods with keyword names + minor improvements ([#2818](https://github.com/PrismJS/prism/issues/2818)) [`7e8cd40d`](https://github.com/PrismJS/prism/commit/7e8cd40d) + * Improved constant support for PHP 8.1 enums ([#2770](https://github.com/PrismJS/prism/issues/2770)) [`8019e2f6`](https://github.com/PrismJS/prism/commit/8019e2f6) + * Added support for PHP 8.1 enums ([#2752](https://github.com/PrismJS/prism/issues/2752)) [`f79b0eef`](https://github.com/PrismJS/prism/commit/f79b0eef) + * Class names at the start of a string are now highlighted correctly ([#2731](https://github.com/PrismJS/prism/issues/2731)) [`04ef309c`](https://github.com/PrismJS/prism/commit/04ef309c) + * Numeral syntax improvements ([#2701](https://github.com/PrismJS/prism/issues/2701)) [`01af04ed`](https://github.com/PrismJS/prism/commit/01af04ed) +* __React JSX__ + * Added support for general spread expressions ([#2754](https://github.com/PrismJS/prism/issues/2754)) [`9f59f52d`](https://github.com/PrismJS/prism/commit/9f59f52d) + * Added support for comments inside tags ([#2728](https://github.com/PrismJS/prism/issues/2728)) [`30b0444f`](https://github.com/PrismJS/prism/commit/30b0444f) +* __reST (reStructuredText)__ + * Fixed `inline` pattern ([#2946](https://github.com/PrismJS/prism/issues/2946)) [`a7656de6`](https://github.com/PrismJS/prism/commit/a7656de6) +* __Ruby__ + * Added heredoc literals ([#2885](https://github.com/PrismJS/prism/issues/2885)) [`20b77bff`](https://github.com/PrismJS/prism/commit/20b77bff) + * Added missing regex flags ([#2845](https://github.com/PrismJS/prism/issues/2845)) [`3786f396`](https://github.com/PrismJS/prism/commit/3786f396) + * Added missing regex interpolation ([#2841](https://github.com/PrismJS/prism/issues/2841)) [`f08c2f7f`](https://github.com/PrismJS/prism/commit/f08c2f7f) +* __Scheme__ + * Added support for high Unicode characters ([#2693](https://github.com/PrismJS/prism/issues/2693)) [`0e61a7e1`](https://github.com/PrismJS/prism/commit/0e61a7e1) + * Added bracket support ([#2813](https://github.com/PrismJS/prism/issues/2813)) [`1c6c0bf3`](https://github.com/PrismJS/prism/commit/1c6c0bf3) +* __Shell session__ + * Fixed multi-line commands ([#2872](https://github.com/PrismJS/prism/issues/2872)) [`cda976b1`](https://github.com/PrismJS/prism/commit/cda976b1) + * Commands prefixed with a path are now detected ([#2686](https://github.com/PrismJS/prism/issues/2686)) [`c83fd0b8`](https://github.com/PrismJS/prism/commit/c83fd0b8) +* __SQL__ + * Added `ILIKE` operator ([#2704](https://github.com/PrismJS/prism/issues/2704)) [`6e34771f`](https://github.com/PrismJS/prism/commit/6e34771f) +* __Swift__ + * Added `some` keyword ([#2756](https://github.com/PrismJS/prism/issues/2756)) [`cf354ef5`](https://github.com/PrismJS/prism/commit/cf354ef5) +* __TypeScript__ + * Updated keywords ([#2861](https://github.com/PrismJS/prism/issues/2861)) [`fe98d536`](https://github.com/PrismJS/prism/commit/fe98d536) + * Added support for decorators ([#2820](https://github.com/PrismJS/prism/issues/2820)) [`31cc2142`](https://github.com/PrismJS/prism/commit/31cc2142) +* __VB.Net__ + * Improved strings, comments, and punctuation ([#2782](https://github.com/PrismJS/prism/issues/2782)) [`a68f1fb6`](https://github.com/PrismJS/prism/commit/a68f1fb6) +* __Xojo (REALbasic)__ + * `REM` is no longer highlighted as a keyword in comments ([#2823](https://github.com/PrismJS/prism/issues/2823)) [`ebbbfd47`](https://github.com/PrismJS/prism/commit/ebbbfd47) + * Added last missing Keyword "Selector" ([#2807](https://github.com/PrismJS/prism/issues/2807)) [`e32e043b`](https://github.com/PrismJS/prism/commit/e32e043b) + * Added missing keywords ([#2805](https://github.com/PrismJS/prism/issues/2805)) [`459365ec`](https://github.com/PrismJS/prism/commit/459365ec) + +### Updated plugins + +* Made Match Braces and Custom Class compatible ([#2947](https://github.com/PrismJS/prism/issues/2947)) [`4b55bd6a`](https://github.com/PrismJS/prism/commit/4b55bd6a) +* Consistent Prism check ([#2788](https://github.com/PrismJS/prism/issues/2788)) [`96335642`](https://github.com/PrismJS/prism/commit/96335642) +* __Command Line__ + * Don't modify empty code blocks ([#2896](https://github.com/PrismJS/prism/issues/2896)) [`c81c3319`](https://github.com/PrismJS/prism/commit/c81c3319) +* __Copy to Clipboard__ + * Removed ClipboardJS dependency ([#2784](https://github.com/PrismJS/prism/issues/2784)) [`d5e14e1a`](https://github.com/PrismJS/prism/commit/d5e14e1a) + * Fixed `clipboard.writeText` not working inside iFrames ([#2826](https://github.com/PrismJS/prism/issues/2826)) [`01b7b6f7`](https://github.com/PrismJS/prism/commit/01b7b6f7) + * Added support for custom styles ([#2789](https://github.com/PrismJS/prism/issues/2789)) [`4d7f75b0`](https://github.com/PrismJS/prism/commit/4d7f75b0) + * Make copy-to-clipboard configurable with multiple attributes ([#2723](https://github.com/PrismJS/prism/issues/2723)) [`2cb909e1`](https://github.com/PrismJS/prism/commit/2cb909e1) +* __File Highlight__ + * Fixed Prism check ([#2827](https://github.com/PrismJS/prism/issues/2827)) [`53d34b22`](https://github.com/PrismJS/prism/commit/53d34b22) +* __Line Highlight__ + * Fixed linkable line numbers not being initialized ([#2732](https://github.com/PrismJS/prism/issues/2732)) [`ccc73ab7`](https://github.com/PrismJS/prism/commit/ccc73ab7) +* __Previewers__ + * Use `classList` instead of `className` ([#2787](https://github.com/PrismJS/prism/issues/2787)) [`d298d46e`](https://github.com/PrismJS/prism/commit/d298d46e) + +### Other + +* __Core__ + * Add `tabindex` to code blocks to enable keyboard navigation ([#2799](https://github.com/PrismJS/prism/issues/2799)) [`dbf70515`](https://github.com/PrismJS/prism/commit/dbf70515) + * Fixed greedy rematching reach bug ([#2705](https://github.com/PrismJS/prism/issues/2705)) [`b37987d3`](https://github.com/PrismJS/prism/commit/b37987d3) + * Added support for plaintext ([#2738](https://github.com/PrismJS/prism/issues/2738)) [`970674cf`](https://github.com/PrismJS/prism/commit/970674cf) +* __Infrastructure__ + * Added ESLint + * Added `npm-run-all` to clean up test command ([#2938](https://github.com/PrismJS/prism/issues/2938)) [`5d3d8088`](https://github.com/PrismJS/prism/commit/5d3d8088) + * Added link to Q&A to issue templates ([#2834](https://github.com/PrismJS/prism/issues/2834)) [`7cd9e794`](https://github.com/PrismJS/prism/commit/7cd9e794) + * CI: Run tests with NodeJS 16.x ([#2888](https://github.com/PrismJS/prism/issues/2888)) [`b77317c5`](https://github.com/PrismJS/prism/commit/b77317c5) + * Dangerfile: Trim merge base ([#2761](https://github.com/PrismJS/prism/issues/2761)) [`45b0e82a`](https://github.com/PrismJS/prism/commit/45b0e82a) + * Dangerfile: Fixed how changed files are determined ([#2757](https://github.com/PrismJS/prism/issues/2757)) [`0feb266f`](https://github.com/PrismJS/prism/commit/0feb266f) + * Deps: Updated regex tooling ([#2923](https://github.com/PrismJS/prism/issues/2923)) [`ad9878ad`](https://github.com/PrismJS/prism/commit/ad9878ad) + * Tests: Added `--language` for patterns tests ([#2929](https://github.com/PrismJS/prism/issues/2929)) [`a62ef796`](https://github.com/PrismJS/prism/commit/a62ef796) + * Tests: Fixed polynomial backtracking test ([#2891](https://github.com/PrismJS/prism/issues/2891)) [`8dbf1217`](https://github.com/PrismJS/prism/commit/8dbf1217) + * Tests: Fixed languages test discovery [`a9a199b6`](https://github.com/PrismJS/prism/commit/a9a199b6) + * Tests: Test discovery should ignore unsupported file extensions ([#2886](https://github.com/PrismJS/prism/issues/2886)) [`4492c5ce`](https://github.com/PrismJS/prism/commit/4492c5ce) + * Tests: Exhaustive pattern tests ([#2688](https://github.com/PrismJS/prism/issues/2688)) [`53151404`](https://github.com/PrismJS/prism/commit/53151404) + * Tests: Fixed pretty print incorrectly calculating print width ([#2821](https://github.com/PrismJS/prism/issues/2821)) [`5bc405e7`](https://github.com/PrismJS/prism/commit/5bc405e7) + * Tests: Automatically normalize line ends ([#2934](https://github.com/PrismJS/prism/issues/2934)) [`99f3ddcd`](https://github.com/PrismJS/prism/commit/99f3ddcd) + * Tests: Added `--insert` and `--update` parameters to language test ([#2809](https://github.com/PrismJS/prism/issues/2809)) [`4c8b855d`](https://github.com/PrismJS/prism/commit/4c8b855d) + * Tests: Stricter `components.json` tests ([#2758](https://github.com/PrismJS/prism/issues/2758)) [`933af805`](https://github.com/PrismJS/prism/commit/933af805) +* __Website__ + * Copy to clipboard: Fixed highlighting ([#2725](https://github.com/PrismJS/prism/issues/2725)) [`7a790bf9`](https://github.com/PrismJS/prism/commit/7a790bf9) + * Readme: Mention `npm ci` ([#2899](https://github.com/PrismJS/prism/issues/2899)) [`91f3aaed`](https://github.com/PrismJS/prism/commit/91f3aaed) + * Readme: Added Node and npm version requirements ([#2790](https://github.com/PrismJS/prism/issues/2790)) [`cb220168`](https://github.com/PrismJS/prism/commit/cb220168) + * Readme: Update link to Chinese translation ([#2749](https://github.com/PrismJS/prism/issues/2749)) [`266cc700`](https://github.com/PrismJS/prism/commit/266cc700) + * Replace `my.cdn` in code sample with Handlebars-like placeholder ([#2906](https://github.com/PrismJS/prism/issues/2906)) [`80471181`](https://github.com/PrismJS/prism/commit/80471181) + * Set dummy domain for CDN ([#2905](https://github.com/PrismJS/prism/issues/2905)) [`38f1d289`](https://github.com/PrismJS/prism/commit/38f1d289) + * Added MySQL to "Used by" section ([#2785](https://github.com/PrismJS/prism/issues/2785)) [`9b784ebf`](https://github.com/PrismJS/prism/commit/9b784ebf) + * Improved basic usage section ([#2777](https://github.com/PrismJS/prism/issues/2777)) [`a1209930`](https://github.com/PrismJS/prism/commit/a1209930) + * Updated URL in Autolinker example ([#2751](https://github.com/PrismJS/prism/issues/2751)) [`ec9767d6`](https://github.com/PrismJS/prism/commit/ec9767d6) + * Added React native tutorial ([#2683](https://github.com/PrismJS/prism/issues/2683)) [`1506f345`](https://github.com/PrismJS/prism/commit/1506f345) + + +## 1.23.0 (2020-12-31) + +### New components + +* __Apex__ ([#2622](https://github.com/PrismJS/prism/issues/2622)) [`f0e2b70e`](https://github.com/PrismJS/prism/commit/f0e2b70e) +* __DataWeave__ ([#2659](https://github.com/PrismJS/prism/issues/2659)) [`0803525b`](https://github.com/PrismJS/prism/commit/0803525b) +* __PromQL__ ([#2628](https://github.com/PrismJS/prism/issues/2628)) [`8831c706`](https://github.com/PrismJS/prism/commit/8831c706) + +### Updated components + +* Fixed multiple vulnerable regexes ([#2584](https://github.com/PrismJS/prism/issues/2584)) [`c2f6a644`](https://github.com/PrismJS/prism/commit/c2f6a644) +* __Apache Configuration__ + * Update directive-flag to match `=` ([#2612](https://github.com/PrismJS/prism/issues/2612)) [`00bf00e3`](https://github.com/PrismJS/prism/commit/00bf00e3) +* __C-like__ + * Made all comments greedy ([#2680](https://github.com/PrismJS/prism/issues/2680)) [`0a3932fe`](https://github.com/PrismJS/prism/commit/0a3932fe) +* __C__ + * Better class name and macro name detection ([#2585](https://github.com/PrismJS/prism/issues/2585)) [`129faf5c`](https://github.com/PrismJS/prism/commit/129faf5c) +* __Content-Security-Policy__ + * Added missing directives and keywords ([#2664](https://github.com/PrismJS/prism/issues/2664)) [`f1541342`](https://github.com/PrismJS/prism/commit/f1541342) + * Do not highlight directive names with adjacent hyphens ([#2662](https://github.com/PrismJS/prism/issues/2662)) [`a7ccc16d`](https://github.com/PrismJS/prism/commit/a7ccc16d) +* __CSS__ + * Better HTML `style` attribute tokenization ([#2569](https://github.com/PrismJS/prism/issues/2569)) [`b04cbafe`](https://github.com/PrismJS/prism/commit/b04cbafe) +* __Java__ + * Improved package and class name detection ([#2599](https://github.com/PrismJS/prism/issues/2599)) [`0889bc7c`](https://github.com/PrismJS/prism/commit/0889bc7c) + * Added Java 15 keywords ([#2567](https://github.com/PrismJS/prism/issues/2567)) [`73f81c89`](https://github.com/PrismJS/prism/commit/73f81c89) +* __Java stack trace__ + * Added support stack frame element class loaders and modules ([#2658](https://github.com/PrismJS/prism/issues/2658)) [`0bb4f096`](https://github.com/PrismJS/prism/commit/0bb4f096) +* __Julia__ + * Removed constants that are not exported by default ([#2601](https://github.com/PrismJS/prism/issues/2601)) [`093c8175`](https://github.com/PrismJS/prism/commit/093c8175) +* __Kotlin__ + * Added support for backticks in function names ([#2489](https://github.com/PrismJS/prism/issues/2489)) [`a5107d5c`](https://github.com/PrismJS/prism/commit/a5107d5c) +* __Latte__ + * Fixed exponential backtracking ([#2682](https://github.com/PrismJS/prism/issues/2682)) [`89f1e182`](https://github.com/PrismJS/prism/commit/89f1e182) +* __Markdown__ + * Improved URL tokenization ([#2678](https://github.com/PrismJS/prism/issues/2678)) [`2af3e2c2`](https://github.com/PrismJS/prism/commit/2af3e2c2) + * Added support for YAML front matter ([#2634](https://github.com/PrismJS/prism/issues/2634)) [`5cf9cfbc`](https://github.com/PrismJS/prism/commit/5cf9cfbc) +* __PHP__ + * Added support for PHP 7.4 + other major improvements ([#2566](https://github.com/PrismJS/prism/issues/2566)) [`38808e64`](https://github.com/PrismJS/prism/commit/38808e64) + * Added support for PHP 8.0 features ([#2591](https://github.com/PrismJS/prism/issues/2591)) [`df922d90`](https://github.com/PrismJS/prism/commit/df922d90) + * Removed C-like dependency ([#2619](https://github.com/PrismJS/prism/issues/2619)) [`89ebb0b7`](https://github.com/PrismJS/prism/commit/89ebb0b7) + * Fixed exponential backtracking ([#2684](https://github.com/PrismJS/prism/issues/2684)) [`37b9c9a1`](https://github.com/PrismJS/prism/commit/37b9c9a1) +* __Sass (Scss)__ + * Added support for Sass modules ([#2643](https://github.com/PrismJS/prism/issues/2643)) [`deb238a6`](https://github.com/PrismJS/prism/commit/deb238a6) +* __Scheme__ + * Fixed number pattern ([#2648](https://github.com/PrismJS/prism/issues/2648)) [`e01ecd00`](https://github.com/PrismJS/prism/commit/e01ecd00) + * Fixed function and function-like false positives ([#2611](https://github.com/PrismJS/prism/issues/2611)) [`7951ca24`](https://github.com/PrismJS/prism/commit/7951ca24) +* __Shell session__ + * Fixed false positives because of links in command output ([#2649](https://github.com/PrismJS/prism/issues/2649)) [`8e76a978`](https://github.com/PrismJS/prism/commit/8e76a978) +* __TSX__ + * Temporary fix for the collisions of JSX tags and TS generics ([#2596](https://github.com/PrismJS/prism/issues/2596)) [`25bdb494`](https://github.com/PrismJS/prism/commit/25bdb494) + +### Updated plugins + +* Made Autoloader and Diff Highlight compatible ([#2580](https://github.com/PrismJS/prism/issues/2580)) [`7a74497a`](https://github.com/PrismJS/prism/commit/7a74497a) +* __Copy to Clipboard Button__ + * Set `type="button"` attribute for copy to clipboard plugin ([#2593](https://github.com/PrismJS/prism/issues/2593)) [`f59a85f1`](https://github.com/PrismJS/prism/commit/f59a85f1) +* __File Highlight__ + * Fixed IE compatibility problem ([#2656](https://github.com/PrismJS/prism/issues/2656)) [`3f4ae00d`](https://github.com/PrismJS/prism/commit/3f4ae00d) +* __Line Highlight__ + * Fixed top offset in combination with Line numbers ([#2237](https://github.com/PrismJS/prism/issues/2237)) [`b40f8f4b`](https://github.com/PrismJS/prism/commit/b40f8f4b) + * Fixed print background color ([#2668](https://github.com/PrismJS/prism/issues/2668)) [`cdb24abe`](https://github.com/PrismJS/prism/commit/cdb24abe) +* __Line Numbers__ + * Fixed null reference ([#2605](https://github.com/PrismJS/prism/issues/2605)) [`7cdfe556`](https://github.com/PrismJS/prism/commit/7cdfe556) +* __Treeview__ + * Fixed icons on dark themes ([#2631](https://github.com/PrismJS/prism/issues/2631)) [`7266e32f`](https://github.com/PrismJS/prism/commit/7266e32f) +* __Unescaped Markup__ + * Refactoring ([#2445](https://github.com/PrismJS/prism/issues/2445)) [`fc602822`](https://github.com/PrismJS/prism/commit/fc602822) + +### Other + +* Readme: Added alternative link for Chinese translation [`071232b4`](https://github.com/PrismJS/prism/commit/071232b4) +* Readme: Removed broken icon for Chinese translation ([#2670](https://github.com/PrismJS/prism/issues/2670)) [`2ea202b9`](https://github.com/PrismJS/prism/commit/2ea202b9) +* Readme: Grammar adjustments ([#2629](https://github.com/PrismJS/prism/issues/2629)) [`f217ab75`](https://github.com/PrismJS/prism/commit/f217ab75) +* __Core__ + * Moved pattern matching + lookbehind logic into function ([#2633](https://github.com/PrismJS/prism/issues/2633)) [`24574406`](https://github.com/PrismJS/prism/commit/24574406) + * Fixed bug with greedy matching ([#2632](https://github.com/PrismJS/prism/issues/2632)) [`8fa8dd24`](https://github.com/PrismJS/prism/commit/8fa8dd24) +* __Infrastructure__ + * Migrate from TravisCI -> GitHub Actions ([#2606](https://github.com/PrismJS/prism/issues/2606)) [`69132045`](https://github.com/PrismJS/prism/commit/69132045) + * Added Dangerfile and provide bundle size info ([#2608](https://github.com/PrismJS/prism/issues/2608)) [`9df20c5e`](https://github.com/PrismJS/prism/commit/9df20c5e) + * New `start` script to start local server ([#2491](https://github.com/PrismJS/prism/issues/2491)) [`0604793c`](https://github.com/PrismJS/prism/commit/0604793c) + * Added test for exponential backtracking ([#2590](https://github.com/PrismJS/prism/issues/2590)) [`05afbb10`](https://github.com/PrismJS/prism/commit/05afbb10) + * Added test for polynomial backtracking ([#2597](https://github.com/PrismJS/prism/issues/2597)) [`e644178b`](https://github.com/PrismJS/prism/commit/e644178b) + * Tests: Better pretty print ([#2600](https://github.com/PrismJS/prism/issues/2600)) [`8bfcc819`](https://github.com/PrismJS/prism/commit/8bfcc819) + * Tests: Fixed sorted language list test ([#2623](https://github.com/PrismJS/prism/issues/2623)) [`2d3a1267`](https://github.com/PrismJS/prism/commit/2d3a1267) + * Tests: Stricter pattern for nice-token-names test ([#2588](https://github.com/PrismJS/prism/issues/2588)) [`0df60be1`](https://github.com/PrismJS/prism/commit/0df60be1) + * Tests: Added strict checks for `Prism.languages.extend` ([#2572](https://github.com/PrismJS/prism/issues/2572)) [`8828500e`](https://github.com/PrismJS/prism/commit/8828500e) +* __Website__ + * Test page: Added "Share" option ([#2575](https://github.com/PrismJS/prism/issues/2575)) [`b5f4f10e`](https://github.com/PrismJS/prism/commit/b5f4f10e) + * Test page: Don't trigger ad-blockers with class ([#2677](https://github.com/PrismJS/prism/issues/2677)) [`df0738e9`](https://github.com/PrismJS/prism/commit/df0738e9) + * Thousands -> millions [`9f82de50`](https://github.com/PrismJS/prism/commit/9f82de50) + * Unescaped Markup: More doc regarding comments ([#2652](https://github.com/PrismJS/prism/issues/2652)) [`add3736a`](https://github.com/PrismJS/prism/commit/add3736a) + * Website: Added and updated documentation ([#2654](https://github.com/PrismJS/prism/issues/2654)) [`8e660495`](https://github.com/PrismJS/prism/commit/8e660495) + * Website: Updated and improved guide on "Extending Prism" page ([#2586](https://github.com/PrismJS/prism/issues/2586)) [`8e1f38ff`](https://github.com/PrismJS/prism/commit/8e1f38ff) + +## 1.22.0 (2020-10-10) + +### New components + +* __Birb__ ([#2542](https://github.com/PrismJS/prism/issues/2542)) [`4d31e22a`](https://github.com/PrismJS/prism/commit/4d31e22a) +* __BSL (1C:Enterprise)__ & __OneScript__ ([#2520](https://github.com/PrismJS/prism/issues/2520)) [`5c33f0bb`](https://github.com/PrismJS/prism/commit/5c33f0bb) +* __MongoDB__ ([#2518](https://github.com/PrismJS/prism/issues/2518)) [`004eaa74`](https://github.com/PrismJS/prism/commit/004eaa74) +* __Naninovel Script__ ([#2494](https://github.com/PrismJS/prism/issues/2494)) [`388ad996`](https://github.com/PrismJS/prism/commit/388ad996) +* __PureScript__ ([#2526](https://github.com/PrismJS/prism/issues/2526)) [`ad748a00`](https://github.com/PrismJS/prism/commit/ad748a00) +* __SML__ & __SML/NJ__ ([#2537](https://github.com/PrismJS/prism/issues/2537)) [`cb75d9e2`](https://github.com/PrismJS/prism/commit/cb75d9e2) +* __Stan__ ([#2490](https://github.com/PrismJS/prism/issues/2490)) [`2da2beba`](https://github.com/PrismJS/prism/commit/2da2beba) +* __TypoScript__ & __TSConfig__ ([#2505](https://github.com/PrismJS/prism/issues/2505)) [`bf115f47`](https://github.com/PrismJS/prism/commit/bf115f47) + +### Updated components + +* Removed duplicate alternatives in various languages ([#2524](https://github.com/PrismJS/prism/issues/2524)) [`fa2225ff`](https://github.com/PrismJS/prism/commit/fa2225ff) +* __Haskell__ + * Improvements ([#2535](https://github.com/PrismJS/prism/issues/2535)) [`e023044c`](https://github.com/PrismJS/prism/commit/e023044c) +* __JS Extras__ + * Highlight import and export bindings ([#2533](https://github.com/PrismJS/prism/issues/2533)) [`c51ababb`](https://github.com/PrismJS/prism/commit/c51ababb) + * Added control-flow keywords ([#2529](https://github.com/PrismJS/prism/issues/2529)) [`bcef22af`](https://github.com/PrismJS/prism/commit/bcef22af) +* __PHP__ + * Added `match` keyword (PHP 8.0) ([#2574](https://github.com/PrismJS/prism/issues/2574)) [`1761513e`](https://github.com/PrismJS/prism/commit/1761513e) +* __Processing__ + * Fixed function pattern ([#2564](https://github.com/PrismJS/prism/issues/2564)) [`35cbc02f`](https://github.com/PrismJS/prism/commit/35cbc02f) +* __Regex__ + * Changed how languages embed regexes ([#2532](https://github.com/PrismJS/prism/issues/2532)) [`f62ca787`](https://github.com/PrismJS/prism/commit/f62ca787) +* __Rust__ + * Fixed Unicode char literals ([#2550](https://github.com/PrismJS/prism/issues/2550)) [`3b4f14ca`](https://github.com/PrismJS/prism/commit/3b4f14ca) +* __Scheme__ + * Added support for R7RS syntax ([#2525](https://github.com/PrismJS/prism/issues/2525)) [`e4f6ccac`](https://github.com/PrismJS/prism/commit/e4f6ccac) +* __Shell session__ + * Added aliases ([#2548](https://github.com/PrismJS/prism/issues/2548)) [`bfb36748`](https://github.com/PrismJS/prism/commit/bfb36748) + * Highlight all commands after the start of any Heredoc string ([#2509](https://github.com/PrismJS/prism/issues/2509)) [`6c921801`](https://github.com/PrismJS/prism/commit/6c921801) +* __YAML__ + * Improved key pattern ([#2561](https://github.com/PrismJS/prism/issues/2561)) [`59853a52`](https://github.com/PrismJS/prism/commit/59853a52) + +### Updated plugins + +* __Autoloader__ + * Fixed file detection regexes ([#2549](https://github.com/PrismJS/prism/issues/2549)) [`d36ea993`](https://github.com/PrismJS/prism/commit/d36ea993) +* __Match braces__ + * Fixed JS interpolation punctuation ([#2541](https://github.com/PrismJS/prism/issues/2541)) [`6b47133d`](https://github.com/PrismJS/prism/commit/6b47133d) +* __Show Language__ + * Added title for plain text ([#2555](https://github.com/PrismJS/prism/issues/2555)) [`a409245e`](https://github.com/PrismJS/prism/commit/a409245e) + +### Other + +* Tests: Added an option to accept the actual token stream ([#2515](https://github.com/PrismJS/prism/issues/2515)) [`bafab634`](https://github.com/PrismJS/prism/commit/bafab634) +* __Core__ + * Docs: Minor improvement ([#2513](https://github.com/PrismJS/prism/issues/2513)) [`206dc80f`](https://github.com/PrismJS/prism/commit/206dc80f) +* __Infrastructure__ + * JSDoc: Fixed line ends ([#2523](https://github.com/PrismJS/prism/issues/2523)) [`bf169e5f`](https://github.com/PrismJS/prism/commit/bf169e5f) +* __Website__ + * Website: Added new SB101 tutorial replacing the Crambler one ([#2576](https://github.com/PrismJS/prism/issues/2576)) [`655f985c`](https://github.com/PrismJS/prism/commit/655f985c) + * Website: Fix typo on homepage by adding missing word add ([#2570](https://github.com/PrismJS/prism/issues/2570)) [`8ae6a4ba`](https://github.com/PrismJS/prism/commit/8ae6a4ba) + * Custom class: Improved doc ([#2512](https://github.com/PrismJS/prism/issues/2512)) [`5ad6cb23`](https://github.com/PrismJS/prism/commit/5ad6cb23) + +## 1.21.0 (2020-08-06) + +### New components + +* __.ignore__ & __.gitignore__ & __.hgignore__ & __.npmignore__ ([#2481](https://github.com/PrismJS/prism/issues/2481)) [`3fcce6fe`](https://github.com/PrismJS/prism/commit/3fcce6fe) +* __Agda__ ([#2430](https://github.com/PrismJS/prism/issues/2430)) [`3a127c7d`](https://github.com/PrismJS/prism/commit/3a127c7d) +* __AL__ ([#2300](https://github.com/PrismJS/prism/issues/2300)) [`de21eb64`](https://github.com/PrismJS/prism/commit/de21eb64) +* __Cypher__ ([#2459](https://github.com/PrismJS/prism/issues/2459)) [`398e2943`](https://github.com/PrismJS/prism/commit/398e2943) +* __Dhall__ ([#2473](https://github.com/PrismJS/prism/issues/2473)) [`649e51e5`](https://github.com/PrismJS/prism/commit/649e51e5) +* __EditorConfig__ ([#2471](https://github.com/PrismJS/prism/issues/2471)) [`ed8fff91`](https://github.com/PrismJS/prism/commit/ed8fff91) +* __HLSL__ ([#2318](https://github.com/PrismJS/prism/issues/2318)) [`87a5c7ae`](https://github.com/PrismJS/prism/commit/87a5c7ae) +* __JS stack trace__ ([#2418](https://github.com/PrismJS/prism/issues/2418)) [`ae0327b3`](https://github.com/PrismJS/prism/commit/ae0327b3) +* __PeopleCode__ ([#2302](https://github.com/PrismJS/prism/issues/2302)) [`bd4d8165`](https://github.com/PrismJS/prism/commit/bd4d8165) +* __PureBasic__ ([#2369](https://github.com/PrismJS/prism/issues/2369)) [`d0c1c70d`](https://github.com/PrismJS/prism/commit/d0c1c70d) +* __Racket__ ([#2315](https://github.com/PrismJS/prism/issues/2315)) [`053016ef`](https://github.com/PrismJS/prism/commit/053016ef) +* __Smali__ ([#2419](https://github.com/PrismJS/prism/issues/2419)) [`22eb5cad`](https://github.com/PrismJS/prism/commit/22eb5cad) +* __Structured Text (IEC 61131-3)__ ([#2311](https://github.com/PrismJS/prism/issues/2311)) [`8704cdfb`](https://github.com/PrismJS/prism/commit/8704cdfb) +* __UnrealScript__ ([#2305](https://github.com/PrismJS/prism/issues/2305)) [`1093ceb3`](https://github.com/PrismJS/prism/commit/1093ceb3) +* __WarpScript__ ([#2307](https://github.com/PrismJS/prism/issues/2307)) [`cde5b0fa`](https://github.com/PrismJS/prism/commit/cde5b0fa) +* __XML doc (.net)__ ([#2340](https://github.com/PrismJS/prism/issues/2340)) [`caec5e30`](https://github.com/PrismJS/prism/commit/caec5e30) +* __YANG__ ([#2467](https://github.com/PrismJS/prism/issues/2467)) [`ed1df1e1`](https://github.com/PrismJS/prism/commit/ed1df1e1) + +### Updated components + +* Markup & JSON: Added new aliases ([#2390](https://github.com/PrismJS/prism/issues/2390)) [`9782cfe6`](https://github.com/PrismJS/prism/commit/9782cfe6) +* Fixed several cases of exponential backtracking ([#2268](https://github.com/PrismJS/prism/issues/2268)) [`7a554b5f`](https://github.com/PrismJS/prism/commit/7a554b5f) +* __APL__ + * Added `⍥` ([#2409](https://github.com/PrismJS/prism/issues/2409)) [`0255cb6a`](https://github.com/PrismJS/prism/commit/0255cb6a) +* __AutoHotkey__ + * Added missing `format` built-in ([#2450](https://github.com/PrismJS/prism/issues/2450)) [`7c66cfc4`](https://github.com/PrismJS/prism/commit/7c66cfc4) + * Improved comments and other improvements ([#2412](https://github.com/PrismJS/prism/issues/2412)) [`ddf3cc62`](https://github.com/PrismJS/prism/commit/ddf3cc62) + * Added missing definitions ([#2400](https://github.com/PrismJS/prism/issues/2400)) [`4fe03676`](https://github.com/PrismJS/prism/commit/4fe03676) +* __Bash__ + * Added `composer` command ([#2298](https://github.com/PrismJS/prism/issues/2298)) [`044dd271`](https://github.com/PrismJS/prism/commit/044dd271) +* __Batch__ + * Fix escaped double quote ([#2485](https://github.com/PrismJS/prism/issues/2485)) [`f0f8210c`](https://github.com/PrismJS/prism/commit/f0f8210c) +* __C__ + * Improved macros and expressions ([#2440](https://github.com/PrismJS/prism/issues/2440)) [`8a72fa6f`](https://github.com/PrismJS/prism/commit/8a72fa6f) + * Improved macros ([#2320](https://github.com/PrismJS/prism/issues/2320)) [`fdcf7ed2`](https://github.com/PrismJS/prism/commit/fdcf7ed2) +* __C#__ + * Improved pattern matching ([#2411](https://github.com/PrismJS/prism/issues/2411)) [`7f341fc1`](https://github.com/PrismJS/prism/commit/7f341fc1) + * Fixed adjacent string interpolations ([#2402](https://github.com/PrismJS/prism/issues/2402)) [`2a2e79ed`](https://github.com/PrismJS/prism/commit/2a2e79ed) +* __C++__ + * Added support for default comparison operator ([#2426](https://github.com/PrismJS/prism/issues/2426)) [`8e9d161c`](https://github.com/PrismJS/prism/commit/8e9d161c) + * Improved class name detection ([#2348](https://github.com/PrismJS/prism/issues/2348)) [`e3fe9040`](https://github.com/PrismJS/prism/commit/e3fe9040) + * Fixed `enum class` class names ([#2342](https://github.com/PrismJS/prism/issues/2342)) [`30b4e254`](https://github.com/PrismJS/prism/commit/30b4e254) +* __Content-Security-Policy__ + * Fixed directives ([#2461](https://github.com/PrismJS/prism/issues/2461)) [`537a9e80`](https://github.com/PrismJS/prism/commit/537a9e80) +* __CSS__ + * Improved url and added keywords ([#2432](https://github.com/PrismJS/prism/issues/2432)) [`964de5a1`](https://github.com/PrismJS/prism/commit/964de5a1) +* __CSS Extras__ + * Optimized `class` and `id` patterns ([#2359](https://github.com/PrismJS/prism/issues/2359)) [`fdbc4473`](https://github.com/PrismJS/prism/commit/fdbc4473) + * Renamed `attr-{name,value}` tokens and added tokens for combinators and selector lists ([#2373](https://github.com/PrismJS/prism/issues/2373)) [`e523f5d0`](https://github.com/PrismJS/prism/commit/e523f5d0) +* __Dart__ + * Added missing keywords ([#2355](https://github.com/PrismJS/prism/issues/2355)) [`4172ab6f`](https://github.com/PrismJS/prism/commit/4172ab6f) +* __Diff__ + * Added `prefix` token ([#2281](https://github.com/PrismJS/prism/issues/2281)) [`fd432a5b`](https://github.com/PrismJS/prism/commit/fd432a5b) +* __Docker__ + * Fixed strings inside comments ([#2428](https://github.com/PrismJS/prism/issues/2428)) [`37273a6f`](https://github.com/PrismJS/prism/commit/37273a6f) +* __EditorConfig__ + * Trim spaces before key and section title ([#2482](https://github.com/PrismJS/prism/issues/2482)) [`0c30c582`](https://github.com/PrismJS/prism/commit/0c30c582) +* __EJS__ + * Added `eta` alias ([#2282](https://github.com/PrismJS/prism/issues/2282)) [`0cfb6c5f`](https://github.com/PrismJS/prism/commit/0cfb6c5f) +* __GLSL__ + * Improvements ([#2321](https://github.com/PrismJS/prism/issues/2321)) [`33e49956`](https://github.com/PrismJS/prism/commit/33e49956) +* __GraphQL__ + * Added missing keywords ([#2407](https://github.com/PrismJS/prism/issues/2407)) [`de8ed16d`](https://github.com/PrismJS/prism/commit/de8ed16d) + * Added support for multi-line strings and descriptions ([#2406](https://github.com/PrismJS/prism/issues/2406)) [`9e64c62e`](https://github.com/PrismJS/prism/commit/9e64c62e) +* __Io__ + * Fixed operator pattern ([#2365](https://github.com/PrismJS/prism/issues/2365)) [`d6055771`](https://github.com/PrismJS/prism/commit/d6055771) +* __Java__ + * Fixed `namespace` token ([#2295](https://github.com/PrismJS/prism/issues/2295)) [`62e184bb`](https://github.com/PrismJS/prism/commit/62e184bb) +* __JavaDoc__ + * Improvements ([#2324](https://github.com/PrismJS/prism/issues/2324)) [`032910ba`](https://github.com/PrismJS/prism/commit/032910ba) +* __JavaScript__ + * Improved regex detection ([#2465](https://github.com/PrismJS/prism/issues/2465)) [`4f55052f`](https://github.com/PrismJS/prism/commit/4f55052f) + * Improved `get`/`set` and parameter detection ([#2387](https://github.com/PrismJS/prism/issues/2387)) [`ed715158`](https://github.com/PrismJS/prism/commit/ed715158) + * Added support for logical assignment operators ([#2378](https://github.com/PrismJS/prism/issues/2378)) [`b28f21b7`](https://github.com/PrismJS/prism/commit/b28f21b7) +* __JSDoc__ + * Improvements ([#2466](https://github.com/PrismJS/prism/issues/2466)) [`2805ae35`](https://github.com/PrismJS/prism/commit/2805ae35) +* __JSON__ + * Greedy comments ([#2479](https://github.com/PrismJS/prism/issues/2479)) [`158caf52`](https://github.com/PrismJS/prism/commit/158caf52) +* __Julia__ + * Improved strings, comments, and other patterns ([#2363](https://github.com/PrismJS/prism/issues/2363)) [`81cf2344`](https://github.com/PrismJS/prism/commit/81cf2344) +* __Kotlin__ + * Added `kt` and `kts` aliases ([#2474](https://github.com/PrismJS/prism/issues/2474)) [`67f97e2e`](https://github.com/PrismJS/prism/commit/67f97e2e) +* __Markup__ + * Added tokens inside DOCTYPE ([#2349](https://github.com/PrismJS/prism/issues/2349)) [`9c7bc820`](https://github.com/PrismJS/prism/commit/9c7bc820) + * Added `attr-equals` alias for the attribute `=` sign ([#2350](https://github.com/PrismJS/prism/issues/2350)) [`96a0116e`](https://github.com/PrismJS/prism/commit/96a0116e) + * Added alias for named entities ([#2351](https://github.com/PrismJS/prism/issues/2351)) [`ab1e34ae`](https://github.com/PrismJS/prism/commit/ab1e34ae) + * Added support for SSML ([#2306](https://github.com/PrismJS/prism/issues/2306)) [`eb70070d`](https://github.com/PrismJS/prism/commit/eb70070d) +* __Objective-C__ + * Added `objc` alias ([#2331](https://github.com/PrismJS/prism/issues/2331)) [`67c6b7af`](https://github.com/PrismJS/prism/commit/67c6b7af) +* __PowerShell__ + * New functions pattern bases on naming conventions ([#2301](https://github.com/PrismJS/prism/issues/2301)) [`fec39bcf`](https://github.com/PrismJS/prism/commit/fec39bcf) +* __Protocol Buffers__ + * Added support for RPC syntax ([#2414](https://github.com/PrismJS/prism/issues/2414)) [`939a17c4`](https://github.com/PrismJS/prism/commit/939a17c4) +* __Pug__ + * Improved class and id detection in tags ([#2358](https://github.com/PrismJS/prism/issues/2358)) [`7f948ecb`](https://github.com/PrismJS/prism/commit/7f948ecb) +* __Python__ + * Fixed empty multiline strings ([#2344](https://github.com/PrismJS/prism/issues/2344)) [`c9324476`](https://github.com/PrismJS/prism/commit/c9324476) +* __Regex__ + * Added aliases and minor improvements ([#2325](https://github.com/PrismJS/prism/issues/2325)) [`8a72830a`](https://github.com/PrismJS/prism/commit/8a72830a) +* __Ren'py__ + * Added `rpy` alias ([#2385](https://github.com/PrismJS/prism/issues/2385)) [`4935b5ca`](https://github.com/PrismJS/prism/commit/4935b5ca) +* __Ruby__ + * Optimized `regex` and `string` patterns ([#2354](https://github.com/PrismJS/prism/issues/2354)) [`b526e8c0`](https://github.com/PrismJS/prism/commit/b526e8c0) +* __Rust__ + * Improvements ([#2464](https://github.com/PrismJS/prism/issues/2464)) [`2ff40fe0`](https://github.com/PrismJS/prism/commit/2ff40fe0) + * Improvements ([#2332](https://github.com/PrismJS/prism/issues/2332)) [`194c5429`](https://github.com/PrismJS/prism/commit/194c5429) +* __SAS__ + * Improved macro string functions ([#2463](https://github.com/PrismJS/prism/issues/2463)) [`278316ca`](https://github.com/PrismJS/prism/commit/278316ca) + * Handle edge case of string macro functions ([#2451](https://github.com/PrismJS/prism/issues/2451)) [`a0a9f1ef`](https://github.com/PrismJS/prism/commit/a0a9f1ef) + * Improved comments in `proc groovy` and `proc lua` ([#2392](https://github.com/PrismJS/prism/issues/2392)) [`475a5903`](https://github.com/PrismJS/prism/commit/475a5903) +* __Scheme__ + * Adjusted lookbehind for literals ([#2396](https://github.com/PrismJS/prism/issues/2396)) [`1e3f542b`](https://github.com/PrismJS/prism/commit/1e3f542b) + * Improved lambda parameter ([#2346](https://github.com/PrismJS/prism/issues/2346)) [`1946918a`](https://github.com/PrismJS/prism/commit/1946918a) + * Consistent lookaheads ([#2322](https://github.com/PrismJS/prism/issues/2322)) [`d2541d54`](https://github.com/PrismJS/prism/commit/d2541d54) + * Improved boolean ([#2316](https://github.com/PrismJS/prism/issues/2316)) [`e27e65af`](https://github.com/PrismJS/prism/commit/e27e65af) + * Added missing special keywords ([#2304](https://github.com/PrismJS/prism/issues/2304)) [`ac297ba5`](https://github.com/PrismJS/prism/commit/ac297ba5) + * Improvements ([#2263](https://github.com/PrismJS/prism/issues/2263)) [`9a49f78f`](https://github.com/PrismJS/prism/commit/9a49f78f) +* __Solidity (Ethereum)__ + * Added `sol` alias ([#2382](https://github.com/PrismJS/prism/issues/2382)) [`6352213a`](https://github.com/PrismJS/prism/commit/6352213a) +* __SQL__ + * Added PostgreSQL `RETURNING` keyword ([#2476](https://github.com/PrismJS/prism/issues/2476)) [`bea7a585`](https://github.com/PrismJS/prism/commit/bea7a585) +* __Stylus__ + * Fixed comments breaking declarations + minor improvements ([#2372](https://github.com/PrismJS/prism/issues/2372)) [`6d663b6e`](https://github.com/PrismJS/prism/commit/6d663b6e) + * New tokens and other improvements ([#2368](https://github.com/PrismJS/prism/issues/2368)) [`2c10ef8a`](https://github.com/PrismJS/prism/commit/2c10ef8a) + * Fixed comments breaking strings and URLs ([#2361](https://github.com/PrismJS/prism/issues/2361)) [`0d65d6c9`](https://github.com/PrismJS/prism/commit/0d65d6c9) +* __T4 Text Templates (VB)__ + * Use the correct VB variant ([#2341](https://github.com/PrismJS/prism/issues/2341)) [`b6093339`](https://github.com/PrismJS/prism/commit/b6093339) +* __TypeScript__ + * Added `asserts` keyword and other improvements ([#2280](https://github.com/PrismJS/prism/issues/2280)) [`a197cfcd`](https://github.com/PrismJS/prism/commit/a197cfcd) +* __Visual Basic__ + * Added VBA alias ([#2469](https://github.com/PrismJS/prism/issues/2469)) [`78161d60`](https://github.com/PrismJS/prism/commit/78161d60) + * Added `until` keyword ([#2423](https://github.com/PrismJS/prism/issues/2423)) [`a13ee8d9`](https://github.com/PrismJS/prism/commit/a13ee8d9) + * Added missing keywords ([#2376](https://github.com/PrismJS/prism/issues/2376)) [`ba5ac1da`](https://github.com/PrismJS/prism/commit/ba5ac1da) + +### Updated plugins + +* File Highlight & JSONP Highlight update ([#1974](https://github.com/PrismJS/prism/issues/1974)) [`afea17d9`](https://github.com/PrismJS/prism/commit/afea17d9) +* Added general de/activation mechanism for plugins ([#2434](https://github.com/PrismJS/prism/issues/2434)) [`a36e96ab`](https://github.com/PrismJS/prism/commit/a36e96ab) +* __Autoloader__ + * Fixed bug breaking Autoloader ([#2449](https://github.com/PrismJS/prism/issues/2449)) [`a3416bf3`](https://github.com/PrismJS/prism/commit/a3416bf3) + * Fixed `data-dependencies` and extensions ([#2326](https://github.com/PrismJS/prism/issues/2326)) [`1654b25f`](https://github.com/PrismJS/prism/commit/1654b25f) + * Improved path detection and other minor improvements ([#2245](https://github.com/PrismJS/prism/issues/2245)) [`5cdc3251`](https://github.com/PrismJS/prism/commit/5cdc3251) +* __Command Line__ + * Some refactoring ([#2290](https://github.com/PrismJS/prism/issues/2290)) [`8c9c2896`](https://github.com/PrismJS/prism/commit/8c9c2896) + * Correctly rehighlight elements ([#2291](https://github.com/PrismJS/prism/issues/2291)) [`e6b2c6fc`](https://github.com/PrismJS/prism/commit/e6b2c6fc) +* __Line Highlight__ + * Added linkable line numbers ([#2328](https://github.com/PrismJS/prism/issues/2328)) [`eb82e804`](https://github.com/PrismJS/prism/commit/eb82e804) +* __Line Numbers__ + * Improved resize performance ([#2125](https://github.com/PrismJS/prism/issues/2125)) [`b96ed225`](https://github.com/PrismJS/prism/commit/b96ed225) + * Fixed TypeError when `lineNumberWrapper` is null ([#2337](https://github.com/PrismJS/prism/issues/2337)) [`4b61661d`](https://github.com/PrismJS/prism/commit/4b61661d) + * Exposed `_resizeElement` function ([#2288](https://github.com/PrismJS/prism/issues/2288)) [`893f2a79`](https://github.com/PrismJS/prism/commit/893f2a79) +* __Previewers__ + * Fixed XSS ([#2506](https://github.com/PrismJS/prism/issues/2506)) [`8bba4880`](https://github.com/PrismJS/prism/commit/8bba4880) +* __Unescaped Markup__ + * No longer requires `Prism.languages.markup` ([#2444](https://github.com/PrismJS/prism/issues/2444)) [`af132dd3`](https://github.com/PrismJS/prism/commit/af132dd3) + +### Updated themes + +* __Coy__ + * Minor improvements ([#2176](https://github.com/PrismJS/prism/issues/2176)) [`7109c18c`](https://github.com/PrismJS/prism/commit/7109c18c) +* __Default__ + * Added a comment that declares the background color of `operator` tokens as intentional ([#2309](https://github.com/PrismJS/prism/issues/2309)) [`937e2691`](https://github.com/PrismJS/prism/commit/937e2691) +* __Okaidia__ + * Update comment text color to meet WCAG contrast recommendations to AA level ([#2292](https://github.com/PrismJS/prism/issues/2292)) [`06495f90`](https://github.com/PrismJS/prism/commit/06495f90) + +### Other + +* Changelog: Fixed v1.20.0 release date [`cb6349e2`](https://github.com/PrismJS/prism/commit/cb6349e2) +* __Core__ + * Fixed greedy matching bug ([#2032](https://github.com/PrismJS/prism/issues/2032)) [`40285203`](https://github.com/PrismJS/prism/commit/40285203) + * Added JSDoc ([#1782](https://github.com/PrismJS/prism/issues/1782)) [`4ff555be`](https://github.com/PrismJS/prism/commit/4ff555be) +* __Infrastructure__ + * Update Git repo URL in package.json ([#2334](https://github.com/PrismJS/prism/issues/2334)) [`10f43275`](https://github.com/PrismJS/prism/commit/10f43275) + * Added docs to ignore files ([#2437](https://github.com/PrismJS/prism/issues/2437)) [`05c9f20b`](https://github.com/PrismJS/prism/commit/05c9f20b) + * Added `npm run build` command ([#2356](https://github.com/PrismJS/prism/issues/2356)) [`ff74a610`](https://github.com/PrismJS/prism/commit/ff74a610) + * gulp: Improved `inlineRegexSource` ([#2296](https://github.com/PrismJS/prism/issues/2296)) [`abb800dd`](https://github.com/PrismJS/prism/commit/abb800dd) + * gulp: Fixed language map ([#2283](https://github.com/PrismJS/prism/issues/2283)) [`11053193`](https://github.com/PrismJS/prism/commit/11053193) + * gulp: Removed `premerge` task ([#2357](https://github.com/PrismJS/prism/issues/2357)) [`5ff7932b`](https://github.com/PrismJS/prism/commit/5ff7932b) + * Tests are now faster ([#2165](https://github.com/PrismJS/prism/issues/2165)) [`e756be3f`](https://github.com/PrismJS/prism/commit/e756be3f) + * Tests: Added extra newlines in pretty token streams ([#2070](https://github.com/PrismJS/prism/issues/2070)) [`681adeef`](https://github.com/PrismJS/prism/commit/681adeef) + * Tests: Added test for identifier support across all languages ([#2371](https://github.com/PrismJS/prism/issues/2371)) [`48fac3b2`](https://github.com/PrismJS/prism/commit/48fac3b2) + * Tests: Added test to sort the language list ([#2222](https://github.com/PrismJS/prism/issues/2222)) [`a3758728`](https://github.com/PrismJS/prism/commit/a3758728) + * Tests: Always pretty-print token streams ([#2421](https://github.com/PrismJS/prism/issues/2421)) [`583e7eb5`](https://github.com/PrismJS/prism/commit/583e7eb5) + * Tests: Always use `components.json` ([#2370](https://github.com/PrismJS/prism/issues/2370)) [`e416341f`](https://github.com/PrismJS/prism/commit/e416341f) + * Tests: Better error messages for pattern tests ([#2364](https://github.com/PrismJS/prism/issues/2364)) [`10ca6433`](https://github.com/PrismJS/prism/commit/10ca6433) + * Tests: Included `console` in VM context ([#2353](https://github.com/PrismJS/prism/issues/2353)) [`b4ed5ded`](https://github.com/PrismJS/prism/commit/b4ed5ded) +* __Website__ + * Fixed typos "Prims" ([#2455](https://github.com/PrismJS/prism/issues/2455)) [`dfa5498a`](https://github.com/PrismJS/prism/commit/dfa5498a) + * New assets directory for all web-only files ([#2180](https://github.com/PrismJS/prism/issues/2180)) [`91fdd0b1`](https://github.com/PrismJS/prism/commit/91fdd0b1) + * Improvements ([#2053](https://github.com/PrismJS/prism/issues/2053)) [`ce0fa227`](https://github.com/PrismJS/prism/commit/ce0fa227) + * Fixed Treeview page ([#2484](https://github.com/PrismJS/prism/issues/2484)) [`a0efa40b`](https://github.com/PrismJS/prism/commit/a0efa40b) + * Line Numbers: Fixed class name on website [`453079bf`](https://github.com/PrismJS/prism/commit/453079bf) + * Line Numbers: Improved documentation ([#2456](https://github.com/PrismJS/prism/issues/2456)) [`447429f0`](https://github.com/PrismJS/prism/commit/447429f0) + * Line Numbers: Style inline code on website ([#2435](https://github.com/PrismJS/prism/issues/2435)) [`ad9c13e2`](https://github.com/PrismJS/prism/commit/ad9c13e2) + * Filter highlightAll: Fixed typo ([#2391](https://github.com/PrismJS/prism/issues/2391)) [`55bf7ec1`](https://github.com/PrismJS/prism/commit/55bf7ec1) + +## 1.20.0 (2020-04-04) + +### New components + +* __Concurnas__ ([#2206](https://github.com/PrismJS/prism/issues/2206)) [`b24f7348`](https://github.com/PrismJS/prism/commit/b24f7348) +* __DAX__ ([#2248](https://github.com/PrismJS/prism/issues/2248)) [`9227853f`](https://github.com/PrismJS/prism/commit/9227853f) +* __Excel Formula__ ([#2219](https://github.com/PrismJS/prism/issues/2219)) [`bf4f7bfa`](https://github.com/PrismJS/prism/commit/bf4f7bfa) +* __Factor__ ([#2203](https://github.com/PrismJS/prism/issues/2203)) [`f941102e`](https://github.com/PrismJS/prism/commit/f941102e) +* __LLVM IR__ ([#2221](https://github.com/PrismJS/prism/issues/2221)) [`43efde2e`](https://github.com/PrismJS/prism/commit/43efde2e) +* __PowerQuery__ ([#2250](https://github.com/PrismJS/prism/issues/2250)) [`8119e57b`](https://github.com/PrismJS/prism/commit/8119e57b) +* __Solution file__ ([#2213](https://github.com/PrismJS/prism/issues/2213)) [`15983d52`](https://github.com/PrismJS/prism/commit/15983d52) + +### Updated components + +* __Bash__ + * Added support for escaped quotes ([#2256](https://github.com/PrismJS/prism/issues/2256)) [`328d0e0e`](https://github.com/PrismJS/prism/commit/328d0e0e) +* __BBcode__ + * Added "shortcode" alias ([#2273](https://github.com/PrismJS/prism/issues/2273)) [`57eebced`](https://github.com/PrismJS/prism/commit/57eebced) +* __C/C++/OpenCL C__ + * Improvements ([#2196](https://github.com/PrismJS/prism/issues/2196)) [`674f4b35`](https://github.com/PrismJS/prism/commit/674f4b35) +* __C__ + * Improvemed `comment` pattern ([#2229](https://github.com/PrismJS/prism/issues/2229)) [`fa630726`](https://github.com/PrismJS/prism/commit/fa630726) +* __C#__ + * Fixed keywords in type lists blocking type names ([#2277](https://github.com/PrismJS/prism/issues/2277)) [`947a55bd`](https://github.com/PrismJS/prism/commit/947a55bd) + * C# improvements ([#1444](https://github.com/PrismJS/prism/issues/1444)) [`42b15463`](https://github.com/PrismJS/prism/commit/42b15463) +* __C++__ + * Added C++20 keywords ([#2236](https://github.com/PrismJS/prism/issues/2236)) [`462ad57e`](https://github.com/PrismJS/prism/commit/462ad57e) +* __CSS__ + * Fixed `url()` containing "@" ([#2272](https://github.com/PrismJS/prism/issues/2272)) [`504a63ba`](https://github.com/PrismJS/prism/commit/504a63ba) +* __CSS Extras__ + * Added support for the selector function ([#2201](https://github.com/PrismJS/prism/issues/2201)) [`2e0eff76`](https://github.com/PrismJS/prism/commit/2e0eff76) +* __Elixir__ + * Added support for attributes names ending with `?` ([#2182](https://github.com/PrismJS/prism/issues/2182)) [`5450e24c`](https://github.com/PrismJS/prism/commit/5450e24c) +* __Java__ + * Added `record` keyword ([#2185](https://github.com/PrismJS/prism/issues/2185)) [`47910b5c`](https://github.com/PrismJS/prism/commit/47910b5c) +* __Markdown__ + * Added support for nested lists ([#2228](https://github.com/PrismJS/prism/issues/2228)) [`73c8a376`](https://github.com/PrismJS/prism/commit/73c8a376) +* __OpenCL__ + * Require C ([#2231](https://github.com/PrismJS/prism/issues/2231)) [`26626ded`](https://github.com/PrismJS/prism/commit/26626ded) +* __PHPDoc__ + * Fixed exponential backtracking ([#2198](https://github.com/PrismJS/prism/issues/2198)) [`3b42536e`](https://github.com/PrismJS/prism/commit/3b42536e) +* __Ruby__ + * Fixed exponential backtracking ([#2225](https://github.com/PrismJS/prism/issues/2225)) [`c5de5aa8`](https://github.com/PrismJS/prism/commit/c5de5aa8) +* __SAS__ + * Fixed SAS' "peerDependencies" ([#2230](https://github.com/PrismJS/prism/issues/2230)) [`7d8ff7ea`](https://github.com/PrismJS/prism/commit/7d8ff7ea) +* __Shell session__ + * Improvements ([#2208](https://github.com/PrismJS/prism/issues/2208)) [`bd16bd57`](https://github.com/PrismJS/prism/commit/bd16bd57) +* __Visual Basic__ + * Added support for comments with line continuations ([#2195](https://github.com/PrismJS/prism/issues/2195)) [`a7d67ca3`](https://github.com/PrismJS/prism/commit/a7d67ca3) +* __YAML__ + * Improvements ([#2226](https://github.com/PrismJS/prism/issues/2226)) [`5362ba16`](https://github.com/PrismJS/prism/commit/5362ba16) + * Fixed highlighting of anchors and aliases ([#2217](https://github.com/PrismJS/prism/issues/2217)) [`6124c974`](https://github.com/PrismJS/prism/commit/6124c974) + +### New plugins + +* __Treeview__ ([#2265](https://github.com/PrismJS/prism/issues/2265)) [`be909b18`](https://github.com/PrismJS/prism/commit/be909b18) + +### Updated plugins + +* __Inline Color__ + * Support for (semi-)transparent colors and minor improvements ([#2223](https://github.com/PrismJS/prism/issues/2223)) [`8d2c5a3e`](https://github.com/PrismJS/prism/commit/8d2c5a3e) +* __Keep Markup__ + * Remove self & document from IIFE arguments ([#2258](https://github.com/PrismJS/prism/issues/2258)) [`3c043338`](https://github.com/PrismJS/prism/commit/3c043338) +* __Toolbar__ + * `data-toolbar-order` is now inherited ([#2205](https://github.com/PrismJS/prism/issues/2205)) [`238f1163`](https://github.com/PrismJS/prism/commit/238f1163) + +### Other + +* Updated all `String.propotype.replace` calls for literal strings [`5d7aab56`](https://github.com/PrismJS/prism/commit/5d7aab56) +* __Core__ + * Linked list implementation for `matchGrammar` ([#1909](https://github.com/PrismJS/prism/issues/1909)) [`2d4c94cd`](https://github.com/PrismJS/prism/commit/2d4c94cd) + * Faster `Token.stringify` ([#2171](https://github.com/PrismJS/prism/issues/2171)) [`f683972e`](https://github.com/PrismJS/prism/commit/f683972e) + * Fixed scope problem in script mode ([#2184](https://github.com/PrismJS/prism/issues/2184)) [`984e5d2e`](https://github.com/PrismJS/prism/commit/984e5d2e) +* __Infrastructure__ + * Travis: Updated NodeJS versions ([#2246](https://github.com/PrismJS/prism/issues/2246)) [`e635260b`](https://github.com/PrismJS/prism/commit/e635260b) + * gulp: Inline regex source improvement ([#2227](https://github.com/PrismJS/prism/issues/2227)) [`67afc5ad`](https://github.com/PrismJS/prism/commit/67afc5ad) + * Tests: Added new pattern check for octal escapes ([#2189](https://github.com/PrismJS/prism/issues/2189)) [`81e1c3dd`](https://github.com/PrismJS/prism/commit/81e1c3dd) + * Tests: Fixed optional dependencies in pattern tests ([#2242](https://github.com/PrismJS/prism/issues/2242)) [`1e3070a2`](https://github.com/PrismJS/prism/commit/1e3070a2) + * Tests: Added test for zero-width lookbehinds ([#2220](https://github.com/PrismJS/prism/issues/2220)) [`7d03ece4`](https://github.com/PrismJS/prism/commit/7d03ece4) + * Added tests for examples ([#2216](https://github.com/PrismJS/prism/issues/2216)) [`1f7a245c`](https://github.com/PrismJS/prism/commit/1f7a245c) +* __Website__ + * Removed invalid strings from C# example ([#2266](https://github.com/PrismJS/prism/issues/2266)) [`c917a8ca`](https://github.com/PrismJS/prism/commit/c917a8ca) + * Fixed Diff highlight plugin page title ([#2233](https://github.com/PrismJS/prism/issues/2233)) [`a82770f8`](https://github.com/PrismJS/prism/commit/a82770f8) + * Added link to `prism-liquibase` Bash language extension. ([#2191](https://github.com/PrismJS/prism/issues/2191)) [`0bf73dc7`](https://github.com/PrismJS/prism/commit/0bf73dc7) + * Examples: Updated content header ([#2232](https://github.com/PrismJS/prism/issues/2232)) [`6232878b`](https://github.com/PrismJS/prism/commit/6232878b) + * Website: Added Coy bug to the known failures page. ([#2170](https://github.com/PrismJS/prism/issues/2170)) [`e9dab85e`](https://github.com/PrismJS/prism/commit/e9dab85e) + +## 1.19.0 (2020-01-13) + +### New components + +* __Latte__ ([#2140](https://github.com/PrismJS/prism/issues/2140)) [`694a81b8`](https://github.com/PrismJS/prism/commit/694a81b8) +* __Neon__ ([#2140](https://github.com/PrismJS/prism/issues/2140)) [`694a81b8`](https://github.com/PrismJS/prism/commit/694a81b8) +* __QML__ ([#2139](https://github.com/PrismJS/prism/issues/2139)) [`c40d96c6`](https://github.com/PrismJS/prism/commit/c40d96c6) + +### Updated components + +* __Handlebars__ + * Added support for `:` and improved the `variable` pattern ([#2172](https://github.com/PrismJS/prism/issues/2172)) [`ef4d29d9`](https://github.com/PrismJS/prism/commit/ef4d29d9) +* __JavaScript__ + * Added support for keywords after a spread operator ([#2148](https://github.com/PrismJS/prism/issues/2148)) [`1f3f8929`](https://github.com/PrismJS/prism/commit/1f3f8929) + * Better regex detection ([#2158](https://github.com/PrismJS/prism/issues/2158)) [`a23d8f84`](https://github.com/PrismJS/prism/commit/a23d8f84) +* __Markdown__ + * Better language detection for code blocks ([#2114](https://github.com/PrismJS/prism/issues/2114)) [`d7ad48f9`](https://github.com/PrismJS/prism/commit/d7ad48f9) +* __OCaml__ + * Improvements ([#2179](https://github.com/PrismJS/prism/issues/2179)) [`2a570fd4`](https://github.com/PrismJS/prism/commit/2a570fd4) +* __PHP__ + * Fixed exponential runtime of a pattern ([#2157](https://github.com/PrismJS/prism/issues/2157)) [`24c8f833`](https://github.com/PrismJS/prism/commit/24c8f833) +* __React JSX__ + * Improved spread operator in tag attributes ([#2159](https://github.com/PrismJS/prism/issues/2159)) [`fd857e7b`](https://github.com/PrismJS/prism/commit/fd857e7b) + * Made `$` a valid character for attribute names ([#2144](https://github.com/PrismJS/prism/issues/2144)) [`f018cf04`](https://github.com/PrismJS/prism/commit/f018cf04) +* __Reason__ + * Added support for single line comments ([#2150](https://github.com/PrismJS/prism/issues/2150)) [`7f1c55b7`](https://github.com/PrismJS/prism/commit/7f1c55b7) +* __Ruby__ + * Override 'class-name' definition ([#2135](https://github.com/PrismJS/prism/issues/2135)) [`401d4b02`](https://github.com/PrismJS/prism/commit/401d4b02) +* __SAS__ + * Added CASL support ([#2112](https://github.com/PrismJS/prism/issues/2112)) [`99d979a0`](https://github.com/PrismJS/prism/commit/99d979a0) + +### Updated plugins + +* __Custom Class__ + * Fixed TypeError when mapper is undefined ([#2167](https://github.com/PrismJS/prism/issues/2167)) [`543f04d7`](https://github.com/PrismJS/prism/commit/543f04d7) + +### Updated themes + +* Added missing `.token` selector ([#2161](https://github.com/PrismJS/prism/issues/2161)) [`86780457`](https://github.com/PrismJS/prism/commit/86780457) + +### Other + +* Added a check for redundant dependency declarations ([#2142](https://github.com/PrismJS/prism/issues/2142)) [`a06aca06`](https://github.com/PrismJS/prism/commit/a06aca06) +* Added a check for examples ([#2128](https://github.com/PrismJS/prism/issues/2128)) [`0b539136`](https://github.com/PrismJS/prism/commit/0b539136) +* Added silent option to `loadLanguages` ([#2147](https://github.com/PrismJS/prism/issues/2147)) [`191b4116`](https://github.com/PrismJS/prism/commit/191b4116) +* __Infrastructure__ + * Dependencies: Improved `getLoader` ([#2151](https://github.com/PrismJS/prism/issues/2151)) [`199bdcae`](https://github.com/PrismJS/prism/commit/199bdcae) + * Updated gulp to v4.0.2 ([#2178](https://github.com/PrismJS/prism/issues/2178)) [`e5678a00`](https://github.com/PrismJS/prism/commit/e5678a00) +* __Website__ + * Custom Class: Fixed examples ([#2160](https://github.com/PrismJS/prism/issues/2160)) [`0c2fe405`](https://github.com/PrismJS/prism/commit/0c2fe405) + * Added documentation for new dependency API ([#2141](https://github.com/PrismJS/prism/issues/2141)) [`59068d67`](https://github.com/PrismJS/prism/commit/59068d67) + +## 1.18.0 (2020-01-04) + +### New components + +* __ANTLR4__ ([#2063](https://github.com/PrismJS/prism/issues/2063)) [`aaaa29a8`](https://github.com/PrismJS/prism/commit/aaaa29a8) +* __AQL__ ([#2025](https://github.com/PrismJS/prism/issues/2025)) [`3fdb7d55`](https://github.com/PrismJS/prism/commit/3fdb7d55) +* __BBcode__ ([#2095](https://github.com/PrismJS/prism/issues/2095)) [`aaf13aa6`](https://github.com/PrismJS/prism/commit/aaf13aa6) +* __BrightScript__ ([#2096](https://github.com/PrismJS/prism/issues/2096)) [`631f1e34`](https://github.com/PrismJS/prism/commit/631f1e34) +* __Embedded Lua templating__ ([#2050](https://github.com/PrismJS/prism/issues/2050)) [`0b771c90`](https://github.com/PrismJS/prism/commit/0b771c90) +* __Firestore security rules__ ([#2010](https://github.com/PrismJS/prism/issues/2010)) [`9f722586`](https://github.com/PrismJS/prism/commit/9f722586) +* __FreeMarker Template Language__ ([#2080](https://github.com/PrismJS/prism/issues/2080)) [`2f3da7e8`](https://github.com/PrismJS/prism/commit/2f3da7e8) +* __GDScript__ ([#2006](https://github.com/PrismJS/prism/issues/2006)) [`e2b99f40`](https://github.com/PrismJS/prism/commit/e2b99f40) +* __MoonScript__ ([#2100](https://github.com/PrismJS/prism/issues/2100)) [`f31946b3`](https://github.com/PrismJS/prism/commit/f31946b3) +* __Robot Framework__ (only the plain text format) ([#2034](https://github.com/PrismJS/prism/issues/2034)) [`f7eaa618`](https://github.com/PrismJS/prism/commit/f7eaa618) +* __Solidity (Ethereum)__ ([#2031](https://github.com/PrismJS/prism/issues/2031)) [`cc2cf3f7`](https://github.com/PrismJS/prism/commit/cc2cf3f7) +* __SPARQL__ ([#2033](https://github.com/PrismJS/prism/issues/2033)) [`c42f877d`](https://github.com/PrismJS/prism/commit/c42f877d) +* __SQF: Status Quo Function (Arma 3)__ ([#2079](https://github.com/PrismJS/prism/issues/2079)) [`cfac94ec`](https://github.com/PrismJS/prism/commit/cfac94ec) +* __Turtle__ & __TriG__ ([#2012](https://github.com/PrismJS/prism/issues/2012)) [`508d57ac`](https://github.com/PrismJS/prism/commit/508d57ac) +* __Zig__ ([#2019](https://github.com/PrismJS/prism/issues/2019)) [`a7cf56b7`](https://github.com/PrismJS/prism/commit/a7cf56b7) + +### Updated components + +* Minor improvements for C-like and Clojure ([#2064](https://github.com/PrismJS/prism/issues/2064)) [`7db0cab3`](https://github.com/PrismJS/prism/commit/7db0cab3) +* Inlined some unnecessary rest properties ([#2082](https://github.com/PrismJS/prism/issues/2082)) [`ad3fa443`](https://github.com/PrismJS/prism/commit/ad3fa443) +* __AQL__ + * Disallow unclosed multiline comments again ([#2089](https://github.com/PrismJS/prism/issues/2089)) [`717ace02`](https://github.com/PrismJS/prism/commit/717ace02) + * Allow unclosed multi-line comments ([#2058](https://github.com/PrismJS/prism/issues/2058)) [`f3c6ba59`](https://github.com/PrismJS/prism/commit/f3c6ba59) + * More pseudo keywords ([#2055](https://github.com/PrismJS/prism/issues/2055)) [`899574eb`](https://github.com/PrismJS/prism/commit/899574eb) + * Added missing keyword + minor improvements ([#2047](https://github.com/PrismJS/prism/issues/2047)) [`32a4c422`](https://github.com/PrismJS/prism/commit/32a4c422) +* __Clojure__ + * Added multiline strings (lisp style) ([#2061](https://github.com/PrismJS/prism/issues/2061)) [`8ea685b8`](https://github.com/PrismJS/prism/commit/8ea685b8) +* __CSS Extras__ + * CSS Extras & PHP: Fixed too greedy number token ([#2009](https://github.com/PrismJS/prism/issues/2009)) [`ebe363f4`](https://github.com/PrismJS/prism/commit/ebe363f4) +* __D__ + * Fixed strings ([#2029](https://github.com/PrismJS/prism/issues/2029)) [`010a0157`](https://github.com/PrismJS/prism/commit/010a0157) +* __Groovy__ + * Minor improvements ([#2036](https://github.com/PrismJS/prism/issues/2036)) [`fb618331`](https://github.com/PrismJS/prism/commit/fb618331) +* __Java__ + * Added missing `::` operator ([#2101](https://github.com/PrismJS/prism/issues/2101)) [`ee7fdbee`](https://github.com/PrismJS/prism/commit/ee7fdbee) + * Added support for new Java 13 syntax ([#2060](https://github.com/PrismJS/prism/issues/2060)) [`a7b95dd3`](https://github.com/PrismJS/prism/commit/a7b95dd3) +* __JavaScript__ + * Added Optional Chaining and Nullish Coalescing ([#2084](https://github.com/PrismJS/prism/issues/2084)) [`fdb7de0d`](https://github.com/PrismJS/prism/commit/fdb7de0d) + * Tokenize `:` as an operator ([#2073](https://github.com/PrismJS/prism/issues/2073)) [`0e5c48d1`](https://github.com/PrismJS/prism/commit/0e5c48d1) +* __Less__ + * Fixed exponential backtracking ([#2016](https://github.com/PrismJS/prism/issues/2016)) [`d03d19b4`](https://github.com/PrismJS/prism/commit/d03d19b4) +* __Markup__ + * Improved doctype pattern ([#2094](https://github.com/PrismJS/prism/issues/2094)) [`99994c58`](https://github.com/PrismJS/prism/commit/99994c58) +* __Python__ + * Fixed decorators ([#2018](https://github.com/PrismJS/prism/issues/2018)) [`5b8a16d9`](https://github.com/PrismJS/prism/commit/5b8a16d9) +* __Robot Framework__ + * Rename "robot-framework" to "robotframework" ([#2113](https://github.com/PrismJS/prism/issues/2113)) [`baa78774`](https://github.com/PrismJS/prism/commit/baa78774) +* __Ruby__ + * Made `true` and `false` booleans ([#2098](https://github.com/PrismJS/prism/issues/2098)) [`68d1c472`](https://github.com/PrismJS/prism/commit/68d1c472) + * Added missing keywords ([#2097](https://github.com/PrismJS/prism/issues/2097)) [`f460eafc`](https://github.com/PrismJS/prism/commit/f460eafc) +* __SAS__ + * Added support for embedded Groovy and Lua code ([#2091](https://github.com/PrismJS/prism/issues/2091)) [`3640b3f2`](https://github.com/PrismJS/prism/commit/3640b3f2) + * Minor improvements ([#2085](https://github.com/PrismJS/prism/issues/2085)) [`07020c7a`](https://github.com/PrismJS/prism/commit/07020c7a) + * Fixed `proc-args` token by removing backreferences from string pattern ([#2013](https://github.com/PrismJS/prism/issues/2013)) [`af5a36ae`](https://github.com/PrismJS/prism/commit/af5a36ae) + * Major improvements ([#1981](https://github.com/PrismJS/prism/issues/1981)) [`076f6155`](https://github.com/PrismJS/prism/commit/076f6155) +* __Smalltalk__ + * Fixed single quote character literal ([#2041](https://github.com/PrismJS/prism/issues/2041)) [`1aabcd17`](https://github.com/PrismJS/prism/commit/1aabcd17) +* __Turtle__ + * Minor improvements ([#2038](https://github.com/PrismJS/prism/issues/2038)) [`8ccd258b`](https://github.com/PrismJS/prism/commit/8ccd258b) +* __TypeScript__ + * Added missing keyword `undefined` ([#2088](https://github.com/PrismJS/prism/issues/2088)) [`c8b48b9f`](https://github.com/PrismJS/prism/commit/c8b48b9f) + +### Updated plugins + +* New Match Braces plugin ([#1944](https://github.com/PrismJS/prism/issues/1944)) [`365faade`](https://github.com/PrismJS/prism/commit/365faade) +* New Inline color plugin ([#2007](https://github.com/PrismJS/prism/issues/2007)) [`8403e453`](https://github.com/PrismJS/prism/commit/8403e453) +* New Filter highlightAll plugin ([#2074](https://github.com/PrismJS/prism/issues/2074)) [`a7f70090`](https://github.com/PrismJS/prism/commit/a7f70090) +* __Custom Class__ + * New class adder feature ([#2075](https://github.com/PrismJS/prism/issues/2075)) [`dab7998e`](https://github.com/PrismJS/prism/commit/dab7998e) +* __File Highlight__ + * Made the download button its own plugin ([#1840](https://github.com/PrismJS/prism/issues/1840)) [`c6c62a69`](https://github.com/PrismJS/prism/commit/c6c62a69) + +### Other + +* Issue template improvements ([#2069](https://github.com/PrismJS/prism/issues/2069)) [`53f07b1b`](https://github.com/PrismJS/prism/commit/53f07b1b) +* Readme: Links now use HTTPS if available ([#2045](https://github.com/PrismJS/prism/issues/2045)) [`6cd0738a`](https://github.com/PrismJS/prism/commit/6cd0738a) +* __Core__ + * Fixed null reference ([#2106](https://github.com/PrismJS/prism/issues/2106)) [`0fd062d5`](https://github.com/PrismJS/prism/commit/0fd062d5) + * Fixed race condition caused by deferring the script ([#2103](https://github.com/PrismJS/prism/issues/2103)) [`a3785ec9`](https://github.com/PrismJS/prism/commit/a3785ec9) + * Minor improvements ([#1973](https://github.com/PrismJS/prism/issues/1973)) [`2d858e0a`](https://github.com/PrismJS/prism/commit/2d858e0a) + * Fixed greedy partial lookbehinds not working ([#2030](https://github.com/PrismJS/prism/issues/2030)) [`174ed103`](https://github.com/PrismJS/prism/commit/174ed103) + * Fixed greedy targeting bug ([#1932](https://github.com/PrismJS/prism/issues/1932)) [`e864d518`](https://github.com/PrismJS/prism/commit/e864d518) + * Doubly check the `manual` flag ([#1957](https://github.com/PrismJS/prism/issues/1957)) [`d49f0f26`](https://github.com/PrismJS/prism/commit/d49f0f26) + * IE11 workaround for `currentScript` ([#2104](https://github.com/PrismJS/prism/issues/2104)) [`2108c60f`](https://github.com/PrismJS/prism/commit/2108c60f) +* __Infrastructure__ + * gulp: Fixed changes task [`2f495905`](https://github.com/PrismJS/prism/commit/2f495905) + * npm: Added `.github` folder to npm ignore ([#2052](https://github.com/PrismJS/prism/issues/2052)) [`1af89e06`](https://github.com/PrismJS/prism/commit/1af89e06) + * npm: Updated dependencies to fix 122 vulnerabilities ([#1997](https://github.com/PrismJS/prism/issues/1997)) [`3af5d744`](https://github.com/PrismJS/prism/commit/3af5d744) + * Tests: New test for unused capturing groups ([#1996](https://github.com/PrismJS/prism/issues/1996)) [`c187e229`](https://github.com/PrismJS/prism/commit/c187e229) + * Tests: Simplified error message format ([#2056](https://github.com/PrismJS/prism/issues/2056)) [`007c9af4`](https://github.com/PrismJS/prism/commit/007c9af4) + * Tests: New test for nice names ([#1911](https://github.com/PrismJS/prism/issues/1911)) [`3fda5c95`](https://github.com/PrismJS/prism/commit/3fda5c95) + * Standardized dependency logic implementation ([#1998](https://github.com/PrismJS/prism/issues/1998)) [`7a4a0c7c`](https://github.com/PrismJS/prism/commit/7a4a0c7c) +* __Website__ + * Added @mAAdhaTTah and @RunDevelopment to credits and footer [`5d07aa7c`](https://github.com/PrismJS/prism/commit/5d07aa7c) + * Added plugin descriptions to plugin list ([#2076](https://github.com/PrismJS/prism/issues/2076)) [`cdfa60ac`](https://github.com/PrismJS/prism/commit/cdfa60ac) + * Use HTTPS link to alistapart.com ([#2044](https://github.com/PrismJS/prism/issues/2044)) [`8bcc1b85`](https://github.com/PrismJS/prism/commit/8bcc1b85) + * Fixed the Toolbar plugin's overflow issue ([#1966](https://github.com/PrismJS/prism/issues/1966)) [`56a8711c`](https://github.com/PrismJS/prism/commit/56a8711c) + * FAQ update ([#1977](https://github.com/PrismJS/prism/issues/1977)) [`8a572af5`](https://github.com/PrismJS/prism/commit/8a572af5) + * Use modern JavaScript in the NodeJS usage section ([#1942](https://github.com/PrismJS/prism/issues/1942)) [`5c68a556`](https://github.com/PrismJS/prism/commit/5c68a556) + * Improved test page performance for Chromium ([#2020](https://github.com/PrismJS/prism/issues/2020)) [`3509f3e5`](https://github.com/PrismJS/prism/commit/3509f3e5) + * Fixed alias example in extending page ([#2011](https://github.com/PrismJS/prism/issues/2011)) [`7cb65eec`](https://github.com/PrismJS/prism/commit/7cb65eec) + * Robot Framework: Renamed example file ([#2126](https://github.com/PrismJS/prism/issues/2126)) [`9908ca69`](https://github.com/PrismJS/prism/commit/9908ca69) + +## 1.17.1 (2019-07-21) + +### Other + +* __Infrastructure__ + * Add .DS_Store to npmignore [`c2229ec2`](https://github.com/PrismJS/prism/commit/c2229ec2) + +## 1.17.0 (2019-07-21) + +### New components + +* __DNS zone file__ ([#1961](https://github.com/PrismJS/prism/issues/1961)) [`bb84f98c`](https://github.com/PrismJS/prism/commit/bb84f98c) +* __JQ__ ([#1896](https://github.com/PrismJS/prism/issues/1896)) [`73d964be`](https://github.com/PrismJS/prism/commit/73d964be) +* __JS Templates__: Syntax highlighting inside tagged template literals ([#1931](https://github.com/PrismJS/prism/issues/1931)) [`c8844286`](https://github.com/PrismJS/prism/commit/c8844286) +* __LilyPond__ ([#1967](https://github.com/PrismJS/prism/issues/1967)) [`5d992fc5`](https://github.com/PrismJS/prism/commit/5d992fc5) +* __PascaLIGO__ ([#1947](https://github.com/PrismJS/prism/issues/1947)) [`858201c7`](https://github.com/PrismJS/prism/commit/858201c7) +* __PC-Axis__ ([#1940](https://github.com/PrismJS/prism/issues/1940)) [`473f7fbd`](https://github.com/PrismJS/prism/commit/473f7fbd) +* __Shell session__ ([#1892](https://github.com/PrismJS/prism/issues/1892)) [`96044979`](https://github.com/PrismJS/prism/commit/96044979) +* __Splunk SPL__ ([#1962](https://github.com/PrismJS/prism/issues/1962)) [`c93c066b`](https://github.com/PrismJS/prism/commit/c93c066b) + +### New plugins + +* __Diff Highlight__: Syntax highlighting inside diff blocks ([#1889](https://github.com/PrismJS/prism/issues/1889)) [`e7702ae1`](https://github.com/PrismJS/prism/commit/e7702ae1) + +### Updated components + +* __Bash__ + * Major improvements ([#1443](https://github.com/PrismJS/prism/issues/1443)) [`363281b3`](https://github.com/PrismJS/prism/commit/363281b3) +* __C#__ + * Added `cs` alias ([#1899](https://github.com/PrismJS/prism/issues/1899)) [`a8164559`](https://github.com/PrismJS/prism/commit/a8164559) +* __C++__ + * Fixed number pattern ([#1887](https://github.com/PrismJS/prism/issues/1887)) [`3de29e72`](https://github.com/PrismJS/prism/commit/3de29e72) +* __CSS__ + * Extended `url` inside ([#1874](https://github.com/PrismJS/prism/issues/1874)) [`f0a10669`](https://github.com/PrismJS/prism/commit/f0a10669) + * Removed unnecessary flag and modifier ([#1875](https://github.com/PrismJS/prism/issues/1875)) [`74050c68`](https://github.com/PrismJS/prism/commit/74050c68) +* __CSS Extras__ + * Added `even` & `odd` keywords to `n-th` pattern ([#1872](https://github.com/PrismJS/prism/issues/1872)) [`5e5a3e00`](https://github.com/PrismJS/prism/commit/5e5a3e00) +* __F#__ + * Improved character literals ([#1956](https://github.com/PrismJS/prism/issues/1956)) [`d58d2aeb`](https://github.com/PrismJS/prism/commit/d58d2aeb) +* __JavaScript__ + * Fixed escaped template interpolation ([#1931](https://github.com/PrismJS/prism/issues/1931)) [`c8844286`](https://github.com/PrismJS/prism/commit/c8844286) + * Added support for private fields ([#1950](https://github.com/PrismJS/prism/issues/1950)) [`7bd08327`](https://github.com/PrismJS/prism/commit/7bd08327) + * Added support for numeric separators ([#1895](https://github.com/PrismJS/prism/issues/1895)) [`6068bf18`](https://github.com/PrismJS/prism/commit/6068bf18) + * Increased bracket count of interpolation expressions in template strings ([#1845](https://github.com/PrismJS/prism/issues/1845)) [`c13d6e7d`](https://github.com/PrismJS/prism/commit/c13d6e7d) + * Added support for the `s` regex flag ([#1846](https://github.com/PrismJS/prism/issues/1846)) [`9e164935`](https://github.com/PrismJS/prism/commit/9e164935) + * Formatting: Added missing semicolon ([#1856](https://github.com/PrismJS/prism/issues/1856)) [`e2683959`](https://github.com/PrismJS/prism/commit/e2683959) +* __JSON__ + * Kinda fixed comment issue ([#1853](https://github.com/PrismJS/prism/issues/1853)) [`cbe05ec3`](https://github.com/PrismJS/prism/commit/cbe05ec3) +* __Julia__ + * Added `struct` keyword ([#1941](https://github.com/PrismJS/prism/issues/1941)) [`feb1b6f5`](https://github.com/PrismJS/prism/commit/feb1b6f5) + * Highlight `Inf` and `NaN` as constants ([#1921](https://github.com/PrismJS/prism/issues/1921)) [`2141129f`](https://github.com/PrismJS/prism/commit/2141129f) + * Added `in` keyword ([#1918](https://github.com/PrismJS/prism/issues/1918)) [`feb3187f`](https://github.com/PrismJS/prism/commit/feb3187f) +* __LaTeX__ + * Added TeX and ConTeXt alias ([#1915](https://github.com/PrismJS/prism/issues/1915)) [`5ad58a75`](https://github.com/PrismJS/prism/commit/5ad58a75) + * Added support for $$ equations [`6f53f749`](https://github.com/PrismJS/prism/commit/6f53f749) +* __Markdown__ + * Markdown: Added support for auto-loading code block languages ([#1898](https://github.com/PrismJS/prism/issues/1898)) [`05823e88`](https://github.com/PrismJS/prism/commit/05823e88) + * Improved URLs ([#1955](https://github.com/PrismJS/prism/issues/1955)) [`b9ec6fd8`](https://github.com/PrismJS/prism/commit/b9ec6fd8) + * Added support for nested bold and italic expressions ([#1897](https://github.com/PrismJS/prism/issues/1897)) [`11903721`](https://github.com/PrismJS/prism/commit/11903721) + * Added support for tables ([#1848](https://github.com/PrismJS/prism/issues/1848)) [`cedb8e84`](https://github.com/PrismJS/prism/commit/cedb8e84) +* __Perl__ + * Added `return` keyword ([#1943](https://github.com/PrismJS/prism/issues/1943)) [`2f39de97`](https://github.com/PrismJS/prism/commit/2f39de97) +* __Protocol Buffers__ + * Full support for PB2 and PB3 syntax + numerous other improvements ([#1948](https://github.com/PrismJS/prism/issues/1948)) [`de10bd1d`](https://github.com/PrismJS/prism/commit/de10bd1d) +* __reST (reStructuredText)__ + * Fixed exponentially backtracking pattern ([#1986](https://github.com/PrismJS/prism/issues/1986)) [`8b5d67a3`](https://github.com/PrismJS/prism/commit/8b5d67a3) +* __Rust__ + * Added `async` and `await` keywords. ([#1882](https://github.com/PrismJS/prism/issues/1882)) [`4faa3314`](https://github.com/PrismJS/prism/commit/4faa3314) + * Improved punctuation and operators ([#1839](https://github.com/PrismJS/prism/issues/1839)) [`a42b1557`](https://github.com/PrismJS/prism/commit/a42b1557) +* __Sass (Scss)__ + * Fixed exponential url pattern ([#1938](https://github.com/PrismJS/prism/issues/1938)) [`4b6b6e8b`](https://github.com/PrismJS/prism/commit/4b6b6e8b) +* __Scheme__ + * Added support for rational number literals ([#1964](https://github.com/PrismJS/prism/issues/1964)) [`e8811d22`](https://github.com/PrismJS/prism/commit/e8811d22) +* __TOML__ + * Minor improvements ([#1917](https://github.com/PrismJS/prism/issues/1917)) [`3e181241`](https://github.com/PrismJS/prism/commit/3e181241) +* __Visual Basic__ + * Added support for interpolation strings ([#1971](https://github.com/PrismJS/prism/issues/1971)) [`4a2c90c1`](https://github.com/PrismJS/prism/commit/4a2c90c1) + +### Updated plugins + +* __Autolinker__ + * Improved component path guessing ([#1928](https://github.com/PrismJS/prism/issues/1928)) [`452d5c7d`](https://github.com/PrismJS/prism/commit/452d5c7d) + * Improved URL regex ([#1842](https://github.com/PrismJS/prism/issues/1842)) [`eb28b62b`](https://github.com/PrismJS/prism/commit/eb28b62b) +* __Autoloader__ + * Fixed and improved callbacks ([#1935](https://github.com/PrismJS/prism/issues/1935)) [`b19f512f`](https://github.com/PrismJS/prism/commit/b19f512f) +* __Command Line__ + * Fix for uncaught errors for empty 'commandLine' object. ([#1862](https://github.com/PrismJS/prism/issues/1862)) [`c24831b5`](https://github.com/PrismJS/prism/commit/c24831b5) +* __Copy to Clipboard Button__ + * Switch anchor to button ([#1926](https://github.com/PrismJS/prism/issues/1926)) [`79880197`](https://github.com/PrismJS/prism/commit/79880197) +* __Custom Class__ + * Added mapper functions for language specific transformations ([#1873](https://github.com/PrismJS/prism/issues/1873)) [`acceb3b5`](https://github.com/PrismJS/prism/commit/acceb3b5) +* __Line Highlight__ + * Batching DOM read/writes to avoid reflows ([#1865](https://github.com/PrismJS/prism/issues/1865)) [`632ce00c`](https://github.com/PrismJS/prism/commit/632ce00c) +* __Toolbar__ + * Added `className` option for toolbar items ([#1951](https://github.com/PrismJS/prism/issues/1951)) [`5ab28bbe`](https://github.com/PrismJS/prism/commit/5ab28bbe) + * Set opacity to 1 when focus is within ([#1927](https://github.com/PrismJS/prism/issues/1927)) [`0b1662dd`](https://github.com/PrismJS/prism/commit/0b1662dd) + +### Updated themes + +* __Funky__ + * Fixed typo ([#1960](https://github.com/PrismJS/prism/issues/1960)) [`7d056591`](https://github.com/PrismJS/prism/commit/7d056591) + +### Other + +* README: Added npm downloads badge ([#1934](https://github.com/PrismJS/prism/issues/1934)) [`d673d701`](https://github.com/PrismJS/prism/commit/d673d701) +* README: Minor changes ([#1857](https://github.com/PrismJS/prism/issues/1857)) [`77e403cb`](https://github.com/PrismJS/prism/commit/77e403cb) +* Clearer description for the highlighting bug report template ([#1850](https://github.com/PrismJS/prism/issues/1850)) [`2f9c9261`](https://github.com/PrismJS/prism/commit/2f9c9261) +* More language examples ([#1917](https://github.com/PrismJS/prism/issues/1917)) [`3e181241`](https://github.com/PrismJS/prism/commit/3e181241) +* __Core__ + * Removed `env.elements` from `before-highlightall` hook ([#1968](https://github.com/PrismJS/prism/issues/1968)) [`9d9e2ca4`](https://github.com/PrismJS/prism/commit/9d9e2ca4) + * Made `language-none` the default language ([#1858](https://github.com/PrismJS/prism/issues/1858)) [`fd691c52`](https://github.com/PrismJS/prism/commit/fd691c52) + * Removed `parent` from the `wrap` hook's environment ([#1837](https://github.com/PrismJS/prism/issues/1837)) [`65a4e894`](https://github.com/PrismJS/prism/commit/65a4e894) +* __Infrastructure__ + * gulp: Split `gulpfile.js` and expanded `changes` task ([#1835](https://github.com/PrismJS/prism/issues/1835)) [`033c5ad8`](https://github.com/PrismJS/prism/commit/033c5ad8) + * gulp: JSON formatting for partly generated files ([#1933](https://github.com/PrismJS/prism/issues/1933)) [`d4373f3a`](https://github.com/PrismJS/prism/commit/d4373f3a) + * gulp: Use `async` functions & drop testing on Node v6 ([#1783](https://github.com/PrismJS/prism/issues/1783)) [`0dd44d53`](https://github.com/PrismJS/prism/commit/0dd44d53) + * Tests: `lookbehind` test for patterns ([#1890](https://github.com/PrismJS/prism/issues/1890)) [`3ba786cd`](https://github.com/PrismJS/prism/commit/3ba786cd) + * Tests: Added test for empty regexes ([#1847](https://github.com/PrismJS/prism/issues/1847)) [`c1e6a7fd`](https://github.com/PrismJS/prism/commit/c1e6a7fd) +* __Website__ + * Added tutorial for using PrismJS with React ([#1979](https://github.com/PrismJS/prism/issues/1979)) [`f1e16c7b`](https://github.com/PrismJS/prism/commit/f1e16c7b) + * Update footer's GitHub repository URL and capitalisation of "GitHub" ([#1983](https://github.com/PrismJS/prism/issues/1983)) [`bab744a6`](https://github.com/PrismJS/prism/commit/bab744a6) + * Added known failures page ([#1876](https://github.com/PrismJS/prism/issues/1876)) [`36a5fa0e`](https://github.com/PrismJS/prism/commit/36a5fa0e) + * Added basic usage for CDNs ([#1924](https://github.com/PrismJS/prism/issues/1924)) [`922ec555`](https://github.com/PrismJS/prism/commit/922ec555) + * New tutorial for Drupal ([#1859](https://github.com/PrismJS/prism/issues/1859)) [`d2089d83`](https://github.com/PrismJS/prism/commit/d2089d83) + * Updated website page styles to not interfere with themes ([#1952](https://github.com/PrismJS/prism/issues/1952)) [`b6543853`](https://github.com/PrismJS/prism/commit/b6543853) + * Download page: Improved performance for Chromium-based browsers ([#1907](https://github.com/PrismJS/prism/issues/1907)) [`11f18e36`](https://github.com/PrismJS/prism/commit/11f18e36) + * Download page: Fixed Edge's word wrap ([#1920](https://github.com/PrismJS/prism/issues/1920)) [`5d191b92`](https://github.com/PrismJS/prism/commit/5d191b92) + * Examples page: Minor improvements ([#1919](https://github.com/PrismJS/prism/issues/1919)) [`a16d4a25`](https://github.com/PrismJS/prism/commit/a16d4a25) + * Extending page: Fixed typo + new alias section ([#1949](https://github.com/PrismJS/prism/issues/1949)) [`24c8e717`](https://github.com/PrismJS/prism/commit/24c8e717) + * Extending page: Added "Creating a new language definition" section ([#1925](https://github.com/PrismJS/prism/issues/1925)) [`ddf81233`](https://github.com/PrismJS/prism/commit/ddf81233) + * Test page: Use `prism-core.js` instead of `prism.js` ([#1908](https://github.com/PrismJS/prism/issues/1908)) [`0853e694`](https://github.com/PrismJS/prism/commit/0853e694) + * Copy to clipboard: Fixed typo ([#1869](https://github.com/PrismJS/prism/issues/1869)) [`59d4323f`](https://github.com/PrismJS/prism/commit/59d4323f) + * JSONP Highlight: Fixed examples ([#1877](https://github.com/PrismJS/prism/issues/1877)) [`f8ae465d`](https://github.com/PrismJS/prism/commit/f8ae465d) + * Line numbers: Fixed typo on webpage ([#1838](https://github.com/PrismJS/prism/issues/1838)) [`0f16eb87`](https://github.com/PrismJS/prism/commit/0f16eb87) + +## 1.16.0 (2019-03-24) + +### New components + +* __ANBF__ ([#1753](https://github.com/PrismJS/prism/issues/1753)) [`6d98f0e7`](https://github.com/PrismJS/prism/commit/6d98f0e7) +* __BNF__ & __RBNF__ ([#1754](https://github.com/PrismJS/prism/issues/1754)) [`1df96c55`](https://github.com/PrismJS/prism/commit/1df96c55) +* __CIL__ ([#1593](https://github.com/PrismJS/prism/issues/1593)) [`38def334`](https://github.com/PrismJS/prism/commit/38def334) +* __CMake__ ([#1820](https://github.com/PrismJS/prism/issues/1820)) [`30779976`](https://github.com/PrismJS/prism/commit/30779976) +* __Doc comment__ ([#1541](https://github.com/PrismJS/prism/issues/1541)) [`493d19ef`](https://github.com/PrismJS/prism/commit/493d19ef) +* __EBNF__ ([#1756](https://github.com/PrismJS/prism/issues/1756)) [`13e1c97d`](https://github.com/PrismJS/prism/commit/13e1c97d) +* __EJS__ ([#1769](https://github.com/PrismJS/prism/issues/1769)) [`c37c90df`](https://github.com/PrismJS/prism/commit/c37c90df) +* __G-code__ ([#1572](https://github.com/PrismJS/prism/issues/1572)) [`2288c25e`](https://github.com/PrismJS/prism/commit/2288c25e) +* __GameMaker Language__ ([#1551](https://github.com/PrismJS/prism/issues/1551)) [`e529edd8`](https://github.com/PrismJS/prism/commit/e529edd8) +* __HCL__ ([#1594](https://github.com/PrismJS/prism/issues/1594)) [`c939df8e`](https://github.com/PrismJS/prism/commit/c939df8e) +* __Java stack trace__ ([#1520](https://github.com/PrismJS/prism/issues/1520)) [`4a8219a4`](https://github.com/PrismJS/prism/commit/4a8219a4) +* __JavaScript Extras__ ([#1743](https://github.com/PrismJS/prism/issues/1743)) [`bb628606`](https://github.com/PrismJS/prism/commit/bb628606) +* __JSON5__ ([#1744](https://github.com/PrismJS/prism/issues/1744)) [`64dc049d`](https://github.com/PrismJS/prism/commit/64dc049d) +* __N1QL__ ([#1620](https://github.com/PrismJS/prism/issues/1620)) [`7def8f5c`](https://github.com/PrismJS/prism/commit/7def8f5c) +* __Nand To Tetris HDL__ ([#1710](https://github.com/PrismJS/prism/issues/1710)) [`b94b56c1`](https://github.com/PrismJS/prism/commit/b94b56c1) +* __Regex__ ([#1682](https://github.com/PrismJS/prism/issues/1682)) [`571704cb`](https://github.com/PrismJS/prism/commit/571704cb) +* __T4__ ([#1699](https://github.com/PrismJS/prism/issues/1699)) [`16f2ad06`](https://github.com/PrismJS/prism/commit/16f2ad06) +* __TOML__ ([#1488](https://github.com/PrismJS/prism/issues/1488)) [`5b6ad70d`](https://github.com/PrismJS/prism/commit/5b6ad70d) +* __Vala__ ([#1658](https://github.com/PrismJS/prism/issues/1658)) [`b48c012c`](https://github.com/PrismJS/prism/commit/b48c012c) + +### Updated components + +* Fixed dependencies of Pug and Pure ([#1759](https://github.com/PrismJS/prism/issues/1759)) [`c9a32674`](https://github.com/PrismJS/prism/commit/c9a32674) +* Add file extensions support for major languages ([#1478](https://github.com/PrismJS/prism/issues/1478)) [`0c8f6504`](https://github.com/PrismJS/prism/commit/0c8f6504) +* Fixed patterns which can match the empty string ([#1775](https://github.com/PrismJS/prism/issues/1775)) [`86dd3e42`](https://github.com/PrismJS/prism/commit/86dd3e42) +* More variables for better code compression ([#1489](https://github.com/PrismJS/prism/issues/1489)) [`bc53e093`](https://github.com/PrismJS/prism/commit/bc53e093) +* Added missing aliases ([#1830](https://github.com/PrismJS/prism/issues/1830)) [`8d28c74c`](https://github.com/PrismJS/prism/commit/8d28c74c) +* Replaced all occurrences of `new RegExp` with `RegExp` ([#1493](https://github.com/PrismJS/prism/issues/1493)) [`44fed4d3`](https://github.com/PrismJS/prism/commit/44fed4d3) +* Added missing aliases to components.json ([#1503](https://github.com/PrismJS/prism/issues/1503)) [`2fb66e04`](https://github.com/PrismJS/prism/commit/2fb66e04) +* __Apacheconf__ + * Apache config: Minor improvements + new keyword ([#1823](https://github.com/PrismJS/prism/issues/1823)) [`a91be7b2`](https://github.com/PrismJS/prism/commit/a91be7b2) +* __AsciiDoc__ + * Added `adoc` alias for AsciiDoc ([#1685](https://github.com/PrismJS/prism/issues/1685)) [`88434f7a`](https://github.com/PrismJS/prism/commit/88434f7a) +* __Bash__ + * Add additional commands to bash ([#1577](https://github.com/PrismJS/prism/issues/1577)) [`a2230c38`](https://github.com/PrismJS/prism/commit/a2230c38) + * Added `yarn add` to bash functions ([#1731](https://github.com/PrismJS/prism/issues/1731)) [`3a32cb75`](https://github.com/PrismJS/prism/commit/3a32cb75) + * Added `pnpm` function to Bash ([#1734](https://github.com/PrismJS/prism/issues/1734)) [`fccfb98d`](https://github.com/PrismJS/prism/commit/fccfb98d) +* __Batch__ + * Remove batch's shell alias ([#1543](https://github.com/PrismJS/prism/issues/1543)) [`7155e60f`](https://github.com/PrismJS/prism/commit/7155e60f) +* __C__ + * Improve C language ([#1697](https://github.com/PrismJS/prism/issues/1697)) [`7eccea5c`](https://github.com/PrismJS/prism/commit/7eccea5c) +* __C-like__ + * Simplify function pattern of C-like language ([#1552](https://github.com/PrismJS/prism/issues/1552)) [`b520e1b6`](https://github.com/PrismJS/prism/commit/b520e1b6) +* __C/C++/Java__ + * Operator fixes ([#1528](https://github.com/PrismJS/prism/issues/1528)) [`7af8f8be`](https://github.com/PrismJS/prism/commit/7af8f8be) +* __C#__ + * Improvements to C# operator and punctuation ([#1532](https://github.com/PrismJS/prism/issues/1532)) [`3b1e0916`](https://github.com/PrismJS/prism/commit/3b1e0916) +* __CSS__ + * Fix tokenizing !important ([#1585](https://github.com/PrismJS/prism/issues/1585)) [`c1d6cb85`](https://github.com/PrismJS/prism/commit/c1d6cb85) + * Added the comma to the list of CSS punctuation [`7ea2ff28`](https://github.com/PrismJS/prism/commit/7ea2ff28) + * CSS: Comma punctuation ([#1632](https://github.com/PrismJS/prism/issues/1632)) [`1b812386`](https://github.com/PrismJS/prism/commit/1b812386) + * Reuse CSS selector pattern in CSS Extras ([#1637](https://github.com/PrismJS/prism/issues/1637)) [`e2f2fd19`](https://github.com/PrismJS/prism/commit/e2f2fd19) + * Fixed CSS extra variable ([#1649](https://github.com/PrismJS/prism/issues/1649)) [`9de47d3a`](https://github.com/PrismJS/prism/commit/9de47d3a) + * Identify CSS units and variables ([#1450](https://github.com/PrismJS/prism/issues/1450)) [`5fcee966`](https://github.com/PrismJS/prism/commit/5fcee966) + * Allow multiline CSS at-rules ([#1676](https://github.com/PrismJS/prism/issues/1676)) [`4f6f3c7d`](https://github.com/PrismJS/prism/commit/4f6f3c7d) + * CSS: Highlight attribute selector ([#1671](https://github.com/PrismJS/prism/issues/1671)) [`245b59d4`](https://github.com/PrismJS/prism/commit/245b59d4) + * CSS: Selectors can contain any string ([#1638](https://github.com/PrismJS/prism/issues/1638)) [`a2d445d0`](https://github.com/PrismJS/prism/commit/a2d445d0) + * CSS extras: Highlighting for pseudo class arguments ([#1650](https://github.com/PrismJS/prism/issues/1650)) [`70a40414`](https://github.com/PrismJS/prism/commit/70a40414) +* __Django__ + * Django/Jinja2 improvements ([#1800](https://github.com/PrismJS/prism/issues/1800)) [`f2467488`](https://github.com/PrismJS/prism/commit/f2467488) +* __F#__ + * Chars can only contain one character ([#1570](https://github.com/PrismJS/prism/issues/1570)) [`f96b083a`](https://github.com/PrismJS/prism/commit/f96b083a) + * Improve F# ([#1573](https://github.com/PrismJS/prism/issues/1573)) [`00bfc969`](https://github.com/PrismJS/prism/commit/00bfc969) +* __GraphQL__ + * Improved field highlighting for GraphQL ([#1711](https://github.com/PrismJS/prism/issues/1711)) [`44aeffb9`](https://github.com/PrismJS/prism/commit/44aeffb9) + * Added GraphQL improvements and tests ([#1788](https://github.com/PrismJS/prism/issues/1788)) [`b2298b12`](https://github.com/PrismJS/prism/commit/b2298b12) +* __Haskell__ + * Added `hs` alias for Haskell ([#1831](https://github.com/PrismJS/prism/issues/1831)) [`64baec3c`](https://github.com/PrismJS/prism/commit/64baec3c) +* __HTTP__ + * Improved HTTP content highlighting ([#1598](https://github.com/PrismJS/prism/issues/1598)) [`1b75da90`](https://github.com/PrismJS/prism/commit/1b75da90) +* __Ini__ + * Add support for # comments to INI language ([#1730](https://github.com/PrismJS/prism/issues/1730)) [`baf6bb0c`](https://github.com/PrismJS/prism/commit/baf6bb0c) +* __Java__ + * Add Java 10 support ([#1549](https://github.com/PrismJS/prism/issues/1549)) [`8c981a22`](https://github.com/PrismJS/prism/commit/8c981a22) + * Added module keywords to Java. ([#1655](https://github.com/PrismJS/prism/issues/1655)) [`6e250a5f`](https://github.com/PrismJS/prism/commit/6e250a5f) + * Improve Java ([#1474](https://github.com/PrismJS/prism/issues/1474)) [`81bd8f0b`](https://github.com/PrismJS/prism/commit/81bd8f0b) +* __JavaScript__ + * Fix regex for `catch` and `finally` ([#1527](https://github.com/PrismJS/prism/issues/1527)) [`ebd1b9a6`](https://github.com/PrismJS/prism/commit/ebd1b9a6) + * Highlighting of supposed classes and functions ([#1482](https://github.com/PrismJS/prism/issues/1482)) [`c40f6047`](https://github.com/PrismJS/prism/commit/c40f6047) + * Added support for JS BigInt literals ([#1542](https://github.com/PrismJS/prism/issues/1542)) [`2b62e57b`](https://github.com/PrismJS/prism/commit/2b62e57b) + * Fixed lowercase supposed class names ([#1544](https://github.com/PrismJS/prism/issues/1544)) [`a47c05ad`](https://github.com/PrismJS/prism/commit/a47c05ad) + * Fixes regex for JS examples ([#1591](https://github.com/PrismJS/prism/issues/1591)) [`b41fb8f1`](https://github.com/PrismJS/prism/commit/b41fb8f1) + * Improve regex detection in JS ([#1473](https://github.com/PrismJS/prism/issues/1473)) [`2a4758ab`](https://github.com/PrismJS/prism/commit/2a4758ab) + * Identify JavaScript function parameters ([#1446](https://github.com/PrismJS/prism/issues/1446)) [`0cc8c56a`](https://github.com/PrismJS/prism/commit/0cc8c56a) + * Improved JavaScript parameter recognization ([#1722](https://github.com/PrismJS/prism/issues/1722)) [`57a92035`](https://github.com/PrismJS/prism/commit/57a92035) + * Make `undefined` a keyword in JS ([#1740](https://github.com/PrismJS/prism/issues/1740)) [`d9fa29a8`](https://github.com/PrismJS/prism/commit/d9fa29a8) + * Fix `function-variable` in JS ([#1739](https://github.com/PrismJS/prism/issues/1739)) [`bfbea4d6`](https://github.com/PrismJS/prism/commit/bfbea4d6) + * Improved JS constant pattern ([#1737](https://github.com/PrismJS/prism/issues/1737)) [`7bcec584`](https://github.com/PrismJS/prism/commit/7bcec584) + * Improved JS function pattern ([#1736](https://github.com/PrismJS/prism/issues/1736)) [`8378ac83`](https://github.com/PrismJS/prism/commit/8378ac83) + * JS: Fixed variables named "async" ([#1738](https://github.com/PrismJS/prism/issues/1738)) [`3560c643`](https://github.com/PrismJS/prism/commit/3560c643) + * JS: Keyword fix ([#1808](https://github.com/PrismJS/prism/issues/1808)) [`f2d8e1c7`](https://github.com/PrismJS/prism/commit/f2d8e1c7) +* __JSON__ / __JSONP__ + * Fix bugs in JSON language ([#1479](https://github.com/PrismJS/prism/issues/1479)) [`74fe81c6`](https://github.com/PrismJS/prism/commit/74fe81c6) + * Adds support for comments in JSON ([#1595](https://github.com/PrismJS/prism/issues/1595)) [`8720b3e6`](https://github.com/PrismJS/prism/commit/8720b3e6) + * Cleaned up JSON ([#1596](https://github.com/PrismJS/prism/issues/1596)) [`da474c77`](https://github.com/PrismJS/prism/commit/da474c77) + * Added `keyword` alias to JSON's `null` ([#1733](https://github.com/PrismJS/prism/issues/1733)) [`eee06649`](https://github.com/PrismJS/prism/commit/eee06649) + * Fix JSONP support ([#1745](https://github.com/PrismJS/prism/issues/1745)) [`b5041cf9`](https://github.com/PrismJS/prism/commit/b5041cf9) + * Fixed JSON/JSONP examples ([#1765](https://github.com/PrismJS/prism/issues/1765)) [`ae4842db`](https://github.com/PrismJS/prism/commit/ae4842db) +* __JSX__ + * React component tags are styled as classes in JSX ([#1519](https://github.com/PrismJS/prism/issues/1519)) [`3e1a9a3d`](https://github.com/PrismJS/prism/commit/3e1a9a3d) + * Support JSX/TSX class-name with dot ([#1725](https://github.com/PrismJS/prism/issues/1725)) [`4362e42c`](https://github.com/PrismJS/prism/commit/4362e42c) +* __Less__ + * Remove useless insertBefore in LESS ([#1629](https://github.com/PrismJS/prism/issues/1629)) [`86d31793`](https://github.com/PrismJS/prism/commit/86d31793) +* __Lisp__ + * Fix Lisp exponential string pattern ([#1763](https://github.com/PrismJS/prism/issues/1763)) [`5bd182c0`](https://github.com/PrismJS/prism/commit/5bd182c0)) +* __Markdown__ + * Added strike support to markdown ([#1563](https://github.com/PrismJS/prism/issues/1563)) [`9d2fddc2`](https://github.com/PrismJS/prism/commit/9d2fddc2) + * Fixed Markdown headers ([#1557](https://github.com/PrismJS/prism/issues/1557)) [`c6584290`](https://github.com/PrismJS/prism/commit/c6584290) + * Add support for code blocks in Markdown ([#1562](https://github.com/PrismJS/prism/issues/1562)) [`b0717e70`](https://github.com/PrismJS/prism/commit/b0717e70) + * Markdown: The 'md' alias is now recognized by hooks ([#1771](https://github.com/PrismJS/prism/issues/1771)) [`8ca3d65b`](https://github.com/PrismJS/prism/commit/8ca3d65b) +* __Markup__ + * Decouple XML from Markup ([#1603](https://github.com/PrismJS/prism/issues/1603)) [`0030a4ef`](https://github.com/PrismJS/prism/commit/0030a4ef) + * Fix for markup attributes ([#1752](https://github.com/PrismJS/prism/issues/1752)) [`c3862a24`](https://github.com/PrismJS/prism/commit/c3862a24) + * Markup: Added support for CSS and JS inside of CDATAs ([#1660](https://github.com/PrismJS/prism/issues/1660)) [`57127701`](https://github.com/PrismJS/prism/commit/57127701) + * Markup `addInline` improvements ([#1798](https://github.com/PrismJS/prism/issues/1798)) [`af67c32e`](https://github.com/PrismJS/prism/commit/af67c32e) +* __Markup Templating__ + * Markup-templating improvements ([#1653](https://github.com/PrismJS/prism/issues/1653)) [`b62e282b`](https://github.com/PrismJS/prism/commit/b62e282b) +* __nginx__ + * Add new keywords to nginx ([#1587](https://github.com/PrismJS/prism/issues/1587)) [`0d73f7f5`](https://github.com/PrismJS/prism/commit/0d73f7f5) +* __PHP__ + * Update PHP keywords ([#1690](https://github.com/PrismJS/prism/issues/1690)) [`55fb0f8e`](https://github.com/PrismJS/prism/commit/55fb0f8e) + * Improve recognition of constants in PHP ([#1688](https://github.com/PrismJS/prism/issues/1688)) [`f1026b4b`](https://github.com/PrismJS/prism/commit/f1026b4b) + * Made false, true, and null constants in PHP ([#1694](https://github.com/PrismJS/prism/issues/1694)) [`439e3bd7`](https://github.com/PrismJS/prism/commit/439e3bd7) + * PHP: Fixed closing tag issue ([#1652](https://github.com/PrismJS/prism/issues/1652)) [`289ddd9b`](https://github.com/PrismJS/prism/commit/289ddd9b) +* __Python__ + * Operator keywords are now keywords ([#1617](https://github.com/PrismJS/prism/issues/1617)) [`1d1fb800`](https://github.com/PrismJS/prism/commit/1d1fb800) + * Add decorator support to Python ([#1639](https://github.com/PrismJS/prism/issues/1639)) [`2577b6e6`](https://github.com/PrismJS/prism/commit/2577b6e6) + * Improvements to Python F-strings and string prefixes ([#1642](https://github.com/PrismJS/prism/issues/1642)) [`a69c2b62`](https://github.com/PrismJS/prism/commit/a69c2b62) +* __Reason__ + * Added additional operators to Reason ([#1648](https://github.com/PrismJS/prism/issues/1648)) [`8b1bb469`](https://github.com/PrismJS/prism/commit/8b1bb469) +* __Ruby__ + * Consistent Ruby method highlighting ([#1523](https://github.com/PrismJS/prism/issues/1523)) [`72775919`](https://github.com/PrismJS/prism/commit/72775919) + * Ruby/ERB: Fixed block comments ([#1768](https://github.com/PrismJS/prism/issues/1768)) [`c805f859`](https://github.com/PrismJS/prism/commit/c805f859) +* __Rust__ + * Add missing keywords ([#1634](https://github.com/PrismJS/prism/issues/1634)) [`3590edde`](https://github.com/PrismJS/prism/commit/3590edde) +* __SAS__ + * Added new SAS keywords ([#1784](https://github.com/PrismJS/prism/issues/1784)) [`3b396ef5`](https://github.com/PrismJS/prism/commit/3b396ef5) +* __Scheme__ + * Fix function without arguments in scheme language ([#1463](https://github.com/PrismJS/prism/issues/1463)) [`12a827e7`](https://github.com/PrismJS/prism/commit/12a827e7) + * Scheme improvements ([#1556](https://github.com/PrismJS/prism/issues/1556)) [`225dd3f7`](https://github.com/PrismJS/prism/commit/225dd3f7) + * Fixed operator-like functions in Scheme ([#1467](https://github.com/PrismJS/prism/issues/1467)) [`f8c8add2`](https://github.com/PrismJS/prism/commit/f8c8add2) + * Scheme: Minor improvements ([#1814](https://github.com/PrismJS/prism/issues/1814)) [`191830f2`](https://github.com/PrismJS/prism/commit/191830f2) +* __SCSS__ + * Fixed that selector pattern can take exponential time ([#1499](https://github.com/PrismJS/prism/issues/1499)) [`0f75d9d4`](https://github.com/PrismJS/prism/commit/0f75d9d4) + * Move SCSS `property` definition ([#1633](https://github.com/PrismJS/prism/issues/1633)) [`0536fb14`](https://github.com/PrismJS/prism/commit/0536fb14) + * Add `keyword` alias for SCSS' `null` ([#1735](https://github.com/PrismJS/prism/issues/1735)) [`bd0378f0`](https://github.com/PrismJS/prism/commit/bd0378f0) +* __Smalltalk__ + * Allowed empty strings and comments ([#1747](https://github.com/PrismJS/prism/issues/1747)) [`5fd7577a`](https://github.com/PrismJS/prism/commit/5fd7577a) +* __Smarty__ + * Removed useless `insertBefore` call in Smarty ([#1677](https://github.com/PrismJS/prism/issues/1677)) [`bc49c361`](https://github.com/PrismJS/prism/commit/bc49c361) +* __SQL__ + * Added support for quote escapes to SQL strings ([#1500](https://github.com/PrismJS/prism/issues/1500)) [`a59a7926`](https://github.com/PrismJS/prism/commit/a59a7926) + * SQL Quoted variables are now greedy ([#1510](https://github.com/PrismJS/prism/issues/1510)) [`42d119a2`](https://github.com/PrismJS/prism/commit/42d119a2) +* __TypeScript__ + * Enhance definitions in TypeScript component ([#1522](https://github.com/PrismJS/prism/issues/1522)) [`11695629`](https://github.com/PrismJS/prism/commit/11695629) +* __YAML__ + * Allow YAML strings to have trailing comments ([#1602](https://github.com/PrismJS/prism/issues/1602)) [`1c5f28a9`](https://github.com/PrismJS/prism/commit/1c5f28a9) + +### Updated plugins + +* Better class name detection for plugins ([#1772](https://github.com/PrismJS/prism/issues/1772)) [`c9762c6f`](https://github.com/PrismJS/prism/commit/c9762c6f) +* __Autolinker__ + * Fix Autolinker url-decoding all tokens ([#1723](https://github.com/PrismJS/prism/issues/1723)) [`8cf20d49`](https://github.com/PrismJS/prism/commit/8cf20d49) +* __Autoloader__ + * Resolved variable name clash ([#1568](https://github.com/PrismJS/prism/issues/1568)) [`bfa5a8d9`](https://github.com/PrismJS/prism/commit/bfa5a8d9) + * Autoloader: Fixed the directory of scripts ([#1828](https://github.com/PrismJS/prism/issues/1828)) [`fd4c764f`](https://github.com/PrismJS/prism/commit/fd4c764f) + * Autoloader: Added support for aliases ([#1829](https://github.com/PrismJS/prism/issues/1829)) [`52889b5b`](https://github.com/PrismJS/prism/commit/52889b5b) +* __Command Line__ + * Fixed class regex for Command Line plugin ([#1566](https://github.com/PrismJS/prism/issues/1566)) [`9f6e5026`](https://github.com/PrismJS/prism/commit/9f6e5026) +* __File Highlight__ + * Prevent double-loading & add scope to File Highlight ([#1586](https://github.com/PrismJS/prism/issues/1586)) [`10239c14`](https://github.com/PrismJS/prism/commit/10239c14) +* __JSONP Highlight__ + * Cleanup JSONP highlight code ([#1674](https://github.com/PrismJS/prism/issues/1674)) [`28489698`](https://github.com/PrismJS/prism/commit/28489698) + * Fix typos & other issues in JSONP docs ([#1672](https://github.com/PrismJS/prism/issues/1672)) [`cd058a91`](https://github.com/PrismJS/prism/commit/cd058a91) + * JSONP highlight: Fixed minified adapter names ([#1793](https://github.com/PrismJS/prism/issues/1793)) [`5dd8f916`](https://github.com/PrismJS/prism/commit/5dd8f916) +* __Keep Markup__ + * Add unit tests to the Keep Markup plugin ([#1646](https://github.com/PrismJS/prism/issues/1646)) [`a944c418`](https://github.com/PrismJS/prism/commit/a944c418) +* __Line Numbers__ + * Added inheritance for the `line-numbers` class ([#1799](https://github.com/PrismJS/prism/issues/1799)) [`14be7489`](https://github.com/PrismJS/prism/commit/14be7489) +* __Previewers__ + * Fixed Previewers bug [#1496](https://github.com/PrismJS/prism/issues/1496) ([#1497](https://github.com/PrismJS/prism/issues/1497)) [`4b56f3c1`](https://github.com/PrismJS/prism/commit/4b56f3c1) +* __Show Invisibles__ + * Updated styles of show invisibles ([#1607](https://github.com/PrismJS/prism/issues/1607)) [`2ba62268`](https://github.com/PrismJS/prism/commit/2ba62268) + * Corrected load order of Show Invisibles ([#1612](https://github.com/PrismJS/prism/issues/1612)) [`6e0c6e86`](https://github.com/PrismJS/prism/commit/6e0c6e86) + * Show invisibles inside tokens ([#1610](https://github.com/PrismJS/prism/issues/1610)) [`1090b253`](https://github.com/PrismJS/prism/commit/1090b253) +* __Show Language__ + * Show Language plugin alias support and improvements ([#1683](https://github.com/PrismJS/prism/issues/1683)) [`4c66d72c`](https://github.com/PrismJS/prism/commit/4c66d72c) +* __Toolbar__ + * Toolbar: Minor improvements ([#1818](https://github.com/PrismJS/prism/issues/1818)) [`3ad47047`](https://github.com/PrismJS/prism/commit/3ad47047) + +### Updated themes + +* Normalized the font-size of pre and code ([#1791](https://github.com/PrismJS/prism/issues/1791)) [`878ef295`](https://github.com/PrismJS/prism/commit/878ef295) +* __Coy__ + * Correct typo ([#1508](https://github.com/PrismJS/prism/issues/1508)) [`c322fc80`](https://github.com/PrismJS/prism/commit/c322fc80) + +### Other changes + +* __Core__ + * `insertBefore` now correctly updates references ([#1531](https://github.com/PrismJS/prism/issues/1531)) [`9dfec340`](https://github.com/PrismJS/prism/commit/9dfec340) + * Invoke `callback` after `after-highlight` hook ([#1588](https://github.com/PrismJS/prism/issues/1588)) [`bfbe4464`](https://github.com/PrismJS/prism/commit/bfbe4464) + * Improve `Prism.util.type` performance ([#1545](https://github.com/PrismJS/prism/issues/1545)) [`2864fe24`](https://github.com/PrismJS/prism/commit/2864fe24) + * Remove unused `insertBefore` overload ([#1631](https://github.com/PrismJS/prism/issues/1631)) [`39686e12`](https://github.com/PrismJS/prism/commit/39686e12) + * Ignore duplicates in insertBefore ([#1628](https://github.com/PrismJS/prism/issues/1628)) [`d33d259c`](https://github.com/PrismJS/prism/commit/d33d259c) + * Remove the Prism.tokenize language parameter ([#1654](https://github.com/PrismJS/prism/issues/1654)) [`fbf0b094`](https://github.com/PrismJS/prism/commit/fbf0b094) + * Call `insert-before` hook properly ([#1709](https://github.com/PrismJS/prism/issues/1709)) [`393ab164`](https://github.com/PrismJS/prism/commit/393ab164) + * Improved languages.DFS and util.clone ([#1506](https://github.com/PrismJS/prism/issues/1506)) [`152a68ef`](https://github.com/PrismJS/prism/commit/152a68ef) + * Core: Avoid redeclaring variables in util.clone ([#1778](https://github.com/PrismJS/prism/issues/1778)) [`b06f532f`](https://github.com/PrismJS/prism/commit/b06f532f) + * Made prism-core a little more editor friendly ([#1776](https://github.com/PrismJS/prism/issues/1776)) [`bac09f0a`](https://github.com/PrismJS/prism/commit/bac09f0a) + * Applied Array.isArray ([#1804](https://github.com/PrismJS/prism/issues/1804)) [`11d0f75e`](https://github.com/PrismJS/prism/commit/11d0f75e) +* __Infrastructure__ + * Linkify changelog more + add missing PR references [`2a100db7`](https://github.com/PrismJS/prism/commit/2a100db7) + * Set default indentation size ([#1516](https://github.com/PrismJS/prism/issues/1516)) [`e63d1597`](https://github.com/PrismJS/prism/commit/e63d1597) + * Add travis repo badge to readme ([#1561](https://github.com/PrismJS/prism/issues/1561)) [`716923f4`](https://github.com/PrismJS/prism/commit/716923f4) + * Update README.md ([#1553](https://github.com/PrismJS/prism/issues/1553)) [`6d1a2c61`](https://github.com/PrismJS/prism/commit/6d1a2c61) + * Mention Prism Themes in README ([#1625](https://github.com/PrismJS/prism/issues/1625)) [`5db04656`](https://github.com/PrismJS/prism/commit/5db04656) + * Fixed CHANGELOG.md ([#1707](https://github.com/PrismJS/prism/issues/1707)) [`b1f8a65d`](https://github.com/PrismJS/prism/commit/b1f8a65d) ([#1704](https://github.com/PrismJS/prism/issues/1704)) [`66d2104a`](https://github.com/PrismJS/prism/commit/66d2104a) + * Change tested NodeJS versions ([#1651](https://github.com/PrismJS/prism/issues/1651)) [`6ec71e0b`](https://github.com/PrismJS/prism/commit/6ec71e0b) + * Inline regex source with gulp ([#1537](https://github.com/PrismJS/prism/issues/1537)) [`e894fc89`](https://github.com/PrismJS/prism/commit/e894fc89) ([#1716](https://github.com/PrismJS/prism/issues/1716)) [`217a6ea4`](https://github.com/PrismJS/prism/commit/217a6ea4) + * Improve gulp error messages with pump ([#1741](https://github.com/PrismJS/prism/issues/1741)) [`671f4ca0`](https://github.com/PrismJS/prism/commit/671f4ca0) + * Update gulp to version 4.0.0 ([#1779](https://github.com/PrismJS/prism/issues/1779)) [`06627f6a`](https://github.com/PrismJS/prism/commit/06627f6a) + * gulp: Refactoring ([#1780](https://github.com/PrismJS/prism/issues/1780)) [`6c9fe257`](https://github.com/PrismJS/prism/commit/6c9fe257) + * npm: Updated all dependencies ([#1742](https://github.com/PrismJS/prism/issues/1742)) [`9d908d5a`](https://github.com/PrismJS/prism/commit/9d908d5a) + * Tests: Pretty-printed token stream ([#1801](https://github.com/PrismJS/prism/issues/1801)) [`9ea6d600`](https://github.com/PrismJS/prism/commit/9ea6d600) + * Refactored tests ([#1795](https://github.com/PrismJS/prism/issues/1795)) [`832a9643`](https://github.com/PrismJS/prism/commit/832a9643) + * Added issue templates ([#1805](https://github.com/PrismJS/prism/issues/1805)) [`dedb475f`](https://github.com/PrismJS/prism/commit/dedb475f) + * npm: Fixed `test` script ([#1809](https://github.com/PrismJS/prism/issues/1809)) [`bc649dfa`](https://github.com/PrismJS/prism/commit/bc649dfa) + * Add command to generate CHANGELOG [`212666d3`](https://github.com/PrismJS/prism/commit/212666d3) + * Name in composer.json set to lowercase ([#1824](https://github.com/PrismJS/prism/issues/1824)) [`4f78f1d6`](https://github.com/PrismJS/prism/commit/4f78f1d6) + * Added alias tests ([#1832](https://github.com/PrismJS/prism/issues/1832)) [`5c1a6fb2`](https://github.com/PrismJS/prism/commit/5c1a6fb2) + * Travis: Fail when changed files are detected ([#1819](https://github.com/PrismJS/prism/issues/1819)) [`66b44e3b`](https://github.com/PrismJS/prism/commit/66b44e3b) + * Tests: Additional checks for Prism functions ([#1803](https://github.com/PrismJS/prism/issues/1803)) [`c3e74ea3`](https://github.com/PrismJS/prism/commit/c3e74ea3) + * Adjusted .npmignore ([#1834](https://github.com/PrismJS/prism/issues/1834)) [`29a30c62`](https://github.com/PrismJS/prism/commit/29a30c62) +* __Website__ + * Add Python triple-quoted strings "known failure" ([#1449](https://github.com/PrismJS/prism/issues/1449)) [`334c7bca`](https://github.com/PrismJS/prism/commit/334c7bca) + * Updated index.html to fix broken instructions ([#1462](https://github.com/PrismJS/prism/issues/1462)) [`7418dfdd`](https://github.com/PrismJS/prism/commit/7418dfdd) + * Improve download page typography ([#1484](https://github.com/PrismJS/prism/issues/1484)) [`b1c2f4df`](https://github.com/PrismJS/prism/commit/b1c2f4df) + * Fixed peer dependencies in download page ([#1491](https://github.com/PrismJS/prism/issues/1491)) [`9d15ff6e`](https://github.com/PrismJS/prism/commit/9d15ff6e) + * Fixed empty link in extending ([#1507](https://github.com/PrismJS/prism/issues/1507)) [`74916d48`](https://github.com/PrismJS/prism/commit/74916d48) + * Display language aliases ([#1626](https://github.com/PrismJS/prism/issues/1626)) [`654b527b`](https://github.com/PrismJS/prism/commit/654b527b) + * Clean up Previewers' page ([#1630](https://github.com/PrismJS/prism/issues/1630)) [`b0d1823c`](https://github.com/PrismJS/prism/commit/b0d1823c) + * Updated website table of contents styles ([#1681](https://github.com/PrismJS/prism/issues/1681)) [`efdd96c3`](https://github.com/PrismJS/prism/commit/efdd96c3) + * Added new third-party tutorial for using Prism in Gutenberg ([#1701](https://github.com/PrismJS/prism/issues/1701)) [`ff9ccbe5`](https://github.com/PrismJS/prism/commit/ff9ccbe5) + * Remove dead tutorial ([#1702](https://github.com/PrismJS/prism/issues/1702)) [`e2d3bc7e`](https://github.com/PrismJS/prism/commit/e2d3bc7e) + * Fix downloads page fetching from GitHub([#1684](https://github.com/PrismJS/prism/issues/1684)) [`dbd3555e`](https://github.com/PrismJS/prism/commit/dbd3555e) + * Remove parentheses from download page ([#1627](https://github.com/PrismJS/prism/issues/1627)) [`2ce0666d`](https://github.com/PrismJS/prism/commit/2ce0666d) + * Line Numbers plugin instructions clarifications ([#1719](https://github.com/PrismJS/prism/issues/1719)) [`00f4f04f`](https://github.com/PrismJS/prism/commit/00f4f04f) + * Fixed Toolbar plugin example ([#1726](https://github.com/PrismJS/prism/issues/1726)) [`5311ca32`](https://github.com/PrismJS/prism/commit/5311ca32) + * Test page: Show tokens option ([#1757](https://github.com/PrismJS/prism/issues/1757)) [`729cb28b`](https://github.com/PrismJS/prism/commit/729cb28b) + * Some encouragement for visitors of PrismJS.com to request new languages ([#1760](https://github.com/PrismJS/prism/issues/1760)) [`ea769e0b`](https://github.com/PrismJS/prism/commit/ea769e0b) + * Docs: Added missing parameter ([#1774](https://github.com/PrismJS/prism/issues/1774)) [`18f2921d`](https://github.com/PrismJS/prism/commit/18f2921d) + * More persistent test page ([#1529](https://github.com/PrismJS/prism/issues/1529)) [`3100fa31`](https://github.com/PrismJS/prism/commit/3100fa31) + * Added scripts directory ([#1781](https://github.com/PrismJS/prism/issues/1781)) [`439ea1ee`](https://github.com/PrismJS/prism/commit/439ea1ee) + * Fixed download page ([#1811](https://github.com/PrismJS/prism/issues/1811)) [`77c57446`](https://github.com/PrismJS/prism/commit/77c57446) + +## 1.15.0 (2018-06-16) + +### New components + +* __Template Tookit 2__ ([#1418](https://github.com/PrismJS/prism/issues/1418)) [[`e063992`](https://github.com/PrismJS/prism/commit/e063992)] +* __XQuery__ ([#1411](https://github.com/PrismJS/prism/issues/1411)) [[`e326cb0`](https://github.com/PrismJS/prism/commit/e326cb0)] +* __TAP__ ([#1430](https://github.com/PrismJS/prism/issues/1430)) [[`8c2b71f`](https://github.com/PrismJS/prism/commit/8c2b71f)] + +### Updated components + +* __HTTP__ + * Absolute path is a valid request uri ([#1388](https://github.com/PrismJS/prism/issues/1388)) [[`f6e81cb`](https://github.com/PrismJS/prism/commit/f6e81cb)] +* __Kotlin__ + * Add keywords of Kotlin and modify it's number pattern. ([#1389](https://github.com/PrismJS/prism/issues/1389)) [[`1bf73b0`](https://github.com/PrismJS/prism/commit/1bf73b0)] + * Add `typealias` keyword ([#1437](https://github.com/PrismJS/prism/issues/1437)) [[`a21fdee`](https://github.com/PrismJS/prism/commit/a21fdee)] +* __JavaScript__ + * Improve Regexp pattern [[`5b043cf`](https://github.com/PrismJS/prism/commit/5b043cf)] + * Add support for one level of nesting inside template strings. Fix [#1397](https://github.com/PrismJS/prism/issues/1397) [[`db2d0eb`](https://github.com/PrismJS/prism/commit/db2d0eb)] +* __Elixir__ + * Elixir: Fix attributes consuming punctuation. Fix [#1392](https://github.com/PrismJS/prism/issues/1392) [[`dac0485`](https://github.com/PrismJS/prism/commit/dac0485)] +* __Bash__ + * Change reserved keyword reference ([#1396](https://github.com/PrismJS/prism/issues/1396)) [[`b94f01f`](https://github.com/PrismJS/prism/commit/b94f01f)] +* __PowerShell__ + * Allow for one level of nesting in expressions inside strings. Fix [#1407](https://github.com/PrismJS/prism/issues/1407) [[`9272d6f`](https://github.com/PrismJS/prism/commit/9272d6f)] +* __JSX__ + * Allow for two levels of nesting inside JSX tags. Fix [#1408](https://github.com/PrismJS/prism/issues/1408) [[`f1cd7c5`](https://github.com/PrismJS/prism/commit/f1cd7c5)] + * Add support for fragments short syntax. Fix [#1421](https://github.com/PrismJS/prism/issues/1421) [[`38ce121`](https://github.com/PrismJS/prism/commit/38ce121)] +* __Pascal__ + * Add `objectpascal` as an alias to `pascal` ([#1426](https://github.com/PrismJS/prism/issues/1426)) [[`a0bfc84`](https://github.com/PrismJS/prism/commit/a0bfc84)] +* __Swift__ + * Fix Swift 'protocol' keyword ([#1440](https://github.com/PrismJS/prism/issues/1440)) [[`081e318`](https://github.com/PrismJS/prism/commit/081e318)] + +### Updated plugins + +* __File Highlight__ + * Fix issue causing the Download button to show up on every code blocks. [[`cd22499`](https://github.com/PrismJS/prism/commit/cd22499)] + * Simplify lang regex on File Highlight plugin ([#1399](https://github.com/PrismJS/prism/issues/1399)) [[`7bc9a4a`](https://github.com/PrismJS/prism/commit/7bc9a4a)] +* __Show Language__ + * Don't process language if block language not set ([#1410](https://github.com/PrismJS/prism/issues/1410)) [[`c111869`](https://github.com/PrismJS/prism/commit/c111869)] +* __Autoloader__ + * ASP.NET should require C# [[`fa328bb`](https://github.com/PrismJS/prism/commit/fa328bb)] +* __Line Numbers__ + * Make line-numbers styles more specific ([#1434](https://github.com/PrismJS/prism/issues/1434), [#1435](https://github.com/PrismJS/prism/issues/1435)) [[`9ee4f54`](https://github.com/PrismJS/prism/commit/9ee4f54)] + +### Updated themes + +* Add .token.class-name to rest of themes ([#1360](https://github.com/PrismJS/prism/issues/1360)) [[`f356dfe`](https://github.com/PrismJS/prism/commit/f356dfe)] + +### Other changes + +* __Website__ + * Site now loads over HTTPS! + * Use HTTPS / canonical URLs ([#1390](https://github.com/PrismJS/prism/issues/1390)) [[`95146c8`](https://github.com/PrismJS/prism/commit/95146c8)] + * Added Angular tutorial link [[`c436a7c`](https://github.com/PrismJS/prism/commit/c436a7c)] + * Use rel="icon" instead of rel="shortcut icon" ([#1398](https://github.com/PrismJS/prism/issues/1398)) [[`d95f8fb`](https://github.com/PrismJS/prism/commit/d95f8fb)] + * Fix Download page not handling multiple dependencies when from Redownload URL [[`c2ff248`](https://github.com/PrismJS/prism/commit/c2ff248)] + * Update documentation for node & webpack usage [[`1e99e96`](https://github.com/PrismJS/prism/commit/1e99e96)] +* Handle optional dependencies in `loadLanguages()` ([#1417](https://github.com/PrismJS/prism/issues/1417)) [[`84935ac`](https://github.com/PrismJS/prism/commit/84935ac)] +* Add Chinese translation [[`f2b1964`](https://github.com/PrismJS/prism/commit/f2b1964)] + +## 1.14.0 (2018-04-11) + +### New components +* __GEDCOM__ ([#1385](https://github.com/PrismJS/prism/issues/1385)) [[`6e0b20a`](https://github.com/PrismJS/prism/commit/6e0b20a)] +* __Lisp__ ([#1297](https://github.com/PrismJS/prism/issues/1297)) [[`46468f8`](https://github.com/PrismJS/prism/commit/46468f8)] +* __Markup Templating__ ([#1367](https://github.com/PrismJS/prism/issues/1367)) [[`5f9c078`](https://github.com/PrismJS/prism/commit/5f9c078)] +* __Soy__ ([#1387](https://github.com/PrismJS/prism/issues/1387)) [[`b4509bf`](https://github.com/PrismJS/prism/commit/b4509bf)] +* __Velocity__ ([#1378](https://github.com/PrismJS/prism/issues/1378)) [[`5a524f7`](https://github.com/PrismJS/prism/commit/5a524f7)] +* __Visual Basic__ ([#1382](https://github.com/PrismJS/prism/issues/1382)) [[`c673ec2`](https://github.com/PrismJS/prism/commit/c673ec2)] +* __WebAssembly__ ([#1386](https://github.com/PrismJS/prism/issues/1386)) [[`c28d8c5`](https://github.com/PrismJS/prism/commit/c28d8c5)] + +### Updated components +* __Bash__: + * Add curl to the list of common functions. Close [#1160](https://github.com/PrismJS/prism/issues/1160) [[`1bfc084`](https://github.com/PrismJS/prism/commit/1bfc084)] +* __C-like__: + * Make single-line comments greedy. Fix [#1337](https://github.com/PrismJS/prism/issues/1337). Make sure [#1340](https://github.com/PrismJS/prism/issues/1340) stays fixed. [[`571f2c5`](https://github.com/PrismJS/prism/commit/571f2c5)] +* __C#__: + * More generic class-name highlighting. Fix [#1365](https://github.com/PrismJS/prism/issues/1365) [[`a6837d2`](https://github.com/PrismJS/prism/commit/a6837d2)] + * More specific class-name highlighting. Fix [#1371](https://github.com/PrismJS/prism/issues/1371) [[`0a95f69`](https://github.com/PrismJS/prism/commit/0a95f69)] +* __Eiffel__: + * Fix verbatim strings. Fix [#1379](https://github.com/PrismJS/prism/issues/1379) [[`04df41b`](https://github.com/PrismJS/prism/commit/04df41b)] +* __Elixir__ + * Make regexps greedy, remove comment hacks. Update known failures and tests. [[`e93d61f`](https://github.com/PrismJS/prism/commit/e93d61f)] +* __ERB__: + * Make highlighting work properly in NodeJS ([#1367](https://github.com/PrismJS/prism/issues/1367)) [[`5f9c078`](https://github.com/PrismJS/prism/commit/5f9c078)] +* __Fortran__: + * Make single-line comments greedy. Update known failures and tests. [[`c083b78`](https://github.com/PrismJS/prism/commit/c083b78)] +* __Handlebars__: + * Make highlighting work properly in NodeJS ([#1367](https://github.com/PrismJS/prism/issues/1367)) [[`5f9c078`](https://github.com/PrismJS/prism/commit/5f9c078)] +* __Java__: + * Add support for generics. Fix [#1351](https://github.com/PrismJS/prism/issues/1351) [[`a5cf302`](https://github.com/PrismJS/prism/commit/a5cf302)] +* __JavaScript__: + * Add support for constants. Fix [#1348](https://github.com/PrismJS/prism/issues/1348) [[`9084481`](https://github.com/PrismJS/prism/commit/9084481)] + * Improve Regex matching [[`172d351`](https://github.com/PrismJS/prism/commit/172d351)] +* __JSX__: + * Fix highlighting of empty objects. Fix [#1364](https://github.com/PrismJS/prism/issues/1364) [[`b26bbb8`](https://github.com/PrismJS/prism/commit/b26bbb8)] +* __Monkey__: + * Make comments greedy. Update known failures and tests. [[`d7b2b43`](https://github.com/PrismJS/prism/commit/d7b2b43)] +* __PHP__: + * Make highlighting work properly in NodeJS ([#1367](https://github.com/PrismJS/prism/issues/1367)) [[`5f9c078`](https://github.com/PrismJS/prism/commit/5f9c078)] +* __Puppet__: + * Make heredoc, comments, regexps and strings greedy. Update known failures and tests. [[`0c139d1`](https://github.com/PrismJS/prism/commit/0c139d1)] +* __Q__: + * Make comments greedy. Update known failures and tests. [[`a0f5081`](https://github.com/PrismJS/prism/commit/a0f5081)] +* __Ruby__: + * Make multi-line comments greedy, remove single-line comment hack. Update known failures and tests. [[`b0e34fb`](https://github.com/PrismJS/prism/commit/b0e34fb)] +* __SQL__: + * Add missing keywords. Fix [#1374](https://github.com/PrismJS/prism/issues/1374) [[`238b195`](https://github.com/PrismJS/prism/commit/238b195)] + +### Updated plugins +* __Command Line__: + * Command Line: Allow specifying output prefix using data-filter-output attribute. ([#856](https://github.com/PrismJS/prism/issues/856)) [[`094d546`](https://github.com/PrismJS/prism/commit/094d546)] +* __File Highlight__: + * Add option to provide a download button, when used with the Toolbar plugin. Fix [#1030](https://github.com/PrismJS/prism/issues/1030) [[`9f22952`](https://github.com/PrismJS/prism/commit/9f22952)] + +### Updated themes +* __Default__: + * Reach AA contrast ratio level ([#1296](https://github.com/PrismJS/prism/issues/1296)) [[`8aea939`](https://github.com/PrismJS/prism/commit/8aea939)] + +### Other changes +* Website: Remove broken third-party tutorials from homepage [[`0efd6e1`](https://github.com/PrismJS/prism/commit/0efd6e1)] +* Docs: Mention `loadLanguages()` function on homepage in the nodeJS section. Close [#972](https://github.com/PrismJS/prism/issues/972), close [#593](https://github.com/PrismJS/prism/issues/593) [[`4a14d20`](https://github.com/PrismJS/prism/commit/4a14d20)] +* Core: Greedy patterns should always be matched against the full string. Fix [#1355](https://github.com/PrismJS/prism/issues/1355) [[`294efaa`](https://github.com/PrismJS/prism/commit/294efaa)] +* Crystal: Update known failures. [[`e1d2d42`](https://github.com/PrismJS/prism/commit/e1d2d42)] +* D: Update known failures and tests. [[`13d9991`](https://github.com/PrismJS/prism/commit/13d9991)] +* Markdown: Update known failures. [[`5b6c76d`](https://github.com/PrismJS/prism/commit/5b6c76d)] +* Matlab: Update known failures. [[`259b6fc`](https://github.com/PrismJS/prism/commit/259b6fc)] +* Website: Remove non-existent anchor to failures. Reword on homepage to make is less misleading. [[`8c0911a`](https://github.com/PrismJS/prism/commit/8c0911a)] +* Website: Add link to Keep Markup plugin in FAQ [[`e8cb6d4`](https://github.com/PrismJS/prism/commit/e8cb6d4)] +* Test suite: Memory leak in vm.runInNewContext() seems fixed. Revert [[`9a4b6fa`](https://github.com/PrismJS/prism/commit/9a4b6fa)] to drastically improve tests execution time. [[`9bceece`](https://github.com/PrismJS/prism/commit/9bceece), [`7c7602b`](https://github.com/PrismJS/prism/commit/7c7602b)] +* Gulp: Don't minify `components/index.js` [[`689227b`](https://github.com/PrismJS/prism/commit/689227b)] +* Website: Fix theme selection on Download page, when theme is in query string or hash. [[`b4d3063`](https://github.com/PrismJS/prism/commit/b4d3063)] +* Update JSPM config to also include unminified components. Close [#995](https://github.com/PrismJS/prism/issues/995) [[`218f160`](https://github.com/PrismJS/prism/commit/218f160)] +* Core: Fix support for language alias containing dash `-` [[`659ea31`](https://github.com/PrismJS/prism/commit/659ea31)] + +## 1.13.0 (2018-03-21) + +### New components +* __ERB__ [[`e6213ac`](https://github.com/PrismJS/prism/commit/e6213ac)] +* __PL/SQL__ ([#1338](https://github.com/PrismJS/prism/issues/1338)) [[`3599e6a`](https://github.com/PrismJS/prism/commit/3599e6a)] + +### Updated components +* __JSX__: + * Add support for plain text inside tags ([#1357](https://github.com/PrismJS/prism/issues/1357)) [[`2b8321d`](https://github.com/PrismJS/prism/commit/2b8321d)] +* __Markup__: + * Make tags greedy. Fix [#1356](https://github.com/PrismJS/prism/issues/1356) [[`af834be`](https://github.com/PrismJS/prism/commit/af834be)] +* __Powershell__: + * Add lookbehind to fix function interpolation inside strings. Fix [#1361](https://github.com/PrismJS/prism/issues/1361) [[`d2c026e`](https://github.com/PrismJS/prism/commit/d2c026e)] +* __Rust__: + * Improve char pattern so that lifetime annotations are matched better. Fix [#1353](https://github.com/PrismJS/prism/issues/1353) [[`efdccbf`](https://github.com/PrismJS/prism/commit/efdccbf)] + +### Updated themes +* __Default__: + * Add color for class names [[`8572474`](https://github.com/PrismJS/prism/commit/8572474)] +* __Coy__: + * Inherit pre's height on code, so it does not break on Download page. [[`c6c7fd1`](https://github.com/PrismJS/prism/commit/c6c7fd1)] + +### Other changes +* Website: Auto-generate example headers [[`c3ed5b5`](https://github.com/PrismJS/prism/commit/c3ed5b5)] +* Core: Allow cloning of circular structures. ([#1345](https://github.com/PrismJS/prism/issues/1345)) [[`f90d555`](https://github.com/PrismJS/prism/commit/f90d555)] +* Core: Generate components.js from components.json and make it exportable to nodeJS. ([#1354](https://github.com/PrismJS/prism/issues/1354)) [[`ba60df0`](https://github.com/PrismJS/prism/commit/ba60df0)] +* Website: Improve appearance of theme selector [[`0460cad`](https://github.com/PrismJS/prism/commit/0460cad)] +* Website: Check stored theme by default + link both theme selectors together. Close [#1038](https://github.com/PrismJS/prism/issues/1038) [[`212dd4e`](https://github.com/PrismJS/prism/commit/212dd4e)] +* Tests: Use the new components.js file directly [[`0e1a8b7`](https://github.com/PrismJS/prism/commit/0e1a8b7)] +* Update .npmignore Close [#1274](https://github.com/PrismJS/prism/issues/1274) [[`a52319a`](https://github.com/PrismJS/prism/commit/a52319a)] +* Add a loadLanguages() function for easy component loading on NodeJS ([#1359](https://github.com/PrismJS/prism/issues/1359)) [[`a5331a6`](https://github.com/PrismJS/prism/commit/a5331a6)] + +## 1.12.2 (2018-03-08) + +### Other changes +* Test against NodeJS 4, 6, 8 and 9 ([#1329](https://github.com/PrismJS/prism/issues/1329)) [[`97b7d0a`](https://github.com/PrismJS/prism/commit/97b7d0a)] +* Stop testing against NodeJS 0.10 and 0.12 [[`df01b1b`](https://github.com/PrismJS/prism/commit/df01b1b)] + +## 1.12.1 (2018-03-08) + +### Updated components +* __C-like__: + * Revert [[`b98e5b9`](https://github.com/PrismJS/prism/commit/b98e5b9)] to fix [#1340](https://github.com/PrismJS/prism/issues/1340). Reopened [#1337](https://github.com/PrismJS/prism/issues/1337). [[`cebacdf`](https://github.com/PrismJS/prism/commit/cebacdf)] +* __JSX__: + * Allow for one level of nested curly braces inside tag attribute value. Fix [#1335](https://github.com/PrismJS/prism/issues/1335) [[`05bf67d`](https://github.com/PrismJS/prism/commit/05bf67d)] +* __Ruby__: + * Ensure module syntax is not confused with symbols. Fix [#1336](https://github.com/PrismJS/prism/issues/1336) [[`31a2a69`](https://github.com/PrismJS/prism/commit/31a2a69)] + +## 1.12.0 (2018-03-07) + +### New components +* __ARFF__ ([#1327](https://github.com/PrismJS/prism/issues/1327)) [[`0bc98ac`](https://github.com/PrismJS/prism/commit/0bc98ac)] +* __Clojure__ ([#1311](https://github.com/PrismJS/prism/issues/1311)) [[`8b4d3bd`](https://github.com/PrismJS/prism/commit/8b4d3bd)] +* __Liquid__ ([#1326](https://github.com/PrismJS/prism/issues/1326)) [[`f0b2c9e`](https://github.com/PrismJS/prism/commit/f0b2c9e)] + +### Updated components +* __Bash__: + * Add shell as an alias ([#1321](https://github.com/PrismJS/prism/issues/1321)) [[`67e16a2`](https://github.com/PrismJS/prism/commit/67e16a2)] + * Add support for quoted command substitution. Fix [#1287](https://github.com/PrismJS/prism/issues/1287) [[`63fc215`](https://github.com/PrismJS/prism/commit/63fc215)] +* __C#__: + * Add "dotnet" alias. [[`405867c`](https://github.com/PrismJS/prism/commit/405867c)] +* __C-like__: + * Change order of comment patterns and make multi-line one greedy. Fix [#1337](https://github.com/PrismJS/prism/issues/1337) [[`b98e5b9`](https://github.com/PrismJS/prism/commit/b98e5b9)] +* __NSIS__: + * Add support for NSIS 3.03 ([#1288](https://github.com/PrismJS/prism/issues/1288)) [[`bd1e98b`](https://github.com/PrismJS/prism/commit/bd1e98b)] + * Add missing NSIS commands ([#1289](https://github.com/PrismJS/prism/issues/1289)) [[`ad2948f`](https://github.com/PrismJS/prism/commit/ad2948f)] +* __PHP__: + * Add support for string interpolation inside double-quoted strings. Fix [#1146](https://github.com/PrismJS/prism/issues/1146) [[`9f1f8d6`](https://github.com/PrismJS/prism/commit/9f1f8d6)] + * Add support for Heredoc and Nowdoc strings [[`5d7223c`](https://github.com/PrismJS/prism/commit/5d7223c)] + * Fix shell-comment failure now that strings are greedy [[`ad25d22`](https://github.com/PrismJS/prism/commit/ad25d22)] +* __PowerShell__: + * Add support for two levels of nested brackets inside namespace pattern. Fixes [#1317](https://github.com/PrismJS/prism/issues/1317) [[`3bc3e9c`](https://github.com/PrismJS/prism/commit/3bc3e9c)] +* __Ruby__: + * Add keywords "protected", "private" and "public" [[`4593837`](https://github.com/PrismJS/prism/commit/4593837)] +* __Rust__: + * Add support for lifetime-annotation and => operator. Fix [#1339](https://github.com/PrismJS/prism/issues/1339) [[`926f6f8`](https://github.com/PrismJS/prism/commit/926f6f8)] +* __Scheme__: + * Don't highlight first number of a list as a function. Fix [#1331](https://github.com/PrismJS/prism/issues/1331) [[`51bff80`](https://github.com/PrismJS/prism/commit/51bff80)] +* __SQL__: + * Add missing keywords and functions, fix numbers [[`de29d4a`](https://github.com/PrismJS/prism/commit/de29d4a)] + +### Updated plugins +* __Autolinker__: + * Allow more chars in query string and hash to match more URLs. Fix [#1142](https://github.com/PrismJS/prism/issues/1142) [[`109bd6f`](https://github.com/PrismJS/prism/commit/109bd6f)] +* __Copy to Clipboard__: + * Bump ClipboardJS to 2.0.0 and remove hack ([#1314](https://github.com/PrismJS/prism/issues/1314)) [[`e9f410e`](https://github.com/PrismJS/prism/commit/e9f410e)] +* __Toolbar__: + * Prevent scrolling toolbar with content ([#1305](https://github.com/PrismJS/prism/issues/1305), [#1314](https://github.com/PrismJS/prism/issues/1314)) [[`84eeb89`](https://github.com/PrismJS/prism/commit/84eeb89)] +* __Unescaped Markup__: + * Use msMatchesSelector for IE11 and below. Fix [#1302](https://github.com/PrismJS/prism/issues/1302) [[`c246c1a`](https://github.com/PrismJS/prism/commit/c246c1a)] +* __WebPlatform Docs__: + * WebPlatform Docs plugin: Fix links. Fixes [#1290](https://github.com/PrismJS/prism/issues/1290) [[`7a9dbe0`](https://github.com/PrismJS/prism/commit/7a9dbe0)] + +### Other changes +* Fix Autoloader's demo page [[`3dddac9`](https://github.com/PrismJS/prism/commit/3dddac9)] +* Download page: Use hash instead of query-string for redownload URL. Fix [#1263](https://github.com/PrismJS/prism/issues/1263) [[`b03c02a`](https://github.com/PrismJS/prism/commit/b03c02a)] +* Core: Don't thow an error if lookbehing is used without anything matching. [[`e0cd47f`](https://github.com/PrismJS/prism/commit/e0cd47f)] +* Docs: Fix link to the `` element specification in HTML5 [[`a84263f`](https://github.com/PrismJS/prism/commit/a84263f)] +* Docs: Mention support for `lang-xxxx` class. Close [#1312](https://github.com/PrismJS/prism/issues/1312) [[`a9e76db`](https://github.com/PrismJS/prism/commit/a9e76db)] +* Docs: Add note on `async` parameter to clarify the requirement of using a single bundled file. Closes [#1249](https://github.com/PrismJS/prism/issues/1249) [[`eba0235`](https://github.com/PrismJS/prism/commit/eba0235)] + +## 1.11.0 (2018-02-05) + +### New components +* __Content-Security-Policy (CSP)__ ([#1275](https://github.com/PrismJS/prism/issues/1275)) [[`b08cae5`](https://github.com/PrismJS/prism/commit/b08cae5)] +* __HTTP Public-Key-Pins (HPKP)__ ([#1275](https://github.com/PrismJS/prism/issues/1275)) [[`b08cae5`](https://github.com/PrismJS/prism/commit/b08cae5)] +* __HTTP String-Transport-Security (HSTS)__ ([#1275](https://github.com/PrismJS/prism/issues/1275)) [[`b08cae5`](https://github.com/PrismJS/prism/commit/b08cae5)] +* __React TSX__ ([#1280](https://github.com/PrismJS/prism/issues/1280)) [[`fbe82b8`](https://github.com/PrismJS/prism/commit/fbe82b8)] + +### Updated components +* __C++__: + * Add C++ platform-independent types ([#1271](https://github.com/PrismJS/prism/issues/1271)) [[`3da238f`](https://github.com/PrismJS/prism/commit/3da238f)] +* __TypeScript__: + * Improve typescript with builtins ([#1277](https://github.com/PrismJS/prism/issues/1277)) [[`5de1b1f`](https://github.com/PrismJS/prism/commit/5de1b1f)] + +### Other changes +* Fix passing of non-enumerable Error properties from the child test runner ([#1276](https://github.com/PrismJS/prism/issues/1276)) [[`38df653`](https://github.com/PrismJS/prism/commit/38df653)] + +## 1.10.0 (2018-01-17) + +### New components +* __6502 Assembly__ ([#1245](https://github.com/PrismJS/prism/issues/1245)) [[`2ece18b`](https://github.com/PrismJS/prism/commit/2ece18b)] +* __Elm__ ([#1174](https://github.com/PrismJS/prism/issues/1174)) [[`d6da70e`](https://github.com/PrismJS/prism/commit/d6da70e)] +* __IchigoJam BASIC__ ([#1246](https://github.com/PrismJS/prism/issues/1246)) [[`cf840be`](https://github.com/PrismJS/prism/commit/cf840be)] +* __Io__ ([#1251](https://github.com/PrismJS/prism/issues/1251)) [[`84ed3ed`](https://github.com/PrismJS/prism/commit/84ed3ed)] + +### Updated components +* __BASIC__: + * Make strings greedy [[`60114d0`](https://github.com/PrismJS/prism/commit/60114d0)] +* __C++__: + * Add C++11 raw string feature ([#1254](https://github.com/PrismJS/prism/issues/1254)) [[`71595be`](https://github.com/PrismJS/prism/commit/71595be)] + +### Updated plugins +* __Autoloader__: + * Add support for `data-autoloader-path` ([#1242](https://github.com/PrismJS/prism/issues/1242)) [[`39360d6`](https://github.com/PrismJS/prism/commit/39360d6)] +* __Previewers__: + * New plugin combining previous plugins Previewer: Base, Previewer: Angle, Previewer: Color, Previewer: Easing, Previewer: Gradient and Previewer: Time. ([#1244](https://github.com/PrismJS/prism/issues/1244)) [[`28e4b4c`](https://github.com/PrismJS/prism/commit/28e4b4c)] +* __Unescaped Markup__: + * Make it work with any language ([#1265](https://github.com/PrismJS/prism/issues/1265)) [[`7bcdae7`](https://github.com/PrismJS/prism/commit/7bcdae7)] + +### Other changes +* Add attribute `style` in `package.json` ([#1256](https://github.com/PrismJS/prism/issues/1256)) [[`a9b6785`](https://github.com/PrismJS/prism/commit/a9b6785)] + +## 1.9.0 (2017-12-06) + +### New components +* __Flow__ [[`d27b70d`](https://github.com/PrismJS/prism/commit/d27b70d)] + +### Updated components +* __CSS__: + * Unicode characters in CSS properties ([#1227](https://github.com/PrismJS/prism/issues/1227)) [[`f234ea4`](https://github.com/PrismJS/prism/commit/f234ea4)] +* __JSX__: + * JSX: Improve highlighting support. Fix [#1235](https://github.com/PrismJS/prism/issues/1235) and [#1236](https://github.com/PrismJS/prism/issues/1236) [[`f41c5cd`](https://github.com/PrismJS/prism/commit/f41c5cd)] +* __Markup__: + * Make CSS and JS inclusions in Markup greedy. Fix [#1240](https://github.com/PrismJS/prism/issues/1240) [[`7dc1e45`](https://github.com/PrismJS/prism/commit/7dc1e45)] +* __PHP__: + * Add support for multi-line strings. Fix [#1233](https://github.com/PrismJS/prism/issues/1233) [[`9a542a0`](https://github.com/PrismJS/prism/commit/9a542a0)] + +### Updated plugins +* __Copy to clipboard__: + * Fix test for native Clipboard. Fix [#1241](https://github.com/PrismJS/prism/issues/1241) [[`e7b5e82`](https://github.com/PrismJS/prism/commit/e7b5e82)] + * Copy to clipboard: Update to v1.7.1. Fix [#1220](https://github.com/PrismJS/prism/issues/1220) [[`a1b85e3`](https://github.com/PrismJS/prism/commit/a1b85e3), [`af50e44`](https://github.com/PrismJS/prism/commit/af50e44)] +* __Line highlight__: + * Fixes to compatibility of line number and line higlight plugins ([#1194](https://github.com/PrismJS/prism/issues/1194)) [[`e63058f`](https://github.com/PrismJS/prism/commit/e63058f), [`3842a91`](https://github.com/PrismJS/prism/commit/3842a91)] +* __Unescaped Markup__: + * Fix ambiguity in documentation by improving examples. Fix [#1197](https://github.com/PrismJS/prism/issues/1197) [[`924784a`](https://github.com/PrismJS/prism/commit/924784a)] + +### Other changes +* Allow any element being root instead of document. ([#1230](https://github.com/PrismJS/prism/issues/1230)) [[`69f2e2c`](https://github.com/PrismJS/prism/commit/69f2e2c), [`6e50d44`](https://github.com/PrismJS/prism/commit/6e50d44)] +* Coy Theme: The 'height' element makes code blocks the height of the browser canvas. ([#1224](https://github.com/PrismJS/prism/issues/1224)) [[`ac219d7`](https://github.com/PrismJS/prism/commit/ac219d7)] +* Download page: Fix implicitly declared variable [[`f986551`](https://github.com/PrismJS/prism/commit/f986551)] +* Download page: Add version number at the beginning of the generated files. Fix [#788](https://github.com/PrismJS/prism/issues/788) [[`928790d`](https://github.com/PrismJS/prism/commit/928790d)] + +## 1.8.4 (2017-11-05) + +### Updated components + +* __ABAP__: + * Regexp optimisation [[`e7b411e`](https://github.com/PrismJS/prism/commit/e7b411e)] +* __ActionScript__: + * Fix XML regex + optimise [[`75d00d7`](https://github.com/PrismJS/prism/commit/75d00d7)] +* __Ada__: + * Regexp simplification [[`e881fe3`](https://github.com/PrismJS/prism/commit/e881fe3)] +* __Apacheconf__: + * Regexp optimisation [[`a065e61`](https://github.com/PrismJS/prism/commit/a065e61)] +* __APL__: + * Regexp simplification [[`33297c4`](https://github.com/PrismJS/prism/commit/33297c4)] +* __AppleScript__: + * Regexp optimisation [[`d879f36`](https://github.com/PrismJS/prism/commit/d879f36)] +* __Arduino__: + * Don't use captures if not needed [[`16b338f`](https://github.com/PrismJS/prism/commit/16b338f)] +* __ASP.NET__: + * Regexp optimisation [[`438926c`](https://github.com/PrismJS/prism/commit/438926c)] +* __AutoHotkey__: + * Regexp simplification + don't use captures if not needed [[`5edfd2f`](https://github.com/PrismJS/prism/commit/5edfd2f)] +* __Bash__: + * Regexp optimisation and simplification [[`75b9b29`](https://github.com/PrismJS/prism/commit/75b9b29)] +* __Bro__: + * Regexp simplification + don't use captures if not needed [[`d4b9003`](https://github.com/PrismJS/prism/commit/d4b9003)] +* __C__: + * Regexp optimisation + don't use captures if not needed [[`f61d487`](https://github.com/PrismJS/prism/commit/f61d487)] +* __C++__: + * Fix operator regexp + regexp simplification + don't use captures if not needed [[`ffeb26e`](https://github.com/PrismJS/prism/commit/ffeb26e)] +* __C#__: + * Remove duplicates in keywords + regexp optimisation + don't use captures if not needed [[`d28d178`](https://github.com/PrismJS/prism/commit/d28d178)] +* __C-like__: + * Regexp simplification + don't use captures if not needed [[`918e0ff`](https://github.com/PrismJS/prism/commit/918e0ff)] +* __CoffeeScript__: + * Regexp optimisation + don't use captures if not needed [[`5895978`](https://github.com/PrismJS/prism/commit/5895978)] +* __Crystal__: + * Remove trailing comma [[`16979a3`](https://github.com/PrismJS/prism/commit/16979a3)] +* __CSS__: + * Regexp simplification + don't use captures if not needed + handle multi-line style attributes [[`43d9f36`](https://github.com/PrismJS/prism/commit/43d9f36)] +* __CSS Extras__: + * Regexp simplification [[`134ed70`](https://github.com/PrismJS/prism/commit/134ed70)] +* __D__: + * Regexp optimisation [[`fbe39c9`](https://github.com/PrismJS/prism/commit/fbe39c9)] +* __Dart__: + * Regexp optimisation [[`f24e919`](https://github.com/PrismJS/prism/commit/f24e919)] +* __Django__: + * Regexp optimisation [[`a95c51d`](https://github.com/PrismJS/prism/commit/a95c51d)] +* __Docker__: + * Regexp optimisation [[`27f99ff`](https://github.com/PrismJS/prism/commit/27f99ff)] +* __Eiffel__: + * Regexp optimisation [[`b7cdea2`](https://github.com/PrismJS/prism/commit/b7cdea2)] +* __Elixir__: + * Regexp optimisation + uniform behavior between ~r and ~s [[`5d12e80`](https://github.com/PrismJS/prism/commit/5d12e80)] +* __Erlang__: + * Regexp optimisation [[`7547f83`](https://github.com/PrismJS/prism/commit/7547f83)] +* __F#__: + * Regexp optimisation + don't use captures if not needed [[`7753fc4`](https://github.com/PrismJS/prism/commit/7753fc4)] +* __Gherkin__: + * Regexp optimisation + don't use captures if not needed + added explanation comment on table-body regexp [[`f26197a`](https://github.com/PrismJS/prism/commit/f26197a)] +* __Git__: + * Regexp optimisation [[`b9483b9`](https://github.com/PrismJS/prism/commit/b9483b9)] +* __GLSL__: + * Regexp optimisation [[`e66d21b`](https://github.com/PrismJS/prism/commit/e66d21b)] +* __Go__: + * Regexp optimisation + don't use captures if not needed [[`88caabb`](https://github.com/PrismJS/prism/commit/88caabb)] +* __GraphQL__: + * Regexp optimisation and simplification [[`2474f06`](https://github.com/PrismJS/prism/commit/2474f06)] +* __Groovy__: + * Regexp optimisation + don't use captures if not needed [[`e74e00c`](https://github.com/PrismJS/prism/commit/e74e00c)] +* __Haml__: + * Regexp optimisation + don't use captures if not needed + fix typo in comment [[`23e3b43`](https://github.com/PrismJS/prism/commit/23e3b43)] +* __Handlebars__: + * Regexp optimisation + don't use captures if not needed [[`09dbfce`](https://github.com/PrismJS/prism/commit/09dbfce)] +* __Haskell__: + * Regexp simplification + don't use captures if not needed [[`f11390a`](https://github.com/PrismJS/prism/commit/f11390a)] +* __HTTP__: + * Regexp simplification + don't use captures if not needed [[`37ef24e`](https://github.com/PrismJS/prism/commit/37ef24e)] +* __Icon__: + * Regexp optimisation [[`9cf64a0`](https://github.com/PrismJS/prism/commit/9cf64a0)] +* __J__: + * Regexp simplification [[`de15150`](https://github.com/PrismJS/prism/commit/de15150)] +* __Java__: + * Don't use captures if not needed [[`96b35c8`](https://github.com/PrismJS/prism/commit/96b35c8)] +* __JavaScript__: + * Regexp optimisation + don't use captures if not needed [[`93d4002`](https://github.com/PrismJS/prism/commit/93d4002)] +* __Jolie__: + * Regexp optimisation + don't use captures if not needed + remove duplicates in keywords [[`a491f9e`](https://github.com/PrismJS/prism/commit/a491f9e)] +* __JSON__: + * Make strings greedy, remove negative look-ahead for ":". Fix [#1204](https://github.com/PrismJS/prism/issues/1204) [[`98acd2d`](https://github.com/PrismJS/prism/commit/98acd2d)] + * Regexp optimisation + don't use captures if not needed [[`8fc1b03`](https://github.com/PrismJS/prism/commit/8fc1b03)] +* __JSX__: + * Regexp optimisation + handle spread operator as a whole [[`28de4e2`](https://github.com/PrismJS/prism/commit/28de4e2)] +* __Julia__: + * Regexp optimisation and simplification [[`12684c0`](https://github.com/PrismJS/prism/commit/12684c0)] +* __Keyman__: + * Regexp optimisation + don't use captures if not needed [[`9726087`](https://github.com/PrismJS/prism/commit/9726087)] +* __Kotlin__: + * Regexp simplification [[`12ff8dc`](https://github.com/PrismJS/prism/commit/12ff8dc)] +* __LaTeX__: + * Regexp optimisation and simplification [[`aa426b0`](https://github.com/PrismJS/prism/commit/aa426b0)] +* __LiveScript__: + * Make interpolated strings greedy + fix variable and identifier regexps [[`c581049`](https://github.com/PrismJS/prism/commit/c581049)] +* __LOLCODE__: + * Don't use captures if not needed [[`52903af`](https://github.com/PrismJS/prism/commit/52903af)] +* __Makefile__: + * Regexp optimisation [[`20ae2e5`](https://github.com/PrismJS/prism/commit/20ae2e5)] +* __Markdown__: + * Don't use captures if not needed [[`f489a1e`](https://github.com/PrismJS/prism/commit/f489a1e)] +* __Markup__: + * Regexp optimisation + fix punctuation inside attr-value [[`ea380c6`](https://github.com/PrismJS/prism/commit/ea380c6)] +* __MATLAB__: + * Make strings greedy + handle line feeds better [[`4cd4f01`](https://github.com/PrismJS/prism/commit/4cd4f01)] +* __Monkey__: + * Don't use captures if not needed [[`7f47140`](https://github.com/PrismJS/prism/commit/7f47140)] +* __N4JS__: + * Don't use captures if not needed [[`2d3f9df`](https://github.com/PrismJS/prism/commit/2d3f9df)] +* __NASM__: + * Regexp optimisation and simplification + don't use captures if not needed [[`9937428`](https://github.com/PrismJS/prism/commit/9937428)] +* __nginx__: + * Remove trailing comma + remove duplicates in keywords [[`c6e7195`](https://github.com/PrismJS/prism/commit/c6e7195)] +* __NSIS__: + * Regexp optimisation + don't use captures if not needed [[`beeb107`](https://github.com/PrismJS/prism/commit/beeb107)] +* __Objective-C__: + * Don't use captures if not needed [[`9be0f88`](https://github.com/PrismJS/prism/commit/9be0f88)] +* __OCaml__: + * Regexp simplification [[`5f5f38c`](https://github.com/PrismJS/prism/commit/5f5f38c)] +* __OpenCL__: + * Don't use captures if not needed [[`5e70f1d`](https://github.com/PrismJS/prism/commit/5e70f1d)] +* __Oz__: + * Fix atom regexp [[`9320e92`](https://github.com/PrismJS/prism/commit/9320e92)] +* __PARI/GP__: + * Regexp optimisation [[`2c7b59b`](https://github.com/PrismJS/prism/commit/2c7b59b)] +* __Parser__: + * Regexp simplification [[`569d511`](https://github.com/PrismJS/prism/commit/569d511)] +* __Perl__: + * Regexp optimisation and simplification + don't use captures if not needed [[`0fe4cf6`](https://github.com/PrismJS/prism/commit/0fe4cf6)] +* __PHP__: + * Don't use captures if not needed Golmote [[`5235f18`](https://github.com/PrismJS/prism/commit/5235f18)] +* __PHP Extras__: + * Add word boundary after global keywords + don't use captures if not needed [[`9049a2a`](https://github.com/PrismJS/prism/commit/9049a2a)] +* __PowerShell__: + * Regexp optimisation + don't use captures if not needed [[`0d05957`](https://github.com/PrismJS/prism/commit/0d05957)] +* __Processing__: + * Regexp simplification [[`8110d38`](https://github.com/PrismJS/prism/commit/8110d38)] +* __.properties__: + * Regexp optimisation [[`678b621`](https://github.com/PrismJS/prism/commit/678b621)] +* __Protocol Buffers__: + * Don't use captures if not needed [[`3e256d8`](https://github.com/PrismJS/prism/commit/3e256d8)] +* __Pug__: + * Don't use captures if not needed [[`76dc925`](https://github.com/PrismJS/prism/commit/76dc925)] +* __Pure__: + * Make inline-lang greedy [[`92318b0`](https://github.com/PrismJS/prism/commit/92318b0)] +* __Python__: + * Add Python builtin function highlighting ([#1205](https://github.com/PrismJS/prism/issues/1205)) [[`2169c99`](https://github.com/PrismJS/prism/commit/2169c99)] + * Python: Add highlighting to functions with space between name and parentheses ([#1207](https://github.com/PrismJS/prism/issues/1207)) [[`3badd8a`](https://github.com/PrismJS/prism/commit/3badd8a)] + * Make triple-quoted strings greedy + regexp optimisation and simplification [[`f09f9f5`](https://github.com/PrismJS/prism/commit/f09f9f5)] +* __Qore__: + * Regexp simplification [[`69459f0`](https://github.com/PrismJS/prism/commit/69459f0)] +* __R__: + * Regexp optimisation [[`06a9da4`](https://github.com/PrismJS/prism/commit/06a9da4)] +* __Reason__: + * Regexp optimisation + don't use capture if not needed [[`19d79b4`](https://github.com/PrismJS/prism/commit/19d79b4)] +* __Ren'py__: + * Make strings greedy + don't use captures if not needed [[`91d84d9`](https://github.com/PrismJS/prism/commit/91d84d9)] +* __reST__: + * Regexp simplification + don't use captures if not needed [[`1a8b3e9`](https://github.com/PrismJS/prism/commit/1a8b3e9)] +* __Rip__: + * Regexp optimisation [[`d7f0ee8`](https://github.com/PrismJS/prism/commit/d7f0ee8)] +* __Ruby__: + * Regexp optimisation and simplification + don't use captures if not needed [[`4902ed4`](https://github.com/PrismJS/prism/commit/4902ed4)] +* __Rust__: + * Regexp optimisation and simplification + don't use captures if not needed [[`cc9d874`](https://github.com/PrismJS/prism/commit/cc9d874)] +* __Sass__: + * Regexp simplification Golmote [[`165d957`](https://github.com/PrismJS/prism/commit/165d957)] +* __Scala__: + * Regexp optimisation Golmote [[`5f50c12`](https://github.com/PrismJS/prism/commit/5f50c12)] +* __Scheme__: + * Regexp optimisation [[`bd19b04`](https://github.com/PrismJS/prism/commit/bd19b04)] +* __SCSS__: + * Regexp simplification [[`c60b7d4`](https://github.com/PrismJS/prism/commit/c60b7d4)] +* __Smalltalk__: + * Regexp simplification [[`41a2c76`](https://github.com/PrismJS/prism/commit/41a2c76)] +* __Smarty__: + * Regexp optimisation and simplification [[`e169be9`](https://github.com/PrismJS/prism/commit/e169be9)] +* __SQL__: + * Regexp optimisation [[`a6244a4`](https://github.com/PrismJS/prism/commit/a6244a4)] +* __Stylus__: + * Regexp optimisation [[`df9506c`](https://github.com/PrismJS/prism/commit/df9506c)] +* __Swift__: + * Don't use captures if not needed [[`a2d737a`](https://github.com/PrismJS/prism/commit/a2d737a)] +* __Tcl__: + * Regexp simplification + don't use captures if not needed [[`f0b8a33`](https://github.com/PrismJS/prism/commit/f0b8a33)] +* __Textile__: + * Regexp optimisation + don't use captures if not needed [[`08139ad`](https://github.com/PrismJS/prism/commit/08139ad)] +* __Twig__: + * Regexp optimisation and simplification + don't use captures if not needed [[`0b10fd0`](https://github.com/PrismJS/prism/commit/0b10fd0)] +* __TypeScript__: + * Don't use captures if not needed [[`e296caf`](https://github.com/PrismJS/prism/commit/e296caf)] +* __Verilog__: + * Regexp simplification [[`1b24b34`](https://github.com/PrismJS/prism/commit/1b24b34)] +* __VHDL__: + * Regexp optimisation and simplification [[`7af36df`](https://github.com/PrismJS/prism/commit/7af36df)] +* __vim__: + * Remove duplicates in keywords [[`700505e`](https://github.com/PrismJS/prism/commit/700505e)] +* __Wiki markup__: + * Fix escaping consistency [[`1fd690d`](https://github.com/PrismJS/prism/commit/1fd690d)] +* __YAML__: + * Regexp optimisation + don't use captures if not needed [[`1fd690d`](https://github.com/PrismJS/prism/commit/1fd690d)] + +### Other changes +* Remove comments spellcheck for AMP validation ([#1106](https://github.com/PrismJS/prism/issues/1106)) [[`de996d7`](https://github.com/PrismJS/prism/commit/de996d7)] +* Prevent error from throwing when element does not have a parentNode in highlightElement. [[`c33be19`](https://github.com/PrismJS/prism/commit/c33be19)] +* Provide a way to load Prism from inside a Worker without listening to messages. ([#1188](https://github.com/PrismJS/prism/issues/1188)) [[`d09982d`](https://github.com/PrismJS/prism/commit/d09982d)] + +## 1.8.3 (2017-10-19) + +### Other changes + +* Fix inclusion tests for Pug [[`955c2ab`](https://github.com/PrismJS/prism/commit/955c2ab)] + +## 1.8.2 (2017-10-19) + +### Updated components +* __Jade__: + * Jade has been renamed to __Pug__ ([#1201](https://github.com/PrismJS/prism/issues/1201)) [[`bcfef7c`](https://github.com/PrismJS/prism/commit/bcfef7c)] +* __JavaScript__: + * Better highlighting of functions ([#1190](https://github.com/PrismJS/prism/issues/1190)) [[`8ee2cd3`](https://github.com/PrismJS/prism/commit/8ee2cd3)] + +### Update plugins +* __Copy to clipboard__: + * Fix error occurring when using in Chrome 61+ ([#1206](https://github.com/PrismJS/prism/issues/1206)) [[`b41d571`](https://github.com/PrismJS/prism/commit/b41d571)] +* __Show invisibles__: + * Prevent error when using with Autoloader plugin ([#1195](https://github.com/PrismJS/prism/issues/1195)) [[`ed8bdb5`](https://github.com/PrismJS/prism/commit/ed8bdb5)] + +## 1.8.1 (2017-09-16) + +### Other changes + +* Add Arduino to components.js [[`290a3c6`](https://github.com/PrismJS/prism/commit/290a3c6)] + +## 1.8.0 (2017-09-16) + +### New components + +* __Arduino__ ([#1184](https://github.com/PrismJS/prism/issues/1184)) [[`edf2454`](https://github.com/PrismJS/prism/commit/edf2454)] +* __OpenCL__ ([#1175](https://github.com/PrismJS/prism/issues/1175)) [[`131e8fa`](https://github.com/PrismJS/prism/commit/131e8fa)] + +### Updated plugins + +* __Autolinker__: + * Silently catch any error thrown by decodeURIComponent. Fixes [#1186](https://github.com/PrismJS/prism/issues/1186) [[`2e43fcf`](https://github.com/PrismJS/prism/commit/2e43fcf)] + +## 1.7.0 (2017-09-09) + +### New components + +* __Django/Jinja2__ ([#1085](https://github.com/PrismJS/prism/issues/1085)) [[`345b1b2`](https://github.com/PrismJS/prism/commit/345b1b2)] +* __N4JS__ ([#1141](https://github.com/PrismJS/prism/issues/1141)) [[`eaa8ebb`](https://github.com/PrismJS/prism/commit/eaa8ebb)] +* __Ren'py__ ([#658](https://github.com/PrismJS/prism/issues/658)) [[`7ab4013`](https://github.com/PrismJS/prism/commit/7ab4013)] +* __VB.Net__ ([#1122](https://github.com/PrismJS/prism/issues/1122)) [[`5400651`](https://github.com/PrismJS/prism/commit/5400651)] + +### Updated components + +* __APL__: + * Add left shoe underbar and right shoe underbar ([#1072](https://github.com/PrismJS/prism/issues/1072)) [[`12238c5`](https://github.com/PrismJS/prism/commit/12238c5)] + * Update prism-apl.js ([#1126](https://github.com/PrismJS/prism/issues/1126)) [[`a5f3cdb`](https://github.com/PrismJS/prism/commit/a5f3cdb)] +* __C__: + * Add more keywords and constants for C. ([#1029](https://github.com/PrismJS/prism/issues/1029)) [[`43a388e`](https://github.com/PrismJS/prism/commit/43a388e)] +* __C#__: + * Fix wrong highlighting when three slashes appear inside string. Fix [#1091](https://github.com/PrismJS/prism/issues/1091) [[`dfb6f17`](https://github.com/PrismJS/prism/commit/dfb6f17)] +* __C-like__: + * Add support for unclosed block comments. Close [#828](https://github.com/PrismJS/prism/issues/828) [[`3426ed1`](https://github.com/PrismJS/prism/commit/3426ed1)] +* __Crystal__: + * Update Crystal keywords ([#1092](https://github.com/PrismJS/prism/issues/1092)) [[`125bff1`](https://github.com/PrismJS/prism/commit/125bff1)] +* __CSS Extras__: + * Support CSS #RRGGBBAA ([#1139](https://github.com/PrismJS/prism/issues/1139)) [[`07a6806`](https://github.com/PrismJS/prism/commit/07a6806)] +* __Docker__: + * Add dockerfile alias for docker language ([#1164](https://github.com/PrismJS/prism/issues/1164)) [[`601c47f`](https://github.com/PrismJS/prism/commit/601c47f)] + * Update the list of keywords for dockerfiles ([#1180](https://github.com/PrismJS/prism/issues/1180)) [[`f0d73e0`](https://github.com/PrismJS/prism/commit/f0d73e0)] +* __Eiffel__: + * Add class-name highlighting for Eiffel ([#471](https://github.com/PrismJS/prism/issues/471)) [[`cd03587`](https://github.com/PrismJS/prism/commit/cd03587)] +* __Handlebars__: + * Check for possible pre-existing marker strings in Handlebars [[`7a1a404`](https://github.com/PrismJS/prism/commit/7a1a404)] +* __JavaScript__: + * Properly match every operator as a whole token. Fix [#1133](https://github.com/PrismJS/prism/issues/1133) [[`9f649fb`](https://github.com/PrismJS/prism/commit/9f649fb)] + * Allows uppercase prefixes in JS number literals ([#1151](https://github.com/PrismJS/prism/issues/1151)) [[`d4ee904`](https://github.com/PrismJS/prism/commit/d4ee904)] + * Reduced backtracking in regex pattern. Fix [#1159](https://github.com/PrismJS/prism/issues/1159) [[`ac09e97`](https://github.com/PrismJS/prism/commit/ac09e97)] +* __JSON__: + * Fix property and string patterns performance. Fix [#1080](https://github.com/PrismJS/prism/issues/1080) [[`0ca1353`](https://github.com/PrismJS/prism/commit/0ca1353)] +* __JSX__: + * JSX spread operator break. Fixes [#1061](https://github.com/PrismJS/prism/issues/1061) ([#1094](https://github.com/PrismJS/prism/issues/1094)) [[`561bceb`](https://github.com/PrismJS/prism/commit/561bceb)] + * Fix highlighting of attributes containing spaces [[`867ea42`](https://github.com/PrismJS/prism/commit/867ea42)] + * Improved performance for tags (when not matching) Fix [#1152](https://github.com/PrismJS/prism/issues/1152) [[`b0fe103`](https://github.com/PrismJS/prism/commit/b0fe103)] +* __LOLCODE__: + * Make strings greedy Golmote [[`1a5e7a4`](https://github.com/PrismJS/prism/commit/1a5e7a4)] +* __Markup__: + * Support HTML entities in attribute values ([#1143](https://github.com/PrismJS/prism/issues/1143)) [[`1d5047d`](https://github.com/PrismJS/prism/commit/1d5047d)] +* __NSIS__: + * Update patterns ([#1033](https://github.com/PrismJS/prism/issues/1033)) [[`01a59d8`](https://github.com/PrismJS/prism/commit/01a59d8)] + * Add support for NSIS 3.02 ([#1169](https://github.com/PrismJS/prism/issues/1169)) [[`393b5f7`](https://github.com/PrismJS/prism/commit/393b5f7)] +* __PHP__: + * Fix the PHP language ([#1100](https://github.com/PrismJS/prism/issues/1100)) [[`1453fa7`](https://github.com/PrismJS/prism/commit/1453fa7)] + * Check for possible pre-existing marker strings in PHP [[`36bc560`](https://github.com/PrismJS/prism/commit/36bc560)] +* __Ruby__: + * Fix slash regex performance. Fix [#1083](https://github.com/PrismJS/prism/issues/1083) [[`a708730`](https://github.com/PrismJS/prism/commit/a708730)] + * Add support for =begin =end comments. Manual merge of [#1121](https://github.com/PrismJS/prism/issues/1121). [[`62cdaf8`](https://github.com/PrismJS/prism/commit/62cdaf8)] +* __Smarty__: + * Check for possible pre-existing marker strings in Smarty [[`5df26e2`](https://github.com/PrismJS/prism/commit/5df26e2)] +* __TypeScript__: + * Update typescript keywords ([#1064](https://github.com/PrismJS/prism/issues/1064)) [[`52020a0`](https://github.com/PrismJS/prism/commit/52020a0)] + * Chmod -x prism-typescript component ([#1145](https://github.com/PrismJS/prism/issues/1145)) [[`afe0542`](https://github.com/PrismJS/prism/commit/afe0542)] +* __YAML__: + * Make strings greedy (partial fix for [#1075](https://github.com/PrismJS/prism/issues/1075)) [[`565a2cc`](https://github.com/PrismJS/prism/commit/565a2cc)] + +### Updated plugins + +* __Autolinker__: + * Fixed an rendering issue for encoded urls ([#1173](https://github.com/PrismJS/prism/issues/1173)) [[`abc007f`](https://github.com/PrismJS/prism/commit/abc007f)] +* __Custom Class__: + * Add missing noCSS property for the Custom Class plugin [[`ba64f8d`](https://github.com/PrismJS/prism/commit/ba64f8d)] + * Added a default for classMap. Fixes [#1137](https://github.com/PrismJS/prism/issues/1137). ([#1157](https://github.com/PrismJS/prism/issues/1157)) [[`5400af9`](https://github.com/PrismJS/prism/commit/5400af9)] +* __Keep Markup__: + * Store highlightedCode after reinserting markup. Fix [#1127](https://github.com/PrismJS/prism/issues/1127) [[`6df2ceb`](https://github.com/PrismJS/prism/commit/6df2ceb)] +* __Line Highlight__: + * Cleanup left-over line-highlight tags before other plugins run [[`79b723d`](https://github.com/PrismJS/prism/commit/79b723d)] + * Avoid conflict between line-highlight and other plugins [[`224fdb8`](https://github.com/PrismJS/prism/commit/224fdb8)] +* __Line Numbers__: + * Support soft wrap for line numbers plugin ([#584](https://github.com/PrismJS/prism/issues/584)) [[`849f1d6`](https://github.com/PrismJS/prism/commit/849f1d6)] + * Plugins fixes (unescaped-markup, line-numbers) ([#1012](https://github.com/PrismJS/prism/issues/1012)) [[`3fb7cf8`](https://github.com/PrismJS/prism/commit/3fb7cf8)] +* __Normalize Whitespace__: + * Add Node.js support for the normalize-whitespace plugin [[`6c7dae2`](https://github.com/PrismJS/prism/commit/6c7dae2)] +* __Unescaped Markup__: + * Plugins fixes (unescaped-markup, line-numbers) ([#1012](https://github.com/PrismJS/prism/issues/1012)) [[`3fb7cf8`](https://github.com/PrismJS/prism/commit/3fb7cf8)] + +### Updated themes +* __Coy__: + * Scroll 'Coy' background with contents ([#1163](https://github.com/PrismJS/prism/issues/1163)) [[`310990b`](https://github.com/PrismJS/prism/commit/310990b)] + +### Other changes + +* Initial implementation of manual highlighting ([#1087](https://github.com/PrismJS/prism/issues/1087)) [[`bafc4cb`](https://github.com/PrismJS/prism/commit/bafc4cb)] +* Remove dead link in Third-party tutorials section. Fixes [#1028](https://github.com/PrismJS/prism/issues/1028) [[`dffadc6`](https://github.com/PrismJS/prism/commit/dffadc6)] +* Most languages now use the greedy flag for better highlighting [[`7549ecc`](https://github.com/PrismJS/prism/commit/7549ecc)] +* .npmignore: Unignore components.js ([#1108](https://github.com/PrismJS/prism/issues/1108)) [[`1f699e7`](https://github.com/PrismJS/prism/commit/1f699e7)] +* Run before-highlight and after-highlight hooks even when no grammar is found. Fix [#1134](https://github.com/PrismJS/prism/issues/1134) [[`70cb472`](https://github.com/PrismJS/prism/commit/70cb472)] +* Replace [\w\W] with [\s\S] and [0-9] with \d in regexes ([#1107](https://github.com/PrismJS/prism/issues/1107)) [[`8aa2cc4`](https://github.com/PrismJS/prism/commit/8aa2cc4)] +* Fix corner cases for the greedy flag ([#1095](https://github.com/PrismJS/prism/issues/1095)) [[`6530709`](https://github.com/PrismJS/prism/commit/6530709)] +* Add Third Party Tutorial ([#1156](https://github.com/PrismJS/prism/issues/1156)) [[`c34e57b`](https://github.com/PrismJS/prism/commit/c34e57b)] +* Add Composer support ([#648](https://github.com/PrismJS/prism/issues/648)) [[`2989633`](https://github.com/PrismJS/prism/commit/2989633)] +* Remove IE8 plugin ([#992](https://github.com/PrismJS/prism/issues/992)) [[`25788eb`](https://github.com/PrismJS/prism/commit/25788eb)] +* Website: remove width and height on logo.svg, so it becomes scalable. Close [#1005](https://github.com/PrismJS/prism/issues/1005) [[`0621ff7`](https://github.com/PrismJS/prism/commit/0621ff7)] +* Remove yarn.lock ([#1098](https://github.com/PrismJS/prism/issues/1098)) [[`11eed25`](https://github.com/PrismJS/prism/commit/11eed25)] + +## 1.6.0 (2016-12-03) + +### New components + +* __.properties__ ([#980](https://github.com/PrismJS/prism/issues/980)) [[`be6219a`](https://github.com/PrismJS/prism/commit/be6219a)] +* __Ada__ ([#949](https://github.com/PrismJS/prism/issues/949)) [[`65619f7`](https://github.com/PrismJS/prism/commit/65619f7)] +* __GraphQL__ ([#971](https://github.com/PrismJS/prism/issues/971)) [[`e018087`](https://github.com/PrismJS/prism/commit/e018087)] +* __Jolie__ ([#1014](https://github.com/PrismJS/prism/issues/1014)) [[`dfc1941`](https://github.com/PrismJS/prism/commit/dfc1941)] +* __LiveScript__ ([#982](https://github.com/PrismJS/prism/issues/982)) [[`62e258c`](https://github.com/PrismJS/prism/commit/62e258c)] +* __Reason__ (Fixes [#1046](https://github.com/PrismJS/prism/issues/1046)) [[`3cae6ce`](https://github.com/PrismJS/prism/commit/3cae6ce)] +* __Xojo__ ([#994](https://github.com/PrismJS/prism/issues/994)) [[`0224b7c`](https://github.com/PrismJS/prism/commit/0224b7c)] + +### Updated components + +* __APL__: + * Add iota underbar ([#1024](https://github.com/PrismJS/prism/issues/1024)) [[`3c5c89a`](https://github.com/PrismJS/prism/commit/3c5c89a), [`ac21d33`](https://github.com/PrismJS/prism/commit/ac21d33)] +* __AsciiDoc__: + * Optimized block regexps to prevent struggling on large files. Fixes [#1001](https://github.com/PrismJS/prism/issues/1001). [[`1a86d34`](https://github.com/PrismJS/prism/commit/1a86d34)] +* __Bash__: + * Add `npm` to function list ([#969](https://github.com/PrismJS/prism/issues/969)) [[`912bdfe`](https://github.com/PrismJS/prism/commit/912bdfe)] +* __CSS__: + * Make CSS strings greedy. Fix [#1013](https://github.com/PrismJS/prism/issues/1013). [[`e57e26d`](https://github.com/PrismJS/prism/commit/e57e26d)] +* __CSS Extras__: + * Match attribute inside selectors [[`13fed76`](https://github.com/PrismJS/prism/commit/13fed76)] +* __Groovy__: + * Fix order of decoding entities in groovy. Fixes [#1049](https://github.com/PrismJS/prism/issues/1049) ([#1050](https://github.com/PrismJS/prism/issues/1050)) [[`d75da8e`](https://github.com/PrismJS/prism/commit/d75da8e)] +* __Ini__: + * Remove important token in ini definition ([#1047](https://github.com/PrismJS/prism/issues/1047)) [[`fe8ad8b`](https://github.com/PrismJS/prism/commit/fe8ad8b)] +* __JavaScript__: + * Add exponentiation & spread/rest operator ([#991](https://github.com/PrismJS/prism/issues/991)) [[`b2de65a`](https://github.com/PrismJS/prism/commit/b2de65a), [`268d01e`](https://github.com/PrismJS/prism/commit/268d01e)] +* __JSON__: + * JSON: Fixed issues with properties and strings + added tests. Fix [#1025](https://github.com/PrismJS/prism/issues/1025) [[`25a541d`](https://github.com/PrismJS/prism/commit/25a541d)] +* __Markup__: + * Allow for dots in Markup tag names, but not in HTML tags included in Textile. Fixes [#888](https://github.com/PrismJS/prism/issues/888). [[`31ea66b`](https://github.com/PrismJS/prism/commit/31ea66b)] + * Make doctype case-insensitive ([#1009](https://github.com/PrismJS/prism/issues/1009)) [[`3dd7219`](https://github.com/PrismJS/prism/commit/3dd7219)] +* __NSIS__: + * Updated patterns ([#1032](https://github.com/PrismJS/prism/issues/1032)) [[`76ba1b8`](https://github.com/PrismJS/prism/commit/76ba1b8)] +* __PHP__: + * Make comments greedy. Fix [#197](https://github.com/PrismJS/prism/issues/197) [[`318aab3`](https://github.com/PrismJS/prism/commit/318aab3)] +* __PowerShell__: + * Fix highlighting of empty comments ([#977](https://github.com/PrismJS/prism/issues/977)) [[`4fda477`](https://github.com/PrismJS/prism/commit/4fda477)] +* __Puppet__: + * Fix over-greedy regexp detection ([#978](https://github.com/PrismJS/prism/issues/978)) [[`105be25`](https://github.com/PrismJS/prism/commit/105be25)] +* __Ruby__: + * Fix typo `Fload` to `Float` in prism-ruby.js ([#1023](https://github.com/PrismJS/prism/issues/1023)) [[`22cb018`](https://github.com/PrismJS/prism/commit/22cb018)] + * Make strings greedy. Fixes [#1048](https://github.com/PrismJS/prism/issues/1048) [[`8b0520a`](https://github.com/PrismJS/prism/commit/8b0520a)] +* __SCSS__: + * Alias statement as keyword. Fix [#246](https://github.com/PrismJS/prism/issues/246) [[`fd09391`](https://github.com/PrismJS/prism/commit/fd09391)] + * Highlight variables inside selectors and properties. [[`d6b5c2f`](https://github.com/PrismJS/prism/commit/d6b5c2f)] + * Highlight parent selector [[`8f5f1fa`](https://github.com/PrismJS/prism/commit/8f5f1fa)] +* __TypeScript__: + * Add missing `from` keyword to typescript & set `ts` as alias. ([#1042](https://github.com/PrismJS/prism/issues/1042)) [[`cba78f3`](https://github.com/PrismJS/prism/commit/cba78f3)] + +### New plugins + +* __Copy to Clipboard__ ([#891](https://github.com/PrismJS/prism/issues/891)) [[`07b81ac`](https://github.com/PrismJS/prism/commit/07b81ac)] +* __Custom Class__ ([#950](https://github.com/PrismJS/prism/issues/950)) [[`a0bd686`](https://github.com/PrismJS/prism/commit/a0bd686)] +* __Data-URI Highlight__ ([#996](https://github.com/PrismJS/prism/issues/996)) [[`bdca61b`](https://github.com/PrismJS/prism/commit/bdca61b)] +* __Toolbar__ ([#891](https://github.com/PrismJS/prism/issues/891)) [[`07b81ac`](https://github.com/PrismJS/prism/commit/07b81ac)] + +### Updated plugins + +* __Autoloader__: + * Updated documentation for Autoloader plugin [[`b4f3423`](https://github.com/PrismJS/prism/commit/b4f3423)] + * Download all grammars as a zip from Autoloader plugin page ([#981](https://github.com/PrismJS/prism/issues/981)) [[`0d0a007`](https://github.com/PrismJS/prism/commit/0d0a007), [`5c815d3`](https://github.com/PrismJS/prism/commit/5c815d3)] + * Removed duplicated script on Autoloader plugin page [[`9671996`](https://github.com/PrismJS/prism/commit/9671996)] + * Don't try to load "none" component. Fix [#1000](https://github.com/PrismJS/prism/issues/1000) [[`f89b0b9`](https://github.com/PrismJS/prism/commit/f89b0b9)] +* __WPD__: + * Fix at-rule detection + don't process if language is not handled [[`2626728`](https://github.com/PrismJS/prism/commit/2626728)] + +### Other changes + +* Improvement to greedy-flag ([#967](https://github.com/PrismJS/prism/issues/967)) [[`500121b`](https://github.com/PrismJS/prism/commit/500121b), [`9893489`](https://github.com/PrismJS/prism/commit/9893489)] +* Add setTimeout fallback for requestAnimationFrame. Fixes [#987](https://github.com/PrismJS/prism/issues/987). ([#988](https://github.com/PrismJS/prism/issues/988)) [[`c9bdcd3`](https://github.com/PrismJS/prism/commit/c9bdcd3)] +* Added aria-hidden attributes on elements created by the Line Highlight and Line Numbers plugins. Fixes [#574](https://github.com/PrismJS/prism/issues/574). [[`e5587a7`](https://github.com/PrismJS/prism/commit/e5587a7)] +* Don't insert space before ">" when there is no attributes [[`3dc8c9e`](https://github.com/PrismJS/prism/commit/3dc8c9e)] +* Added missing hooks-related tests for AsciiDoc, Groovy, Handlebars, Markup, PHP and Smarty [[`c1a0c1b`](https://github.com/PrismJS/prism/commit/c1a0c1b)] +* Fix issue when using Line numbers plugin and Normalise whitespace plugin together with Handlebars, PHP or Smarty. Fix [#1018](https://github.com/PrismJS/prism/issues/1018), [#997](https://github.com/PrismJS/prism/issues/997), [#935](https://github.com/PrismJS/prism/issues/935). Revert [#998](https://github.com/PrismJS/prism/issues/998). [[`86aa3d2`](https://github.com/PrismJS/prism/commit/86aa3d2)] +* Optimized logo ([#990](https://github.com/PrismJS/prism/issues/990)) ([#1002](https://github.com/PrismJS/prism/issues/1002)) [[`f69e570`](https://github.com/PrismJS/prism/commit/f69e570), [`218fd25`](https://github.com/PrismJS/prism/commit/218fd25)] +* Remove unneeded prefixed CSS ([#989](https://github.com/PrismJS/prism/issues/989)) [[`5e56833`](https://github.com/PrismJS/prism/commit/5e56833)] +* Optimize images ([#1007](https://github.com/PrismJS/prism/issues/1007)) [[`b2fa6d5`](https://github.com/PrismJS/prism/commit/b2fa6d5)] +* Add yarn.lock to .gitignore ([#1035](https://github.com/PrismJS/prism/issues/1035)) [[`03ecf74`](https://github.com/PrismJS/prism/commit/03ecf74)] +* Fix greedy flag bug. Fixes [#1039](https://github.com/PrismJS/prism/issues/1039) [[`32cd99f`](https://github.com/PrismJS/prism/commit/32cd99f)] +* Ruby: Fix test after [#1023](https://github.com/PrismJS/prism/issues/1023) [[`b15d43b`](https://github.com/PrismJS/prism/commit/b15d43b)] +* Ini: Fix test after [#1047](https://github.com/PrismJS/prism/issues/1047) [[`25cdd3f`](https://github.com/PrismJS/prism/commit/25cdd3f)] +* Reduce risk of XSS ([#1051](https://github.com/PrismJS/prism/issues/1051)) [[`17e33bc`](https://github.com/PrismJS/prism/commit/17e33bc)] +* env.code can be modified by before-sanity-check hook even when using language-none. Fix [#1066](https://github.com/PrismJS/prism/issues/1066) [[`83bafbd`](https://github.com/PrismJS/prism/commit/83bafbd)] + + +## 1.5.1 (2016-06-05) + +### Updated components + +* __Normalize Whitespace__: + * Add class that disables the normalize whitespace plugin [[`9385c54`](https://github.com/PrismJS/prism/commit/9385c54)] +* __JavaScript Language__: + * Rearrange the `string` and `template-string` token in JavaScript [[`1158e46`](https://github.com/PrismJS/prism/commit/1158e46)] +* __SQL Language__: + * add delimeter and delimeters keywords to sql ([#958](https://github.com/PrismJS/prism/pull/958)) [[`a9ef24e`](https://github.com/PrismJS/prism/commit/a9ef24e)] + * add AUTO_INCREMENT and DATE keywords to sql ([#954](https://github.com/PrismJS/prism/pull/954)) [[`caea2af`](https://github.com/PrismJS/prism/commit/caea2af)] +* __Diff Language__: + * Highlight diff lines with only + or - ([#952](https://github.com/PrismJS/prism/pull/952)) [[`4d0526f`](https://github.com/PrismJS/prism/commit/4d0526f)] + +### Other changes + +* Allow for asynchronous loading of prism.js ([#959](https://github.com/PrismJS/prism/pull/959)) +* Use toLowerCase on language names ([#957](https://github.com/PrismJS/prism/pull/957)) [[`acd9508`](https://github.com/PrismJS/prism/commit/acd9508)] +* link to index for basic usage - fixes [#945](https://github.com/PrismJS/prism/issues/945) ([#946](https://github.com/PrismJS/prism/pull/946)) [[`6c772d8`](https://github.com/PrismJS/prism/commit/6c772d8)] +* Fixed monospace typo ([#953](https://github.com/PrismJS/prism/pull/953)) [[`e6c3498`](https://github.com/PrismJS/prism/commit/e6c3498)] + +## 1.5.0 (2016-05-01) + +### New components + +* __Bro Language__ ([#925](https://github.com/PrismJS/prism/pull/925)) +* __Protocol Buffers Language__ ([#938](https://github.com/PrismJS/prism/pull/938)) [[`ae4a4f2`](https://github.com/PrismJS/prism/commit/ae4a4f2)] + +### Updated components + +* __Keep Markup__: + * Fix Keep Markup plugin incorrect highlighting ([#880](https://github.com/PrismJS/prism/pull/880)) [[`24841ef`](https://github.com/PrismJS/prism/commit/24841ef)] +* __Groovy Language__: + * Fix double HTML-encoding bug in Groovy language [[`24a0936`](https://github.com/PrismJS/prism/commit/24a0936)] +* __Java Language__: + * Adding annotation token for Java ([#905](https://github.com/PrismJS/prism/pull/905)) [[`367ace6`](https://github.com/PrismJS/prism/commit/367ace6)] +* __SAS Language__: + * Add missing keywords for SAS ([#922](https://github.com/PrismJS/prism/pull/922)) +* __YAML Language__: + * fix hilighting of YAML keys on first line of code block ([#943](https://github.com/PrismJS/prism/pull/943)) [[`f19db81`](https://github.com/PrismJS/prism/commit/f19db81)] +* __C# Language__: + * Support for generic methods in csharp [[`6f75735`](https://github.com/PrismJS/prism/commit/6f75735)] + +### New plugins + +* __Unescaped Markup__ [[`07d77e5`](https://github.com/PrismJS/prism/commit/07d77e5)] +* __Normalize Whitespace__ ([#847](https://github.com/PrismJS/prism/pull/847)) [[`e86ec01`](https://github.com/PrismJS/prism/commit/e86ec01)] + +### Other changes + +* Add JSPM support [[`ad048ab`](https://github.com/PrismJS/prism/commit/ad048ab)] +* update linear-gradient syntax from `left` to `to right` [[`cd234dc`](https://github.com/PrismJS/prism/commit/cd234dc)] +* Add after-property to allow ordering of plugins [[`224b7a1`](https://github.com/PrismJS/prism/commit/224b7a1)] +* Partial solution for the "Comment-like substrings"-problem [[`2705c50`](https://github.com/PrismJS/prism/commit/2705c50)] +* Add property 'aliasTitles' to components.js [[`54400fb`](https://github.com/PrismJS/prism/commit/54400fb)] +* Add before-highlightall hook [[`70a8602`](https://github.com/PrismJS/prism/commit/70a8602)] +* Fix catastrophic backtracking regex issues in JavaScript [[`ab65be2`](https://github.com/PrismJS/prism/commit/ab65be2)] + +## 1.4.1 (2016-02-03) + +### Other changes + +* Fix DFS bug in Prism core [[`b86c727`](https://github.com/PrismJS/prism/commit/b86c727)] + +## 1.4.0 (2016-02-03) + +### New components + +* __Solarized Light__ ([#855](https://github.com/PrismJS/prism/pull/855)) [[`70846ba`](https://github.com/PrismJS/prism/commit/70846ba)] +* __JSON__ ([#370](https://github.com/PrismJS/prism/pull/370)) [[`ad2fcd0`](https://github.com/PrismJS/prism/commit/ad2fcd0)] + +### Updated components + +* __Show Language__: + * Remove data-language attribute ([#840](https://github.com/PrismJS/prism/pull/840)) [[`eb9a83c`](https://github.com/PrismJS/prism/commit/eb9a83c)] + * Allow custom label without a language mapping ([#837](https://github.com/PrismJS/prism/pull/837)) [[`7e74aef`](https://github.com/PrismJS/prism/commit/7e74aef)] +* __JSX__: + * Better Nesting in JSX attributes ([#842](https://github.com/PrismJS/prism/pull/842)) [[`971dda7`](https://github.com/PrismJS/prism/commit/971dda7)] +* __File Highlight__: + * Defer File Highlight until the full DOM has loaded. ([#844](https://github.com/PrismJS/prism/pull/844)) [[`6f995ef`](https://github.com/PrismJS/prism/commit/6f995ef)] +* __Coy Theme__: + * Fix coy theme shadows ([#865](https://github.com/PrismJS/prism/pull/865)) [[`58d2337`](https://github.com/PrismJS/prism/commit/58d2337)] +* __Show Invisibles__: + * Ensure show-invisibles compat with autoloader ([#874](https://github.com/PrismJS/prism/pull/874)) [[`c3cfb1f`](https://github.com/PrismJS/prism/commit/c3cfb1f)] + * Add support for the space character for the show-invisibles plugin ([#876](https://github.com/PrismJS/prism/pull/876)) [[`05442d3`](https://github.com/PrismJS/prism/commit/05442d3)] + +### New plugins + +* __Command Line__ ([#831](https://github.com/PrismJS/prism/pull/831)) [[`8378906`](https://github.com/PrismJS/prism/commit/8378906)] + +### Other changes + +* Use document.currentScript instead of document.getElementsByTagName() [[`fa98743`](https://github.com/PrismJS/prism/commit/fa98743)] +* Add prefix for Firefox selection and move prefixed rule first [[`6d54717`](https://github.com/PrismJS/prism/commit/6d54717)] +* No background for `` in `

` [[`8c310bc`](https://github.com/PrismJS/prism/commit/8c310bc)]
+* Fixing to initial copyright year [[`69cbf7a`](https://github.com/PrismJS/prism/commit/69cbf7a)]
+* Simplify the “lang” regex [[`417f54a`](https://github.com/PrismJS/prism/commit/417f54a)]
+* Fix broken heading links [[`a7f9e62`](https://github.com/PrismJS/prism/commit/a7f9e62)]
+* Prevent infinite recursion in DFS [[`02894e1`](https://github.com/PrismJS/prism/commit/02894e1)]
+* Fix incorrect page title [[`544b56f`](https://github.com/PrismJS/prism/commit/544b56f)]
+* Link scss to webplatform wiki [[`08d979a`](https://github.com/PrismJS/prism/commit/08d979a)]
+* Revert white-space to normal when code is inline instead of in a pre [[`1a971b5`](https://github.com/PrismJS/prism/commit/1a971b5)]
+
+## 1.3.0 (2015-10-26)
+
+### New components
+
+* __AsciiDoc__ ([#800](https://github.com/PrismJS/prism/issues/800)) [[`6803ca0`](https://github.com/PrismJS/prism/commit/6803ca0)]
+* __Haxe__ ([#811](https://github.com/PrismJS/prism/issues/811)) [[`bd44341`](https://github.com/PrismJS/prism/commit/bd44341)]
+* __Icon__ ([#803](https://github.com/PrismJS/prism/issues/803)) [[`b43c5f3`](https://github.com/PrismJS/prism/commit/b43c5f3)]
+* __Kotlin__ ([#814](https://github.com/PrismJS/prism/issues/814)) [[`e8a31a5`](https://github.com/PrismJS/prism/commit/e8a31a5)]
+* __Lua__ ([#804](https://github.com/PrismJS/prism/issues/804)) [[`a36bc4a`](https://github.com/PrismJS/prism/commit/a36bc4a)]
+* __Nix__ ([#795](https://github.com/PrismJS/prism/issues/795)) [[`9b275c8`](https://github.com/PrismJS/prism/commit/9b275c8)]
+* __Oz__ ([#805](https://github.com/PrismJS/prism/issues/805)) [[`388c53f`](https://github.com/PrismJS/prism/commit/388c53f)]
+* __PARI/GP__ ([#802](https://github.com/PrismJS/prism/issues/802)) [[`253c035`](https://github.com/PrismJS/prism/commit/253c035)]
+* __Parser__ ([#808](https://github.com/PrismJS/prism/issues/808)) [[`a953b3a`](https://github.com/PrismJS/prism/commit/a953b3a)]
+* __Puppet__ ([#813](https://github.com/PrismJS/prism/issues/813)) [[`81933ee`](https://github.com/PrismJS/prism/commit/81933ee)]
+* __Roboconf__ ([#812](https://github.com/PrismJS/prism/issues/812)) [[`f5db346`](https://github.com/PrismJS/prism/commit/f5db346)]
+
+### Updated components
+
+* __C__:
+	* Highlight directives in preprocessor lines ([#801](https://github.com/PrismJS/prism/issues/801)) [[`ad316a3`](https://github.com/PrismJS/prism/commit/ad316a3)]
+* __C#__:
+	* Highlight directives in preprocessor lines ([#801](https://github.com/PrismJS/prism/issues/801)) [[`ad316a3`](https://github.com/PrismJS/prism/commit/ad316a3)]
+	* Fix detection of float numbers ([#806](https://github.com/PrismJS/prism/issues/806)) [[`1dae72b`](https://github.com/PrismJS/prism/commit/1dae72b)]
+* __F#__:
+	* Highlight directives in preprocessor lines ([#801](https://github.com/PrismJS/prism/issues/801)) [[`ad316a3`](https://github.com/PrismJS/prism/commit/ad316a3)]
+* __JavaScript__:
+	* Highlight true and false as booleans ([#801](https://github.com/PrismJS/prism/issues/801)) [[`ad316a3`](https://github.com/PrismJS/prism/commit/ad316a3)]
+* __Python__:
+	* Highlight triple-quoted strings before comments. Fix [#815](https://github.com/PrismJS/prism/issues/815) [[`90fbf0b`](https://github.com/PrismJS/prism/commit/90fbf0b)]
+
+### New plugins
+
+* __Previewer: Time__ ([#790](https://github.com/PrismJS/prism/issues/790)) [[`88173de`](https://github.com/PrismJS/prism/commit/88173de)]
+* __Previewer: Angle__ ([#791](https://github.com/PrismJS/prism/issues/791)) [[`a434c86`](https://github.com/PrismJS/prism/commit/a434c86)]
+
+### Other changes
+
+* Increase mocha's timeout [[`f1c41db`](https://github.com/PrismJS/prism/commit/f1c41db)]
+* Prevent most errors in IE8. Fix [#9](https://github.com/PrismJS/prism/issues/9) [[`9652d75`](https://github.com/PrismJS/prism/commit/9652d75)]
+* Add U.S. Web Design Standards on homepage. Fix [#785](https://github.com/PrismJS/prism/issues/785) [[`e10d48b`](https://github.com/PrismJS/prism/commit/e10d48b), [`79ebbf8`](https://github.com/PrismJS/prism/commit/79ebbf8), [`2f7088d`](https://github.com/PrismJS/prism/commit/2f7088d)]
+* Added gulp task to autolink PRs and commits in changelog [[`5ec4e4d`](https://github.com/PrismJS/prism/commit/5ec4e4d)]
+* Use child processes to run each set of tests, in order to deal with the memory leak in vm.runInNewContext() [[`9a4b6fa`](https://github.com/PrismJS/prism/commit/9a4b6fa)]
+
+## 1.2.0 (2015-10-07)
+
+### New components
+
+* __Batch__ ([#781](https://github.com/PrismJS/prism/issues/781)) [[`eab5b06`](https://github.com/PrismJS/prism/commit/eab5b06)]
+
+### Updated components
+
+* __ASP.NET__:
+	* Simplified pattern for `