From 1441a3c748020174373cce01ece3e1c758fff35c Mon Sep 17 00:00:00 2001 From: GitHub Action <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 15 Jul 2024 11:44:07 +0000 Subject: [PATCH] add susmann conformal (#28) [ci skip] --- .all-contributorsrc | 45 - .github/FUNDING.yml | 12 - .github/ISSUE_TEMPLATE/bug_report.md | 38 - .github/ISSUE_TEMPLATE/feature_request.md | 20 - .github/stale.yml | 18 - .github/workflows/deploy-docker-tag.yml | 40 - .github/workflows/deploy-image.yml | 31 - .github/workflows/deploy.yml | 42 - .nojekyll | 0 .pre-commit-config.yaml | 10 - 404.html | 10 +- Gemfile | 24 - _bibliography/in_production.bib | 104 - _bibliography/mock_papers.bib | 39 - _bibliography/published.bib | 237 - _bibliography/templates.bib | 62 - _bibliography/templates_obsolete.bib | 22 - _config.yml | 372 - _data/coauthors.yml | 34 - _data/cv.yml | 97 - _data/repositories.yml | 9 - _data/venues.yml | 6 - _includes/cv/list.html | 5 - _includes/cv/map.html | 8 - _includes/cv/nested_list.html | 14 - _includes/cv/time_table.html | 59 - _includes/disqus.html | 13 - _includes/figure.html | 36 - _includes/footer.html | 28 - _includes/giscus.html | 27 - _includes/head.html | 31 - _includes/header.html | 105 - _includes/metadata.html | 200 - _includes/news.html | 31 - _includes/pagination.html | 17 - _includes/projects.html | 36 - _includes/projects_horizontal.html | 40 - _includes/repository/repo.html | 14 - _includes/repository/repo_user.html | 6 - _includes/scripts/analytics.html | 18 - _includes/scripts/bootstrap.html | 3 - _includes/scripts/jquery.html | 2 - _includes/scripts/masonry.html | 6 - _includes/scripts/mathjax.html | 12 - _includes/scripts/misc.html | 14 - _includes/scripts/progressBar.html | 80 - _includes/selected_papers.html | 5 - _includes/social.html | 96 - _layouts/about.html | 66 - _layouts/archive-category.html | 27 - _layouts/archive-tag.html | 27 - _layouts/archive-year.html | 27 - _layouts/bib.html | 74 - _layouts/cv.html | 35 - _layouts/default.html | 35 - _layouts/distill.html | 117 - _layouts/none.html | 1 - _layouts/page.html | 16 - _layouts/post.html | 53 - _news/announcement_2.md | 31 - ...ouncement_first_publ\303\256shed_paper.md" | 9 - _news/announcement_open.md | 8 - _news/announcement_publication_202301.md | 9 - _news/announcement_publication_202302.md | 7 - _news/announcement_publication_202307.md | 7 - _news/announcement_publication_202311.md | 7 - _news/announcement_publication_202312.md | 9 - _news/announcement_publication_202401.md | 7 - _news/announcement_publication_202402.md | 7 - _news/announcement_publication_202403.md | 9 - _news/announcement_publication_202404.md | 8 - _news/announcement_start.md | 8 - _news/extended_team.md | 12 - _news/extended_team_mp.md | 9 - _news/how_doesit_work.md | 9 - _news/moving_openreview.md | 8 - _news/new_templates.md | 7 - _news/sfds_2022.md | 11 - _news/toronto_workshop_reproducibility.md | 11 - _news/workshop_reproducibility.md | 10 - _pages/about.md | 79 - _pages/board.md | 123 - _pages/home.md | 22 - _pages/publications.md | 44 - _pages/repos.md | 17 - _pages/review.md | 51 - _pages/submit.md | 89 - _pages_template/announcement_long.md | 35 - _plugins/external-posts.rb | 36 - _plugins/hideCustomBibtex.rb | 15 - _posts/2021-04-23-submission-process.md | 16 - _posts/2023-03-17-HTML-to-website.md | 68 - _posts/2023-03-24-gitlab-integration.md | 10 - _posts/2023-03-24-others-languages.md | 15 - _posts/2023-03-24-what-reproducibility.md | 42 - _posts/2023-06-21-data.md | 17 - _posts/2023-06-21-long-running-code.md | 9 - _sass/_base.scss | 783 - _sass/_distill.scss | 126 - _sass/_layout.scss | 50 - _sass/_themes.scss | 72 - _sass/_variables.scss | 45 - about.html | 1 + assets/css/main.css | 4 + assets/css/main.css.map | 1 + assets/css/main.scss | 18 - assets/img/about-gh-repos-webpage-1400.webp | Bin 0 -> 16708 bytes assets/img/about-gh-repos-webpage-480.webp | Bin 0 -> 9132 bytes assets/img/about-gh-repos-webpage-800.webp | Bin 0 -> 16708 bytes assets/img/computo_concept-1400.webp | Bin 0 -> 10678 bytes assets/img/computo_concept-480.webp | Bin 0 -> 6902 bytes assets/img/computo_concept-800.webp | Bin 0 -> 10678 bytes assets/img/computo_process-1400.webp | Bin 0 -> 24530 bytes assets/img/computo_process-480.webp | Bin 0 -> 11374 bytes assets/img/computo_process-800.webp | Bin 0 -> 24530 bytes assets/img/computo_process_alpha-1400.webp | Bin 0 -> 43030 bytes assets/img/computo_process_alpha-480.webp | Bin 0 -> 23674 bytes assets/img/computo_process_alpha-800.webp | Bin 0 -> 43030 bytes assets/img/computo_process_authors-1400.webp | Bin 0 -> 29154 bytes assets/img/computo_process_authors-480.webp | Bin 0 -> 13578 bytes assets/img/computo_process_authors-800.webp | Bin 0 -> 29154 bytes .../computo_process_authors_alpha-1400.webp | Bin 0 -> 41246 bytes .../computo_process_authors_alpha-480.webp | Bin 0 -> 19968 bytes .../computo_process_authors_alpha-800.webp | Bin 0 -> 41246 bytes assets/img/gh-pages-config-1400.webp | Bin 0 -> 11892 bytes assets/img/gh-pages-config-480.webp | Bin 0 -> 4116 bytes assets/img/gh-pages-config-800.webp | Bin 0 -> 11892 bytes assets/img/logo_notext-1400.webp | Bin 0 -> 7704 bytes assets/img/logo_notext-480.webp | Bin 0 -> 4360 bytes assets/img/logo_notext-800.webp | Bin 0 -> 7704 bytes assets/img/logo_notext_white-1400.webp | Bin 0 -> 17322 bytes assets/img/logo_notext_white-480.webp | Bin 0 -> 10774 bytes assets/img/logo_notext_white-800.webp | Bin 0 -> 17322 bytes assets/img/logo_text-1400.webp | Bin 0 -> 11674 bytes assets/img/logo_text-480.webp | Bin 0 -> 6796 bytes assets/img/logo_text-800.webp | Bin 0 -> 11674 bytes assets/img/logo_text_vertical-1400.webp | Bin 0 -> 22558 bytes assets/img/logo_text_vertical-480.webp | Bin 0 -> 13796 bytes assets/img/logo_text_vertical-800.webp | Bin 0 -> 22558 bytes assets/img/sfds-1400.webp | Bin 0 -> 29370 bytes assets/img/sfds-480.webp | Bin 0 -> 15444 bytes assets/img/sfds-800.webp | Bin 0 -> 29370 bytes assets/js/common.js | 12 +- assets/js/dark_mode.js | 9 +- assets/js/distillpub/overrides.js | 25 +- assets/js/distillpub/template.v2.js | 9314 +---------- assets/js/distillpub/transforms.v2.js | 13248 +--------------- assets/js/masonry.js | 13 +- assets/js/theme.js | 84 +- assets/js/zoom.js | 9 +- bin/cibuild | 1 - bin/deploy | 116 - bin/docker_build_image.sh | 5 - bin/docker_run.sh | 8 - bin/dockerhub_run.sh | 8 - blog/2023/HTML-to-website/index.html | 50 + blog/2023/data/index.html | 1 + blog/2023/index.html | 1 + blog/2023/long-running-code/index.html | 1 + blog/2023/others-languages/index.html | 1 + blog/2023/what-reproducibility/index.html | 1 + blog/index.html | 101 +- blog/tag/code/index.html | 1 + blog/tag/reproducibility/index.html | 1 + board/index.html | 1 + feed.xml | 49 + index.html | 1 + news/announcement_2/index.html | 1 + .../index.html" | 1 + news/announcement_open/index.html | 1 + .../index.html | 1 + .../index.html | 1 + .../index.html | 1 + .../index.html | 1 + .../index.html | 1 + .../index.html | 1 + .../index.html | 1 + .../index.html | 1 + .../index.html | 1 + news/announcement_start/index.html | 1 + news/extended_team/index.html | 1 + news/extended_team_mp/index.html | 1 + news/how_doesit_work/index.html | 1 + news/moving_openreview/index.html | 1 + news/new_templates/index.html | 1 + news/sfds_2022/index.html | 1 + .../index.html | 1 + news/workshop_reproducibility/index.html | 1 + publications/index.html | 1 + repos/index.html | 1 + review/index.html | 1 + robots.txt | 5 +- sitemap.xml | 1 + submit/index.html | 1 + 194 files changed, 285 insertions(+), 27454 deletions(-) delete mode 100644 .all-contributorsrc delete mode 100644 .github/FUNDING.yml delete mode 100644 .github/ISSUE_TEMPLATE/bug_report.md delete mode 100644 .github/ISSUE_TEMPLATE/feature_request.md delete mode 100644 .github/stale.yml delete mode 100644 .github/workflows/deploy-docker-tag.yml delete mode 100644 .github/workflows/deploy-image.yml delete mode 100644 .github/workflows/deploy.yml create mode 100644 .nojekyll delete mode 100644 .pre-commit-config.yaml delete mode 100644 Gemfile delete mode 100644 _bibliography/in_production.bib delete mode 100644 _bibliography/mock_papers.bib delete mode 100644 _bibliography/published.bib delete mode 100644 _bibliography/templates.bib delete mode 100644 _bibliography/templates_obsolete.bib delete mode 100644 _config.yml delete mode 100644 _data/coauthors.yml delete mode 100644 _data/cv.yml delete mode 100644 _data/repositories.yml delete mode 100644 _data/venues.yml delete mode 100644 _includes/cv/list.html delete mode 100644 _includes/cv/map.html delete mode 100644 _includes/cv/nested_list.html delete mode 100644 _includes/cv/time_table.html delete mode 100644 _includes/disqus.html delete mode 100644 _includes/figure.html delete mode 100644 _includes/footer.html delete mode 100644 _includes/giscus.html delete mode 100644 _includes/head.html delete mode 100644 _includes/header.html delete mode 100644 _includes/metadata.html delete mode 100644 _includes/news.html delete mode 100644 _includes/pagination.html delete mode 100644 _includes/projects.html delete mode 100644 _includes/projects_horizontal.html delete mode 100644 _includes/repository/repo.html delete mode 100644 _includes/repository/repo_user.html delete mode 100644 _includes/scripts/analytics.html delete mode 100644 _includes/scripts/bootstrap.html delete mode 100644 _includes/scripts/jquery.html delete mode 100644 _includes/scripts/masonry.html delete mode 100644 _includes/scripts/mathjax.html delete mode 100644 _includes/scripts/misc.html delete mode 100644 _includes/scripts/progressBar.html delete mode 100644 _includes/selected_papers.html delete mode 100644 _includes/social.html delete mode 100644 _layouts/about.html delete mode 100644 _layouts/archive-category.html delete mode 100644 _layouts/archive-tag.html delete mode 100644 _layouts/archive-year.html delete mode 100644 _layouts/bib.html delete mode 100644 _layouts/cv.html delete mode 100644 _layouts/default.html delete mode 100644 _layouts/distill.html delete mode 100644 _layouts/none.html delete mode 100644 _layouts/page.html delete mode 100644 _layouts/post.html delete mode 100644 _news/announcement_2.md delete mode 100644 "_news/announcement_first_publ\303\256shed_paper.md" delete mode 100644 _news/announcement_open.md delete mode 100644 _news/announcement_publication_202301.md delete mode 100644 _news/announcement_publication_202302.md delete mode 100644 _news/announcement_publication_202307.md delete mode 100644 _news/announcement_publication_202311.md delete mode 100644 _news/announcement_publication_202312.md delete mode 100644 _news/announcement_publication_202401.md delete mode 100644 _news/announcement_publication_202402.md delete mode 100644 _news/announcement_publication_202403.md delete mode 100644 _news/announcement_publication_202404.md delete mode 100644 _news/announcement_start.md delete mode 100644 _news/extended_team.md delete mode 100644 _news/extended_team_mp.md delete mode 100644 _news/how_doesit_work.md delete mode 100644 _news/moving_openreview.md delete mode 100644 _news/new_templates.md delete mode 100644 _news/sfds_2022.md delete mode 100644 _news/toronto_workshop_reproducibility.md delete mode 100644 _news/workshop_reproducibility.md delete mode 100644 _pages/about.md delete mode 100644 _pages/board.md delete mode 100644 _pages/home.md delete mode 100644 _pages/publications.md delete mode 100644 _pages/repos.md delete mode 100644 _pages/review.md delete mode 100644 _pages/submit.md delete mode 100644 _pages_template/announcement_long.md delete mode 100644 _plugins/external-posts.rb delete mode 100644 _plugins/hideCustomBibtex.rb delete mode 100644 _posts/2021-04-23-submission-process.md delete mode 100644 _posts/2023-03-17-HTML-to-website.md delete mode 100644 _posts/2023-03-24-gitlab-integration.md delete mode 100644 _posts/2023-03-24-others-languages.md delete mode 100644 _posts/2023-03-24-what-reproducibility.md delete mode 100644 _posts/2023-06-21-data.md delete mode 100644 _posts/2023-06-21-long-running-code.md delete mode 100644 _sass/_base.scss delete mode 100644 _sass/_distill.scss delete mode 100644 _sass/_layout.scss delete mode 100644 _sass/_themes.scss delete mode 100644 _sass/_variables.scss create mode 100644 about.html create mode 100644 assets/css/main.css create mode 100644 assets/css/main.css.map delete mode 100644 assets/css/main.scss create mode 100644 assets/img/about-gh-repos-webpage-1400.webp create mode 100644 assets/img/about-gh-repos-webpage-480.webp create mode 100644 assets/img/about-gh-repos-webpage-800.webp create mode 100644 assets/img/computo_concept-1400.webp create mode 100644 assets/img/computo_concept-480.webp create mode 100644 assets/img/computo_concept-800.webp create mode 100644 assets/img/computo_process-1400.webp create mode 100644 assets/img/computo_process-480.webp create mode 100644 assets/img/computo_process-800.webp create mode 100644 assets/img/computo_process_alpha-1400.webp create mode 100644 assets/img/computo_process_alpha-480.webp create mode 100644 assets/img/computo_process_alpha-800.webp create mode 100644 assets/img/computo_process_authors-1400.webp create mode 100644 assets/img/computo_process_authors-480.webp create mode 100644 assets/img/computo_process_authors-800.webp create mode 100644 assets/img/computo_process_authors_alpha-1400.webp create mode 100644 assets/img/computo_process_authors_alpha-480.webp create mode 100644 assets/img/computo_process_authors_alpha-800.webp create mode 100644 assets/img/gh-pages-config-1400.webp create mode 100644 assets/img/gh-pages-config-480.webp create mode 100644 assets/img/gh-pages-config-800.webp create mode 100644 assets/img/logo_notext-1400.webp create mode 100644 assets/img/logo_notext-480.webp create mode 100644 assets/img/logo_notext-800.webp create mode 100644 assets/img/logo_notext_white-1400.webp create mode 100644 assets/img/logo_notext_white-480.webp create mode 100644 assets/img/logo_notext_white-800.webp create mode 100644 assets/img/logo_text-1400.webp create mode 100644 assets/img/logo_text-480.webp create mode 100644 assets/img/logo_text-800.webp create mode 100644 assets/img/logo_text_vertical-1400.webp create mode 100644 assets/img/logo_text_vertical-480.webp create mode 100644 assets/img/logo_text_vertical-800.webp create mode 100644 assets/img/sfds-1400.webp create mode 100644 assets/img/sfds-480.webp create mode 100644 assets/img/sfds-800.webp delete mode 100755 bin/cibuild delete mode 100755 bin/deploy delete mode 100755 bin/docker_build_image.sh delete mode 100755 bin/docker_run.sh delete mode 100755 bin/dockerhub_run.sh create mode 100644 blog/2023/HTML-to-website/index.html create mode 100644 blog/2023/data/index.html create mode 100644 blog/2023/index.html create mode 100644 blog/2023/long-running-code/index.html create mode 100644 blog/2023/others-languages/index.html create mode 100644 blog/2023/what-reproducibility/index.html create mode 100644 blog/tag/code/index.html create mode 100644 blog/tag/reproducibility/index.html create mode 100644 board/index.html create mode 100644 feed.xml create mode 100644 index.html create mode 100644 news/announcement_2/index.html create mode 100644 "news/announcement_first_publ\303\256shed_paper/index.html" create mode 100644 news/announcement_open/index.html create mode 100644 news/announcement_publication_202301/index.html create mode 100644 news/announcement_publication_202302/index.html create mode 100644 news/announcement_publication_202307/index.html create mode 100644 news/announcement_publication_202311/index.html create mode 100644 news/announcement_publication_202312/index.html create mode 100644 news/announcement_publication_202401/index.html create mode 100644 news/announcement_publication_202402/index.html create mode 100644 news/announcement_publication_202403/index.html create mode 100644 news/announcement_publication_202404/index.html create mode 100644 news/announcement_start/index.html create mode 100644 news/extended_team/index.html create mode 100644 news/extended_team_mp/index.html create mode 100644 news/how_doesit_work/index.html create mode 100644 news/moving_openreview/index.html create mode 100644 news/new_templates/index.html create mode 100644 news/sfds_2022/index.html create mode 100644 news/toronto_workshop_reproducibility/index.html create mode 100644 news/workshop_reproducibility/index.html create mode 100644 publications/index.html create mode 100644 repos/index.html create mode 100644 review/index.html create mode 100644 sitemap.xml create mode 100644 submit/index.html diff --git a/.all-contributorsrc b/.all-contributorsrc deleted file mode 100644 index bc6a9103..00000000 --- a/.all-contributorsrc +++ /dev/null @@ -1,45 +0,0 @@ -{ - "files": [ - "README.md" - ], - "imageSize": 100, - "commit": false, - "contributorsPerLine": 7, - "projectName": "al-folio", - "projectOwner": "alshedivat", - "repoType": "github", - "repoHost": "https://github.com", - "badgeTemplate": "[core_contributors]: https://img.shields.io/badge/core_contributors-<%= contributors.length %>-orange.svg 'Number of core contributors'", - "contributorTemplate": "\">\" width=\"<%= options.imageSize %>px;\" alt=\"\"/>
<%= contributor.name %>
", - "skipCi": true, - "contributors": [ - { - "login": "alshedivat", - "name": "Maruan", - "avatar_url": "https://avatars.githubusercontent.com/u/2126561?v=4", - "profile": "http://maruan.alshedivat.com", - "contributions": [ - "design", - "code" - ] - }, - { - "login": "rohandebsarkar", - "name": "Rohan Deb Sarkar", - "avatar_url": "https://avatars.githubusercontent.com/u/50144004?v=4", - "profile": "http://rohandebsarkar.github.io", - "contributions": [ - "code" - ] - }, - { - "login": "pourmand1376", - "name": "Amir Pourmand", - "avatar_url": "https://avatars.githubusercontent.com/u/32064808?v=4", - "profile": "https://amirpourmand.ir", - "contributions": [ - "code" - ] - } - ] -} diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml deleted file mode 100644 index c78502f4..00000000 --- a/.github/FUNDING.yml +++ /dev/null @@ -1,12 +0,0 @@ -# These are supported funding model platforms - -github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2] -patreon: # Replace with a single Patreon username -open_collective: # Replace with a single Open Collective username -ko_fi: alshedivat -tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel -community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry -liberapay: # Replace with a single Liberapay username -issuehunt: # Replace with a single IssueHunt username -otechie: # Replace with a single Otechie username -custom: # ['https://www.buymeacoffee.com/TkFxuKo'] diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md deleted file mode 100644 index 511f5851..00000000 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ /dev/null @@ -1,38 +0,0 @@ ---- -name: Bug report -about: Create a report to help us improve -title: '' -labels: bug -assignees: '' - ---- - -**Acknowledge the following** -- [ ] I carefully read and followed the [Getting Started](https://github.com/alshedivat/al-folio#getting-started) guide. -- [ ] I read through [FAQ](https://github.com/alshedivat/al-folio#faq) and searched through the [past issues](https://github.com/alshedivat/al-folio/issues), none of which addressed my issue. -- [ ] The issue I am raising is a potential bug in al-folio and not just a usage question.
[For usage questions, please post in the [Discussions](https://github.com/alshedivat/al-folio/discussions) instead of raising an issue.] - -**Describe the bug** -A clear and concise description of what the bug is. - -**To Reproduce** -Steps to reproduce the behavior: -1. Go to '...' -2. Click on '....' -3. Scroll down to '....' -4. See error - -**Expected behavior** -A clear and concise description of what you expected to happen. - -**Screenshots** -If applicable, add screenshots to help explain your problem. - -**System (please complete the following information):** - - OS: [e.g. iOS] - - Browser (and its version) [e.g. chrome, safari] - - Jekyll version [e.g. 3.8.7] -- Ruby version [e.g. 2.6.5] - -**Additional context** -Add any other context about the problem here. diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md deleted file mode 100644 index 11fc491e..00000000 --- a/.github/ISSUE_TEMPLATE/feature_request.md +++ /dev/null @@ -1,20 +0,0 @@ ---- -name: Feature request -about: Suggest an idea for this project -title: '' -labels: enhancement -assignees: '' - ---- - -**Is your feature request related to a problem? Please describe.** -A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] - -**Describe the solution you'd like** -A clear and concise description of what you want to happen. - -**Describe alternatives you've considered** -A clear and concise description of any alternative solutions or features you've considered. - -**Additional context** -Add any other context or screenshots about the feature request here. diff --git a/.github/stale.yml b/.github/stale.yml deleted file mode 100644 index 8ec2004d..00000000 --- a/.github/stale.yml +++ /dev/null @@ -1,18 +0,0 @@ -# Number of days of inactivity before an issue becomes stale -daysUntilStale: 60 -# Number of days of inactivity before a stale issue is closed -daysUntilClose: 7 -# Issues with these labels will never be considered stale -exemptLabels: - - pinned - - security - - enhancement -# Label to use when marking an issue as stale -staleLabel: wontfix -# Comment to post when marking an issue as stale. Set to `false` to disable -markComment: > - This issue has been automatically marked as stale because it has not had - recent activity. It will be closed if no further activity occurs. Thank you - for your contributions. -# Comment to post when closing a stale issue. Set to `false` to disable -closeComment: false diff --git a/.github/workflows/deploy-docker-tag.yml b/.github/workflows/deploy-docker-tag.yml deleted file mode 100644 index 3e6b6a3a..00000000 --- a/.github/workflows/deploy-docker-tag.yml +++ /dev/null @@ -1,40 +0,0 @@ -name: Docker Image CI (Upload Tag) - -on: - push: - tags: - - 'v*' - -jobs: - - build: - - runs-on: ubuntu-latest - - steps: - - name: Checkout - uses: actions/checkout@v2 - - name: Buildx - uses: docker/setup-buildx-action@v1 - - - - name: Docker meta - id: meta - uses: docker/metadata-action@v4 - with: - images: amirpourmand/al-folio - - - name: Login - uses: docker/login-action@v1 - with: - username: ${{ secrets.DOCKER_USERNAME }} - password: ${{ secrets.DOCKER_PASSWORD }} - - - name: Build and push - uses: docker/build-push-action@v3 - with: - context: . - push: ${{ github.event_name != 'pull_request' }} - tags: ${{ steps.meta.outputs.tags }} - labels: ${{ steps.meta.outputs.labels }} - diff --git a/.github/workflows/deploy-image.yml b/.github/workflows/deploy-image.yml deleted file mode 100644 index b747dfc1..00000000 --- a/.github/workflows/deploy-image.yml +++ /dev/null @@ -1,31 +0,0 @@ -name: Docker Image CI - -on: - push: - branches: [ master ] - -jobs: - - build: - - runs-on: ubuntu-latest - if: github.repository_owner == 'alshedivat' - - steps: - - name: Checkout - uses: actions/checkout@v2 - - name: Buildx - uses: docker/setup-buildx-action@v1 - - - name: Login - uses: docker/login-action@v1 - with: - username: ${{ secrets.DOCKER_USERNAME }} - password: ${{ secrets.DOCKER_PASSWORD }} - - - name: Build and push - uses: docker/build-push-action@v2 - with: - context: . - push: true - tags: amirpourmand/al-folio diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml deleted file mode 100644 index 0301f080..00000000 --- a/.github/workflows/deploy.yml +++ /dev/null @@ -1,42 +0,0 @@ -name: deploy - -on: - push: - branches: - - master - - main - pull_request: - branches: - - master - - main - -jobs: - deploy: - runs-on: ubuntu-latest - steps: - - name: Checkout code - uses: actions/checkout@v3 - - name: Setup Ruby - uses: ruby/setup-ruby@v1 - with: - ruby-version: '3.0.2' - bundler-cache: true - - name: Install deps - run: | - npm install -g mermaid.cli - - name: Setup deploy options - id: setup - run: | - git config --global user.name "GitHub Action" - git config --global user.email "41898282+github-actions[bot]@users.noreply.github.com" - if [[ ${GITHUB_REF} = refs/pull/*/merge ]]; then # pull request - echo "SRC_BRANCH=${GITHUB_HEAD_REF}" >> $GITHUB_OUTPUT - echo "NO_PUSH=--no-push" >> $GITHUB_OUTPUT - elif [[ ${GITHUB_REF} = refs/heads/* ]]; then # branch, e.g. master, source etc - echo "SRC_BRANCH=${GITHUB_REF#refs/heads/}" >> $GITHUB_OUTPUT - fi - echo "DEPLOY_BRANCH=gh-pages" >> $GITHUB_OUTPUT - - name: Deploy website - run: yes | bash bin/deploy --verbose ${{ steps.setup.outputs.NO_PUSH }} - --src ${{ steps.setup.outputs.SRC_BRANCH }} - --deploy ${{ steps.setup.outputs.DEPLOY_BRANCH }} diff --git a/.nojekyll b/.nojekyll new file mode 100644 index 00000000..e69de29b diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml deleted file mode 100644 index ca7e4654..00000000 --- a/.pre-commit-config.yaml +++ /dev/null @@ -1,10 +0,0 @@ -# See https://pre-commit.com for more information -# See https://pre-commit.com/hooks.html for more hooks -repos: -- repo: https://github.com/pre-commit/pre-commit-hooks - rev: v4.3.0 - hooks: - - id: trailing-whitespace - - id: end-of-file-fixer - - id: check-yaml - - id: check-added-large-files diff --git a/404.html b/404.html index 0da4ee0b..1edc56e7 100644 --- a/404.html +++ b/404.html @@ -1,9 +1 @@ ---- -layout: page -permalink: /404.html -title: "Page not found" -description: "Looks like there has been a mistake. Nothing exists here." -redirect: true ---- - -

You will be redirected to the main page within 3 seconds. If not redirected, please click here.

+ Page not found | COMPUTO

Page not found

Looks like there has been a mistake. Nothing exists here.

You will be redirected to the main page within 3 seconds. If not redirected, please click here.

\ No newline at end of file diff --git a/Gemfile b/Gemfile deleted file mode 100644 index 6cdddfe4..00000000 --- a/Gemfile +++ /dev/null @@ -1,24 +0,0 @@ -source 'https://rubygems.org' -group :jekyll_plugins do - gem 'jekyll' - gem 'jekyll-archives' - gem 'jekyll-diagrams' - gem 'jekyll-email-protect' - gem 'jekyll-feed' - gem 'jekyll-imagemagick' - gem 'jekyll-minifier' - gem 'jekyll-paginate-v2' - gem 'jekyll-scholar' - gem 'jekyll-sitemap' - gem 'jekyll-link-attributes' - gem 'jekyll-twitter-plugin' - gem 'jemoji' - gem 'mini_racer' - gem 'unicode_utils' - gem 'webrick' - gem 'kramdown-parser-gfm' -end -group :other_plugins do - gem 'httparty' - gem 'feedjira' -end diff --git a/_bibliography/in_production.bib b/_bibliography/in_production.bib deleted file mode 100644 index a16b67f3..00000000 --- a/_bibliography/in_production.bib +++ /dev/null @@ -1,104 +0,0 @@ -@article{susmann2024, - bibtex_show = {true}, - author = {Susmann, Herbert and and Chambaz, Antoine and Josse, Julie}, - publisher = {French Statistical Society}, - title = {{AdaptiveConformal: An R Package for Adaptive Conformal Inference}}, - journal = {Computo}, - year = 2024, - url = {https://computo.sfds.asso.fr/published-202407-susmann-adaptive-conformal}, - doi = {10.57750/edan-5f53}, - type = {{Research article}}, - domain = {Statistics}, - language = {R}, - repository = {published-202407-susmann-adaptive-conformal}, - langid = {en}, - abstract = {Conformal Inference (CI) is a popular approach for generating finite sample prediction intervals based on the output of any point prediction method when data are exchangeable. Adaptive Conformal Inference (ACI) algorithms extend CI to the case of sequentially observed data, such as time series, and exhibit strong theoretical guarantees without having to assume exchangeability of the observed data. The common thread that unites algorithms in the ACI family is that they adaptively adjust the width of the generated prediction intervals in response to the observed data. We provide a detailed description of five ACI algorithms and their theoretical guarantees, and test their performance in simulation studies. We then present a case study of producing prediction intervals for influenza incidence in the United States based on black-box point forecasts. Implementations of all the algorithms are released as an open-source R package, AdaptiveConformal, which also includes tools for visualizing and summarizing conformal prediction intervals.} -} - - -@article{pishchagina2024, - bibtex_show = {true}, - author = {Pishchagina, Liudmila and Rigaill, Guillem and Runge, - Vincent}, - publisher = {French Statistical Society}, - title = {Geometric-Based {Pruning} {Rules} for {Change} {Point} - {Detection} in {Multiple} {Independent} {Time} {Series}}, - journal = {Computo}, - year = 2024, - url = {https://computo.sfds.asso.fr/published-202406-pishchagina-change-point/}, - doi = {10.57750/9vvx-eq57}, - issn = {2824-7795}, - type = {{Research article}}, - domain = {Statistics}, - language = {R}, - repository = {published-202406-pishchagina-change-point}, - langid = {en}, - abstract = {We address the challenge of identifying multiple change - points in a group of independent time series, assuming these change - points occur simultaneously in all series and their number is - unknown. The search for the best segmentation can be expressed as a - minimization problem over a given cost function. We focus on dynamic - programming algorithms that solve this problem exactly. When the - number of changes is proportional to data length, an - inequality-based pruning rule encoded in the PELT algorithm leads to - a linear time complexity. Another type of pruning, called functional - pruning, gives a close-to-linear time complexity whatever the number - of changes, but only for the analysis of univariate time series. We - propose a few extensions of functional pruning for multiple - independent time series based on the use of simple geometric shapes - (balls and hyperrectangles). We focus on the Gaussian case, but some - of our rules can be easily extended to the exponential family. In a - simulation study we compare the computational efficiency of - different geometric-based pruning rules. We show that for a small - number of time series some of them ran significantly faster than - inequality-based approaches in particular when the underlying number - of changes is small compared to the data length.} -} - -@article{legrand2024, - bibtex_show = {true}, - author = {Legrand, Juliette and Pimont, François and Dupuy, Jean-Luc - and Opitz, Thomas}, - publisher = {French Statistical Society}, - title = {Bayesian Spatiotemporal Modelling of Wildfire Occurrences and - Sizes for Projections Under Climate Change}, - journal = {Computo}, - year = 2024, - url = {https://computo.sfds.asso.fr/published-202407-legrand-wildfires/}, - doi = {10.57750/4y84-4t68}, - issn = {2824-7795}, - type = {{Research article}}, - domain = {Statistics}, - language = {R}, - repository = {published-202407-legrand-wildfires}, - langid = {en}, - abstract = {Appropriate spatiotemporal modelling of wildfire activity - is crucial for its prediction and risk management. Here, we focus on - wildfire risk in the Aquitaine region in the Southwest of France and - its projection under climate change. We study whether wildfire risk - could further increase under climate change in this specific region, - which does not lie in the historical core area of wildfires in - Southeastern France, corresponding to the Southwest. For this - purpose, we consider a marked spatiotemporal point process, a - flexible model for occurrences and magnitudes of such environmental - risks, where the magnitudes are defined as the burnt areas. The - model is first calibrated using 14 years of past observation data of - wildfire occurrences and weather variables, and then applied for - projection of climate-change impacts using simulations of numerical - climate models until 2100 as new inputs. We work within the - framework of a spatiotemporal Bayesian hierarchical model, and we - present the workflow of its implementation for a large dataset at - daily resolution for 8km-pixels using the INLA-SPDE approach. The - assessment of the posterior distributions shows a satisfactory fit - of the model for the observation period. We stochastically simulate - projections of future wildfire activity by combining climate model - output with posterior simulations of model parameters. Depending on - climate models, spline-smoothed projections indicate low to moderate - increase of wildfire activity under climate change. The increase is - weaker than in the historical core area, which we attribute to - different weather conditions (oceanic versus Mediterranean). Besides - providing a relevant case study of environmental risk modelling, - this paper is also intended to provide a full workflow for - implementing the Bayesian estimation of marked log-Gaussian Cox - processes using the R-INLA package of the R statistical software.} -} diff --git a/_bibliography/mock_papers.bib b/_bibliography/mock_papers.bib deleted file mode 100644 index 63bfa931..00000000 --- a/_bibliography/mock_papers.bib +++ /dev/null @@ -1,39 +0,0 @@ -@Article {mock_tsne, - bibtex_show = {true}, - author = {van der Maaten, Laurens and Hinton, Geoffrey}, - title = {{Visualizing Data using t-SNE: practical Computo example}}, - journal = {Computo}, - year = {2021}, - volume = {0}, - repository = {published-paper-tsne}, - type = {Template}, - language = {R, Python}, - domain = {Template}, - abstract = {We present a new technique called “t-SNE” that - visualizes high-dimensional data by giving each - datapoint a location in a two or three-dimensional - map. The technique is a variation of Stochastic - Neighbor Embedding hinton:stochastic that is much - easier to optimize, and produces significantly - better visualizations by reducing the tendency to - crowd points together in the center of the - map. t-SNE is better than existing techniques at - creating a single map that reveals structure at many - different scales. This is particularly important for - high-dimensional data that lie on several different, - but related, low-dimensional manifolds, such as - images of objects from multiple classes seen from - multiple viewpoints. For visualizing the structure - of very large data sets, we show how t-SNE can use - random walks on neighborhood graphs to allow the - implicit structure of all the data to influence the - way in which a subset of the data is displayed. We - illustrate the performance of t-SNE on a wide - variety of data sets and compare it with many other - non-parametric visualization techniques, including - Sammon mapping, Isomap, and Locally Linear - Embedding. The visualization produced by t-SNE are - significantly better than those produced by other - techniques on almost all of the data sets.}, - keywords = {template, documentation, quarto, R, python} -} diff --git a/_bibliography/published.bib b/_bibliography/published.bib deleted file mode 100644 index 2d0503de..00000000 --- a/_bibliography/published.bib +++ /dev/null @@ -1,237 +0,0 @@ -@article{lefort_peerannot, - bibtex_show = {true}, - author = {Lefort, Tanguy and Charlier, Benjamin and Joly, Alexis and Salmon, Joseph}, - title = {{Peerannot: classification for crowdsourced image datasets with Python}}, - journal = {Computo}, - year = 2024, - abstract = {Crowdsourcing is a quick and easy way to collect labels for large datasets, involving many workers. However, workers often disagree with each other. Sources of error can arise from the workers’ skills, but also from the intrinsic difficulty of the task. We present peerannot: a Python library for managing and learning from crowdsourced labels for classification. Our library allows users to aggregate labels from common noise models or train a deep learning-based classifier directly from crowdsourced labels. In addition, we provide an identification module to easily explore the task difficulty of datasets and worker capabilities.}, - doi = {10.57750/qmaz-gr91}, - repository = {published-202402-lefort-peerannot}, - type = {{Research article}}, - language = {Python}, - domain = {Machine Learning}, - keywords = {crowdsourcing, label noise, task difficulty, worker ability, classification}, - issn = {2824-7795} -} - -@article{elmasri-optimal, - bibtex_show = {true}, - author = {El Masri, Maxime and Morio, Jérôme and Simatos, Florian}, - title = {{Optimal projection for parametric importance sampling in high dimensions}}, - journal = {Computo}, - year = 2024, - abstract = {In this paper we propose a dimension-reduction strategy in order to improve the performance of importance sampling in high dimension. The idea is to estimate variance terms in a small number of suitably chosen directions. We first prove that the optimal directions, i.e., the ones that minimize the Kullback--Leibler divergence with the optimal auxiliary density, are the eigenvectors associated to extreme (small or large) eigenvalues of the optimal covariance matrix. We then perform extensive numerical experiments that show that as dimension increases, these directions give estimations which are very close to optimal. Moreover, we show that the estimation remains accurate even when a simple empirical estimator of the covariance matrix is used to estimate these directions. These theoretical and numerical results open the way for different generalizations, in particular the incorporation of such ideas in adaptive importance sampling schemes}, - doi = {doi.org/10.57750/jjza-6j82}, - repository = {published-202402-elmasri-optimal}, - type = {{Research article}}, - language = {Python}, - domain = {Statistics}, - keywords = {Rare event simulation, Parameter estimation, Importance sampling, Dimension reduction, Kullback--Leibler divergence, Projection}, - issn = {2824-7795} -} - -@article{adrat_repulsion, - bibtex_show = {true}, - author = {Adrat, Hamza and Decreusefond, Laurent}, - title = {{Point Process Discrimination According to Repulsion}}, - journal = {Computo}, - year = 2024, - abstract = {In numerous applications, cloud of points do seem to exhibit repulsion in the intuitive sense that there is no local cluster as in a Poisson process. Motivated by data coming from cellular networks, we devise a classification algorithm based on the form of the Voronoi cells. We show that, in the particular set of data we are given, we can retrieve some repulsiveness between antennas, which was expected for engineering reasons.}, - doi = {10.57750/3r07-aw28}, - repository = {published_202401_adrat_repulsion}, - type = {{Research article}}, - language = {Python}, - domain = {Statistics}, - keywords = {classification, point process, repulsion}, - issn = {2824-7795} -} - - -@article{favrot_hierarchical, - bibtex_show = {true}, - author = {Favrot, Armand and Makoswki, David}, - title = {{A hierarchical model to evaluate pest treatments from prevalence and intensity data}}, - journal = {Computo}, - year = 2024, - abstract = {In plant epidemiology, pest abundance is measured in field trials using metrics assessing either pest prevalence (fraction of the plant population infected) or pest intensity (average number of pest individuals present in infected plants). Some of these trials rely on prevalence, while others rely on intensity, depending on the protocols. In this paper, we present a hierarchical Bayesian model able to handle both types of data. In this model, the intensity and prevalence variables are derived from a latent variable representing the number of pest individuals on each host individual, assumed to follow a Poisson distribution. Effects of pest treaments, time trend, and between-trial variability are described using fixed and random effects. We apply the model to a real dataset in the context of aphid control in sugar beet fields. In this dataset, prevalence and intensity were derived from aphid counts observed on either factorial trials testing different types of pesticides treatments or field surveys monitoring aphid abundance. Next, we perform simulations to assess the impacts of using either prevalence or intensity data, or both types of data simultaneously, on the accuracy of the model parameter estimates and on the ranking of pesticide treatment efficacy. Our results show that, when pest prevalence and pest intensity data are collected separately in different trials, the model parameters are more accurately estimated using both types of trials than using one type of trials only. When prevalence data are collected in all trials and intensity data are collected in a subset of trials, estimations and pest treatment ranking are more accurate using both types of data than using prevalence data only. When only one type of observation can be collected in a pest survey or in an experimental trial, our analysis indicates that it is better to collect intensity data than prevalence data when all or most of the plants are expected to be infested, but that both types of data lead to similar results when the level of infestation is low to moderate. Finally, our simulations show that it is unlikely to obtain accurate results with fewer than 40 trials when assessing the efficacy of pest control treatments based on prevalence and intensity data. Because of its flexibility, our model can be used to evaluate and rank the efficacy of pest treatments using either prevalence or intensity data, or both types of data simultaneously. As it can be easily implemented using standard Bayesian packages, we hope that it will be useful to agronomists, plant pathologists, and applied statisticians to analyze pest surveys and field experiments conducted to assess the efficacy of pest treatments.}, - doi = {10.57750/6cgk-g727}, - repository = {published-202312-favrot-hierarchical}, - type = {{Research article}}, - language = {R}, - domain = {Statistics}, - keywords = {bayesian model, epidemiology, hierarchical model, pest control, trial, survey}, - issn = {2824-7795} -} - -@article{cleynen_local, - bibtex_show = {true}, - author = {Cleynen, Alice and Raynal, Louis and Marin, Jean-Michel}, - title = {{Local tree methods for classification: a review and some dead ends}}, - journal = {Computo}, - year = 2023, - abstract = {Random Forests (RF) [@breiman:2001] are very popular machine learning methods. They perform well even with little or no tuning, and have some theoretical guarantees, especially for sparse problems [@biau:2012;@scornet:etal:2015]. These learning strategies have been used in several contexts, also outside the field of classification and regression. To perform Bayesian model selection in the case of intractable likelihoods, the ABC Random Forests (ABC-RF) strategy of @pudlo:etal:2016 consists in applying Random Forests on training sets composed of simulations coming from the Bayesian generative models. The ABC-RF technique is based on an underlying RF for which the training and prediction phases are separated. The training phase does not take into account the data to be predicted. This seems to be suboptimal as in the ABC framework only one observation is of interest for the prediction. In this paper, we study tree-based methods that are built to predict a specific instance in a classification setting. This type of methods falls within the scope of local (lazy/instance-based/case specific) classification learning. We review some existing strategies and propose two new ones. The first consists in modifying the tree splitting rule by using kernels, the second in using a first RF to compute some local variable importance that is used to train a second, more local, RF. Unfortunately, these approaches, although interesting, do not provide conclusive results.}, - doi = {10.57750/3j8m-8d57}, - repository = {published-202312-cleynen-local}, - type = {{Research article}}, - language = {R}, - domain = {Statistics}, - keywords = {classification, Random Forests, local methods}, - issn = {2824-7795} -} - -@article{delattre_fim, - bibtex_show = {true}, - author = {Delattre, Maud and Kuhn, Estelle}, - title = {{Computing an empirical Fisher information matrix estimate in latent variable models through stochastic approximation}}, - journal = {Computo}, - year = 2023, - abstract = {The Fisher information matrix (FIM) is a key quantity in statistics. However its exact computation is often not trivial. In particular in many latent variable models, it is intricated due to the presence of unobserved variables. Several methods have been proposed to approximate the FIM when it can not be evaluated analytically. Different estimates have been considered, in particular moment estimates. However some of them require to compute second derivatives of the complete data log-likelihood which leads to some disadvantages. In this paper, we focus on the empirical Fisher information matrix defined as an empirical estimate of the covariance matrix of the score, which only requires to compute the first derivatives of the log-likelihood. Our contribution consists in presenting a new numerical method to evaluate this empirical Fisher information matrix in latent variable model when the proposed estimate can not be directly analytically evaluated. We propose a stochastic approximation estimation algorithm to compute this estimate as a by-product of the parameter estimate. We evaluate the finite sample size properties of the proposed estimate and the convergence properties of the estimation algorithm through simulation studies.}, - doi = {10.57750/r5gx-jk62}, - repository = {published-202311-delattre-fim}, - type = {{Research article}}, - language = {R}, - domain = {Statistics}, - keywords = {Model-based standard error, moment estimate, Fisher identity, stochastic approximation algorithm}, - issn = {2824-7795} -} - -@article{sanou_multiscale, - bibtex_show = {true}, - author = {Sanou, Edmond and Ambroise, Christophe and Robin, Geneviève}, - title = {{Inference of Multiscale Gaussian Graphical Model}}, - journal = {Computo}, - year = 2023, - abstract = {Gaussian Graphical Models (GGMs) are widely used in high-dimensional data analysis to synthesize the interaction between variables. In many applications, such as genomics or image analysis, graphical models rely on sparsity and clustering to reduce dimensionality and improve performances. This paper explores a slightly different paradigm where clustering is not knowledge-driven but performed simultaneously with the graph inference task. We introduce a novel Multiscale Graphical Lasso (MGLasso) to improve networks interpretability by proposing graphs at different granularity levels. The method estimates clusters through a convex clustering approach — a relaxation of k-means, and hierarchical clustering. The conditional independence graph is simultaneously inferred through a neighborhood selection scheme for undirected graphical models. MGLasso extends and generalizes the sparse group fused lasso problem to undirected graphical models. We use continuation with Nesterov smoothing in a shrinkage-thresholding algorithm (CONESTA) to propose a regularization path of solutions along the group fused Lasso penalty, while the Lasso penalty is kept constant. Extensive experiments on synthetic data compare the performances of our model to state-of-the-art clustering methods and network inference models. Applications to gut microbiome data and poplar's methylation mixed with transcriptomic data are presented.}, - doi = {10.57750/1f4p-7955}, - repository = {published-202306-sanou-multiscale_glasso}, - type = {{Research article}}, - language = {R and Python}, - domain = {Statistics}, - keywords = {Neighborhood selection, Convex hierarchical clustering, Gaussian graphical models}, - issn = {2824-7795} -} - - -@article{chagneux_macrolitter, - bibtex_show = {true}, - author = {Chagneux, Mathis and Le Corff, Sylvain and - Gloaguen, Pierre and Ollion, Charles and Lepâtre, Océane and - Bruge, Antoine}, - title = {Macrolitter Video Counting on Riverbanks Using State - Space Models and Moving Cameras}, - journal = {Computo}, - year = {2023}, - repository = {published-202301-chagneux-macrolitter}, - doi = {10.57750/845m-f805}, - language = {Python}, - issn = {2824-7795}, - langid = {en}, - type = {{Research article}}, - abstract = {Litter is a known cause of degradation in marine - environments and most of it travels in rivers before - reaching the oceans. In this paper, we present a - novel algorithm to assist waste monitoring along - watercourses. While several attempts have been made - to quantify litter using neural object detection in - photographs of floating items, we tackle the more - challenging task of counting directly in videos - using boat-embedded cameras. We rely on multi-object - tracking (MOT) but focus on the key pitfalls of - false and redundant counts which arise in typical - scenarios of poor detection performance. Our system - only requires supervision at the image level and - performs Bayesian filtering via a state space model - based on optical flow. We present a new open image - dataset gathered through a crowdsourced campaign and - used to train a center-based anchor-free object - detector. Realistic video footage assembled by water - monitoring experts is annotated and provided for - evaluation. Improvements in count quality are - demonstrated against systems built from - state-of-the-art multi-object trackers sharing the - same detection capabilities. A precise error - decomposition allows clear analysis and highlights - the remaining challenges.} -} - -@article{boulin_clayton, - bibtex_show = {true}, - author = {Boulin, Alexis}, - title = {{A Python Package for Sampling from Copulae: - clayton}}, - journal = {Computo}, - year = 2023, - abstract = {The package clayton is designed to be intuitive, - user-friendly, and efficient. It offers a wide range - of copula models, including Archimedean, Elliptical, - and Extreme. The package is implemented in pure - Python, making it easy to install and use. In - addition, we provide detailed documentation and - examples to help users get started quickly. We also - conduct a performance comparison with existing R - packages, demonstrating the efficiency of our - implementation. The clayton package is a valuable - tool for researchers and practitioners working with - copulae in Python}, - doi = {10.57750/4szh-t752}, - repository = {published-202301-boulin-clayton}, - type = {{Software paper}}, - language = {Python}, - domain = {Statistics}, - keywords = {Copulae, Random number generation}, - issn = {2824-7795} -} - -@article{gimenez_lynx, - bibtex_show = {true}, - author = {Gimenez, Olivier and Kervellec, Maelis and Fanjul, - Jean-Baptiste and Chaine, Anna and Marescot, Lucile - and Bollet, Yoann and Duchamp, Christophe}, - title = {{Trade-off between deep learning for species - identification and inference about predator-prey - co-occurrence: Reproducible R workflow integrating - models in computer vision and ecological - statistics}}, - journal = {Computo}, - year = 2022, - abstract = {Deep learning is used in computer vision problems - with important applications in several scientific - fields. In ecology for example, there is a growing - interest in deep learning for automatizing - repetitive analyses on large amounts of images, such - as animal species identification. However, there - are challenging issues toward the wide adoption of - deep learning by the community of ecologists. First, - there is a programming barrier as most algorithms - are written in Python while most ecologists are - versed in R. Second, recent applications of deep - learning in ecology have focused on computational - aspects and simple tasks without addressing the - underlying ecological questions or carrying out the - statistical data analysis to answer these questions. - Here, we showcase a reproducible R workflow - integrating both deep learning and statistical - models using predator-prey relationships as a case - study. We illustrate deep learning for the - identification of animal species on images collected - with camera traps, and quantify spatial - co-occurrence using multispecies occupancy models. - Despite average model classification performances, - ecological inference was similar whether we analysed - the ground truth dataset or the classified - dataset. This result calls for further work on the - trade-offs between time and resources allocated to - train models with deep learning and our ability to - properly address key ecological questions with - biodiversity monitoring. We hope that our - reproducible workflow will be useful to ecologists - and applied statisticians.}, - doi = {10.57750/yfm2-5f45}, - repository = {published-202204-deeplearning-occupancy-lynx}, - type = {{Research article}}, - language = {R}, - domain = {Statistical Ecology}, - keywords = {computer vision, deep-learning, species distribution - modeling, ecological statistics}, - issn = {2824-7795} -} diff --git a/_bibliography/templates.bib b/_bibliography/templates.bib deleted file mode 100644 index eda8eeba..00000000 --- a/_bibliography/templates.bib +++ /dev/null @@ -1,62 +0,0 @@ ---- ---- - -@Article {template_r, - author = {{Computo editorial board}}, - title = {{Computo Template for R users}}, - journal = {Computo}, - year = {2022}, - volume = {0}, - repository = {template-computo-R}, - type = {Template}, - language = {R}, - domain = {Template}, - abstract = {Documentation and sample of a simple R-based - submission for the Computo journal, using our - Quarto-based template and renv for handling - dependencies. Shows how to automatically setup and - build the HTML and PDF outputs, ready to submit to - our peer-review platform.}, - keywords = {template, documentation, R, quarto, renv} -} - -@Article {template_python, - author = {{Computo editorial board}}, - title = {{Computo Template for Python users}}, - journal = {Computo}, - year = {2022}, - volume = {0}, - repository = {template-computo-python}, - type = {Template}, - language = {Python}, - domain = {Template}, - abstract = {Documentation and sample of a simple Python-based - submission for the Computo journal, using our - Quarto-based template and pip/venv for handling - dependencies. Shows how to automatically setup and - build the HTML and PDF outputs, ready to submit to - our peer-review platform.}, - keywords = {template, documentation, Python, quarto, venv} -} - -@Article {template_python, - author = {{Computo editorial board}}, - title = {{Computo Template for Julia users}}, - journal = {Computo}, - year = {2022}, - volume = {0}, - repository = {template-computo-julia}, - type = {Template}, - language = {Julia}, - domain = {Template}, - abstract = {Documentation and sample of a simple Julia-based - submission for the Computo journal, using our - Quarto-based template and the built-in Julia Pkg manager. - Shows how to automatically setup and - build the HTML and PDF outputs, ready to submit to - our peer-review platform.}, - keywords = {template, documentation, Julia, quarto, Pkg} -} - - - diff --git a/_bibliography/templates_obsolete.bib b/_bibliography/templates_obsolete.bib deleted file mode 100644 index dc57ecfd..00000000 --- a/_bibliography/templates_obsolete.bib +++ /dev/null @@ -1,22 +0,0 @@ ---- ---- - -@Article {template_myst, - author = {{Computo editorial board}}, - title = {{Template for writing a contribution for Computo based on Myst/Jupyter book}}, - journal = {Computo}, - year = {2021}, - volume = {0}, - repository = {template-computo-myst}, - type = {Template}, - language = {R, Python}, - domain = {Template}, - abstract = {This document provides a Myst/Jupyter book template - for contributions to the Computo Journal. It also - serves as a documentation for configuring the github - repository which will host the notebook source of - your manuscript and prove us the reproducibility of - your work.}, - keywords = {template, documentation, Rmarkdown, binder} -} - diff --git a/_config.yml b/_config.yml deleted file mode 100644 index d27ac857..00000000 --- a/_config.yml +++ /dev/null @@ -1,372 +0,0 @@ -# ----------------------------------------------------------------------------- -# Site settings -# ----------------------------------------------------------------------------- - -title: COMPUTO -first_name: -middle_name: -last_name: -email: computo@sfds.asso.fr -description: > - A Journal of the French Statistical Society to promote reproducible Science -footer_text: > -# Powered by Jekyll with al-folio theme. -# Hosted by GitHub Pages. - -icon: ⚙ # the emoji used as the favicon -keywords: journal, statistics, machine-learning, reproducibility # add your own keywords or leave empty -lang: en # the language of your site (for example: en, fr, cn, ru, etc.) -url: https://computorg.github.io # the base hostname & protocol for your site -baseurl: # the subpath of your site, e.g. /blog/ -last_updated: true # set to true if you want to display last updated in the footer -impressum_path: # set to path to include impressum link in the footer, use the same path as permalink in a page, helps to conform with EU GDPR - -# ----------------------------------------------------------------------------- -# Theme -# ----------------------------------------------------------------------------- - -# code highlighter theme -highlight_theme_light: github # https://github.com/jwarby/jekyll-pygments-themes -highlight_theme_dark: native # https://github.com/jwarby/jekyll-pygments-themes - -# repo color theme -repo_theme_light: default # https://github.com/anuraghazra/github-readme-stats/blob/master/themes/README.md -repo_theme_dark: dark # https://github.com/anuraghazra/github-readme-stats/blob/master/themes/README.md - -# ----------------------------------------------------------------------------- -# RSS Feed -# ----------------------------------------------------------------------------- -# will use title and url fields -# Take a look to https://github.com/jekyll/jekyll-feed for more customization - -rss_icon: true - -# ----------------------------------------------------------------------------- -# Layout -# ----------------------------------------------------------------------------- - -navbar_fixed: true -footer_fixed: true - -# Dimensions -max_width: 800px - -# ----------------------------------------------------------------------------- -# Open Graph & Schema.org -# ----------------------------------------------------------------------------- -# Display links to the page with a preview object on social media. -serve_og_meta: false # Include Open Graph meta tags in the HTML head -serve_schema_org: false # Include Schema.org in the HTML head -og_image: # The site-wide (default for all links) Open Graph preview image - -# ----------------------------------------------------------------------------- -# Social integration -# ----------------------------------------------------------------------------- - -github_username: computorg -twitter_username: # your Twitter handle -mastodon_username: mathstodon.xyz/@computo # your mastodon instance+username in the format instance.tld/@username -linkedin_username: # your LinkedIn user name -telegram_username: # your Telegram user name -scholar_userid: # your Google Scholar ID -semanticscholar_id: # your Semantic Scholar ID -whatsapp_number: # your WhatsApp number (full phone number in international format. Omit any zeroes, brackets, or dashes when adding the phone number in international format.) -orcid_id: # your ORCID ID -medium_username: # your Medium username -quora_username: # your Quora username -publons_id: # your ID on Publons -research_gate_profile: # your profile on ResearchGate -blogger_url: # your blogger URL -work_url: # work page URL -keybase_username: # your keybase user name -wikidata_id: # your wikidata id -dblp_url: # your DBLP profile url -stackoverflow_id: # your stackoverflow id -kaggle_id: # your kaggle id -lastfm_id: # your lastfm id -spotify_id: # your spotify id -pinterest_id: # your pinterest id -unsplash_id: # your unsplash id -instagram_id: # your instagram id -facebook_id: # your facebook id -youtube_id: # your youtube channel id (youtube.com/@) -discord_id: # your discord id (18-digit unique numerical identifier) - -#contact_note: > -# You can even add a little note about which of these is the best way to reach you. - -# ----------------------------------------------------------------------------- -# Analytics and search engine verification -# ----------------------------------------------------------------------------- - -google_analytics: # your Goole Analytics measurement ID (format: G-XXXXXXXXXX) -panelbear_analytics: # panelbear analytics site ID (format: XXXXXXXXX) - -google_site_verification: # your google-site-verification ID (Google Search Console) -bing_site_verification: # out your bing-site-verification ID (Bing Webmaster) - -# ----------------------------------------------------------------------------- -# Blog -# ----------------------------------------------------------------------------- - -blog_name: Frequently Asked Questions # your blog must have a name for it to show up in the nav bar -blog_description: Additional details and support for authors -blog_name: F.A.Q. # blog_name will be displayed in your blog page -blog_nav_title: FAQ # your blog must have a title for it to be displayed in the nav bar -permalink: /blog/:year/:title/ - -# Pagination -pagination: - enabled: true - -# Giscus comments (RECOMMENDED) -# Follow instructions on https://giscus.app/ to setup for your repo to fill out the information below. -giscus: # -# repo: computorg/comutorg.github.io # / -# repo_id: MDEwOlJlcG9zaXRvcnk2MDAyNDM2NQ== -# category: Comments # name of the category under which discussions will be created -# category_id: DIC_kwDOA5PmLc4CTBt6 -# mapping: title # identify discussions by post title -# strict: 1 # use strict identification mode -# reactions_enabled: 1 # enable (1) or disable (0) emoji reactions -# input_position: bottom # whether to display input form below (bottom) or above (top) the comments -# theme: preferred_color_scheme # name of the color scheme (preferred works well with al-folio light/dark mode) -# emit_metadata: 0 -# lang: en - -# Disqus comments (DEPRECATED) -disqus_shortname: # -# https://help.disqus.com/en/articles/1717111-what-s-a-shortname - -# External sources. -# If you have blog posts published on medium.com or other exteranl sources, -# you can display them in your blog by adding a link to the RSS feed. -external_sources: -# - name: medium.com -# rss_url: https://medium.com/@al-folio/feed - -# ----------------------------------------------------------------------------- -# Collections -# ----------------------------------------------------------------------------- - -collections: - news: - defaults: - layout: post - output: true - permalink: /news/:path/ - projects: - output: true - permalink: /current/:path/ - -news_scrollable: false # adds a vertical scroll bar if there are more than 3 news items -news_limit: 5 # leave blank to include all the news in the `_news` folder - -# ----------------------------------------------------------------------------- -# Jekyll settings -# ----------------------------------------------------------------------------- - -# Markdown and syntax highlight -markdown: kramdown -highlighter: rouge -kramdown: - input: GFM - syntax_highlighter_opts: - css_class: 'highlight' - span: - line_numbers: false - block: - line_numbers: false - start_line: 1 - -# Includes & excludes -include: ['_pages'] -exclude: - - bin - - Gemfile - - Gemfile.lock - - vendor - - _pages_template -keep_files: - - CNAME - - .nojekyll - - .git - -# Plug-ins -plugins: - - jekyll-archives - - jekyll-diagrams - - jekyll-email-protect - - jekyll-feed - - jekyll-imagemagick - - jekyll-minifier - - jekyll-paginate-v2 - - jekyll/scholar - - jekyll-sitemap - - jekyll-link-attributes - - jekyll-twitter-plugin - - jemoji - -# Sitemap settings -defaults: - - scope: - path: "assets/**/*.*" - values: - sitemap: false - -# ----------------------------------------------------------------------------- -# Jekyll Minifier -# ----------------------------------------------------------------------------- - -jekyll-minifier: - exclude: ['robots.txt'] - uglifier_args: - harmony: true - -# ----------------------------------------------------------------------------- -# Jekyll Archives -# ----------------------------------------------------------------------------- - -jekyll-archives: - enabled: [year, tags, categories] # enables year, tag and category archives (remove if you need to disable one of them). - layouts: - year: archive-year - tag: archive-tag - category: archive-category - permalinks: - year: '/blog/:year/' - tag: '/blog/tag/:name/' - category: '/blog/category/:name/' - -display_tags: ['formatting', 'reproducibility', 'data', 'code'] # this tags will be displayed on the front page of your blog -# ----------------------------------------------------------------------------- -# Jekyll Scholar -# ----------------------------------------------------------------------------- - -scholar: - - style: acm-siggraph -# style: assets/bibliography/mystyle.csl - locale: en - - sort_by: year, month - order: descending, descending - - source: /_bibliography/ - bibliography: published.bib - bibliography_template: bib - # Note: if you have latex math in your bibtex, the latex filter - # preprocessing may conflict with MathJAX if the latter is enabled. - # See https://github.com/alshedivat/al-folio/issues/357. - bibtex_filters: [latex, smallcaps, superscript] - - replace_strings: true - join_strings: true - - use_raw_bibtex_entry: true - - details_dir: bibliography - details_layout: bibtex.html - details_link: Details - - query: "@*" - -# Filter out certain bibtex entry keywords used internally from the bib output -filtered_bibtex_keywords: [abbr, abstract, arxiv, bibtex_show, html, pdf, selected, supp, blog, code, poster, slides, website, preview, altmetric] - -# Maximum number of authors to be shown for each publication (more authors are visible on click) -max_author_limit: 3 # leave blank to always show all authors -more_authors_animation_delay: 10 # more authors are revealed on click using animation; smaller delay means faster animation - - -# ----------------------------------------------------------------------------- -# Jekyll Link Attributes -# ----------------------------------------------------------------------------- - -# These are the defaults -external_links: - enabled: true - rel: external nofollow noopener - target: _blank - exclude: - - -# ----------------------------------------------------------------------------- -# Responsive WebP Images -# ----------------------------------------------------------------------------- - -imagemagick: - enabled: true # enables responsive images for your site (recomended, see https://github.com/alshedivat/al-folio/issues/537) - widths: - - 480 - - 800 - - 1400 - input_directories: - - assets/img/ - input_formats: - - ".jpg" - - ".jpeg" - - ".png" - - ".tiff" - output_formats: - webp: "-resize 800x" - -# ----------------------------------------------------------------------------- -# Jekyll Diagrams -# ----------------------------------------------------------------------------- - -jekyll-diagrams: - # configuration, see https://github.com/zhustec/jekyll-diagrams. - # feel free to comment out this section if not using jekyll diagrams. - - -# ----------------------------------------------------------------------------- -# Optional Features -# ----------------------------------------------------------------------------- - -enable_google_analytics: false # enables google analytics -enable_panelbear_analytics: false # enables panelbear analytics -enable_google_verification: false # enables google site verification -enable_bing_verification: false # enables bing site verification -enable_masonry: true # enables automatic project cards arangement -enable_math: true # enables math typesetting (uses MathJax) -enable_tooltips: false # enables automatic tooltip links generated - # for each section titles on pages and posts -enable_darkmode: false # enables switching between light/dark modes -enable_navbar_social: false # enables displaying social links in the - # navbar on the about page -enable_project_categories: false # enables categorization of projects into -enable_medium_zoom: true # enables image zoom feature (as on medium.com) -enable_progressbar: true # enables a horizontal progress bar linked to the vertical scroll position - -# ----------------------------------------------------------------------------- -# Library versions -# ----------------------------------------------------------------------------- - -academicons: - version: "1.9.1" - integrity: "sha256-i1+4qU2G2860dGGIOJscdC30s9beBXjFfzjWLjBRsBg=" -bootstrap: - version: "4.6.1" - integrity: - css: "sha256-DF7Zhf293AJxJNTmh5zhoYYIMs2oXitRfBjY+9L//AY=" - js: "sha256-fgLAgv7fyCGopR/gBNq2iW3ZKIdqIcyshnUULC4vex8=" -fontawesome: - version: "5.15.4" - integrity: "sha256-mUZM63G8m73Mcidfrv5E+Y61y7a12O5mW4ezU3bxqW4=" -jquery: - version: "3.6.0" - integrity: "sha256-/xUj+3OJU5yExlq6GSYGSHk7tPXikynS7ogEvDej/m4=" -mathjax: - version: "3.2.0" -masonry: - version: "4.2.2" - integrity: "sha256-Nn1q/fx0H7SNLZMQ5Hw5JLaTRZp0yILA/FRexe19VdI=" -mdb: - version: "4.20.0" - integrity: - css: "sha256-jpjYvU3G3N6nrrBwXJoVEYI/0zw8htfFnhT9ljN3JJw=" - js: "sha256-NdbiivsvWt7VYCt6hYNT3h/th9vSTL4EDWeGs5SN3DA=" -medium_zoom: - version: "1.0.6" - integrity: "sha256-EdPgYcPk/IIrw7FYeuJQexva49pVRZNmt3LculEr7zM=" diff --git a/_data/coauthors.yml b/_data/coauthors.yml deleted file mode 100644 index 8ed52124..00000000 --- a/_data/coauthors.yml +++ /dev/null @@ -1,34 +0,0 @@ -"Adams": - - firstname: ["Edwin", "E.", "E. P.", "Edwin Plimpton"] - url: https://en.wikipedia.org/wiki/Edwin_Plimpton_Adams - -"Podolsky": - - firstname: ["Boris", "B.", "B. Y.", "Boris Yakovlevich"] - url: https://en.wikipedia.org/wiki/Boris_Podolsky - -"Rosen": - - firstname: ["Nathan", "N."] - url: https://en.wikipedia.org/wiki/Nathan_Rosen - -"Bach": - - firstname: ["Johann Sebastian", "J. S."] - url: https://en.wikipedia.org/wiki/Johann_Sebastian_Bach - - - firstname: ["Carl Philipp Emanuel", "C. P. E."] - url: https://en.wikipedia.org/wiki/Carl_Philipp_Emanuel_Bach - -"Przibram": - - firstname: ["Karl"] - url: https://link.springer.com/article/10.1007/s00016-019-00242-z - -"Schrödinger": - - firstname: ["Erwin"] - url: https://en.wikipedia.org/wiki/Erwin_Schr%C3%B6dinger - -"Lorentz": - - firstname: ["Hendrik Antoon"] - url: https://en.wikipedia.org/wiki/Hendrik_Lorentz - -"Planck": - - firstname: ["Max"] - url: https://en.wikipedia.org/wiki/Max_Planck diff --git a/_data/cv.yml b/_data/cv.yml deleted file mode 100644 index 5b115724..00000000 --- a/_data/cv.yml +++ /dev/null @@ -1,97 +0,0 @@ -- title: General Information - type: map - contents: - - name: Full Name - value: Albert Einstein - - name: Date of Birth - value: 14th March 1879 - - name: Languages - value: English, German - -- title: Education - type: time_table - contents: - - title: PhD - institution: University of Zurich, Zurich, Switzerland - year: 1905 - description: - - Description 1. - - Description 2. - - title: Description 3. - contents: - - Sub-description 1. - - Sub-description 2. - - title: Federal teaching diploma - institution: Eidgenössische Technische Hochschule, Zurich, Switzerland - year: 1900 - description: - - Description 1. - - Description 2. - -- title: Experience - type: time_table - contents: - - title: Professor of Theoretical Physics - institution: Institute for Advanced Study, Princeton University - year: 1933 - 1955 - description: - - Description 1. - - Description 2. - - title: Description 3. - contents: - - Sub-description 1. - - Sub-description 2. - - title: Visiting Professor - institution: California Institute of Technology, Pasadena, California, US - year: 1933 - description: - - Description 1. - - Description 2. - - - title: Director - institution: Kaiser Wilhelm Institute for Physics, Berlin, Germany. - year: 1917-1933 - - - title: Professor of Theoretical Physics - institution: Karl-Ferdinand University, Prague, Czechoslovakia - year: 1911 - 1917 - description: - - - title: Associate Professor of Theoretical Physics - institution: University of Zurich, Zurich, Switzerland - year: 1909 - 1911 - -- title: Open Source Projects - type: time_table - contents: - - title: al-folio - year: 2015-now - description: A beautiful, simple, clean, and responsive Jekyll theme for academics. - -- title: Honors and Awards - type: time_table - contents: - - year: 1921 - items: - - Nobel Prize in Physics - - Matteucci Medal - - year: 2029 - items: - - Max Planck Medal - -- title: Academic Interests - type: nested_list - contents: - - title: Topic 1. - items: - - Description 1. - - Description 2. - - title: Topic 2. - items: - - Description 1. - - Description 2. - -- title: Other Interests - type: list - contents: - - Hobbies: Hobby 1, Hobby 2, etc. diff --git a/_data/repositories.yml b/_data/repositories.yml deleted file mode 100644 index 9535793a..00000000 --- a/_data/repositories.yml +++ /dev/null @@ -1,9 +0,0 @@ -github_users: - - computorg - -github_repos: - - computorg/template-computo-R - - computorg/template-computo-python - - computorg/template-computo-julia - - computorg/computo-quarto-extension - - computorg/published-paper-tsne diff --git a/_data/venues.yml b/_data/venues.yml deleted file mode 100644 index 6c16ad5d..00000000 --- a/_data/venues.yml +++ /dev/null @@ -1,6 +0,0 @@ -"AJP": - url: https://aapt.scitation.org/journal/ajp - color: "#00369f" - -"PhysRev": - url: https://journals.aps.org/ diff --git a/_includes/cv/list.html b/_includes/cv/list.html deleted file mode 100644 index 75625859..00000000 --- a/_includes/cv/list.html +++ /dev/null @@ -1,5 +0,0 @@ -
    - {% for content in entry.contents %} -
  • {{ content }}
  • - {% endfor %} -
\ No newline at end of file diff --git a/_includes/cv/map.html b/_includes/cv/map.html deleted file mode 100644 index e0d1983e..00000000 --- a/_includes/cv/map.html +++ /dev/null @@ -1,8 +0,0 @@ - - {% for content in entry.contents %} - - - - - {% endfor %} -
{{ content.name }}{{ content.value }}
\ No newline at end of file diff --git a/_includes/cv/nested_list.html b/_includes/cv/nested_list.html deleted file mode 100644 index 4778aca0..00000000 --- a/_includes/cv/nested_list.html +++ /dev/null @@ -1,14 +0,0 @@ -
    - {% for content in entry.contents %} -
  • -
    {{ content.title }}
    - {% if content.items %} -
      - {% for subitem in content.items %} -
    • {{ subitem }}
    • - {% endfor %} -
    - {% endif %} -
  • - {% endfor %} -
\ No newline at end of file diff --git a/_includes/cv/time_table.html b/_includes/cv/time_table.html deleted file mode 100644 index 123b9d09..00000000 --- a/_includes/cv/time_table.html +++ /dev/null @@ -1,59 +0,0 @@ -
    - {% for content in entry.contents %} -
  • -
    - {% if content.year %} -
    - - {{ content.year }} - -
    - {% endif %} -
    - {% if content.title %} -
    {{content.title}}
    - {% endif %} - {% if content.institution %} -
    {{content.institution}}
    - {% endif %} - {% if content.description %} -
      - {% for item in content.description %} -
    • - {% if item.contents %} - {{ item.title }} -
        - {% for subitem in item.contents %} -
      • {{ subitem }}
      • - {% endfor %} -
      - {% else %} - {{ item }} - {% endif %} -
    • - {% endfor %} -
    - {% endif %} - {% if content.items %} -
      - {% for item in content.items %} -
    • - {% if item.contents %} - {{ item.title }} -
        - {% for subitem in item.contents %} -
      • {{ subitem }}
      • - {% endfor %} -
      - {% else %} - {{ item }} - {% endif %} -
    • - {% endfor %} -
    - {% endif %} -
    -
    -
  • - {% endfor %} -
\ No newline at end of file diff --git a/_includes/disqus.html b/_includes/disqus.html deleted file mode 100644 index 73fe9538..00000000 --- a/_includes/disqus.html +++ /dev/null @@ -1,13 +0,0 @@ -
- - -
diff --git a/_includes/figure.html b/_includes/figure.html deleted file mode 100644 index e67e8043..00000000 --- a/_includes/figure.html +++ /dev/null @@ -1,36 +0,0 @@ -{%- assign img_path = include.path | remove: ".jpg" | remove: ".jpeg" | remove: ".png" | remove: ".tiff" -%} - -
- - - {% if site.imagemagick.enabled %} - {% for i in site.imagemagick.widths -%} - - {% endfor -%} - {% endif %} - - - - - - - {%- if include.caption -%}
{{ include.caption }}
{%- endif %} - -
diff --git a/_includes/footer.html b/_includes/footer.html deleted file mode 100644 index 8e19bb17..00000000 --- a/_includes/footer.html +++ /dev/null @@ -1,28 +0,0 @@ -{% if site.footer_fixed %} -
-
- © Copyright {{ site.time | date: '%Y' }} {{ site.first_name }} {{ site.middle_name }} {{ site.last_name }}. - {{ site.footer_text }} - {% if site.impressum_path %} - Impressum. - {% endif %} - {% if site.last_updated %} - Last updated: {{ "now" | date: '%B %d, %Y' }}. - {% endif %} - ISSN 2824-7795, published by the French Statistical Society -
-
-{%- else -%} -
-
- © Copyright {{ site.time | date: '%Y' }} {{ site.first_name }} {{ site.middle_name }} {{ site.last_name }}. - {{ site.footer_text }} - {% if site.impressum_path %} - Impressum {% endif %} - {% if site.last_updated %} - Last updated: {{ "now" | date: '%B %d, %Y' }}. - {% endif %} - ISSN 2824-7795, published by the French Statistical Society -
-
-{% endif %} diff --git a/_includes/giscus.html b/_includes/giscus.html deleted file mode 100644 index bb504f64..00000000 --- a/_includes/giscus.html +++ /dev/null @@ -1,27 +0,0 @@ -
- - -
diff --git a/_includes/head.html b/_includes/head.html deleted file mode 100644 index 3796eb38..00000000 --- a/_includes/head.html +++ /dev/null @@ -1,31 +0,0 @@ - - {% include metadata.html %} - - - - - - - - - - - - - - - {% if site.icon.size < 3 %} - - {% elsif site.icon != blank %} - - {% endif %} - - - - - {% if site.enable_darkmode %} - - - - - {% endif %} diff --git a/_includes/header.html b/_includes/header.html deleted file mode 100644 index 389fd071..00000000 --- a/_includes/header.html +++ /dev/null @@ -1,105 +0,0 @@ - -
- - - - -{% if site.enable_progressbar %} - - -
- -
-
-{%- endif %} - -
diff --git a/_includes/metadata.html b/_includes/metadata.html deleted file mode 100644 index 417a57a8..00000000 --- a/_includes/metadata.html +++ /dev/null @@ -1,200 +0,0 @@ -{% if site.enable_google_verification or site.enable_bing_verification %} - - {% if site.enable_google_verification -%} - - {%- endif -%} - {% if site.enable_bing_verification -%} - - {%- endif -%} -{%- endif %} - - - - - - - {%- if site.title == "blank" -%} - {%- capture title -%}{{ site.first_name }} {{ site.middle_name }} {{ site.last_name }}{%- endcapture -%} - {%- else -%} - {%- capture title -%}{{ site.title }}{%- endcapture -%} - {%- endif -%} - {% if page.url == '/blog/index.html' %} - {{ site.blog_nav_title }} | {{ title }} - {%- elsif page.title != "blank" and page.url != "/" -%} - {%- if page.title == nil or page.title == "" -%} - {{ page.date | date: "%Y" }} | {{ title }} - {%- else -%} - {{ page.title }} | {{ title }} - {%- endif -%} - {%- else -%} - {{ title }} - {%- endif -%} - - - -{%- if page.keywords or site.keywords %} - -{%- endif %} - -{%- if site.serve_og_meta %} - - - - - - - - {% if page.og_image or site.og_image -%} - - {%- endif %} - - - - - - - {% if page.og_image or site.og_image -%} - - {%- endif %} - {% if site.twitter_username -%} - - - {%- endif %} -{%- endif %} - -{%- if site.serve_schema_org %} - - - {%- comment -%} Social links generator for "sameAs schema" {%- endcomment %} - {% assign sameaslinks = "" | split: "," %} - {%- if site.orcid_id -%} - {%- capture link -%}https://orcid.org/{{ site.orcid_id }}{%- endcapture -%} - {%- assign sameaslinks = sameaslinks | push: link -%} - {%- endif -%} - {%- if site.scholar_userid -%} - {%- capture link -%}https://scholar.google.com/citations?user={{ site.scholar_userid }}{%- endcapture -%} - {%- assign sameaslinks = sameaslinks | push: link -%} - {%- endif -%} - {%- if site.semanticscholar_id -%} - {%- capture link -%}https://www.semanticscholar.org/author/{{ site.semanticscholar_id }}{%- endcapture -%} - {%- assign sameaslinks = sameaslinks | push: link -%} - {%- endif -%} - {%- if site.publons_id -%} - {%- capture link -%}https://publons.com/a/{{ site.publons_id }}/{%- endcapture -%} - {%- assign sameaslinks = sameaslinks | push: link -%} - {%- endif -%} - {%- if site.research_gate_profile -%} - {%- capture link -%}https://www.researchgate.net/profile/{{site.research_gate_profile}}{%- endcapture -%} - {%- assign sameaslinks = sameaslinks | push: link -%} - {%- endif -%} - {%- if site.github_username -%} - {%- capture link -%}https://github.com/{{ site.github_username }}{%- endcapture -%} - {%- assign sameaslinks = sameaslinks | push: link -%} - {%- endif -%} - {%- if site.telegram_username -%} - {%- capture link -%}https://telegram.me/{{ site.telegram_username }}{%- endcapture -%} - {%- assign sameaslinks = sameaslinks | push: link -%} - {%- endif -%} - {%- if site.linkedin_username -%} - {%- capture link -%}https://www.linkedin.com/in/{{ site.linkedin_username }}{%- endcapture -%} - {%- assign sameaslinks = sameaslinks | push: link -%} - {%- endif -%} - {%- if site.twitter_username -%} - {%- capture link -%}https://twitter.com/{{ site.twitter_username }}{%- endcapture -%} - {%- assign sameaslinks = sameaslinks | push: link -%} - {%- endif -%} - {%- if site.medium_username -%} - {%- capture link -%}https://medium.com/@{{ site.medium_username }}{%- endcapture -%} - {%- assign sameaslinks = sameaslinks | push: link -%} - {%- endif -%} - {%- if site.quora_username -%} - {%- capture link -%}https://www.quora.com/profile/{{ site.quora_username }}{%- endcapture -%} - {%- assign sameaslinks = sameaslinks | push: link -%} - {%- endif -%} - {%- if site.blogger_url -%} - {%- capture link -%}{{ site.blogger_url }}{%- endcapture -%} - {%- assign sameaslinks = sameaslinks | push: link -%} - {%- endif -%} - {%- if site.work_url -%} - {%- capture link -%}{{ site.work_url }}{%- endcapture -%} - {%- assign sameaslinks = sameaslinks | push: link -%} - {%- endif -%} - {%- if site.wikidata_id -%} - {%- capture link -%}https://www.wikidata.org/wiki/{{ site.wikidata_id }}{%- endcapture -%} - {%- assign sameaslinks = sameaslinks | push: link -%} - {%- endif -%} - {%- if site.strava_userid -%} - {%- capture link -%}https://www.strava.com/athletes/{{ site.strava_userid }}{%- endcapture -%} - {%- assign sameaslinks = sameaslinks | push: link -%} - {%- endif -%} - {%- if site.keybase_username -%} - {%- capture link -%}https://keybase.io/{{ site.keybase_username }}{%- endcapture -%} - {%- assign sameaslinks = sameaslinks | push: link -%} - {%- endif -%} - {%- if site.gitlab_username -%} - {%- capture link -%}https://gitlab.com/{{ site.gitlab_username }}{%- endcapture -%} - {%- assign sameaslinks = sameaslinks | push: link -%} - {%- endif -%} - {%- if site.dblp_url -%} - {%- capture link -%}{{ site.dblp_url }}{%- endcapture -%} - {%- assign sameaslinks = sameaslinks | push: link -%} - {%- endif -%} - {%- if site.stackoverflow_id -%} - {%- capture link -%}https://stackoverflow.com/users/{{ site.stackoverflow_id }}{%- endcapture -%} - {%- assign sameaslinks = sameaslinks | push: link -%} - {%- endif -%} - {%- if site.kaggle_id -%} - {%- capture link -%}https://www.kaggle.com/{{ site.kaggle_id }}{%- endcapture -%} - {%- assign sameaslinks = sameaslinks | push: link -%} - {%- endif -%} - {%- if site.lastfm_id -%} - {%- capture link -%}https://www.last.fm/user/{{ site.lastfm_id }}{%- endcapture -%} - {%- assign sameaslinks = sameaslinks | push: link -%} - {%- endif -%} - {%- if site.spotify_id -%} - {%- capture link -%}https://open.spotify.com/user/{{ site.spotify_id }}{%- endcapture -%} - {%- assign sameaslinks = sameaslinks | push: link -%} - {%- endif -%} - {%- if site.pinterest_id -%} - {%- capture link -%}https://www.pinterest.com/{{ site.pinterest_id }}{%- endcapture -%} - {%- assign sameaslinks = sameaslinks | push: link -%} - {%- endif -%} - {%- if site.unsplash_id -%} - {%- capture link -%}https://unsplash.com/@{{ site.unsplash_id }}{%- endcapture -%} - {%- assign sameaslinks = sameaslinks | push: link -%} - {%- endif -%} - {%- if site.instagram_id -%} - {%- capture link -%}https://instagram.com/{{ site.instagram_id }}{%- endcapture -%} - {%- assign sameaslinks = sameaslinks | push: link -%} - {%- endif -%} - {%- if site.facebook_id -%} - {%- capture link -%}https://facebook.com/{{ site.facebook_id }}{%- endcapture -%} - {%- assign sameaslinks = sameaslinks | push: link -%} - {%- endif -%} - {%- if site.discord_id -%} - {%- capture link -%}https://discord.com/users/{{ site.discord_id }}{%- endcapture -%} - {%- assign sameaslinks = sameaslinks | push: link -%} - {%- endif -%} - {%- if sameaslinks != blank -%} - {%- assign sameaslinks = sameaslinks | split: "" -%} - {%- endif -%} - - -{%- endif %} diff --git a/_includes/news.html b/_includes/news.html deleted file mode 100644 index 307e532d..00000000 --- a/_includes/news.html +++ /dev/null @@ -1,31 +0,0 @@ - -
-

news

- {% if site.news != blank -%} - {%- assign news_size = site.news | size -%} -
3 %}style="max-height: 10vw"{% endif %}> - - {%- assign news = site.news | reverse -%} - {% if site.news_limit %} - {% assign news_limit = site.news_limit %} - {% else %} - {% assign news_limit = news_size %} - {% endif %} - {% for item in news limit: news_limit %} - - - - - {%- endfor %} -
{{ item.date | date: "%b %-d, %Y" }} - {% if item.inline -%} - {{ item.content | remove: '

' | remove: '

' | emojify }} - {%- else -%} - {{ item.title }} - {%- endif %} -
-
- {%- else -%} -

No news so far...

- {%- endif %} -
diff --git a/_includes/pagination.html b/_includes/pagination.html deleted file mode 100644 index 4b8d27e3..00000000 --- a/_includes/pagination.html +++ /dev/null @@ -1,17 +0,0 @@ -{%- if paginator.total_pages > 1 -%} - -{%- endif -%} diff --git a/_includes/projects.html b/_includes/projects.html deleted file mode 100644 index 503146e2..00000000 --- a/_includes/projects.html +++ /dev/null @@ -1,36 +0,0 @@ - -
- \ No newline at end of file diff --git a/_includes/projects_horizontal.html b/_includes/projects_horizontal.html deleted file mode 100644 index ddf74058..00000000 --- a/_includes/projects_horizontal.html +++ /dev/null @@ -1,40 +0,0 @@ -
- {%- if project.redirect -%} - - {%- else -%} - - {%- endif -%} - diff --git a/_includes/repository/repo.html b/_includes/repository/repo.html deleted file mode 100644 index a0881c0b..00000000 --- a/_includes/repository/repo.html +++ /dev/null @@ -1,14 +0,0 @@ -{% assign repo_url = include.repository | split: '/' %} - -{% if site.data.repositories.github_users contains repo_url.first %} - {% assign show_owner = false %} -{% else %} - {% assign show_owner = true %} -{% endif %} - - diff --git a/_includes/repository/repo_user.html b/_includes/repository/repo_user.html deleted file mode 100644 index ae06a058..00000000 --- a/_includes/repository/repo_user.html +++ /dev/null @@ -1,6 +0,0 @@ - diff --git a/_includes/scripts/analytics.html b/_includes/scripts/analytics.html deleted file mode 100644 index db2aeef9..00000000 --- a/_includes/scripts/analytics.html +++ /dev/null @@ -1,18 +0,0 @@ -{%- if site.enable_google_analytics -%} - - - -{%- endif -%} -{%- if site.enable_panelbear_analytics -%} - - - -{%- endif -%} diff --git a/_includes/scripts/bootstrap.html b/_includes/scripts/bootstrap.html deleted file mode 100644 index 1c213650..00000000 --- a/_includes/scripts/bootstrap.html +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/_includes/scripts/jquery.html b/_includes/scripts/jquery.html deleted file mode 100644 index f84a2f22..00000000 --- a/_includes/scripts/jquery.html +++ /dev/null @@ -1,2 +0,0 @@ - - diff --git a/_includes/scripts/masonry.html b/_includes/scripts/masonry.html deleted file mode 100644 index 804389d3..00000000 --- a/_includes/scripts/masonry.html +++ /dev/null @@ -1,6 +0,0 @@ - {%- if site.enable_masonry -%} - - - - - {%- endif -%} diff --git a/_includes/scripts/mathjax.html b/_includes/scripts/mathjax.html deleted file mode 100644 index c55ec056..00000000 --- a/_includes/scripts/mathjax.html +++ /dev/null @@ -1,12 +0,0 @@ - {%- if site.enable_math -%} - - - - - {%- endif %} diff --git a/_includes/scripts/misc.html b/_includes/scripts/misc.html deleted file mode 100644 index 08ba49f0..00000000 --- a/_includes/scripts/misc.html +++ /dev/null @@ -1,14 +0,0 @@ -{% if site.enable_tooltips %} - - -{%- endif %} -{%- if site.enable_medium_zoom %} - - - -{%- endif -%} - - - diff --git a/_includes/scripts/progressBar.html b/_includes/scripts/progressBar.html deleted file mode 100644 index 88bb73cd..00000000 --- a/_includes/scripts/progressBar.html +++ /dev/null @@ -1,80 +0,0 @@ -{% if site.enable_progressbar %} - - - - -{%- endif %} diff --git a/_includes/selected_papers.html b/_includes/selected_papers.html deleted file mode 100644 index 61457dbc..00000000 --- a/_includes/selected_papers.html +++ /dev/null @@ -1,5 +0,0 @@ - -
-

selected publications

- {% bibliography -f papers -q @*[selected=true]* %} -
diff --git a/_includes/social.html b/_includes/social.html deleted file mode 100644 index 38b5d3bd..00000000 --- a/_includes/social.html +++ /dev/null @@ -1,96 +0,0 @@ - {%- if site.email -%} - - {% endif %} - {%- if site.telegram_username -%} - - {% endif %} - {%- if site.whatsapp_number -%} - - {% endif %} - {%- if site.orcid_id -%} - - {% endif %} - {%- if site.scholar_userid -%} - - {% endif %} - {%- if site.semanticscholar_id -%} - - {% endif %} - {%- if site.publons_id -%} - - {% endif %} - {%- if site.research_gate_profile -%} - - {% endif %} - {%- if site.github_username -%} - - {% endif %} - {%- if site.linkedin_username -%} - - {% endif %} - {%- if site.twitter_username -%} - - {% endif %} - {%- if site.mastodon_username -%} - - {% endif %} - {%- if site.medium_username -%} - - {% endif %} - {%- if site.quora_username -%} - - {% endif %} - {%- if site.blogger_url -%} - - {% endif %} - {%- if site.work_url -%} - - {% endif %} - {%- if site.wikidata_id -%} - - {% endif %} - {%- if site.strava_userid -%} - - {% endif %} - {%- if site.keybase_username -%} - - {% endif %} - {%- if site.gitlab_username -%} - - {% endif %} - {%- if site.dblp_url -%} - - {% endif %} - {%- if site.stackoverflow_id -%} - - {% endif %} - {%- if site.kaggle_id -%} - - {% endif %} - {%- if site.lastfm_id -%} - - {% endif %} - {%- if site.spotify_id -%} - - {% endif %} - {%- if site.pinterest_id -%} - - {% endif %} - {%- if site.unsplash_id -%} - - {% endif %} - {%- if site.instagram_id -%} - - {% endif %} - {%- if site.facebook_id -%} - - {% endif %} - {%- if site.youtube_id -%} - - {% endif %} - {%- if site.discord_id -%} - - {% endif %} - {%- if site.rss_icon -%} - - {% endif %} diff --git a/_layouts/about.html b/_layouts/about.html deleted file mode 100644 index 06135abf..00000000 --- a/_layouts/about.html +++ /dev/null @@ -1,66 +0,0 @@ ---- -layout: default ---- - - -
-
-
- Computo -
-

{{ page.description }}

-
- -
- {% if page.profile -%} -
- {%- if page.profile.image %} - {%- assign profile_image_path = page.profile.image | prepend: 'assets/img/' -%} - - {% if page.profile.image_circular %} - {%- assign profile_image_class = "img-fluid z-depth-1 rounded-circle" -%} - {% else %} - {%- assign profile_image_class = "img-fluid z-depth-1 rounded" -%} - {% endif %} - - {% include figure.html - path=profile_image_path - class=profile_image_class - alt=page.profile.image -%} - {% endif -%} - {%- if page.profile.address %} -
- {{ page.profile.address }} -
- {%- endif %} -
- {%- endif %} - -
- {{ content }} -
- - {% if page.news -%} - - {%- include news.html %} - {%- endif %} - {% if page.selected_papers -%} - - {%- include selected_papers.html %} - {%- endif %} - {%- if page.social %} - - - {%- endif %} -
- -
diff --git a/_layouts/archive-category.html b/_layouts/archive-category.html deleted file mode 100644 index 79aad74f..00000000 --- a/_layouts/archive-category.html +++ /dev/null @@ -1,27 +0,0 @@ ---- -layout: default ---- - -
- -
-

{{ page.title }}

-

an archive of posts in this category

-
- -
-
- - {% for post in page.posts %} - - - - - {% endfor %} -
{{ post.date | date: "%b %-d, %Y" }} - {{ post.title }} -
-
-
- -
diff --git a/_layouts/archive-tag.html b/_layouts/archive-tag.html deleted file mode 100644 index 66abaebb..00000000 --- a/_layouts/archive-tag.html +++ /dev/null @@ -1,27 +0,0 @@ ---- -layout: default ---- - -
- -
-

{{ page.title }}

-

an archive of posts with this tag

-
- -
-
- - {% for post in page.posts %} - - - - - {% endfor %} -
{{ post.date | date: "%b %-d, %Y" }} - {{ post.title }} -
-
-
- -
diff --git a/_layouts/archive-year.html b/_layouts/archive-year.html deleted file mode 100644 index 8af1d29b..00000000 --- a/_layouts/archive-year.html +++ /dev/null @@ -1,27 +0,0 @@ ---- -layout: default ---- - -
- -
-

{{ page.date | date: "%Y" }}

-

an archive of posts from this year

-
- -
-
- - {% for post in page.posts %} - - - - - {% endfor %} -
{{ post.date | date: "%b %-d, %Y" }} - {{ post.title }} -
-
-
- -
diff --git a/_layouts/bib.html b/_layouts/bib.html deleted file mode 100644 index fa96c510..00000000 --- a/_layouts/bib.html +++ /dev/null @@ -1,74 +0,0 @@ ---- ---- - -
-
- {% if entry.preprint %} -   - {% else %} - - {% endif %} -
- -
- -
{{entry.title}}
-
- {% for author in entry.author_array %} - {% if forloop.length == 1 %} - {{author.first}} {{author.last}} - {% else %} - {% unless forloop.last %} - {{author.first}} {{author.last}}, - {% else %} - and {{author.first}} {{author.last}} - {% endunless %} - {% endif %} - {% endfor %} -
- -
- {{entry.journal}}, {{entry.year}}. -
- - - - - {% if entry.abstract %} - - {% endif %} - -
-
\ No newline at end of file diff --git a/_layouts/cv.html b/_layouts/cv.html deleted file mode 100644 index bb3d85af..00000000 --- a/_layouts/cv.html +++ /dev/null @@ -1,35 +0,0 @@ ---- -layout: default ---- - -
- -
-

{{ page.title }} {% if page.cv_pdf %}{% endif %}

-

{{ page.description }}

-
- -
-
- {% for entry in site.data.cv %} -
-

{{ entry.title }}

-
- {% if entry.type == "list" %} - {% include cv/list.html %} - {% elsif entry.type == "map" %} - {% include cv/map.html %} - {% elsif entry.type == "nested_list" %} - {% include cv/nested_list.html %} - {% elsif entry.type == "time_table" %} - {% include cv/time_table.html %} - {% else %} - {{ entry.contents }} - {% endif %} -
-
- {% endfor %} -
-
- -
diff --git a/_layouts/default.html b/_layouts/default.html deleted file mode 100644 index 2887107c..00000000 --- a/_layouts/default.html +++ /dev/null @@ -1,35 +0,0 @@ - - - - - - {%- if page.redirect -%} - - {%- endif -%} - {% include head.html %} - - - - - - - {%- include header.html %} - - -
- {{ content }} -
- - - {%- include footer.html %} - - - {% include scripts/jquery.html %} - {% include scripts/bootstrap.html %} - {% include scripts/masonry.html %} - {% include scripts/misc.html %} - {% include scripts/mathjax.html %} - {% include scripts/analytics.html %} - {% include scripts/progressBar.html %} - - diff --git a/_layouts/distill.html b/_layouts/distill.html deleted file mode 100644 index bc323ce8..00000000 --- a/_layouts/distill.html +++ /dev/null @@ -1,117 +0,0 @@ - - - - - {%- include head.html %} - - {% include scripts/jquery.html %} - {% include scripts/mathjax.html %} - - - - - {% if page._styles %} - - - {%- endif %} - - - - - - - - - - {%- include header.html %} - - -
- - -

{{ page.title }}

-

{{ page.description }}

-
- - - - - {% if page.toc -%} - - - - {%- endif %} - - {{ content }} - - - - - - - - - - {%- if site.disqus_shortname and page.disqus_comments -%} - {% include disqus.html %} - {%- endif %} - {%- if site.giscus.repo and page.giscus_comments -%} - {% include giscus.html %} - {%- endif -%} - -
- - - {%- include footer.html %} - - {% include scripts/bootstrap.html %} - {% include scripts/analytics.html %} - {% include scripts/progressBar.html %} - - diff --git a/_layouts/none.html b/_layouts/none.html deleted file mode 100644 index b92f6522..00000000 --- a/_layouts/none.html +++ /dev/null @@ -1 +0,0 @@ -{{content}} diff --git a/_layouts/page.html b/_layouts/page.html deleted file mode 100644 index 9e34f406..00000000 --- a/_layouts/page.html +++ /dev/null @@ -1,16 +0,0 @@ ---- -layout: default ---- - -
- -
-

{{ page.title }}

-

{{ page.description }}

-
- -
- {{ content }} -
- -
diff --git a/_layouts/post.html b/_layouts/post.html deleted file mode 100644 index ad513ff4..00000000 --- a/_layouts/post.html +++ /dev/null @@ -1,53 +0,0 @@ ---- -layout: default ---- - -{%- assign year = page.date | date: "%Y" -%} -{%- assign tags = page.tags | join: "" -%} -{%- assign categories = page.categories | join: "" -%} - -{% if page._styles %} - - -{% endif %} - -
- -
-

{{ page.title }}

- - -
- -
- {{ content }} -
- - {%- if site.disqus_shortname and page.disqus_comments -%} - {% include disqus.html %} - {%- endif %} - {%- if site.giscus.repo and page.giscus_comments -%} - {% include giscus.html %} - {%- endif -%} - -
diff --git a/_news/announcement_2.md b/_news/announcement_2.md deleted file mode 100644 index dbd4b4d4..00000000 --- a/_news/announcement_2.md +++ /dev/null @@ -1,31 +0,0 @@ ---- -layout: post -title: A long announcement with details -date: 2015-11-07 16:11:00-0400 -inline: false ---- - -Announcements and news can be much longer than just quick inline posts. In fact, they can have all the features available for the standard blog posts. See below. - -*** - -Jean shorts raw denim Vice normcore, art party High Life PBR skateboard stumptown vinyl kitsch. Four loko meh 8-bit, tousled banh mi tilde forage Schlitz dreamcatcher twee 3 wolf moon. Chambray asymmetrical paleo salvia, sartorial umami four loko master cleanse drinking vinegar brunch. Pinterest DIY authentic Schlitz, hoodie Intelligentsia butcher trust fund brunch shabby chic Kickstarter forage flexitarian. Direct trade cold-pressed meggings stumptown plaid, pop-up taxidermy. Hoodie XOXO fingerstache scenester Echo Park. Plaid ugh Wes Anderson, freegan pug selvage fanny pack leggings pickled food truck DIY irony Banksy. - -#### Hipster list -
    -
  • brunch
  • -
  • fixie
  • -
  • raybans
  • -
  • messenger bag
  • -
- -Hoodie Thundercats retro, tote bag 8-bit Godard craft beer gastropub. Truffaut Tumblr taxidermy, raw denim Kickstarter sartorial dreamcatcher. Quinoa chambray slow-carb salvia readymade, bicycle rights 90's yr typewriter selfies letterpress cardigan vegan. - -*** - -Pug heirloom High Life vinyl swag, single-origin coffee four dollar toast taxidermy reprehenderit fap distillery master cleanse locavore. Est anim sapiente leggings Brooklyn ea. Thundercats locavore excepteur veniam eiusmod. Raw denim Truffaut Schlitz, migas sapiente Portland VHS twee Bushwick Marfa typewriter retro id keytar. - -> We do not grow absolutely, chronologically. We grow sometimes in one dimension, and not in another, unevenly. We grow partially. We are relative. We are mature in one realm, childish in another. -> —Anais Nin - -Fap aliqua qui, scenester pug Echo Park polaroid irony shabby chic ex cardigan church-key Odd Future accusamus. Blog stumptown sartorial squid, gastropub duis aesthetic Truffaut vero. Pinterest tilde twee, odio mumblecore jean shorts lumbersexual. diff --git "a/_news/announcement_first_publ\303\256shed_paper.md" "b/_news/announcement_first_publ\303\256shed_paper.md" deleted file mode 100644 index f5c97bfb..00000000 --- "a/_news/announcement_first_publ\303\256shed_paper.md" +++ /dev/null @@ -1,9 +0,0 @@ ---- -layout: post -date: 2022-04-03 07:59:00-0400 -inline: true ---- - -Computo is proud to announce its [first published paper, by Olivier Gimenez et al.!](https://computo.sfds.asso.fr/publications/) :sparkles: - -Thanks to them and congratulations! diff --git a/_news/announcement_open.md b/_news/announcement_open.md deleted file mode 100644 index 0ba445f0..00000000 --- a/_news/announcement_open.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -layout: post -date: 2021-10-28 07:59:00-0400 -inline: true ---- - -[Paper submission](submit) is now officially opened! 📢 - diff --git a/_news/announcement_publication_202301.md b/_news/announcement_publication_202301.md deleted file mode 100644 index 092a5dd1..00000000 --- a/_news/announcement_publication_202301.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -layout: post -date: 2023-01-11 07:59:00-0400 -inline: true ---- - -Computo is happy to announce a [newly published paper, by Alexis Boulin!](https://computo.sfds.asso.fr/publications/) :sparkles: - -Congratulations! diff --git a/_news/announcement_publication_202302.md b/_news/announcement_publication_202302.md deleted file mode 100644 index 8ba932ee..00000000 --- a/_news/announcement_publication_202302.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -layout: post -date: 2023-02-16 07:59:00-0400 -inline: true ---- - -Another [published paper, by Mathis Chagneux and co-authors!](https://computo.sfds.asso.fr/publications/), a nice academic collaboration with Surfrider Europe for detecting macrolitter on riverbanks :sparkles: diff --git a/_news/announcement_publication_202307.md b/_news/announcement_publication_202307.md deleted file mode 100644 index 0ded1cb5..00000000 --- a/_news/announcement_publication_202307.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -layout: post -date: 2023-07-11 07:59:00-0400 -inline: true ---- - -[A new article was published, by Edmond Sanou, Geneviève Robin and Christophe Ambroise](https://computo.sfds.asso.fr/publications/), on a multiscale version of Graphical-Lasso. diff --git a/_news/announcement_publication_202311.md b/_news/announcement_publication_202311.md deleted file mode 100644 index af6e1403..00000000 --- a/_news/announcement_publication_202311.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -layout: post -date: 2023-11-21 07:59:00-0400 -inline: true ---- - -[Paper published by Maud Delattre and Estelle Kuhn](https://computo.sfds.asso.fr/published-202311-delattre-fim/), on computing an empirical Fisher information matrix estimate in latent variable models through stochastic approximation. diff --git a/_news/announcement_publication_202312.md b/_news/announcement_publication_202312.md deleted file mode 100644 index 3cfe55c7..00000000 --- a/_news/announcement_publication_202312.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -layout: post -date: 2023-12-14 07:59:00-0400 -inline: true ---- - -[Paper published by Alice Cleynen, Louis Raynal, and Jean-Michel -Marin](https://computo.sfds.asso.fr/published-202312-cleynen-local/), on -local tree methods for classification. diff --git a/_news/announcement_publication_202401.md b/_news/announcement_publication_202401.md deleted file mode 100644 index 175addb8..00000000 --- a/_news/announcement_publication_202401.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -layout: post -date: 2024-01-09 07:59:00-0400 -inline: true ---- - -[Paper published by Armand Favrot and David Makowski](https://computo.sfds.asso.fr/published-202312-favrot-hierarchical/), on MCMC estimation in a hierarchical model to evaluate pest treatments from prevalence and intensity data. diff --git a/_news/announcement_publication_202402.md b/_news/announcement_publication_202402.md deleted file mode 100644 index 3b8d9d0c..00000000 --- a/_news/announcement_publication_202402.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -layout: post -date: 2024-02-26 07:59:00-0400 -inline: true ---- - -A new article was published, by Hamza Adrat and Laurent Decreusefond: [Point Process Discrimination According to Repulsion](http://computo.sfds.asso.fr/published_202401_adrat_repulsion/). diff --git a/_news/announcement_publication_202403.md b/_news/announcement_publication_202403.md deleted file mode 100644 index 506a06ee..00000000 --- a/_news/announcement_publication_202403.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -layout: post -date: 2024-04-04 07:59:00-0400 -inline: true ---- - -A new article was published, by Maxime El Masri, Jérôme Morio, and Florian -Simatos: [Optimal Projection for Parametric Importance Sampling in High -Dimensions]( https://computo.sfds.asso.fr/published-202402-elmasri-optimal/) diff --git a/_news/announcement_publication_202404.md b/_news/announcement_publication_202404.md deleted file mode 100644 index 6a32bcbd..00000000 --- a/_news/announcement_publication_202404.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -layout: post -date: 2024-05-15 07:59:00-0400 -inline: true ---- - -A new article was published, by - Tanguy Lefort, Benjamin Charlier, Alexis Joly, Joseph Salmon: [Peerannot: classification for crowdsourced image datasets with Python]( https://computo.sfds.asso.fr/published-202402-lefort-peerannot/) diff --git a/_news/announcement_start.md b/_news/announcement_start.md deleted file mode 100644 index 86afda7d..00000000 --- a/_news/announcement_start.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -layout: post -date: 2021-03-11 07:59:00-0400 -inline: true ---- - -New version of the website relying on Jekyll, Jekyll-scholar, aI-folio emoji! :sparkles: - diff --git a/_news/extended_team.md b/_news/extended_team.md deleted file mode 100644 index 602f7cc5..00000000 --- a/_news/extended_team.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -layout: post -date: 2022-07-01 07:59:00-0400 -inline: true ---- - -We are very pleased to welcome -[Mathurin](https://mathurinm.github.io/), -[François-David](https://fradav.github.io/) and -[Ghislain](https://gdurif.perso.math.cnrs.fr/) [in the team](board) 👨‍💻 ! -Thanks for their support. - diff --git a/_news/extended_team_mp.md b/_news/extended_team_mp.md deleted file mode 100644 index b02e2740..00000000 --- a/_news/extended_team_mp.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -layout: post -date: 2023-06-21 07:59:00-0400 -inline: true ---- - -Delighted to welcome -[Marie-Pierre](httpshttps://marieetienne.github.io/) [in the team](board) 👨‍💻 ! - diff --git a/_news/how_doesit_work.md b/_news/how_doesit_work.md deleted file mode 100644 index 6283e65c..00000000 --- a/_news/how_doesit_work.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -layout: post -date: 2021-05-25 07:59:00-0400 -inline: true ---- - -[Check out these nice diagrams :sparkles: describing how Computo works -on the author, editor and reviewer -sides]({{ site.baseurl }}/blog/2021/submission-process/). diff --git a/_news/moving_openreview.md b/_news/moving_openreview.md deleted file mode 100644 index 41fde908..00000000 --- a/_news/moving_openreview.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -layout: post -date: 2023-06-21 07:59:00-0400 -inline: true ---- - -We're changing our peer-review platform 📰 to a fully free, open and communty-based solution with [OpenReview](https://openreview.net/group?id=Computo). Don't hesitate to send us feedback or contact us if you have any questions. - diff --git a/_news/new_templates.md b/_news/new_templates.md deleted file mode 100644 index 00820015..00000000 --- a/_news/new_templates.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -layout: post -date: 2023-02-08 07:59:00-0400 -inline: true ---- - -We have [updated our templates for submitting to Computo](https://computo.sfds.asso.fr/submit/): all based on Quarto, but now with more specific and hoefully friendly set-ups for R, Python or Julia users. diff --git a/_news/sfds_2022.md b/_news/sfds_2022.md deleted file mode 100644 index 452b7273..00000000 --- a/_news/sfds_2022.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -layout: post -date: 2022-06-14 07:59:00-0400 -inline: true ---- - -The 53rd ["Journées de Statistique"](https://jds22.sciencesconf.org/) -take place in Lyon, where Computo is presented. We will also be -searching for volunteers for reviewing the submission. Please [fill -this form](https://forms.gle/P9iYJANuNM4WTVHDA). - diff --git a/_news/toronto_workshop_reproducibility.md b/_news/toronto_workshop_reproducibility.md deleted file mode 100644 index a5d7957c..00000000 --- a/_news/toronto_workshop_reproducibility.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -layout: post -date: 2022-02-24 07:59:00-0400 -inline: true ---- - -Computo has been presented at the [2nd Toronto Workshop on reproducibility](https://canssiontario.utoronto.ca/toronto_workshop_on_reproducibility_2022/) ! -🤩 [slides are online here](http://computo.sfds.asso.fr/comm/) - - - diff --git a/_news/workshop_reproducibility.md b/_news/workshop_reproducibility.md deleted file mode 100644 index 5cd79643..00000000 --- a/_news/workshop_reproducibility.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -layout: post -date: 2021-06-23 07:59:00-0400 -inline: true ---- - -We are presenting Computo at a [mini-workshop on reproducible -research](https://mtp-rr2021.sciencesconf.org/) in Montpellier 🗓. Very -interesting talks to come besides ours - diff --git a/_pages/about.md b/_pages/about.md deleted file mode 100644 index c604d56a..00000000 --- a/_pages/about.md +++ /dev/null @@ -1,79 +0,0 @@ ---- -title: "About" -layout: page -permalink: /about -order: 1 -nav: yes ---- - ---- - -## Aims and scope - -Computo has been created in the context of a reproducibility crisis in -science, which calls for higher standards in the publication of -scientific results. Computo aims at promoting -computational/algorithmic contributions in statistics and machine -learning (ML) that provide insight into which models or methods are the -most appropriate to address a specific scientific question. - -The journal welcomes the following types of contributions: - -- New **methods** with original stats/ML developments, or numerical - studies that illustrate theoretical results in stats/ML; -- **Case studies** or **surveys** on stats/ML methods to address a specific - (type of) question in data analysis, neutral comparison studies that - provide insight into when, how, and why the compared methods perform - well or less well; -- **Software/tutorial papers** to present implementations of stats/ML algorithms or - to feature the use of a package/toolbox. For such papers we expect not only the description of an existing implementation but also the study of a concrete use case. If applicable, a comparison to related works and appropriate benchmarking are also expected. - -
-
Pre-submission enquiries
-
-

Prospective authors willing to know whether their contribution - falls into the scope of Computo are encouraged to contact the - editor at computo@sfds.asso.fr. Please make sure to include the title and abstract of your work in your pre-submission enquiry.

-
-
- -## An open access journal with reproducible contributions - -Computo is free for readers and authors. -It is an open access journal which means that all content is -freely available without charge to the user or his/her institution. -Users are allowed to read, download, copy, distribute, print, -search, or link to the full texts of the articles, or use -them for any other lawful purpose, without asking prior permission -from the publisher or the author. This is in accordance with the -Budapest Open Access Initiative (BOAI) definition of open access. - -The reproducibility of numerical results is a necessary condition for -publication in Computo. In particular, submissions must include all -necessary data (e.g. via Zenodo repositories) and code. For -contributions featuring the implementation of methods/algorithms, the -quality of the provided code is assessed during the review process. -We accept contributions in the form of notebooks (e.g. Rmarkdown, or -Jupyter). - -The reviews are open, i.e. visible to any reader after acceptance of -the contribution. Reviewers may choose to remain anonymous or not. - -## Contact -Enquiries can be sent to the Chief Editor, Julien Chiquet, through computo@sfds.asso.fr. - -## Thanks - -We rely on [Jekyll](https://jekyllrb.com/), -[BibTeX](http://www.bibtex.org/), the -[aI-folio](https://github.com/alshedivat/al-folio) Jekyll theme, -[Rmarkdown](https://rmarkdown.rstudio.com/), -[Jupyter-book](https://jupyterbook.org/) and we drew our inspiration -from [Rescience-C](https://rescience.github.io/) and -[distill.pub](https://distill.pub/) among others. - -## About the logo - -Computo's logo has been designed by [Loïc Schwaller](https://loack.me/). - -concept diff --git a/_pages/board.md b/_pages/board.md deleted file mode 100644 index 1a7a1089..00000000 --- a/_pages/board.md +++ /dev/null @@ -1,123 +0,0 @@ ---- -layout: page -permalink: /board/ -title: Staff -nav_order: 6 -description: People making Computo -nav: true ---- - ---- - -
-
- -

Editors

- - - -

Technical Support

- - - - - -
-
diff --git a/_pages/home.md b/_pages/home.md deleted file mode 100644 index 08cedfcd..00000000 --- a/_pages/home.md +++ /dev/null @@ -1,22 +0,0 @@ ---- -layout: about -title: about -permalink: / -description:

COMPUTO

A journal of the French Statistical Society SFdS - ISSN 2824-7795 -nav_order: 1 -news: true # includes a list of news items -selected_papers: false # includes a list of papers marked as "selected={true}" -social: false # includes social icons at the bottom of the page ---- - ---- - -This journal aims at promoting computational/algorithmic contributions -in statistics and machine learning that provide insight into which -models or methods are more appropriate to address a specific -scientific question. In order to achieve this goal, Computo goes -beyond classical static publications by leveraging technical advances -in literate programming and scientific reporting. - -[More details about our philosophy](about). - diff --git a/_pages/publications.md b/_pages/publications.md deleted file mode 100644 index 0b293cf4..00000000 --- a/_pages/publications.md +++ /dev/null @@ -1,44 +0,0 @@ ---- -layout: page -permalink: /publications/ -title: Articles -description: Publications by years in reversed chronological order -nav_order: 2 -years: [2024, 2023, 2022] -nav: true ---- - -## Published - -
- -{%- for y in page.years %} -

{{y}}

- {% bibliography -f published -q @*[year={{y}}]* %} - -{% endfor %} - -
- -## In the pipeline - -Manuscript conditionally accepted, whose editorial and scientific reproducibility is being validated - -
- -{% bibliography --file in_production %} - -
- -## Example: a mock contribution - -This page is a reworking of the original t-SNE article using the -Computo template. It aims to help authors submitting to the journal by -using some advanced formatting features. - -
- -{% bibliography --file mock_papers %} - -
- diff --git a/_pages/repos.md b/_pages/repos.md deleted file mode 100644 index 613da700..00000000 --- a/_pages/repos.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -layout: page -permalink: /repos/ -title: Repositories -nav: true -nav_order: 5 ---- - -Check our pinned repositories for our quarto extension, some templates for authors and an advanced mock contribution. - -{% if site.data.repositories.github_repos %} -
- {% for repo in site.data.repositories.github_repos %} - {% include repository/repo.html repository=repo %} - {% endfor %} -
-{% endif %} diff --git a/_pages/review.md b/_pages/review.md deleted file mode 100644 index 1b406120..00000000 --- a/_pages/review.md +++ /dev/null @@ -1,51 +0,0 @@ ---- -layout: page -permalink: /review/ -title: Review -nav_order: 4 -description: Details on Computo's submission process -nav: true ---- - -
-
Overview
-
-

-Computo relies on Open Review -for the review process. The review form is text-based, but Markdown and LaTeX formatting is supported so you can add hyperlinks and use LaTeX to add equations to your review. Reviewers are also required to answer a handful of rating scale questions about the submission. -

-

Once a manuscript is accepted, reviews and discussion will be made available -on the Computo website. Reviewers can choose to remain anonymous or -not.

-
-
- -## Guidelines for evaluation - -In order to help you in performing your review we provide a list of the main questions we are trying to answer when evaluating a submission: - -1. Is the paper within the scope of Computo? - - See [Aims and Scope]({{ site.baseurl }} /about) of Computo. - -2. Is the paper clearly written? - - Computo is intended for computational scientists in statistics/machine learning. The Abstract and Introduction should be as nontechnical as possible, and provide a clear description of the contributions of the paper. Strength and limitations of the work should be adequately discussed, in particular in relation to related work. Graphs and tables should be well thought out and uncluttered. - -3. Is the paper correct? - - Mathematical and algorithmic validity are the authors' professional responsibility. Referees can spot errors of reasoning, but are not expected to perform line-by-line checks of technical results. - -4. Is the paper adequately evaluated? - - Are all claims clearly articulated and supported either by empirical experiments or theoretical analyses? If appropriate, have the authors implemented their work and demonstrated its utility on a significant problem? - -5. Is the paper reproducible? - - The reproducibility of numerical results is a necessary condition for publication in Computo. The referees are expected to check whether they can run the code provided by the authors to reproduce their results. In case of major reproducibility issues, the referees should warn the Associate Editor as soon as possible. - -## Plagiarism policy - -Computo abides by the Committee on Publishing Ethics’s (COPE) guidelines listed below on plagiarism: -- COPE Council. [Suspected plagiarism in a submitted manuscript](https://doi.org/10.24318/cope.2019.2.1), Version 2, November 2018. -- COPE Council. [Suspected plagiarism in a published manuscript](https://doi.org/10.24318/cope.2019.2.2). Version 2. 2013. \ No newline at end of file diff --git a/_pages/submit.md b/_pages/submit.md deleted file mode 100644 index 1b733d35..00000000 --- a/_pages/submit.md +++ /dev/null @@ -1,89 +0,0 @@ ---- -layout: page -permalink: /submit/ -title: Submit -description: Overview and general guidelines to submit a contribution to Computo -nav_order: 3 -nav: true ---- - ---- - -## Overview - -Submissions to Computo require both scientific content (typically -equations, codes and figures, data) and a proof that this content is -reproducible. This is achieved by means of i) a notebook system, ii) a -virtual environment fixing the dependencies and iii) continuous -integration (plus, if needed, an external website to store data -files such as [Zenodo](https://zenodo.org/) or [OSF](https://osf.io/) ). - -A Computo submission is thus a git repository (e.g. Github or Gitlab) typically containing - -- the source file of the notebook (a markdown file with yaml metadata) -- auxiliary files: a $$\mathrm{bib}\TeX $$ file and some statics files, e.g. figures or small .csv data tables -- configuration files to set up the dependencies in a virtual environment -- configuration files to set up the continuous integration rendering the final documents - -The compiled notebook (both HTML and PDF) will be directly generated -in the git(hub) repository via continuous integration (e.g., Github -action or Gitlab CI) and published, if the action is successful, -to a web page (e.g. gh-page). - -The PDF and the git repository address are then submitted via OpenReview. - -## Available templates for R, Python and Julia - -
-
Warning!
-
-

To start writing your own contribution, do not start from scratch!! Please use one of our quarto-based templates below to ensure reproducibility. quarto supports R, Python and Julia. -

-
-
- -To get started, click "[GIT REPO]" for the language of your choice and follow the corresponding "Step-by-step procedure". These templates serve both as material for starting to write your submission, and as a documentation for doing so. - -
- -{% bibliography --file templates %} - -
- -## Submit your work - -Once your are happy with your notebook AND the continuous integration (Github action or Gitlab CI) is successful, you must submit your PDF and the url of your git repository via [OpenReview, our platform for peer-reviewing](https://openreview.net/group?id=Computo). - -## Reviewing and publication - -Submitted papers are reviewed by external reviewers selected by the Associate Editor in charge of the paper. -Computo strives for fast reviewing cycles, but cannot provide strict guarantees on the matter; the current time between submission and publication is under six months. - -In order to ensure an efficient reviewing process, authors are requested upon submission to suggest the names of four potential referees. To avoid conflicts of interests, recent co-authors or collaborators should not be suggested. - -Computo's accepted papers are published electronically immediately upon receipt under [CC BY 4.0 license](https://creativecommons.org/licenses/by/4.0/). -Authors retain the copyright and full publishing rights without restrictions. - -More information about the reviewing process are available on the [Review page]({{ site.baseurl }} /review) - -## Computo's code of ethics for authors - -- **Originality**: - Authors guarantee that their proposed article is original, and that it infringes no moral intellectual property right of any other person or entity. - Authors guarantee that their proposed article has not been published previously, and that they have not submitted the proposed article simultaneously to any other journal. -- **Conflicts of interest**: - Authors shall disclose any potential conflict of interest, whether it is professional, - financial or other, to the journal’s Editor, if this conflict could be interpreted as having - influenced their work. Authors shall declare all sources of funding for the research presented in the article. -- **Impartiality**: - All articles are examined impartially, and their merits are assessed regardless of the - sex, religion, sexual orientation, nationality, ethnic origin, length of service or institutional affiliation of the author(s). -- **Funding**: - All funding received by the author(s) shall be clearly stated in the article(s). -- **Defamatory statements**: - Authors guarantee that their proposed article contains no matter of a defamatory, hateful, fraudulent or knowingly inexact character. -- **References**: - Authors guarantee that all the publications used in their work have been cited appropriately. -- **Copyright/author's right/license compliance**: - Authors guarantee that they comply with the usage license of any third party contents/works (code, software, data, figures/images, documents, etc.) that were used to produce their work. - diff --git a/_pages_template/announcement_long.md b/_pages_template/announcement_long.md deleted file mode 100644 index 3c57d275..00000000 --- a/_pages_template/announcement_long.md +++ /dev/null @@ -1,35 +0,0 @@ ---- -layout: post -title: A long announcement with details -date: 2021-03-09 16:11:00-0400 -inline: false ---- - -Announcements and news can be much longer than just quick inline posts. - -*** - -Jean shorts raw denim Vice normcore, art party High Life PBR -skateboard stumptown vinyl kitsch. Four loko meh 8-bit, tousled banh -mi tilde forage Schlitz dreamcatcher twee 3 wolf moon. Chambray -asymmetrical paleo salvia, sartorial umami four loko master cleanse -drinking vinegar brunch. Pinterest DIY authentic Schlitz, hoodie -Intelligentsia butcher trust fund brunch shabby chic Kickstarter -forage flexitarian. Direct trade cold-pressed meggings stumptown plaid, pop-up -taxidermy. Hoodie XOXO fingerstache scenester Echo Park. Plaid ugh Wes -Anderson, freegan pug selvage fanny pack leggings pickled food truck -DIY irony Banksy. - -#### Hipster list -
    -
  • brunch
  • -
  • fixie
  • -
  • raybans
  • -
  • messenger bag
  • -
- - - diff --git a/_plugins/external-posts.rb b/_plugins/external-posts.rb deleted file mode 100644 index e4fd5eb6..00000000 --- a/_plugins/external-posts.rb +++ /dev/null @@ -1,36 +0,0 @@ -require 'feedjira' -require 'httparty' -require 'jekyll' - -module ExternalPosts - class ExternalPostsGenerator < Jekyll::Generator - safe true - priority :high - - def generate(site) - if site.config['external_sources'] != nil - site.config['external_sources'].each do |src| - p "Fetching external posts from #{src['name']}:" - xml = HTTParty.get(src['rss_url']).body - feed = Feedjira.parse(xml) - feed.entries.each do |e| - p "...fetching #{e.url}" - slug = e.title.downcase.strip.gsub(' ', '-').gsub(/[^\w-]/, '') - path = site.in_source_dir("_posts/#{slug}.md") - doc = Jekyll::Document.new( - path, { :site => site, :collection => site.collections['posts'] } - ) - doc.data['external_source'] = src['name']; - doc.data['feed_content'] = e.content; - doc.data['title'] = "#{e.title}"; - doc.data['description'] = e.summary; - doc.data['date'] = e.published; - doc.data['redirect'] = e.url; - site.collections['posts'].docs << doc - end - end - end - end - end - -end diff --git a/_plugins/hideCustomBibtex.rb b/_plugins/hideCustomBibtex.rb deleted file mode 100644 index 4a852fde..00000000 --- a/_plugins/hideCustomBibtex.rb +++ /dev/null @@ -1,15 +0,0 @@ - module Jekyll - module HideCustomBibtex - def hideCustomBibtex(input) - keywords = @context.registers[:site].config['filtered_bibtex_keywords'] - - keywords.each do |keyword| - input = input.gsub(/^.*#{keyword}.*$\n/, '') - end - - return input - end - end -end - -Liquid::Template.register_filter(Jekyll::HideCustomBibtex) diff --git a/_posts/2021-04-23-submission-process.md b/_posts/2021-04-23-submission-process.md deleted file mode 100644 index ff166aa8..00000000 --- a/_posts/2021-04-23-submission-process.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -layout: post -title: How does Computo work? -date: 3021-04-23 00:00:00 -description: Diagrams that describe the submission process ---- - -Check out the author's perspective or the full process to get a general -overview. - -
-
- {% include figure.html path="assets/img/computo_process.png" class="img-fluid rounded z-depth-1" zoomable=true %} -
-
- diff --git a/_posts/2023-03-17-HTML-to-website.md b/_posts/2023-03-17-HTML-to-website.md deleted file mode 100644 index 47dbbec9..00000000 --- a/_posts/2023-03-17-HTML-to-website.md +++ /dev/null @@ -1,68 +0,0 @@ ---- -layout: post -title: How to automatically publish the HTML of my contribution to a website? -date: 2023-03-17 00:00:00 -tags: reproducibility -description: Describe how to render your article, activate your gh-page and publish your contribution online ---- - - -Some authors reported that their contribution was not published automatically, even when using one of our [3 template repositories](/repos) and even when the build action was successful. This is basically due to the fact that the `gh-pages` is not preporly setup. - -We review here the full process for more clarity. - -## 1. Check that the build action is correctly configured - -If you used one of our template repository, the build action (in `.github/workflows/build.yml`) should look like this: - -{% highlight yaml linenos %} -name: build - -on: - workflow_dispatch: - push: - branches: main - -jobs: - build-deploy: - runs-on: ubuntu-latest - permissions: - contents: write - steps: - - name: Check out repository - uses: actions/checkout@v2 - - [...] - - - name: Render and Publish - uses: quarto-dev/quarto-actions/publish@v2 - with: - target: gh-pages - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - -{% endhighlight %} - -The last step named `Render and Publish` first compiles your notebook and then pushes the HTML and PDF output to a special branch named `gh-pages` which is preferably used by Github to define a web page associated with the current repository, with the address https://user.github.io/repo_name : this is where your final rendered paper should go. If the build action is successful, you don't have to worry and you can move on to the next check. - -## 2. Check that gh-pages is activated on your repos - -By default, the mechanism that checks if a web page should be published in association with your repository is not activated. You need to go to Settings > page and apply the following configuration: - -
-
- {% include figure.html path="assets/img/gh-pages-config.png" class="img-fluid rounded z-depth-1" zoomable=true %} -
-
- -Once this is done, you may need to trigger the build action for the first successful deployment of your web page. - -## 3. One last thing - -Don't forget to include the address of the page where your contribution is published to help the reviewer in the `About` section of your repository. For example, for the Computo `R` template, we get : - -
-
- {% include figure.html path="assets/img/about-gh-repos-webpage.png" class="img-fluid rounded z-depth-1" zoomable=true %} -
-
diff --git a/_posts/2023-03-24-gitlab-integration.md b/_posts/2023-03-24-gitlab-integration.md deleted file mode 100644 index e6c27e62..00000000 --- a/_posts/2023-03-24-gitlab-integration.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -layout: post -title: 'I use gitlab instead of github: what should I do?' -date: 2030-03-24 00:00:00 -tags: reproducibility -description: Discuss integration of Computo's contribution in Gitlab instances ---- - -_Under Construction_ - diff --git a/_posts/2023-03-24-others-languages.md b/_posts/2023-03-24-others-languages.md deleted file mode 100644 index c3d35bb4..00000000 --- a/_posts/2023-03-24-others-languages.md +++ /dev/null @@ -1,15 +0,0 @@ ---- -layout: post -title: 'I use a different language than Python, R or Julia: would Computo accept my contributions?' -date: 2023-03-24 00:00:00 -tags: [reproducibility, code] -description: Describe how to handle other languages than R, Julia or Python ---- - -In principle, we are open to any kind of language. - -In practice, we need to integrate reproducible and compilable code into our quarto template. Natively, we support, `R`, `Python` and `Julia` and provide dedicated templates. For others, if the language is supported by a Jupyter kernel ([there are kernels for many languages](https://gist.github.com/chronitis/682c4e0d9f663e85e3d87e97cd7d1624), [quarto allows code execution](https://quarto.org/docs/computations/execution-options.html#engine-binding). - -When writing your contribution though, keep in mind that some languages are not designed for interactivity and that there will be a formatting effort to support your point in your manuscript (which could be as expensive as interfacing this code with Python or R via `pybind11`, `Rcpp` or equivalent). It's your choice. - -From our side, we will do our best for the technical aspects to help with the integration of any language, but the editorial board and reviewers will also do the work to make sure the contribution is within the bounds scientifically and in the spirit of reproducibility. diff --git a/_posts/2023-03-24-what-reproducibility.md b/_posts/2023-03-24-what-reproducibility.md deleted file mode 100644 index 003ec43b..00000000 --- a/_posts/2023-03-24-what-reproducibility.md +++ /dev/null @@ -1,42 +0,0 @@ ---- -layout: post -title: What is expected exactly in terms of reproducibility? -date: 2023-07-04 00:00:00 -tags: reproducibility -description: Discuss the different kinds of reproducibility at play in Computo, and what is expected from the authors. ---- - -Computo is not just about publishing a notebook and proving that it can be compiled with CI! This part of the process is what we call _"Editorial Reproducibility"_. _"Scientific"_ or _"numerical"_ reproducibility of the analyses is also mandatory, on top of classical peer-review evaluation. - -We don't ask people reproducing their data... yet! We also don't ask for "bit-wise computational" reproducibility (i.e. obtaining exactly the same results bit-by-bit) but rather a "statistical" reproducibility, i.e. obtaining results leading to the same conclusion, with potential non-significant statistical variability. - -![Reproducible Workflow](img/reproducible-sequence.svg) - -Indeed, the global scientific workflow of a reproducible process for a Computo may be split in two types of steps: - -External -: This part of the process may be conducted outside of the notebook environment, for a list of reasons (non-exclusive to each other): - -- the process is too long to be conducted in a notebook -- the data to be processed is too big to be handled directly in the notebook -- it needs a specific environment (e.g. a cluster, with gpus, etc.) -- it needs to involve specific languages (e.g. C, C++, Fortran, etc.) or build tools (e.g. make, cmake, etc.) - -It is “Computational reproducibility”, where the reproducibility is achieved by providing the code and the environment to run it, but not the results themselves. - -Editorial -: This is where the notebook presents the results of the external process, and where everything is put together to produce the final document, it is “Direct reproducibility” in the sense that the notebook is the only thing needed to reproduce the results. - -Ultimately, the workflow must end with a direct reproducibility step which concludes the whole process. - -When applicable, the switch from external to editorial reproducibility is done with a “data transfer” step, where the data produced by the external process is transferred to the notebook environment. It’s required that not only the intermediate results are provided, but also the code to transfer it in the notebook environment. They are a variety of software solutions to do so. - -## Examples of data transfer solutions - -### Intermediate results storage -- in python environment: the [`joblib.Memory`](https://joblib.readthedocs.io/en/latest/memory.html) class which provides a caching mechanism for python functions, and can be used to save the results of a function call to disk, and load it back later. -- in R environment: the `.RData` file format, which can be loaded back in R with the `load()` function. - -### Transfer of the results to the notebook environment -- for both aforementioned solutions, the results (`.joblib` directory or `.Rdata` file) could be committed to the git repository, and directly loaded in the notebook environment. -- Another solution is to centralize input data (when large enough) and intermediate results on a shared scientific provider (we recommend [Zenodo](https://zenodo.org/) for this purpose), and download them in the notebook environment. diff --git a/_posts/2023-06-21-data.md b/_posts/2023-06-21-data.md deleted file mode 100644 index 2582aef7..00000000 --- a/_posts/2023-06-21-data.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -layout: post -title: I have large or sensible data. How should I proceed? -date: 2023-06-21 00:00:00 -tags: reproducibility -description: Describe how to handle large or sensible data files when submitting to Computo ---- - -## Large data sets - -If your submission materials contain files larger than 50MB, **especially data files**, they won’t fit on a git repository as is. For this reason, we encourage you to put your data or any materials you deem necessary on an external “open data” centered repository hub such a [Zenodo](https://zenodo.org/) or [OSF](https://osf.io/). - -You could also use any long-term (emphasis on long-term) data repository that is standard in your scientific community (or for a specific type of data/scientific application), and for which it is straight-forward to retrieve the data using a script code/notebook code (we highly encourage to use open platforms, ideally institutionally hosted). - -## Sensible data sets - -Since the reproducibility of numerical results is a necessary condition for publication in *Computo*, your submissions must include all necessary data (e.g. via Zenodo repositories). However, if you have sensible data (for example, biomedical data that needs to be anonymized), you are invited to contact the editorial committee to explain and justify your position. In any case, we will ask you to make public at least a sample of the original data, and a demonstration of its use in your article for Computo. The results of the analyses carried out on the totality of the data should be made available in the form of a binary file, in order to produce the statistical summaries necessary to illustrate your assertions. diff --git a/_posts/2023-06-21-long-running-code.md b/_posts/2023-06-21-long-running-code.md deleted file mode 100644 index e73d2abd..00000000 --- a/_posts/2023-06-21-long-running-code.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -layout: post -title: My data analysis takes several hours/days/weeks... How to address the issue of reproducibility? -date: 2023-06-21 00:00:00 -tags: reproducibility -description: Discuss the reproducibility for long-running code ---- - -If your analyses, model tuning or training phase take a prohibitively long time to compile and integrate, you can include the results of the trained methods in the form of a binary file. However, you must provide the code enabling the user to fully reproduce the training phase, and illustrate your code in a small, toy-sized example. diff --git a/_sass/_base.scss b/_sass/_base.scss deleted file mode 100644 index 6806aebe..00000000 --- a/_sass/_base.scss +++ /dev/null @@ -1,783 +0,0 @@ -/******************************************************************************* - * Styles for the base elements of the theme. - ******************************************************************************/ - -// Typography - -body { - font-family: var(--ff-main) !important; -} - -h1, h2, h3, h4, h5, h6 { - font-family: $ff-title ; - font-weight: 500; - color: var(--global-title-color) !important; -} - -p, em, div, span, strong { - color: var(--global-text-color); -} - -hr { - border-top: 1px solid var(--global-divider-color); -} - -table { - td, th { - color: var(--global-text-color); - } - td { - font-size: 1rem; - } -} - -a, table.table a { - color: var(--global-theme-color); - &:hover { - color: var(--global-theme-color); - text-decoration: underline; - } - &:hover:after :not(.nav-item.dropdown) { - width: 100%; - } -} - -figure, img { - max-width: 90vw; -} - -blockquote { - background: var(--global-bg-color); - border-left: 2px solid var(--global-theme-color); - margin: 1.5em 10px; - padding: 0.5em 10px; - font-size: 1.2rem; -} - -// Math - -.equation { - margin-bottom: 1rem; - text-align: center; -} - -// Caption - -.caption { - font-size: 0.875rem; - margin-top: 0.75rem; - margin-bottom: 1.5rem; - text-align: center; -} - -// Card - -.card { - background-color: var(--global-card-bg-color); - - img { - width: 100%; - } - - .card-title { - color: var(--global-text-color); - } - - .card-item { - width: auto; - margin-bottom: 10px; - - .row { - display: flex; - align-items: center; - } - } -} - -// Citation - -.citation, .citation-number { - color: var(--global-theme-color); -} - -// Profile - -.profile { - width: 100%; - - .address { - margin-bottom: 5px; - margin-top: 5px; - font-family: monospace; - p { - display: inline-block; - margin: 0; - } - } -} -.profile.float-right{ - margin-left: 1rem; -} -.profile.float-left{ - margin-right: 1rem; -} - -@media (min-width: 576px) { - .profile { - width: 30%; - .address { - p { display: block; } - } - } -} - -.post-description { - margin-bottom: 2rem; - font-size: 0.875rem; - a { - color: inherit; - &:hover { - color: var(--global-theme-color); - text-decoration: none; - } - } -} - - -// Navbar customization - -.navbar { - box-shadow: none; - border-bottom: 1px solid $grey-color-light; - opacity: 0.95; - background-color: var(--global-navbar-bg-color); - font-family: $ff-title ; - font-weight: 500; - letter-spacing: 0.1em; -} -.navbar .dropdown-menu { - background-color: var(--global-bg-color); - border: 1px solid var(--global-divider-color); - a:not(.active) { - color: var(--global-text-color); - } - a:hover { - color: var(--global-hover-color); - } - .dropdown-divider { - border-top: 1px solid var(--global-divider-color) !important; - } -} -.dropdown-item { - color: var(--global-text-color); - &:hover { - color: var(--global-hover-color); - background-color: var(--global-bg-color); - } - font-family: $ff-title ; -} -.navbar.navbar-light { - a { - &:hover { - text-decoration: none; - } - } - .navbar-brand { - color: var(--global-navbar-text-color); - font-family: var(--ff-title); - letter-spacing: 0.25em; - } - .navbar-nav .nav-item .nav-link { - color: var(--global-navbar-text-color); - &:hover { - color: var(--global-navbar-hover-color); - } - } - .navbar-nav .nav-item.active>.nav-link { - background-color: inherit; - font-weight: bolder; - color: var(--global-navbar-theme-color); - &:hover { - color: var(--global-navbar-hover-color); - } - } - .navbar-brand.social { - padding-bottom: 0; - padding-top: 0; - font-size: 1.7rem; - a { - i::before { - color: var(--global-text-color); - transition-property: all 0.2s ease-in-out; - } - &:hover { - i::before { - color: var(--global-navbar-hover-color); - } - } - } - } -} - -.navbar-toggler { - .icon-bar { - display: block; - width: 22px; - height: 2px; - background-color: var(--global-navbar-icon-color); - border-radius: 1px; - margin-bottom: 4px; - transition: all 0.2s; - } - .top-bar { - transform: rotate(45deg); - transform-origin: 10% 10%; - } - .middle-bar { - opacity: 0; - } - .bottom-bar { - transform: rotate(-45deg); - transform-origin: 10% 90%; - } -} - -.navbar-toggler.collapsed { - .top-bar { - transform: rotate(0); - } - .middle-bar { - opacity: 1; - } - .bottom-bar { - transform: rotate(0); - } -} - -#light-toggle { - padding: 0; - border: 0; - background-color: inherit; - color: var(--global-text-color); - &:hover { - color: var(--global-hover-color); - } -} - -// Social (bottom) - -.social { - text-align: center; - .contact-icons { - font-size: 4rem; - a { - i::before { - color: var(--global-text-color); - transition-property: all 0.2s ease-in-out; - } - &:hover { - i::before { - color: var(--global-theme-color); - } - } - } - } - .contact-note { - font-size: 0.8rem; - } -} - - -// Footer -footer.fixed-bottom { - background-color: var(--global-footer-bg-color); - font-size: 0.75rem; - .container { - color: var(--global-footer-text-color); - padding-top: 9px; - padding-bottom: 8px; - } - a { - color: var(--global-footer-link-color); - &:hover { - color: var(--global-theme-color); - text-decoration: none; - } - } -} - -footer.sticky-bottom { - border-top: 1px solid var(--global-divider-color); - padding-top: 40px; - padding-bottom: 40px; - font-size: 0.9rem; -} - -// CV - -.cv { - margin-bottom: 40px; - - .card { - background-color: var(--global-card-bg-color); - border: 1px solid var(--global-divider-color); - - .list-group-item { - background-color: inherit; - border-color: var(--global-divider-color); - - .badge { - color: var(--global-card-bg-color) !important; - background-color: var(--global-theme-color) !important; - } - } - } -} - -// Repositories - -@media (min-width: 768px) { - .repo { - max-width: 50%; - } -} - -// Blog - -.header-bar { - border-bottom: 1px solid var(--global-divider-color); - text-align: center; - padding-top: 2rem; - padding-bottom: 3rem; - h1 { - color: var(--global-theme-color); - font-size: 4rem; - } -} - -.tag-list { - border-bottom: 1px solid var(--global-divider-color); - text-align: center; - padding-top: 1rem; - - ul { - justify-content: center; - display: flow-root; - - p, li { - list-style: none; - display: inline-block; - padding: 1rem 0.5rem; - color: var(--global-text-color-light); - } - } -} - -.post-list { - margin: 0; - margin-bottom: 40px; - padding: 0; - li { - border-bottom: 1px solid var(--global-divider-color); - list-style: none; - padding-top: 2rem; - padding-bottom: 2rem; - .post-meta { - color: var(--global-text-color-light); - font-size: 0.875rem; - margin-bottom: 0; - } - .post-tags { - color: var(--global-text-color-light); - font-size: 0.875rem; - padding-top: 0.25rem; - padding-bottom: 0; - } - a { - color: var(--global-text-color); - text-decoration: none; - &:hover { - color: var(--global-theme-color); - } - } - } -} - -.pagination { - .page-item { - .page-link { - color: var(--global-text-color); - &:hover { - color: $black-color; - } - } - &.active .page-link { - color: $white-color; - background-color: var(--global-theme-color); - &:hover { - background-color: var(--global-theme-color); - } - } - } -} - - -// Distill - -.distill { - a:hover { - border-bottom-color: var(--global-theme-color); - text-decoration: none; - } -} - - -// Projects - -.projects { - a { - text-decoration: none; - - &:hover { - .card-title { - color: var(--global-theme-color); - } - } - } - - .card { - img { - width: 100%; - } - } - - .card-item { - width: auto; - margin-bottom: 10px; - - .row { - display: flex; - align-items: center; - } - } - - .grid-sizer, .grid-item { - width: 250px; - margin-bottom: 10px; - } - - h2.category { - color: var(--global-divider-color); - border-bottom: 1px solid var(--global-divider-color); - padding-top: 0.5rem; - margin-top: 2rem; - margin-bottom: 1rem; - text-align: right; - } -} - - -// Publications - -.publications { - margin-top: 2rem; - h1 { - color: var(--global-theme-color); - font-size: 2rem; - text-align: center; - margin-top: 1em; - margin-bottom: 1em; - } - h2 { - margin-bottom: 1rem; - span { - font-size: 1.5rem; - } - } - h2.year { - color: var(--global-divider-color); - border-top: 1px solid var(--global-divider-color); - padding-top: 1rem; - margin-top: 2rem; - margin-bottom: -2rem; - text-align: right; - } - ol.bibliography { - list-style: none; - padding: 0; - margin-top: 0; - - li { - margin-bottom: 1rem; - .preview { - width: 100%; - min-width: 80px; - max-width: 200px; - } - .abbr { - height: 2rem; - margin-bottom: 0.5rem; - abbr { - display: inline-block; - background-color: var(--global-theme-color); - padding-left: 1rem; - padding-right: 1rem; - a { - color: white; - &:hover { - text-decoration: none; - } - } - } - .award { - color: var(--global-theme-color) !important; - border: 1px solid var(--global-theme-color); - } - } - .title { - font-weight: bolder; - } - .author { - a { - border-bottom: 1px dashed var(--global-theme-color); - &:hover { - border-bottom-style: solid; - text-decoration: none; - } - } - > em { - border-bottom: 1px solid; - font-style: normal; - } - > span.more-authors { - color: var(--global-text-color-light); - border-bottom: 1px dashed var(--global-text-color-light); - cursor: pointer; - &:hover { - color: var(--global-text-color); - border-bottom: 1px dashed var(--global-text-color); - } - } - } - .links { - a.btn { - color: var(--global-text-color); - border: 1px solid var(--global-text-color); - padding-left: 1rem; - padding-right: 1rem; - padding-top: 0.25rem; - padding-bottom: 0.25rem; - &:hover { - color: var(--global-theme-color); - border-color: var(--global-theme-color); - } - } - } - .hidden { - font-size: 0.875rem; - max-height: 0px; - overflow: hidden; - text-align: justify; - transition-property: 0.15s ease; - -moz-transition: 0.15s ease; - -ms-transition: 0.15s ease; - -o-transition: 0.15s ease; - transition: all 0.15s ease; - - p { - line-height: 1.4em; - margin: 10px; - } - pre { - font-size: 1em; - line-height: 1.4em; - padding: 10px; - } - } - .hidden.open { - max-height: 100em; - transition-property: 0.15s ease; - -moz-transition: 0.15s ease; - -ms-transition: 0.15s ease; - -o-transition: 0.15s ease; - transition: all 0.15s ease; - } - div.abstract.hidden { - border: dashed 1px var(--global-bg-color); - } - div.abstract.hidden.open { - border-color: var(--global-text-color); - } - } - } -} - -// Rouge Color Customization -figure.highlight { - margin: 0 0 1rem; -} - -pre { - color: var(--global-theme-color); - background-color: var(--global-code-bg-color); - border-radius: 6px; - padding: 6px 12px; - pre, code { - background-color: transparent; - border-radius: 0; - padding: 0; - } -} - -code { - color: var(--global-theme-color); - background-color: var(--global-code-bg-color); - border-radius: 3px; - padding: 3px 3px; -} - -// Transitioning Themes -html.transition, -html.transition *, -html.transition *:before, -html.transition *:after { - transition: all 750ms !important; - transition-delay: 0 !important; -} - -.info-block { - border-left: 6px solid #{$computo-color}; - border-right: 1px solid #{$computo-color-light}; - border-top: 1px solid #{$computo-color-light}; - border-bottom: 1px solid #{$computo-color-light}; - margin-top: 1.25rem; - margin-bottom: 1.25rem; - border-radius: .25rem; - padding: 0em ; -} - - -.info-block .info-block-header { - background-color: #{$computo-color-light}; - color: #{$computo-color-dark}; - border-bottom: none; - font-weight: 600; - opacity: 85%; - font-size: 1.1rem; - padding-left: .5em; - padding-right: .5em; - padding-top: .2em; - margin-bottom: -0.2em; - display: flex; -} - -.info-block .info-block-body { - padding-left: .5em; - padding-right: .5em; - padding-top: .8em; - padding-bottom: -.2em; -} - -.about-title { - float:left; -} - -.about-title h1 { - width:100%; - font-family: $ff-title ; - font-weight: 700; - color: $computo-color !important; - writing-mode: vertical-rl; - text-orientation: upright; - font-size:12px; - margin:0px; -} - -.container-about { - width:100%; - height:auto; - padding:1%; -} - -// Extra Markdown style (post Customization) -.post{ - .post-meta{ - color: var(--global-text-color-light); - font-size: 0.875rem; - margin-bottom: 0; - } - .post-tags{ - color: var(--global-text-color-light); - font-size: 0.875rem; - padding-top: 0.25rem; - padding-bottom: 1rem; - a { - color: var(--global-text-color-light); - text-decoration: none; - &:hover { - color: var(--global-theme-color); - } - } - } - .post-content{ - blockquote { - border-left: 5px solid var(--global-theme-color); - padding: 8px; - } - } -} - -progress { - /* Positioning */ - position: fixed; - left: 0; - top: 56px; - z-index: 10; - - /* Dimensions */ - width: 100%; - height: 1px; - - /* Reset the appearance */ - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; - - /* Get rid of the default border in Firefox/Opera. */ - border: none; - - /* Progress bar container for Firefox/IE10 */ - background-color: transparent; - - /* Progress bar value for IE10 */ - color: var(--global-theme-color); - } - - progress::-webkit-progress-bar { - background-color: transparent; - } - - progress::-webkit-progress-value { - background-color: var(--global-theme-color); - } - - progress::-moz-progress-bar { - background-color: var(--global-theme-color); - } - - .progress-container { - width: 100%; - background-color: transparent; - position: fixed; - top: 56px; - left: 0; - height: 5px; - display: block; - } - - .progress-bar { - background-color: var(--global-theme-color); - width: 0%; - display: block; - height: inherit; - } diff --git a/_sass/_distill.scss b/_sass/_distill.scss deleted file mode 100644 index d83fafd4..00000000 --- a/_sass/_distill.scss +++ /dev/null @@ -1,126 +0,0 @@ -/******************************************************************************* - * Style overrides for distill blog posts. - ******************************************************************************/ - -d-byline { - border-top-color: var(--global-divider-color) !important; -} - -d-byline h3 { - color: var(--global-text-color) !important; -} - -d-byline a, d-article d-byline a { - color: var(--global-text-color) !important; - &:hover { - color: var(--global-hover-color) !important; - } -} - -d-article { - border-top-color: var(--global-divider-color) !important; - a, p, h1, h2, h3, h4, h5, h6, li, table { - color: var(--global-text-color) !important; - } - a, h1, h2, hr, table, table th, table td { - border-bottom-color: var(--global-divider-color) !important; - } - a:hover { - border-bottom-color: var(--global-hover-color) !important; - } - b i { - display: inline; - } - - d-contents { - align-self: start; - grid-column: 1 / 4; - grid-row: auto / span 4; - justify-self: end; - margin-top: 0em; - padding-left: 2em; - padding-right: 3em; - border-right: 1px solid var(--global-divider-color); - width: calc(max(70%, 300px)); - margin-right: 0px; - margin-top: 0em; - display: grid; - grid-template-columns: - minmax(8px, 1fr) [toc] auto - minmax(8px, 1fr) [toc-line] 1px - minmax(32px, 2fr); - - nav { - grid-column: toc; - a { - border-bottom: none !important; - &:hover { - border-bottom: 1px solid var(--global-text-color) !important; - } - } - h3 { - margin-top: 0; - margin-bottom: 1em; - } - div { - display: block; - outline: none; - margin-bottom: 0.8em; - color: rgba(0, 0, 0, 0.8); - font-weight: bold; - } - ul { - padding-left: 1em; - margin-top: 0; - margin-bottom: 6px; - list-style-type: none; - li { - margin-bottom: 0.25em; - } - } - } - .figcaption { - line-height: 1.4em; - } - toc-line { - border-right: 1px solid var(--global-divider-color); - grid-column: toc-line; - } - } - - d-footnote { - scroll-margin-top: 66px; - } -} - -d-appendix { - border-top-color: var(--global-divider-color) !important; - color: var(--global-distill-app-color) !important; - h3, li, span { - color: var(--global-distill-app-color) !important; - } - a, a.footnote-backlink { - color: var(--global-distill-app-color) !important; - &:hover { - color: var(--global-hover-color) !important; - } - } -} - -@media (max-width: 1024px) { - d-article { - d-contents { - display: block; - grid-column-start: 2; - grid-column-end: -2; - padding-bottom: 0.5em; - margin-bottom: 1em; - padding-top: 0.5em; - width: 100%; - border: 1px solid var(--global-divider-color); - nav { - grid-column: none; - } - } - } -} diff --git a/_sass/_layout.scss b/_sass/_layout.scss deleted file mode 100644 index 9c10cac7..00000000 --- a/_sass/_layout.scss +++ /dev/null @@ -1,50 +0,0 @@ -/****************************************************************************** - * Content - ******************************************************************************/ - -body { - padding-bottom: 70px; - color: var(--global-text-color); - background-color: var(--global-bg-color); - - h1, h2, h3, h4, h5, h6 { - scroll-margin-top: 66px; - } -} - -body.fixed-top-nav { - // Add some padding for the nav-bar. - padding-top: 56px; -} - -body.sticky-bottom-footer { - // Remove padding below footer. - padding-bottom: 0; -} - -.container { - max-width: $max-content-width; -} - -// Profile -.profile { - img { - width: 100%; - } -} - -// TODO: redefine content layout. - - -/****************************************************************************** - * Publications - ******************************************************************************/ - -// TODO: redefine publications layout. - - -/***************************************************************************** -* Projects -*****************************************************************************/ - -// TODO: redefine projects layout. diff --git a/_sass/_themes.scss b/_sass/_themes.scss deleted file mode 100644 index 9c873a26..00000000 --- a/_sass/_themes.scss +++ /dev/null @@ -1,72 +0,0 @@ -/******************************************************************************* - * Themes - ******************************************************************************/ - -:root { - --global-bg-color: #{$white-color}; - --global-code-bg-color: #{$code-bg-color-light}; - --global-text-color: #{$black-color}; - --global-title-color: #{$computo-color-dark}; - --global-distill-app-color: #{$grey-color}; - --global-theme-color: #{$computo-color}; - --global-hover-color: #{$computo-color-dark}; - --global-navbar-bg-color: #{$computo-color}; - --global-navbar-text-color: #{$white-color}; - --global-navbar-theme-color: #{$white-color}; - --global-navbar-hover-color: #{$computo-color-light}; - --global-footer-bg-color: #{$computo-color}; - --global-footer-text-color: #{$grey-color-light}; - --global-footer-link-color: #{$white-color}; - --global-icon-color: #{$grey-color-dark}; - --global-navbar-icon-color: navajowhite; - --global-distill-app-color: #{$grey-color}; - --global-divider-color: rgba(0,0,0,.1); - --global-card-bg-color: #{$white-color}; - - .fa-sun { - display : none; - } - .fa-moon { - padding-left: 10px; - padding-top: 12px; - display : block; - } - - .repo-img-light { - display: block; - } - .repo-img-dark { - display: none; - } -} - -html[data-theme='dark'] { - --global-bg-color: #{$grey-color-dark}; - --global-code-bg-color: #{$code-bg-color-dark}; - --global-text-color: #{$grey-color-light}; - --global-text-color-light: #{$grey-color-light}; - --global-theme-color: #{$cyan-color}; - --global-hover-color: #{$cyan-color}; - --global-footer-bg-color: #{$grey-color-light}; - --global-footer-text-color: #{$grey-color-dark}; - --global-footer-link-color: #{$black-color}; - --global-distill-app-color: #{$grey-color-light}; - --global-divider-color: #424246; - --global-card-bg-color: #{$grey-900}; - - .fa-sun { - padding-left: 10px; - padding-top: 12px; - display : block; - } - .fa-moon { - display : none; - } - - .repo-img-light { - display: none; - } - .repo-img-dark { - display: block; - } -} diff --git a/_sass/_variables.scss b/_sass/_variables.scss deleted file mode 100644 index 7c4d5ec2..00000000 --- a/_sass/_variables.scss +++ /dev/null @@ -1,45 +0,0 @@ -/******************************************************************************* - * Variables used throughout the theme. - * To adjust anything, simply edit the variables below and rebuild the theme. - ******************************************************************************/ - - -// Colors -$red-color: #FF3636 !default; -$red-color-dark: #B71C1C !default; -$orange-color: #F29105 !default; -$blue-color: #0076df !default; -$blue-color-dark: #00369f !default; -$cyan-color: #2698BA !default; -$light-cyan-color: lighten($cyan-color, 25%); -$green-color: #00ab37 !default; -$green-color-lime: #B7D12A !default; -$green-color-dark: #009f06 !default; -$green-color-light: #ddffdd !default; -$green-color-bright: #11D68B !default; -$purple-color: #B509AC !default; -$light-purple-color: lighten($purple-color, 25%); -$pink-color: #f92080 !default; -$pink-color-light: #ffdddd !default; -$yellow-color: #efcc00 !default; - -$grey-color: #828282 !default; -$grey-color-light: lighten($grey-color, 40%); -$grey-color-dark: #1C1C1D; -$grey-900: #212529; - -$white-color: #ffffff !default; -$black-color: #000000 !default; - -// Theme colors -$dark-blue: #0F2E3D !default; -$computo-color: #034E79 !default; -$computo-color-dark: darken($computo-color, 10%); -$computo-color-light: lighten($computo-color, 60%); - -$code-bg-color-light: rgba($computo-color, 0.05); -$code-bg-color-dark: darken($computo-color, 25%); - -// Font -$ff-title: 'Oswald', sans-serif; -$ff-main: 'Open Sans', sans-serif; diff --git a/about.html b/about.html new file mode 100644 index 00000000..8bf877fe --- /dev/null +++ b/about.html @@ -0,0 +1 @@ + About | COMPUTO

About


Aims and scope

Computo has been created in the context of a reproducibility crisis in science, which calls for higher standards in the publication of scientific results. Computo aims at promoting computational/algorithmic contributions in statistics and machine learning (ML) that provide insight into which models or methods are the most appropriate to address a specific scientific question.

The journal welcomes the following types of contributions:

  • New methods with original stats/ML developments, or numerical studies that illustrate theoretical results in stats/ML;
  • Case studies or surveys on stats/ML methods to address a specific (type of) question in data analysis, neutral comparison studies that provide insight into when, how, and why the compared methods perform well or less well;
  • Software/tutorial papers to present implementations of stats/ML algorithms or to feature the use of a package/toolbox. For such papers we expect not only the description of an existing implementation but also the study of a concrete use case. If applicable, a comparison to related works and appropriate benchmarking are also expected.
Pre-submission enquiries

Prospective authors willing to know whether their contribution falls into the scope of Computo are encouraged to contact the editor at computo@sfds.asso.fr. Please make sure to include the title and abstract of your work in your pre-submission enquiry.

An open access journal with reproducible contributions

Computo is free for readers and authors. It is an open access journal which means that all content is freely available without charge to the user or his/her institution. Users are allowed to read, download, copy, distribute, print, search, or link to the full texts of the articles, or use them for any other lawful purpose, without asking prior permission from the publisher or the author. This is in accordance with the Budapest Open Access Initiative (BOAI) definition of open access.

The reproducibility of numerical results is a necessary condition for publication in Computo. In particular, submissions must include all necessary data (e.g. via Zenodo repositories) and code. For contributions featuring the implementation of methods/algorithms, the quality of the provided code is assessed during the review process. We accept contributions in the form of notebooks (e.g. Rmarkdown, or Jupyter).

The reviews are open, i.e. visible to any reader after acceptance of the contribution. Reviewers may choose to remain anonymous or not.

Contact

Enquiries can be sent to the Chief Editor, Julien Chiquet, through computo@sfds.asso.fr.

Thanks

We rely on Jekyll, BibTeX, the aI-folio Jekyll theme, Rmarkdown, Jupyter-book and we drew our inspiration from Rescience-C and distill.pub among others.

Computo’s logo has been designed by Loïc Schwaller.

concept

\ No newline at end of file diff --git a/assets/css/main.css b/assets/css/main.css new file mode 100644 index 00000000..26677a37 --- /dev/null +++ b/assets/css/main.css @@ -0,0 +1,4 @@ +@import url("https://fonts.googleapis.com/css2?family=Oswald");@import url("https://fonts.googleapis.com/css2?family=Open+Sans");:root{--global-bg-color:#fff;--global-code-bg-color:rgba(3,78,121,0.05);--global-text-color:#000;--global-title-color:#022e47;--global-distill-app-color:#828282;--global-theme-color:#034e79;--global-hover-color:#022e47;--global-navbar-bg-color:#034e79;--global-navbar-text-color:#fff;--global-navbar-theme-color:#fff;--global-navbar-hover-color:#b1e1fd;--global-footer-bg-color:#034e79;--global-footer-text-color:#e8e8e8;--global-footer-link-color:#fff;--global-icon-color:#1c1c1d;--global-navbar-icon-color:navajowhite;--global-distill-app-color:#828282;--global-divider-color:rgba(0,0,0,.1);--global-card-bg-color:#fff}:root .fa-sun{display:none}:root .fa-moon{padding-left:10px;padding-top:12px;display:block}:root .repo-img-light{display:block}:root .repo-img-dark{display:none}html[data-theme=dark]{--global-bg-color:#1c1c1d;--global-code-bg-color:black;--global-text-color:#e8e8e8;--global-text-color-light:#e8e8e8;--global-theme-color:#2698ba;--global-hover-color:#2698ba;--global-footer-bg-color:#e8e8e8;--global-footer-text-color:#1c1c1d;--global-footer-link-color:#000;--global-distill-app-color:#e8e8e8;--global-divider-color:#424246;--global-card-bg-color:#212529}html[data-theme=dark] .fa-sun{padding-left:10px;padding-top:12px;display:block}html[data-theme=dark] .fa-moon{display:none}html[data-theme=dark] .repo-img-light{display:none}html[data-theme=dark] .repo-img-dark{display:block}body{padding-bottom:70px;color:var(--global-text-color);background-color:var(--global-bg-color)}body h1,body h2,body h3,body h4,body h5,body h6{scroll-margin-top:66px}body.fixed-top-nav{padding-top:56px}body.sticky-bottom-footer{padding-bottom:0}.container{max-width:800px}.profile img{width:100%}body{font-family:var(--ff-main)!important}h1,h2,h3,h4,h5,h6{font-family:"Oswald",sans-serif;font-weight:500;color:var(--global-title-color)!important}p,em,div,span,strong{color:var(--global-text-color)}hr{border-top:1px solid var(--global-divider-color)}table td,table th{color:var(--global-text-color)}table td{font-size:1rem}a,table.table a{color:var(--global-theme-color)}a:hover,table.table a:hover{color:var(--global-theme-color);text-decoration:underline}a:hover:after :not(.nav-item.dropdown),table.table a:hover:after :not(.nav-item.dropdown){width:100%}figure,img{max-width:90vw}blockquote{background:var(--global-bg-color);border-left:2px solid var(--global-theme-color);margin:1.5em 10px;padding:.5em 10px;font-size:1.2rem}.equation{margin-bottom:1rem;text-align:center}.caption{font-size:.875rem;margin-top:.75rem;margin-bottom:1.5rem;text-align:center}.card{background-color:var(--global-card-bg-color)}.card img{width:100%}.card .card-title{color:var(--global-text-color)}.card .card-item{width:auto;margin-bottom:10px}.card .card-item .row{display:flex;align-items:center}.citation,.citation-number{color:var(--global-theme-color)}.profile{width:100%}.profile .address{margin-bottom:5px;margin-top:5px;font-family:monospace}.profile .address p{display:inline-block;margin:0}.profile.float-right{margin-left:1rem}.profile.float-left{margin-right:1rem}@media(min-width:576px){.profile{width:30%}.profile .address p{display:block}}.post-description{margin-bottom:2rem;font-size:.875rem}.post-description a{color:inherit}.post-description a:hover{color:var(--global-theme-color);text-decoration:none}.navbar{box-shadow:none;border-bottom:1px solid #e8e8e8;opacity:.95;background-color:var(--global-navbar-bg-color);font-family:"Oswald",sans-serif;font-weight:500;letter-spacing:.1em}.navbar .dropdown-menu{background-color:var(--global-bg-color);border:1px solid var(--global-divider-color)}.navbar .dropdown-menu a:not(.active){color:var(--global-text-color)}.navbar .dropdown-menu a:hover{color:var(--global-hover-color)}.navbar .dropdown-menu .dropdown-divider{border-top:1px solid var(--global-divider-color)!important}.dropdown-item{color:var(--global-text-color);font-family:"Oswald",sans-serif}.dropdown-item:hover{color:var(--global-hover-color);background-color:var(--global-bg-color)}.navbar.navbar-light a:hover{text-decoration:none}.navbar.navbar-light .navbar-brand{color:var(--global-navbar-text-color);font-family:var(--ff-title);letter-spacing:.25em}.navbar.navbar-light .navbar-nav .nav-item .nav-link{color:var(--global-navbar-text-color)}.navbar.navbar-light .navbar-nav .nav-item .nav-link:hover{color:var(--global-navbar-hover-color)}.navbar.navbar-light .navbar-nav .nav-item.active>.nav-link{background-color:inherit;font-weight:bolder;color:var(--global-navbar-theme-color)}.navbar.navbar-light .navbar-nav .nav-item.active>.nav-link:hover{color:var(--global-navbar-hover-color)}.navbar.navbar-light .navbar-brand.social{padding-bottom:0;padding-top:0;font-size:1.7rem}.navbar.navbar-light .navbar-brand.social a i::before{color:var(--global-text-color);transition-property:all .2s ease-in-out} +.navbar.navbar-light .navbar-brand.social a:hover i::before{color:var(--global-navbar-hover-color)}.navbar-toggler .icon-bar{display:block;width:22px;height:2px;background-color:var(--global-navbar-icon-color);border-radius:1px;margin-bottom:4px;transition:all .2s}.navbar-toggler .top-bar{transform:rotate(45deg);transform-origin:10% 10%}.navbar-toggler .middle-bar{opacity:0}.navbar-toggler .bottom-bar{transform:rotate(-45deg);transform-origin:10% 90%}.navbar-toggler.collapsed .top-bar{transform:rotate(0)}.navbar-toggler.collapsed .middle-bar{opacity:1}.navbar-toggler.collapsed .bottom-bar{transform:rotate(0)}#light-toggle{padding:0;border:0;background-color:inherit;color:var(--global-text-color)}#light-toggle:hover{color:var(--global-hover-color)}.social{text-align:center}.social .contact-icons{font-size:4rem}.social .contact-icons a i::before{color:var(--global-text-color);transition-property:all .2s ease-in-out}.social .contact-icons a:hover i::before{color:var(--global-theme-color)}.social .contact-note{font-size:.8rem}footer.fixed-bottom{background-color:var(--global-footer-bg-color);font-size:.75rem}footer.fixed-bottom .container{color:var(--global-footer-text-color);padding-top:9px;padding-bottom:8px}footer.fixed-bottom a{color:var(--global-footer-link-color)}footer.fixed-bottom a:hover{color:var(--global-theme-color);text-decoration:none}footer.sticky-bottom{border-top:1px solid var(--global-divider-color);padding-top:40px;padding-bottom:40px;font-size:.9rem}.cv{margin-bottom:40px}.cv .card{background-color:var(--global-card-bg-color);border:1px solid var(--global-divider-color)}.cv .card .list-group-item{background-color:inherit;border-color:var(--global-divider-color)}.cv .card .list-group-item .badge{color:var(--global-card-bg-color)!important;background-color:var(--global-theme-color)!important}@media(min-width:768px){.repo{max-width:50%}}.header-bar{border-bottom:1px solid var(--global-divider-color);text-align:center;padding-top:2rem;padding-bottom:3rem}.header-bar h1{color:var(--global-theme-color);font-size:4rem}.tag-list{border-bottom:1px solid var(--global-divider-color);text-align:center;padding-top:1rem}.tag-list ul{justify-content:center;display:flow-root}.tag-list ul p,.tag-list ul li{list-style:none;display:inline-block;padding:1rem .5rem;color:var(--global-text-color-light)}.post-list{margin:0;margin-bottom:40px;padding:0}.post-list li{border-bottom:1px solid var(--global-divider-color);list-style:none;padding-top:2rem;padding-bottom:2rem}.post-list li .post-meta{color:var(--global-text-color-light);font-size:.875rem;margin-bottom:0}.post-list li .post-tags{color:var(--global-text-color-light);font-size:.875rem;padding-top:.25rem;padding-bottom:0}.post-list li a{color:var(--global-text-color);text-decoration:none}.post-list li a:hover{color:var(--global-theme-color)}.pagination .page-item .page-link{color:var(--global-text-color)}.pagination .page-item .page-link:hover{color:#000}.pagination .page-item.active .page-link{color:#fff;background-color:var(--global-theme-color)}.pagination .page-item.active .page-link:hover{background-color:var(--global-theme-color)}.distill a:hover{border-bottom-color:var(--global-theme-color);text-decoration:none}.projects a{text-decoration:none}.projects a:hover .card-title{color:var(--global-theme-color)}.projects .card img{width:100%}.projects .card-item{width:auto;margin-bottom:10px}.projects .card-item .row{display:flex;align-items:center}.projects .grid-sizer,.projects .grid-item{width:250px;margin-bottom:10px}.projects h2.category{color:var(--global-divider-color);border-bottom:1px solid var(--global-divider-color);padding-top:.5rem;margin-top:2rem;margin-bottom:1rem;text-align:right}.publications{margin-top:2rem}.publications h1{color:var(--global-theme-color);font-size:2rem;text-align:center;margin-top:1em;margin-bottom:1em}.publications h2{margin-bottom:1rem}.publications h2 span{font-size:1.5rem}.publications h2.year{color:var(--global-divider-color);border-top:1px solid var(--global-divider-color);padding-top:1rem;margin-top:2rem;margin-bottom:-2rem;text-align:right}.publications ol.bibliography{list-style:none;padding:0;margin-top:0}.publications ol.bibliography li{margin-bottom:1rem}.publications ol.bibliography li .preview{width:100%;min-width:80px;max-width:200px}.publications ol.bibliography li .abbr{height:2rem;margin-bottom:.5rem}.publications ol.bibliography li .abbr abbr{display:inline-block;background-color:var(--global-theme-color);padding-left:1rem;padding-right:1rem}.publications ol.bibliography li .abbr abbr a{color:white}.publications ol.bibliography li .abbr abbr a:hover{text-decoration:none}.publications ol.bibliography li .abbr .award{color:var(--global-theme-color)!important;border:1px solid var(--global-theme-color)}.publications ol.bibliography li .title{font-weight:bolder}.publications ol.bibliography li .author a{border-bottom:1px dashed var(--global-theme-color)}.publications ol.bibliography li .author a:hover{border-bottom-style:solid;text-decoration:none} +.publications ol.bibliography li .author>em{border-bottom:1px solid;font-style:normal}.publications ol.bibliography li .author>span.more-authors{color:var(--global-text-color-light);border-bottom:1px dashed var(--global-text-color-light);cursor:pointer}.publications ol.bibliography li .author>span.more-authors:hover{color:var(--global-text-color);border-bottom:1px dashed var(--global-text-color)}.publications ol.bibliography li .links a.btn{color:var(--global-text-color);border:1px solid var(--global-text-color);padding-left:1rem;padding-right:1rem;padding-top:.25rem;padding-bottom:.25rem}.publications ol.bibliography li .links a.btn:hover{color:var(--global-theme-color);border-color:var(--global-theme-color)}.publications ol.bibliography li .hidden{font-size:.875rem;max-height:0;overflow:hidden;text-align:justify;transition-property:.15s ease;-moz-transition:.15s ease;-ms-transition:.15s ease;-o-transition:.15s ease;transition:all .15s ease}.publications ol.bibliography li .hidden p{line-height:1.4em;margin:10px}.publications ol.bibliography li .hidden pre{font-size:1em;line-height:1.4em;padding:10px}.publications ol.bibliography li .hidden.open{max-height:100em;transition-property:.15s ease;-moz-transition:.15s ease;-ms-transition:.15s ease;-o-transition:.15s ease;transition:all .15s ease}.publications ol.bibliography li div.abstract.hidden{border:dashed 1px var(--global-bg-color)}.publications ol.bibliography li div.abstract.hidden.open{border-color:var(--global-text-color)}figure.highlight{margin:0 0 1rem}pre{color:var(--global-theme-color);background-color:var(--global-code-bg-color);border-radius:6px;padding:6px 12px}pre pre,pre code{background-color:transparent;border-radius:0;padding:0}code{color:var(--global-theme-color);background-color:var(--global-code-bg-color);border-radius:3px;padding:3px 3px}html.transition,html.transition *,html.transition *:before,html.transition *:after{transition:all 750ms!important;transition-delay:0!important}.info-block{border-left:6px solid #034e79;border-right:1px solid #b1e1fd;border-top:1px solid #b1e1fd;border-bottom:1px solid #b1e1fd;margin-top:1.25rem;margin-bottom:1.25rem;border-radius:.25rem;padding:0}.info-block .info-block-header{background-color:#b1e1fd;color:#022e47;border-bottom:0;font-weight:600;opacity:85%;font-size:1.1rem;padding-left:.5em;padding-right:.5em;padding-top:.2em;margin-bottom:-0.2em;display:flex}.info-block .info-block-body{padding-left:.5em;padding-right:.5em;padding-top:.8em;padding-bottom:-0.2em}.about-title{float:left}.about-title h1{width:100%;font-family:"Oswald",sans-serif;font-weight:700;color:#034e79!important;writing-mode:vertical-rl;text-orientation:upright;font-size:12px;margin:0}.container-about{width:100%;height:auto;padding:1%}.post .post-meta{color:var(--global-text-color-light);font-size:.875rem;margin-bottom:0}.post .post-tags{color:var(--global-text-color-light);font-size:.875rem;padding-top:.25rem;padding-bottom:1rem}.post .post-tags a{color:var(--global-text-color-light);text-decoration:none}.post .post-tags a:hover{color:var(--global-theme-color)}.post .post-content blockquote{border-left:5px solid var(--global-theme-color);padding:8px}progress{position:fixed;left:0;top:56px;z-index:10;width:100%;height:1px;-webkit-appearance:none;-moz-appearance:none;appearance:none;border:0;background-color:transparent;color:var(--global-theme-color)}progress::-webkit-progress-bar{background-color:transparent}progress::-webkit-progress-value{background-color:var(--global-theme-color)}progress::-moz-progress-bar{background-color:var(--global-theme-color)}.progress-container{width:100%;background-color:transparent;position:fixed;top:56px;left:0;height:5px;display:block}.progress-bar{background-color:var(--global-theme-color);width:0;display:block;height:inherit}d-byline{border-top-color:var(--global-divider-color)!important}d-byline h3{color:var(--global-text-color)!important}d-byline a,d-article d-byline a{color:var(--global-text-color)!important}d-byline a:hover,d-article d-byline a:hover{color:var(--global-hover-color)!important}d-article{border-top-color:var(--global-divider-color)!important}d-article a,d-article p,d-article h1,d-article h2,d-article h3,d-article h4,d-article h5,d-article h6,d-article li,d-article table{color:var(--global-text-color)!important}d-article a,d-article h1,d-article h2,d-article hr,d-article table,d-article table th,d-article table td{border-bottom-color:var(--global-divider-color)!important}d-article a:hover{border-bottom-color:var(--global-hover-color)!important}d-article b i{display:inline}d-article d-contents{align-self:start;grid-column:1/4;grid-row:auto/span 4;justify-self:end;margin-top:0;padding-left:2em;padding-right:3em;border-right:1px solid var(--global-divider-color);width:max(70%,300px);margin-right:0;margin-top:0;display:grid;grid-template-columns:minmax(8px,1fr) [toc] auto minmax(8px,1fr) [toc-line] 1px minmax(32px,2fr)}d-article d-contents nav{grid-column:toc} +d-article d-contents nav a{border-bottom:none!important}d-article d-contents nav a:hover{border-bottom:1px solid var(--global-text-color)!important}d-article d-contents nav h3{margin-top:0;margin-bottom:1em}d-article d-contents nav div{display:block;outline:0;margin-bottom:.8em;color:rgba(0,0,0,0.8);font-weight:bold}d-article d-contents nav ul{padding-left:1em;margin-top:0;margin-bottom:6px;list-style-type:none}d-article d-contents nav ul li{margin-bottom:.25em}d-article d-contents .figcaption{line-height:1.4em}d-article d-contents toc-line{border-right:1px solid var(--global-divider-color);grid-column:toc-line}d-article d-footnote{scroll-margin-top:66px}d-appendix{border-top-color:var(--global-divider-color)!important;color:var(--global-distill-app-color)!important}d-appendix h3,d-appendix li,d-appendix span{color:var(--global-distill-app-color)!important}d-appendix a,d-appendix a.footnote-backlink{color:var(--global-distill-app-color)!important}d-appendix a:hover,d-appendix a.footnote-backlink:hover{color:var(--global-hover-color)!important}@media(max-width:1024px){d-article d-contents{display:block;grid-column-start:2;grid-column-end:-2;padding-bottom:.5em;margin-bottom:1em;padding-top:.5em;width:100%;border:1px solid var(--global-divider-color)}d-article d-contents nav{grid-column:none}} \ No newline at end of file diff --git a/assets/css/main.css.map b/assets/css/main.css.map new file mode 100644 index 00000000..05f471c2 --- /dev/null +++ b/assets/css/main.css.map @@ -0,0 +1 @@ +{"version":3,"sourceRoot":"","sources":["main.scss","../../_sass/_variables.scss","../../_sass/_themes.scss","../../_sass/_layout.scss","../../_sass/_base.scss","../../_sass/_distill.scss"],"names":[],"mappings":"AAKQ;AACA;ACNR;AAAA;AAAA;AAAA;ACAA;AAAA;AAAA;AAIA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAEF;EACE;EACA;EACA;;AAGF;EACE;;AAEF;EACE;;;AAIJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;;AAEF;EACE;;AAGF;EACE;;AAEF;EACE;;;ACrEJ;AAAA;AAAA;AAIA;EACE;EACA;EACA;;AAEA;EACE;;;AAIJ;EAEE;;;AAGF;EAEE;;;AAGF;EACE,WHtBkB;;;AG2BlB;EACE;;;AAOJ;AAAA;AAAA;AAOA;AAAA;AAAA;AC7CA;AAAA;AAAA;AAMA;EACE;;;AAGF;EACE,aHgCS;EG/BT;EACA;;;AAGF;EACE;;;AAGF;EACE;;;AAIA;EACE;;AAEF;EACE;;;AAIJ;EACE;;AACA;EACE;EACA;;AAEF;EACE;;;AAIJ;EACE;;;AAGF;EACE;EACA;EACA;EACA;EACA;;;AAKF;EACE;EACA;;;AAKF;EACE;EACA;EACA;EACA;;;AAKF;EACE;;AAEA;EACE;;AAGF;EACE;;AAGF;EACE;EACA;;AAEA;EACE;EACA;;;AAON;EACE;;;AAKF;EACE;;AAEA;EACE;EACA;EACA;;AACA;EACE;EACA;;;AAIN;EACE;;;AAEF;EACE;;;AAGF;EACE;IACE;;EAEE;IAAI;;;AAKV;EACE;EACA;;AACA;EACE;;AACA;EACE;EACA;;;AAQN;EACE;EACA;EACA;EACA;EACA,aH9GS;EG+GT;EACA;;;AAEF;EACE;EACA;;AACA;EACE;;AAEF;EACE;;AAEF;EACE;;;AAGJ;EACE;EAKA,aHrIS;;AGiIP;EACE;EACA;;;AAMF;EACE;;AAGJ;EACI;EACA;EACA;;AAEJ;EACE;;AACA;EACE;;AAGJ;EACI;EACA;EACA;;AACA;EACE;;AAGN;EACE;EACA;EACA;;AAEE;EACE;EACA;;AAGA;EACE;;;AAQR;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAEF;EACE;EACA;;AAEF;EACE;;AAEF;EACE;EACA;;;AAKF;EACE;;AAEF;EACE;;AAEF;EACE;;;AAIJ;EACE;EACA;EACA;EACA;;AACA;EACE;;;AAMJ;EACE;;AACA;EACE;;AAEE;EACE;EACA;;AAGA;EACE;;AAKR;EACE;;;AAMJ;EACE;EACA;;AACA;EACE;EACA;EACA;;AAEF;EACE;;AACA;EACE;EACA;;;AAKN;EACE;EACA;EACA;EACA;;;AAKF;EACE;;AAEA;EACE;EACA;;AAEA;EACE;EACA;;AAEA;EACE;EACA;;;AAQR;EACE;IACE;;;AAMJ;EACE;EACA;EACA;EACA;;AACA;EACE;EACA;;;AAIJ;EACE;EACA;EACA;;AAEA;EACE;EACA;;AAEA;EACE;EACA;EACA;EACA;;;AAKN;EACE;EACA;EACA;;AACA;EACE;EACA;EACA;EACA;;AACA;EACE;EACA;EACA;;AAEF;EACE;EACA;EACA;EACA;;AAEF;EACE;EACA;;AACA;EACE;;;AAQJ;EACE;;AACA;EACE,OH3XM;;AG8XV;EACE,OHhYQ;EGiYR;;AACA;EACE;;;AAUN;EACE;EACA;;;AAQF;EACE;;AAGE;EACE;;AAMJ;EACE;;AAIJ;EACE;EACA;;AAEA;EACE;EACA;;AAIJ;EACE;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;;;AAOJ;EACE;;AACA;EACE;EACA;EACA;EACA;EACA;;AAEF;EACE;;AACA;EACE;;AAGJ;EACE;EACA;EACA;EACA;EACA;EACA;;AAEF;EACE;EACA;EACA;;AAEA;EACE;;AACA;EACE;EACA;EACA;;AAEF;EACE;EACA;;AACA;EACE;EACA;EACA;EACA;;AACA;EACE;;AACA;EACE;;AAIN;EACE;EACA;;AAGJ;EACE;;AAGA;EACE;;AACA;EACI;EACA;;AAGN;EACE;EACA;;AAEF;EACE;EACA;EACA;;AACA;EACI;EACA;;AAKN;EACE;EACA;EACA;EACA;EACA;EACA;;AACA;EACE;EACA;;AAIN;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;;AAEF;EACE;EACA;EACA;;AAGJ;EACE;EACA;EACA;EACA;EACA;EACA;;AAEF;EACE;;AAEF;EACE;;;AAOR;EACE;;;AAGF;EACE;EACA;EACA;EACA;;AACA;EACE;EACA;EACA;;;AAIJ;EACE;EACA;EACA;EACA;;;AAIF;AAAA;AAAA;AAAA;EAIE;EACA;;;AAGF;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAIJ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGJ;EACI;EACA;EACA;EACA;;;AAGJ;EACI;;;AAGJ;EACE;EACA,aHnoBS;EGooBT;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACI;EACA;EACA;;;AAKF;EACE;EACA;EACA;;AAEF;EACE;EACA;EACA;EACA;;AACA;EACE;EACA;;AACA;EACE;;AAKJ;EACE;EACA;;;AAKN;AACK;EACA;EACA;EACA;EACA;AAEA;EACA;EACA;AAEA;EACA;EACG;EACK;AAER;EACA;AAEA;EACA;AAEA;EACA;;;AAGJ;EACI;;;AAGJ;EACI;;;AAGJ;EACI;;;AAGJ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGJ;EACI;EACA;EACA;EACA;;;AC7wBL;AAAA;AAAA;AAIA;EACE;;;AAGF;EACE;;;AAGF;EACE;;AACA;EACE;;;AAIJ;EACE;;AACA;EACE;;AAEF;EACE;;AAEF;EACE;;AAEF;EACE;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,uBACE;;AAIF;EACE;;AACA;EACE;;AACA;EACE;;AAGJ;EACE;EACA;;AAEF;EACE;EACA;EACA;EACA;EACA;;AAEF;EACE;EACA;EACA;EACA;;AACA;EACE;;AAIN;EACE;;AAEF;EACE;EACA;;AAIJ;EACE;;;AAIJ;EACE;EACA;;AACA;EACE;;AAEF;EACE;;AACA;EACE;;;AAKN;EAEI;IACE;IACA;IACA;IACA;IACA;IACA;IACA;IACA;;EACA;IACE","sourcesContent":["@charset \"utf-8\";\n\n// Dimensions\n$max-content-width: 800px;\n\n@import url('https://fonts.googleapis.com/css2?family=Oswald');\n@import url('https://fonts.googleapis.com/css2?family=Open+Sans');\n\n@import\n \"variables\",\n \"themes\",\n \"layout\",\n \"base\",\n \"distill\"\n;\n","/*******************************************************************************\n * Variables used throughout the theme.\n * To adjust anything, simply edit the variables below and rebuild the theme.\n ******************************************************************************/\n\n\n// Colors\n$red-color: #FF3636 !default;\n$red-color-dark: #B71C1C !default;\n$orange-color: #F29105 !default;\n$blue-color: #0076df !default;\n$blue-color-dark: #00369f !default;\n$cyan-color: #2698BA !default;\n$light-cyan-color: lighten($cyan-color, 25%);\n$green-color: #00ab37 !default;\n$green-color-lime: #B7D12A !default;\n$green-color-dark: #009f06 !default;\n$green-color-light: #ddffdd !default;\n$green-color-bright: #11D68B !default;\n$purple-color: #B509AC !default;\n$light-purple-color: lighten($purple-color, 25%);\n$pink-color: #f92080 !default;\n$pink-color-light: #ffdddd !default;\n$yellow-color: #efcc00 !default;\n\n$grey-color: #828282 !default;\n$grey-color-light: lighten($grey-color, 40%);\n$grey-color-dark: #1C1C1D;\n$grey-900: #212529;\n\n$white-color: #ffffff !default;\n$black-color: #000000 !default;\n\n// Theme colors\n$dark-blue: #0F2E3D !default;\n$computo-color: #034E79 !default;\n$computo-color-dark: darken($computo-color, 10%);\n$computo-color-light: lighten($computo-color, 60%);\n\n$code-bg-color-light: rgba($computo-color, 0.05);\n$code-bg-color-dark: darken($computo-color, 25%);\n\n// Font\n$ff-title: 'Oswald', sans-serif;\n$ff-main: 'Open Sans', sans-serif;\n","/*******************************************************************************\r\n * Themes\r\n ******************************************************************************/\r\n \r\n:root {\r\n --global-bg-color: #{$white-color};\r\n --global-code-bg-color: #{$code-bg-color-light};\r\n --global-text-color: #{$black-color};\r\n --global-title-color: #{$computo-color-dark};\r\n --global-distill-app-color: #{$grey-color};\r\n --global-theme-color: #{$computo-color};\r\n --global-hover-color: #{$computo-color-dark};\r\n --global-navbar-bg-color: #{$computo-color};\r\n --global-navbar-text-color: #{$white-color};\r\n --global-navbar-theme-color: #{$white-color};\r\n --global-navbar-hover-color: #{$computo-color-light};\r\n --global-footer-bg-color: #{$computo-color};\r\n --global-footer-text-color: #{$grey-color-light};\r\n --global-footer-link-color: #{$white-color};\r\n --global-icon-color: #{$grey-color-dark};\r\n --global-navbar-icon-color: navajowhite;\r\n --global-distill-app-color: #{$grey-color};\r\n --global-divider-color: rgba(0,0,0,.1);\r\n --global-card-bg-color: #{$white-color};\r\n\r\n .fa-sun {\r\n display : none;\r\n }\r\n .fa-moon {\r\n padding-left: 10px;\r\n padding-top: 12px;\r\n display : block;\r\n }\r\n\r\n .repo-img-light {\r\n display: block;\r\n }\r\n .repo-img-dark {\r\n display: none;\r\n }\r\n}\r\n\r\nhtml[data-theme='dark'] {\r\n --global-bg-color: #{$grey-color-dark};\r\n --global-code-bg-color: #{$code-bg-color-dark};\r\n --global-text-color: #{$grey-color-light};\r\n --global-text-color-light: #{$grey-color-light};\r\n --global-theme-color: #{$cyan-color};\r\n --global-hover-color: #{$cyan-color};\r\n --global-footer-bg-color: #{$grey-color-light};\r\n --global-footer-text-color: #{$grey-color-dark};\r\n --global-footer-link-color: #{$black-color};\r\n --global-distill-app-color: #{$grey-color-light};\r\n --global-divider-color: #424246;\r\n --global-card-bg-color: #{$grey-900};\r\n\r\n .fa-sun {\r\n padding-left: 10px;\r\n padding-top: 12px;\r\n display : block;\r\n }\r\n .fa-moon {\r\n display : none;\r\n }\r\n\r\n .repo-img-light {\r\n display: none;\r\n }\r\n .repo-img-dark {\r\n display: block;\r\n }\r\n}\r\n","/******************************************************************************\n * Content\n ******************************************************************************/\n\nbody {\n padding-bottom: 70px;\n color: var(--global-text-color);\n background-color: var(--global-bg-color);\n\n h1, h2, h3, h4, h5, h6 {\n scroll-margin-top: 66px;\n }\n}\n\nbody.fixed-top-nav {\n // Add some padding for the nav-bar.\n padding-top: 56px;\n}\n\nbody.sticky-bottom-footer {\n // Remove padding below footer.\n padding-bottom: 0;\n}\n\n.container {\n max-width: $max-content-width;\n}\n\n// Profile\n.profile {\n img {\n width: 100%;\n }\n}\n\n// TODO: redefine content layout.\n\n\n/******************************************************************************\n * Publications\n ******************************************************************************/\n\n// TODO: redefine publications layout.\n\n\n/*****************************************************************************\n* Projects\n*****************************************************************************/\n\n// TODO: redefine projects layout.\n","/*******************************************************************************\n * Styles for the base elements of the theme.\n ******************************************************************************/\n\n// Typography\n\nbody {\n font-family: var(--ff-main) !important;\n}\n\nh1, h2, h3, h4, h5, h6 {\n font-family: $ff-title ;\n font-weight: 500;\n color: var(--global-title-color) !important;\n}\n\np, em, div, span, strong {\n color: var(--global-text-color);\n}\n\nhr {\n border-top: 1px solid var(--global-divider-color);\n}\n\ntable {\n td, th {\n color: var(--global-text-color);\n }\n td {\n font-size: 1rem;\n }\n}\n\na, table.table a {\n color: var(--global-theme-color);\n &:hover {\n color: var(--global-theme-color);\n text-decoration: underline;\n }\n &:hover:after :not(.nav-item.dropdown) {\n width: 100%;\n }\n}\n\nfigure, img {\n max-width: 90vw;\n}\n\nblockquote {\n background: var(--global-bg-color);\n border-left: 2px solid var(--global-theme-color);\n margin: 1.5em 10px;\n padding: 0.5em 10px;\n font-size: 1.2rem;\n}\n\n// Math\n\n.equation {\n margin-bottom: 1rem;\n text-align: center;\n}\n\n// Caption\n\n.caption {\n font-size: 0.875rem;\n margin-top: 0.75rem;\n margin-bottom: 1.5rem;\n text-align: center;\n}\n\n// Card\n\n.card {\n background-color: var(--global-card-bg-color);\n\n img {\n width: 100%;\n }\n\n .card-title {\n color: var(--global-text-color);\n }\n\n .card-item {\n width: auto;\n margin-bottom: 10px;\n\n .row {\n display: flex;\n align-items: center;\n }\n }\n}\n\n// Citation\n\n.citation, .citation-number {\n color: var(--global-theme-color);\n}\n\n// Profile\n\n.profile {\n width: 100%;\n\n .address {\n margin-bottom: 5px;\n margin-top: 5px;\n font-family: monospace;\n p {\n display: inline-block;\n margin: 0;\n }\n }\n}\n.profile.float-right{\n margin-left: 1rem;\n}\n.profile.float-left{\n margin-right: 1rem;\n}\n\n@media (min-width: 576px) {\n .profile {\n width: 30%;\n .address {\n p { display: block; }\n }\n }\n}\n\n.post-description {\n margin-bottom: 2rem;\n font-size: 0.875rem;\n a {\n color: inherit;\n &:hover {\n color: var(--global-theme-color);\n text-decoration: none;\n }\n }\n}\n\n\n// Navbar customization\n\n.navbar {\n box-shadow: none;\n border-bottom: 1px solid $grey-color-light;\n opacity: 0.95;\n background-color: var(--global-navbar-bg-color);\n font-family: $ff-title ;\n font-weight: 500;\n letter-spacing: 0.1em;\n}\n.navbar .dropdown-menu {\n background-color: var(--global-bg-color);\n border: 1px solid var(--global-divider-color);\n a:not(.active) {\n color: var(--global-text-color);\n }\n a:hover {\n color: var(--global-hover-color);\n }\n .dropdown-divider {\n border-top: 1px solid var(--global-divider-color) !important;\n }\n}\n.dropdown-item {\n color: var(--global-text-color);\n &:hover {\n color: var(--global-hover-color);\n background-color: var(--global-bg-color);\n }\n font-family: $ff-title ;\n}\n.navbar.navbar-light {\n a {\n &:hover {\n text-decoration: none;\n }\n }\n .navbar-brand {\n color: var(--global-navbar-text-color);\n font-family: var(--ff-title);\n letter-spacing: 0.25em;\n }\n .navbar-nav .nav-item .nav-link {\n color: var(--global-navbar-text-color);\n &:hover {\n color: var(--global-navbar-hover-color);\n }\n }\n .navbar-nav .nav-item.active>.nav-link {\n background-color: inherit;\n font-weight: bolder;\n color: var(--global-navbar-theme-color);\n &:hover {\n color: var(--global-navbar-hover-color);\n }\n }\n .navbar-brand.social {\n padding-bottom: 0;\n padding-top: 0;\n font-size: 1.7rem;\n a {\n i::before {\n color: var(--global-text-color);\n transition-property: all 0.2s ease-in-out;\n }\n &:hover {\n i::before {\n color: var(--global-navbar-hover-color);\n }\n }\n }\n }\n}\n\n.navbar-toggler {\n .icon-bar {\n display: block;\n width: 22px;\n height: 2px;\n background-color: var(--global-navbar-icon-color);\n border-radius: 1px;\n margin-bottom: 4px;\n transition: all 0.2s;\n }\n .top-bar {\n transform: rotate(45deg);\n transform-origin: 10% 10%;\n }\n .middle-bar {\n opacity: 0;\n }\n .bottom-bar {\n transform: rotate(-45deg);\n transform-origin: 10% 90%;\n }\n}\n\n.navbar-toggler.collapsed {\n .top-bar {\n transform: rotate(0);\n }\n .middle-bar {\n opacity: 1;\n }\n .bottom-bar {\n transform: rotate(0);\n }\n}\n\n#light-toggle {\n padding: 0;\n border: 0;\n background-color: inherit;\n color: var(--global-text-color);\n &:hover {\n color: var(--global-hover-color);\n }\n}\n\n// Social (bottom)\n\n.social {\n text-align: center;\n .contact-icons {\n font-size: 4rem;\n a {\n i::before {\n color: var(--global-text-color);\n transition-property: all 0.2s ease-in-out;\n }\n &:hover {\n i::before {\n color: var(--global-theme-color);\n }\n }\n }\n }\n .contact-note {\n font-size: 0.8rem;\n }\n}\n\n\n// Footer\nfooter.fixed-bottom {\n background-color: var(--global-footer-bg-color);\n font-size: 0.75rem;\n .container {\n color: var(--global-footer-text-color);\n padding-top: 9px;\n padding-bottom: 8px;\n }\n a {\n color: var(--global-footer-link-color);\n &:hover {\n color: var(--global-theme-color);\n text-decoration: none;\n }\n }\n}\n\nfooter.sticky-bottom {\n border-top: 1px solid var(--global-divider-color);\n padding-top: 40px;\n padding-bottom: 40px;\n font-size: 0.9rem;\n}\n\n// CV\n\n.cv {\n margin-bottom: 40px;\n \n .card {\n background-color: var(--global-card-bg-color);\n border: 1px solid var(--global-divider-color);\n \n .list-group-item {\n background-color: inherit;\n border-color: var(--global-divider-color);\n\n .badge {\n color: var(--global-card-bg-color) !important;\n background-color: var(--global-theme-color) !important;\n }\n }\n }\n}\n\n// Repositories\n\n@media (min-width: 768px) {\n .repo {\n max-width: 50%;\n }\n}\n\n// Blog\n\n.header-bar {\n border-bottom: 1px solid var(--global-divider-color);\n text-align: center;\n padding-top: 2rem;\n padding-bottom: 3rem;\n h1 {\n color: var(--global-theme-color);\n font-size: 4rem;\n }\n}\n\n.tag-list {\n border-bottom: 1px solid var(--global-divider-color);\n text-align: center;\n padding-top: 1rem;\n\n ul {\n justify-content: center;\n display: flow-root;\n\n p, li {\n list-style: none;\n display: inline-block;\n padding: 1rem 0.5rem;\n color: var(--global-text-color-light);\n }\n }\n}\n\n.post-list {\n margin: 0;\n margin-bottom: 40px;\n padding: 0;\n li {\n border-bottom: 1px solid var(--global-divider-color);\n list-style: none;\n padding-top: 2rem;\n padding-bottom: 2rem;\n .post-meta {\n color: var(--global-text-color-light);\n font-size: 0.875rem;\n margin-bottom: 0;\n }\n .post-tags {\n color: var(--global-text-color-light);\n font-size: 0.875rem;\n padding-top: 0.25rem;\n padding-bottom: 0;\n }\n a {\n color: var(--global-text-color);\n text-decoration: none;\n &:hover {\n color: var(--global-theme-color);\n }\n }\n }\n}\n\n.pagination {\n .page-item {\n .page-link {\n color: var(--global-text-color);\n &:hover {\n color: $black-color;\n }\n }\n &.active .page-link {\n color: $white-color;\n background-color: var(--global-theme-color);\n &:hover {\n background-color: var(--global-theme-color);\n }\n }\n }\n}\n\n\n// Distill\n\n.distill {\n a:hover {\n border-bottom-color: var(--global-theme-color);\n text-decoration: none;\n }\n}\n\n\n// Projects\n\n.projects {\n a {\n text-decoration: none;\n\n &:hover {\n .card-title {\n color: var(--global-theme-color);\n }\n }\n }\n\n .card {\n img {\n width: 100%;\n }\n }\n\n .card-item {\n width: auto;\n margin-bottom: 10px;\n\n .row {\n display: flex;\n align-items: center;\n }\n }\n\n .grid-sizer, .grid-item {\n width: 250px;\n margin-bottom: 10px;\n }\n\n h2.category {\n color: var(--global-divider-color);\n border-bottom: 1px solid var(--global-divider-color);\n padding-top: 0.5rem;\n margin-top: 2rem;\n margin-bottom: 1rem;\n text-align: right;\n }\n}\n\n\n// Publications\n\n.publications {\n margin-top: 2rem;\n h1 {\n color: var(--global-theme-color);\n font-size: 2rem;\n text-align: center;\n margin-top: 1em;\n margin-bottom: 1em;\n }\n h2 {\n margin-bottom: 1rem;\n span {\n font-size: 1.5rem;\n }\n }\n h2.year {\n color: var(--global-divider-color);\n border-top: 1px solid var(--global-divider-color);\n padding-top: 1rem;\n margin-top: 2rem;\n margin-bottom: -2rem;\n text-align: right;\n }\n ol.bibliography {\n list-style: none;\n padding: 0;\n margin-top: 0;\n\n li {\n margin-bottom: 1rem;\n .preview {\n width: 100%;\n min-width: 80px;\n max-width: 200px;\n }\n .abbr {\n height: 2rem;\n margin-bottom: 0.5rem;\n abbr {\n display: inline-block;\n background-color: var(--global-theme-color);\n padding-left: 1rem;\n padding-right: 1rem;\n a {\n color: white;\n &:hover {\n text-decoration: none;\n }\n }\n }\n .award {\n color: var(--global-theme-color) !important;\n border: 1px solid var(--global-theme-color);\n }\n }\n .title {\n font-weight: bolder;\n }\n .author {\n a {\n border-bottom: 1px dashed var(--global-theme-color);\n &:hover {\n border-bottom-style: solid;\n text-decoration: none;\n }\n }\n > em {\n border-bottom: 1px solid;\n font-style: normal;\n }\n > span.more-authors {\n color: var(--global-text-color-light);\n border-bottom: 1px dashed var(--global-text-color-light);\n cursor: pointer;\n &:hover {\n color: var(--global-text-color);\n border-bottom: 1px dashed var(--global-text-color);\n }\n }\n }\n .links {\n a.btn {\n color: var(--global-text-color);\n border: 1px solid var(--global-text-color);\n padding-left: 1rem;\n padding-right: 1rem;\n padding-top: 0.25rem;\n padding-bottom: 0.25rem;\n &:hover {\n color: var(--global-theme-color);\n border-color: var(--global-theme-color);\n }\n }\n }\n .hidden {\n font-size: 0.875rem;\n max-height: 0px;\n overflow: hidden;\n text-align: justify;\n transition-property: 0.15s ease;\n -moz-transition: 0.15s ease;\n -ms-transition: 0.15s ease;\n -o-transition: 0.15s ease;\n transition: all 0.15s ease;\n\n p {\n line-height: 1.4em;\n margin: 10px;\n }\n pre {\n font-size: 1em;\n line-height: 1.4em;\n padding: 10px;\n }\n }\n .hidden.open {\n max-height: 100em;\n transition-property: 0.15s ease;\n -moz-transition: 0.15s ease;\n -ms-transition: 0.15s ease;\n -o-transition: 0.15s ease;\n transition: all 0.15s ease;\n }\n div.abstract.hidden {\n border: dashed 1px var(--global-bg-color);\n }\n div.abstract.hidden.open {\n border-color: var(--global-text-color);\n }\n }\n }\n}\n\n// Rouge Color Customization\nfigure.highlight {\n margin: 0 0 1rem;\n}\n\npre {\n color: var(--global-theme-color);\n background-color: var(--global-code-bg-color);\n border-radius: 6px;\n padding: 6px 12px;\n pre, code {\n background-color: transparent;\n border-radius: 0;\n padding: 0;\n }\n}\n\ncode {\n color: var(--global-theme-color);\n background-color: var(--global-code-bg-color);\n border-radius: 3px;\n padding: 3px 3px;\n}\n\n// Transitioning Themes\nhtml.transition,\nhtml.transition *,\nhtml.transition *:before,\nhtml.transition *:after {\n transition: all 750ms !important;\n transition-delay: 0 !important;\n}\n\n.info-block {\n border-left: 6px solid #{$computo-color};\n border-right: 1px solid #{$computo-color-light};\n border-top: 1px solid #{$computo-color-light};\n border-bottom: 1px solid #{$computo-color-light};\n margin-top: 1.25rem;\n margin-bottom: 1.25rem;\n border-radius: .25rem;\n padding: 0em ;\n}\n\n\n.info-block .info-block-header {\n background-color: #{$computo-color-light};\n color: #{$computo-color-dark};\n border-bottom: none;\n font-weight: 600;\n opacity: 85%;\n font-size: 1.1rem;\n padding-left: .5em;\n padding-right: .5em;\n padding-top: .2em;\n margin-bottom: -0.2em;\n display: flex;\n}\n\n.info-block .info-block-body {\n padding-left: .5em;\n padding-right: .5em;\n padding-top: .8em;\n padding-bottom: -.2em;\n}\n\n.about-title {\n float:left;\n}\n\n.about-title h1 {\n width:100%;\n font-family: $ff-title ;\n font-weight: 700;\n color: $computo-color !important;\n writing-mode: vertical-rl;\n text-orientation: upright;\n font-size:12px;\n margin:0px;\n}\n\n.container-about {\n width:100%;\n height:auto;\n padding:1%;\n}\n\n// Extra Markdown style (post Customization)\n.post{\n .post-meta{\n color: var(--global-text-color-light);\n font-size: 0.875rem;\n margin-bottom: 0;\n }\n .post-tags{\n color: var(--global-text-color-light);\n font-size: 0.875rem;\n padding-top: 0.25rem;\n padding-bottom: 1rem;\n a {\n color: var(--global-text-color-light);\n text-decoration: none;\n &:hover {\n color: var(--global-theme-color);\n }\n }\n }\n .post-content{\n blockquote {\n border-left: 5px solid var(--global-theme-color);\n padding: 8px;\n }\n }\n}\n\nprogress {\n /* Positioning */\n position: fixed;\n left: 0;\n top: 56px;\n z-index: 10;\n \n /* Dimensions */\n width: 100%;\n height: 1px;\n \n /* Reset the appearance */\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none;\n \n /* Get rid of the default border in Firefox/Opera. */\n border: none;\n \n /* Progress bar container for Firefox/IE10 */\n background-color: transparent;\n \n /* Progress bar value for IE10 */\n color: var(--global-theme-color);\n }\n \n progress::-webkit-progress-bar {\n background-color: transparent;\n }\n \n progress::-webkit-progress-value {\n background-color: var(--global-theme-color);\n }\n \n progress::-moz-progress-bar {\n background-color: var(--global-theme-color);\n }\n \n .progress-container {\n width: 100%;\n background-color: transparent;\n position: fixed;\n top: 56px;\n left: 0;\n height: 5px;\n display: block;\n }\n \n .progress-bar {\n background-color: var(--global-theme-color);\n width: 0%;\n display: block;\n height: inherit;\n }\n","/*******************************************************************************\n * Style overrides for distill blog posts.\n ******************************************************************************/\n\nd-byline {\n border-top-color: var(--global-divider-color) !important;\n}\n\nd-byline h3 {\n color: var(--global-text-color) !important;\n}\n\nd-byline a, d-article d-byline a {\n color: var(--global-text-color) !important;\n &:hover {\n color: var(--global-hover-color) !important;\n }\n}\n\nd-article {\n border-top-color: var(--global-divider-color) !important;\n a, p, h1, h2, h3, h4, h5, h6, li, table {\n color: var(--global-text-color) !important;\n }\n a, h1, h2, hr, table, table th, table td {\n border-bottom-color: var(--global-divider-color) !important;\n }\n a:hover {\n border-bottom-color: var(--global-hover-color) !important;\n }\n b i {\n display: inline;\n }\n\n d-contents {\n align-self: start;\n grid-column: 1 / 4;\n grid-row: auto / span 4;\n justify-self: end;\n margin-top: 0em;\n padding-left: 2em;\n padding-right: 3em;\n border-right: 1px solid var(--global-divider-color);\n width: calc(max(70%, 300px));\n margin-right: 0px;\n margin-top: 0em;\n display: grid;\n grid-template-columns:\n minmax(8px, 1fr) [toc] auto\n minmax(8px, 1fr) [toc-line] 1px\n minmax(32px, 2fr);\n\n nav {\n grid-column: toc;\n a {\n border-bottom: none !important;\n &:hover {\n border-bottom: 1px solid var(--global-text-color) !important;\n }\n }\n h3 {\n margin-top: 0;\n margin-bottom: 1em;\n }\n div {\n display: block;\n outline: none;\n margin-bottom: 0.8em;\n color: rgba(0, 0, 0, 0.8);\n font-weight: bold;\n }\n ul {\n padding-left: 1em;\n margin-top: 0;\n margin-bottom: 6px;\n list-style-type: none;\n li {\n margin-bottom: 0.25em;\n }\n }\n }\n .figcaption {\n line-height: 1.4em;\n }\n toc-line {\n border-right: 1px solid var(--global-divider-color);\n grid-column: toc-line;\n }\n }\n\n d-footnote {\n scroll-margin-top: 66px;\n }\n}\n\nd-appendix {\n border-top-color: var(--global-divider-color) !important;\n color: var(--global-distill-app-color) !important;\n h3, li, span {\n color: var(--global-distill-app-color) !important;\n }\n a, a.footnote-backlink {\n color: var(--global-distill-app-color) !important;\n &:hover {\n color: var(--global-hover-color) !important;\n }\n }\n}\n\n@media (max-width: 1024px) {\n d-article {\n d-contents {\n display: block;\n grid-column-start: 2;\n grid-column-end: -2;\n padding-bottom: 0.5em;\n margin-bottom: 1em;\n padding-top: 0.5em;\n width: 100%;\n border: 1px solid var(--global-divider-color);\n nav {\n grid-column: none;\n }\n }\n }\n}\n"],"file":"main.css"} \ No newline at end of file diff --git a/assets/css/main.scss b/assets/css/main.scss deleted file mode 100644 index 7dbb6a16..00000000 --- a/assets/css/main.scss +++ /dev/null @@ -1,18 +0,0 @@ ---- -# Only the main Sass file needs front matter (the dashes are enough) ---- -@charset "utf-8"; - -// Dimensions -$max-content-width: {{ site.max_width }}; - -@import url('https://fonts.googleapis.com/css2?family=Oswald'); -@import url('https://fonts.googleapis.com/css2?family=Open+Sans'); - -@import - "variables", - "themes", - "layout", - "base", - "distill" -; diff --git a/assets/img/about-gh-repos-webpage-1400.webp b/assets/img/about-gh-repos-webpage-1400.webp new file mode 100644 index 0000000000000000000000000000000000000000..dd07b4fb96a9e644d1779d36dd13bdab12065b06 GIT binary patch literal 16708 zcmajFV~}V;mbP2AZQHhOyXur}p0aJ*wr$%yW!pBsGt<)@Jv|Zk=8wI1#9on+xpJ*H zpM;X6m>7>B0D!uvkb;^52LZ$1@7p@SY(OdkU_4;Hc!_-J;-ZTD!W4*l1tdr_+fR)a z2ikYPl^~e36C>-72kV^=`3>{Ni`06rK@Z~Dlh4@IUKigZZ^565chg6MWA>?+ubXT1 zF8TA^yKW_KYHua}N#En2pPxT_z9rfpe=4uD#0!0QJhbm)pT4o)^k1Jt-^8!bm3}h6 zB_Gv`dS8F0-lXsKzG9W^rhV(5$zHwuVwc@=zr>doKh3^;e|gRF@0@=f4&lW~D=505 zD7~P$PEdMAavz~|4`<&;==Dri`i1W|x{OxyxJLvyUpZ~9Ox`0DLbsPPNqKUQWE_m1BJ@t}})#&n} zeRLT5+K^{;R4C;|_^9R63J+Lc8h$VoB!fQHU>StyjC1Wz28e~Cm77Py)3hIMksr3) z;H-^Sip6EINj|1XNvdqFL-rIHRxB!HM8Nm921><&+wu3i<59xrLD?BiPQsc zWh?0wCN|qGw4H}UsCj^Ws0rBn(^;)0lY+oOA9CKd7Pi(?>63YCghS2Y<3H7B4m6LCIrrIta5x!s2(Ei9eSscFd z>QXApg870R^mWB`j{Lp}W&A|M(~9fcDPY}$Pf@$Pldp(vKAUf6pLF|kN7ajrQz>VB zWwuY6UsZem%**{`4WRn-o|^W-cyu5?rm_$GJ>|W>_BKEJp5V*!8NJtQaF(U9&S$UI zo+Et5l{Oj{XB2DAt!ft)Bnm#&AkUKSwrV{~ImMo)+DqfuS*FtmhPrq!z0+!X`C0df z^hO{e_Z4DHW^xtCJg!E-FnA~1Wi=$jK=%AMh!^+pFg=aw8VM_EP+Vr~F1Ec^9NQ$` zL5D#e(nBMuM6QuzulDXX!aX>=>*%$&muXy?NXrOn@j2q5F)`uO3+8h3z(xyYMB`z5 z2o;h>DL60$55AX^c3S62{~A(sK~ega{8zdhy6Q4xh5zatw`2l3Zw%{xe|<(e!lV zDQUQF|D(qLwEJgbtIvp+eH?^(<*PZr>TI5Q@=foiu&ql<(Sbt4Wv!=Qtp`N*{gYz%?e;HJh7!^Q3;vxbBDN5(=5?%&`HYP@cW#p(__ZYiWo4#fElsVfI^7NO02^#4b#yI#Uk_8JHp&l?aRafDr{M9c+2%_R+-P0nj zTf1riT?15AlixyQ?1~|_Uhw6A;KcM16d04mcW$fBL=|>@m{$@(8*)Spyg&P?TV35N zz#m{AZ*IwF$IQv^D!o!HpZkGW1;f)0RJjglqVaBErp|w_!J!T3lL~E?HVhi7zd6)v zt}WCKxOR`j)%ug_c>URr|81`ecT~FGK(1*CVE2S3MEsNbDDlg3b*+SdPf_D^_kT(6 z{}TGE{F3N``qMU2^^sagu!CZ~nQ_T*5%;5Hu+I=I_+yTOt2;2)q`ML-IZ5SiuRE4# z$+=-S0X??nONhgqB}o?J!K_h@q`@Sm=U(^oZa*cnw(b1i+KkYee!up%iOqI99`DE5 z0%c;d*fK2LS@a$Uch|^Y! z{F^%j-(|-Lh{j1XU!x9G_sf8%IA`qNxif{kXi>o69O;+FSu3m&j=$TI61_5`Gj(GZ zR~}FqeH9o&@Fm#u;nW7uizvM!K`W3nQJc)>c?dTBE_(yRLRGx2NkUnu3H5Ue^e4J9vS8Uh!*D? zh(H8!T0B=CY1u|1T?IWt701CUsQ0VHVxu=vSH&IBc>HKCoY&`}?O`O~}$n z8GeNuanaYbjC#kKe)md0CH?O#f9;t0RH>KODwq5`4&d9L+=m45J3%*R(zg*iCKF@A zplD|?Zdbs9kWOm?PFxddAJroGN$J;LHmKU$E`EOc=4(<9Vpl2+-`8)-7UOwn1g>o| zg6Z~PCCBHGum~XHF?zbG0rsFg%IB?;#+DEH4X3w^b9RgyN!UKoN2F~RaGHskQB`L^ zIhoP&#Dx{6b(AutDyWc2jfYkE5H?__VZC4Fmj>AOgLTO9PXsA+%+Dnx6xNZqd|@0A z^L;JCtj1s+lLVZ^a_UAbR*^jQhaJw_oCz@+^O-$vz}c%ZyQMGetKxP|H|HfWA`Ve; zLUu2W@992v63A1{&`Nx^2rlZ~Z$Bse2QmCN;}CM2S8w+$3HNj->?9juTTsqZ^>Bt6 zkN#+ucds3bG=rl1{|^~;5IacHH6Hzc;nKeZ{RpMY{PEg`Ee_VQRQUrh`oyE=6%+s{ z>z^|GFCeM6^G;VqUCq%_E>WdHps2@WEKPD6;TgtEfF13oOm9-rQ2QBay2VEN!La_} z?*l3vWdz(lI4SZV*F^wrlYHI&4{}@Y;!%^-)>eBHlCLajv@qDSC?6z7wXA=|ZzTLrChsx#S

mGNHa{9zibqL7-t$N zuQPkS%w^4W)L$d~9~5fEX-)PcM~Qxj-nOA0K}rE5h8MHp^@%>+V2;%#8vK9Ywb;#v zPPt9xL+#(k>TkouaegSz)dWHmCc{po54~YcO-06Vp>iuh(2cDnlG#pB1fNtIig zyHJoFphrME>aqoI^K$@9;^Wi07s&&OGS*fl?=1eeW*0rcdhCYH7?g(mC$Eo^4D=_X zOcHrO4{sQEbHnCR-^3cV2njg2@#|bGDQ->t8+HFf`V|s;h=cban5)7<^OhDO4p7_aaDr=V^fY=6w(K<;yd^qPr93k{LQuJj)MLe@<( z6h|$u@wIi~JkmDq=tt|$iFAt|?5Ν?GuA6YFzirzt!6^}v_|w}nYX@heVsjg}E( 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 T@XGJMJPrUsMDyS8zmNY1Xb5@v literal 0 HcmV?d00001 diff --git a/assets/img/about-gh-repos-webpage-480.webp b/assets/img/about-gh-repos-webpage-480.webp new file mode 100644 index 0000000000000000000000000000000000000000..3cf24d497edec36ebe9baba4308ee5b08303f999 GIT binary patch literal 9132 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 literal 0 HcmV?d00001 diff --git a/assets/img/about-gh-repos-webpage-800.webp b/assets/img/about-gh-repos-webpage-800.webp new file mode 100644 index 0000000000000000000000000000000000000000..dd07b4fb96a9e644d1779d36dd13bdab12065b06 GIT binary patch literal 16708 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

mGNHa{9zibqL7-t$N zuQPkS%w^4W)L$d~9~5fEX-)PcM~Qxj-nOA0K}rE5h8MHp^@%>+V2;%#8vK9Ywb;#v zPPt9xL+#(k>TkouaegSz)dWHmCc{po54~YcO-06Vp>iuh(2cDnlG#pB1fNtIig zyHJoFphrME>aqoI^K$@9;^Wi07s&&OGS*fl?=1eeW*0rcdhCYH7?g(mC$Eo^4D=_X zOcHrO4{sQEbHnCR-^3cV2njg2@#|bGDQ->t8+HFf`V|s;h=cban5)7<^OhDO4p7_aaDr=V^fY=6w(K<;yd^qPr93k{LQuJj)MLe@<( z6h|$u@wIi~JkmDq=tt|$iFAt|?5Ν?GuA6YFzirzt!6^}v_|w}nYX@heVsjg}E( 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 T@XGJMJPrUsMDyS8zmNY1Xb5@v literal 0 HcmV?d00001 diff --git a/assets/img/computo_concept-1400.webp b/assets/img/computo_concept-1400.webp new file mode 100644 index 0000000000000000000000000000000000000000..5a4a8e09f537e5305a6269b9cd9abb7c534e44e8 GIT binary patch literal 10678 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 literal 0 HcmV?d00001 diff --git a/assets/img/computo_concept-480.webp b/assets/img/computo_concept-480.webp new file mode 100644 index 0000000000000000000000000000000000000000..0d2dfb67924633f3afd794d5d4abd5c983aacdfa GIT binary patch literal 6902 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 literal 0 HcmV?d00001 diff --git a/assets/img/computo_process-1400.webp b/assets/img/computo_process-1400.webp new file mode 100644 index 0000000000000000000000000000000000000000..308490e2e8d914024fa1163b9e89248fdb07ff62 GIT binary patch literal 24530 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 E065mGl>h($ literal 0 HcmV?d00001 diff --git a/assets/img/computo_process-480.webp b/assets/img/computo_process-480.webp new file mode 100644 index 0000000000000000000000000000000000000000..061bbf1a1ffacd8b3760c0233f29bd8aaa7188a9 GIT binary patch literal 11374 zcmV-!ERoYvNk&FyEC2vkMM6+kP&go3EC2xTya1g6D&PSl0X~sJoJ%F6sUoA*+esi2 z31@EnM>H@im}KFbon3C6ZY{o}lihQDTkZw(0q1AvuX;Y72hTs{{Xh7b`Tq(0v-^MD zFJi2z^}nhoc7BTUxBid$e;IxT|B31g>#x@zSWl7c@zFoa`UiT^^{?2kPv4&Zzvvg( zuh_qU59dGK{R;ny`uF7}_0RVov;P1;(Z98R%KNYXUH{|#&z*0peS&{vKm7Xb|NsBP z@H_V-|F8cKh5y{&|Kx;x>*-)U1)#-%OPc_T0P0ZFmjHM{I;m9>@ld{ikQDxf0v#bN zTf~)v&*Qp5LrcvtudI+XIb{%0#t1j+Kh|f54@g74rgsPYmaM^RxiYhzy*6UuJ(h%L6Yv8PRH?rn83 zXSen5&th2sd=>cD2fb=Vqt+omrDg09#NwHZlRQ>}{W^?%rMCkfV%pP@D>dA$zScZyqnh1c%=NFJ9vC8buvf8t zFC2{JPObQ3>7qi*;v?l7NAe0GeG*XZr1{CWj7gi>vsf60qR>J*kcZ6BavDK{u+6o| z%hB6>6YzqGv%w=6{oI#k0|uS!!=&&xZ+ALXc=?<0Elcx0UsZe?XfM_HXU&RFD2ok< z6ip?M<_H{e5#~TdVAAhz{jy!5hdT6^s!?_6yt)3$?I+}LK`VX73{MJ3 z;d4c|OwC;M@F~qG6`SprVN|N9D?>5dB-K3;V$FTX3mTgRj_CB!OPbJMAw){{Jf|d| zw)~yfEpdDNTRsfvS)^`h4@p8LGRu=2$M#$CM-?R)qGF35vh-*x$XrAp%K;lSGdxY1 z-&pFI%{Lb4cS8##r8**dh6cPvH;jOpLs8UPwlLioWWC9(yjq2`5GVeG$1?y8wxyl* z?HuIbjEdSoE2=jQ%y^&^t!|06!VLFG8ROqa zxRY~cyoc#7^Fq(4(uOg9CnM2l`XgVUh@LSS1baohF{6h63Kbx2-T1n@Esmu@;{t@&sO^BAj~q;w%A_jG}ZOO zEfge92kLBprUcE8LtBmro?Z9lYgo-Xrobs{0@ zHPIHKG-h8Z-FS%SfQ5CLt5p)7J+T6KjeliD3|~dkd6shpv3G-}CIY{avwY&}L_^YR zp{^szCybVq1;tmfjA^&*?|3?Ek9C*VBMFGSidvZ6NQin(b^Ud$^NXv;?ECgmW$4|w zgn(t}4BLl`pcq`#^fGg4>a4D{o^f>|A?Y>O_0?(qQ-a%@k7p#T?BH_9^f#pZYZ@ed zq1yhs)_KL$h=-)tU)NgCIJ%J#^qTAX>sjX)QX(FcU4LC`JkS6D{`9^=HrYrHz=a~O zqQ6a_={wKe_p^-WyZxxF^vKi39cT;3pea|BGrr9Gk6l-jBh&T2r4b4fPtKhRCtN_k zP#t_9`o}y`LD|u}WB}ooATc|CMEguP)V7Ytsjp7{(-W+)OoJ0a&qgCF9$T`ayk$d7 z>06vc8h9_WRODwjn+)72ITj;U*Fzj4OX2Bpgur>^>i#@0IBm;L6+?d=W<(nxkD1{K8hYCNztN zo9b15D^wyLNX*LQ*V;{c!$0hYI)UkEbbDmKfen4}5~JNq|u#Lq`?M`;lD& zVY)CFDSuUAfF5~+9nd*_+2uQyPduirPr(p*rN#EbIzCF~nAqgGMtdu?XbZv+1~Bbm zTk>n206arhha2X?8_7L!2<*7N8FK0GyFy;dMz4kh2jm#K^_bn)r08{{E+X42v z=|PH6T>wz_rj6o}i~97AA|{DbU}>JcOu;k6-I+ek8`FCo% zl94x({CY;Ba{B5wIF^7v^_oyfT~N1;Hm9u_BNl;f>1HmRu#&n_|HcjQzVjBW#-|r7 z_A)W-aEW*tAH+!Q1_SwvZg1OFVX^_3GLCt7+i1cvkJLJ`+4zvZIJjAv-|&)N)Z4De zOTHLF4cv40TF`Zt=bd;p27)BnDfxMy%eau{2Y6LGHmpS}QnmeaOf;I?`qiO(*W|Ss z|M_akSAlC(ub*}tyJBOkielRm=Ro1pV@zvH26$tH<^aYCXj1 z&1nU~`C^yq;i;f|!yIlO$=uT4!YXXhYK9*?waz`4blyikiUI)$#^1P6 zvU*bUNc@v(wLAhr>^1M&& z%s5}y;k$gs;j5bmEJUut(EER3f+DHZEugDpklxOwi|R{-Gx=v;!RG08qu4SS5*;>_tDb268lB0~>^rz9Sk+#dC zcOykNGdPOl^4vu@_zV~}gNZtKuh^Yt@3^?K1S!u&G{Z|AkU2FzFY6QjQIS-xjM!86 zvfkg?UKCEXGSB!A?4#tO!L~p18@Z?x6~)G;3_|;hiGS$6yi3LbVoAfZqq>a}6s^jV9rM99Wk4C5|Op)NDz=@7-e}Liu;{EH>#{_REk6@9W zCZ-bGmm9NBU9_0$nJLT?6@D469r(X;&D&qvUhIci%< z`62aq>&98RyABz}i8l8tf=s1IXR*Q)-OL{(mrSbwN?yf2DqfFfMAl+$9dU-~=s1Q! zF~Qj#jYL@ST@HW#KAs1NKb$tcn@Y?jk=?&bbWMfMvlXHy(zM&8As83KAn3 z3D54k%a19WI@U#1?L9W)^Te8x4QVCe`K45!VX5F5QDunG$m^G1 z21v5xq)jmXQ>>(_7;*=Np{H4?km8oJ3A;DNZ|&Ltj23^{D0`E=^3yhtcM6Pqf;vdz zT{cLXN(?9F>0y(at4u>6M|p#yt@w7HO8xyU+s$XZt8OS)o#i8ZhZe*SQ3~Zbx0c}l z-z_FrBF@>^3ie9FEh^#BVD@z_!RmTTRp2fjz&1T>_9DR%@uMtfO^PEewBcn3|+ zsY)n|3&R_{YeNZ!TmF(|Y@QwlYK_Keqs+?M37{m)1NYGcJ*JT^1+QN{;^;&ODppd3 ztdG$$uv8c|S#U@h@IprfIw&;qb+k#>3}-R4ia0pp+>1=5=t6KZ)mc5)9YM(6Y195i ztBzJb&8(`vC<&xHA8g@`S51&k@{yL&9YeAif8#;Nd{+YHx@5s9zGTUjgDcwE%h3_6 zci~a7KI-D8iLvS(4@yMc{90rpx-EJlrBbNQ^(j1Q(=#I!8;hpNi; zP*+6zsv#fz(4Xdw(r_$Ebuq@W!H+7g!lZ9_VLE6{ZLWgEtBuMi76)JNrn%5R8)`u9 z=R7mOm*iW=W$HM5df11twUawE^!yV8HP4&E{?H?*A>3$82W-Sa`2?@?UrvA0>i_222M{BaHv-Ng#6i4x_i zUcqOfzjB3esK#*A4q|)YRZ6=D3pEDLdL}Kv&}8%>Q801#Sk!T1hGublXcCWzIMA5) z>2INkWhyJg&*ToccJ#NgI~q=qR{!xqKD~?B{(#~5mrEW}<+u?TZ8~29ZT&BGYUP@R zo-1U8lb-xU;jvhSq#|T$D+=y5R5rP-g#`Ewgr@XqJ|WDdw^m2H)Fl~(?!Ram+~zI+ z)&tw7~C8=-vVo@cJn05|U0Ut9C>EhPdi#(fQ39}-V1WdbpVUd&$lbD`QStSAR>95DBU`?sX~gwTcMV|istp`jbWRlgLhLk3YbaQ_!Y?gJ z_W|25Q4W=T_#J}p>f_@N%mUdTUS5zd7R^a1AR+&j*xoPS;Ql@Am@AgW-4FHm`+9i?5(UCj+pSbDLM!(m``A=Z^TF2mLjz9d(G2 z2&%41MOeWgQ%NMnv}N%7ajj*lw0bp5d+=r7!&pmLr~RMxljd<9zZf9G3662a;S~yeYBl^f6Kwn~f9I(3LfT zFN!b=G)!(s^)*1-#R|$8KdKNa{MYY`FcY?qM$EVq%>=QyR$Mgql!!JXiZc{5XeuOTOHkFQmau=d17J6 zH8^F>llMGF(bH#Av<7x2KR;orOtT0nK|CP*<$lDhOA3&uH568)Hkzd&(sC<;3(B0} z;Y)_4C;Ln!v)pD#^w3w@JJ%RcV<}6m9k)fiawd2Ck0T}pVhwL%;o(kYt9d0Q3pNnG z=0S1N60t05W}iGmhdbwNx1YIW#cpxyULz=~VX!DBWO%=uPc|*-H59-KNVeKPE+1&v zqA7V%3!tF}?dQWVxMh9V9^F_LYoG`ov|HYsDCYMT*|8mO-@d*wktbRx#L&y?jgj2{1#7p5_-fWo! zO!lxI9vEg514fR}9`J0_}GWh?f4yqCf`p zx$@Y5pk}l5OLNP@9~~JIcGB&4)h#dJcNlP0tY`=FT22UHi}5`KkP~^!;NBm^Lr{<{Ai-m6MAfxnT0I5F zi12_$4}~Msk0d%G;lT1av^?MeilJxW0w(S_yYz4kb_QAw(S5zRGLQWt%wVv?_8m_WWmeRxfA~MqtqtvfLT1H?nM%<{VwZHR41w6*60(uVANvRI2cO z1nyTq&mHnR2EthD<3tt`_Z49dL8vGDt(%Sa$gEAGfQwa>R7~L+BMZ=Wv0`$EB)Qop zU!k6`lExN}kzV7SxpHL;*1cmf7Qs{fEF6!fzF?c)CKGeDtP;Y2*DR zC}a~qV*B`;H5lRiY#odAYPQPtERh(r0T{PN1Z_haLN zcqqrmffy5$i|`5~Uqmqs5Ho4F`ltMp20)@q+tX~IIo}aE-PZg!2kX7~al=ShOFI3# z4=lyNozAPTt#T)jaUkka+qLtuFcazd zyMsmS%c*8mJ#Wv-Ms};_N2U=s2suBNM*@5#^(*(5JrSsT9rxc4Y_=31lD9p#;CBB|i^;O`K<>pFhSB|;~g+)>&aMqNkV-VPn;p_fLgjO?n&P17%|`V(ls zorAd2bTha9jMp!4C5X5{t>vWe2T9NJc>LD;Ctq1W=zko7CB?e{+ExJdfMl0Kb~G%k zdEdW@iO799S()$r>HxNd0vV8eh5p39=4sajC;Hs7sW&lS*astyyhvFkO9T%UKVC;= z0r>A-RWL%{H!`}F$1bhXQwW>S)o9o?5syz!Shm)VJ6Ff&39-+k?Vireriy8+n(>;V zSyR-|r`r%<=l4dMuD$BI!PfI)k#$0!ZgV%?F8s~)%(6>UcnT=0vlo@`^LojN&#NxZ znq?qkv|6k(9c5L5{kQ2!eq8O(Ah#l&YSRpmC!$r!eZc?=Jm}#q$)kKRSL~0p_<{|X(_sz##7%aIUE<;jSysJL=~ybjWV9(!n0;5j_PT9y z(PqRbB@g7;=C!($

Mtp|K%X?>a;isp6Y$`J*%0qiCFu<60z5oR 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 z w_vY2Cb0C#DcvfgH60(jj#0Qj04}w23;e5$Y3->Tv&qf;T$N&HU000000NGM2mH+?% literal 0 HcmV?d00001 diff --git a/assets/img/computo_process-800.webp b/assets/img/computo_process-800.webp new file mode 100644 index 0000000000000000000000000000000000000000..308490e2e8d914024fa1163b9e89248fdb07ff62 GIT binary patch literal 24530 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 E065mGl>h($ literal 0 HcmV?d00001 diff --git a/assets/img/computo_process_alpha-1400.webp b/assets/img/computo_process_alpha-1400.webp new file mode 100644 index 0000000000000000000000000000000000000000..a5c7f1f8a4bf6adae68bdf3f1875b7c44b1cf85d GIT binary patch literal 43030 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

-QEwgJPNEpFZiPKA(w!)I1-?BDD0^T>-| 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 E0mJY_qW}N^ literal 0 HcmV?d00001 diff --git a/assets/img/computo_process_alpha-480.webp b/assets/img/computo_process_alpha-480.webp new file mode 100644 index 0000000000000000000000000000000000000000..280e5389f3410cbb8f2e1f59e9efd9f1153fb9f1 GIT binary patch literal 23674 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 literal 0 HcmV?d00001 diff --git a/assets/img/computo_process_alpha-800.webp b/assets/img/computo_process_alpha-800.webp new file mode 100644 index 0000000000000000000000000000000000000000..a5c7f1f8a4bf6adae68bdf3f1875b7c44b1cf85d GIT binary patch literal 43030 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

-QEwgJPNEpFZiPKA(w!)I1-?BDD0^T>-| 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 E0mJY_qW}N^ literal 0 HcmV?d00001 diff --git a/assets/img/computo_process_authors-1400.webp b/assets/img/computo_process_authors-1400.webp new file mode 100644 index 0000000000000000000000000000000000000000..1b628da23fd9259dbd8b7abfc7bf233b7489c636 GIT binary patch literal 29154 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 literal 0 HcmV?d00001 diff --git a/assets/img/computo_process_authors-800.webp b/assets/img/computo_process_authors-800.webp new file mode 100644 index 0000000000000000000000000000000000000000..1b628da23fd9259dbd8b7abfc7bf233b7489c636 GIT binary patch literal 29154 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

%i(Jx4So4YFG6N%{5cfPi z=seOn)6?=nB9H%A6zDR@gOJKAzuAgLl)B0=*ev*s-@Y#vU4t9k9atxottT0|jbdXY zL5)<+Y6xWI?&?$RZ@jmmK)ZU|r|Jn1wq-AsI4dW`H~Vgp+x9kaQ80#vJM)-)N=pTE zxmr`GfxWRdJ-^iy${5VG3H(4}nYFtjx0l7sduy*pnhL+8xm2jv%#VGuZdIm7vHe=3 zNRPreYZjlmIprGmz%@Q6g=DJV0jAGZSlGn5KGKM9U}HZ=uGQ8@`6~Brit}(ZH74N5 zjT-BSmC&_AE0hBqSxO!bFrDkD?4y)qwz>(XpSpUe=jpb}Mjg{qW59%RoeUdeY>&f; z!}q`d00twfdC((&&^KfM_L)I|o&P}MfB)NI1uHenWIL8H%OS=4Ov#7%_2WSX;IU`3 zs-tF_4pkw)1*Z5`oO&U?2A^8mY0jij3sk0}4kD^K(5x@{x?9o}Rv>cHQA`rn42)C* z>I8g_z!vsh(5|G!YZIk7uxVZtbJYhVt6-05(p}I&=jmUe5~QzVs0dwIiSofk;i6j# zdHbJi`jx<5-7oWU3!|n;f224ZZSG zA?7phv$Y*%^6+xW1541p755z4va_D|zFd&ND%R6Xs14&F)#&sVx;Yfuh7a-`mQEkR zO=hmPiftWJmAn<4Z;x~C#l(*R;20TS_yG~OtOt2=M)aKTiv%S?!v)o2JZNT1 zQ7%Pb)@dm{x3rLA-uC6MKq_$}ID3A3XIGGU)#88rB0W9d+gVrjgR2GwQRg7)FOS+- zN6S?HJ;>qs&3Sczxn6VRLn9FmjLTI>AocGA>m_cf!b^k&72&!Tx91r1F%x)cjtXmA zLCVKa!f|{ZQ7P9Ik5+yUxZ48j?FCLX9OVQk7MlP700G(qrQx(+Qx8|MEig3F3S_Bo z>ay$HY>Laep*&}v!>aG*sxgf)u5Kv+@a6?I!|96M0B{xn zuD|`epQ-v4>Q0&QB1O6Mf7csTY^g`w0z#77{~FL{NKcQ+?Zv4TG4dk0-k49mdjJ3s za{(_QP2a0%ia-DW0000T(`6}u1NihHBl$$GGBQ)JLZ-_s{Fl=4B^_+K)Bb`$Y6kr| z-8NIQJkdJI!^h|hI1LU$Q#MlojP>(q3aEj3@-g8>xEm{tuF3KE6wJ=B!gtbh#B~W7 zBHo0pH|!5U$?#rL`(h9>Yh8Exi`HUA3-ITK;` z$(}zXXTtjm1rtakk;{vSdW2ZS67Nu^rS)cN&gPjNfT93?qnWax4q0mhnnC~V28UA! zXYT&&h@s8~(`LV~JyAUhImbb%8u0F(;`U0000000000 T00000000000000000000;88t` literal 0 HcmV?d00001 diff --git a/assets/img/computo_process_authors_alpha-480.webp b/assets/img/computo_process_authors_alpha-480.webp new file mode 100644 index 0000000000000000000000000000000000000000..add6b4924b185504667f9f8c534e8febe592791a GIT binary patch literal 19968 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�Yo+}7Ytg$LZb&QMC9;yZHBIJew(%#f5*RfXb$Il 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

%i(Jx4So4YFG6N%{5cfPi z=seOn)6?=nB9H%A6zDR@gOJKAzuAgLl)B0=*ev*s-@Y#vU4t9k9atxottT0|jbdXY zL5)<+Y6xWI?&?$RZ@jmmK)ZU|r|Jn1wq-AsI4dW`H~Vgp+x9kaQ80#vJM)-)N=pTE zxmr`GfxWRdJ-^iy${5VG3H(4}nYFtjx0l7sduy*pnhL+8xm2jv%#VGuZdIm7vHe=3 zNRPreYZjlmIprGmz%@Q6g=DJV0jAGZSlGn5KGKM9U}HZ=uGQ8@`6~Brit}(ZH74N5 zjT-BSmC&_AE0hBqSxO!bFrDkD?4y)qwz>(XpSpUe=jpb}Mjg{qW59%RoeUdeY>&f; z!}q`d00twfdC((&&^KfM_L)I|o&P}MfB)NI1uHenWIL8H%OS=4Ov#7%_2WSX;IU`3 zs-tF_4pkw)1*Z5`oO&U?2A^8mY0jij3sk0}4kD^K(5x@{x?9o}Rv>cHQA`rn42)C* z>I8g_z!vsh(5|G!YZIk7uxVZtbJYhVt6-05(p}I&=jmUe5~QzVs0dwIiSofk;i6j# zdHbJi`jx<5-7oWU3!|n;f224ZZSG zA?7phv$Y*%^6+xW1541p755z4va_D|zFd&ND%R6Xs14&F)#&sVx;Yfuh7a-`mQEkR zO=hmPiftWJmAn<4Z;x~C#l(*R;20TS_yG~OtOt2=M)aKTiv%S?!v)o2JZNT1 zQ7%Pb)@dm{x3rLA-uC6MKq_$}ID3A3XIGGU)#88rB0W9d+gVrjgR2GwQRg7)FOS+- zN6S?HJ;>qs&3Sczxn6VRLn9FmjLTI>AocGA>m_cf!b^k&72&!Tx91r1F%x)cjtXmA zLCVKa!f|{ZQ7P9Ik5+yUxZ48j?FCLX9OVQk7MlP700G(qrQx(+Qx8|MEig3F3S_Bo z>ay$HY>Laep*&}v!>aG*sxgf)u5Kv+@a6?I!|96M0B{xn zuD|`epQ-v4>Q0&QB1O6Mf7csTY^g`w0z#77{~FL{NKcQ+?Zv4TG4dk0-k49mdjJ3s za{(_QP2a0%ia-DW0000T(`6}u1NihHBl$$GGBQ)JLZ-_s{Fl=4B^_+K)Bb`$Y6kr| z-8NIQJkdJI!^h|hI1LU$Q#MlojP>(q3aEj3@-g8>xEm{tuF3KE6wJ=B!gtbh#B~W7 zBHo0pH|!5U$?#rL`(h9>Yh8Exi`HUA3-ITK;` z$(}zXXTtjm1rtakk;{vSdW2ZS67Nu^rS)cN&gPjNfT93?qnWax4q0mhnnC~V28UA! zXYT&&h@s8~(`LV~JyAUhImbb%8u0F(;`U0000000000 T00000000000000000000;88t` literal 0 HcmV?d00001 diff --git a/assets/img/gh-pages-config-1400.webp b/assets/img/gh-pages-config-1400.webp new file mode 100644 index 0000000000000000000000000000000000000000..86a67c56e5fd40fbe056adbd0c0464d6ca54fc55 GIT binary patch literal 11892 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 XM+QHN6+-i|66UVdy{s7i=i2#yqQmTF literal 0 HcmV?d00001 diff --git a/assets/img/gh-pages-config-480.webp b/assets/img/gh-pages-config-480.webp new file mode 100644 index 0000000000000000000000000000000000000000..59ce9ead81819df62c7a355733a8cb8e5cacbb00 GIT binary patch literal 4116 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 SFzP@;Cqf#I)-|$F0ssIO*dB%e literal 0 HcmV?d00001 diff --git a/assets/img/gh-pages-config-800.webp b/assets/img/gh-pages-config-800.webp new file mode 100644 index 0000000000000000000000000000000000000000..86a67c56e5fd40fbe056adbd0c0464d6ca54fc55 GIT binary patch literal 11892 zcmYkiQ;;rzjy2l0ZQHiF+qSXWwryj#ZQHhO+qS#E{?D13x_9!Fhg4RyQkAMGOG!xB zFaQB*h>IwyD{>JT{zp$Z0?GlVAp+$D7DyD!l_@DIqAW_RsJ};nwzRu7QcWv{3Ap-Z zX|glY!!-TPzSUHXyA^~TO}^~{{Eoliw?R(l<%Ad2h9jy83L)|;XfVEYFay$l2{+f? z?%;gXyq8{YIdj5KHJ*NlxHA2%0hq&iLH@VDF|Q!sLmz!v2Gg&~)&z#VGe2#w)+4`w zyhlI@Aok}8aQDF&KzN$B*?s#<_{Dr|{~G_0_bE8^4eT!jc>1mTp6eWY>*e!ne}(-1 zyf(UUW4bXGGQnp%0du&SId6VFPrz~&KtiG6^ES6U|Wegz#uiMXjR|M?nq#$|NJ$u>w zr?c>mNp6NH!Oew8zg1eeOTm04L!`bfB?)`2hCdR&83AwBY^_NUY zT(tgxJipa^roi^)0Dx%4bY|%7gRKrGm1DbsHVkue`6N>Ux&`Sio;36f4tfG=NR~bj zLz$dh&>zAKN-T($f6@umRP35@UfzOfnQEL{Jz9o$rC~!;FUy7o{?8 zaLu;z!7J^;g{mn*#1r{K9{D_k7}3P;4io=xw0QqgiA*Vv8Z+^wN(g^HrA3{bK5w%; zA*qQR?JpH`uuRMMM7TqDnd)7ilPyjh1D4(W45vK&+9y4;P2vgCzO-K-TMQ>)Aoqy0W07`PP8&8~&_k{VbFyN62x|yCjf@& zRB}PEs_h$`i`%G$C90#a3wiYi)}C&GJbr5K>_VsAbjW0zV5!MwJ*Fr_xbHT+E78;*m&J#(me*d)!DerP5O`a3!#i_a&}`;5O2vUi|LuXfPeeC5<)AI9njo z+C!}53q9j14N%6rjLH-frUY}i$Bd-Ki|mD7P}Xxb63of>A{Qd2izexl9v)JCBN7TSWoUOWtpA87qY?DI;N_{V}a`zMAb!{Z_DTT(9+-sK=ljyS<7 zX^1A0m}EXLDZ%e4VCl}^kzx=s#hH@a9`9NQ=Bw8(D&np3L0agwTFDY06G2)A@i$-z z6#4W%u1r*YkI$wlc(2~)e+I26DQOrkJCzU zd8pz5KT8g8w{0t2G;*c=;G%0b+3si<<=rEevK9@YCGvSPPWu0@3#fR5WsuQP+BPQ= zfl0lWk_fCTJ4y1t1v&!%6eS=3FIwC?{4I%g40T1(u+(ZUUqOrui!R?$k%t`{y&+<{eMwI={bd6H@bx`DiVnp z8}hu~Bn<&vhqYwQkTC<&@m0xsh5xU$(ok&@dO$VYS^cAOUJ@%m&WO9_%%9b`-!3eS zIe2N5c5VO9Dz2G{rS~h?Y24xAj&g(th>i^OBN372-deBmt-GAoM7u^nfrakhP;&~7 z^B`nN#JWG8W+{os#o%F)JKw^!#4bY0d_tQ-j5O^W9ELgelf@8&2>;WcxYBCaY;R*$ zt%?ApM!HOLrlr1HJH|_8-NfnLzj?lqc8+IOMo}9+W9S;^&+Fh;wLic3vzKe-QAG1T zUN?Q`f8h}U`Vol3l&OhNU)sDj4M|@AZTo+UA)f_mdDdfmG#F)>|E6l|y*Y5&C zJ6+2ImHod)(Lg|erytB+l!-rh`yMbnA$H9h-m;zdz7%iCE&z@qnm=s3MY0nd~Ywxo20%GRZoYHG370s{<~-2Ut0_>r zs$*{FrZ$Ki*8~I@5c1-@j!yE*oY5uqGHUD;LCk%_v<+~%ZvpJi`?77dOUy>@3=~`d zKckk>_tBSM$9a4=1lYg z>jt6|1I_mYKGQy`b@odV&yxcQId=B|UoYnpRo!fN87u7qorLCf)9l|H*zEj83C#MU zH>1Bn3p?zIMs~5b#mQc08mqAmFCy+XhaH0Yi?pLzdv<6n2Q0Z_CSOz@h629yqkrA^xG+19%6OJ-LBc#<|bK;kjUa^o`KvJhp&6-<`iL~BPBRV$_g~Nhk^KTmJGh1>*Ufx-eUN?}6nGn6-F(ok zm|+(D)j}ye2qHhyC~>j6Cl*GH$$eQK}n}hwOe~kC@zI7Z*4+G6oEQ zY%cNS0M`hZ8swAUW}rhNdi}zTCPG6iA8W|1xJ*Plj0IuMxI_arz#gQi5`8O6KcCwG6KQBjPkOHv}Agoe9o8>5&2u2EExJi&^8e4 z5;X2L$R0?vF3C_Pm|>(cVaBYOU3v7$A3>ZW$Z`a!Sa1*z0w3bP77VGOzNe1ERY8X? zCE0D7{zdk0ej=q0FkRFw$6iD%lsU6%Sg%&%U168ehzez^B&ozc;pXOvn}7I&dH>n(ew?vHP3h1@IF7ftln!haA=^r++qscYcuXeyY3 zdj2F;QR)YcTj&w_Kft(+2`1Cw)S-ce?DRbnMg8~BGlXd86F`Mxb7kJ@!aA*D)Kh`Zesnl zt>tW4YXps2F?1a!xNs_Dx8jK6ID@lnfO|26M%Gb)k%P{Tfy=Uw$4t8VC<>l2dmQ;( z;ifq4k&Wb;aXCE0UShSJfz)`!z7xD9w}CKO=1Co&*^`|qhxQ+N;E%)>)3%UUkePr z{6)fz+f+`3*36tq%~NHu3%c}e6vc`DbhZO+y`_$){nTBnEwl--h02m1LJ_Y=Wn&d- zNdG1Uk5L-hGi`PEMf&XI@#r6qW-H|5^^+520X0GW23qz8Fx8nl>l!<9-ggzn4#ZHf zV8@T~C}Fd1EoY+b&6_9Yu1W&zolbHJ1O8T21G$ny9ah|YuZX+9&FvUuF+4BhTiO-q zWy@Q)QG`-+)%FR91q~JL&D7X&7r2!N1A?hB+ckT<+K0`{TcO4$XGC?RU~w`C_8Xd4 zP}e@n&afR*-4HAXu^lb*5;q?dMbp2N4CBHqtE0@~Mz5X(a}cLr8uCDSCPE)*c4x6< zTdSJ2eOl@4(0M7g5!v2qA->=0@TuE0HO}I-!JCl|40s}Bb6V#DmpxN=c6IXHcm4W> zTL6B7_i|({HS`WKkm2a3)hmnB;}dfh#j^oUIJbBarL=0pKxC9`p6U-1$GWk=Rlz20 zKl!U22mEh34=7G^jeFOWj%$2V2jZP0-N#`~HiA1Z#u2O`RG)4B+W~{z-9TW4*uI%w zSITF79L%L!*!eQ5K)L~MFikXhvmuNXlyTvU zkPZq!x(HxRCP3uOMjh9Km=d1c{7wNN!xtSD^V1yV6RUvYEe4{@l}Y>ux2!ufZuUZS zZg!4)r4g{oX|?q9XiTg=D=LV(`es9kZR#`4Y#qDPals(>%e`20qE5w7Xm`4Z&?0&eEZ;Mmb>KH&LX$j6I#>>!`)puQRw zC+vb)*ZpxkY6EZGpQeSbnDE{yMrhw6eUZoPT@zHJ3tw*YA&CE(W!nHt@HzLD^Yd(~ zx4-SvsVUW@*t3MTszY#n&STy)J)7wgOuFwvm}qK-`+MjS`b_2K80{pxDkx9`hN|^^ z+%DjFV#Q7=lmnYp?rZ|PVI2Gg_^N?X3!OgnIrsdQ`K=*n7i|1w2 z0jzI^(cRXz(%(5|Va-^S)sKn5NNqvooX(p4EmszPlVG3Xss#Z_>`hJq<4szS+uZex zrbIgXxM2g{#veD(O7}@pD}rXR7o2L^4qWzp^EpfDpM~jkazO(>tNc{VUcNnQ@wu@% z33aeTU2cMqfa+{5&=dpz=(k>~QRh5tmQx)>{Ok68)>|z$@Ny_0w1HkUiVgLoLxjMX zY`4UIh{kSam#SJg_zi!tyo2hsDgQ}TrpKwJ&9M9#>g-ba7JmQ`ENu;=LCiN0Io$K| z%vS(Lau|J8)4uM($2(6GMq;WsC9nkPp+@?s8;G9Rp-RZ#84ZV}Y(1ghOQo0DIw8k6 z#|}4dPVwlf-ywY>S_#gS)a^t-#_^a0gs zzR5bOPXRt#jnk|aa*KjLnJw*?;B7X$f}>ggI-g)h3)`T!kAkMjA&>(@#7Qs>yvl#3 zoMT(NR;EKHoOFb5u}JX}7byzS*h!fCCnv4Omu>c>rpL`#S6i^;DEz^;ILb6)s zog4Q+XX!;m{r?2AIPV2QCmLKSt-tEC*oo1o`Gu0@`A2JbuITEmM|1kaRd~`QIjERN zvLVQRDN}wAYj#iL{ar3Zzwp&Snz)$U^u6U9^7%RloD?}VhSNkoepq^rJDs0!}X$|p6-qz&@~X|%;NgF1HtZG>~b9;pDAl@=eN(NT4Wc2uwBWa zHKN4;H69J3H81QX0lrqaqqlmPoRaAjZTCQ22!LvqY`+(83_xDjRqpUy9pd;FJ1nPd zNX#IlU{LE1148aMliC+oylbZ<8=AF@*>!a$3D)k$W8YlK#c9O{H@T|BPOb2Hq-1X@ z%#DpmYJ_VDWFK<5Q!bBMFAc{MNV1)PCSlf7fc?~sQQ|L7X-0M&u5b`|bJg%n+4^u- zbDMH|L+<14YqNjjqD9C{h>UJ4j~gEl@4PJz(AXYU2tLigLTkVW8mN9x!YHOHBP+!t zG2FcOs+Wf}QSzI*s@2xXlfIUT-1dC~BnwawEUkxqUM)Xf8Ti>CYkV1c61;mIV1~VCX&O@qn zHk{_jTDep+keA@%7XsijD2B2E($3dNZ>o%lyWXC^u~O9>O`+5-KDcdX=pj*fYgKA= z8$iH8cu?;4ueIJ9(A%M33e~sesbY|khR`sbf{&-)eY7yb7 z_~oe&e574Puflt5eI*=NscVZ_BjyZhpZ7NP$r$`TgT!}!(X|4i1K4M8BB&>pzQCOb zz|kGFYeyD<{u!L)bz1>Fg^q$2y;aM_B>Hw z93b+X;L>~Pbb^mFX7jWCe$*Y@f^;p;cZG)ocz0{FAic_qKdcK2|gl1P>8r8!VSsBsI`j758%AaH?@g3_gGe0JT=hxS_$vT|$WB}~$BPp>h=eCW0w&VwGVLH}Ew^$0c ze01*gc=VSs7VA)HgBse$1oIw`$8g)!Wc5X_8dvn=Wctd~n))tggT#He3U)f5G)a8BIqX$MiZbOxO&uOE@so2yziUr8{QvbDNo9)_UGv!lH%?_m}U zL+**qEri-QFhU}Nj4iQ^Fv3%Kd(LhKQqEFJ_AdmIK&G+=;z(y07rL#IEWL%} zre4nD2RS+q%SdV$J9Dl5j(otWvt@)hNO{o})&=<#uz_g3Cip;5T7vk!v{LQu9Rg0f z&PK+Q0*wI16psKuLXZeREBy2f=mJGlI++E zEWI&-5IvD;pU;mRb*x@cdWK|IZznR4Kf6v(@G(^j6HN4Hq@V8wL5IWE;4+})rsVs# ze;N_0qI#8BRyNfqWgf_ABn{^5A6zGKH)e_sLXt8KWKj5YzxNbI;g*u}->T(hX$$O{ zhPZeg%WCM$DD!I7CD6R~AnOl&w4mVyX>l z;at)Y8^#!E0@VCL7(py4=Hyj4q!0&GRg;J}`CL>*(p&K;)dZ01&>2Km_lkkY(}_7y zeRH|J;P)2mfNgp$3VdeKClAQwkazr87fQL{Lj50j{xN+U;d4!10t6NgD?t_SHRIN| z5n-iU9)#a_FJ{N)XDiSEU#{!*;jeVG&jkhu!+#qO5}2Iu>=iRnJ2(e;eu+^G&@T0W z!I8+YOH!Ta*gDtD0wB$(_I1^n>(ZCcCGIY>S%qpQwLe&W=LjG4fEZ<+e{T#0c&!~E z2gWqGmHAqrkKc@rcha$) zL5*RW+<6q5?-iC~dpdg#BHYC)3-(Ltu@wu&tW_!kD0+549;ilJVMU_G#X|+1!MYta zW(7oOwI^LQsN_-yB81C~J2SB*V=$EXrGy?Nn;DrzH0B7>Wr@hOPb-y1zX6rl49P+w z3Ofe-xD&5xmM7Rw3j^Mr?$++9>rDFM-OP1_e#fR4ou}=w%&54|7nqhOX8&yj>3XC) z!syQ=#>!Usj2C>;g)F;Wzyzj33+)*dy0J_MQJ1@Fn46qnvx7(4vxP2{%lNS0RCIV9 zwc7h$zx&8a*H$2ZGn{t;2a6T;8zmd?1{ZY>_!dU4e_#Ta?&-@CttjN`qJ`oVJ1l`;fQ=~i^My(6d2CJs= z25QQE_RIRdH#CVi_NTsD^5YLtcZ1sb1W#^3D5F604>&gnxcCIf3Zc=;mh}Zj#i?Jm z5y<>-9aH$4oLp-kaTCql6ojsuQZA~++7w{Jas<%EhErS*RC%nlJ%C< zx)AHM1d`2dq*|usARvpbDUFDE5`FzBZ2#aj2(IEdLc7Y>c$DmqBh#MhJiUn19n^a9ura6724HbV&K z`(ANPP;dX>30YFT=|sGCEhv$1X=;c=Q3RlyKCD>}^Rf6WB~+M@m>_3aOKOHOhWs0( z*UU#W44Oq*A)Eo{d3`FKrJ?SIMngGMZSMCA%DB~m_qOukfAiI__2$fhl^0 zkO^jFuQ2R~t-LC3W9oVD!Qn6`(ktnS$+NUqXde@qQ*=6XUTE`BYF*~E|8&eCA7I}c zur*!CszqlG>)AQ@N0-x{jH}$4bhzHzr8RLDd$1{3b4sUU>O0|w^bO4zA>>-aimqC` zat6^ob{Qa$xq7U_P0I2o3XQdTSJT*y>jlW5dbea$mh+&^V->)7M9^R^$wsJciE%0M z=`t!Gc%}OEsyN-c`=NvoTnNbY3KkFUQn@B%$i$xQa0NdN38BP1c78o$hm&P-&_hrB zB)%-*O_%vgs^6*)sUx`0}<6QjFJ zHp^kXAQ-2V+!0YS89E70A&|`6gDvnWc`PfC8zHdQzdS4mU@qpopKY2SUmyH$A_Bo8 zst}q*gl)USKR2W5OUK&sFk)Yt?M&2MWhi2HUMZJ^ShP1(&yA$XRV^Kw*D|Gr9Ds_~ zC#1)N8c1Ul))p*vhbSP@F^$T+{4g1{Iyg~ZMar5l$S1pJQ*h!Ek&@4bxuyPu`CirM z`W}ZU9>5lfd66EIJMARQDtW;&C6`+0+0G2A%9Kv=u0cl7ZIMn62?)OGTn@?*to-&o ztwE_hun{0W za#<0?*H#GXG_KA6-b=jLGO5@vg#3XH~lrMVsTaTg| z0$R->LP^Wr)BCG|wmNL#v%XAlEF)UJ5g|Hu>E@+odzPc;el zrlFBXX|^#@{yZJ%C9uGoB1;>2q&qre+FyjlL!4XJs}~Z|2C6@-ol1^1nXju!<&a1} z*XH!=%>=ymWy~hTo6(-I{}NYE1rT# z(-bT`fHM)}hf%TS&=a3cb!kQhl;5};ZuE{BwG49#^j|Si_=61E9U3k``fPShMN9Fs z`yKQHTiuT@C!(*4`;z+O2(mqn=&2do*x&D3<2YjvlzrbTTx?GedL6^;bc6c%mgu!m=+{);?<~`9!VknVl zY8nuqRc*dFlEvtT5?|Jea~Ic$+*K@7-?#E&WnyAoy?kp4F<*K0!+&?xl!iQ^$wrVRyZyX|#-Qt_Q0&XCu0}qGrbKwI&4-0bnSsfT0c&2Xds= zxN)RGvT$QnS)^(l#YWFCh{9j%)H?eD#{;qc`m0J!mFmNq>mYYtr~UU9c^%j9Ye$ci z$e+r~MRHTUyxV|&ivFkHWG@&Bev-8^o6{;qntA~UVtt2wBb8i-x`I%hV8Qa_?eDx) zWKPy!dKF}wLpkIMl=ONwjnNyuY!_d?v)J+v!#*I7v2UMHBziGF2=4enaB|EK3NF=7 zgh)`fM3!_xC$%{T@CVI5YZZ$90bna5!b7ba(=;A-GLDAY#U+1SYtF%2?bOc^1qFj1 z&_I6OSiMC-gBs9!Sy6{Xzq&cw^i^<}ySAH>M?jnQ9t<_i<;1dyp zZR}pBm?mumFEmfgLXr=t8nxQ_R&I`g9mWnHT^;X#8eMgDO{x}dV%96iuppYwsSBcC zk}}V!z}dXpN&8XbB>96zs^*?Yp<7I6YVM=hwk=YvKx@UD;2`y2Ug1o>eT=GYzA)_d z#yf5!eo5#dr<=tG2Dh*Y3uVRvrTzPOpW>r|-UNNPCcyKYiOe@2m0|K|dyxq31b#(M z7_evK4G$M`_6=|zG;qYpPA4NU^jxkR;L-8NzTKF5P3-#(jPi8)YIYjXYaEYw5AeEy zB=^Q@RSX0c_biS)fRHfNUnb%x91Fagzbw`Q(Lf~Mtsq=TA#wa}^rI2hiv17}Hc-M0 zTyO{xDZ{2l$nAKP_;KSU#Fa)ve^fHB(zxA`s?*vDN};J-0u4As{*k}>=QA)r_|Z&^ z+kWB5WziA+jzap-5_?b4I0>U~1E`E7MT@t?cb76=;Rl{U5W4!olSyqCIAa9LmaF1s zvM^$T-oXIPKqNHa0OxP_MN(;0!+>faWV@qK-AM+}NL)?e65I?c?jH#7O(b24q!h8p z+!dGe9ll<9f)OT{trhyR7*AGMN!RpfF1Ol30|U(9q!!njr(^xtN^r<8#Tl!_ISG>V z(#3yX>rO@4g|cF%6D1DEBqf&@W&F&idQbl#lQeOEiN(nN;4!X+R={2Fm|^o9$gM}C znQp5VhUH8)l5F}sD$r4;G+z@N`#M!kpMW+fu=Yd#mKUabLtNq-1&PSo{yahyLhMgW zhG0i=!koy%@68&?Rjc=?^nCXw5?3Qt{e>uE0jZBlp(z^^?{k0sSM5|E7hNv2ExrTn zntAQ|VM4nS##xxqd~4-FB&*)_q*tsb6QAMq1h4IB(;T>#)U4|RJ=yxO_o5f4X{KYX)No8<3hb{h`Dp%HdxsOVy32UuL( z#*Y0*?hlrHYYjm&>=OC)I8fxk_%rI* z7ms%kDe?94xbgs?C5-!KCPlk+CZz4ZlX9r;ai@lYn?#6Uk4rdE8FV03bY7 zg^NW^zPoSqHWLi~^#rZ=CQ6m2AXUB=!|ojvt68m1t)JN9O!356b8vHawQlpPV;Cja2=Qaqy z4lo~AQ(V;p5rWi~$0L}=$t=N~r4Dll_#PrIkshw&B<4bjjz1Xv^QDgduW{1LJEt>p zMT*2WBc$Ta2$9I$D~ceJ*^0^#Qc0Vio>%@)$=um&?b<%FIv>=#VI~&GyO53rjxNgR zmun!l{T(pR;nBl#9W^xb3sxBKwk#_)7qRor2yWw7_B>F5rk0F_OrDmBj-=`3dPkT6hrT#@^oZYIbnaYr#~ zV&2rI9AVs@7^5IVz2+X&|e>#tbSt0WAA6X1`eRp ztJwi_4rY6No-1xzmJJEnlCK=H?g?-;X?Jbn%;3Eo*%vsFQ)pm2Wy8m+BmP`gPN|=CRA6zh|4i>8w*^@Gs-?Dn_mK5u+0qE}np+z=c>_OrdL_o%Gpi)(M83y!H0z*(Fy-h?sC%5nX4rViutlY&VbW0c zHQo;8y?gnopZME65j8;>qB<;a7mZjeb)@rBt%*nh(ZSEl*2(4|twLp5A^u`@N@C$W ziFQ8BNHl;z@zf1z$E?X0lYYeFrux(95l$1b$psFFdvM{h<3A81Y6nG@K#O> zcPg(qQ`{V>MVZolN>1%6U>qgE06q6j(S(CEumwm7voqvs*@!JVu0 z8S=~nj+z0k1TBZf?A=|A$t=1C1Xac+E1?~OO6_q0RJ*-~XzVgj*^|H^R5Z0qd0YsZ z6hPI}Yer^e?}%>F-!2Pq#FsCUzUd>Vl?{REr$rUDe7)$gef!jj+js#|DcgzVjV-M> zZ5?uz+=0?NcM1x`YrHq0(VqQsqnMs4GN+r4uw3eK45vdXGcUY=)H0SByOh57P>w}p zaXQ5Z+Zz?2kiwh-&|Q=Eq{viS>WfNa)N3SsnUEeLv^FaC#!JLFQ89>?qbW(gbMmDT z#H8w1O|0xQ$4HWq5CRqA@eGWWdT){*3NfSQ-0wO7;el!NlaP&+te|t5pydMX3Wr$i XM+QHN6+-i|66UVdy{s7i=i2#yqQmTF literal 0 HcmV?d00001 diff --git a/assets/img/logo_notext-1400.webp b/assets/img/logo_notext-1400.webp new file mode 100644 index 0000000000000000000000000000000000000000..4bccd865cdc3c81592a46e0776aac6c9f58aefa3 GIT binary patch literal 7704 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 VSgHoNn+kLM20-~b#uL3Q{69|GtFZt8 literal 0 HcmV?d00001 diff --git a/assets/img/logo_notext_white-480.webp b/assets/img/logo_notext_white-480.webp new file mode 100644 index 0000000000000000000000000000000000000000..ee1ee7996b74acadb62610b908adeed8354b9d7a GIT binary patch literal 10774 zcmb7pWmp|O*Y51S*|_#oZ|`1&Tv)cPLWawK#?1Ufd3SzxO-O z^XL3Hxh9!AE6JUeH7l81iITL01S%~6sEdmzs3~x1AOZk@_Y&7Ye;;8v1*yK5Ea(&# z$RRISY{+`|PFv&WREEI`4)h}~+ZAI&?e|0Yjz^kL?meTz5PxB&f7Zajw>^24m@u zJNBy|6X=7-iI|El|@#pAbX>+cWrjp6!%u*eMuJ&JcCH z{cV{Wj0;1N6wsxOQive8eekkvXHP>4kd$oXFPiOw6_zl|**@rfe(g(BXolKngq z&}Z>pOCwZ~Bj-AZ0B1o!>kCt5Peh1y4Y_RBrr2U

l>MvgV(uh$G6OC8AQyaN0u$ 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 C<-*SZ literal 0 HcmV?d00001 diff --git a/assets/img/logo_notext_white-800.webp b/assets/img/logo_notext_white-800.webp new file mode 100644 index 0000000000000000000000000000000000000000..ead9ce54e228431a22e5db40977a97534b54c5be GIT binary patch literal 17322 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 VSgHoNn+kLM20-~b#uL3Q{69|GtFZt8 literal 0 HcmV?d00001 diff --git a/assets/img/logo_text-1400.webp b/assets/img/logo_text-1400.webp new file mode 100644 index 0000000000000000000000000000000000000000..93fcbad091a98d5de309915e27242cf76330a5df GIT binary patch literal 11674 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 ZuK7I$&Va@V`GDRZg6Wq3dsF}b{tv2}XEy)< literal 0 HcmV?d00001 diff --git a/assets/img/logo_text-480.webp b/assets/img/logo_text-480.webp new file mode 100644 index 0000000000000000000000000000000000000000..e7be062480667796d980609ebaaf5e6bee73f29d GIT binary patch literal 6796 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 literal 0 HcmV?d00001 diff --git a/assets/img/logo_text-800.webp b/assets/img/logo_text-800.webp new file mode 100644 index 0000000000000000000000000000000000000000..93fcbad091a98d5de309915e27242cf76330a5df GIT binary patch literal 11674 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 ZuK7I$&Va@V`GDRZg6Wq3dsF}b{tv2}XEy)< literal 0 HcmV?d00001 diff --git a/assets/img/logo_text_vertical-1400.webp b/assets/img/logo_text_vertical-1400.webp new file mode 100644 index 0000000000000000000000000000000000000000..bf308ce04d609d21aa1feb49b58d549ade5f63dc GIT binary patch literal 22558 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 LJ;#l9GY$L~@6U@c literal 0 HcmV?d00001 diff --git a/assets/img/logo_text_vertical-480.webp b/assets/img/logo_text_vertical-480.webp new file mode 100644 index 0000000000000000000000000000000000000000..ad30d885593d4557bf5a10cc7f58b8f464d4c266 GIT binary patch literal 13796 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 LJ;#l9GY$L~@6U@c literal 0 HcmV?d00001 diff --git a/assets/img/sfds-1400.webp b/assets/img/sfds-1400.webp new file mode 100644 index 0000000000000000000000000000000000000000..98717677d334edb3105bbbcca7d97ba6d50a2337 GIT binary patch literal 29370 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 literal 0 HcmV?d00001 diff --git a/assets/img/sfds-480.webp b/assets/img/sfds-480.webp new file mode 100644 index 0000000000000000000000000000000000000000..42405dce438c6e2ce75e25142267551fe25c395b GIT binary patch literal 15444 zcmb8WV{|7$*SGtRZQHh;Ozeqm+qNdQZQFJxwry)-^W=V>`@HAklweW$P-#A-~DqhY7dVR51x zs!OV%Vc3aRBV7I^tWqUvsg34?6;Hb8>#S0-d*&`@k51eMTSC*Pn9)-{Ay)ZxntXp}pT; zz4tu5CRfr)qHoMk8bFg#T)m$&489+B-*>g&PdftdOWz;g2s_&geK6M)yr{eS8!amr zt$xq3Uzc{@x4GYEcHbWee$Qw-U(XodpFdFy-?xRi-{&0P?|%`zhU1bfG6P;Op1)sa zzV{iv_Gi8hItQh0Cx*F~QKozqmKKFmm)hXGrRAv}S-M;96R1n6TUc%4e@WPXO5$cO5h45-3l7)FAUnDWtmHY zDw>td@m>MK2pRej7ZW0c?g$TxhQW#mi~t5H_rP8VoGOdzq|A{eyK9rkiDA-`I>_K{ z7w!1@Raxlx{F>t2pwLDOEnvhOizvSw2L5UMxy7U<=Yss=JByF*0`j0zF~H3T^#qv# zX9CtF74aPv#DPpM7n2HRPCrB>2zN&63it9rUZD@z!2oQx3G(Y61qx`?gC223NYeKI|{zEM|e z#iPuJi7fOTMhuab!-Bqb@Fn0Edsm?a@x-Ilwx7`C%o?Y=dS!S^qSwxbM3@#Q)+jvN z3D#BNpt&Q7%f06zNRvUjcTW$A;o4-78pD&3W?$F{hd1+?ON5|HA{VQH=XWT%;q8;9 z<32GA&~FDp#};>P0c~3M;pg=HTA)5tyo^O+Ue=k#+f4vD+nMZqzVcf>D}<(1LYL`Q zI`11Qa+MGlBhL5a=QBNk6@j z9hMbqP!p=tiS-#&B9?O{z9dXDq@bH)THS%nNv5PH0l_Tl?4%bOhM|V(xEucLuSHAe z*jXXfl71E7Uv^5JthpR1@J9`M?WtP^uaws^=pjw44pIVQB<&E4hDiZaah!Gt9)bW( zm9+h@F@3?;+h3EN|Y-{jL-K@y9si+d0C1WEyUY z=G!|^sH8;k3{o%UHZud}J<22$f|%z6)*8!v7jm=-Ut`)icjQg>EFP|n8HzZ3x=zDN zaWTG|WbR*{a&a2>gk5xYs)ZxR1guHY`gV{1xC&_FX%t}Bu+S4BGp9=GaIF`B&bj=X z!q=%f=j5c%Yin&pF0WrreXt!?N01zO-=PAZ3KJF4L{&VzY5f8UBq(dO@5xNBZO+)YzWwhVok33No$E(uOG zlxZ0cF?$rxO+vJYXc;GycUp3qey^jGcL~T@+Bn01N7Ty2T~)Q=iCg z^NP^9rlT17SnfVWbV%Ld)Ig1-5%M!B5?_tIi=E#{Yp62A>i2%|WyM!O5=V|U#E>=V zWghvDsaLlO9ZeN)ZsejwI7Rj77iWh#wC{^qh9ML)-t(kKSWcM^QG->gtT1{_qTel@ z(Fzi-UAG~(+AsGlNkmA@rp&cQx24d z`1?cCC%0z$JDFJ!@)$6Fzeq?jlrj%!r9;)IissoxpMbvp!Ch&jFbQEG*eIEge|}a_ z)(*-@(fNy*XMt`qAH+qv9k1dRyPTrjCEZNf15FsSVZ2xnz|c__Jz+qsU^3Y1qR-sa z(xW@I$BG%yWl|#~2c(9zBZIq0mjZ$`pkryC5@NMwv)IZd@u<_4Vq-r7X*F3DeayqE zafoNcZj)126rNzEp;`vbuyji!a4V=dFMD#6oSdi+yWO^~1ai;!yRR>yU9X3Cl^aYE zXFw~m!-M1xiqwRIX|V#6s7Tr;+e4%nBO`{UjD+4n@DUtTrVhW;gIu)`~KGi}Zrm}({&@2h1kNwZByyO8Qp zsaN8+*_hMPwdx2w4|OqR0p}yvOIxTqQp|7%olFy=nxd;XceJ2M95*<1c4t1?`^dwk ze2;mW=|v`tXO`up)^Quz72CwtV6c+X`VMV8buk%@m3i#X*rDzgR8O4L3C*qNcmEqz z5Fn8NWIDIskxXaG+dT=mzU%IZdjW%4g=nbz349f`iy}vlImQ7zo6wdo)nXR3E{<2$ z{VSNuq&?<^c1z2l+Fth3LUf*xmgf{Sx1UL>)wJboyjz`de&jyebB4;PTJa2W6m3l+ z+akr+oT69i$vFCyTModoe0|BnOMGmMM;5rSaZK5C_g55@}aan>^Mq(}k+tfzOM8|VFc$ry7oN~A7XhO*?_O35cB(O_Oy zM}ebBeDmDw>J4mIl1cZ`q=8V38m+B! z8Qw%<>K-`EF6u>0MK#MptuA0!kg4pEWt*0m^2``3T;bFUS}E)MT4xx6LeFL0>VR9I z)9Z&d9-&3lMCsPW?9OD@HSO!=Fv-P~#0UNkC{^5kS7;hnCGbfkHRpH zE?SXc`8O!U?Z$CLjlwo>FIk005GKKyFcy`SI+6aY@C!V?#U!MBl5Uj4a(`*!7#ZzDAYGekt`LwMHI@J%G|nKz(YsS_77fGPV8TnL?+>y zE+w|?T(Nx7{TWnN?k@5KV<%BHDesV~gK7g3GLAQ~G(GRo$SuhSf7nk&*7#pwAf z*{FpBHg$Yz-2&amPa*!KP?x@$S9WOOvxmJa*fPD?6V0VQyL#4GnrA$3$ zDwFQWR?gq?UO1LiWc{SBL49qnH=;K1fN<&7+@};NGbS`+4d@M5C_yLI^ui? zsG}%VN^ouoRZ;hSm^wU&l}0|s)znp*@JVT1FbK-Fn!)n-(`v~b`2UhaVMI99KDj1X za3o53`FAx}PnmUQ8m!mw7xVA5e7X8n0pM#j`JOQp8hGZ^Xzn(tnlg>Fhh(j^FI9ay z;X2myqSRC9GP)vC(HS26_{x~5ul_AS{B^Fw;^ZD`^!_h@Zmj~_vCqghL$msGF(tc2 zQami?N>@RFh+NS48ehf9m?fK$;-3+AxPw1HI6bHeX^ZV=1;3OT7dd#))I;iYPpTW~ zp=*k2$GdMsyBbsQ`jid!pm*;7(JB*#DV!lEs6-QAk6?<=b(D>&?p7en^A=|zUtvzN zt^0!FeHF3nAtr}W5;4=#j@D&uDAy!wBO5r>XDN)v*`3c8yA2pff}MN%25Y;f!e5{{ zH;&{P$#CDVyJkm~xoUgN(N()j#F z!vwxpjUX^)EQ~a%N=>fh&bp7W9w%vd>yx^(lVFntULp?0MzW*5|C=Y@f*C=JF;O*{ zKq2wIOkr}N@u|Wud4sJ!LLQ!WoFmUobK5m}gdlwIEoSCYj~V>Hpufi%9w%ZP1(=w{zWw9jfdOjVd%ucyL(X02`KE_E@lgS ziyuoT0kHiuG=?Gp;NDGufHaTWo#;~DYDgw(mKD5C4KU8)$VnYES3AkGln-^CvPp4{ zvBw&Pz2!iCq3}n)MUyce**q%(=e4IU=MPw9ZiNH(IRza_(ULc^MDw-4-7Gk{gu;^T2TG8INt z{$*#BF+AYZu9-YSt>1@aK2(2Vv1e-|6Iwx&F=-E7uZ1f|7;#;3A$A5*m1~rhZ`gypF&FH9#B~hYx^@X+xnK}Z z?tDPi`n{)=j^P~52eiV-+N2INieE&)#LRfSK=yS6AOGXz@^+1-@b9&mX$7i^rVzw- ziL6x(k=`y*q#5n}@(R#!y+88TC@P1hMw*c27fF+BP$ccq$ybGCHu^Am#&M>T2HHy_ zbbji<$6rkD!hO2XYRuPEKU)2zDS`6X@v0Zke5v_n?WHV?bjkENvx-VIOhft)!J#R| zqUu+-IkH%EH^=FSXx^mC&Hwwcdnq2o}GneT_g54sTQn`-j;p#gwuVr(O=Za?9i?2B6Xa-NLpw z$jg9exJ4G{TT)Cer+p0KcwUz*-5VV->!Xzw9_gw_80}&@kr#}*;4ozvlPh!N|iF=)o?{ZPO;^A3I!mvz#Yssot z#S82AYOpkKgu@M@U6^s0|9!mc9<$K{{GarPx+kSQ2IQ(>%l+9mf}!wI;K zdfJI@8zo`jUlGAfuQ{9dn6bMmS3@YRA`)S)2bT`~0x&ig-&z{z4Lv`-?00K@Rry^i zQ6tk{ffEm}2fyKe_``a){9V7qfOY@AfYg_;c(q6lUn&rO^WRLZS7|kyV~p+SnGkSM zIQ9UR>e(xifgUtVee?0O=~8$5Iif#M~jN<$I#GVks50+KZ6~*;cII>rT;h#gaCzoX$>UoY@*3s^iocxAmm4JC=Ec(&KA<@*s5 zt(|GVgKN0t@4LqfGVr-7Z*~@p!eF3iy)oHPkArQcb>}Bv|F{xcD2~Y49b$H1)SzB* zaLaSF{wp5U7=Ktm#;NZz#{0{&@#H_QFLr-9Ebkk1I(hxbP(h1E%t+7ZcO<{TSY-px zsXMn@vOr?gQ)sx->*F;;b*l=E?%3)?ow(UzkZ|z8p`g~^km|JE+W5;KF%w0 zZ_IWQQ}tP6sk()101v962`l0g-bzWI-efG6`-&p3 z-{+b}*K3UiAPSt)QWlRak@0f*?`v9-6DF8Cno;%1K%fv;`?bRsjqY6L-VA9Z1|no{ zV!WxDms|eH9ZE(q>NsDeL0r8CpYD>%{D&%{;7<+OMYDfZQXn@bH1*NCuXk2*uO+Q7 zQDAhEq9No77_BY3#{GcnNVD17%iq7IB+wTaP`1YHU1*dlNdrb#3eIT~x{WOq&k}`2 zTIwB0_5!lJBDY7Na>=lT{PR1t2IpI1`Y{pFOyC}{RsD__ z#@(ENgSX7a>iev`@%c{_GhKRKuGH@awaGNp*7EBak&{PFBFDv|YdU@iUtasjQjW<^>1&d#kwwLZOUw1Jbvi zWd?OVS};*e9_nFZ@`r$+V#y~H0-&Ex<&OF)NK7GtJ^@TwZBa`WXR+}zF*RHCt0@JA zW;0vO+`F;{H*#+v!C9+o+)|lbxdL;Y)NE&(GZp^Ij>k-dc%CkmQb7W3UfPUzHcd6g zp^`_dDXV4MKXI*oI@W_ckeOGrD`j(|?uNTs4TX)X+JQbc(^&TtjJnj*o}WOgcFBsB zcuexo%hjtHd3s9b$JE)IgqBINTGAwI>+QasBARL-Kvh>^zOmpcPIz@NaAcwvmd|)8 zD`CZ6k74+=1OvUA%fKRb!OCB=`bA;!^hciaV9|67=}B{-$EK`nl!QriK8b8`(T{ z`a}cMcQGb~l| zMb0N9jBs>m#_4VrECHXIpXE<^g#J&Z-#fwkL;dJUW2ZfOC*>f6C-Tt1Z+&umh?aZz+TkFp+oPqZKbd8DXc;rK@TEyYy0b4>fB`PKkgE zivYLIS%qh?HjzR`fuIQ-AmzZ7X$9HlJvW*bN7@++{!eqa)AMT$GwswY|IL9_O@_LG zbhCW0jp&?T245J&>G02S@^uy-Et;C0HT)(1#A=+r_8MSpP|-Mao(;^nS%7;!LdaR4 z)82a!f(#y;s{UCQT&_)M#!+{fYEqk{$dRt0tGVd+XsSXR_5Ffyx1viK3yWQnx@E+t zlpBFWwnA~>ST&-Xw~SQxQ1t#V@Kd0`Sgo_EBEGSHS=uv}1DczlY=}aLq|dqX26Xkg zhAs(%zFAn~T9aJY&aLA=8QTLM7hgyz$md&`MJ~oh-%m0(-pDp^To~5bxiLi9IxvXH zmD$b@3jd3Bo^c@>*{7#MW0~Jo#zetp49bDuX|0516}-?yDR76-Cewt11O!30pptF8 zW>~vy!^7ECk@Y>T^+yzV#Xl}VUF+f}193#CVT+rYl(Wfmz zNv3o#f0@yzp2io=qp_vMRNWHg50`=ju5@2OmN%#=E*oKj zmQ92-gSR2e!|qZq+Klk(P!3lxI8bcD!*Io`!~GL_cEV@`*+ty8NC!;>he_oP8UDkU zsZHjhEV1LfaVeiDHW@`6ayBz00L^2(Gk6Y3JvPEnq;V=(Z3R?GIJJD*C1tHLj%6)z zs4_?|;KP z0&@jt)>OQf&N#X}xJ*eJf3=(LVBKJ1MPX1z)6AL}FO!nG?Bpm)jKN}LL!baw@*yHg zh9z)^;iw$3q|i=kkiI|%p?nV7rFcGlSfB+%gY#56P@O2|kvZ~sKmwl7)+Pg>et{&? zdWt*Q=S0sV|7Bbv0IaQ55v+4e@l{#$+UToNh$4PycO@SdEV+9k$dQyfa%t8Tt3Q_o z-A+`tD2oNM>2zmovsevD+o;fTUYYu9#ncpL33fr`1eh34F*rY-U`#^9W02pD#}T;x zlwz$CHB7l?bwF1>SK3{r90s1`H=YxpseB*$FDT58uT5%A4^3M56vy*d#S4}zosm@B z6sH|wLjofSOU2jX-z4d&8lqo|{mE6+8O zmm>2(6ml37(o~XFk~8v{y(;=V1A51a6(bHD^<%~=oXOl`1o6FaJLJ0yq=70igN^Zt ztX^{2c8NPQ{7ndO0!O=sO~=49gAoyDlbtAVm%5&ZKn}^JN^$sZg{wr4H(By00w}o& zkkRXa|2F8=xgFD*7+fQ^1Rhh_oFlXm2IHtSoR$&MOWgkT^cUUxVAUrU@M#vB9RI7F z@8~G0?a>xG*g?z?6L_gGqv0VDoHPEoTBR3e`u77kU{T`F#vkPMs&le5sWk~W%F?7s zp*yGOaDo%|tXnwY*Y;*(pl7PsE^nyhi^>b?jAl81Ud4|uh0XT<}*x#FUR za*jHCfq|`x#*BQShjGmsPdEWH3O4(4iBHVL3Dq)0SG;sDwFED@j}t7EOU0C;l1|FVk$7!wLY(YMSdF~ zl)V;*&5h2$A#rNWquhS98XIrXweYO{z|!_x@8}+tG>Wdx0Esl&w}Q>95X1eDPg{#S zO$^%R76WQPJ%=>j5iv5|7>VB_AeDuy(qJ=lK~D5crcQ32lG#&fdW$oK_WQYPE> zyr5cwx5$|hXVBi1-?|{B@D;dVd%~GZL09}_FMIZiTn~5>CIRjZ$;RCIJNP|ElD=Ohw`Y(2&RF;X8&95BWMiCA!i(RPsRO2v@ zDw&)_ZqIU~@UHhZIyy^15B4Q$D08J$s|pmO3h*~|T>U$*l)#skfnwAKqJ~8iqbnk* zbc^giPd*GdlEz8AtWs0ghLrsXY~6oVBaGx7XM-0a=jEUzoF)@CPH))E!# ztmA{DGSe_RzZtK_5Re_Y^OkARBJ7!feBlPI*8W-BDfE`moTA_&(tD}iSyJtllgI|vhZGnoBb)!aYr`iz zgN$;QccL$KfHrFW4kj|MnhSHGQ&KSzp*n&!_F#zT3r~?m#J(Pq5A$T}c0gXpZE>}# zYT?3}*|&2bW(GWNN}mJd&x_fLzgqmHK~2VHxTX~Qq01n_Ir`YMyGD%16@l63vc@CJ zGA`3u#+0XV>1xhO7x_|3X%kSB?5CgKqi3@f)+<;te-9l;yhC>sZt^BRtSpxZ_6Um! z-UraK2;j6TN80Cr_Q_&2ThVKQ2c=PR3@9tS?awvdm&DZt1@CN@lF>vxGn;<@jso!B zyLR``P}YMHriGef6;nDw+RCQZi!5`}C=cH2jjv`;P?^o62R)&-`fQ$dC5w*n*5`u* z-X!{)iq9=km^6xVEb2+X$%#lrPi+SXb>OBiWK~Ij!7Qf!wr0tErCr#++I~f0`XWTi zw8eI=l)CDlz}8}0{}cC{A(SJTlz3kB{@pX_BZ2)-tCY982f{UWOmoG!Sx=-_^Qh4f`*V)i|)Z@YV_-`S_{L##C<5$7)y7 z5VTg&2_w_;_`0#E8g?!i|HXno*4gh@ao~9c%e0aHQN2O%*a7!YA0eV@h42rol3m;Z zmbbZw1nry-fpjT;406>OL&3(VqUEz@ut`%)jJpbjXOfXP$|%%w?wJ6sFBgnp@?ytB z6+^YXc(Ul5juR3*MA8X|LHFVuCgPxLS@?ByZ}J8 zKF#>T2$LGdozlL20)%DCyEvE{B@2ifEa4T5!G=fW7m9mwPlOmLdb;(!A&7awSa=-^ z+3ttfaIjdP`B3)JLDY-{p*2ix*lb^|?VlsLK+vzRXpBU(=AVQ2?JCaQ^){v1@|TRq ztAzF%B5>z6t$(+rNKxN@L^J<#Az%%nhwVbcUi}1`*?TY6>>GRxTzkofHj&gx1KQ!n znEESmjzxzlNM=JZHE5+R=XuQl3?SF%C*~VlY8s_8`W-jAs%k)4)*>c6E` z?DE1Y%1hznMwy!B^rt_UnrafidbyVK1&oC*3^;rhXjWU(5I;v z1fmVcETKk|LLVU{Hy9jxS_e+^C)2-Gr5`S7?8d)`3H&rw-vw@ko(aplqZ7)}n)PZ0 zMOCgaOEI8gb-Jdt@xSXR84`PWiHEPrw)`lU9-QdoQ@#yGQTfsjUwHgwECyI9f`xQq1scauc$rT1_j*m&T}h@G0WL(`PiE6;Q}(QnzjCg# z9yJvrJ3_ic7u=-y7P4SLqgtlytoD+D>fL38@pm1Q(3)hAi}UY~j?jBsVuZI@#ulf@ zh1#`&6H8`B`=UZcFBrRx8<7_U97vDuB2mZ}Z>hp9o6<5kz=2`jb2drzpoA z$;UJDo(HL3s+ee2#}$%}mizNuobq^lkY$>5?ZT82pvS77g1!Gj;wrTLcU0LhWO7ey zY+6Ar1bHo}4VBqhFV)tmtXyjio&{j5tbHC7owTeJ-<-hd(6!uH-`t0c91&Q8zz+{R zk{d3m7iD4H)=DTM%Gc2vS?H;r5k$|N^YeVr9Lgx+dh5ze*F1ts=w!=@%u}nyB~ZDQ zh0U$1W0_|cw>@a~d^9#L`(rxIEPPK)9#Txej_WkvY)kP+5{9eXnMzNOVPXYVNZpZ6 z{h0IA!|8(`i=~b4tkDLAe`gW1{TmHC%n{By`QVv3drUKAYu9hIMd7f|W4L8x@-2E` zU3)mmwu@b*-DxnDlEx{8OBi!#E4}`?23a7VcuV#|HJ7c&dx*n0p(qZsxNQ|D=x|Z= z&4%2n;mXzXS;$oMfm#ded%rgr&rEjW-_`j*M3iP#9Y}m7(HLkWRE+gC;e}A9i``>N z|27zA^ zE@ukE2E$uZLnE3q!53B|;(C=#JaWb@N_@@?fD>d+0{&bTTEc- z$1d%-&Pl8=Ya4*@(d%BT8uDhMZ2leOL%G)QNuMf`QyHYCHdz#rwW_b^DvvbD&bir` zvMG~ktI)qtW%(r#5*LWS`2OV?H%O^Qe9(k1nh*J8ayD>SCiyXcSa$AoMUTAWKRf^i z>{83H+|V;ZNFUQk^GDvIsqc#?Y9##P9h7+A8dT06)7# z2_0bp07hXzHW2kLkSBmYUL;$pxUitSgf)DR5gAH$rCcsbt3BMW@9Guk>m=2$xhU`< zb>>^=d}Wd)dnY}1jX*v2O}9~C@Xg=P?%Qa&{1oWz`fTNL?{ng-wFKRmhT7ICBPzsU7%Xi_{LSFSxmr}|Mca&-!yBcYIcH30I8;5XE5jg~e4J}b|lIkQ3 z6lsyZ=jc)#g7{I9*HEjc&b>AlaK@jV#Pjpc3W~@xd7t$($Emlym)3659x!-r$;6}h zuvM^oqY)gR?=-t~hNJF)^C6=3L0Oq7T2{5N(N#>*CQuWU>I3>V=9omp3pf677P722 zsqm|(OjPC{L0LI!Nqf(A^Qz1z#en(~SoAIZOL^7-$Dv}vxYt+oF zdB5tqapZJS=B@8|r;qBEChve}udlDQxX`|H;R7My>)(;LB9Cdy1`h?o!THJTnjIC^ zNSQZ|CgvglJ3J(q#IQ)zuk6HKp5R;CuTZg4Up%`#S8c^4g-0iSZYEv^!V_iLx1kME zq~q8e3qzVHz!9jZse<&n;;YV77rW&ww29gc5x>rMoCJUE5xb=7%v_%XA8&WVm2Rj) zaKV0+VM`Qws^Mw%w+#KXDO~DvH}`xxJj77%AghsexwP)n(+g;fo@17DVc?e!&b!06 zLc1_hZ%7OK{`S)Sfg4G0_nX|^l*eZUc5b@Ega4`=5j(VHJe+`k<&X%OUnuYDBev1%g!saEb!*g zzy>G(+WGvo%fiW!TW--j+z9f&nxi!sL}|{4uQofig?RjRgjmTc3a#NoI^&RXw@f$R zk6Wk}{<|1uIT+>yTS?$yWbI+t!}cTu{Wz13mSz_OI9ON9d=ipx_2J@QX#=b3y{DfC z-|1;?rHfuO>DwA}%rexrMCT`ALyJ9v%08k>wAJ%&hDQE_Jd~xgTnQRhd_2r?pP5X- zqx$PU0tIG$Wf1J>|LDNoeclZs+#&Zcgw*C_sVwTYQdE`M(m3$V<8|%y8=Ng31ONU0 zX1nuu|Ck^R9M-(u<88T+_X7;h<@sz2S(x^-Pa1$Z`ir@#pWlau3CadpaoYL$ z(8?9CeUdk2S>E(}OQsV$6RgMB1XYIj{Xz&*MkkzsPy2{{9{lX@4F|clANujrp&!LK zR<*BrKn(S722o!wj45$sEpM>ek9lY$%@McS+;(=4JTc`ZUvU!UT z1Ffaex3q$&)_Z7!I%)`9G>)WhT};UL&jWVAMzr_R1i5^VL8J`O%)f0|;pDk_wlRU0 zYhy0N{xZ*~AEcCg`e+~J+b=5vSib3v-Tq~l+tFQ;Zz9l1Lv1xI8+iD*Mvlu`c^=gd z7pO(_!WSiO=Y>unVOH=Er!<7LIHqPA3D-z4X|7YT7FScD*{4X)Dc^jZ zUaAup2t7-M3B3XX94EUo=Vy{=ygf74p9^N{$G;Qmr6aEpDpf$R(6N>B$Xs%&nrGjG z>!;*pM=GYZgIjknb=i)Joy>DHe+zu~(E^{kfZN=c{;E)T^~r3MoR^Q-a1| zi-0&&qcHlXbG~VP6e(q6y=Zz$Oh89-t6hOuNmK5*+mft+bmX$n&Hme%u^3q(ouN`L z8e(S$U?Kvf@n|0b;HT3&5BdX$22*ts zqRJ5y!g)hee;(EheoZ9!!vzF^IJ?CDOC|vFq#Re(yj?z%yCqttB~}5&T$`P=e^OeK zgcRZZq7O?2#{b5XY+GPlP#VpCm;k$xktaQc=n^uREKd`h%;u?=!i?n%?M3XuFs5Ah zHMMokD+p|&rAZQ^%7}K2J`6MPV1@Lr& z4`$N|-|#0)w$rs{x{^X@5GROBbCzh5YhsGE3c2;G<|cm*!I9Hh+b$SQUC^vNB^Wu> zIgko!h~I7Yj56HrgSQ_D9LEW@*M-t{%$^&t&&kC2>gKyMwd`*Q60MQz>s2a2R>6rE z?hg)p)&N_}(tGU$I8tnlyTyzAcNwu;>5r-tc}2;I=3mfbzt;@+^k7{HTbAPFK}pz} zWHb_CYASferFK;*-!)nX5eMjitP&&-0}eI~)e*gV)_E1_`=%V5#xXGJrdyWM6U46~ z*Ns_T#*VE#Cbdorctu|c+2=K5`q?F1OXlF=NDzI)@0FGQqF??K9F{*0aaG*jf?GCrC z%f?ZcN5gOOJLKZVO%Ae>2K+qw6}!{oHg=1v(in z?X;a;!qCa976LSj23VJK0 z93>1F#1P$eUI-~2A@p>O_`(q4W1EL9)9)(2KH^*t)jaoaDhKW<@CYXY7ILqYR+`c< zqJ(PB0nYvu-`|=I!%~uhj}&efe;WCjtOhX~>Kjt&7V#HP_ylX#Xt7aYrv#WpXb6PgwFSyp=|GXA3I5{(L{oX>b&u&lEtOGvsrKYlMA23U z^x}olvh6c>kmqR(E-M^GJsgqaHW=QjF478BlKJ#g;+S zk}=nce)fK#siTsJ7xAoHFRKrx3g$Qq^~l|49vOoQsEK0x`_EPQ2_O-_2U%fdo>-M* zzdUwabkyzg#BWSO13>7wT{(8xG9D^UO1i?gFBA&ktG;wksk_~mF-s0HtP-a@<+d+vJVVE1b0bcvV?v~vsV5o%Fn z_-q6Y8Uk*XH=7^wXB1kT%CK^aV!Cwns%R+F>k}7zKhofL3)FlfNI$HADaV{tP+Tre zLZnU%VMG{-cnWM=)){w-p7gj4CRjBgCm2outVo{8>39_3F_YuL+aDOoNEaseWIRg z5II(H`@e);DX2y|dOX*7ISN|EQ*v^=K>`fyr*(emj_4mCi2@Az~At?H08?`xRYGR zREGyYXmO-V1593?p${SZ=EV)UPS5Hfk?galzPSG3r1mQ|Hz4W;%MV?e-PfB8Q??Emr)0&xB>ru;7h|6FGV0tTS|^hrMr1^9n8{}XEw3i?0# zWk3A%)6A63U2F^qS?Jm6nSP=enYg$anYfu*37MI>89BL`m;vAbKpX@B^ygkiW@aX! z`2S@fU=RQx@4wfX7#V@`{=YGR|I7cW0p!2@pBnyS-~bRHkpIcxNB93!BJsojZzccX z|GN?(;Q!570Et2zKaYxz!7QYlm_PRu zgY_fzBlv&GfdYWRK>jln1=5ck2rwwb|8WBSSzUe||BCaWMyVj9U^6{h}yC~w^<(9;o*}ccWy=PmqdDFT+E9`~JO{P*3n>S})tUR!I82j|; z7wbRJ_QtNFPu_57tCg&b3p9i<{jL<`*uUFeNfL4`O%T1!UbW?JJqORK?qT8&Ma5>q z_ox@R!tVDT@vWfch*{Sr)Q50HBBUSP{K;G&^1a^xE8A}X_BTL9vOZ6S3g0NaMU4A0 z$rMXvgvgYK#b89Axu7UzHcyg7wzhYylUEaaaRg}2V zed99SHj9g(x$3E~h?~jWVr*y39@g?ApI0v7Q=)A{ts&I{r5VO8v4fvHoz|k^*C5Q4 zPsB`|Af@Hfke7HOVji39QB;nGuM;b~WL4J%`CCrOF3);>59lgX;Ge|ywW95c+7&`0 z9z3rgm9RJ5&mzTsb#?leDE023nf2VZa1AIGq=kV9%7Jn0bjFUox66A|XjDF8wV-Gc zB^ebdg5ZH~ucn1n1uVB3czaUz;Oe`|a_g2(3-w};@;KBiz>o5VW^a-nh43JeOw_yO z4u_0-mRmrRvbZf1Q4{Q-WAYX&!Oz99x~muiQz}JeOhJJ#J2#BH(7d2AcYLW@#)0Qq z^a5V^mW+*>X2Rr271w5vMoK7PmGFgd#m;&D(YbSXxiWfKGdJlSN-4&*m~TY40{~4~ z^{I~@*im);Pbp4U{{Zpd97V^Z#TEJy5h3tCThF{px5FqzE*srK>y|2(&3ZQu6*j;g z)x02c&)pKgHO}of#h6E#9A_w`qPzt6PQ=MX)S6Q%AH8;P$9u*4vRpN);-m4Nk_foe H_uBshmlDSN literal 0 HcmV?d00001 diff --git a/assets/img/sfds-800.webp b/assets/img/sfds-800.webp new file mode 100644 index 0000000000000000000000000000000000000000..98717677d334edb3105bbbcca7d97ba6d50a2337 GIT binary patch literal 29370 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 literal 0 HcmV?d00001 diff --git a/assets/js/common.js b/assets/js/common.js index 5ffcb501..72d77e8d 100644 --- a/assets/js/common.js +++ b/assets/js/common.js @@ -1,11 +1 @@ -$(document).ready(function() { - $('a.abstract').click(function() { - $(this).parent().parent().find(".abstract.hidden").toggleClass('open'); - $(this).parent().parent().find(".bibtex.hidden.open").toggleClass('open'); - }); - $('a.bibtex').click(function() { - $(this).parent().parent().find(".bibtex.hidden").toggleClass('open'); - $(this).parent().parent().find(".abstract.hidden.open").toggleClass('open'); - }); - $('a').removeClass('waves-effect waves-light'); -}); +$(document).ready(function(){$("a.abstract").click(function(){$(this).parent().parent().find(".abstract.hidden").toggleClass("open"),$(this).parent().parent().find(".bibtex.hidden.open").toggleClass("open")}),$("a.bibtex").click(function(){$(this).parent().parent().find(".bibtex.hidden").toggleClass("open"),$(this).parent().parent().find(".abstract.hidden.open").toggleClass("open")}),$("a").removeClass("waves-effect waves-light")}); \ No newline at end of file diff --git a/assets/js/dark_mode.js b/assets/js/dark_mode.js index 863b273f..26312e44 100644 --- a/assets/js/dark_mode.js +++ b/assets/js/dark_mode.js @@ -1,8 +1 @@ -document.addEventListener('DOMContentLoaded', function() { - const mode_toggle = document.getElementById("light-toggle"); - - mode_toggle.addEventListener("click", function() { - toggleTheme(localStorage.getItem("theme")); - }); -}); - +document.addEventListener("DOMContentLoaded",function(){document.getElementById("light-toggle").addEventListener("click",function(){toggleTheme(localStorage.getItem("theme"))})}); \ No newline at end of file diff --git a/assets/js/distillpub/overrides.js b/assets/js/distillpub/overrides.js index 2d839626..066b8efa 100644 --- a/assets/js/distillpub/overrides.js +++ b/assets/js/distillpub/overrides.js @@ -1,24 +1 @@ -$(document).ready(function() { - // Override styles of the footnotes. - document.querySelectorAll("d-footnote").forEach(function(footnote) { - footnote.shadowRoot.querySelector("sup > span") - .setAttribute("style", "color: var(--global-theme-color);"); - footnote.shadowRoot.querySelector("d-hover-box").shadowRoot.querySelector("style").sheet - .insertRule(".panel {background-color: var(--global-bg-color) !important;}"); - footnote.shadowRoot.querySelector("d-hover-box").shadowRoot.querySelector("style").sheet - .insertRule(".panel {border-color: var(--global-divider-color) !important;}"); - }); - // Override styles of the citations. - document.querySelectorAll("d-cite").forEach(function(cite) { - cite.shadowRoot.querySelector("div > span") - .setAttribute("style", "color: var(--global-theme-color);"); - cite.shadowRoot.querySelector("style").sheet - .insertRule("ul li a {color: var(--global-text-color) !important; text-decoration: none;}"); - cite.shadowRoot.querySelector("style").sheet - .insertRule("ul li a:hover {color: var(--global-theme-color) !important;}"); - cite.shadowRoot.querySelector("d-hover-box").shadowRoot.querySelector("style").sheet - .insertRule(".panel {background-color: var(--global-bg-color) !important;}"); - cite.shadowRoot.querySelector("d-hover-box").shadowRoot.querySelector("style").sheet - .insertRule(".panel {border-color: var(--global-divider-color) !important;}"); - }); -}) \ No newline at end of file +$(document).ready(function(){document.querySelectorAll("d-footnote").forEach(function(o){o.shadowRoot.querySelector("sup > span").setAttribute("style","color: var(--global-theme-color);"),o.shadowRoot.querySelector("d-hover-box").shadowRoot.querySelector("style").sheet.insertRule(".panel {background-color: var(--global-bg-color) !important;}"),o.shadowRoot.querySelector("d-hover-box").shadowRoot.querySelector("style").sheet.insertRule(".panel {border-color: var(--global-divider-color) !important;}")}),document.querySelectorAll("d-cite").forEach(function(o){o.shadowRoot.querySelector("div > span").setAttribute("style","color: var(--global-theme-color);"),o.shadowRoot.querySelector("style").sheet.insertRule("ul li a {color: var(--global-text-color) !important; text-decoration: none;}"),o.shadowRoot.querySelector("style").sheet.insertRule("ul li a:hover {color: var(--global-theme-color) !important;}"),o.shadowRoot.querySelector("d-hover-box").shadowRoot.querySelector("style").sheet.insertRule(".panel {background-color: var(--global-bg-color) !important;}"),o.shadowRoot.querySelector("d-hover-box").shadowRoot.querySelector("style").sheet.insertRule(".panel {border-color: var(--global-divider-color) !important;}")})}); \ No newline at end of file diff --git a/assets/js/distillpub/template.v2.js b/assets/js/distillpub/template.v2.js index 4ddc61fc..a05e82bb 100644 --- a/assets/js/distillpub/template.v2.js +++ b/assets/js/distillpub/template.v2.js @@ -1,9247 +1,67 @@ -(function (factory) { - typeof define === 'function' && define.amd ? define(factory) : - factory(); -}((function () { 'use strict'; - - // Copyright 2018 The Distill Template Authors - // - // Licensed under the Apache License, Version 2.0 (the "License"); - // you may not use this file except in compliance with the License. - // You may obtain a copy of the License at - // - // http://www.apache.org/licenses/LICENSE-2.0 - // - // Unless required by applicable law or agreed to in writing, software - // distributed under the License is distributed on an "AS IS" BASIS, - // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - // See the License for the specific language governing permissions and - // limitations under the License. - - const days = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday']; - const months = ['Jan.', 'Feb.', 'March', 'April', 'May', 'June', 'July', 'Aug.', 'Sept.', 'Oct.', 'Nov.', 'Dec.']; - const zeroPad = n => n < 10 ? '0' + n : n; - - const RFC = function(date) { - const day = days[date.getDay()].substring(0, 3); - const paddedDate = zeroPad(date.getDate()); - const month = months[date.getMonth()].substring(0,3); - const year = date.getFullYear().toString(); - const hours = date.getUTCHours().toString(); - const minutes = date.getUTCMinutes().toString(); - const seconds = date.getUTCSeconds().toString(); - return `${day}, ${paddedDate} ${month} ${year} ${hours}:${minutes}:${seconds} Z`; - }; - - const objectFromMap = function(map) { - const object = Array.from(map).reduce((object, [key, value]) => ( - Object.assign(object, { [key]: value }) // Be careful! Maps can have non-String keys; object literals can't. - ), {}); - return object; - }; - - const mapFromObject = function(object) { - const map = new Map(); - for (var property in object) { - if (object.hasOwnProperty(property)) { - map.set(property, object[property]); - } - } - return map; - }; - - class Author { - - // constructor(name='', personalURL='', affiliation='', affiliationURL='') { - // this.name = name; // 'Chris Olah' - // this.personalURL = personalURL; // 'https://colah.github.io' - // this.affiliation = affiliation; // 'Google Brain' - // this.affiliationURL = affiliationURL; // 'https://g.co/brain' - // } - - constructor(object) { - this.name = object.author; // 'Chris Olah' - this.personalURL = object.authorURL; // 'https://colah.github.io' - this.affiliation = object.affiliation; // 'Google Brain' - this.affiliationURL = object.affiliationURL; // 'https://g.co/brain' - this.affiliations = object.affiliations || []; // new-style affiliations - } - - // 'Chris' - get firstName() { - const names = this.name.split(' '); - return names.slice(0, names.length - 1).join(' '); - } - - // 'Olah' - get lastName() { - const names = this.name.split(' '); - return names[names.length -1]; - } - } - - function mergeFromYMLFrontmatter(target, source) { - target.title = source.title; - if (source.published) { - if (source.published instanceof Date) { - target.publishedDate = source.published; - } else if (source.published.constructor === String) { - target.publishedDate = new Date(source.published); - } - } - if (source.publishedDate) { - if (source.publishedDate instanceof Date) { - target.publishedDate = source.publishedDate; - } else if (source.publishedDate.constructor === String) { - target.publishedDate = new Date(source.publishedDate); - } else { - console.error('Don\'t know what to do with published date: ' + source.publishedDate); - } - } - target.description = source.description; - target.authors = source.authors.map( (authorObject) => new Author(authorObject)); - target.katex = source.katex; - target.password = source.password; - if (source.doi) { - target.doi = source.doi; - } - } - - class FrontMatter { - constructor() { - this.title = 'unnamed article'; // 'Attention and Augmented Recurrent Neural Networks' - this.description = ''; // 'A visual overview of neural attention...' - this.authors = []; // Array of Author(s) - - this.bibliography = new Map(); - this.bibliographyParsed = false; - // { - // 'gregor2015draw': { - // 'title': 'DRAW: A recurrent neural network for image generation', - // 'author': 'Gregor, Karol and Danihelka, Ivo and Graves, Alex and Rezende, Danilo Jimenez and Wierstra, Daan', - // 'journal': 'arXiv preprint arXiv:1502.04623', - // 'year': '2015', - // 'url': 'https://arxiv.org/pdf/1502.04623.pdf', - // 'type': 'article' - // }, - // } - - // Citation keys should be listed in the order that they are appear in the document. - // Each key refers to a key in the bibliography dictionary. - this.citations = []; // [ 'gregor2015draw', 'mercier2011humans' ] - this.citationsCollected = false; - - // - // Assigned from posts.csv - // - - // publishedDate: 2016-09-08T07:00:00.000Z, - // tags: [ 'rnn' ], - // distillPath: '2016/augmented-rnns', - // githubPath: 'distillpub/post--augmented-rnns', - // doiSuffix: 1, - - // - // Assigned from journal - // - this.journal = {}; - // journal: { - // 'title': 'Distill', - // 'full_title': 'Distill', - // 'abbrev_title': 'Distill', - // 'url': 'http://distill.pub', - // 'doi': '10.23915/distill', - // 'publisherName': 'Distill Working Group', - // 'publisherEmail': 'admin@distill.pub', - // 'issn': '2476-0757', - // 'editors': [...], - // 'committee': [...] - // } - // volume: 1, - // issue: 9, - - this.katex = {}; - - // - // Assigned from publishing process - // - - // githubCompareUpdatesUrl: 'https://github.com/distillpub/post--augmented-rnns/compare/1596e094d8943d2dc0ea445d92071129c6419c59...3bd9209e0c24d020f87cf6152dcecc6017cbc193', - // updatedDate: 2017-03-21T07:13:16.000Z, - // doi: '10.23915/distill.00001', - this.doi = undefined; - this.publishedDate = undefined; - } - - // Example: - // title: Demo Title Attention and Augmented Recurrent Neural Networks - // published: Jan 10, 2017 - // authors: - // - Chris Olah: - // - Shan Carter: http://shancarter.com - // affiliations: - // - Google Brain: - // - Google Brain: http://g.co/brain - - // - // Computed Properties - // - - // 'http://distill.pub/2016/augmented-rnns', - set url(value) { - this._url = value; - } - get url() { - if (this._url) { - return this._url; - } else if (this.distillPath && this.journal.url) { - return this.journal.url + '/' + this.distillPath; - } else if (this.journal.url) { - return this.journal.url; - } - } - - // 'https://github.com/distillpub/post--augmented-rnns', - get githubUrl() { - if (this.githubPath) { - return 'https://github.com/' + this.githubPath; - } else { - return undefined; - } - } - - // TODO resolve differences in naming of URL/Url/url. - // 'http://distill.pub/2016/augmented-rnns/thumbnail.jpg', - set previewURL(value) { - this._previewURL = value; - } - get previewURL() { - return this._previewURL ? this._previewURL : this.url + '/thumbnail.jpg'; - } - - // 'Thu, 08 Sep 2016 00:00:00 -0700', - get publishedDateRFC() { - return RFC(this.publishedDate); - } - - // 'Thu, 08 Sep 2016 00:00:00 -0700', - get updatedDateRFC() { - return RFC(this.updatedDate); - } - - // 2016, - get publishedYear() { - return this.publishedDate.getFullYear(); - } - - // 'Sept', - get publishedMonth() { - return months[this.publishedDate.getMonth()]; - } - - // 8, - get publishedDay() { - return this.publishedDate.getDate(); - } - - // '09', - get publishedMonthPadded() { - return zeroPad(this.publishedDate.getMonth() + 1); - } - - // '08', - get publishedDayPadded() { - return zeroPad(this.publishedDate.getDate()); - } - - get publishedISODateOnly() { - return this.publishedDate.toISOString().split('T')[0]; - } - - get volume() { - const volume = this.publishedYear - 2015; - if (volume < 1) { - throw new Error('Invalid publish date detected during computing volume'); - } - return volume; - } - - get issue() { - return this.publishedDate.getMonth() + 1; - } - - // 'Olah & Carter', - get concatenatedAuthors() { - if (this.authors.length > 2) { - return this.authors[0].lastName + ', et al.'; - } else if (this.authors.length === 2) { - return this.authors[0].lastName + ' & ' + this.authors[1].lastName; - } else if (this.authors.length === 1) { - return this.authors[0].lastName; - } - } - - // 'Olah, Chris and Carter, Shan', - get bibtexAuthors() { - return this.authors.map(author => { - return author.lastName + ', ' + author.firstName; - }).join(' and '); - } - - // 'olah2016attention' - get slug() { - let slug = ''; - if (this.authors.length) { - slug += this.authors[0].lastName.toLowerCase(); - slug += this.publishedYear; - slug += this.title.split(' ')[0].toLowerCase(); - } - return slug || 'Untitled'; - } - - get bibliographyEntries() { - return new Map(this.citations.map( citationKey => { - const entry = this.bibliography.get(citationKey); - return [citationKey, entry]; - })); - } - - set bibliography(bibliography) { - if (bibliography instanceof Map) { - this._bibliography = bibliography; - } else if (typeof bibliography === 'object') { - this._bibliography = mapFromObject(bibliography); - } - } - - get bibliography() { - return this._bibliography; - } - - static fromObject(source) { - const frontMatter = new FrontMatter(); - Object.assign(frontMatter, source); - return frontMatter; - } - - assignToObject(target) { - Object.assign(target, this); - target.bibliography = objectFromMap(this.bibliographyEntries); - target.url = this.url; - target.doi = this.doi; - target.githubUrl = this.githubUrl; - target.previewURL = this.previewURL; - if (this.publishedDate) { - target.volume = this.volume; - target.issue = this.issue; - target.publishedDateRFC = this.publishedDateRFC; - target.publishedYear = this.publishedYear; - target.publishedMonth = this.publishedMonth; - target.publishedDay = this.publishedDay; - target.publishedMonthPadded = this.publishedMonthPadded; - target.publishedDayPadded = this.publishedDayPadded; - } - if (this.updatedDate) { - target.updatedDateRFC = this.updatedDateRFC; - } - target.concatenatedAuthors = this.concatenatedAuthors; - target.bibtexAuthors = this.bibtexAuthors; - target.slug = this.slug; - } - - } - - // Copyright 2018 The Distill Template Authors - // - // Licensed under the Apache License, Version 2.0 (the "License"); - // you may not use this file except in compliance with the License. - // You may obtain a copy of the License at - // - // http://www.apache.org/licenses/LICENSE-2.0 - // - // Unless required by applicable law or agreed to in writing, software - // distributed under the License is distributed on an "AS IS" BASIS, - // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - // See the License for the specific language governing permissions and - // limitations under the License. - - const Mutating = (superclass) => { - return class extends superclass { - - constructor() { - super(); - - // set up mutation observer - const options = {childList: true, characterData: true, subtree: true}; - const observer = new MutationObserver( () => { - observer.disconnect(); - this.renderIfPossible(); - observer.observe(this, options); - }); - - // ...and listen for changes - observer.observe(this, options); - } - - connectedCallback() { - super.connectedCallback(); - - this.renderIfPossible(); - } - - // potential TODO: check if this is enough for all our usecases - // maybe provide a custom function to tell if we have enough information to render - renderIfPossible() { - if (this.textContent && this.root) { - this.renderContent(); - } - } - - renderContent() { - console.error(`Your class ${this.constructor.name} must provide a custom renderContent() method!` ); - } - - }; // end class - }; // end mixin function - - // Copyright 2018 The Distill Template Authors - // - // Licensed under the Apache License, Version 2.0 (the "License"); - // you may not use this file except in compliance with the License. - // You may obtain a copy of the License at - // - // http://www.apache.org/licenses/LICENSE-2.0 - // - // Unless required by applicable law or agreed to in writing, software - // distributed under the License is distributed on an "AS IS" BASIS, - // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - // See the License for the specific language governing permissions and - // limitations under the License. - - /*global ShadyCSS*/ - - const Template = (name, templateString, useShadow = true) => { - - return (superclass) => { - - const template = document.createElement('template'); - template.innerHTML = templateString; - - if (useShadow && 'ShadyCSS' in window) { - ShadyCSS.prepareTemplate(template, name); - } - - return class extends superclass { - - static get is() { return name; } - - constructor() { - super(); - - this.clone = document.importNode(template.content, true); - if (useShadow) { - this.attachShadow({mode: 'open'}); - this.shadowRoot.appendChild(this.clone); - } - } - - connectedCallback() { - if (this.hasAttribute('distill-prerendered')) { - return; - } - if (useShadow) { - if ('ShadyCSS' in window) { - ShadyCSS.styleElement(this); - } - } else { - this.insertBefore(this.clone, this.firstChild); - } - } - - get root() { - if (useShadow) { - return this.shadowRoot; - } else { - return this; - } - } - - /* TODO: Are we using these? Should we even? */ - $(query) { - return this.root.querySelector(query); - } - - $$(query) { - return this.root.querySelectorAll(query); - } - }; - }; - }; - - var math = "/*\n * Copyright 2018 The Distill Template Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nspan.katex-display {\n text-align: left;\n padding: 8px 0 8px 0;\n margin: 0.5em 0 0.5em 1em;\n}\n\nspan.katex {\n -webkit-font-smoothing: antialiased;\n color: rgba(0, 0, 0, 0.8);\n font-size: 1.18em;\n}\n"; - - // Copyright 2018 The Distill Template Authors - // - // Licensed under the Apache License, Version 2.0 (the "License"); - // you may not use this file except in compliance with the License. - // You may obtain a copy of the License at - // - // http://www.apache.org/licenses/LICENSE-2.0 - // - // Unless required by applicable law or agreed to in writing, software - // distributed under the License is distributed on an "AS IS" BASIS, - // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - // See the License for the specific language governing permissions and - // limitations under the License. - - // This is a straight concatenation of code from KaTeX's contrib folder, - // but we aren't using some of their helpers that don't work well outside a browser environment. - - /*global katex */ - - const findEndOfMath = function(delimiter, text, startIndex) { - // Adapted from - // https://github.com/Khan/perseus/blob/master/src/perseus-markdown.jsx - let index = startIndex; - let braceLevel = 0; - - const delimLength = delimiter.length; - - while (index < text.length) { - const character = text[index]; - - if ( - braceLevel <= 0 && - text.slice(index, index + delimLength) === delimiter - ) { - return index; - } else if (character === "\\") { - index++; - } else if (character === "{") { - braceLevel++; - } else if (character === "}") { - braceLevel--; - } - - index++; - } - - return -1; - }; - - const splitAtDelimiters = function(startData, leftDelim, rightDelim, display) { - const finalData = []; - - for (let i = 0; i < startData.length; i++) { - if (startData[i].type === "text") { - const text = startData[i].data; - - let lookingForLeft = true; - let currIndex = 0; - let nextIndex; - - nextIndex = text.indexOf(leftDelim); - if (nextIndex !== -1) { - currIndex = nextIndex; - finalData.push({ - type: "text", - data: text.slice(0, currIndex) - }); - lookingForLeft = false; - } - - while (true) { - // eslint-disable-line no-constant-condition - if (lookingForLeft) { - nextIndex = text.indexOf(leftDelim, currIndex); - if (nextIndex === -1) { - break; - } - - finalData.push({ - type: "text", - data: text.slice(currIndex, nextIndex) - }); - - currIndex = nextIndex; - } else { - nextIndex = findEndOfMath( - rightDelim, - text, - currIndex + leftDelim.length - ); - if (nextIndex === -1) { - break; - } - - finalData.push({ - type: "math", - data: text.slice(currIndex + leftDelim.length, nextIndex), - rawData: text.slice(currIndex, nextIndex + rightDelim.length), - display: display - }); - - currIndex = nextIndex + rightDelim.length; - } - - lookingForLeft = !lookingForLeft; - } - - finalData.push({ - type: "text", - data: text.slice(currIndex) - }); - } else { - finalData.push(startData[i]); - } - } - - return finalData; - }; - - const splitWithDelimiters = function(text, delimiters) { - let data = [{ type: "text", data: text }]; - for (let i = 0; i < delimiters.length; i++) { - const delimiter = delimiters[i]; - data = splitAtDelimiters( - data, - delimiter.left, - delimiter.right, - delimiter.display || false - ); - } - return data; - }; - - /* Note: optionsCopy is mutated by this method. If it is ever exposed in the - * API, we should copy it before mutating. - */ - const renderMathInText = function(text, optionsCopy) { - const data = splitWithDelimiters(text, optionsCopy.delimiters); - const fragment = document.createDocumentFragment(); - - for (let i = 0; i < data.length; i++) { - if (data[i].type === "text") { - fragment.appendChild(document.createTextNode(data[i].data)); - } else { - const tag = document.createElement("d-math"); - const math = data[i].data; - // Override any display mode defined in the settings with that - // defined by the text itself - optionsCopy.displayMode = data[i].display; - try { - tag.textContent = math; - if (optionsCopy.displayMode) { - tag.setAttribute("block", ""); - } - } catch (e) { - if (!(e instanceof katex.ParseError)) { - throw e; - } - optionsCopy.errorCallback( - "KaTeX auto-render: Failed to parse `" + data[i].data + "` with ", - e - ); - fragment.appendChild(document.createTextNode(data[i].rawData)); - continue; - } - fragment.appendChild(tag); - } - } - - return fragment; - }; - - const renderElem = function(elem, optionsCopy) { - for (let i = 0; i < elem.childNodes.length; i++) { - const childNode = elem.childNodes[i]; - if (childNode.nodeType === 3) { - // Text node - const text = childNode.textContent; - if (optionsCopy.mightHaveMath(text)) { - const frag = renderMathInText(text, optionsCopy); - i += frag.childNodes.length - 1; - elem.replaceChild(frag, childNode); - } - } else if (childNode.nodeType === 1) { - // Element node - const shouldRender = - optionsCopy.ignoredTags.indexOf(childNode.nodeName.toLowerCase()) === - -1; - - if (shouldRender) { - renderElem(childNode, optionsCopy); - } - } - // Otherwise, it's something else, and ignore it. - } - }; - - const defaultAutoRenderOptions = { - delimiters: [ - { left: "$$", right: "$$", display: true }, - { left: "\\[", right: "\\]", display: true }, - { left: "\\(", right: "\\)", display: false } - // LaTeX uses this, but it ruins the display of normal `$` in text: - // {left: '$', right: '$', display: false}, - ], - - ignoredTags: [ - "script", - "noscript", - "style", - "textarea", - "pre", - "code", - "svg" - ], - - errorCallback: function(msg, err) { - console.error(msg, err); - } - }; - - const renderMathInElement = function(elem, options) { - if (!elem) { - throw new Error("No element provided to render"); - } - - const optionsCopy = Object.assign({}, defaultAutoRenderOptions, options); - const delimiterStrings = optionsCopy.delimiters.flatMap(d => [ - d.left, - d.right - ]); - const mightHaveMath = text => - delimiterStrings.some(d => text.indexOf(d) !== -1); - optionsCopy.mightHaveMath = mightHaveMath; - renderElem(elem, optionsCopy); - }; - - // Copyright 2018 The Distill Template Authors - - const katexJSURL = 'https://distill.pub/third-party/katex/katex.min.js'; - const katexCSSTag = ''; - - const T = Template('d-math', ` -${katexCSSTag} - - -`); - - // DMath, not Math, because that would conflict with the JS built-in - class DMath extends Mutating(T(HTMLElement)) { - - static set katexOptions(options) { - DMath._katexOptions = options; - if (DMath.katexOptions.delimiters) { - if (!DMath.katexAdded) { - DMath.addKatex(); - } else { - DMath.katexLoadedCallback(); - } - } - } - - static get katexOptions() { - if (!DMath._katexOptions) { - DMath._katexOptions = { - delimiters: [ { 'left':'$$', 'right':'$$', 'display': false } ] - }; - } - return DMath._katexOptions; - } - - static katexLoadedCallback() { - // render all d-math tags - const mathTags = document.querySelectorAll('d-math'); - for (const mathTag of mathTags) { - mathTag.renderContent(); - } - // transform inline delimited math to d-math tags - if (DMath.katexOptions.delimiters) { - renderMathInElement(document.body, DMath.katexOptions); - } - } - - static addKatex() { - // css tag can use this convenience function - document.head.insertAdjacentHTML('beforeend', katexCSSTag); - // script tag has to be created to work properly - const scriptTag = document.createElement('script'); - scriptTag.src = katexJSURL; - scriptTag.async = true; - scriptTag.onload = DMath.katexLoadedCallback; - scriptTag.crossorigin = 'anonymous'; - document.head.appendChild(scriptTag); - - DMath.katexAdded = true; - } - - get options() { - const localOptions = { displayMode: this.hasAttribute('block') }; - return Object.assign(localOptions, DMath.katexOptions); - } - - connectedCallback() { - super.connectedCallback(); - if (!DMath.katexAdded) { - DMath.addKatex(); - } - } - - renderContent() { - if (typeof katex !== 'undefined') { - const container = this.root.querySelector('#katex-container'); - katex.render(this.textContent, container, this.options); - } - } - - } - - DMath.katexAdded = false; - DMath.inlineMathRendered = false; - window.DMath = DMath; // TODO: check if this can be removed, or if we should expose a distill global - - // Copyright 2018 The Distill Template Authors - // - // Licensed under the Apache License, Version 2.0 (the "License"); - // you may not use this file except in compliance with the License. - // You may obtain a copy of the License at - // - // http://www.apache.org/licenses/LICENSE-2.0 - // - // Unless required by applicable law or agreed to in writing, software - // distributed under the License is distributed on an "AS IS" BASIS, - // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - // See the License for the specific language governing permissions and - // limitations under the License. - - function collect_citations(dom = document) { - const citations = new Set(); - const citeTags = dom.querySelectorAll("d-cite"); - for (const tag of citeTags) { - const keyString = tag.getAttribute("key") || tag.getAttribute("bibtex-key"); - const keys = keyString.split(",").map(k => k.trim()); - for (const key of keys) { - citations.add(key); - } - } - return [...citations]; - } - - function author_string(ent, template, sep, finalSep) { - if (ent.author == null) { - return ""; - } - var names = ent.author.split(" and "); - let name_strings = names.map(name => { - name = name.trim(); - if (name.indexOf(",") != -1) { - var last = name.split(",")[0].trim(); - var firsts = name.split(",")[1]; - } else if (name.indexOf(" ") != -1) { - var last = name - .split(" ") - .slice(-1)[0] - .trim(); - var firsts = name - .split(" ") - .slice(0, -1) - .join(" "); - } else { - var last = name.trim(); - } - var initials = ""; - if (firsts != undefined) { - initials = firsts - .trim() - .split(" ") - .map(s => s.trim()[0]); - initials = initials.join(".") + "."; - } - return template - .replace("${F}", firsts) - .replace("${L}", last) - .replace("${I}", initials) - .trim(); // in case one of first or last was empty - }); - if (names.length > 1) { - var str = name_strings.slice(0, names.length - 1).join(sep); - str += (finalSep || sep) + name_strings[names.length - 1]; - return str; - } else { - return name_strings[0]; - } - } - - function venue_string(ent) { - var cite = ent.journal || ent.booktitle || ""; - if ("volume" in ent) { - var issue = ent.issue || ent.number; - issue = issue != undefined ? "(" + issue + ")" : ""; - cite += ", Vol " + ent.volume + issue; - } - if ("pages" in ent) { - cite += ", pp. " + ent.pages; - } - if (cite != "") cite += ". "; - if ("publisher" in ent) { - cite += ent.publisher; - if (cite[cite.length - 1] != ".") cite += "."; - } - return cite; - } - - function link_string(ent) { - if ("url" in ent) { - var url = ent.url; - var arxiv_match = /arxiv\.org\/abs\/([0-9\.]*)/.exec(url); - if (arxiv_match != null) { - url = `http://arxiv.org/pdf/${arxiv_match[1]}.pdf`; - } - - if (url.slice(-4) == ".pdf") { - var label = "PDF"; - } else if (url.slice(-5) == ".html") { - var label = "HTML"; - } - return `  [${label || "link"}]`; - } /* else if ("doi" in ent){ - return `  [DOI]`; - }*/ else { - return ""; - } - } - function doi_string(ent, new_line) { - if ("doi" in ent) { - return `${new_line ? "
" : ""} DOI: ${ent.doi}`; - } else { - return ""; - } - } - - function title_string(ent) { - return '' + ent.title + " "; - } - - function bibliography_cite(ent, fancy) { - if (ent) { - var cite = title_string(ent); - cite += link_string(ent) + "
"; - if (ent.author) { - cite += author_string(ent, "${L}, ${I}", ", ", " and "); - if (ent.year || ent.date) { - cite += ", "; - } - } - if (ent.year || ent.date) { - cite += (ent.year || ent.date) + ". "; - } else { - cite += ". "; - } - cite += venue_string(ent); - cite += doi_string(ent); - return cite; - /*var cite = author_string(ent, "${L}, ${I}", ", ", " and "); - if (ent.year || ent.date){ - cite += ", " + (ent.year || ent.date) + ". " - } else { - cite += ". " - } - cite += "" + ent.title + ". "; - cite += venue_string(ent); - cite += doi_string(ent); - cite += link_string(ent); - return cite*/ - } else { - return "?"; - } - } - - function hover_cite(ent) { - if (ent) { - var cite = ""; - cite += "" + ent.title + ""; - cite += link_string(ent); - cite += "
"; - - var a_str = author_string(ent, "${I} ${L}", ", ") + "."; - var v_str = - venue_string(ent).trim() + " " + ent.year + ". " + doi_string(ent, true); - - if ((a_str + v_str).length < Math.min(40, ent.title.length)) { - cite += a_str + " " + v_str; - } else { - cite += a_str + "
" + v_str; - } - return cite; - } else { - return "?"; - } - } - - function domContentLoaded() { - return ['interactive', 'complete'].indexOf(document.readyState) !== -1; - } - - // Copyright 2018 The Distill Template Authors - // - // Licensed under the Apache License, Version 2.0 (the "License"); - // you may not use this file except in compliance with the License. - // You may obtain a copy of the License at - // - // http://www.apache.org/licenses/LICENSE-2.0 - // - // Unless required by applicable law or agreed to in writing, software - // distributed under the License is distributed on an "AS IS" BASIS, - // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - // See the License for the specific language governing permissions and - // limitations under the License. - - function _moveLegacyAffiliationFormatIntoArray(frontMatter) { - // authors used to have propoerties "affiliation" and "affiliationURL". - // We now encourage using an array for affiliations containing objects with - // properties "name" and "url". - for (let author of frontMatter.authors) { - const hasOldStyle = Boolean(author.affiliation); - const hasNewStyle = Boolean(author.affiliations); - if (!hasOldStyle) continue; - if (hasNewStyle) { - console.warn(`Author ${author.author} has both old-style ("affiliation" & "affiliationURL") and new style ("affiliations") affiliation information!`); - } else { - let newAffiliation = { - "name": author.affiliation - }; - if (author.affiliationURL) newAffiliation.url = author.affiliationURL; - author.affiliations = [newAffiliation]; - } - } - return frontMatter - } - - function parseFrontmatter(element) { - const scriptTag = element.firstElementChild; - if (scriptTag) { - const type = scriptTag.getAttribute('type'); - if (type.split('/')[1] == 'json') { - const content = scriptTag.textContent; - const parsed = JSON.parse(content); - return _moveLegacyAffiliationFormatIntoArray(parsed); - } else { - console.error('Distill only supports JSON frontmatter tags anymore; no more YAML.'); - } - } else { - console.error('You added a frontmatter tag but did not provide a script tag with front matter data in it. Please take a look at our templates.'); - } - return {}; - } - - class FrontMatter$1 extends HTMLElement { - - static get is() { return 'd-front-matter'; } - - constructor() { - super(); - - const options = {childList: true, characterData: true, subtree: true}; - const observer = new MutationObserver( (entries) => { - for (const entry of entries) { - if (entry.target.nodeName === 'SCRIPT' || entry.type === 'characterData') { - const data = parseFrontmatter(this); - this.notify(data); - } - } - }); - observer.observe(this, options); - } - - notify(data) { - const options = { detail: data, bubbles: true }; - const event = new CustomEvent('onFrontMatterChanged', options); - document.dispatchEvent(event); - } - - } - - // Copyright 2018 The Distill Template Authors - // - // Licensed under the Apache License, Version 2.0 (the "License"); - // you may not use this file except in compliance with the License. - // You may obtain a copy of the License at - // - // http://www.apache.org/licenses/LICENSE-2.0 - // - // Unless required by applicable law or agreed to in writing, software - // distributed under the License is distributed on an "AS IS" BASIS, - // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - // See the License for the specific language governing permissions and - // limitations under the License. - - // no appendix -> add appendix - // title in front, no h1 -> add it - // no title in front, h1 -> read and put into frontMatter - // footnote -> footnote list - // break up bib - // if citation, no bib-list -> add citation-list - - // if authors, no byline -> add byline - - function optionalComponents(dom, data) { - const body = dom.body; - const article = body.querySelector('d-article'); - - // If we don't have an article tag, something weird is going on—giving up. - if (!article) { - console.warn('No d-article tag found; skipping adding optional components!'); - return; - } - - let byline = dom.querySelector('d-byline'); - if (!byline) { - if (data.authors) { - byline = dom.createElement('d-byline'); - body.insertBefore(byline, article); - } else { - console.warn('No authors found in front matter; please add them before submission!'); - } - } - - let title = dom.querySelector('d-title'); - if (!title) { - title = dom.createElement('d-title'); - body.insertBefore(title, byline); - } - - let h1 = title.querySelector('h1'); - if (!h1) { - h1 = dom.createElement('h1'); - h1.textContent = data.title; - title.insertBefore(h1, title.firstChild); - } - - const hasPassword = typeof data.password !== 'undefined'; - let interstitial = body.querySelector('d-interstitial'); - if (hasPassword && !interstitial) { - const inBrowser = typeof window !== 'undefined'; - const onLocalhost = inBrowser && window.location.hostname.includes('localhost'); - if (!inBrowser || !onLocalhost) { - interstitial = dom.createElement('d-interstitial'); - interstitial.password = data.password; - body.insertBefore(interstitial, body.firstChild); - } - } else if (!hasPassword && interstitial) { - interstitial.parentElement.removeChild(this); - } - - let appendix = dom.querySelector('d-appendix'); - if (!appendix) { - appendix = dom.createElement('d-appendix'); - dom.body.appendChild(appendix); - } - - let footnoteList = dom.querySelector('d-footnote-list'); - if (!footnoteList) { - footnoteList = dom.createElement('d-footnote-list'); - appendix.appendChild(footnoteList); - } - - let citationList = dom.querySelector('d-citation-list'); - if (!citationList) { - citationList = dom.createElement('d-citation-list'); - appendix.appendChild(citationList); - } - - } - - // Copyright 2018 The Distill Template Authors - - const frontMatter = new FrontMatter(); - - const Controller = { - frontMatter: frontMatter, - waitingOn: { - bibliography: [], - citations: [] - }, - listeners: { - onCiteKeyCreated(event) { - const [citeTag, keys] = event.detail; - - // ensure we have citations - if (!frontMatter.citationsCollected) { - // console.debug('onCiteKeyCreated, but unresolved dependency ("citations"). Enqueing.'); - Controller.waitingOn.citations.push(() => - Controller.listeners.onCiteKeyCreated(event) - ); - return; - } - - // ensure we have a loaded bibliography - if (!frontMatter.bibliographyParsed) { - // console.debug('onCiteKeyCreated, but unresolved dependency ("bibliography"). Enqueing.'); - Controller.waitingOn.bibliography.push(() => - Controller.listeners.onCiteKeyCreated(event) - ); - return; - } - - const numbers = keys.map(key => frontMatter.citations.indexOf(key)); - citeTag.numbers = numbers; - const entries = keys.map(key => frontMatter.bibliography.get(key)); - citeTag.entries = entries; - }, - - onCiteKeyChanged() { - // const [citeTag, keys] = event.detail; - - // update citations - frontMatter.citations = collect_citations(); - frontMatter.citationsCollected = true; - for (const waitingCallback of Controller.waitingOn.citations.slice()) { - waitingCallback(); - } - - // update bibliography - const citationListTag = document.querySelector("d-citation-list"); - const bibliographyEntries = new Map( - frontMatter.citations.map(citationKey => { - return [citationKey, frontMatter.bibliography.get(citationKey)]; - }) - ); - citationListTag.citations = bibliographyEntries; - - const citeTags = document.querySelectorAll("d-cite"); - for (const citeTag of citeTags) { - console.log(citeTag); - const keys = citeTag.keys; - const numbers = keys.map(key => frontMatter.citations.indexOf(key)); - citeTag.numbers = numbers; - const entries = keys.map(key => frontMatter.bibliography.get(key)); - citeTag.entries = entries; - } - }, - - onCiteKeyRemoved(event) { - Controller.listeners.onCiteKeyChanged(event); - }, - - onBibliographyChanged(event) { - const citationListTag = document.querySelector("d-citation-list"); - - const bibliography = event.detail; - - frontMatter.bibliography = bibliography; - frontMatter.bibliographyParsed = true; - for (const waitingCallback of Controller.waitingOn.bibliography.slice()) { - waitingCallback(); - } - - // ensure we have citations - if (!frontMatter.citationsCollected) { - Controller.waitingOn.citations.push(function() { - Controller.listeners.onBibliographyChanged({ - target: event.target, - detail: event.detail - }); - }); - return; - } - - if (citationListTag.hasAttribute("distill-prerendered")) { - console.debug("Citation list was prerendered; not updating it."); - } else { - const entries = new Map( - frontMatter.citations.map(citationKey => { - return [citationKey, frontMatter.bibliography.get(citationKey)]; - }) - ); - citationListTag.citations = entries; - } - }, - - onFootnoteChanged() { - // const footnote = event.detail; - //TODO: optimize to only update current footnote - const footnotesList = document.querySelector("d-footnote-list"); - if (footnotesList) { - const footnotes = document.querySelectorAll("d-footnote"); - footnotesList.footnotes = footnotes; - } - }, - - onFrontMatterChanged(event) { - const data = event.detail; - mergeFromYMLFrontmatter(frontMatter, data); - - const interstitial = document.querySelector("d-interstitial"); - if (interstitial) { - if (typeof frontMatter.password !== "undefined") { - interstitial.password = frontMatter.password; - } else { - interstitial.parentElement.removeChild(interstitial); - } - } - - const prerendered = document.body.hasAttribute("distill-prerendered"); - if (!prerendered && domContentLoaded()) { - optionalComponents(document, frontMatter); - - const appendix = document.querySelector("distill-appendix"); - if (appendix) { - appendix.frontMatter = frontMatter; - } - - const byline = document.querySelector("d-byline"); - if (byline) { - byline.frontMatter = frontMatter; - } - - if (data.katex) { - DMath.katexOptions = data.katex; - } - } - }, - - DOMContentLoaded() { - if (Controller.loaded) { - console.warn( - "Controller received DOMContentLoaded but was already loaded!" - ); - return; - } else if (!domContentLoaded()) { - console.warn( - "Controller received DOMContentLoaded at document.readyState: " + - document.readyState + - "!" - ); - return; - } else { - Controller.loaded = true; - console.debug("Runlevel 4: Controller running DOMContentLoaded"); - } - - const frontMatterTag = document.querySelector("d-front-matter"); - if (frontMatterTag) { - const data = parseFrontmatter(frontMatterTag); - Controller.listeners.onFrontMatterChanged({ detail: data }); - } - - // Resolving "citations" dependency due to initial DOM load - frontMatter.citations = collect_citations(); - frontMatter.citationsCollected = true; - for (const waitingCallback of Controller.waitingOn.citations.slice()) { - waitingCallback(); - } - - if (frontMatter.bibliographyParsed) { - for (const waitingCallback of Controller.waitingOn.bibliography.slice()) { - waitingCallback(); - } - } - - const footnotesList = document.querySelector("d-footnote-list"); - if (footnotesList) { - const footnotes = document.querySelectorAll("d-footnote"); - footnotesList.footnotes = footnotes; - } - } - } // listeners - }; // Controller - - var base = "/*\n * Copyright 2018 The Distill Template Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nhtml {\n font-size: 14px;\n\tline-height: 1.6em;\n /* font-family: \"Libre Franklin\", \"Helvetica Neue\", sans-serif; */\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Oxygen, Ubuntu, Cantarell, \"Fira Sans\", \"Droid Sans\", \"Helvetica Neue\", Arial, sans-serif;\n /*, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\";*/\n text-size-adjust: 100%;\n -ms-text-size-adjust: 100%;\n -webkit-text-size-adjust: 100%;\n}\n\n@media(min-width: 768px) {\n html {\n font-size: 16px;\n }\n}\n\nbody {\n margin: 0;\n}\n\na {\n color: #004276;\n}\n\nfigure {\n margin: 0;\n}\n\ntable {\n\tborder-collapse: collapse;\n\tborder-spacing: 0;\n}\n\ntable th {\n\ttext-align: left;\n}\n\ntable thead {\n border-bottom: 1px solid rgba(0, 0, 0, 0.05);\n}\n\ntable thead th {\n padding-bottom: 0.5em;\n}\n\ntable tbody :first-child td {\n padding-top: 0.5em;\n}\n\npre {\n overflow: auto;\n max-width: 100%;\n}\n\np {\n margin-top: 0;\n margin-bottom: 1em;\n}\n\nsup, sub {\n vertical-align: baseline;\n position: relative;\n top: -0.4em;\n line-height: 1em;\n}\n\nsub {\n top: 0.4em;\n}\n\n.kicker,\n.marker {\n font-size: 15px;\n font-weight: 600;\n color: rgba(0, 0, 0, 0.5);\n}\n\n\n/* Headline */\n\n@media(min-width: 1024px) {\n d-title h1 span {\n display: block;\n }\n}\n\n/* Figure */\n\nfigure {\n position: relative;\n margin-bottom: 2.5em;\n margin-top: 1.5em;\n}\n\nfigcaption+figure {\n\n}\n\nfigure img {\n width: 100%;\n}\n\nfigure svg text,\nfigure svg tspan {\n}\n\nfigcaption,\n.figcaption {\n color: rgba(0, 0, 0, 0.6);\n font-size: 12px;\n line-height: 1.5em;\n}\n\n@media(min-width: 1024px) {\nfigcaption,\n.figcaption {\n font-size: 13px;\n }\n}\n\nfigure.external img {\n background: white;\n border: 1px solid rgba(0, 0, 0, 0.1);\n box-shadow: 0 1px 8px rgba(0, 0, 0, 0.1);\n padding: 18px;\n box-sizing: border-box;\n}\n\nfigcaption a {\n color: rgba(0, 0, 0, 0.6);\n}\n\nfigcaption b,\nfigcaption strong, {\n font-weight: 600;\n color: rgba(0, 0, 0, 1.0);\n}\n"; - - var layout = "/*\n * Copyright 2018 The Distill Template Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n@supports not (display: grid) {\n .base-grid,\n distill-header,\n d-title,\n d-abstract,\n d-article,\n d-appendix,\n distill-appendix,\n d-byline,\n d-footnote-list,\n d-citation-list,\n distill-footer {\n display: block;\n padding: 8px;\n }\n}\n\n.base-grid,\ndistill-header,\nd-title,\nd-abstract,\nd-article,\nd-appendix,\ndistill-appendix,\nd-byline,\nd-footnote-list,\nd-citation-list,\ndistill-footer {\n display: grid;\n justify-items: stretch;\n grid-template-columns: [screen-start] 8px [page-start kicker-start text-start gutter-start middle-start] 1fr 1fr 1fr 1fr 1fr 1fr 1fr 1fr [text-end page-end gutter-end kicker-end middle-end] 8px [screen-end];\n grid-column-gap: 8px;\n}\n\n.grid {\n display: grid;\n grid-column-gap: 8px;\n}\n\n@media(min-width: 768px) {\n .base-grid,\n distill-header,\n d-title,\n d-abstract,\n d-article,\n d-appendix,\n distill-appendix,\n d-byline,\n d-footnote-list,\n d-citation-list,\n distill-footer {\n grid-template-columns: [screen-start] 1fr [page-start kicker-start middle-start text-start] 45px 45px 45px 45px 45px 45px 45px 45px [ kicker-end text-end gutter-start] 45px [middle-end] 45px [page-end gutter-end] 1fr [screen-end];\n grid-column-gap: 16px;\n }\n\n .grid {\n grid-column-gap: 16px;\n }\n}\n\n@media(min-width: 1000px) {\n .base-grid,\n distill-header,\n d-title,\n d-abstract,\n d-article,\n d-appendix,\n distill-appendix,\n d-byline,\n d-footnote-list,\n d-citation-list,\n distill-footer {\n grid-template-columns: [screen-start] 1fr [page-start kicker-start] 50px [middle-start] 50px [text-start kicker-end] 50px 50px 50px 50px 50px 50px 50px 50px [text-end gutter-start] 50px [middle-end] 50px [page-end gutter-end] 1fr [screen-end];\n grid-column-gap: 16px;\n }\n\n .grid {\n grid-column-gap: 16px;\n }\n}\n\n@media(min-width: 1180px) {\n .base-grid,\n distill-header,\n d-title,\n d-abstract,\n d-article,\n d-appendix,\n distill-appendix,\n d-byline,\n d-footnote-list,\n d-citation-list,\n distill-footer {\n grid-template-columns: [screen-start] 1fr [page-start kicker-start] 60px [middle-start] 60px [text-start kicker-end] 60px 60px 60px 60px 60px 60px 60px 60px [text-end gutter-start] 60px [middle-end] 60px [page-end gutter-end] 1fr [screen-end];\n grid-column-gap: 32px;\n }\n\n .grid {\n grid-column-gap: 32px;\n }\n}\n\n\n\n\n.base-grid {\n grid-column: screen;\n}\n\n/* .l-body,\nd-article > * {\n grid-column: text;\n}\n\n.l-page,\nd-title > *,\nd-figure {\n grid-column: page;\n} */\n\n.l-gutter {\n grid-column: gutter;\n}\n\n.l-text,\n.l-body {\n grid-column: text;\n}\n\n.l-page {\n grid-column: page;\n}\n\n.l-body-outset {\n grid-column: middle;\n}\n\n.l-page-outset {\n grid-column: page;\n}\n\n.l-screen {\n grid-column: screen;\n}\n\n.l-screen-inset {\n grid-column: screen;\n padding-left: 16px;\n padding-left: 16px;\n}\n\n\n/* Aside */\n\nd-article aside {\n grid-column: gutter;\n font-size: 12px;\n line-height: 1.6em;\n color: rgba(0, 0, 0, 0.6)\n}\n\n@media(min-width: 768px) {\n aside {\n grid-column: gutter;\n }\n\n .side {\n grid-column: gutter;\n }\n}\n"; - - var print = "/*\n * Copyright 2018 The Distill Template Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n@media print {\n\n @page {\n size: 8in 11in;\n @bottom-right {\n content: counter(page) \" of \" counter(pages);\n }\n }\n\n html {\n /* no general margins -- CSS Grid takes care of those */\n }\n\n p, code {\n page-break-inside: avoid;\n }\n\n h2, h3 {\n page-break-after: avoid;\n }\n\n d-header {\n visibility: hidden;\n }\n\n d-footer {\n display: none!important;\n }\n\n}\n"; - - var byline = "/*\n * Copyright 2018 The Distill Template Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nd-byline {\n contain: style;\n overflow: hidden;\n border-top: 1px solid rgba(0, 0, 0, 0.1);\n font-size: 0.8rem;\n line-height: 1.8em;\n padding: 1.5rem 0;\n min-height: 1.8em;\n}\n\n\nd-byline .byline {\n grid-template-columns: 1fr 1fr;\n grid-column: text;\n}\n\n@media(min-width: 768px) {\n d-byline .byline {\n grid-template-columns: 1fr 1fr 1fr 1fr;\n }\n}\n\nd-byline .authors-affiliations {\n grid-column-end: span 2;\n grid-template-columns: 1fr 1fr;\n margin-bottom: 1em;\n}\n\n@media(min-width: 768px) {\n d-byline .authors-affiliations {\n margin-bottom: 0;\n }\n}\n\nd-byline h3 {\n font-size: 0.6rem;\n font-weight: 400;\n color: rgba(0, 0, 0, 0.5);\n margin: 0;\n text-transform: uppercase;\n}\n\nd-byline p {\n margin: 0;\n}\n\nd-byline a,\nd-article d-byline a {\n color: rgba(0, 0, 0, 0.8);\n text-decoration: none;\n border-bottom: none;\n}\n\nd-article d-byline a:hover {\n text-decoration: underline;\n border-bottom: none;\n}\n\nd-byline p.author {\n font-weight: 500;\n}\n\nd-byline .affiliations {\n\n}\n"; - - var article = "/*\n * Copyright 2018 The Distill Template Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nd-article {\n contain: layout style;\n overflow-x: hidden;\n border-top: 1px solid rgba(0, 0, 0, 0.1);\n padding-top: 2rem;\n color: rgba(0, 0, 0, 0.8);\n}\n\nd-article > * {\n grid-column: text;\n}\n\n@media(min-width: 768px) {\n d-article {\n font-size: 16px;\n }\n}\n\n@media(min-width: 1024px) {\n d-article {\n font-size: 1.06rem;\n line-height: 1.7em;\n }\n}\n\n\n/* H2 */\n\n\nd-article .marker {\n text-decoration: none;\n border: none;\n counter-reset: section;\n grid-column: kicker;\n line-height: 1.7em;\n}\n\nd-article .marker:hover {\n border: none;\n}\n\nd-article .marker span {\n padding: 0 3px 4px;\n border-bottom: 1px solid rgba(0, 0, 0, 0.2);\n position: relative;\n top: 4px;\n}\n\nd-article .marker:hover span {\n color: rgba(0, 0, 0, 0.7);\n border-bottom: 1px solid rgba(0, 0, 0, 0.7);\n}\n\nd-article h2 {\n font-weight: 600;\n font-size: 24px;\n line-height: 1.25em;\n margin: 2rem 0 1.5rem 0;\n border-bottom: 1px solid rgba(0, 0, 0, 0.1);\n padding-bottom: 1rem;\n}\n\n@media(min-width: 1024px) {\n d-article h2 {\n font-size: 36px;\n }\n}\n\n/* H3 */\n\nd-article h3 {\n font-weight: 700;\n font-size: 18px;\n line-height: 1.4em;\n margin-bottom: 1em;\n margin-top: 2em;\n}\n\n@media(min-width: 1024px) {\n d-article h3 {\n font-size: 20px;\n }\n}\n\n/* H4 */\n\nd-article h4 {\n font-weight: 600;\n text-transform: uppercase;\n font-size: 14px;\n line-height: 1.4em;\n}\n\nd-article a {\n color: inherit;\n}\n\nd-article p,\nd-article ul,\nd-article ol,\nd-article blockquote {\n margin-top: 0;\n margin-bottom: 1em;\n margin-left: 0;\n margin-right: 0;\n}\n\nd-article blockquote {\n border-left: 2px solid rgba(0, 0, 0, 0.2);\n padding-left: 2em;\n font-style: italic;\n color: rgba(0, 0, 0, 0.6);\n}\n\nd-article a {\n border-bottom: 1px solid rgba(0, 0, 0, 0.4);\n text-decoration: none;\n}\n\nd-article a:hover {\n border-bottom: 1px solid rgba(0, 0, 0, 0.8);\n}\n\nd-article .link {\n text-decoration: underline;\n cursor: pointer;\n}\n\nd-article ul,\nd-article ol {\n padding-left: 24px;\n}\n\nd-article li {\n margin-bottom: 1em;\n margin-left: 0;\n padding-left: 0;\n}\n\nd-article li:last-child {\n margin-bottom: 0;\n}\n\nd-article pre {\n font-size: 14px;\n margin-bottom: 20px;\n}\n\nd-article hr {\n grid-column: screen;\n width: 100%;\n border: none;\n border-bottom: 1px solid rgba(0, 0, 0, 0.1);\n margin-top: 60px;\n margin-bottom: 60px;\n}\n\nd-article section {\n margin-top: 60px;\n margin-bottom: 60px;\n}\n\nd-article span.equation-mimic {\n font-family: georgia;\n font-size: 115%;\n font-style: italic;\n}\n\nd-article > d-code,\nd-article section > d-code {\n display: block;\n}\n\nd-article > d-math[block],\nd-article section > d-math[block] {\n display: block;\n}\n\n@media (max-width: 768px) {\n d-article > d-code,\n d-article section > d-code,\n d-article > d-math[block],\n d-article section > d-math[block] {\n overflow-x: scroll;\n -ms-overflow-style: none; // IE 10+\n overflow: -moz-scrollbars-none; // Firefox\n }\n\n d-article > d-code::-webkit-scrollbar,\n d-article section > d-code::-webkit-scrollbar,\n d-article > d-math[block]::-webkit-scrollbar,\n d-article section > d-math[block]::-webkit-scrollbar {\n display: none; // Safari and Chrome\n }\n}\n\nd-article .citation {\n color: #668;\n cursor: pointer;\n}\n\nd-include {\n width: auto;\n display: block;\n}\n\nd-figure {\n contain: layout style;\n}\n\n/* KaTeX */\n\n.katex, .katex-prerendered {\n contain: style;\n display: inline-block;\n}\n\n/* Tables */\n\nd-article table {\n border-collapse: collapse;\n margin-bottom: 1.5rem;\n border-bottom: 1px solid rgba(0, 0, 0, 0.2);\n}\n\nd-article table th {\n border-bottom: 1px solid rgba(0, 0, 0, 0.2);\n}\n\nd-article table td {\n border-bottom: 1px solid rgba(0, 0, 0, 0.05);\n}\n\nd-article table tr:last-of-type td {\n border-bottom: none;\n}\n\nd-article table th,\nd-article table td {\n font-size: 15px;\n padding: 2px 8px;\n}\n\nd-article table tbody :first-child td {\n padding-top: 2px;\n}\n"; - - var title = "/*\n * Copyright 2018 The Distill Template Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nd-title {\n padding: 2rem 0 1.5rem;\n contain: layout style;\n overflow-x: hidden;\n}\n\n@media(min-width: 768px) {\n d-title {\n padding: 4rem 0 1.5rem;\n }\n}\n\nd-title h1 {\n grid-column: text;\n font-size: 40px;\n font-weight: 700;\n line-height: 1.1em;\n margin: 0 0 0.5rem;\n}\n\n@media(min-width: 768px) {\n d-title h1 {\n font-size: 50px;\n }\n}\n\nd-title p {\n font-weight: 300;\n font-size: 1.2rem;\n line-height: 1.55em;\n grid-column: text;\n}\n\nd-title .status {\n margin-top: 0px;\n font-size: 12px;\n color: #009688;\n opacity: 0.8;\n grid-column: kicker;\n}\n\nd-title .status span {\n line-height: 1;\n display: inline-block;\n padding: 6px 0;\n border-bottom: 1px solid #80cbc4;\n font-size: 11px;\n text-transform: uppercase;\n}\n"; - - // Copyright 2018 The Distill Template Authors - - const styles = base + layout + title + byline + article + math + print; - - function makeStyleTag(dom) { - - const styleTagId = 'distill-prerendered-styles'; - const prerenderedTag = dom.getElementById(styleTagId); - if (!prerenderedTag) { - const styleTag = dom.createElement('style'); - styleTag.id = styleTagId; - styleTag.type = 'text/css'; - const cssTextTag = dom.createTextNode(styles); - styleTag.appendChild(cssTextTag); - const firstScriptTag = dom.head.querySelector('script'); - dom.head.insertBefore(styleTag, firstScriptTag); - } - - } - - // Copyright 2018 The Distill Template Authors - // - // Licensed under the Apache License, Version 2.0 (the "License"); - // you may not use this file except in compliance with the License. - // You may obtain a copy of the License at - // - // http://www.apache.org/licenses/LICENSE-2.0 - // - // Unless required by applicable law or agreed to in writing, software - // distributed under the License is distributed on an "AS IS" BASIS, - // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - // See the License for the specific language governing permissions and - // limitations under the License. - - function addPolyfill(polyfill, polyfillLoadedCallback) { - console.debug('Runlevel 0: Polyfill required: ' + polyfill.name); - const script = document.createElement('script'); - script.src = polyfill.url; - script.async = false; - if (polyfillLoadedCallback) { - script.onload = function() { polyfillLoadedCallback(polyfill); }; - } - script.onerror = function() { - new Error('Runlevel 0: Polyfills failed to load script ' + polyfill.name); - }; - document.head.appendChild(script); - } - - const polyfills = [ - { - name: 'WebComponents', - support: function() { - return 'customElements' in window && - 'attachShadow' in Element.prototype && - 'getRootNode' in Element.prototype && - 'content' in document.createElement('template') && - 'Promise' in window && - 'from' in Array; - }, - url: 'https://distill.pub/third-party/polyfills/webcomponents-lite.js' - }, { - name: 'IntersectionObserver', - support: function() { - return 'IntersectionObserver' in window && - 'IntersectionObserverEntry' in window; - }, - url: 'https://distill.pub/third-party/polyfills/intersection-observer.js' - }, - ]; - - class Polyfills { - - static browserSupportsAllFeatures() { - return polyfills.every((poly) => poly.support()); - } - - static load(callback) { - // Define an intermediate callback that checks if all is loaded. - const polyfillLoaded = function(polyfill) { - polyfill.loaded = true; - console.debug('Runlevel 0: Polyfill has finished loading: ' + polyfill.name); - // console.debug(window[polyfill.name]); - if (Polyfills.neededPolyfills.every((poly) => poly.loaded)) { - console.debug('Runlevel 0: All required polyfills have finished loading.'); - console.debug('Runlevel 0->1.'); - window.distillRunlevel = 1; - callback(); - } - }; - // Add polyfill script tags - for (const polyfill of Polyfills.neededPolyfills) { - addPolyfill(polyfill, polyfillLoaded); - } - } - - static get neededPolyfills() { - if (!Polyfills._neededPolyfills) { - Polyfills._neededPolyfills = polyfills.filter((poly) => !poly.support()); - } - return Polyfills._neededPolyfills; - } - } - - // Copyright 2018 The Distill Template Authors - // - // Licensed under the Apache License, Version 2.0 (the "License"); - // you may not use this file except in compliance with the License. - // You may obtain a copy of the License at - // - // http://www.apache.org/licenses/LICENSE-2.0 - // - // Unless required by applicable law or agreed to in writing, software - // distributed under the License is distributed on an "AS IS" BASIS, - // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - // See the License for the specific language governing permissions and - // limitations under the License. - - // const marginSmall = 16; - // const marginLarge = 3 * marginSmall; - // const margin = marginSmall + marginLarge; - // const gutter = marginSmall; - // const outsetAmount = margin / 2; - // const numCols = 4; - // const numGutters = numCols - 1; - // const columnWidth = (768 - 2 * marginLarge - numGutters * gutter) / numCols; - // - // const screenwidth = 768; - // const pageWidth = screenwidth - 2 * marginLarge; - // const bodyWidth = pageWidth - columnWidth - gutter; - - function body(selector) { - return `${selector} { - grid-column: left / text; - } - `; - } - - // Copyright 2018 The Distill Template Authors - - const T$1 = Template('d-abstract', ` - - - -`); - - class Abstract extends T$1(HTMLElement) { - - } - - // Copyright 2018 The Distill Template Authors - - const T$2 = Template('d-appendix', ` - - -`, false); - - class Appendix extends T$2(HTMLElement) { - - } - - // Copyright 2018 The Distill Template Authors - // - // Licensed under the Apache License, Version 2.0 (the "License"); - // you may not use this file except in compliance with the License. - // You may obtain a copy of the License at - // - // http://www.apache.org/licenses/LICENSE-2.0 - // - // Unless required by applicable law or agreed to in writing, software - // distributed under the License is distributed on an "AS IS" BASIS, - // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - // See the License for the specific language governing permissions and - // limitations under the License. - - // import { Template } from '../mixins/template'; - // import { Controller } from '../controller'; - - const isOnlyWhitespace = /^\s*$/; - - class Article extends HTMLElement { - static get is() { return 'd-article'; } - - constructor() { - super(); - - new MutationObserver( (mutations) => { - for (const mutation of mutations) { - for (const addedNode of mutation.addedNodes) { - switch (addedNode.nodeName) { - case '#text': { // usually text nodes are only linebreaks. - const text = addedNode.nodeValue; - if (!isOnlyWhitespace.test(text)) { - console.warn('Use of unwrapped text in distill articles is discouraged as it breaks layout! Please wrap any text in a or

tag. We found the following text: ' + text); - const wrapper = document.createElement('span'); - wrapper.innerHTML = addedNode.nodeValue; - addedNode.parentNode.insertBefore(wrapper, addedNode); - addedNode.parentNode.removeChild(addedNode); - } - } break; - } - } - } - }).observe(this, {childList: true}); - } - - } - - var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {}; - - function createCommonjsModule(fn, module) { - return module = { exports: {} }, fn(module, module.exports), module.exports; - } - - var bibtexParse = createCommonjsModule(function (module, exports) { - /* start bibtexParse 0.0.22 */ - - //Original work by Henrik Muehe (c) 2010 - // - //CommonJS port by Mikola Lysenko 2013 - // - //Port to Browser lib by ORCID / RCPETERS - // - //Issues: - //no comment handling within strings - //no string concatenation - //no variable values yet - //Grammar implemented here: - //bibtex -> (string | preamble | comment | entry)*; - //string -> '@STRING' '{' key_equals_value '}'; - //preamble -> '@PREAMBLE' '{' value '}'; - //comment -> '@COMMENT' '{' value '}'; - //entry -> '@' key '{' key ',' key_value_list '}'; - //key_value_list -> key_equals_value (',' key_equals_value)*; - //key_equals_value -> key '=' value; - //value -> value_quotes | value_braces | key; - //value_quotes -> '"' .*? '"'; // not quite - //value_braces -> '{' .*? '"'; // not quite - (function(exports) { - - function BibtexParser() { - - this.months = ["jan", "feb", "mar", "apr", "may", "jun", "jul", "aug", "sep", "oct", "nov", "dec"]; - this.notKey = [',','{','}',' ','=']; - this.pos = 0; - this.input = ""; - this.entries = new Array(); - - this.currentEntry = ""; - - this.setInput = function(t) { - this.input = t; - }; - - this.getEntries = function() { - return this.entries; - }; - - this.isWhitespace = function(s) { - return (s == ' ' || s == '\r' || s == '\t' || s == '\n'); - }; - - this.match = function(s, canCommentOut) { - if (canCommentOut == undefined || canCommentOut == null) - canCommentOut = true; - this.skipWhitespace(canCommentOut); - if (this.input.substring(this.pos, this.pos + s.length) == s) { - this.pos += s.length; - } else { - throw "Token mismatch, expected " + s + ", found " - + this.input.substring(this.pos); - } this.skipWhitespace(canCommentOut); - }; - - this.tryMatch = function(s, canCommentOut) { - if (canCommentOut == undefined || canCommentOut == null) - canCommentOut = true; - this.skipWhitespace(canCommentOut); - if (this.input.substring(this.pos, this.pos + s.length) == s) { - return true; - } else { - return false; - } }; - - /* when search for a match all text can be ignored, not just white space */ - this.matchAt = function() { - while (this.input.length > this.pos && this.input[this.pos] != '@') { - this.pos++; - } - if (this.input[this.pos] == '@') { - return true; - } return false; - }; - - this.skipWhitespace = function(canCommentOut) { - while (this.isWhitespace(this.input[this.pos])) { - this.pos++; - } if (this.input[this.pos] == "%" && canCommentOut == true) { - while (this.input[this.pos] != "\n") { - this.pos++; - } this.skipWhitespace(canCommentOut); - } }; - - this.value_braces = function() { - var bracecount = 0; - this.match("{", false); - var start = this.pos; - var escaped = false; - while (true) { - if (!escaped) { - if (this.input[this.pos] == '}') { - if (bracecount > 0) { - bracecount--; - } else { - var end = this.pos; - this.match("}", false); - return this.input.substring(start, end); - } } else if (this.input[this.pos] == '{') { - bracecount++; - } else if (this.pos >= this.input.length - 1) { - throw "Unterminated value"; - } } if (this.input[this.pos] == '\\' && escaped == false) - escaped = true; - else - escaped = false; - this.pos++; - } }; - - this.value_comment = function() { - var str = ''; - var brcktCnt = 0; - while (!(this.tryMatch("}", false) && brcktCnt == 0)) { - str = str + this.input[this.pos]; - if (this.input[this.pos] == '{') - brcktCnt++; - if (this.input[this.pos] == '}') - brcktCnt--; - if (this.pos >= this.input.length - 1) { - throw "Unterminated value:" + this.input.substring(start); - } this.pos++; - } return str; - }; - - this.value_quotes = function() { - this.match('"', false); - var start = this.pos; - var escaped = false; - while (true) { - if (!escaped) { - if (this.input[this.pos] == '"') { - var end = this.pos; - this.match('"', false); - return this.input.substring(start, end); - } else if (this.pos >= this.input.length - 1) { - throw "Unterminated value:" + this.input.substring(start); - } } - if (this.input[this.pos] == '\\' && escaped == false) - escaped = true; - else - escaped = false; - this.pos++; - } }; - - this.single_value = function() { - var start = this.pos; - if (this.tryMatch("{")) { - return this.value_braces(); - } else if (this.tryMatch('"')) { - return this.value_quotes(); - } else { - var k = this.key(); - if (k.match("^[0-9]+$")) - return k; - else if (this.months.indexOf(k.toLowerCase()) >= 0) - return k.toLowerCase(); - else - throw "Value expected:" + this.input.substring(start) + ' for key: ' + k; - - } }; - - this.value = function() { - var values = []; - values.push(this.single_value()); - while (this.tryMatch("#")) { - this.match("#"); - values.push(this.single_value()); - } return values.join(""); - }; - - this.key = function() { - var start = this.pos; - while (true) { - if (this.pos >= this.input.length) { - throw "Runaway key"; - } // а-яА-Я is Cyrillic - //console.log(this.input[this.pos]); - if (this.notKey.indexOf(this.input[this.pos]) >= 0) { - return this.input.substring(start, this.pos); - } else { - this.pos++; - - } } }; - - this.key_equals_value = function() { - var key = this.key(); - if (this.tryMatch("=")) { - this.match("="); - var val = this.value(); - return [ key, val ]; - } else { - throw "... = value expected, equals sign missing:" - + this.input.substring(this.pos); - } }; - - this.key_value_list = function() { - var kv = this.key_equals_value(); - this.currentEntry['entryTags'] = {}; - this.currentEntry['entryTags'][kv[0]] = kv[1]; - while (this.tryMatch(",")) { - this.match(","); - // fixes problems with commas at the end of a list - if (this.tryMatch("}")) { - break; - } - kv = this.key_equals_value(); - this.currentEntry['entryTags'][kv[0]] = kv[1]; - } }; - - this.entry_body = function(d) { - this.currentEntry = {}; - this.currentEntry['citationKey'] = this.key(); - this.currentEntry['entryType'] = d.substring(1); - this.match(","); - this.key_value_list(); - this.entries.push(this.currentEntry); - }; - - this.directive = function() { - this.match("@"); - return "@" + this.key(); - }; - - this.preamble = function() { - this.currentEntry = {}; - this.currentEntry['entryType'] = 'PREAMBLE'; - this.currentEntry['entry'] = this.value_comment(); - this.entries.push(this.currentEntry); - }; - - this.comment = function() { - this.currentEntry = {}; - this.currentEntry['entryType'] = 'COMMENT'; - this.currentEntry['entry'] = this.value_comment(); - this.entries.push(this.currentEntry); - }; - - this.entry = function(d) { - this.entry_body(d); - }; - - this.bibtex = function() { - while (this.matchAt()) { - var d = this.directive(); - this.match("{"); - if (d == "@STRING") { - this.string(); - } else if (d == "@PREAMBLE") { - this.preamble(); - } else if (d == "@COMMENT") { - this.comment(); - } else { - this.entry(d); - } - this.match("}"); - } }; - } - exports.toJSON = function(bibtex) { - var b = new BibtexParser(); - b.setInput(bibtex); - b.bibtex(); - return b.entries; - }; - - /* added during hackathon don't hate on me */ - exports.toBibtex = function(json) { - var out = ''; - for ( var i in json) { - out += "@" + json[i].entryType; - out += '{'; - if (json[i].citationKey) - out += json[i].citationKey + ', '; - if (json[i].entry) - out += json[i].entry ; - if (json[i].entryTags) { - var tags = ''; - for (var jdx in json[i].entryTags) { - if (tags.length != 0) - tags += ', '; - tags += jdx + '= {' + json[i].entryTags[jdx] + '}'; - } - out += tags; - } - out += '}\n\n'; - } - return out; - - }; - - })( exports); - - /* end bibtexParse */ - }); - - // Copyright 2018 The Distill Template Authors - - function normalizeTag(string) { - return string - .replace(/[\t\n ]+/g, ' ') - .replace(/{\\["^`.'acu~Hvs]( )?([a-zA-Z])}/g, (full, x, char) => char) - .replace(/{\\([a-zA-Z])}/g, (full, char) => char); - } - - function parseBibtex(bibtex) { - const bibliography = new Map(); - const parsedEntries = bibtexParse.toJSON(bibtex); - for (const entry of parsedEntries) { - // normalize tags; note entryTags is an object, not Map - for (const [key, value] of Object.entries(entry.entryTags)) { - entry.entryTags[key.toLowerCase()] = normalizeTag(value); - } - entry.entryTags.type = entry.entryType; - // add to bibliography - bibliography.set(entry.citationKey, entry.entryTags); - } - return bibliography; - } - - function serializeFrontmatterToBibtex(frontMatter) { - return `@article{${frontMatter.slug}, - author = {${frontMatter.bibtexAuthors}}, - title = {${frontMatter.title}}, - journal = {${frontMatter.journal.title}}, - year = {${frontMatter.publishedYear}}, - note = {${frontMatter.url}}, - doi = {${frontMatter.doi}} -}`; - } - - // Copyright 2018 The Distill Template Authors - - class Bibliography extends HTMLElement { - - static get is() { return 'd-bibliography'; } - - constructor() { - super(); - - // set up mutation observer - const options = {childList: true, characterData: true, subtree: true}; - const observer = new MutationObserver( (entries) => { - for (const entry of entries) { - if (entry.target.nodeName === 'SCRIPT' || entry.type === 'characterData') { - this.parseIfPossible(); - } - } - }); - observer.observe(this, options); - } - - connectedCallback() { - requestAnimationFrame(() => { - this.parseIfPossible(); - }); - } - - parseIfPossible() { - const scriptTag = this.querySelector('script'); - if (!scriptTag) return; - if (scriptTag.type == 'text/bibtex') { - const newBibtex = scriptTag.textContent; - if (this.bibtex !== newBibtex) { - this.bibtex = newBibtex; - const bibliography = parseBibtex(this.bibtex); - this.notify(bibliography); - } - } else if (scriptTag.type == 'text/json') { - const bibliography = new Map(JSON.parse(scriptTag.textContent)); - this.notify(bibliography); - } else { - console.warn('Unsupported bibliography script tag type: ' + scriptTag.type); - } - } - - notify(bibliography) { - const options = { detail: bibliography, bubbles: true }; - const event = new CustomEvent('onBibliographyChanged', options); - this.dispatchEvent(event); - } - - /* observe 'src' attribute */ - - static get observedAttributes() { - return ['src']; - } - - receivedBibtex(event) { - const bibliography = parseBibtex(event.target.response); - this.notify(bibliography); - } - - attributeChangedCallback(name, oldValue, newValue) { - var oReq = new XMLHttpRequest(); - oReq.onload = (e) => this.receivedBibtex(e); - oReq.onerror = () => console.warn(`Could not load Bibtex! (tried ${newValue})`); - oReq.responseType = 'text'; - oReq.open('GET', newValue, true); - oReq.send(); - } - - - } - - // Copyright 2018 The Distill Template Authors - // - // Licensed under the Apache License, Version 2.0 (the "License"); - // you may not use this file except in compliance with the License. - // You may obtain a copy of the License at - // - // http://www.apache.org/licenses/LICENSE-2.0 - // - // Unless required by applicable law or agreed to in writing, software - // distributed under the License is distributed on an "AS IS" BASIS, - // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - // See the License for the specific language governing permissions and - // limitations under the License. - - // import style from '../styles/d-byline.css'; - - function bylineTemplate(frontMatter) { - return ` -

-`; - } - - class Byline extends HTMLElement { - - static get is() { return 'd-byline'; } - - set frontMatter(frontMatter) { - this.innerHTML = bylineTemplate(frontMatter); - } - - } - - // Copyright 2018 The Distill Template Authors - - const T$3 = Template( - "d-cite", - ` - - - - -
- -
-` - ); - - class Cite extends T$3(HTMLElement) { - /* Lifecycle */ - constructor() { - super(); - this._numbers = []; - this._entries = []; - } - - connectedCallback() { - this.outerSpan = this.root.querySelector("#citation-"); - this.innerSpan = this.root.querySelector(".citation-number"); - this.hoverBox = this.root.querySelector("d-hover-box"); - window.customElements.whenDefined("d-hover-box").then(() => { - this.hoverBox.listen(this); - }); - // in case this component got connected after values were set - if (this.numbers) { - this.displayNumbers(this.numbers); - } - if (this.entries) { - this.displayEntries(this.entries); - } - } - - //TODO This causes an infinite loop on firefox with polyfills. - // This is only needed for interactive editing so no priority. - // disconnectedCallback() { - // const options = { detail: [this, this.keys], bubbles: true }; - // const event = new CustomEvent('onCiteKeyRemoved', options); - // document.dispatchEvent(event); - // } - - /* observe 'key' attribute */ - - static get observedAttributes() { - return ["key", "bibtex-key"]; - } - - attributeChangedCallback(name, oldValue, newValue) { - const eventName = oldValue ? "onCiteKeyChanged" : "onCiteKeyCreated"; - const keys = newValue.split(",").map(k => k.trim()); - const options = { detail: [this, keys], bubbles: true }; - const event = new CustomEvent(eventName, options); - document.dispatchEvent(event); - } - - set key(value) { - this.setAttribute("key", value); - } - - get key() { - return this.getAttribute("key") || this.getAttribute("bibtex-key"); - } - - get keys() { - const result = this.key.split(","); - console.log(result); - return result; - } - - /* Setters & Rendering */ - - set numbers(numbers) { - this._numbers = numbers; - this.displayNumbers(numbers); - } - - get numbers() { - return this._numbers; - } - - displayNumbers(numbers) { - if (!this.innerSpan) return; - const numberStrings = numbers.map(index => { - return index == -1 ? "?" : index + 1 + ""; - }); - const textContent = "[" + numberStrings.join(", ") + "]"; - this.innerSpan.textContent = textContent; - } - - set entries(entries) { - this._entries = entries; - this.displayEntries(entries); - } - - get entries() { - return this._entries; - } - - displayEntries(entries) { - if (!this.hoverBox) return; - this.hoverBox.innerHTML = `
    - ${entries - .map(hover_cite) - .map(html => `
  • ${html}
  • `) - .join("\n")} -
`; - } - } - - // Copyright 2018 The Distill Template Authors - - const styles$1 = ` -d-citation-list { - contain: style; -} - -d-citation-list .references { - grid-column: text; -} - -d-citation-list .references .title { - font-weight: 500; -} -`; - - function renderCitationList(element, entries, dom=document) { - if (entries.size > 0) { - element.style.display = ''; - let list = element.querySelector('.references'); - if (list) { - list.innerHTML = ''; - } else { - const stylesTag = dom.createElement('style'); - stylesTag.innerHTML = styles$1; - element.appendChild(stylesTag); - - const heading = dom.createElement('h3'); - heading.id = 'references'; - heading.textContent = 'References'; - element.appendChild(heading); - - list = dom.createElement('ol'); - list.id = 'references-list'; - list.className = 'references'; - element.appendChild(list); - } - - for (const [key, entry] of entries) { - const listItem = dom.createElement('li'); - listItem.id = key; - listItem.innerHTML = bibliography_cite(entry); - list.appendChild(listItem); - } - } else { - element.style.display = 'none'; - } - } - - class CitationList extends HTMLElement { - - static get is() { return 'd-citation-list'; } - - connectedCallback() { - if (!this.hasAttribute('distill-prerendered')) { - this.style.display = 'none'; - } - } - - set citations(citations) { - renderCitationList(this, citations); - } - - } - - var prism = createCommonjsModule(function (module) { - /* ********************************************** - Begin prism-core.js - ********************************************** */ - - var _self = (typeof window !== 'undefined') - ? window // if in browser - : ( - (typeof WorkerGlobalScope !== 'undefined' && self instanceof WorkerGlobalScope) - ? self // if in worker - : {} // if in node js - ); - - /** - * Prism: Lightweight, robust, elegant syntax highlighting - * MIT license http://www.opensource.org/licenses/mit-license.php/ - * @author Lea Verou http://lea.verou.me - */ - - var Prism = (function (_self){ - - // Private helper vars - var lang = /\blang(?:uage)?-([\w-]+)\b/i; - var uniqueId = 0; - - - var _ = { - manual: _self.Prism && _self.Prism.manual, - disableWorkerMessageHandler: _self.Prism && _self.Prism.disableWorkerMessageHandler, - util: { - encode: function encode(tokens) { - if (tokens instanceof Token) { - return new Token(tokens.type, encode(tokens.content), tokens.alias); - } else if (Array.isArray(tokens)) { - return tokens.map(encode); - } else { - return tokens.replace(/&/g, '&').replace(/' + env.content + ''; - }; - - /** - * @param {string} text - * @param {LinkedList} tokenList - * @param {any} grammar - * @param {LinkedListNode} startNode - * @param {number} startPos - * @param {boolean} [oneshot=false] - * @param {string} [target] - */ - function matchGrammar(text, tokenList, grammar, startNode, startPos, oneshot, target) { - for (var token in grammar) { - if (!grammar.hasOwnProperty(token) || !grammar[token]) { - continue; - } - - var patterns = grammar[token]; - patterns = Array.isArray(patterns) ? patterns : [patterns]; - - for (var j = 0; j < patterns.length; ++j) { - if (target && target == token + ',' + j) { - return; - } - - var pattern = patterns[j], - inside = pattern.inside, - lookbehind = !!pattern.lookbehind, - greedy = !!pattern.greedy, - lookbehindLength = 0, - alias = pattern.alias; - - if (greedy && !pattern.pattern.global) { - // Without the global flag, lastIndex won't work - var flags = pattern.pattern.toString().match(/[imsuy]*$/)[0]; - pattern.pattern = RegExp(pattern.pattern.source, flags + 'g'); - } - - pattern = pattern.pattern || pattern; - - for ( // iterate the token list and keep track of the current token/string position - var currentNode = startNode.next, pos = startPos; - currentNode !== tokenList.tail; - pos += currentNode.value.length, currentNode = currentNode.next - ) { - - var str = currentNode.value; - - if (tokenList.length > text.length) { - // Something went terribly wrong, ABORT, ABORT! - return; - } - - if (str instanceof Token) { - continue; - } - - var removeCount = 1; // this is the to parameter of removeBetween - - if (greedy && currentNode != tokenList.tail.prev) { - pattern.lastIndex = pos; - var match = pattern.exec(text); - if (!match) { - break; - } - - var from = match.index + (lookbehind && match[1] ? match[1].length : 0); - var to = match.index + match[0].length; - var p = pos; - - // find the node that contains the match - p += currentNode.value.length; - while (from >= p) { - currentNode = currentNode.next; - p += currentNode.value.length; - } - // adjust pos (and p) - p -= currentNode.value.length; - pos = p; - - // the current node is a Token, then the match starts inside another Token, which is invalid - if (currentNode.value instanceof Token) { - continue; - } - - // find the last node which is affected by this match - for ( - var k = currentNode; - k !== tokenList.tail && (p < to || (typeof k.value === 'string' && !k.prev.value.greedy)); - k = k.next - ) { - removeCount++; - p += k.value.length; - } - removeCount--; - - // replace with the new match - str = text.slice(pos, p); - match.index -= pos; - } else { - pattern.lastIndex = 0; - - var match = pattern.exec(str); - } - - if (!match) { - if (oneshot) { - break; - } - - continue; - } - - if (lookbehind) { - lookbehindLength = match[1] ? match[1].length : 0; - } - - var from = match.index + lookbehindLength, - match = match[0].slice(lookbehindLength), - to = from + match.length, - before = str.slice(0, from), - after = str.slice(to); - - var removeFrom = currentNode.prev; - - if (before) { - removeFrom = addAfter(tokenList, removeFrom, before); - pos += before.length; - } - - removeRange(tokenList, removeFrom, removeCount); - - var wrapped = new Token(token, inside ? _.tokenize(match, inside) : match, alias, match, greedy); - currentNode = addAfter(tokenList, removeFrom, wrapped); - - if (after) { - addAfter(tokenList, currentNode, after); - } - - - if (removeCount > 1) - matchGrammar(text, tokenList, grammar, currentNode.prev, pos, true, token + ',' + j); - - if (oneshot) - break; - } - } - } - } - - /** - * @typedef LinkedListNode - * @property {T} value - * @property {LinkedListNode | null} prev The previous node. - * @property {LinkedListNode | null} next The next node. - * @template T - */ - - /** - * @template T - */ - function LinkedList() { - /** @type {LinkedListNode} */ - var head = { value: null, prev: null, next: null }; - /** @type {LinkedListNode} */ - var tail = { value: null, prev: head, next: null }; - head.next = tail; - - /** @type {LinkedListNode} */ - this.head = head; - /** @type {LinkedListNode} */ - this.tail = tail; - this.length = 0; - } - - /** - * Adds a new node with the given value to the list. - * @param {LinkedList} list - * @param {LinkedListNode} node - * @param {T} value - * @returns {LinkedListNode} The added node. - * @template T - */ - function addAfter(list, node, value) { - // assumes that node != list.tail && values.length >= 0 - var next = node.next; - - var newNode = { value: value, prev: node, next: next }; - node.next = newNode; - next.prev = newNode; - list.length++; - - return newNode; - } - /** - * Removes `count` nodes after the given node. The given node will not be removed. - * @param {LinkedList} list - * @param {LinkedListNode} node - * @param {number} count - * @template T - */ - function removeRange(list, node, count) { - var next = node.next; - for (var i = 0; i < count && next !== list.tail; i++) { - next = next.next; - } - node.next = next; - next.prev = node; - list.length -= i; - } - /** - * @param {LinkedList} list - * @returns {T[]} - * @template T - */ - function toArray(list) { - var array = []; - var node = list.head.next; - while (node !== list.tail) { - array.push(node.value); - node = node.next; - } - return array; - } - - - if (!_self.document) { - if (!_self.addEventListener) { - // in Node.js - return _; - } - - if (!_.disableWorkerMessageHandler) { - // In worker - _self.addEventListener('message', function (evt) { - var message = JSON.parse(evt.data), - lang = message.language, - code = message.code, - immediateClose = message.immediateClose; - - _self.postMessage(_.highlight(code, _.languages[lang], lang)); - if (immediateClose) { - _self.close(); - } - }, false); - } - - return _; - } - - //Get current script and highlight - var script = _.util.currentScript(); - - if (script) { - _.filename = script.src; - - if (script.hasAttribute('data-manual')) { - _.manual = true; - } - } - - function highlightAutomaticallyCallback() { - if (!_.manual) { - _.highlightAll(); - } - } - - if (!_.manual) { - // If the document state is "loading", then we'll use DOMContentLoaded. - // If the document state is "interactive" and the prism.js script is deferred, then we'll also use the - // DOMContentLoaded event because there might be some plugins or languages which have also been deferred and they - // might take longer one animation frame to execute which can create a race condition where only some plugins have - // been loaded when Prism.highlightAll() is executed, depending on how fast resources are loaded. - // See https://github.com/PrismJS/prism/issues/2102 - var readyState = document.readyState; - if (readyState === 'loading' || readyState === 'interactive' && script && script.defer) { - document.addEventListener('DOMContentLoaded', highlightAutomaticallyCallback); - } else { - if (window.requestAnimationFrame) { - window.requestAnimationFrame(highlightAutomaticallyCallback); - } else { - window.setTimeout(highlightAutomaticallyCallback, 16); - } - } - } - - return _; - - })(_self); - - if ( module.exports) { - module.exports = Prism; - } - - // hack for components to work correctly in node.js - if (typeof commonjsGlobal !== 'undefined') { - commonjsGlobal.Prism = Prism; - } - - - /* ********************************************** - Begin prism-markup.js - ********************************************** */ - - Prism.languages.markup = { - 'comment': //, - 'prolog': /<\?[\s\S]+?\?>/, - 'doctype': { - pattern: /"'[\]]|"[^"]*"|'[^']*')+(?:\[(?:(?!)*\]\s*)?>/i, - greedy: true - }, - 'cdata': //i, - 'tag': { - pattern: /<\/?(?!\d)[^\s>\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/i, - greedy: true, - inside: { - 'tag': { - pattern: /^<\/?[^\s>\/]+/i, - inside: { - 'punctuation': /^<\/?/, - 'namespace': /^[^\s>\/:]+:/ - } - }, - 'attr-value': { - pattern: /=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+)/i, - inside: { - 'punctuation': [ - /^=/, - { - pattern: /^(\s*)["']|["']$/, - lookbehind: true - } - ] - } - }, - 'punctuation': /\/?>/, - 'attr-name': { - pattern: /[^\s>\/]+/, - inside: { - 'namespace': /^[^\s>\/:]+:/ - } - } - - } - }, - 'entity': /&#?[\da-z]{1,8};/i - }; - - Prism.languages.markup['tag'].inside['attr-value'].inside['entity'] = - Prism.languages.markup['entity']; - - // Plugin to make entity title show the real entity, idea by Roman Komarov - Prism.hooks.add('wrap', function(env) { - - if (env.type === 'entity') { - env.attributes['title'] = env.content.replace(/&/, '&'); - } - }); - - Object.defineProperty(Prism.languages.markup.tag, 'addInlined', { - /** - * Adds an inlined language to markup. - * - * An example of an inlined language is CSS with ` - - - -`); - - class Code extends Mutating(T$4(HTMLElement)) { - - renderContent() { - - // check if language can be highlighted - this.languageName = this.getAttribute('language'); - if (!this.languageName) { - console.warn('You need to provide a language attribute to your block to let us know how to highlight your code; e.g.:\n zeros = np.zeros(shape).'); - return; - } - const language = prism.languages[this.languageName]; - if (language == undefined) { - console.warn(`Distill does not yet support highlighting your code block in "${this.languageName}'.`); - return; - } - - let content = this.textContent; - const codeTag = this.shadowRoot.querySelector('#code-container'); - - if (this.hasAttribute('block')) { - // normalize the tab indents - content = content.replace(/\n/, ''); - const tabs = content.match(/\s*/); - content = content.replace(new RegExp('\n' + tabs, 'g'), '\n'); - content = content.trim(); - // wrap code block in pre tag if needed - if (codeTag.parentNode instanceof ShadowRoot) { - const preTag = document.createElement('pre'); - this.shadowRoot.removeChild(codeTag); - preTag.appendChild(codeTag); - this.shadowRoot.appendChild(preTag); - } - - } - - codeTag.className = `language-${this.languageName}`; - codeTag.innerHTML = prism.highlight(content, language); - } - - } - - // Copyright 2018 The Distill Template Authors - - const T$5 = Template('d-footnote', ` - - - -
- -
-
- - - - - -`); - - class Footnote extends T$5(HTMLElement) { - - constructor() { - super(); - - const options = {childList: true, characterData: true, subtree: true}; - const observer = new MutationObserver(this.notify); - observer.observe(this, options); - } - - notify() { - const options = { detail: this, bubbles: true }; - const event = new CustomEvent('onFootnoteChanged', options); - document.dispatchEvent(event); - } - - connectedCallback() { - // listen and notify about changes to slotted content - // const slot = this.shadowRoot.querySelector('#slot'); - // console.warn(slot.textContent); - // slot.addEventListener('slotchange', this.notify); - this.hoverBox = this.root.querySelector('d-hover-box'); - window.customElements.whenDefined('d-hover-box').then(() => { - this.hoverBox.listen(this); - }); - // create numeric ID - Footnote.currentFootnoteId += 1; - const IdString = Footnote.currentFootnoteId.toString(); - this.root.host.id = 'd-footnote-' + IdString; - - // set up hidden hover box - const id = 'dt-fn-hover-box-' + IdString; - this.hoverBox.id = id; - - // set up visible footnote marker - const span = this.root.querySelector('#fn-'); - span.setAttribute('id', 'fn-' + IdString); - span.setAttribute('data-hover-ref', id); - span.textContent = IdString; - } - - } - - Footnote.currentFootnoteId = 0; - - // Copyright 2018 The Distill Template Authors - - const T$6 = Template('d-footnote-list', ` - - -

Footnotes

-
    -`, false); - - class FootnoteList extends T$6(HTMLElement) { - - connectedCallback() { - super.connectedCallback(); - - this.list = this.root.querySelector('ol'); - // footnotes list is initially hidden - this.root.style.display = 'none'; - // look through document and register existing footnotes - // Store.subscribeTo('footnotes', (footnote) => { - // this.renderFootnote(footnote); - // }); - } - - // TODO: could optimize this to accept individual footnotes? - set footnotes(footnotes) { - this.list.innerHTML = ''; - if (footnotes.length) { - // ensure footnote list is visible - this.root.style.display = ''; - - for (const footnote of footnotes) { - // construct and append list item to show footnote - const listItem = document.createElement('li'); - listItem.id = footnote.id + '-listing'; - listItem.innerHTML = footnote.innerHTML; - - const backlink = document.createElement('a'); - backlink.setAttribute('class', 'footnote-backlink'); - backlink.textContent = '[↩]'; - backlink.href = '#' + footnote.id; - - listItem.appendChild(backlink); - this.list.appendChild(listItem); - } - } else { - // ensure footnote list is invisible - this.root.style.display = 'none'; - } - } - - } - - // Copyright 2018 The Distill Template Authors - - const T$7 = Template('d-hover-box', ` - - -
    -
    - -
    -
    -`); - - class HoverBox extends T$7(HTMLElement) { - - constructor() { - super(); - } - - connectedCallback() { - - } - - listen(element) { - // console.log(element) - this.bindDivEvents(this); - this.bindTriggerEvents(element); - // this.style.display = "block"; - } - - bindDivEvents(element) { - // For mice, same behavior as hovering on links - element.addEventListener('mouseover', () => { - if (!this.visible) this.showAtNode(element); - this.stopTimeout(); - }); - element.addEventListener('mouseout', () => { - this.extendTimeout(500); - }); - // Don't trigger body touchstart event when touching within box - element.addEventListener('touchstart', (event) => { - event.stopPropagation(); - }, {passive: true}); - // Close box when touching outside box - document.body.addEventListener('touchstart', () => { - this.hide(); - }, {passive: true}); - } - - bindTriggerEvents(node) { - node.addEventListener('mouseover', () => { - if (!this.visible) { - this.showAtNode(node); - } - this.stopTimeout(); - }); - - node.addEventListener('mouseout', () => { - this.extendTimeout(300); - }); - - node.addEventListener('touchstart', (event) => { - if (this.visible) { - this.hide(); - } else { - this.showAtNode(node); - } - // Don't trigger body touchstart event when touching link - event.stopPropagation(); - }, {passive: true}); - } - - show(position) { - this.visible = true; - this.style.display = 'block'; - // 10px extra offset from element - this.style.top = Math.round(position[1] + 10) + 'px'; - } - - showAtNode(node) { - // https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/offsetTop - const bbox = node.getBoundingClientRect(); - this.show([node.offsetLeft + bbox.width, node.offsetTop + bbox.height]); - } - - hide() { - this.visible = false; - this.style.display = 'none'; - this.stopTimeout(); - } - - stopTimeout() { - if (this.timeout) { - clearTimeout(this.timeout); - } - } - - extendTimeout(time) { - this.stopTimeout(); - this.timeout = setTimeout(() => { - this.hide(); - }, time); - } - - } - - // Copyright 2018 The Distill Template Authors - // - // Licensed under the Apache License, Version 2.0 (the "License"); - // you may not use this file except in compliance with the License. - // You may obtain a copy of the License at - // - // http://www.apache.org/licenses/LICENSE-2.0 - // - // Unless required by applicable law or agreed to in writing, software - // distributed under the License is distributed on an "AS IS" BASIS, - // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - // See the License for the specific language governing permissions and - // limitations under the License. - - class Title extends HTMLElement { - static get is() { return 'd-title'; } - } - - // Copyright 2018 The Distill Template Authors - - const T$8 = Template('d-references', ` - -`, false); - - class References extends T$8(HTMLElement) { - - } - - // Copyright 2018 The Distill Template Authors - // - // Licensed under the Apache License, Version 2.0 (the "License"); - // you may not use this file except in compliance with the License. - // You may obtain a copy of the License at - // - // http://www.apache.org/licenses/LICENSE-2.0 - // - // Unless required by applicable law or agreed to in writing, software - // distributed under the License is distributed on an "AS IS" BASIS, - // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - // See the License for the specific language governing permissions and - // limitations under the License. - - class TOC extends HTMLElement { - - static get is() { return 'd-toc'; } - - connectedCallback() { - if (!this.getAttribute('prerendered')) { - window.onload = () => { - const article = document.querySelector('d-article'); - const headings = article.querySelectorAll('h2, h3'); - renderTOC(this, headings); - }; - } - } - - } - - function renderTOC(element, headings) { - - let ToC =` - - -

    Table of contents

    -
      `; - - for (const el of headings) { - // should element be included in TOC? - const isInTitle = el.parentElement.tagName == 'D-TITLE'; - const isException = el.getAttribute('no-toc'); - if (isInTitle || isException) continue; - // create TOC entry - const title = el.textContent; - const link = '#' + el.getAttribute('id'); - - let newLine = '
    • ' + '' + title + '' + '
    • '; - if (el.tagName == 'H3') { - newLine = '
        ' + newLine + '
      '; - } else { - newLine += '
      '; - } - ToC += newLine; - - } - - ToC += '
    '; - element.innerHTML = ToC; - } - - // Copyright 2018 The Distill Template Authors - // - // Licensed under the Apache License, Version 2.0 (the "License"); - // you may not use this file except in compliance with the License. - // You may obtain a copy of the License at - // - // http://www.apache.org/licenses/LICENSE-2.0 - // - // Unless required by applicable law or agreed to in writing, software - // distributed under the License is distributed on an "AS IS" BASIS, - // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - // See the License for the specific language governing permissions and - // limitations under the License. - - // Figure - // - // d-figure provides a state-machine of visibility events: - // - // scroll out of view - // +----------------+ - // *do work here* | | - // +----------------+ +-+---------+ +-v---------+ - // | ready +----> onscreen | | offscreen | - // +----------------+ +---------^-+ +---------+-+ - // | | - // +----------------+ - // scroll into view - // - - class Figure extends HTMLElement { - - static get is() { return 'd-figure'; } - - static get readyQueue() { - if (!Figure._readyQueue) { - Figure._readyQueue = []; - } - return Figure._readyQueue; - } - - static addToReadyQueue(figure) { - if (Figure.readyQueue.indexOf(figure) === -1) { - Figure.readyQueue.push(figure); - Figure.runReadyQueue(); - } - } - - static runReadyQueue() { - // console.log("Checking to run readyQueue, length: " + Figure.readyQueue.length + ", scrolling: " + Figure.isScrolling); - // if (Figure.isScrolling) return; - // console.log("Running ready Queue"); - const figure = Figure.readyQueue - .sort((a,b) => a._seenOnScreen - b._seenOnScreen ) - .filter((figure) => !figure._ready) - .pop(); - if (figure) { - figure.ready(); - requestAnimationFrame(Figure.runReadyQueue); - } - - } - - constructor() { - super(); - // debugger - this._ready = false; - this._onscreen = false; - this._offscreen = true; - } - - connectedCallback() { - this.loadsWhileScrolling = this.hasAttribute('loadsWhileScrolling'); - Figure.marginObserver.observe(this); - Figure.directObserver.observe(this); - } - - disconnectedCallback() { - Figure.marginObserver.unobserve(this); - Figure.directObserver.unobserve(this); - } - - // We use two separate observers: - // One with an extra 1000px margin to warn if the viewpoint gets close, - // And one for the actual on/off screen events - - static get marginObserver() { - if (!Figure._marginObserver) { - // if (!('IntersectionObserver' in window)) { - // throw new Error('no interscetionobbserver!'); - // } - const viewportHeight = window.innerHeight; - const margin = Math.floor(2 * viewportHeight); - const options = {rootMargin: margin + 'px 0px ' + margin + 'px 0px', threshold: 0.01}; - const callback = Figure.didObserveMarginIntersection; - const observer = new IntersectionObserver(callback, options); - Figure._marginObserver = observer; - } - return Figure._marginObserver; - } - - static didObserveMarginIntersection(entries) { - for (const entry of entries) { - const figure = entry.target; - if (entry.isIntersecting && !figure._ready) { - Figure.addToReadyQueue(figure); - } - } - } - - static get directObserver() { - if (!Figure._directObserver) { - Figure._directObserver = new IntersectionObserver( - Figure.didObserveDirectIntersection, { - rootMargin: '0px', threshold: [0, 1.0], - } - ); - } - return Figure._directObserver; - } - - static didObserveDirectIntersection(entries) { - for (const entry of entries) { - const figure = entry.target; - if (entry.isIntersecting) { - figure._seenOnScreen = new Date(); - // if (!figure._ready) { figure.ready(); } - if (figure._offscreen) { figure.onscreen(); } - } else { - if (figure._onscreen) { figure.offscreen(); } - } - } - } - - // Notify listeners that registered late, too: - - addEventListener(eventName, callback) { - super.addEventListener(eventName, callback); - // if we had already dispatched something while presumingly no one was listening, we do so again - // debugger - if (eventName === 'ready') { - if (Figure.readyQueue.indexOf(this) !== -1) { - this._ready = false; - Figure.runReadyQueue(); - } - } - if (eventName === 'onscreen') { - this.onscreen(); - } - } - - // Custom Events - - ready() { - // debugger - this._ready = true; - Figure.marginObserver.unobserve(this); - const event = new CustomEvent('ready'); - this.dispatchEvent(event); - } - - onscreen() { - this._onscreen = true; - this._offscreen = false; - const event = new CustomEvent('onscreen'); - this.dispatchEvent(event); - } - - offscreen() { - this._onscreen = false; - this._offscreen = true; - const event = new CustomEvent('offscreen'); - this.dispatchEvent(event); - } - - } - - if (typeof window !== 'undefined') { - - Figure.isScrolling = false; - let timeout; - const resetTimer = () => { - Figure.isScrolling = true; - clearTimeout(timeout); - timeout = setTimeout(() => { - Figure.isScrolling = false; - Figure.runReadyQueue(); - }, 500); - }; - window.addEventListener('scroll', resetTimer, true); - - } - - // Copyright 2018 The Distill Template Authors - - // This overlay is not secure. - // It is only meant as a social deterrent. - - const productionHostname = 'distill.pub'; - const T$9 = Template('d-interstitial', ` - - -
    -
    -

    This article is in review.

    -

    Do not share this URL or the contents of this article. Thank you!

    - -

    Enter the password we shared with you as part of the review process to view the article.

    -
    -
    -`); - - class Interstitial extends T$9(HTMLElement) { - - connectedCallback() { - if (this.shouldRemoveSelf()) { - this.parentElement.removeChild(this); - } else { - const passwordInput = this.root.querySelector('#interstitial-password-input'); - passwordInput.oninput = (event) => this.passwordChanged(event); - } - } - - passwordChanged(event) { - const entered = event.target.value; - if (entered === this.password) { - console.log('Correct password entered.'); - this.parentElement.removeChild(this); - if (typeof(Storage) !== 'undefined') { - console.log('Saved that correct password was entered.'); - localStorage.setItem(this.localStorageIdentifier(), 'true'); - } - } - } - - shouldRemoveSelf() { - // should never be visible in production - if (window && window.location.hostname === productionHostname) { - console.warn('Interstitial found on production, hiding it.'); - return true - } - // should only have to enter password once - if (typeof(Storage) !== 'undefined') { - if (localStorage.getItem(this.localStorageIdentifier()) === 'true') { - console.log('Loaded that correct password was entered before; skipping interstitial.'); - return true; - } - } - // otherwise, leave visible - return false; - } - - localStorageIdentifier() { - const prefix = 'distill-drafts'; - const suffix = 'interstitial-password-correct'; - return prefix + (window ? window.location.pathname : '-') + suffix - } - - } - - function ascending(a, b) { - return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN; - } - - function bisector(compare) { - if (compare.length === 1) compare = ascendingComparator(compare); - return { - left: function(a, x, lo, hi) { - if (lo == null) lo = 0; - if (hi == null) hi = a.length; - while (lo < hi) { - var mid = lo + hi >>> 1; - if (compare(a[mid], x) < 0) lo = mid + 1; - else hi = mid; - } - return lo; - }, - right: function(a, x, lo, hi) { - if (lo == null) lo = 0; - if (hi == null) hi = a.length; - while (lo < hi) { - var mid = lo + hi >>> 1; - if (compare(a[mid], x) > 0) hi = mid; - else lo = mid + 1; - } - return lo; - } - }; - } - - function ascendingComparator(f) { - return function(d, x) { - return ascending(f(d), x); - }; - } - - var ascendingBisect = bisector(ascending); - var bisectRight = ascendingBisect.right; - - function range(start, stop, step) { - start = +start, stop = +stop, step = (n = arguments.length) < 2 ? (stop = start, start = 0, 1) : n < 3 ? 1 : +step; - - var i = -1, - n = Math.max(0, Math.ceil((stop - start) / step)) | 0, - range = new Array(n); - - while (++i < n) { - range[i] = start + i * step; - } - - return range; - } - - var e10 = Math.sqrt(50), - e5 = Math.sqrt(10), - e2 = Math.sqrt(2); - - function ticks(start, stop, count) { - var reverse, - i = -1, - n, - ticks, - step; - - stop = +stop, start = +start, count = +count; - if (start === stop && count > 0) return [start]; - if (reverse = stop < start) n = start, start = stop, stop = n; - if ((step = tickIncrement(start, stop, count)) === 0 || !isFinite(step)) return []; - - if (step > 0) { - start = Math.ceil(start / step); - stop = Math.floor(stop / step); - ticks = new Array(n = Math.ceil(stop - start + 1)); - while (++i < n) ticks[i] = (start + i) * step; - } else { - start = Math.floor(start * step); - stop = Math.ceil(stop * step); - ticks = new Array(n = Math.ceil(start - stop + 1)); - while (++i < n) ticks[i] = (start - i) / step; - } - - if (reverse) ticks.reverse(); - - return ticks; - } - - function tickIncrement(start, stop, count) { - var step = (stop - start) / Math.max(0, count), - power = Math.floor(Math.log(step) / Math.LN10), - error = step / Math.pow(10, power); - return power >= 0 - ? (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1) * Math.pow(10, power) - : -Math.pow(10, -power) / (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1); - } - - function tickStep(start, stop, count) { - var step0 = Math.abs(stop - start) / Math.max(0, count), - step1 = Math.pow(10, Math.floor(Math.log(step0) / Math.LN10)), - error = step0 / step1; - if (error >= e10) step1 *= 10; - else if (error >= e5) step1 *= 5; - else if (error >= e2) step1 *= 2; - return stop < start ? -step1 : step1; - } - - function initRange(domain, range) { - switch (arguments.length) { - case 0: break; - case 1: this.range(domain); break; - default: this.range(range).domain(domain); break; - } - return this; - } - - function define(constructor, factory, prototype) { - constructor.prototype = factory.prototype = prototype; - prototype.constructor = constructor; - } - - function extend(parent, definition) { - var prototype = Object.create(parent.prototype); - for (var key in definition) prototype[key] = definition[key]; - return prototype; - } - - function Color() {} - - var darker = 0.7; - var brighter = 1 / darker; - - var reI = "\\s*([+-]?\\d+)\\s*", - reN = "\\s*([+-]?\\d*\\.?\\d+(?:[eE][+-]?\\d+)?)\\s*", - reP = "\\s*([+-]?\\d*\\.?\\d+(?:[eE][+-]?\\d+)?)%\\s*", - reHex = /^#([0-9a-f]{3,8})$/, - reRgbInteger = new RegExp("^rgb\\(" + [reI, reI, reI] + "\\)$"), - reRgbPercent = new RegExp("^rgb\\(" + [reP, reP, reP] + "\\)$"), - reRgbaInteger = new RegExp("^rgba\\(" + [reI, reI, reI, reN] + "\\)$"), - reRgbaPercent = new RegExp("^rgba\\(" + [reP, reP, reP, reN] + "\\)$"), - reHslPercent = new RegExp("^hsl\\(" + [reN, reP, reP] + "\\)$"), - reHslaPercent = new RegExp("^hsla\\(" + [reN, reP, reP, reN] + "\\)$"); - - var named = { - aliceblue: 0xf0f8ff, - antiquewhite: 0xfaebd7, - aqua: 0x00ffff, - aquamarine: 0x7fffd4, - azure: 0xf0ffff, - beige: 0xf5f5dc, - bisque: 0xffe4c4, - black: 0x000000, - blanchedalmond: 0xffebcd, - blue: 0x0000ff, - blueviolet: 0x8a2be2, - brown: 0xa52a2a, - burlywood: 0xdeb887, - cadetblue: 0x5f9ea0, - chartreuse: 0x7fff00, - chocolate: 0xd2691e, - coral: 0xff7f50, - cornflowerblue: 0x6495ed, - cornsilk: 0xfff8dc, - crimson: 0xdc143c, - cyan: 0x00ffff, - darkblue: 0x00008b, - darkcyan: 0x008b8b, - darkgoldenrod: 0xb8860b, - darkgray: 0xa9a9a9, - darkgreen: 0x006400, - darkgrey: 0xa9a9a9, - darkkhaki: 0xbdb76b, - darkmagenta: 0x8b008b, - darkolivegreen: 0x556b2f, - darkorange: 0xff8c00, - darkorchid: 0x9932cc, - darkred: 0x8b0000, - darksalmon: 0xe9967a, - darkseagreen: 0x8fbc8f, - darkslateblue: 0x483d8b, - darkslategray: 0x2f4f4f, - darkslategrey: 0x2f4f4f, - darkturquoise: 0x00ced1, - darkviolet: 0x9400d3, - deeppink: 0xff1493, - deepskyblue: 0x00bfff, - dimgray: 0x696969, - dimgrey: 0x696969, - dodgerblue: 0x1e90ff, - firebrick: 0xb22222, - floralwhite: 0xfffaf0, - forestgreen: 0x228b22, - fuchsia: 0xff00ff, - gainsboro: 0xdcdcdc, - ghostwhite: 0xf8f8ff, - gold: 0xffd700, - goldenrod: 0xdaa520, - gray: 0x808080, - green: 0x008000, - greenyellow: 0xadff2f, - grey: 0x808080, - honeydew: 0xf0fff0, - hotpink: 0xff69b4, - indianred: 0xcd5c5c, - indigo: 0x4b0082, - ivory: 0xfffff0, - khaki: 0xf0e68c, - lavender: 0xe6e6fa, - lavenderblush: 0xfff0f5, - lawngreen: 0x7cfc00, - lemonchiffon: 0xfffacd, - lightblue: 0xadd8e6, - lightcoral: 0xf08080, - lightcyan: 0xe0ffff, - lightgoldenrodyellow: 0xfafad2, - lightgray: 0xd3d3d3, - lightgreen: 0x90ee90, - lightgrey: 0xd3d3d3, - lightpink: 0xffb6c1, - lightsalmon: 0xffa07a, - lightseagreen: 0x20b2aa, - lightskyblue: 0x87cefa, - lightslategray: 0x778899, - lightslategrey: 0x778899, - lightsteelblue: 0xb0c4de, - lightyellow: 0xffffe0, - lime: 0x00ff00, - limegreen: 0x32cd32, - linen: 0xfaf0e6, - magenta: 0xff00ff, - maroon: 0x800000, - mediumaquamarine: 0x66cdaa, - mediumblue: 0x0000cd, - mediumorchid: 0xba55d3, - mediumpurple: 0x9370db, - mediumseagreen: 0x3cb371, - mediumslateblue: 0x7b68ee, - mediumspringgreen: 0x00fa9a, - mediumturquoise: 0x48d1cc, - mediumvioletred: 0xc71585, - midnightblue: 0x191970, - mintcream: 0xf5fffa, - mistyrose: 0xffe4e1, - moccasin: 0xffe4b5, - navajowhite: 0xffdead, - navy: 0x000080, - oldlace: 0xfdf5e6, - olive: 0x808000, - olivedrab: 0x6b8e23, - orange: 0xffa500, - orangered: 0xff4500, - orchid: 0xda70d6, - palegoldenrod: 0xeee8aa, - palegreen: 0x98fb98, - paleturquoise: 0xafeeee, - palevioletred: 0xdb7093, - papayawhip: 0xffefd5, - peachpuff: 0xffdab9, - peru: 0xcd853f, - pink: 0xffc0cb, - plum: 0xdda0dd, - powderblue: 0xb0e0e6, - purple: 0x800080, - rebeccapurple: 0x663399, - red: 0xff0000, - rosybrown: 0xbc8f8f, - royalblue: 0x4169e1, - saddlebrown: 0x8b4513, - salmon: 0xfa8072, - sandybrown: 0xf4a460, - seagreen: 0x2e8b57, - seashell: 0xfff5ee, - sienna: 0xa0522d, - silver: 0xc0c0c0, - skyblue: 0x87ceeb, - slateblue: 0x6a5acd, - slategray: 0x708090, - slategrey: 0x708090, - snow: 0xfffafa, - springgreen: 0x00ff7f, - steelblue: 0x4682b4, - tan: 0xd2b48c, - teal: 0x008080, - thistle: 0xd8bfd8, - tomato: 0xff6347, - turquoise: 0x40e0d0, - violet: 0xee82ee, - wheat: 0xf5deb3, - white: 0xffffff, - whitesmoke: 0xf5f5f5, - yellow: 0xffff00, - yellowgreen: 0x9acd32 - }; - - define(Color, color, { - copy: function(channels) { - return Object.assign(new this.constructor, this, channels); - }, - displayable: function() { - return this.rgb().displayable(); - }, - hex: color_formatHex, // Deprecated! Use color.formatHex. - formatHex: color_formatHex, - formatHsl: color_formatHsl, - formatRgb: color_formatRgb, - toString: color_formatRgb - }); - - function color_formatHex() { - return this.rgb().formatHex(); - } - - function color_formatHsl() { - return hslConvert(this).formatHsl(); - } - - function color_formatRgb() { - return this.rgb().formatRgb(); - } - - function color(format) { - var m, l; - format = (format + "").trim().toLowerCase(); - return (m = reHex.exec(format)) ? (l = m[1].length, m = parseInt(m[1], 16), l === 6 ? rgbn(m) // #ff0000 - : l === 3 ? new Rgb((m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), ((m & 0xf) << 4) | (m & 0xf), 1) // #f00 - : l === 8 ? rgba(m >> 24 & 0xff, m >> 16 & 0xff, m >> 8 & 0xff, (m & 0xff) / 0xff) // #ff000000 - : l === 4 ? rgba((m >> 12 & 0xf) | (m >> 8 & 0xf0), (m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), (((m & 0xf) << 4) | (m & 0xf)) / 0xff) // #f000 - : null) // invalid hex - : (m = reRgbInteger.exec(format)) ? new Rgb(m[1], m[2], m[3], 1) // rgb(255, 0, 0) - : (m = reRgbPercent.exec(format)) ? new Rgb(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, 1) // rgb(100%, 0%, 0%) - : (m = reRgbaInteger.exec(format)) ? rgba(m[1], m[2], m[3], m[4]) // rgba(255, 0, 0, 1) - : (m = reRgbaPercent.exec(format)) ? rgba(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, m[4]) // rgb(100%, 0%, 0%, 1) - : (m = reHslPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, 1) // hsl(120, 50%, 50%) - : (m = reHslaPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, m[4]) // hsla(120, 50%, 50%, 1) - : named.hasOwnProperty(format) ? rgbn(named[format]) // eslint-disable-line no-prototype-builtins - : format === "transparent" ? new Rgb(NaN, NaN, NaN, 0) - : null; - } - - function rgbn(n) { - return new Rgb(n >> 16 & 0xff, n >> 8 & 0xff, n & 0xff, 1); - } - - function rgba(r, g, b, a) { - if (a <= 0) r = g = b = NaN; - return new Rgb(r, g, b, a); - } - - function rgbConvert(o) { - if (!(o instanceof Color)) o = color(o); - if (!o) return new Rgb; - o = o.rgb(); - return new Rgb(o.r, o.g, o.b, o.opacity); - } - - function rgb(r, g, b, opacity) { - return arguments.length === 1 ? rgbConvert(r) : new Rgb(r, g, b, opacity == null ? 1 : opacity); - } - - function Rgb(r, g, b, opacity) { - this.r = +r; - this.g = +g; - this.b = +b; - this.opacity = +opacity; - } - - define(Rgb, rgb, extend(Color, { - brighter: function(k) { - k = k == null ? brighter : Math.pow(brighter, k); - return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity); - }, - darker: function(k) { - k = k == null ? darker : Math.pow(darker, k); - return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity); - }, - rgb: function() { - return this; - }, - displayable: function() { - return (-0.5 <= this.r && this.r < 255.5) - && (-0.5 <= this.g && this.g < 255.5) - && (-0.5 <= this.b && this.b < 255.5) - && (0 <= this.opacity && this.opacity <= 1); - }, - hex: rgb_formatHex, // Deprecated! Use color.formatHex. - formatHex: rgb_formatHex, - formatRgb: rgb_formatRgb, - toString: rgb_formatRgb - })); - - function rgb_formatHex() { - return "#" + hex(this.r) + hex(this.g) + hex(this.b); - } - - function rgb_formatRgb() { - var a = this.opacity; a = isNaN(a) ? 1 : Math.max(0, Math.min(1, a)); - return (a === 1 ? "rgb(" : "rgba(") - + Math.max(0, Math.min(255, Math.round(this.r) || 0)) + ", " - + Math.max(0, Math.min(255, Math.round(this.g) || 0)) + ", " - + Math.max(0, Math.min(255, Math.round(this.b) || 0)) - + (a === 1 ? ")" : ", " + a + ")"); - } - - function hex(value) { - value = Math.max(0, Math.min(255, Math.round(value) || 0)); - return (value < 16 ? "0" : "") + value.toString(16); - } - - function hsla(h, s, l, a) { - if (a <= 0) h = s = l = NaN; - else if (l <= 0 || l >= 1) h = s = NaN; - else if (s <= 0) h = NaN; - return new Hsl(h, s, l, a); - } - - function hslConvert(o) { - if (o instanceof Hsl) return new Hsl(o.h, o.s, o.l, o.opacity); - if (!(o instanceof Color)) o = color(o); - if (!o) return new Hsl; - if (o instanceof Hsl) return o; - o = o.rgb(); - var r = o.r / 255, - g = o.g / 255, - b = o.b / 255, - min = Math.min(r, g, b), - max = Math.max(r, g, b), - h = NaN, - s = max - min, - l = (max + min) / 2; - if (s) { - if (r === max) h = (g - b) / s + (g < b) * 6; - else if (g === max) h = (b - r) / s + 2; - else h = (r - g) / s + 4; - s /= l < 0.5 ? max + min : 2 - max - min; - h *= 60; - } else { - s = l > 0 && l < 1 ? 0 : h; - } - return new Hsl(h, s, l, o.opacity); - } - - function hsl(h, s, l, opacity) { - return arguments.length === 1 ? hslConvert(h) : new Hsl(h, s, l, opacity == null ? 1 : opacity); - } - - function Hsl(h, s, l, opacity) { - this.h = +h; - this.s = +s; - this.l = +l; - this.opacity = +opacity; - } - - define(Hsl, hsl, extend(Color, { - brighter: function(k) { - k = k == null ? brighter : Math.pow(brighter, k); - return new Hsl(this.h, this.s, this.l * k, this.opacity); - }, - darker: function(k) { - k = k == null ? darker : Math.pow(darker, k); - return new Hsl(this.h, this.s, this.l * k, this.opacity); - }, - rgb: function() { - var h = this.h % 360 + (this.h < 0) * 360, - s = isNaN(h) || isNaN(this.s) ? 0 : this.s, - l = this.l, - m2 = l + (l < 0.5 ? l : 1 - l) * s, - m1 = 2 * l - m2; - return new Rgb( - hsl2rgb(h >= 240 ? h - 240 : h + 120, m1, m2), - hsl2rgb(h, m1, m2), - hsl2rgb(h < 120 ? h + 240 : h - 120, m1, m2), - this.opacity - ); - }, - displayable: function() { - return (0 <= this.s && this.s <= 1 || isNaN(this.s)) - && (0 <= this.l && this.l <= 1) - && (0 <= this.opacity && this.opacity <= 1); - }, - formatHsl: function() { - var a = this.opacity; a = isNaN(a) ? 1 : Math.max(0, Math.min(1, a)); - return (a === 1 ? "hsl(" : "hsla(") - + (this.h || 0) + ", " - + (this.s || 0) * 100 + "%, " - + (this.l || 0) * 100 + "%" - + (a === 1 ? ")" : ", " + a + ")"); - } - })); - - /* From FvD 13.37, CSS Color Module Level 3 */ - function hsl2rgb(h, m1, m2) { - return (h < 60 ? m1 + (m2 - m1) * h / 60 - : h < 180 ? m2 - : h < 240 ? m1 + (m2 - m1) * (240 - h) / 60 - : m1) * 255; - } - - var deg2rad = Math.PI / 180; - var rad2deg = 180 / Math.PI; - - // https://observablehq.com/@mbostock/lab-and-rgb - var K = 18, - Xn = 0.96422, - Yn = 1, - Zn = 0.82521, - t0 = 4 / 29, - t1 = 6 / 29, - t2 = 3 * t1 * t1, - t3 = t1 * t1 * t1; - - function labConvert(o) { - if (o instanceof Lab) return new Lab(o.l, o.a, o.b, o.opacity); - if (o instanceof Hcl) return hcl2lab(o); - if (!(o instanceof Rgb)) o = rgbConvert(o); - var r = rgb2lrgb(o.r), - g = rgb2lrgb(o.g), - b = rgb2lrgb(o.b), - y = xyz2lab((0.2225045 * r + 0.7168786 * g + 0.0606169 * b) / Yn), x, z; - if (r === g && g === b) x = z = y; else { - x = xyz2lab((0.4360747 * r + 0.3850649 * g + 0.1430804 * b) / Xn); - z = xyz2lab((0.0139322 * r + 0.0971045 * g + 0.7141733 * b) / Zn); - } - return new Lab(116 * y - 16, 500 * (x - y), 200 * (y - z), o.opacity); - } - - function lab(l, a, b, opacity) { - return arguments.length === 1 ? labConvert(l) : new Lab(l, a, b, opacity == null ? 1 : opacity); - } - - function Lab(l, a, b, opacity) { - this.l = +l; - this.a = +a; - this.b = +b; - this.opacity = +opacity; - } - - define(Lab, lab, extend(Color, { - brighter: function(k) { - return new Lab(this.l + K * (k == null ? 1 : k), this.a, this.b, this.opacity); - }, - darker: function(k) { - return new Lab(this.l - K * (k == null ? 1 : k), this.a, this.b, this.opacity); - }, - rgb: function() { - var y = (this.l + 16) / 116, - x = isNaN(this.a) ? y : y + this.a / 500, - z = isNaN(this.b) ? y : y - this.b / 200; - x = Xn * lab2xyz(x); - y = Yn * lab2xyz(y); - z = Zn * lab2xyz(z); - return new Rgb( - lrgb2rgb( 3.1338561 * x - 1.6168667 * y - 0.4906146 * z), - lrgb2rgb(-0.9787684 * x + 1.9161415 * y + 0.0334540 * z), - lrgb2rgb( 0.0719453 * x - 0.2289914 * y + 1.4052427 * z), - this.opacity - ); - } - })); - - function xyz2lab(t) { - return t > t3 ? Math.pow(t, 1 / 3) : t / t2 + t0; - } - - function lab2xyz(t) { - return t > t1 ? t * t * t : t2 * (t - t0); - } - - function lrgb2rgb(x) { - return 255 * (x <= 0.0031308 ? 12.92 * x : 1.055 * Math.pow(x, 1 / 2.4) - 0.055); - } - - function rgb2lrgb(x) { - return (x /= 255) <= 0.04045 ? x / 12.92 : Math.pow((x + 0.055) / 1.055, 2.4); - } - - function hclConvert(o) { - if (o instanceof Hcl) return new Hcl(o.h, o.c, o.l, o.opacity); - if (!(o instanceof Lab)) o = labConvert(o); - if (o.a === 0 && o.b === 0) return new Hcl(NaN, 0 < o.l && o.l < 100 ? 0 : NaN, o.l, o.opacity); - var h = Math.atan2(o.b, o.a) * rad2deg; - return new Hcl(h < 0 ? h + 360 : h, Math.sqrt(o.a * o.a + o.b * o.b), o.l, o.opacity); - } - - function hcl(h, c, l, opacity) { - return arguments.length === 1 ? hclConvert(h) : new Hcl(h, c, l, opacity == null ? 1 : opacity); - } - - function Hcl(h, c, l, opacity) { - this.h = +h; - this.c = +c; - this.l = +l; - this.opacity = +opacity; - } - - function hcl2lab(o) { - if (isNaN(o.h)) return new Lab(o.l, 0, 0, o.opacity); - var h = o.h * deg2rad; - return new Lab(o.l, Math.cos(h) * o.c, Math.sin(h) * o.c, o.opacity); - } - - define(Hcl, hcl, extend(Color, { - brighter: function(k) { - return new Hcl(this.h, this.c, this.l + K * (k == null ? 1 : k), this.opacity); - }, - darker: function(k) { - return new Hcl(this.h, this.c, this.l - K * (k == null ? 1 : k), this.opacity); - }, - rgb: function() { - return hcl2lab(this).rgb(); - } - })); - - var A = -0.14861, - B = +1.78277, - C = -0.29227, - D = -0.90649, - E = +1.97294, - ED = E * D, - EB = E * B, - BC_DA = B * C - D * A; - - function cubehelixConvert(o) { - if (o instanceof Cubehelix) return new Cubehelix(o.h, o.s, o.l, o.opacity); - if (!(o instanceof Rgb)) o = rgbConvert(o); - var r = o.r / 255, - g = o.g / 255, - b = o.b / 255, - l = (BC_DA * b + ED * r - EB * g) / (BC_DA + ED - EB), - bl = b - l, - k = (E * (g - l) - C * bl) / D, - s = Math.sqrt(k * k + bl * bl) / (E * l * (1 - l)), // NaN if l=0 or l=1 - h = s ? Math.atan2(k, bl) * rad2deg - 120 : NaN; - return new Cubehelix(h < 0 ? h + 360 : h, s, l, o.opacity); - } - - function cubehelix(h, s, l, opacity) { - return arguments.length === 1 ? cubehelixConvert(h) : new Cubehelix(h, s, l, opacity == null ? 1 : opacity); - } - - function Cubehelix(h, s, l, opacity) { - this.h = +h; - this.s = +s; - this.l = +l; - this.opacity = +opacity; - } - - define(Cubehelix, cubehelix, extend(Color, { - brighter: function(k) { - k = k == null ? brighter : Math.pow(brighter, k); - return new Cubehelix(this.h, this.s, this.l * k, this.opacity); - }, - darker: function(k) { - k = k == null ? darker : Math.pow(darker, k); - return new Cubehelix(this.h, this.s, this.l * k, this.opacity); - }, - rgb: function() { - var h = isNaN(this.h) ? 0 : (this.h + 120) * deg2rad, - l = +this.l, - a = isNaN(this.s) ? 0 : this.s * l * (1 - l), - cosh = Math.cos(h), - sinh = Math.sin(h); - return new Rgb( - 255 * (l + a * (A * cosh + B * sinh)), - 255 * (l + a * (C * cosh + D * sinh)), - 255 * (l + a * (E * cosh)), - this.opacity - ); - } - })); - - function constant(x) { - return function() { - return x; - }; - } - - function linear(a, d) { - return function(t) { - return a + t * d; - }; - } - - function exponential(a, b, y) { - return a = Math.pow(a, y), b = Math.pow(b, y) - a, y = 1 / y, function(t) { - return Math.pow(a + t * b, y); - }; - } - - function gamma(y) { - return (y = +y) === 1 ? nogamma : function(a, b) { - return b - a ? exponential(a, b, y) : constant(isNaN(a) ? b : a); - }; - } - - function nogamma(a, b) { - var d = b - a; - return d ? linear(a, d) : constant(isNaN(a) ? b : a); - } - - var rgb$1 = (function rgbGamma(y) { - var color = gamma(y); - - function rgb$1(start, end) { - var r = color((start = rgb(start)).r, (end = rgb(end)).r), - g = color(start.g, end.g), - b = color(start.b, end.b), - opacity = nogamma(start.opacity, end.opacity); - return function(t) { - start.r = r(t); - start.g = g(t); - start.b = b(t); - start.opacity = opacity(t); - return start + ""; - }; - } - - rgb$1.gamma = rgbGamma; - - return rgb$1; - })(1); - - function numberArray(a, b) { - if (!b) b = []; - var n = a ? Math.min(b.length, a.length) : 0, - c = b.slice(), - i; - return function(t) { - for (i = 0; i < n; ++i) c[i] = a[i] * (1 - t) + b[i] * t; - return c; - }; - } - - function isNumberArray(x) { - return ArrayBuffer.isView(x) && !(x instanceof DataView); - } - - function genericArray(a, b) { - var nb = b ? b.length : 0, - na = a ? Math.min(nb, a.length) : 0, - x = new Array(na), - c = new Array(nb), - i; - - for (i = 0; i < na; ++i) x[i] = interpolate(a[i], b[i]); - for (; i < nb; ++i) c[i] = b[i]; - - return function(t) { - for (i = 0; i < na; ++i) c[i] = x[i](t); - return c; - }; - } - - function date(a, b) { - var d = new Date; - return a = +a, b = +b, function(t) { - return d.setTime(a * (1 - t) + b * t), d; - }; - } - - function interpolateNumber(a, b) { - return a = +a, b = +b, function(t) { - return a * (1 - t) + b * t; - }; - } - - function object(a, b) { - var i = {}, - c = {}, - k; - - if (a === null || typeof a !== "object") a = {}; - if (b === null || typeof b !== "object") b = {}; - - for (k in b) { - if (k in a) { - i[k] = interpolate(a[k], b[k]); - } else { - c[k] = b[k]; - } - } - - return function(t) { - for (k in i) c[k] = i[k](t); - return c; - }; - } - - var reA = /[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g, - reB = new RegExp(reA.source, "g"); - - function zero(b) { - return function() { - return b; - }; - } - - function one(b) { - return function(t) { - return b(t) + ""; - }; - } - - function string(a, b) { - var bi = reA.lastIndex = reB.lastIndex = 0, // scan index for next number in b - am, // current match in a - bm, // current match in b - bs, // string preceding current number in b, if any - i = -1, // index in s - s = [], // string constants and placeholders - q = []; // number interpolators - - // Coerce inputs to strings. - a = a + "", b = b + ""; - - // Interpolate pairs of numbers in a & b. - while ((am = reA.exec(a)) - && (bm = reB.exec(b))) { - if ((bs = bm.index) > bi) { // a string precedes the next number in b - bs = b.slice(bi, bs); - if (s[i]) s[i] += bs; // coalesce with previous string - else s[++i] = bs; - } - if ((am = am[0]) === (bm = bm[0])) { // numbers in a & b match - if (s[i]) s[i] += bm; // coalesce with previous string - else s[++i] = bm; - } else { // interpolate non-matching numbers - s[++i] = null; - q.push({i: i, x: interpolateNumber(am, bm)}); - } - bi = reB.lastIndex; - } - - // Add remains of b. - if (bi < b.length) { - bs = b.slice(bi); - if (s[i]) s[i] += bs; // coalesce with previous string - else s[++i] = bs; - } - - // Special optimization for only a single match. - // Otherwise, interpolate each of the numbers and rejoin the string. - return s.length < 2 ? (q[0] - ? one(q[0].x) - : zero(b)) - : (b = q.length, function(t) { - for (var i = 0, o; i < b; ++i) s[(o = q[i]).i] = o.x(t); - return s.join(""); - }); - } - - function interpolate(a, b) { - var t = typeof b, c; - return b == null || t === "boolean" ? constant(b) - : (t === "number" ? interpolateNumber - : t === "string" ? ((c = color(b)) ? (b = c, rgb$1) : string) - : b instanceof color ? rgb$1 - : b instanceof Date ? date - : isNumberArray(b) ? numberArray - : Array.isArray(b) ? genericArray - : typeof b.valueOf !== "function" && typeof b.toString !== "function" || isNaN(b) ? object - : interpolateNumber)(a, b); - } - - function interpolateRound(a, b) { - return a = +a, b = +b, function(t) { - return Math.round(a * (1 - t) + b * t); - }; - } - - function constant$1(x) { - return function() { - return x; - }; - } - - function number(x) { - return +x; - } - - var unit = [0, 1]; - - function identity(x) { - return x; - } - - function normalize(a, b) { - return (b -= (a = +a)) - ? function(x) { return (x - a) / b; } - : constant$1(isNaN(b) ? NaN : 0.5); - } - - function clamper(a, b) { - var t; - if (a > b) t = a, a = b, b = t; - return function(x) { return Math.max(a, Math.min(b, x)); }; - } - - // normalize(a, b)(x) takes a domain value x in [a,b] and returns the corresponding parameter t in [0,1]. - // interpolate(a, b)(t) takes a parameter t in [0,1] and returns the corresponding range value x in [a,b]. - function bimap(domain, range, interpolate) { - var d0 = domain[0], d1 = domain[1], r0 = range[0], r1 = range[1]; - if (d1 < d0) d0 = normalize(d1, d0), r0 = interpolate(r1, r0); - else d0 = normalize(d0, d1), r0 = interpolate(r0, r1); - return function(x) { return r0(d0(x)); }; - } - - function polymap(domain, range, interpolate) { - var j = Math.min(domain.length, range.length) - 1, - d = new Array(j), - r = new Array(j), - i = -1; - - // Reverse descending domains. - if (domain[j] < domain[0]) { - domain = domain.slice().reverse(); - range = range.slice().reverse(); - } - - while (++i < j) { - d[i] = normalize(domain[i], domain[i + 1]); - r[i] = interpolate(range[i], range[i + 1]); - } - - return function(x) { - var i = bisectRight(domain, x, 1, j) - 1; - return r[i](d[i](x)); - }; - } - - function copy(source, target) { - return target - .domain(source.domain()) - .range(source.range()) - .interpolate(source.interpolate()) - .clamp(source.clamp()) - .unknown(source.unknown()); - } - - function transformer() { - var domain = unit, - range = unit, - interpolate$1 = interpolate, - transform, - untransform, - unknown, - clamp = identity, - piecewise, - output, - input; - - function rescale() { - var n = Math.min(domain.length, range.length); - if (clamp !== identity) clamp = clamper(domain[0], domain[n - 1]); - piecewise = n > 2 ? polymap : bimap; - output = input = null; - return scale; - } - - function scale(x) { - return isNaN(x = +x) ? unknown : (output || (output = piecewise(domain.map(transform), range, interpolate$1)))(transform(clamp(x))); - } - - scale.invert = function(y) { - return clamp(untransform((input || (input = piecewise(range, domain.map(transform), interpolateNumber)))(y))); - }; - - scale.domain = function(_) { - return arguments.length ? (domain = Array.from(_, number), rescale()) : domain.slice(); - }; - - scale.range = function(_) { - return arguments.length ? (range = Array.from(_), rescale()) : range.slice(); - }; - - scale.rangeRound = function(_) { - return range = Array.from(_), interpolate$1 = interpolateRound, rescale(); - }; - - scale.clamp = function(_) { - return arguments.length ? (clamp = _ ? true : identity, rescale()) : clamp !== identity; - }; - - scale.interpolate = function(_) { - return arguments.length ? (interpolate$1 = _, rescale()) : interpolate$1; - }; - - scale.unknown = function(_) { - return arguments.length ? (unknown = _, scale) : unknown; - }; - - return function(t, u) { - transform = t, untransform = u; - return rescale(); - }; - } - - function continuous() { - return transformer()(identity, identity); - } - - // Computes the decimal coefficient and exponent of the specified number x with - // significant digits p, where x is positive and p is in [1, 21] or undefined. - // For example, formatDecimal(1.23) returns ["123", 0]. - function formatDecimal(x, p) { - if ((i = (x = p ? x.toExponential(p - 1) : x.toExponential()).indexOf("e")) < 0) return null; // NaN, ±Infinity - var i, coefficient = x.slice(0, i); - - // The string returned by toExponential either has the form \d\.\d+e[-+]\d+ - // (e.g., 1.2e+3) or the form \de[-+]\d+ (e.g., 1e+3). - return [ - coefficient.length > 1 ? coefficient[0] + coefficient.slice(2) : coefficient, - +x.slice(i + 1) - ]; - } - - function exponent(x) { - return x = formatDecimal(Math.abs(x)), x ? x[1] : NaN; - } - - function formatGroup(grouping, thousands) { - return function(value, width) { - var i = value.length, - t = [], - j = 0, - g = grouping[0], - length = 0; - - while (i > 0 && g > 0) { - if (length + g + 1 > width) g = Math.max(1, width - length); - t.push(value.substring(i -= g, i + g)); - if ((length += g + 1) > width) break; - g = grouping[j = (j + 1) % grouping.length]; - } - - return t.reverse().join(thousands); - }; - } - - function formatNumerals(numerals) { - return function(value) { - return value.replace(/[0-9]/g, function(i) { - return numerals[+i]; - }); - }; - } - - // [[fill]align][sign][symbol][0][width][,][.precision][~][type] - var re = /^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i; - - function formatSpecifier(specifier) { - if (!(match = re.exec(specifier))) throw new Error("invalid format: " + specifier); - var match; - return new FormatSpecifier({ - fill: match[1], - align: match[2], - sign: match[3], - symbol: match[4], - zero: match[5], - width: match[6], - comma: match[7], - precision: match[8] && match[8].slice(1), - trim: match[9], - type: match[10] - }); - } - - formatSpecifier.prototype = FormatSpecifier.prototype; // instanceof - - function FormatSpecifier(specifier) { - this.fill = specifier.fill === undefined ? " " : specifier.fill + ""; - this.align = specifier.align === undefined ? ">" : specifier.align + ""; - this.sign = specifier.sign === undefined ? "-" : specifier.sign + ""; - this.symbol = specifier.symbol === undefined ? "" : specifier.symbol + ""; - this.zero = !!specifier.zero; - this.width = specifier.width === undefined ? undefined : +specifier.width; - this.comma = !!specifier.comma; - this.precision = specifier.precision === undefined ? undefined : +specifier.precision; - this.trim = !!specifier.trim; - this.type = specifier.type === undefined ? "" : specifier.type + ""; - } - - FormatSpecifier.prototype.toString = function() { - return this.fill - + this.align - + this.sign - + this.symbol - + (this.zero ? "0" : "") - + (this.width === undefined ? "" : Math.max(1, this.width | 0)) - + (this.comma ? "," : "") - + (this.precision === undefined ? "" : "." + Math.max(0, this.precision | 0)) - + (this.trim ? "~" : "") - + this.type; - }; - - // Trims insignificant zeros, e.g., replaces 1.2000k with 1.2k. - function formatTrim(s) { - out: for (var n = s.length, i = 1, i0 = -1, i1; i < n; ++i) { - switch (s[i]) { - case ".": i0 = i1 = i; break; - case "0": if (i0 === 0) i0 = i; i1 = i; break; - default: if (!+s[i]) break out; if (i0 > 0) i0 = 0; break; - } - } - return i0 > 0 ? s.slice(0, i0) + s.slice(i1 + 1) : s; - } - - var prefixExponent; - - function formatPrefixAuto(x, p) { - var d = formatDecimal(x, p); - if (!d) return x + ""; - var coefficient = d[0], - exponent = d[1], - i = exponent - (prefixExponent = Math.max(-8, Math.min(8, Math.floor(exponent / 3))) * 3) + 1, - n = coefficient.length; - return i === n ? coefficient - : i > n ? coefficient + new Array(i - n + 1).join("0") - : i > 0 ? coefficient.slice(0, i) + "." + coefficient.slice(i) - : "0." + new Array(1 - i).join("0") + formatDecimal(x, Math.max(0, p + i - 1))[0]; // less than 1y! - } - - function formatRounded(x, p) { - var d = formatDecimal(x, p); - if (!d) return x + ""; - var coefficient = d[0], - exponent = d[1]; - return exponent < 0 ? "0." + new Array(-exponent).join("0") + coefficient - : coefficient.length > exponent + 1 ? coefficient.slice(0, exponent + 1) + "." + coefficient.slice(exponent + 1) - : coefficient + new Array(exponent - coefficient.length + 2).join("0"); - } - - var formatTypes = { - "%": function(x, p) { return (x * 100).toFixed(p); }, - "b": function(x) { return Math.round(x).toString(2); }, - "c": function(x) { return x + ""; }, - "d": function(x) { return Math.round(x).toString(10); }, - "e": function(x, p) { return x.toExponential(p); }, - "f": function(x, p) { return x.toFixed(p); }, - "g": function(x, p) { return x.toPrecision(p); }, - "o": function(x) { return Math.round(x).toString(8); }, - "p": function(x, p) { return formatRounded(x * 100, p); }, - "r": formatRounded, - "s": formatPrefixAuto, - "X": function(x) { return Math.round(x).toString(16).toUpperCase(); }, - "x": function(x) { return Math.round(x).toString(16); } - }; - - function identity$1(x) { - return x; - } - - var map = Array.prototype.map, - prefixes = ["y","z","a","f","p","n","µ","m","","k","M","G","T","P","E","Z","Y"]; - - function formatLocale(locale) { - var group = locale.grouping === undefined || locale.thousands === undefined ? identity$1 : formatGroup(map.call(locale.grouping, Number), locale.thousands + ""), - currencyPrefix = locale.currency === undefined ? "" : locale.currency[0] + "", - currencySuffix = locale.currency === undefined ? "" : locale.currency[1] + "", - decimal = locale.decimal === undefined ? "." : locale.decimal + "", - numerals = locale.numerals === undefined ? identity$1 : formatNumerals(map.call(locale.numerals, String)), - percent = locale.percent === undefined ? "%" : locale.percent + "", - minus = locale.minus === undefined ? "-" : locale.minus + "", - nan = locale.nan === undefined ? "NaN" : locale.nan + ""; - - function newFormat(specifier) { - specifier = formatSpecifier(specifier); - - var fill = specifier.fill, - align = specifier.align, - sign = specifier.sign, - symbol = specifier.symbol, - zero = specifier.zero, - width = specifier.width, - comma = specifier.comma, - precision = specifier.precision, - trim = specifier.trim, - type = specifier.type; - - // The "n" type is an alias for ",g". - if (type === "n") comma = true, type = "g"; - - // The "" type, and any invalid type, is an alias for ".12~g". - else if (!formatTypes[type]) precision === undefined && (precision = 12), trim = true, type = "g"; - - // If zero fill is specified, padding goes after sign and before digits. - if (zero || (fill === "0" && align === "=")) zero = true, fill = "0", align = "="; - - // Compute the prefix and suffix. - // For SI-prefix, the suffix is lazily computed. - var prefix = symbol === "$" ? currencyPrefix : symbol === "#" && /[boxX]/.test(type) ? "0" + type.toLowerCase() : "", - suffix = symbol === "$" ? currencySuffix : /[%p]/.test(type) ? percent : ""; - - // What format function should we use? - // Is this an integer type? - // Can this type generate exponential notation? - var formatType = formatTypes[type], - maybeSuffix = /[defgprs%]/.test(type); - - // Set the default precision if not specified, - // or clamp the specified precision to the supported range. - // For significant precision, it must be in [1, 21]. - // For fixed precision, it must be in [0, 20]. - precision = precision === undefined ? 6 - : /[gprs]/.test(type) ? Math.max(1, Math.min(21, precision)) - : Math.max(0, Math.min(20, precision)); - - function format(value) { - var valuePrefix = prefix, - valueSuffix = suffix, - i, n, c; - - if (type === "c") { - valueSuffix = formatType(value) + valueSuffix; - value = ""; - } else { - value = +value; - - // Determine the sign. -0 is not less than 0, but 1 / -0 is! - var valueNegative = value < 0 || 1 / value < 0; - - // Perform the initial formatting. - value = isNaN(value) ? nan : formatType(Math.abs(value), precision); - - // Trim insignificant zeros. - if (trim) value = formatTrim(value); - - // If a negative value rounds to zero after formatting, and no explicit positive sign is requested, hide the sign. - if (valueNegative && +value === 0 && sign !== "+") valueNegative = false; - - // Compute the prefix and suffix. - valuePrefix = (valueNegative ? (sign === "(" ? sign : minus) : sign === "-" || sign === "(" ? "" : sign) + valuePrefix; - valueSuffix = (type === "s" ? prefixes[8 + prefixExponent / 3] : "") + valueSuffix + (valueNegative && sign === "(" ? ")" : ""); - - // Break the formatted value into the integer “value” part that can be - // grouped, and fractional or exponential “suffix” part that is not. - if (maybeSuffix) { - i = -1, n = value.length; - while (++i < n) { - if (c = value.charCodeAt(i), 48 > c || c > 57) { - valueSuffix = (c === 46 ? decimal + value.slice(i + 1) : value.slice(i)) + valueSuffix; - value = value.slice(0, i); - break; - } - } - } - } - - // If the fill character is not "0", grouping is applied before padding. - if (comma && !zero) value = group(value, Infinity); - - // Compute the padding. - var length = valuePrefix.length + value.length + valueSuffix.length, - padding = length < width ? new Array(width - length + 1).join(fill) : ""; - - // If the fill character is "0", grouping is applied after padding. - if (comma && zero) value = group(padding + value, padding.length ? width - valueSuffix.length : Infinity), padding = ""; - - // Reconstruct the final output based on the desired alignment. - switch (align) { - case "<": value = valuePrefix + value + valueSuffix + padding; break; - case "=": value = valuePrefix + padding + value + valueSuffix; break; - case "^": value = padding.slice(0, length = padding.length >> 1) + valuePrefix + value + valueSuffix + padding.slice(length); break; - default: value = padding + valuePrefix + value + valueSuffix; break; - } - - return numerals(value); - } - - format.toString = function() { - return specifier + ""; - }; - - return format; - } - - function formatPrefix(specifier, value) { - var f = newFormat((specifier = formatSpecifier(specifier), specifier.type = "f", specifier)), - e = Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3, - k = Math.pow(10, -e), - prefix = prefixes[8 + e / 3]; - return function(value) { - return f(k * value) + prefix; - }; - } - - return { - format: newFormat, - formatPrefix: formatPrefix - }; - } - - var locale; - var format; - var formatPrefix; - - defaultLocale({ - decimal: ".", - thousands: ",", - grouping: [3], - currency: ["$", ""], - minus: "-" - }); - - function defaultLocale(definition) { - locale = formatLocale(definition); - format = locale.format; - formatPrefix = locale.formatPrefix; - return locale; - } - - function precisionFixed(step) { - return Math.max(0, -exponent(Math.abs(step))); - } - - function precisionPrefix(step, value) { - return Math.max(0, Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3 - exponent(Math.abs(step))); - } - - function precisionRound(step, max) { - step = Math.abs(step), max = Math.abs(max) - step; - return Math.max(0, exponent(max) - exponent(step)) + 1; - } - - function tickFormat(start, stop, count, specifier) { - var step = tickStep(start, stop, count), - precision; - specifier = formatSpecifier(specifier == null ? ",f" : specifier); - switch (specifier.type) { - case "s": { - var value = Math.max(Math.abs(start), Math.abs(stop)); - if (specifier.precision == null && !isNaN(precision = precisionPrefix(step, value))) specifier.precision = precision; - return formatPrefix(specifier, value); - } - case "": - case "e": - case "g": - case "p": - case "r": { - if (specifier.precision == null && !isNaN(precision = precisionRound(step, Math.max(Math.abs(start), Math.abs(stop))))) specifier.precision = precision - (specifier.type === "e"); - break; - } - case "f": - case "%": { - if (specifier.precision == null && !isNaN(precision = precisionFixed(step))) specifier.precision = precision - (specifier.type === "%") * 2; - break; - } - } - return format(specifier); - } - - function linearish(scale) { - var domain = scale.domain; - - scale.ticks = function(count) { - var d = domain(); - return ticks(d[0], d[d.length - 1], count == null ? 10 : count); - }; - - scale.tickFormat = function(count, specifier) { - var d = domain(); - return tickFormat(d[0], d[d.length - 1], count == null ? 10 : count, specifier); - }; - - scale.nice = function(count) { - if (count == null) count = 10; - - var d = domain(), - i0 = 0, - i1 = d.length - 1, - start = d[i0], - stop = d[i1], - step; - - if (stop < start) { - step = start, start = stop, stop = step; - step = i0, i0 = i1, i1 = step; - } - - step = tickIncrement(start, stop, count); - - if (step > 0) { - start = Math.floor(start / step) * step; - stop = Math.ceil(stop / step) * step; - step = tickIncrement(start, stop, count); - } else if (step < 0) { - start = Math.ceil(start * step) / step; - stop = Math.floor(stop * step) / step; - step = tickIncrement(start, stop, count); - } - - if (step > 0) { - d[i0] = Math.floor(start / step) * step; - d[i1] = Math.ceil(stop / step) * step; - domain(d); - } else if (step < 0) { - d[i0] = Math.ceil(start * step) / step; - d[i1] = Math.floor(stop * step) / step; - domain(d); - } - - return scale; - }; - - return scale; - } - - function linear$1() { - var scale = continuous(); - - scale.copy = function() { - return copy(scale, linear$1()); - }; - - initRange.apply(scale, arguments); - - return linearish(scale); - } - - var t0$1 = new Date, - t1$1 = new Date; - - function newInterval(floori, offseti, count, field) { - - function interval(date) { - return floori(date = arguments.length === 0 ? new Date : new Date(+date)), date; - } - - interval.floor = function(date) { - return floori(date = new Date(+date)), date; - }; - - interval.ceil = function(date) { - return floori(date = new Date(date - 1)), offseti(date, 1), floori(date), date; - }; - - interval.round = function(date) { - var d0 = interval(date), - d1 = interval.ceil(date); - return date - d0 < d1 - date ? d0 : d1; - }; - - interval.offset = function(date, step) { - return offseti(date = new Date(+date), step == null ? 1 : Math.floor(step)), date; - }; - - interval.range = function(start, stop, step) { - var range = [], previous; - start = interval.ceil(start); - step = step == null ? 1 : Math.floor(step); - if (!(start < stop) || !(step > 0)) return range; // also handles Invalid Date - do range.push(previous = new Date(+start)), offseti(start, step), floori(start); - while (previous < start && start < stop); - return range; - }; - - interval.filter = function(test) { - return newInterval(function(date) { - if (date >= date) while (floori(date), !test(date)) date.setTime(date - 1); - }, function(date, step) { - if (date >= date) { - if (step < 0) while (++step <= 0) { - while (offseti(date, -1), !test(date)) {} // eslint-disable-line no-empty - } else while (--step >= 0) { - while (offseti(date, +1), !test(date)) {} // eslint-disable-line no-empty - } - } - }); - }; - - if (count) { - interval.count = function(start, end) { - t0$1.setTime(+start), t1$1.setTime(+end); - floori(t0$1), floori(t1$1); - return Math.floor(count(t0$1, t1$1)); - }; - - interval.every = function(step) { - step = Math.floor(step); - return !isFinite(step) || !(step > 0) ? null - : !(step > 1) ? interval - : interval.filter(field - ? function(d) { return field(d) % step === 0; } - : function(d) { return interval.count(0, d) % step === 0; }); - }; - } - - return interval; - } - - var millisecond = newInterval(function() { - // noop - }, function(date, step) { - date.setTime(+date + step); - }, function(start, end) { - return end - start; - }); - - // An optimized implementation for this simple case. - millisecond.every = function(k) { - k = Math.floor(k); - if (!isFinite(k) || !(k > 0)) return null; - if (!(k > 1)) return millisecond; - return newInterval(function(date) { - date.setTime(Math.floor(date / k) * k); - }, function(date, step) { - date.setTime(+date + step * k); - }, function(start, end) { - return (end - start) / k; - }); - }; - - var durationSecond = 1e3; - var durationMinute = 6e4; - var durationHour = 36e5; - var durationDay = 864e5; - var durationWeek = 6048e5; - - var second = newInterval(function(date) { - date.setTime(date - date.getMilliseconds()); - }, function(date, step) { - date.setTime(+date + step * durationSecond); - }, function(start, end) { - return (end - start) / durationSecond; - }, function(date) { - return date.getUTCSeconds(); - }); - - var minute = newInterval(function(date) { - date.setTime(date - date.getMilliseconds() - date.getSeconds() * durationSecond); - }, function(date, step) { - date.setTime(+date + step * durationMinute); - }, function(start, end) { - return (end - start) / durationMinute; - }, function(date) { - return date.getMinutes(); - }); - - var hour = newInterval(function(date) { - date.setTime(date - date.getMilliseconds() - date.getSeconds() * durationSecond - date.getMinutes() * durationMinute); - }, function(date, step) { - date.setTime(+date + step * durationHour); - }, function(start, end) { - return (end - start) / durationHour; - }, function(date) { - return date.getHours(); - }); - - var day = newInterval(function(date) { - date.setHours(0, 0, 0, 0); - }, function(date, step) { - date.setDate(date.getDate() + step); - }, function(start, end) { - return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationDay; - }, function(date) { - return date.getDate() - 1; - }); - - function weekday(i) { - return newInterval(function(date) { - date.setDate(date.getDate() - (date.getDay() + 7 - i) % 7); - date.setHours(0, 0, 0, 0); - }, function(date, step) { - date.setDate(date.getDate() + step * 7); - }, function(start, end) { - return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationWeek; - }); - } - - var sunday = weekday(0); - var monday = weekday(1); - var tuesday = weekday(2); - var wednesday = weekday(3); - var thursday = weekday(4); - var friday = weekday(5); - var saturday = weekday(6); - - var month = newInterval(function(date) { - date.setDate(1); - date.setHours(0, 0, 0, 0); - }, function(date, step) { - date.setMonth(date.getMonth() + step); - }, function(start, end) { - return end.getMonth() - start.getMonth() + (end.getFullYear() - start.getFullYear()) * 12; - }, function(date) { - return date.getMonth(); - }); - - var year = newInterval(function(date) { - date.setMonth(0, 1); - date.setHours(0, 0, 0, 0); - }, function(date, step) { - date.setFullYear(date.getFullYear() + step); - }, function(start, end) { - return end.getFullYear() - start.getFullYear(); - }, function(date) { - return date.getFullYear(); - }); - - // An optimized implementation for this simple case. - year.every = function(k) { - return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : newInterval(function(date) { - date.setFullYear(Math.floor(date.getFullYear() / k) * k); - date.setMonth(0, 1); - date.setHours(0, 0, 0, 0); - }, function(date, step) { - date.setFullYear(date.getFullYear() + step * k); - }); - }; - - var utcMinute = newInterval(function(date) { - date.setUTCSeconds(0, 0); - }, function(date, step) { - date.setTime(+date + step * durationMinute); - }, function(start, end) { - return (end - start) / durationMinute; - }, function(date) { - return date.getUTCMinutes(); - }); - - var utcHour = newInterval(function(date) { - date.setUTCMinutes(0, 0, 0); - }, function(date, step) { - date.setTime(+date + step * durationHour); - }, function(start, end) { - return (end - start) / durationHour; - }, function(date) { - return date.getUTCHours(); - }); - - var utcDay = newInterval(function(date) { - date.setUTCHours(0, 0, 0, 0); - }, function(date, step) { - date.setUTCDate(date.getUTCDate() + step); - }, function(start, end) { - return (end - start) / durationDay; - }, function(date) { - return date.getUTCDate() - 1; - }); - - function utcWeekday(i) { - return newInterval(function(date) { - date.setUTCDate(date.getUTCDate() - (date.getUTCDay() + 7 - i) % 7); - date.setUTCHours(0, 0, 0, 0); - }, function(date, step) { - date.setUTCDate(date.getUTCDate() + step * 7); - }, function(start, end) { - return (end - start) / durationWeek; - }); - } - - var utcSunday = utcWeekday(0); - var utcMonday = utcWeekday(1); - var utcTuesday = utcWeekday(2); - var utcWednesday = utcWeekday(3); - var utcThursday = utcWeekday(4); - var utcFriday = utcWeekday(5); - var utcSaturday = utcWeekday(6); - - var utcMonth = newInterval(function(date) { - date.setUTCDate(1); - date.setUTCHours(0, 0, 0, 0); - }, function(date, step) { - date.setUTCMonth(date.getUTCMonth() + step); - }, function(start, end) { - return end.getUTCMonth() - start.getUTCMonth() + (end.getUTCFullYear() - start.getUTCFullYear()) * 12; - }, function(date) { - return date.getUTCMonth(); - }); - - var utcYear = newInterval(function(date) { - date.setUTCMonth(0, 1); - date.setUTCHours(0, 0, 0, 0); - }, function(date, step) { - date.setUTCFullYear(date.getUTCFullYear() + step); - }, function(start, end) { - return end.getUTCFullYear() - start.getUTCFullYear(); - }, function(date) { - return date.getUTCFullYear(); - }); - - // An optimized implementation for this simple case. - utcYear.every = function(k) { - return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : newInterval(function(date) { - date.setUTCFullYear(Math.floor(date.getUTCFullYear() / k) * k); - date.setUTCMonth(0, 1); - date.setUTCHours(0, 0, 0, 0); - }, function(date, step) { - date.setUTCFullYear(date.getUTCFullYear() + step * k); - }); - }; - - function localDate(d) { - if (0 <= d.y && d.y < 100) { - var date = new Date(-1, d.m, d.d, d.H, d.M, d.S, d.L); - date.setFullYear(d.y); - return date; - } - return new Date(d.y, d.m, d.d, d.H, d.M, d.S, d.L); - } - - function utcDate(d) { - if (0 <= d.y && d.y < 100) { - var date = new Date(Date.UTC(-1, d.m, d.d, d.H, d.M, d.S, d.L)); - date.setUTCFullYear(d.y); - return date; - } - return new Date(Date.UTC(d.y, d.m, d.d, d.H, d.M, d.S, d.L)); - } - - function newDate(y, m, d) { - return {y: y, m: m, d: d, H: 0, M: 0, S: 0, L: 0}; - } - - function formatLocale$1(locale) { - var locale_dateTime = locale.dateTime, - locale_date = locale.date, - locale_time = locale.time, - locale_periods = locale.periods, - locale_weekdays = locale.days, - locale_shortWeekdays = locale.shortDays, - locale_months = locale.months, - locale_shortMonths = locale.shortMonths; - - var periodRe = formatRe(locale_periods), - periodLookup = formatLookup(locale_periods), - weekdayRe = formatRe(locale_weekdays), - weekdayLookup = formatLookup(locale_weekdays), - shortWeekdayRe = formatRe(locale_shortWeekdays), - shortWeekdayLookup = formatLookup(locale_shortWeekdays), - monthRe = formatRe(locale_months), - monthLookup = formatLookup(locale_months), - shortMonthRe = formatRe(locale_shortMonths), - shortMonthLookup = formatLookup(locale_shortMonths); - - var formats = { - "a": formatShortWeekday, - "A": formatWeekday, - "b": formatShortMonth, - "B": formatMonth, - "c": null, - "d": formatDayOfMonth, - "e": formatDayOfMonth, - "f": formatMicroseconds, - "H": formatHour24, - "I": formatHour12, - "j": formatDayOfYear, - "L": formatMilliseconds, - "m": formatMonthNumber, - "M": formatMinutes, - "p": formatPeriod, - "q": formatQuarter, - "Q": formatUnixTimestamp, - "s": formatUnixTimestampSeconds, - "S": formatSeconds, - "u": formatWeekdayNumberMonday, - "U": formatWeekNumberSunday, - "V": formatWeekNumberISO, - "w": formatWeekdayNumberSunday, - "W": formatWeekNumberMonday, - "x": null, - "X": null, - "y": formatYear, - "Y": formatFullYear, - "Z": formatZone, - "%": formatLiteralPercent - }; - - var utcFormats = { - "a": formatUTCShortWeekday, - "A": formatUTCWeekday, - "b": formatUTCShortMonth, - "B": formatUTCMonth, - "c": null, - "d": formatUTCDayOfMonth, - "e": formatUTCDayOfMonth, - "f": formatUTCMicroseconds, - "H": formatUTCHour24, - "I": formatUTCHour12, - "j": formatUTCDayOfYear, - "L": formatUTCMilliseconds, - "m": formatUTCMonthNumber, - "M": formatUTCMinutes, - "p": formatUTCPeriod, - "q": formatUTCQuarter, - "Q": formatUnixTimestamp, - "s": formatUnixTimestampSeconds, - "S": formatUTCSeconds, - "u": formatUTCWeekdayNumberMonday, - "U": formatUTCWeekNumberSunday, - "V": formatUTCWeekNumberISO, - "w": formatUTCWeekdayNumberSunday, - "W": formatUTCWeekNumberMonday, - "x": null, - "X": null, - "y": formatUTCYear, - "Y": formatUTCFullYear, - "Z": formatUTCZone, - "%": formatLiteralPercent - }; - - var parses = { - "a": parseShortWeekday, - "A": parseWeekday, - "b": parseShortMonth, - "B": parseMonth, - "c": parseLocaleDateTime, - "d": parseDayOfMonth, - "e": parseDayOfMonth, - "f": parseMicroseconds, - "H": parseHour24, - "I": parseHour24, - "j": parseDayOfYear, - "L": parseMilliseconds, - "m": parseMonthNumber, - "M": parseMinutes, - "p": parsePeriod, - "q": parseQuarter, - "Q": parseUnixTimestamp, - "s": parseUnixTimestampSeconds, - "S": parseSeconds, - "u": parseWeekdayNumberMonday, - "U": parseWeekNumberSunday, - "V": parseWeekNumberISO, - "w": parseWeekdayNumberSunday, - "W": parseWeekNumberMonday, - "x": parseLocaleDate, - "X": parseLocaleTime, - "y": parseYear, - "Y": parseFullYear, - "Z": parseZone, - "%": parseLiteralPercent - }; - - // These recursive directive definitions must be deferred. - formats.x = newFormat(locale_date, formats); - formats.X = newFormat(locale_time, formats); - formats.c = newFormat(locale_dateTime, formats); - utcFormats.x = newFormat(locale_date, utcFormats); - utcFormats.X = newFormat(locale_time, utcFormats); - utcFormats.c = newFormat(locale_dateTime, utcFormats); - - function newFormat(specifier, formats) { - return function(date) { - var string = [], - i = -1, - j = 0, - n = specifier.length, - c, - pad, - format; - - if (!(date instanceof Date)) date = new Date(+date); - - while (++i < n) { - if (specifier.charCodeAt(i) === 37) { - string.push(specifier.slice(j, i)); - if ((pad = pads[c = specifier.charAt(++i)]) != null) c = specifier.charAt(++i); - else pad = c === "e" ? " " : "0"; - if (format = formats[c]) c = format(date, pad); - string.push(c); - j = i + 1; - } - } - - string.push(specifier.slice(j, i)); - return string.join(""); - }; - } - - function newParse(specifier, Z) { - return function(string) { - var d = newDate(1900, undefined, 1), - i = parseSpecifier(d, specifier, string += "", 0), - week, day$1; - if (i != string.length) return null; - - // If a UNIX timestamp is specified, return it. - if ("Q" in d) return new Date(d.Q); - if ("s" in d) return new Date(d.s * 1000 + ("L" in d ? d.L : 0)); - - // If this is utcParse, never use the local timezone. - if (Z && !("Z" in d)) d.Z = 0; - - // The am-pm flag is 0 for AM, and 1 for PM. - if ("p" in d) d.H = d.H % 12 + d.p * 12; - - // If the month was not specified, inherit from the quarter. - if (d.m === undefined) d.m = "q" in d ? d.q : 0; - - // Convert day-of-week and week-of-year to day-of-year. - if ("V" in d) { - if (d.V < 1 || d.V > 53) return null; - if (!("w" in d)) d.w = 1; - if ("Z" in d) { - week = utcDate(newDate(d.y, 0, 1)), day$1 = week.getUTCDay(); - week = day$1 > 4 || day$1 === 0 ? utcMonday.ceil(week) : utcMonday(week); - week = utcDay.offset(week, (d.V - 1) * 7); - d.y = week.getUTCFullYear(); - d.m = week.getUTCMonth(); - d.d = week.getUTCDate() + (d.w + 6) % 7; - } else { - week = localDate(newDate(d.y, 0, 1)), day$1 = week.getDay(); - week = day$1 > 4 || day$1 === 0 ? monday.ceil(week) : monday(week); - week = day.offset(week, (d.V - 1) * 7); - d.y = week.getFullYear(); - d.m = week.getMonth(); - d.d = week.getDate() + (d.w + 6) % 7; - } - } else if ("W" in d || "U" in d) { - if (!("w" in d)) d.w = "u" in d ? d.u % 7 : "W" in d ? 1 : 0; - day$1 = "Z" in d ? utcDate(newDate(d.y, 0, 1)).getUTCDay() : localDate(newDate(d.y, 0, 1)).getDay(); - d.m = 0; - d.d = "W" in d ? (d.w + 6) % 7 + d.W * 7 - (day$1 + 5) % 7 : d.w + d.U * 7 - (day$1 + 6) % 7; - } - - // If a time zone is specified, all fields are interpreted as UTC and then - // offset according to the specified time zone. - if ("Z" in d) { - d.H += d.Z / 100 | 0; - d.M += d.Z % 100; - return utcDate(d); - } - - // Otherwise, all fields are in local time. - return localDate(d); - }; - } - - function parseSpecifier(d, specifier, string, j) { - var i = 0, - n = specifier.length, - m = string.length, - c, - parse; - - while (i < n) { - if (j >= m) return -1; - c = specifier.charCodeAt(i++); - if (c === 37) { - c = specifier.charAt(i++); - parse = parses[c in pads ? specifier.charAt(i++) : c]; - if (!parse || ((j = parse(d, string, j)) < 0)) return -1; - } else if (c != string.charCodeAt(j++)) { - return -1; - } - } - - return j; - } - - function parsePeriod(d, string, i) { - var n = periodRe.exec(string.slice(i)); - return n ? (d.p = periodLookup[n[0].toLowerCase()], i + n[0].length) : -1; - } - - function parseShortWeekday(d, string, i) { - var n = shortWeekdayRe.exec(string.slice(i)); - return n ? (d.w = shortWeekdayLookup[n[0].toLowerCase()], i + n[0].length) : -1; - } - - function parseWeekday(d, string, i) { - var n = weekdayRe.exec(string.slice(i)); - return n ? (d.w = weekdayLookup[n[0].toLowerCase()], i + n[0].length) : -1; - } - - function parseShortMonth(d, string, i) { - var n = shortMonthRe.exec(string.slice(i)); - return n ? (d.m = shortMonthLookup[n[0].toLowerCase()], i + n[0].length) : -1; - } - - function parseMonth(d, string, i) { - var n = monthRe.exec(string.slice(i)); - return n ? (d.m = monthLookup[n[0].toLowerCase()], i + n[0].length) : -1; - } - - function parseLocaleDateTime(d, string, i) { - return parseSpecifier(d, locale_dateTime, string, i); - } - - function parseLocaleDate(d, string, i) { - return parseSpecifier(d, locale_date, string, i); - } - - function parseLocaleTime(d, string, i) { - return parseSpecifier(d, locale_time, string, i); - } - - function formatShortWeekday(d) { - return locale_shortWeekdays[d.getDay()]; - } - - function formatWeekday(d) { - return locale_weekdays[d.getDay()]; - } - - function formatShortMonth(d) { - return locale_shortMonths[d.getMonth()]; - } - - function formatMonth(d) { - return locale_months[d.getMonth()]; - } - - function formatPeriod(d) { - return locale_periods[+(d.getHours() >= 12)]; - } - - function formatQuarter(d) { - return 1 + ~~(d.getMonth() / 3); - } - - function formatUTCShortWeekday(d) { - return locale_shortWeekdays[d.getUTCDay()]; - } - - function formatUTCWeekday(d) { - return locale_weekdays[d.getUTCDay()]; - } - - function formatUTCShortMonth(d) { - return locale_shortMonths[d.getUTCMonth()]; - } - - function formatUTCMonth(d) { - return locale_months[d.getUTCMonth()]; - } - - function formatUTCPeriod(d) { - return locale_periods[+(d.getUTCHours() >= 12)]; - } - - function formatUTCQuarter(d) { - return 1 + ~~(d.getUTCMonth() / 3); - } - - return { - format: function(specifier) { - var f = newFormat(specifier += "", formats); - f.toString = function() { return specifier; }; - return f; - }, - parse: function(specifier) { - var p = newParse(specifier += "", false); - p.toString = function() { return specifier; }; - return p; - }, - utcFormat: function(specifier) { - var f = newFormat(specifier += "", utcFormats); - f.toString = function() { return specifier; }; - return f; - }, - utcParse: function(specifier) { - var p = newParse(specifier += "", true); - p.toString = function() { return specifier; }; - return p; - } - }; - } - - var pads = {"-": "", "_": " ", "0": "0"}, - numberRe = /^\s*\d+/, // note: ignores next directive - percentRe = /^%/, - requoteRe = /[\\^$*+?|[\]().{}]/g; - - function pad(value, fill, width) { - var sign = value < 0 ? "-" : "", - string = (sign ? -value : value) + "", - length = string.length; - return sign + (length < width ? new Array(width - length + 1).join(fill) + string : string); - } - - function requote(s) { - return s.replace(requoteRe, "\\$&"); - } - - function formatRe(names) { - return new RegExp("^(?:" + names.map(requote).join("|") + ")", "i"); - } - - function formatLookup(names) { - var map = {}, i = -1, n = names.length; - while (++i < n) map[names[i].toLowerCase()] = i; - return map; - } - - function parseWeekdayNumberSunday(d, string, i) { - var n = numberRe.exec(string.slice(i, i + 1)); - return n ? (d.w = +n[0], i + n[0].length) : -1; - } - - function parseWeekdayNumberMonday(d, string, i) { - var n = numberRe.exec(string.slice(i, i + 1)); - return n ? (d.u = +n[0], i + n[0].length) : -1; - } - - function parseWeekNumberSunday(d, string, i) { - var n = numberRe.exec(string.slice(i, i + 2)); - return n ? (d.U = +n[0], i + n[0].length) : -1; - } - - function parseWeekNumberISO(d, string, i) { - var n = numberRe.exec(string.slice(i, i + 2)); - return n ? (d.V = +n[0], i + n[0].length) : -1; - } - - function parseWeekNumberMonday(d, string, i) { - var n = numberRe.exec(string.slice(i, i + 2)); - return n ? (d.W = +n[0], i + n[0].length) : -1; - } - - function parseFullYear(d, string, i) { - var n = numberRe.exec(string.slice(i, i + 4)); - return n ? (d.y = +n[0], i + n[0].length) : -1; - } - - function parseYear(d, string, i) { - var n = numberRe.exec(string.slice(i, i + 2)); - return n ? (d.y = +n[0] + (+n[0] > 68 ? 1900 : 2000), i + n[0].length) : -1; - } - - function parseZone(d, string, i) { - var n = /^(Z)|([+-]\d\d)(?::?(\d\d))?/.exec(string.slice(i, i + 6)); - return n ? (d.Z = n[1] ? 0 : -(n[2] + (n[3] || "00")), i + n[0].length) : -1; - } - - function parseQuarter(d, string, i) { - var n = numberRe.exec(string.slice(i, i + 1)); - return n ? (d.q = n[0] * 3 - 3, i + n[0].length) : -1; - } - - function parseMonthNumber(d, string, i) { - var n = numberRe.exec(string.slice(i, i + 2)); - return n ? (d.m = n[0] - 1, i + n[0].length) : -1; - } - - function parseDayOfMonth(d, string, i) { - var n = numberRe.exec(string.slice(i, i + 2)); - return n ? (d.d = +n[0], i + n[0].length) : -1; - } - - function parseDayOfYear(d, string, i) { - var n = numberRe.exec(string.slice(i, i + 3)); - return n ? (d.m = 0, d.d = +n[0], i + n[0].length) : -1; - } - - function parseHour24(d, string, i) { - var n = numberRe.exec(string.slice(i, i + 2)); - return n ? (d.H = +n[0], i + n[0].length) : -1; - } - - function parseMinutes(d, string, i) { - var n = numberRe.exec(string.slice(i, i + 2)); - return n ? (d.M = +n[0], i + n[0].length) : -1; - } - - function parseSeconds(d, string, i) { - var n = numberRe.exec(string.slice(i, i + 2)); - return n ? (d.S = +n[0], i + n[0].length) : -1; - } - - function parseMilliseconds(d, string, i) { - var n = numberRe.exec(string.slice(i, i + 3)); - return n ? (d.L = +n[0], i + n[0].length) : -1; - } - - function parseMicroseconds(d, string, i) { - var n = numberRe.exec(string.slice(i, i + 6)); - return n ? (d.L = Math.floor(n[0] / 1000), i + n[0].length) : -1; - } - - function parseLiteralPercent(d, string, i) { - var n = percentRe.exec(string.slice(i, i + 1)); - return n ? i + n[0].length : -1; - } - - function parseUnixTimestamp(d, string, i) { - var n = numberRe.exec(string.slice(i)); - return n ? (d.Q = +n[0], i + n[0].length) : -1; - } - - function parseUnixTimestampSeconds(d, string, i) { - var n = numberRe.exec(string.slice(i)); - return n ? (d.s = +n[0], i + n[0].length) : -1; - } - - function formatDayOfMonth(d, p) { - return pad(d.getDate(), p, 2); - } - - function formatHour24(d, p) { - return pad(d.getHours(), p, 2); - } - - function formatHour12(d, p) { - return pad(d.getHours() % 12 || 12, p, 2); - } - - function formatDayOfYear(d, p) { - return pad(1 + day.count(year(d), d), p, 3); - } - - function formatMilliseconds(d, p) { - return pad(d.getMilliseconds(), p, 3); - } - - function formatMicroseconds(d, p) { - return formatMilliseconds(d, p) + "000"; - } - - function formatMonthNumber(d, p) { - return pad(d.getMonth() + 1, p, 2); - } - - function formatMinutes(d, p) { - return pad(d.getMinutes(), p, 2); - } - - function formatSeconds(d, p) { - return pad(d.getSeconds(), p, 2); - } - - function formatWeekdayNumberMonday(d) { - var day = d.getDay(); - return day === 0 ? 7 : day; - } - - function formatWeekNumberSunday(d, p) { - return pad(sunday.count(year(d) - 1, d), p, 2); - } - - function formatWeekNumberISO(d, p) { - var day = d.getDay(); - d = (day >= 4 || day === 0) ? thursday(d) : thursday.ceil(d); - return pad(thursday.count(year(d), d) + (year(d).getDay() === 4), p, 2); - } - - function formatWeekdayNumberSunday(d) { - return d.getDay(); - } - - function formatWeekNumberMonday(d, p) { - return pad(monday.count(year(d) - 1, d), p, 2); - } - - function formatYear(d, p) { - return pad(d.getFullYear() % 100, p, 2); - } - - function formatFullYear(d, p) { - return pad(d.getFullYear() % 10000, p, 4); - } - - function formatZone(d) { - var z = d.getTimezoneOffset(); - return (z > 0 ? "-" : (z *= -1, "+")) - + pad(z / 60 | 0, "0", 2) - + pad(z % 60, "0", 2); - } - - function formatUTCDayOfMonth(d, p) { - return pad(d.getUTCDate(), p, 2); - } - - function formatUTCHour24(d, p) { - return pad(d.getUTCHours(), p, 2); - } - - function formatUTCHour12(d, p) { - return pad(d.getUTCHours() % 12 || 12, p, 2); - } - - function formatUTCDayOfYear(d, p) { - return pad(1 + utcDay.count(utcYear(d), d), p, 3); - } - - function formatUTCMilliseconds(d, p) { - return pad(d.getUTCMilliseconds(), p, 3); - } - - function formatUTCMicroseconds(d, p) { - return formatUTCMilliseconds(d, p) + "000"; - } - - function formatUTCMonthNumber(d, p) { - return pad(d.getUTCMonth() + 1, p, 2); - } - - function formatUTCMinutes(d, p) { - return pad(d.getUTCMinutes(), p, 2); - } - - function formatUTCSeconds(d, p) { - return pad(d.getUTCSeconds(), p, 2); - } - - function formatUTCWeekdayNumberMonday(d) { - var dow = d.getUTCDay(); - return dow === 0 ? 7 : dow; - } - - function formatUTCWeekNumberSunday(d, p) { - return pad(utcSunday.count(utcYear(d) - 1, d), p, 2); - } - - function formatUTCWeekNumberISO(d, p) { - var day = d.getUTCDay(); - d = (day >= 4 || day === 0) ? utcThursday(d) : utcThursday.ceil(d); - return pad(utcThursday.count(utcYear(d), d) + (utcYear(d).getUTCDay() === 4), p, 2); - } - - function formatUTCWeekdayNumberSunday(d) { - return d.getUTCDay(); - } - - function formatUTCWeekNumberMonday(d, p) { - return pad(utcMonday.count(utcYear(d) - 1, d), p, 2); - } - - function formatUTCYear(d, p) { - return pad(d.getUTCFullYear() % 100, p, 2); - } - - function formatUTCFullYear(d, p) { - return pad(d.getUTCFullYear() % 10000, p, 4); - } - - function formatUTCZone() { - return "+0000"; - } - - function formatLiteralPercent() { - return "%"; - } - - function formatUnixTimestamp(d) { - return +d; - } - - function formatUnixTimestampSeconds(d) { - return Math.floor(+d / 1000); - } - - var locale$1; - var timeFormat; - var timeParse; - var utcFormat; - var utcParse; - - defaultLocale$1({ - dateTime: "%x, %X", - date: "%-m/%-d/%Y", - time: "%-I:%M:%S %p", - periods: ["AM", "PM"], - days: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"], - shortDays: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"], - months: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"], - shortMonths: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"] - }); - - function defaultLocale$1(definition) { - locale$1 = formatLocale$1(definition); - timeFormat = locale$1.format; - timeParse = locale$1.parse; - utcFormat = locale$1.utcFormat; - utcParse = locale$1.utcParse; - return locale$1; - } - - var isoSpecifier = "%Y-%m-%dT%H:%M:%S.%LZ"; - - function formatIsoNative(date) { - return date.toISOString(); - } - - var formatIso = Date.prototype.toISOString - ? formatIsoNative - : utcFormat(isoSpecifier); - - function parseIsoNative(string) { - var date = new Date(string); - return isNaN(date) ? null : date; - } - - var parseIso = +new Date("2000-01-01T00:00:00.000Z") - ? parseIsoNative - : utcParse(isoSpecifier); - - var noop = {value: function() {}}; - - function dispatch() { - for (var i = 0, n = arguments.length, _ = {}, t; i < n; ++i) { - if (!(t = arguments[i] + "") || (t in _) || /[\s.]/.test(t)) throw new Error("illegal type: " + t); - _[t] = []; - } - return new Dispatch(_); - } - - function Dispatch(_) { - this._ = _; - } - - function parseTypenames(typenames, types) { - return typenames.trim().split(/^|\s+/).map(function(t) { - var name = "", i = t.indexOf("."); - if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i); - if (t && !types.hasOwnProperty(t)) throw new Error("unknown type: " + t); - return {type: t, name: name}; - }); - } - - Dispatch.prototype = dispatch.prototype = { - constructor: Dispatch, - on: function(typename, callback) { - var _ = this._, - T = parseTypenames(typename + "", _), - t, - i = -1, - n = T.length; - - // If no callback was specified, return the callback of the given type and name. - if (arguments.length < 2) { - while (++i < n) if ((t = (typename = T[i]).type) && (t = get(_[t], typename.name))) return t; - return; - } - - // If a type was specified, set the callback for the given type and name. - // Otherwise, if a null callback was specified, remove callbacks of the given name. - if (callback != null && typeof callback !== "function") throw new Error("invalid callback: " + callback); - while (++i < n) { - if (t = (typename = T[i]).type) _[t] = set(_[t], typename.name, callback); - else if (callback == null) for (t in _) _[t] = set(_[t], typename.name, null); - } - - return this; - }, - copy: function() { - var copy = {}, _ = this._; - for (var t in _) copy[t] = _[t].slice(); - return new Dispatch(copy); - }, - call: function(type, that) { - if ((n = arguments.length - 2) > 0) for (var args = new Array(n), i = 0, n, t; i < n; ++i) args[i] = arguments[i + 2]; - if (!this._.hasOwnProperty(type)) throw new Error("unknown type: " + type); - for (t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args); - }, - apply: function(type, that, args) { - if (!this._.hasOwnProperty(type)) throw new Error("unknown type: " + type); - for (var t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args); - } - }; - - function get(type, name) { - for (var i = 0, n = type.length, c; i < n; ++i) { - if ((c = type[i]).name === name) { - return c.value; - } - } - } - - function set(type, name, callback) { - for (var i = 0, n = type.length; i < n; ++i) { - if (type[i].name === name) { - type[i] = noop, type = type.slice(0, i).concat(type.slice(i + 1)); - break; - } - } - if (callback != null) type.push({name: name, value: callback}); - return type; - } - - var xhtml = "http://www.w3.org/1999/xhtml"; - - var namespaces = { - svg: "http://www.w3.org/2000/svg", - xhtml: xhtml, - xlink: "http://www.w3.org/1999/xlink", - xml: "http://www.w3.org/XML/1998/namespace", - xmlns: "http://www.w3.org/2000/xmlns/" - }; - - function namespace(name) { - var prefix = name += "", i = prefix.indexOf(":"); - if (i >= 0 && (prefix = name.slice(0, i)) !== "xmlns") name = name.slice(i + 1); - return namespaces.hasOwnProperty(prefix) ? {space: namespaces[prefix], local: name} : name; - } - - function creatorInherit(name) { - return function() { - var document = this.ownerDocument, - uri = this.namespaceURI; - return uri === xhtml && document.documentElement.namespaceURI === xhtml - ? document.createElement(name) - : document.createElementNS(uri, name); - }; - } - - function creatorFixed(fullname) { - return function() { - return this.ownerDocument.createElementNS(fullname.space, fullname.local); - }; - } - - function creator(name) { - var fullname = namespace(name); - return (fullname.local - ? creatorFixed - : creatorInherit)(fullname); - } - - function none() {} - - function selector(selector) { - return selector == null ? none : function() { - return this.querySelector(selector); - }; - } - - function selection_select(select) { - if (typeof select !== "function") select = selector(select); - - for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) { - for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) { - if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) { - if ("__data__" in node) subnode.__data__ = node.__data__; - subgroup[i] = subnode; - } - } - } - - return new Selection(subgroups, this._parents); - } - - function empty() { - return []; - } - - function selectorAll(selector) { - return selector == null ? empty : function() { - return this.querySelectorAll(selector); - }; - } - - function selection_selectAll(select) { - if (typeof select !== "function") select = selectorAll(select); - - for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) { - for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) { - if (node = group[i]) { - subgroups.push(select.call(node, node.__data__, i, group)); - parents.push(node); - } - } - } - - return new Selection(subgroups, parents); - } - - function matcher(selector) { - return function() { - return this.matches(selector); - }; - } - - function selection_filter(match) { - if (typeof match !== "function") match = matcher(match); - - for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) { - for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) { - if ((node = group[i]) && match.call(node, node.__data__, i, group)) { - subgroup.push(node); - } - } - } - - return new Selection(subgroups, this._parents); - } - - function sparse(update) { - return new Array(update.length); - } - - function selection_enter() { - return new Selection(this._enter || this._groups.map(sparse), this._parents); - } - - function EnterNode(parent, datum) { - this.ownerDocument = parent.ownerDocument; - this.namespaceURI = parent.namespaceURI; - this._next = null; - this._parent = parent; - this.__data__ = datum; - } - - EnterNode.prototype = { - constructor: EnterNode, - appendChild: function(child) { return this._parent.insertBefore(child, this._next); }, - insertBefore: function(child, next) { return this._parent.insertBefore(child, next); }, - querySelector: function(selector) { return this._parent.querySelector(selector); }, - querySelectorAll: function(selector) { return this._parent.querySelectorAll(selector); } - }; - - function constant$2(x) { - return function() { - return x; - }; - } - - var keyPrefix = "$"; // Protect against keys like “__proto__”. - - function bindIndex(parent, group, enter, update, exit, data) { - var i = 0, - node, - groupLength = group.length, - dataLength = data.length; - - // Put any non-null nodes that fit into update. - // Put any null nodes into enter. - // Put any remaining data into enter. - for (; i < dataLength; ++i) { - if (node = group[i]) { - node.__data__ = data[i]; - update[i] = node; - } else { - enter[i] = new EnterNode(parent, data[i]); - } - } - - // Put any non-null nodes that don’t fit into exit. - for (; i < groupLength; ++i) { - if (node = group[i]) { - exit[i] = node; - } - } - } - - function bindKey(parent, group, enter, update, exit, data, key) { - var i, - node, - nodeByKeyValue = {}, - groupLength = group.length, - dataLength = data.length, - keyValues = new Array(groupLength), - keyValue; - - // Compute the key for each node. - // If multiple nodes have the same key, the duplicates are added to exit. - for (i = 0; i < groupLength; ++i) { - if (node = group[i]) { - keyValues[i] = keyValue = keyPrefix + key.call(node, node.__data__, i, group); - if (keyValue in nodeByKeyValue) { - exit[i] = node; - } else { - nodeByKeyValue[keyValue] = node; - } - } - } - - // Compute the key for each datum. - // If there a node associated with this key, join and add it to update. - // If there is not (or the key is a duplicate), add it to enter. - for (i = 0; i < dataLength; ++i) { - keyValue = keyPrefix + key.call(parent, data[i], i, data); - if (node = nodeByKeyValue[keyValue]) { - update[i] = node; - node.__data__ = data[i]; - nodeByKeyValue[keyValue] = null; - } else { - enter[i] = new EnterNode(parent, data[i]); - } - } - - // Add any remaining nodes that were not bound to data to exit. - for (i = 0; i < groupLength; ++i) { - if ((node = group[i]) && (nodeByKeyValue[keyValues[i]] === node)) { - exit[i] = node; - } - } - } - - function selection_data(value, key) { - if (!value) { - data = new Array(this.size()), j = -1; - this.each(function(d) { data[++j] = d; }); - return data; - } - - var bind = key ? bindKey : bindIndex, - parents = this._parents, - groups = this._groups; - - if (typeof value !== "function") value = constant$2(value); - - for (var m = groups.length, update = new Array(m), enter = new Array(m), exit = new Array(m), j = 0; j < m; ++j) { - var parent = parents[j], - group = groups[j], - groupLength = group.length, - data = value.call(parent, parent && parent.__data__, j, parents), - dataLength = data.length, - enterGroup = enter[j] = new Array(dataLength), - updateGroup = update[j] = new Array(dataLength), - exitGroup = exit[j] = new Array(groupLength); - - bind(parent, group, enterGroup, updateGroup, exitGroup, data, key); - - // Now connect the enter nodes to their following update node, such that - // appendChild can insert the materialized enter node before this node, - // rather than at the end of the parent node. - for (var i0 = 0, i1 = 0, previous, next; i0 < dataLength; ++i0) { - if (previous = enterGroup[i0]) { - if (i0 >= i1) i1 = i0 + 1; - while (!(next = updateGroup[i1]) && ++i1 < dataLength); - previous._next = next || null; - } - } - } - - update = new Selection(update, parents); - update._enter = enter; - update._exit = exit; - return update; - } - - function selection_exit() { - return new Selection(this._exit || this._groups.map(sparse), this._parents); - } - - function selection_join(onenter, onupdate, onexit) { - var enter = this.enter(), update = this, exit = this.exit(); - enter = typeof onenter === "function" ? onenter(enter) : enter.append(onenter + ""); - if (onupdate != null) update = onupdate(update); - if (onexit == null) exit.remove(); else onexit(exit); - return enter && update ? enter.merge(update).order() : update; - } - - function selection_merge(selection) { - - for (var groups0 = this._groups, groups1 = selection._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) { - for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) { - if (node = group0[i] || group1[i]) { - merge[i] = node; - } - } - } - - for (; j < m0; ++j) { - merges[j] = groups0[j]; - } - - return new Selection(merges, this._parents); - } - - function selection_order() { - - for (var groups = this._groups, j = -1, m = groups.length; ++j < m;) { - for (var group = groups[j], i = group.length - 1, next = group[i], node; --i >= 0;) { - if (node = group[i]) { - if (next && node.compareDocumentPosition(next) ^ 4) next.parentNode.insertBefore(node, next); - next = node; - } - } - } - - return this; - } - - function selection_sort(compare) { - if (!compare) compare = ascending$1; - - function compareNode(a, b) { - return a && b ? compare(a.__data__, b.__data__) : !a - !b; - } - - for (var groups = this._groups, m = groups.length, sortgroups = new Array(m), j = 0; j < m; ++j) { - for (var group = groups[j], n = group.length, sortgroup = sortgroups[j] = new Array(n), node, i = 0; i < n; ++i) { - if (node = group[i]) { - sortgroup[i] = node; - } - } - sortgroup.sort(compareNode); - } - - return new Selection(sortgroups, this._parents).order(); - } - - function ascending$1(a, b) { - return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN; - } - - function selection_call() { - var callback = arguments[0]; - arguments[0] = this; - callback.apply(null, arguments); - return this; - } - - function selection_nodes() { - var nodes = new Array(this.size()), i = -1; - this.each(function() { nodes[++i] = this; }); - return nodes; - } - - function selection_node() { - - for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) { - for (var group = groups[j], i = 0, n = group.length; i < n; ++i) { - var node = group[i]; - if (node) return node; - } - } - - return null; - } - - function selection_size() { - var size = 0; - this.each(function() { ++size; }); - return size; - } - - function selection_empty() { - return !this.node(); - } - - function selection_each(callback) { - - for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) { - for (var group = groups[j], i = 0, n = group.length, node; i < n; ++i) { - if (node = group[i]) callback.call(node, node.__data__, i, group); - } - } - - return this; - } - - function attrRemove(name) { - return function() { - this.removeAttribute(name); - }; - } - - function attrRemoveNS(fullname) { - return function() { - this.removeAttributeNS(fullname.space, fullname.local); - }; - } - - function attrConstant(name, value) { - return function() { - this.setAttribute(name, value); - }; - } - - function attrConstantNS(fullname, value) { - return function() { - this.setAttributeNS(fullname.space, fullname.local, value); - }; - } - - function attrFunction(name, value) { - return function() { - var v = value.apply(this, arguments); - if (v == null) this.removeAttribute(name); - else this.setAttribute(name, v); - }; - } - - function attrFunctionNS(fullname, value) { - return function() { - var v = value.apply(this, arguments); - if (v == null) this.removeAttributeNS(fullname.space, fullname.local); - else this.setAttributeNS(fullname.space, fullname.local, v); - }; - } - - function selection_attr(name, value) { - var fullname = namespace(name); - - if (arguments.length < 2) { - var node = this.node(); - return fullname.local - ? node.getAttributeNS(fullname.space, fullname.local) - : node.getAttribute(fullname); - } - - return this.each((value == null - ? (fullname.local ? attrRemoveNS : attrRemove) : (typeof value === "function" - ? (fullname.local ? attrFunctionNS : attrFunction) - : (fullname.local ? attrConstantNS : attrConstant)))(fullname, value)); - } - - function defaultView(node) { - return (node.ownerDocument && node.ownerDocument.defaultView) // node is a Node - || (node.document && node) // node is a Window - || node.defaultView; // node is a Document - } - - function styleRemove(name) { - return function() { - this.style.removeProperty(name); - }; - } - - function styleConstant(name, value, priority) { - return function() { - this.style.setProperty(name, value, priority); - }; - } - - function styleFunction(name, value, priority) { - return function() { - var v = value.apply(this, arguments); - if (v == null) this.style.removeProperty(name); - else this.style.setProperty(name, v, priority); - }; - } - - function selection_style(name, value, priority) { - return arguments.length > 1 - ? this.each((value == null - ? styleRemove : typeof value === "function" - ? styleFunction - : styleConstant)(name, value, priority == null ? "" : priority)) - : styleValue(this.node(), name); - } - - function styleValue(node, name) { - return node.style.getPropertyValue(name) - || defaultView(node).getComputedStyle(node, null).getPropertyValue(name); - } - - function propertyRemove(name) { - return function() { - delete this[name]; - }; - } - - function propertyConstant(name, value) { - return function() { - this[name] = value; - }; - } - - function propertyFunction(name, value) { - return function() { - var v = value.apply(this, arguments); - if (v == null) delete this[name]; - else this[name] = v; - }; - } - - function selection_property(name, value) { - return arguments.length > 1 - ? this.each((value == null - ? propertyRemove : typeof value === "function" - ? propertyFunction - : propertyConstant)(name, value)) - : this.node()[name]; - } - - function classArray(string) { - return string.trim().split(/^|\s+/); - } - - function classList(node) { - return node.classList || new ClassList(node); - } - - function ClassList(node) { - this._node = node; - this._names = classArray(node.getAttribute("class") || ""); - } - - ClassList.prototype = { - add: function(name) { - var i = this._names.indexOf(name); - if (i < 0) { - this._names.push(name); - this._node.setAttribute("class", this._names.join(" ")); - } - }, - remove: function(name) { - var i = this._names.indexOf(name); - if (i >= 0) { - this._names.splice(i, 1); - this._node.setAttribute("class", this._names.join(" ")); - } - }, - contains: function(name) { - return this._names.indexOf(name) >= 0; - } - }; - - function classedAdd(node, names) { - var list = classList(node), i = -1, n = names.length; - while (++i < n) list.add(names[i]); - } - - function classedRemove(node, names) { - var list = classList(node), i = -1, n = names.length; - while (++i < n) list.remove(names[i]); - } - - function classedTrue(names) { - return function() { - classedAdd(this, names); - }; - } - - function classedFalse(names) { - return function() { - classedRemove(this, names); - }; - } - - function classedFunction(names, value) { - return function() { - (value.apply(this, arguments) ? classedAdd : classedRemove)(this, names); - }; - } - - function selection_classed(name, value) { - var names = classArray(name + ""); - - if (arguments.length < 2) { - var list = classList(this.node()), i = -1, n = names.length; - while (++i < n) if (!list.contains(names[i])) return false; - return true; - } - - return this.each((typeof value === "function" - ? classedFunction : value - ? classedTrue - : classedFalse)(names, value)); - } - - function textRemove() { - this.textContent = ""; - } - - function textConstant(value) { - return function() { - this.textContent = value; - }; - } - - function textFunction(value) { - return function() { - var v = value.apply(this, arguments); - this.textContent = v == null ? "" : v; - }; - } - - function selection_text(value) { - return arguments.length - ? this.each(value == null - ? textRemove : (typeof value === "function" - ? textFunction - : textConstant)(value)) - : this.node().textContent; - } - - function htmlRemove() { - this.innerHTML = ""; - } - - function htmlConstant(value) { - return function() { - this.innerHTML = value; - }; - } - - function htmlFunction(value) { - return function() { - var v = value.apply(this, arguments); - this.innerHTML = v == null ? "" : v; - }; - } - - function selection_html(value) { - return arguments.length - ? this.each(value == null - ? htmlRemove : (typeof value === "function" - ? htmlFunction - : htmlConstant)(value)) - : this.node().innerHTML; - } - - function raise() { - if (this.nextSibling) this.parentNode.appendChild(this); - } - - function selection_raise() { - return this.each(raise); - } - - function lower() { - if (this.previousSibling) this.parentNode.insertBefore(this, this.parentNode.firstChild); - } - - function selection_lower() { - return this.each(lower); - } - - function selection_append(name) { - var create = typeof name === "function" ? name : creator(name); - return this.select(function() { - return this.appendChild(create.apply(this, arguments)); - }); - } - - function constantNull() { - return null; - } - - function selection_insert(name, before) { - var create = typeof name === "function" ? name : creator(name), - select = before == null ? constantNull : typeof before === "function" ? before : selector(before); - return this.select(function() { - return this.insertBefore(create.apply(this, arguments), select.apply(this, arguments) || null); - }); - } - - function remove() { - var parent = this.parentNode; - if (parent) parent.removeChild(this); - } - - function selection_remove() { - return this.each(remove); - } - - function selection_cloneShallow() { - var clone = this.cloneNode(false), parent = this.parentNode; - return parent ? parent.insertBefore(clone, this.nextSibling) : clone; - } - - function selection_cloneDeep() { - var clone = this.cloneNode(true), parent = this.parentNode; - return parent ? parent.insertBefore(clone, this.nextSibling) : clone; - } - - function selection_clone(deep) { - return this.select(deep ? selection_cloneDeep : selection_cloneShallow); - } - - function selection_datum(value) { - return arguments.length - ? this.property("__data__", value) - : this.node().__data__; - } - - var filterEvents = {}; - - var event = null; - - if (typeof document !== "undefined") { - var element = document.documentElement; - if (!("onmouseenter" in element)) { - filterEvents = {mouseenter: "mouseover", mouseleave: "mouseout"}; - } - } - - function filterContextListener(listener, index, group) { - listener = contextListener(listener, index, group); - return function(event) { - var related = event.relatedTarget; - if (!related || (related !== this && !(related.compareDocumentPosition(this) & 8))) { - listener.call(this, event); - } - }; - } - - function contextListener(listener, index, group) { - return function(event1) { - var event0 = event; // Events can be reentrant (e.g., focus). - event = event1; - try { - listener.call(this, this.__data__, index, group); - } finally { - event = event0; - } - }; - } - - function parseTypenames$1(typenames) { - return typenames.trim().split(/^|\s+/).map(function(t) { - var name = "", i = t.indexOf("."); - if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i); - return {type: t, name: name}; - }); - } - - function onRemove(typename) { - return function() { - var on = this.__on; - if (!on) return; - for (var j = 0, i = -1, m = on.length, o; j < m; ++j) { - if (o = on[j], (!typename.type || o.type === typename.type) && o.name === typename.name) { - this.removeEventListener(o.type, o.listener, o.capture); - } else { - on[++i] = o; - } - } - if (++i) on.length = i; - else delete this.__on; - }; - } - - function onAdd(typename, value, capture) { - var wrap = filterEvents.hasOwnProperty(typename.type) ? filterContextListener : contextListener; - return function(d, i, group) { - var on = this.__on, o, listener = wrap(value, i, group); - if (on) for (var j = 0, m = on.length; j < m; ++j) { - if ((o = on[j]).type === typename.type && o.name === typename.name) { - this.removeEventListener(o.type, o.listener, o.capture); - this.addEventListener(o.type, o.listener = listener, o.capture = capture); - o.value = value; - return; - } - } - this.addEventListener(typename.type, listener, capture); - o = {type: typename.type, name: typename.name, value: value, listener: listener, capture: capture}; - if (!on) this.__on = [o]; - else on.push(o); - }; - } - - function selection_on(typename, value, capture) { - var typenames = parseTypenames$1(typename + ""), i, n = typenames.length, t; - - if (arguments.length < 2) { - var on = this.node().__on; - if (on) for (var j = 0, m = on.length, o; j < m; ++j) { - for (i = 0, o = on[j]; i < n; ++i) { - if ((t = typenames[i]).type === o.type && t.name === o.name) { - return o.value; - } - } - } - return; - } - - on = value ? onAdd : onRemove; - if (capture == null) capture = false; - for (i = 0; i < n; ++i) this.each(on(typenames[i], value, capture)); - return this; - } - - function customEvent(event1, listener, that, args) { - var event0 = event; - event1.sourceEvent = event; - event = event1; - try { - return listener.apply(that, args); - } finally { - event = event0; - } - } - - function dispatchEvent(node, type, params) { - var window = defaultView(node), - event = window.CustomEvent; - - if (typeof event === "function") { - event = new event(type, params); - } else { - event = window.document.createEvent("Event"); - if (params) event.initEvent(type, params.bubbles, params.cancelable), event.detail = params.detail; - else event.initEvent(type, false, false); - } - - node.dispatchEvent(event); - } - - function dispatchConstant(type, params) { - return function() { - return dispatchEvent(this, type, params); - }; - } - - function dispatchFunction(type, params) { - return function() { - return dispatchEvent(this, type, params.apply(this, arguments)); - }; - } - - function selection_dispatch(type, params) { - return this.each((typeof params === "function" - ? dispatchFunction - : dispatchConstant)(type, params)); - } - - var root = [null]; - - function Selection(groups, parents) { - this._groups = groups; - this._parents = parents; - } - - function selection() { - return new Selection([[document.documentElement]], root); - } - - Selection.prototype = selection.prototype = { - constructor: Selection, - select: selection_select, - selectAll: selection_selectAll, - filter: selection_filter, - data: selection_data, - enter: selection_enter, - exit: selection_exit, - join: selection_join, - merge: selection_merge, - order: selection_order, - sort: selection_sort, - call: selection_call, - nodes: selection_nodes, - node: selection_node, - size: selection_size, - empty: selection_empty, - each: selection_each, - attr: selection_attr, - style: selection_style, - property: selection_property, - classed: selection_classed, - text: selection_text, - html: selection_html, - raise: selection_raise, - lower: selection_lower, - append: selection_append, - insert: selection_insert, - remove: selection_remove, - clone: selection_clone, - datum: selection_datum, - on: selection_on, - dispatch: selection_dispatch - }; - - function select(selector) { - return typeof selector === "string" - ? new Selection([[document.querySelector(selector)]], [document.documentElement]) - : new Selection([[selector]], root); - } - - function sourceEvent() { - var current = event, source; - while (source = current.sourceEvent) current = source; - return current; - } - - function point(node, event) { - var svg = node.ownerSVGElement || node; - - if (svg.createSVGPoint) { - var point = svg.createSVGPoint(); - point.x = event.clientX, point.y = event.clientY; - point = point.matrixTransform(node.getScreenCTM().inverse()); - return [point.x, point.y]; - } - - var rect = node.getBoundingClientRect(); - return [event.clientX - rect.left - node.clientLeft, event.clientY - rect.top - node.clientTop]; - } - - function mouse(node) { - var event = sourceEvent(); - if (event.changedTouches) event = event.changedTouches[0]; - return point(node, event); - } - - function touch(node, touches, identifier) { - if (arguments.length < 3) identifier = touches, touches = sourceEvent().changedTouches; - - for (var i = 0, n = touches ? touches.length : 0, touch; i < n; ++i) { - if ((touch = touches[i]).identifier === identifier) { - return point(node, touch); - } - } - - return null; - } - - function nopropagation() { - event.stopImmediatePropagation(); - } - - function noevent() { - event.preventDefault(); - event.stopImmediatePropagation(); - } - - function nodrag(view) { - var root = view.document.documentElement, - selection = select(view).on("dragstart.drag", noevent, true); - if ("onselectstart" in root) { - selection.on("selectstart.drag", noevent, true); - } else { - root.__noselect = root.style.MozUserSelect; - root.style.MozUserSelect = "none"; - } - } - - function yesdrag(view, noclick) { - var root = view.document.documentElement, - selection = select(view).on("dragstart.drag", null); - if (noclick) { - selection.on("click.drag", noevent, true); - setTimeout(function() { selection.on("click.drag", null); }, 0); - } - if ("onselectstart" in root) { - selection.on("selectstart.drag", null); - } else { - root.style.MozUserSelect = root.__noselect; - delete root.__noselect; - } - } - - function constant$3(x) { - return function() { - return x; - }; - } - - function DragEvent(target, type, subject, id, active, x, y, dx, dy, dispatch) { - this.target = target; - this.type = type; - this.subject = subject; - this.identifier = id; - this.active = active; - this.x = x; - this.y = y; - this.dx = dx; - this.dy = dy; - this._ = dispatch; - } - - DragEvent.prototype.on = function() { - var value = this._.on.apply(this._, arguments); - return value === this._ ? this : value; - }; - - // Ignore right-click, since that should open the context menu. - function defaultFilter() { - return !event.ctrlKey && !event.button; - } - - function defaultContainer() { - return this.parentNode; - } - - function defaultSubject(d) { - return d == null ? {x: event.x, y: event.y} : d; - } - - function defaultTouchable() { - return navigator.maxTouchPoints || ("ontouchstart" in this); - } - - function drag() { - var filter = defaultFilter, - container = defaultContainer, - subject = defaultSubject, - touchable = defaultTouchable, - gestures = {}, - listeners = dispatch("start", "drag", "end"), - active = 0, - mousedownx, - mousedowny, - mousemoving, - touchending, - clickDistance2 = 0; - - function drag(selection) { - selection - .on("mousedown.drag", mousedowned) - .filter(touchable) - .on("touchstart.drag", touchstarted) - .on("touchmove.drag", touchmoved) - .on("touchend.drag touchcancel.drag", touchended) - .style("touch-action", "none") - .style("-webkit-tap-highlight-color", "rgba(0,0,0,0)"); - } - - function mousedowned() { - if (touchending || !filter.apply(this, arguments)) return; - var gesture = beforestart("mouse", container.apply(this, arguments), mouse, this, arguments); - if (!gesture) return; - select(event.view).on("mousemove.drag", mousemoved, true).on("mouseup.drag", mouseupped, true); - nodrag(event.view); - nopropagation(); - mousemoving = false; - mousedownx = event.clientX; - mousedowny = event.clientY; - gesture("start"); - } - - function mousemoved() { - noevent(); - if (!mousemoving) { - var dx = event.clientX - mousedownx, dy = event.clientY - mousedowny; - mousemoving = dx * dx + dy * dy > clickDistance2; - } - gestures.mouse("drag"); - } - - function mouseupped() { - select(event.view).on("mousemove.drag mouseup.drag", null); - yesdrag(event.view, mousemoving); - noevent(); - gestures.mouse("end"); - } - - function touchstarted() { - if (!filter.apply(this, arguments)) return; - var touches = event.changedTouches, - c = container.apply(this, arguments), - n = touches.length, i, gesture; - - for (i = 0; i < n; ++i) { - if (gesture = beforestart(touches[i].identifier, c, touch, this, arguments)) { - nopropagation(); - gesture("start"); - } - } - } - - function touchmoved() { - var touches = event.changedTouches, - n = touches.length, i, gesture; - - for (i = 0; i < n; ++i) { - if (gesture = gestures[touches[i].identifier]) { - noevent(); - gesture("drag"); - } - } - } - - function touchended() { - var touches = event.changedTouches, - n = touches.length, i, gesture; - - if (touchending) clearTimeout(touchending); - touchending = setTimeout(function() { touchending = null; }, 500); // Ghost clicks are delayed! - for (i = 0; i < n; ++i) { - if (gesture = gestures[touches[i].identifier]) { - nopropagation(); - gesture("end"); - } - } - } - - function beforestart(id, container, point, that, args) { - var p = point(container, id), s, dx, dy, - sublisteners = listeners.copy(); - - if (!customEvent(new DragEvent(drag, "beforestart", s, id, active, p[0], p[1], 0, 0, sublisteners), function() { - if ((event.subject = s = subject.apply(that, args)) == null) return false; - dx = s.x - p[0] || 0; - dy = s.y - p[1] || 0; - return true; - })) return; - - return function gesture(type) { - var p0 = p, n; - switch (type) { - case "start": gestures[id] = gesture, n = active++; break; - case "end": delete gestures[id], --active; // nobreak - case "drag": p = point(container, id), n = active; break; - } - customEvent(new DragEvent(drag, type, s, id, n, p[0] + dx, p[1] + dy, p[0] - p0[0], p[1] - p0[1], sublisteners), sublisteners.apply, sublisteners, [type, that, args]); - }; - } - - drag.filter = function(_) { - return arguments.length ? (filter = typeof _ === "function" ? _ : constant$3(!!_), drag) : filter; - }; - - drag.container = function(_) { - return arguments.length ? (container = typeof _ === "function" ? _ : constant$3(_), drag) : container; - }; - - drag.subject = function(_) { - return arguments.length ? (subject = typeof _ === "function" ? _ : constant$3(_), drag) : subject; - }; - - drag.touchable = function(_) { - return arguments.length ? (touchable = typeof _ === "function" ? _ : constant$3(!!_), drag) : touchable; - }; - - drag.on = function() { - var value = listeners.on.apply(listeners, arguments); - return value === listeners ? drag : value; - }; - - drag.clickDistance = function(_) { - return arguments.length ? (clickDistance2 = (_ = +_) * _, drag) : Math.sqrt(clickDistance2); - }; - - return drag; - } - - // Copyright 2018 The Distill Template Authors - - const T$a = Template('d-slider', ` - - -
    -
    -
    -
    -
    -
    -
    -
    -
    -`); - - // ARIA - // If the slider has a visible label, it is referenced by aria-labelledby on the slider element. Otherwise, the slider element has a label provided by aria-label. - // If the slider is vertically oriented, it has aria-orientation set to vertical. The default value of aria-orientation for a slider is horizontal. - - const keyCodes = { - left: 37, - up: 38, - right: 39, - down: 40, - pageUp: 33, - pageDown: 34, - end: 35, - home: 36 - }; - - class Slider extends T$a(HTMLElement) { - - - connectedCallback() { - this.connected = true; - this.setAttribute('role', 'slider'); - // Makes the element tab-able. - if (!this.hasAttribute('tabindex')) { this.setAttribute('tabindex', 0); } - - // Keeps track of keyboard vs. mouse interactions for focus rings - this.mouseEvent = false; - - // Handles to shadow DOM elements - this.knob = this.root.querySelector('.knob-container'); - this.background = this.root.querySelector('.background'); - this.trackFill = this.root.querySelector('.track-fill'); - this.track = this.root.querySelector('.track'); - - // Default values for attributes - this.min = this.min ? this.min : 0; - this.max = this.max ? this.max : 100; - this.scale = linear$1().domain([this.min, this.max]).range([0, 1]).clamp(true); - - this.origin = this.origin !== undefined ? this.origin : this.min; - this.step = this.step ? this.step : 1; - this.update(this.value ? this.value : 0); - - this.ticks = this.ticks ? this.ticks : false; - this.renderTicks(); - - this.drag = drag() - .container(this.background) - .on('start', () => { - this.mouseEvent = true; - this.background.classList.add('mousedown'); - this.changeValue = this.value; - this.dragUpdate(); - }) - .on('drag', () => { - this.dragUpdate(); - }) - .on('end', () => { - this.mouseEvent = false; - this.background.classList.remove('mousedown'); - this.dragUpdate(); - if (this.changeValue !== this.value) this.dispatchChange(); - this.changeValue = this.value; - }); - this.drag(select(this.background)); - - this.addEventListener('focusin', () => { - if(!this.mouseEvent) { - this.background.classList.add('focus'); - } - }); - this.addEventListener('focusout', () => { - this.background.classList.remove('focus'); - }); - this.addEventListener('keydown', this.onKeyDown); - - } - - static get observedAttributes() {return ['min', 'max', 'value', 'step', 'ticks', 'origin', 'tickValues', 'tickLabels']; } - - attributeChangedCallback(attr, oldValue, newValue) { - if (isNaN(newValue) || newValue === undefined || newValue === null) return; - if (attr == 'min') { - this.min = +newValue; - this.setAttribute('aria-valuemin', this.min); - } - if (attr == 'max') { - this.max = +newValue; - this.setAttribute('aria-valuemax', this.max); - } - if (attr == 'value') { - this.update(+newValue); - } - if (attr == 'origin') { - this.origin = +newValue; - // this.update(this.value); - } - if (attr == 'step') { - if (newValue > 0) { - this.step = +newValue; - } - } - if (attr == 'ticks') { - this.ticks = (newValue === '' ? true : newValue); - } - } - - onKeyDown(event) { - this.changeValue = this.value; - let stopPropagation = false; - switch (event.keyCode) { - case keyCodes.left: - case keyCodes.down: - this.update(this.value - this.step); - stopPropagation = true; - break; - case keyCodes.right: - case keyCodes.up: - this.update(this.value + this.step); - stopPropagation = true; - break; - case keyCodes.pageUp: - this.update(this.value + this.step * 10); - stopPropagation = true; - break; - - case keyCodes.pageDown: - this.update(this.value + this.step * 10); - stopPropagation = true; - break; - case keyCodes.home: - this.update(this.min); - stopPropagation = true; - break; - case keyCodes.end: - this.update(this.max); - stopPropagation = true; - break; - } - if (stopPropagation) { - this.background.classList.add('focus'); - event.preventDefault(); - event.stopPropagation(); - if (this.changeValue !== this.value) this.dispatchChange(); - } - } - - validateValueRange(min, max, value) { - return Math.max(Math.min(max, value), min); - } - - quantizeValue(value, step) { - return Math.round(value / step) * step; - } - - dragUpdate() { - const bbox = this.background.getBoundingClientRect(); - const x = event.x; - const width = bbox.width; - this.update(this.scale.invert(x / width)); - } - - update(value) { - let v = value; - if (this.step !== 'any') { - v = this.quantizeValue(value, this.step); - } - v = this.validateValueRange(this.min, this.max, v); - if (this.connected) { - this.knob.style.left = this.scale(v) * 100 + '%'; - this.trackFill.style.width = this.scale(this.min + Math.abs(v - this.origin)) * 100 + '%'; - this.trackFill.style.left = this.scale(Math.min(v, this.origin)) * 100 + '%'; - } - if (this.value !== v) { - this.value = v; - this.setAttribute('aria-valuenow', this.value); - this.dispatchInput(); - } - } - - // Dispatches only on a committed change (basically only on mouseup). - dispatchChange() { - const e = new Event('change'); - this.dispatchEvent(e, {}); - } - - // Dispatches on each value change. - dispatchInput() { - const e = new Event('input'); - this.dispatchEvent(e, {}); - } - - renderTicks() { - const ticksContainer = this.root.querySelector('.ticks'); - if (this.ticks !== false) { - let tickData = []; - if (this.ticks > 0) { - tickData = this.scale.ticks(this.ticks); - } else if (this.step === 'any') { - tickData = this.scale.ticks(); - } else { - tickData = range(this.min, this.max + 1e-6, this.step); - } - tickData.forEach(d => { - const tick = document.createElement('div'); - tick.classList.add('tick'); - tick.style.left = this.scale(d) * 100 + '%'; - ticksContainer.appendChild(tick); - }); - } else { - ticksContainer.style.display = 'none'; - } - } - } - - var logo = "\n \n\n"; - - const headerTemplate = ` - - -`; - - // Copyright 2018 The Distill Template Authors - - const T$b = Template('distill-header', headerTemplate, false); - - class DistillHeader extends T$b(HTMLElement) { - - } - - // Copyright 2018 The Distill Template Authors - - const styles$2 = ` - -`; - - function appendixTemplate(frontMatter) { - let html = styles$2; - - if (typeof frontMatter.githubUrl !== 'undefined') { - html += ` -

    Updates and Corrections

    -

    `; - if (frontMatter.githubCompareUpdatesUrl) { - html += `View all changes to this article since it was first published.`; - } - html += ` - If you see mistakes or want to suggest changes, please create an issue on GitHub.

    - `; - } - - const journal = frontMatter.journal; - if (typeof journal !== 'undefined' && journal.title === 'Distill') { - html += ` -

    Reuse

    -

    Diagrams and text are licensed under Creative Commons Attribution CC-BY 4.0 with the source available on GitHub, unless noted otherwise. The figures that have been reused from other sources don’t fall under this license and can be recognized by a note in their caption: “Figure from …”.

    - `; - } - - if (typeof frontMatter.publishedDate !== 'undefined') { - html += ` -

    Citation

    -

    For attribution in academic contexts, please cite this work as

    -
    ${frontMatter.concatenatedAuthors}, "${frontMatter.title}", Distill, ${frontMatter.publishedYear}.
    -

    BibTeX citation

    -
    ${serializeFrontmatterToBibtex(frontMatter)}
    - `; - } - - return html; - } - - class DistillAppendix extends HTMLElement { - - static get is() { return 'distill-appendix'; } - - set frontMatter(frontMatter) { - this.innerHTML = appendixTemplate(frontMatter); - } - - } - - const footerTemplate = ` - - - - -`; - - // Copyright 2018 The Distill Template Authors - - const T$c = Template('distill-footer', footerTemplate); - - class DistillFooter extends T$c(HTMLElement) { - - } - - // Copyright 2018 The Distill Template Authors - - let templateIsLoading = false; - let runlevel = 0; - const initialize = function() { - if (window.distill.runlevel < 1) { - throw new Error("Insufficient Runlevel for Distill Template!"); - } - - /* 1. Flag that we're being loaded */ - if ("distill" in window && window.distill.templateIsLoading) { - throw new Error( - "Runlevel 1: Distill Template is getting loaded more than once, aborting!" - ); - } else { - window.distill.templateIsLoading = true; - console.debug("Runlevel 1: Distill Template has started loading."); - } - - /* 2. Add styles if they weren't added during prerendering */ - makeStyleTag(document); - console.debug("Runlevel 1: Static Distill styles have been added."); - console.debug("Runlevel 1->2."); - window.distill.runlevel += 1; - - /* 3. Register Controller listener functions */ - /* Needs to happen before components to their connected callbacks have a controller to talk to. */ - for (const [functionName, callback] of Object.entries(Controller.listeners)) { - if (typeof callback === "function") { - document.addEventListener(functionName, callback); - } else { - console.error("Runlevel 2: Controller listeners need to be functions!"); - } - } - console.debug("Runlevel 2: We can now listen to controller events."); - console.debug("Runlevel 2->3."); - window.distill.runlevel += 1; - - /* 4. Register components */ - const components = [ - Abstract, Appendix, Article, Bibliography, Byline, Cite, CitationList, Code, - Footnote, FootnoteList, FrontMatter$1, HoverBox, Title, DMath, References, TOC, Figure, - Slider, Interstitial - ]; - - const distillComponents = [DistillHeader, DistillAppendix, DistillFooter]; - - if (window.distill.runlevel < 2) { - throw new Error("Insufficient Runlevel for adding custom elements!"); - } - const allComponents = components.concat(distillComponents); - for (const component of allComponents) { - console.debug("Runlevel 2: Registering custom element: " + component.is); - customElements.define(component.is, component); - } - - console.debug( - "Runlevel 3: Distill Template finished registering custom elements." - ); - console.debug("Runlevel 3->4."); - window.distill.runlevel += 1; - - // If template was added after DOMContentLoaded we may have missed that event. - // Controller will check for that case, so trigger the event explicitly: - if (domContentLoaded()) { - Controller.listeners.DOMContentLoaded(); - } - - console.debug("Runlevel 4: Distill Template initialisation complete."); - window.distill.templateIsLoading = false; - window.distill.templateHasLoaded = true; - }; - - window.distill = { runlevel, initialize, templateIsLoading }; - - /* 0. Check browser feature support; synchronously polyfill if needed */ - if (Polyfills.browserSupportsAllFeatures()) { - console.debug("Runlevel 0: No need for polyfills."); - console.debug("Runlevel 0->1."); - window.distill.runlevel += 1; - window.distill.initialize(); - } else { - console.debug("Runlevel 0: Distill Template is loading polyfills."); - Polyfills.load(window.distill.initialize); - } - -}))); -//# sourceMappingURL=template.v2.js.map +!function(n){"function"==typeof define&&define.amd?define(n):n()}(function(){"use strict"; +// Copyright 2018 The Distill Template Authors +function n(n,t){n.title=t.title,t.published&&(t.published instanceof Date?n.publishedDate=t.published:t.published.constructor===String&&(n.publishedDate=new Date(t.published))),t.publishedDate&&(t.publishedDate instanceof Date?n.publishedDate=t.publishedDate:t.publishedDate.constructor===String?n.publishedDate=new Date(t.publishedDate):console.error("Don't know what to do with published date: "+t.publishedDate)),n.description=t.description,n.authors=t.authors.map(n=>new Nr(n)),n.katex=t.katex,n.password=t.password,t.doi&&(n.doi=t.doi)} +// Copyright 2018 The Distill Template Authors +function t(n=document){const t=new Set,e=n.querySelectorAll("d-cite");for(const n of e){const e=(n.getAttribute("key")||n.getAttribute("bibtex-key")).split(",").map(n=>n.trim());for(const n of e)t.add(n)}return[...t]}function e(n,t,e,i){if(null==n.author)return"";var r=n.author.split(" and ");let o=r.map(n=>{if(-1!=(n=n.trim()).indexOf(","))var e=n.split(",")[0].trim(),i=n.split(",")[1];else if(-1!=n.indexOf(" "))e=n.split(" ").slice(-1)[0].trim(),i=n.split(" ").slice(0,-1).join(" ");else e=n.trim();var r="";return i!=undefined&&(r=(r=i.trim().split(" ").map(n=>n.trim()[0])).join(".")+"."),t.replace("${F}",i).replace("${L}",e).replace("${I}",r).trim()});if(r.length>1){var a=o.slice(0,r.length-1).join(e);return a+=(i||e)+o[r.length-1]}return o[0]}function i(n){var t=n.journal||n.booktitle||"";if("volume"in n){var e=n.issue||n.number;e=e!=undefined?"("+e+")":"",t+=", Vol "+n.volume+e}return"pages"in n&&(t+=", pp. "+n.pages),""!=t&&(t+=". "),"publisher"in n&&"."!=(t+=n.publisher)[t.length-1]&&(t+="."),t}function r(n){if("url"in n){var t=n.url,e=/arxiv\.org\/abs\/([0-9\.]*)/.exec(t);if(null!=e&&(t=`http://arxiv.org/pdf/${e[1]}.pdf`),".pdf"==t.slice(-4))var i="PDF";else if(".html"==t.slice(-5))i="HTML";return`  [${i||"link"}]`}return""}function o(n,t){return"doi"in n?`${t?"
    ":""} DOI: ${n.doi}`:""}function a(n){return''+n.title+" "}function s(n){if(n){var t=a(n);return t+=r(n)+"
    ",n.author&&(t+=e(n,"${L}, ${I}",", "," and "),(n.year||n.date)&&(t+=", ")),n.year||n.date?t+=(n.year||n.date)+". ":t+=". ",t+=i(n),t+=o(n)}return"?"}function l(n){if(n){var t="";t+=""+n.title+"",t+=r(n),t+="
    ";var a=e(n,"${I} ${L}",", ")+".",s=i(n).trim()+" "+n.year+". "+o(n,!0);return(a+s).length"+s,t}return"?"}function u(){return-1!==["interactive","complete"].indexOf(document.readyState)} +// Copyright 2018 The Distill Template Authors +function c(n){for(let t of n.authors){const n=Boolean(t.affiliation),e=Boolean(t.affiliations);if(n)if(e)console.warn(`Author ${t.author} has both old-style ("affiliation" & "affiliationURL") and new style ("affiliations") affiliation information!`);else{let n={name:t.affiliation};t.affiliationURL&&(n.url=t.affiliationURL),t.affiliations=[n]}}return n}function d(n){const t=n.firstElementChild;if(t){if("json"==t.getAttribute("type").split("/")[1]){const n=t.textContent;return c(JSON.parse(n))}console.error("Distill only supports JSON frontmatter tags anymore; no more YAML.")}else console.error("You added a frontmatter tag but did not provide a script tag with front matter data in it. Please take a look at our templates.");return{}} +// Copyright 2018 The Distill Template Authors +function h(n,t){const e=n.body,i=e.querySelector("d-article");if(!i)return void console.warn("No d-article tag found; skipping adding optional components!");let r=n.querySelector("d-byline");r||(t.authors?(r=n.createElement("d-byline"),e.insertBefore(r,i)):console.warn("No authors found in front matter; please add them before submission!"));let o=n.querySelector("d-title");o||(o=n.createElement("d-title"),e.insertBefore(o,r));let a=o.querySelector("h1");a||((a=n.createElement("h1")).textContent=t.title,o.insertBefore(a,o.firstChild));const s="undefined"!=typeof t.password;let l=e.querySelector("d-interstitial");if(s&&!l){const i="undefined"!=typeof window,r=i&&window.location.hostname.includes("localhost");i&&r||((l=n.createElement("d-interstitial")).password=t.password,e.insertBefore(l,e.firstChild))}else!s&&l&&l.parentElement.removeChild(this);let u=n.querySelector("d-appendix");u||(u=n.createElement("d-appendix"),n.body.appendChild(u));let c=n.querySelector("d-footnote-list");c||(c=n.createElement("d-footnote-list"),u.appendChild(c));let d=n.querySelector("d-citation-list");d||(d=n.createElement("d-citation-list"),u.appendChild(d))} +// Copyright 2018 The Distill Template Authors +function p(n){const t="distill-prerendered-styles";if(!n.getElementById(t)){const e=n.createElement("style");e.id=t,e.type="text/css";const i=n.createTextNode(Kr);e.appendChild(i);const r=n.head.querySelector("script");n.head.insertBefore(e,r)}} +// Copyright 2018 The Distill Template Authors +function f(n,t){console.debug("Runlevel 0: Polyfill required: "+n.name);const e=document.createElement("script");e.src=n.url,e.async=!1,t&&(e.onload=function(){t(n)}),e.onerror=function(){new Error("Runlevel 0: Polyfills failed to load script "+n.name)},document.head.appendChild(e)} +// Copyright 2018 The Distill Template Authors +function g(n){return`${n} {\n grid-column: left / text;\n }\n `} +// Copyright 2018 The Distill Template Authors +function m(n,t){return n(t={exports:{}},t.exports),t.exports} +// Copyright 2018 The Distill Template Authors +function b(n){return n.replace(/[\t\n ]+/g," ").replace(/{\\["^`.'acu~Hvs]( )?([a-zA-Z])}/g,(n,t,e)=>e).replace(/{\\([a-zA-Z])}/g,(n,t)=>t)}function y(n){const t=new Map,e=oo.toJSON(n);for(const n of e){for(const[t,e]of Object.entries(n.entryTags))n.entryTags[t.toLowerCase()]=b(e);n.entryTags.type=n.entryType,t.set(n.citationKey,n.entryTags)}return t}function v(n){return`@article{${n.slug},\n author = {${n.bibtexAuthors}},\n title = {${n.title}},\n journal = {${n.journal.title}},\n year = {${n.publishedYear}},\n note = {${n.url}},\n doi = {${n.doi}}\n}`} +// Copyright 2018 The Distill Template Authors +// Copyright 2018 The Distill Template Authors +function w(n){return`\n \n`}function x(n,t,e=document){if(t.size>0){n.style.display="";let i=n.querySelector(".references");if(i)i.innerHTML="";else{const t=e.createElement("style");t.innerHTML=co,n.appendChild(t);const r=e.createElement("h3");r.id="references",r.textContent="References",n.appendChild(r),(i=e.createElement("ol")).id="references-list",i.className="references",n.appendChild(i)}for(const[n,r]of t){const t=e.createElement("li");t.id=n,t.innerHTML=s(r),i.appendChild(t)}}else n.style.display="none"}function k(n,t){let e='\n \n \n

    Table of contents

    \n
      ';for(const n of t){const t="D-TITLE"==n.parentElement.tagName,i=n.getAttribute("no-toc");if(t||i)continue;const r=n.textContent;let o='
    • '+r+"
    • ";"H3"==n.tagName?o="
        "+o+"
      ":o+="
      ",e+=o}e+="
    ",n.innerHTML=e} +// Copyright 2018 The Distill Template Authors +function S(n,t){return nt?1:n>=t?0:NaN}function M(n){return 1===n.length&&(n=T(n)),{left:function(t,e,i,r){for(null==i&&(i=0),null==r&&(r=t.length);i>>1;n(t[o],e)<0?i=o+1:r=o}return i},right:function(t,e,i,r){for(null==i&&(i=0),null==r&&(r=t.length);i>>1;n(t[o],e)>0?r=o:i=o+1}return i}}}function T(n){return function(t,e){return S(n(t),e)}}function _(n,t,e){n=+n,t=+t,e=(r=arguments.length)<2?(t=n,n=0,1):r<3?1:+e;for(var i=-1,r=0|Math.max(0,Math.ceil((t-n)/e)),o=new Array(r);++i0)return[n];if((i=t0)for(n=Math.ceil(n/a),t=Math.floor(t/a),o=new Array(r=Math.ceil(t-n+1));++s=0?(o>=Lo?10:o>=Do?5:o>=Oo?2:1)*Math.pow(10,r):-Math.pow(10,-r)/(o>=Lo?10:o>=Do?5:o>=Oo?2:1)}function E(n,t,e){var i=Math.abs(t-n)/Math.max(0,e),r=Math.pow(10,Math.floor(Math.log(i)/Math.LN10)),o=i/r;return o>=Lo?r*=10:o>=Do?r*=5:o>=Oo&&(r*=2),t>8&15|t>>4&240,t>>4&15|240&t,(15&t)<<4|15&t,1):8===e?P(t>>24&255,t>>16&255,t>>8&255,(255&t)/255):4===e?P(t>>12&15|t>>8&240,t>>8&15|t>>4&240,t>>4&15|240&t,((15&t)<<4|15&t)/255):null):(t=Ho.exec(n))?new q(t[1],t[2],t[3],1):(t=zo.exec(n))?new q(255*t[1]/100,255*t[2]/100,255*t[3]/100,1):(t=qo.exec(n))?P(t[1],t[2],t[3],t[4]):(t=jo.exec(n))?P(255*t[1]/100,255*t[2]/100,255*t[3]/100,t[4]):(t=Bo.exec(n))?W(t[1],t[2]/100,t[3]/100,1):(t=Yo.exec(n))?W(t[1],t[2]/100,t[3]/100,t[4]):Wo.hasOwnProperty(n)?$(Wo[n]):"transparent"===n?new q(NaN,NaN,NaN,0):null}function $(n){return new q(n>>16&255,n>>8&255,255&n,1)}function P(n,t,e,i){return i<=0&&(n=t=e=NaN),new q(n,t,e,i)}function H(n){return n instanceof O||(n=U(n)),n?new q((n=n.rgb()).r,n.g,n.b,n.opacity):new q}function z(n,t,e,i){return 1===arguments.length?H(n):new q(n,t,e,null==i?1:i)}function q(n,t,e,i){this.r=+n,this.g=+t,this.b=+e,this.opacity=+i}function j(){return"#"+Y(this.r)+Y(this.g)+Y(this.b)}function B(){var n=this.opacity;return(1===(n=isNaN(n)?1:Math.max(0,Math.min(1,n)))?"rgb(":"rgba(")+Math.max(0,Math.min(255,Math.round(this.r)||0))+", "+Math.max(0,Math.min(255,Math.round(this.g)||0))+", "+Math.max(0,Math.min(255,Math.round(this.b)||0))+(1===n?")":", "+n+")")}function Y(n){return((n=Math.max(0,Math.min(255,Math.round(n)||0)))<16?"0":"")+n.toString(16)}function W(n,t,e,i){return i<=0?n=t=e=NaN:e<=0||e>=1?n=t=NaN:t<=0&&(n=NaN),new K(n,t,e,i)}function G(n){if(n instanceof K)return new K(n.h,n.s,n.l,n.opacity);if(n instanceof O||(n=U(n)),!n)return new K;if(n instanceof K)return n;var t=(n=n.rgb()).r/255,e=n.g/255,i=n.b/255,r=Math.min(t,e,i),o=Math.max(t,e,i),a=NaN,s=o-r,l=(o+r)/2;return s?(a=t===o?(e-i)/s+6*(e0&&l<1?0:a,new K(a,s,l,n.opacity)}function V(n,t,e,i){return 1===arguments.length?G(n):new K(n,t,e,null==i?1:i)}function K(n,t,e,i){this.h=+n,this.s=+t,this.l=+e,this.opacity=+i}function X(n,t,e){return 255*(n<60?t+(e-t)*n/60:n<180?e:n<240?t+(e-t)*(240-n)/60:t)}function Z(n){if(n instanceof J)return new J(n.l,n.a,n.b,n.opacity);if(n instanceof sn)return ln(n);n instanceof q||(n=H(n));var t,e,i=rn(n.r),r=rn(n.g),o=rn(n.b),a=nn((.2225045*i+.7168786*r+.0606169*o)/Zo);return i===r&&r===o?t=e=a:(t=nn((.4360747*i+.3850649*r+.1430804*o)/Xo),e=nn((.0139322*i+.0971045*r+.7141733*o)/Qo)),new J(116*a-16,500*(t-a),200*(a-e),n.opacity)}function Q(n,t,e,i){return 1===arguments.length?Z(n):new J(n,t,e,null==i?1:i)}function J(n,t,e,i){this.l=+n,this.a=+t,this.b=+e,this.opacity=+i}function nn(n){return n>ea?Math.pow(n,1/3):n/ta+Jo}function tn(n){return n>na?n*n*n:ta*(n-Jo)}function en(n){return 255*(n<=.0031308?12.92*n:1.055*Math.pow(n,1/2.4)-.055)}function rn(n){return(n/=255)<=.04045?n/12.92:Math.pow((n+.055)/1.055,2.4)}function on(n){if(n instanceof sn)return new sn(n.h,n.c,n.l,n.opacity);if(n instanceof J||(n=Z(n)),0===n.a&&0===n.b)return new sn(NaN,0o&&(r=t.slice(o,r),s[a]?s[a]+=r:s[++a]=r),(e=e[0])===(i=i[0])?s[a]?s[a]+=i:s[++a]=i:(s[++a]=null,l.push({i:a,x:xn(e,i)})),o=fa.lastIndex;return ot&&(e=n,n=t,t=e),function(e){return Math.max(n,Math.min(t,e))}}function On(n,t,e){var i=n[0],r=n[1],o=t[0],a=t[1];return r2?In:On,a=s=null,t}function t(n){return isNaN(n=+n)?r:(a||(a=o(l.map(e),u,c)))(e(d(n)))}var e,i,r,o,a,s,l=ga,u=ga,c=_n,d=Nn;return t.invert=function(n){return d(i((s||(s=o(u,l.map(e),xn)))(n)))},t.domain=function(t){return arguments.length?(l=Array.from(t,En),n()):l.slice()},t.range=function(t){return arguments.length?(u=Array.from(t),n()):u.slice()},t.rangeRound=function(t){return u=Array.from(t),c=Cn,n()},t.clamp=function(t){return arguments.length?(d=!!t||Nn,n()):d!==Nn},t.interpolate=function(t){return arguments.length?(c=t,n()):c},t.unknown=function(n){return arguments.length?(r=n,t):r},function(t,r){return e=t,i=r,n()}}function Un(){return Rn()(Nn,Nn)}function $n(n,t){if((e=(n=t?n.toExponential(t-1):n.toExponential()).indexOf("e"))<0)return null;var e,i=n.slice(0,e);return[i.length>1?i[0]+i.slice(2):i,+n.slice(e+1)]}function Pn(n){return(n=$n(Math.abs(n)))?n[1]:NaN}function Hn(n,t){return function(e,i){for(var r=e.length,o=[],a=0,s=n[0],l=0;r>0&&s>0&&(l+s+1>i&&(s=Math.max(1,i-l)),o.push(e.substring(r-=s,r+s)),!((l+=s+1)>i));)s=n[a=(a+1)%n.length];return o.reverse().join(t)}}function zn(n){return function(t){return t.replace(/[0-9]/g,function(t){return n[+t]})}}function qn(n){if(!(t=ma.exec(n)))throw new Error("invalid format: "+n);var t;return new jn({fill:t[1],align:t[2],sign:t[3],symbol:t[4],zero:t[5],width:t[6],comma:t[7],precision:t[8]&&t[8].slice(1),trim:t[9],type:t[10]})}function jn(n){this.fill=n.fill===undefined?" ":n.fill+"",this.align=n.align===undefined?">":n.align+"",this.sign=n.sign===undefined?"-":n.sign+"",this.symbol=n.symbol===undefined?"":n.symbol+"",this.zero=!!n.zero,this.width=n.width===undefined?undefined:+n.width,this.comma=!!n.comma,this.precision=n.precision===undefined?undefined:+n.precision,this.trim=!!n.trim,this.type=n.type===undefined?"":n.type+""}function Bn(n){n:for(var t,e=n.length,i=1,r=-1;i0&&(r=0)}return r>0?n.slice(0,r)+n.slice(t+1):n}function Yn(n,t){var e=$n(n,t);if(!e)return n+"";var i=e[0],r=e[1],o=r-(da=3*Math.max(-8,Math.min(8,Math.floor(r/3))))+1,a=i.length;return o===a?i:o>a?i+new Array(o-a+1).join("0"):o>0?i.slice(0,o)+"."+i.slice(o):"0."+new Array(1-o).join("0")+$n(n,Math.max(0,t+o-1))[0]}function Wn(n,t){var e=$n(n,t);if(!e)return n+"";var i=e[0],r=e[1];return r<0?"0."+new Array(-r).join("0")+i:i.length>r+1?i.slice(0,r+1)+"."+i.slice(r+1):i+new Array(r-i.length+2).join("0")}function Gn(n){return n}function Vn(n){function t(n){function t(n){var t,r,o,l=w,p=x;if("c"===v)p=k(n)+p,n="";else{var M=(n=+n)<0||1/n<0;if(n=isNaN(n)?c:k(Math.abs(n),b),y&&(n=Bn(n)),M&&0==+n&&"+"!==h&&(M=!1),l=(M?"("===h?h:u:"-"===h||"("===h?"":h)+l,p=("s"===v?ka[8+da/3]:"")+p+(M&&"("===h?")":""),S)for(t=-1,r=n.length;++t(o=n.charCodeAt(t))||o>57){p=(46===o?a+n.slice(t+1):n.slice(t))+p,n=n.slice(0,t);break}}m&&!f&&(n=i(n,Infinity));var T=l.length+n.length+p.length,_=T>1)+l+n+p+_.slice(T);break;default:n=_+l+n+p}return s(n)}var e=(n=qn(n)).fill,d=n.align,h=n.sign,p=n.symbol,f=n.zero,g=n.width,m=n.comma,b=n.precision,y=n.trim,v=n.type;"n"===v?(m=!0,v="g"):wa[v]||(b===undefined&&(b=12),y=!0,v="g"),(f||"0"===e&&"="===d)&&(f=!0,e="0",d="=");var w="$"===p?r:"#"===p&&/[boxX]/.test(v)?"0"+v.toLowerCase():"",x="$"===p?o:/[%p]/.test(v)?l:"",k=wa[v],S=/[defgprs%]/.test(v);return b=b===undefined?6:/[gprs]/.test(v)?Math.max(1,Math.min(21,b)):Math.max(0,Math.min(20,b)),t.toString=function(){return n+""},t}function e(n,e){var i=t(((n=qn(n)).type="f",n)),r=3*Math.max(-8,Math.min(8,Math.floor(Pn(e)/3))),o=Math.pow(10,-r),a=ka[8+r/3];return function(n){return i(o*n)+a}}var i=n.grouping===undefined||n.thousands===undefined?Gn:Hn(xa.call(n.grouping,Number),n.thousands+""),r=n.currency===undefined?"":n.currency[0]+"",o=n.currency===undefined?"":n.currency[1]+"",a=n.decimal===undefined?".":n.decimal+"",s=n.numerals===undefined?Gn:zn(xa.call(n.numerals,String)),l=n.percent===undefined?"%":n.percent+"",u=n.minus===undefined?"-":n.minus+"",c=n.nan===undefined?"NaN":n.nan+"";return{format:t,formatPrefix:e}}function Kn(n){return ba=Vn(n),ya=ba.format,va=ba.formatPrefix,ba}function Xn(n){return Math.max(0,-Pn(Math.abs(n)))}function Zn(n,t){return Math.max(0,3*Math.max(-8,Math.min(8,Math.floor(Pn(t)/3)))-Pn(Math.abs(n)))}function Qn(n,t){return n=Math.abs(n),t=Math.abs(t)-n,Math.max(0,Pn(t)-Pn(n))+1}function Jn(n,t,e,i){var r,o=E(n,t,e);switch((i=qn(null==i?",f":i)).type){case"s":var a=Math.max(Math.abs(n),Math.abs(t));return null!=i.precision||isNaN(r=Zn(o,a))||(i.precision=r),va(i,a);case"":case"e":case"g":case"p":case"r":null!=i.precision||isNaN(r=Qn(o,Math.max(Math.abs(n),Math.abs(t))))||(i.precision=r-("e"===i.type));break;case"f":case"%":null!=i.precision||isNaN(r=Xn(o))||(i.precision=r-2*("%"===i.type))}return ya(i)}function nt(n){var t=n.domain;return n.ticks=function(n){var e=t();return C(e[0],e[e.length-1],null==n?10:n)},n.tickFormat=function(n,e){var i=t();return Jn(i[0],i[i.length-1],null==n?10:n,e)},n.nice=function(e){null==e&&(e=10);var i,r=t(),o=0,a=r.length-1,s=r[o],l=r[a];return l0?i=A(s=Math.floor(s/i)*i,l=Math.ceil(l/i)*i,e):i<0&&(i=A(s=Math.ceil(s*i)/i,l=Math.floor(l*i)/i,e)),i>0?(r[o]=Math.floor(s/i)*i,r[a]=Math.ceil(l/i)*i,t(r)):i<0&&(r[o]=Math.ceil(s*i)/i,r[a]=Math.floor(l*i)/i,t(r)),n},n}function tt(){var n=Un();return n.copy=function(){return Fn(n,tt())},N.apply(n,arguments),nt(n)}function et(n,t,e,i){function r(t){return n(t=0===arguments.length?new Date:new Date(+t)),t}return r.floor=function(t){return n(t=new Date(+t)),t},r.ceil=function(e){return n(e=new Date(e-1)),t(e,1),n(e),e},r.round=function(n){var t=r(n),e=r.ceil(n);return n-t0))return s;do{s.push(a=new Date(+e)),t(e,o),n(e)}while(a=t)for(;n(t),!e(t);)t.setTime(t-1)},function(n,i){if(n>=n)if(i<0)for(;++i<=0;)for(;t(n,-1),!e(n););else for(;--i>=0;)for(;t(n,1),!e(n););})},e&&(r.count=function(t,i){return Sa.setTime(+t),Ma.setTime(+i),n(Sa),n(Ma),Math.floor(e(Sa,Ma))},r.every=function(n){return n=Math.floor(n),isFinite(n)&&n>0?n>1?r.filter(i?function(t){return i(t)%n==0}:function(t){return r.count(0,t)%n==0}):r:null}),r}function it(n){return et(function(t){t.setDate(t.getDate()-(t.getDay()+7-n)%7),t.setHours(0,0,0,0)},function(n,t){n.setDate(n.getDate()+7*t)},function(n,t){return(t-n-(t.getTimezoneOffset()-n.getTimezoneOffset())*Ca)/Na})}function rt(n){return et(function(t){t.setUTCDate(t.getUTCDate()-(t.getUTCDay()+7-n)%7),t.setUTCHours(0,0,0,0)},function(n,t){n.setUTCDate(n.getUTCDate()+7*t)},function(n,t){return(t-n)/Na})}function ot(n){if(0<=n.y&&n.y<100){var t=new Date(-1,n.m,n.d,n.H,n.M,n.S,n.L);return t.setFullYear(n.y),t}return new Date(n.y,n.m,n.d,n.H,n.M,n.S,n.L)}function at(n){if(0<=n.y&&n.y<100){var t=new Date(Date.UTC(-1,n.m,n.d,n.H,n.M,n.S,n.L));return t.setUTCFullYear(n.y),t}return new Date(Date.UTC(n.y,n.m,n.d,n.H,n.M,n.S,n.L))}function st(n,t,e){return{y:n,m:t,d:e,H:0,M:0,S:0,L:0}}function lt(n){function t(n,t){return function(e){var i,r,o,a=[],s=-1,l=0,u=n.length;for(e instanceof Date||(e=new Date(+e));++s53)return null;"w"in a||(a.w=1),"Z"in a?(r=(o=(r=at(st(a.y,0,1))).getUTCDay())>4||0===o?$a.ceil(r):$a(r),r=Ra.offset(r,7*(a.V-1)),a.y=r.getUTCFullYear(),a.m=r.getUTCMonth(),a.d=r.getUTCDate()+(a.w+6)%7):(r=(o=(r=ot(st(a.y,0,1))).getDay())>4||0===o?Oa.ceil(r):Oa(r),r=La.offset(r,7*(a.V-1)),a.y=r.getFullYear(),a.m=r.getMonth(),a.d=r.getDate()+(a.w+6)%7)}else("W"in a||"U"in a)&&("w"in a||(a.w="u"in a?a.u%7:"W"in a?1:0),o="Z"in a?at(st(a.y,0,1)).getUTCDay():ot(st(a.y,0,1)).getDay(),a.m=0,a.d="W"in a?(a.w+6)%7+7*a.W-(o+5)%7:a.w+7*a.U-(o+6)%7);return"Z"in a?(a.H+=a.Z/100|0,a.M+=a.Z%100,at(a)):ot(a)}}function i(n,t,e,i){for(var r,o,a=0,s=t.length,l=e.length;a=l)return-1;if(37===(r=t.charCodeAt(a++))){if(r=t.charAt(a++),!(o=B[r in Ba?t.charAt(a++):r])||(i=o(n,e,i))<0)return-1}else if(r!=e.charCodeAt(i++))return-1}return i}function r(n,t,e){var i=D.exec(t.slice(e));return i?(n.p=O[i[0].toLowerCase()],e+i[0].length):-1}function o(n,t,e){var i=R.exec(t.slice(e));return i?(n.w=U[i[0].toLowerCase()],e+i[0].length):-1}function a(n,t,e){var i=I.exec(t.slice(e));return i?(n.w=F[i[0].toLowerCase()],e+i[0].length):-1}function s(n,t,e){var i=H.exec(t.slice(e));return i?(n.m=z[i[0].toLowerCase()],e+i[0].length):-1}function l(n,t,e){var i=$.exec(t.slice(e));return i?(n.m=P[i[0].toLowerCase()],e+i[0].length):-1}function u(n,t,e){return i(n,M,t,e)}function c(n,t,e){return i(n,T,t,e)}function d(n,t,e){return i(n,_,t,e)}function h(n){return E[n.getDay()]}function p(n){return A[n.getDay()]}function f(n){return L[n.getMonth()]}function g(n){return N[n.getMonth()]}function m(n){return C[+(n.getHours()>=12)]}function b(n){return 1+~~(n.getMonth()/3)}function y(n){return E[n.getUTCDay()]}function v(n){return A[n.getUTCDay()]}function w(n){return L[n.getUTCMonth()]}function x(n){return N[n.getUTCMonth()]}function k(n){return C[+(n.getUTCHours()>=12)]}function S(n){return 1+~~(n.getUTCMonth()/3)}var M=n.dateTime,T=n.date,_=n.time,C=n.periods,A=n.days,E=n.shortDays,N=n.months,L=n.shortMonths,D=dt(C),O=ht(C),I=dt(A),F=ht(A),R=dt(E),U=ht(E),$=dt(N),P=ht(N),H=dt(L),z=ht(L),q={a:h,A:p,b:f,B:g,c:null,d:Ot,e:Ot,f:$t,H:It,I:Ft,j:Rt,L:Ut,m:Pt,M:Ht,p:m,q:b,Q:fe,s:ge,S:zt,u:qt,U:jt,V:Bt,w:Yt,W:Wt,x:null,X:null,y:Gt,Y:Vt,Z:Kt,"%":pe},j={a:y,A:v,b:w,B:x,c:null,d:Xt,e:Xt,f:te,H:Zt,I:Qt,j:Jt,L:ne,m:ee,M:ie,p:k,q:S,Q:fe,s:ge,S:re,u:oe,U:ae,V:se,w:le,W:ue,x:null,X:null,y:ce,Y:de,Z:he,"%":pe},B={a:o,A:a,b:s,B:l,c:u,d:St,e:St,f:Et,H:Tt,I:Tt,j:Mt,L:At,m:kt,M:_t,p:r,q:xt,Q:Lt,s:Dt,S:Ct,u:ft,U:gt,V:mt,w:pt,W:bt,x:c,X:d,y:vt,Y:yt,Z:wt,"%":Nt};return q.x=t(T,q),q.X=t(_,q),q.c=t(M,q),j.x=t(T,j),j.X=t(_,j),j.c=t(M,j),{format:function(n){var e=t(n+="",q);return e.toString=function(){return n},e},parse:function(n){var t=e(n+="",!1);return t.toString=function(){return n},t},utcFormat:function(n){var e=t(n+="",j);return e.toString=function(){return n},e},utcParse:function(n){var t=e(n+="",!0);return t.toString=function(){return n},t}}}function ut(n,t,e){var i=n<0?"-":"",r=(i?-n:n)+"",o=r.length;return i+(o68?1900:2e3),e+i[0].length):-1}function wt(n,t,e){var i=/^(Z)|([+-]\d\d)(?::?(\d\d))?/.exec(t.slice(e,e+6));return i?(n.Z=i[1]?0:-(i[2]+(i[3]||"00")),e+i[0].length):-1}function xt(n,t,e){var i=Ya.exec(t.slice(e,e+1));return i?(n.q=3*i[0]-3,e+i[0].length):-1}function kt(n,t,e){var i=Ya.exec(t.slice(e,e+2));return i?(n.m=i[0]-1,e+i[0].length):-1}function St(n,t,e){var i=Ya.exec(t.slice(e,e+2));return i?(n.d=+i[0],e+i[0].length):-1}function Mt(n,t,e){var i=Ya.exec(t.slice(e,e+3));return i?(n.m=0,n.d=+i[0],e+i[0].length):-1}function Tt(n,t,e){var i=Ya.exec(t.slice(e,e+2));return i?(n.H=+i[0],e+i[0].length):-1}function _t(n,t,e){var i=Ya.exec(t.slice(e,e+2));return i?(n.M=+i[0],e+i[0].length):-1}function Ct(n,t,e){var i=Ya.exec(t.slice(e,e+2));return i?(n.S=+i[0],e+i[0].length):-1}function At(n,t,e){var i=Ya.exec(t.slice(e,e+3));return i?(n.L=+i[0],e+i[0].length):-1}function Et(n,t,e){var i=Ya.exec(t.slice(e,e+6));return i?(n.L=Math.floor(i[0]/1e3),e+i[0].length):-1}function Nt(n,t,e){var i=Wa.exec(t.slice(e,e+1));return i?e+i[0].length:-1}function Lt(n,t,e){var i=Ya.exec(t.slice(e));return i?(n.Q=+i[0],e+i[0].length):-1}function Dt(n,t,e){var i=Ya.exec(t.slice(e));return i?(n.s=+i[0],e+i[0].length):-1}function Ot(n,t){return ut(n.getDate(),t,2)}function It(n,t){return ut(n.getHours(),t,2)}function Ft(n,t){return ut(n.getHours()%12||12,t,2)}function Rt(n,t){return ut(1+La.count(Fa(n),n),t,3)}function Ut(n,t){return ut(n.getMilliseconds(),t,3)}function $t(n,t){return Ut(n,t)+"000"}function Pt(n,t){return ut(n.getMonth()+1,t,2)}function Ht(n,t){return ut(n.getMinutes(),t,2)}function zt(n,t){return ut(n.getSeconds(),t,2)}function qt(n){var t=n.getDay();return 0===t?7:t}function jt(n,t){return ut(Da.count(Fa(n)-1,n),t,2)}function Bt(n,t){var e=n.getDay();return n=e>=4||0===e?Ia(n):Ia.ceil(n),ut(Ia.count(Fa(n),n)+(4===Fa(n).getDay()),t,2)}function Yt(n){return n.getDay()}function Wt(n,t){return ut(Oa.count(Fa(n)-1,n),t,2)}function Gt(n,t){return ut(n.getFullYear()%100,t,2)}function Vt(n,t){return ut(n.getFullYear()%1e4,t,4)}function Kt(n){var t=n.getTimezoneOffset();return(t>0?"-":(t*=-1,"+"))+ut(t/60|0,"0",2)+ut(t%60,"0",2)}function Xt(n,t){return ut(n.getUTCDate(),t,2)}function Zt(n,t){return ut(n.getUTCHours(),t,2)}function Qt(n,t){return ut(n.getUTCHours()%12||12,t,2)}function Jt(n,t){return ut(1+Ra.count(Ha(n),n),t,3)}function ne(n,t){return ut(n.getUTCMilliseconds(),t,3)}function te(n,t){return ne(n,t)+"000"}function ee(n,t){return ut(n.getUTCMonth()+1,t,2)}function ie(n,t){return ut(n.getUTCMinutes(),t,2)}function re(n,t){return ut(n.getUTCSeconds(),t,2)}function oe(n){var t=n.getUTCDay();return 0===t?7:t}function ae(n,t){return ut(Ua.count(Ha(n)-1,n),t,2)}function se(n,t){var e=n.getUTCDay();return n=e>=4||0===e?Pa(n):Pa.ceil(n),ut(Pa.count(Ha(n),n)+(4===Ha(n).getUTCDay()),t,2)}function le(n){return n.getUTCDay()}function ue(n,t){return ut($a.count(Ha(n)-1,n),t,2)}function ce(n,t){return ut(n.getUTCFullYear()%100,t,2)}function de(n,t){return ut(n.getUTCFullYear()%1e4,t,4)}function he(){return"+0000"}function pe(){return"%"}function fe(n){return+n}function ge(n){return Math.floor(+n/1e3)}function me(n){return za=lt(n),za.format,za.parse,qa=za.utcFormat,ja=za.utcParse,za}function be(n){return n.toISOString()}function ye(n){var t=new Date(n);return isNaN(t)?null:t}function ve(){for(var n,t=0,e=arguments.length,i={};t=0&&(e=n.slice(i+1),n=n.slice(0,i)),n&&!t.hasOwnProperty(n))throw new Error("unknown type: "+n);return{type:n,name:e}})}function ke(n,t){for(var e,i=0,r=n.length;i=0&&"xmlns"!==(t=n.slice(0,e))&&(n=n.slice(e+1)),Za.hasOwnProperty(t)?{space:Za[t],local:n}:n}function Te(n){return function(){var t=this.ownerDocument,e=this.namespaceURI;return e===Xa&&t.documentElement.namespaceURI===Xa?t.createElement(n):t.createElementNS(e,n)}}function _e(n){return function(){return this.ownerDocument.createElementNS(n.space,n.local)}}function Ce(n){var t=Me(n);return(t.local?_e:Te)(t)}function Ae(){}function Ee(n){return null==n?Ae:function(){return this.querySelector(n)}}function Ne(n){"function"!=typeof n&&(n=Ee(n));for(var t=this._groups,e=t.length,i=new Array(e),r=0;r=w&&(w=v+1);!(y=m[w])&&++w=0;)(i=r[o])&&(a&&4^i.compareDocumentPosition(a)&&a.parentNode.insertBefore(i,a),a=i);return this}function Ge(n){function t(t,e){return t&&e?n(t.__data__,e.__data__):!t-!e}n||(n=Ve);for(var e=this._groups,i=e.length,r=new Array(i),o=0;ot?1:n>=t?0:NaN}function Ke(){var n=arguments[0];return arguments[0]=this,n.apply(null,arguments),this}function Xe(){var n=new Array(this.size()),t=-1;return this.each(function(){n[++t]=this}),n}function Ze(){for(var n=this._groups,t=0,e=n.length;t1?this.each((null==t?ui:"function"==typeof t?di:ci)(n,t,null==e?"":e)):pi(this.node(),n)}function pi(n,t){return n.style.getPropertyValue(t)||li(n).getComputedStyle(n,null).getPropertyValue(t)}function fi(n){return function(){delete this[n]}}function gi(n,t){return function(){this[n]=t}}function mi(n,t){return function(){var e=t.apply(this,arguments);null==e?delete this[n]:this[n]=e}}function bi(n,t){return arguments.length>1?this.each((null==t?fi:"function"==typeof t?mi:gi)(n,t)):this.node()[n]}function yi(n){return n.trim().split(/^|\s+/)}function vi(n){return n.classList||new wi(n)}function wi(n){this._node=n,this._names=yi(n.getAttribute("class")||"")}function xi(n,t){for(var e=vi(n),i=-1,r=t.length;++i=0&&(t=n.slice(e+1),n=n.slice(0,e)),{type:n,name:t}})}function Zi(n){return function(){var t=this.__on;if(t){for(var e,i=0,r=-1,o=t.length;iv}m.mouse("drag")}function i(){sr(ns.view).on("mousemove.drag mouseup.drag",null),gr(ns.view,c),pr(),m.mouse("end")}function r(){if(h.apply(this,arguments)){var n,t,e=ns.changedTouches,i=p.apply(this,arguments),r=e.length;for(n=0;nView all changes to this article since it was first published.`),t+=`\n If you see mistakes or want to suggest changes, please create an issue on GitHub.

    \n `);const e=n.journal;return void 0!==e&&"Distill"===e.title&&(t+=`\n

    Reuse

    \n

    Diagrams and text are licensed under Creative Commons Attribution CC-BY 4.0 with the source available on GitHub, unless noted otherwise. The figures that have been reused from other sources don\u2019t fall under this license and can be recognized by a note in their caption: \u201cFigure from \u2026\u201d.

    \n `),"undefined"!=typeof n.publishedDate&&(t+=`\n

    Citation

    \n

    For attribution in academic contexts, please cite this work as

    \n
    ${n.concatenatedAuthors}, "${n.title}", Distill, ${n.publishedYear}.
    \n

    BibTeX citation

    \n
    ${v(n)}
    \n `),t}const Mr=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],Tr=["Jan.","Feb.","March","April","May","June","July","Aug.","Sept.","Oct.","Nov.","Dec."],_r=n=>n<10?"0"+n:n,Cr=function(n){return`${Mr[n.getDay()].substring(0,3)}, ${_r(n.getDate())} ${Tr[n.getMonth()].substring(0,3)} ${n.getFullYear().toString()} ${n.getUTCHours().toString()}:${n.getUTCMinutes().toString()}:${n.getUTCSeconds().toString()} Z`},Ar=function(n){return Array.from(n).reduce((n,[t,e])=>Object.assign(n,{[t]:e}),{})},Er=function(n){const t=new Map;for(var e in n)n.hasOwnProperty(e)&&t.set(e,n[e]);return t};class Nr{constructor(n){this.name=n.author,this.personalURL=n.authorURL,this.affiliation=n.affiliation,this.affiliationURL=n.affiliationURL,this.affiliations=n.affiliations||[]}get firstName(){const n=this.name.split(" ");return n.slice(0,n.length-1).join(" ")}get lastName(){const n=this.name.split(" ");return n[n.length-1]}}class Lr{constructor(){this.title="unnamed article",this.description="",this.authors=[],this.bibliography=new Map,this.bibliographyParsed=!1,this.citations=[],this.citationsCollected=!1,this.journal={},this.katex={},this.doi=undefined,this.publishedDate=undefined}set url(n){this._url=n}get url(){return this._url?this._url:this.distillPath&&this.journal.url?this.journal.url+"/"+this.distillPath:this.journal.url?this.journal.url:void 0}get githubUrl(){return this.githubPath?"https://github.com/"+this.githubPath:undefined}set previewURL(n){this._previewURL=n}get previewURL(){return this._previewURL?this._previewURL:this.url+"/thumbnail.jpg"}get publishedDateRFC(){return Cr(this.publishedDate)}get updatedDateRFC(){return Cr(this.updatedDate)}get publishedYear(){return this.publishedDate.getFullYear()}get publishedMonth(){return Tr[this.publishedDate.getMonth()]}get publishedDay(){return this.publishedDate.getDate()}get publishedMonthPadded(){return _r(this.publishedDate.getMonth()+1)}get publishedDayPadded(){return _r(this.publishedDate.getDate())}get publishedISODateOnly(){return this.publishedDate.toISOString().split("T")[0]}get volume(){const n=this.publishedYear-2015;if(n<1)throw new Error("Invalid publish date detected during computing volume");return n}get issue(){return this.publishedDate.getMonth()+1}get concatenatedAuthors(){return this.authors.length>2?this.authors[0].lastName+", et al.":2===this.authors.length?this.authors[0].lastName+" & "+this.authors[1].lastName:1===this.authors.length?this.authors[0].lastName:void 0}get bibtexAuthors(){return this.authors.map(n=>n.lastName+", "+n.firstName).join(" and ")}get slug(){let n="";return this.authors.length&&(n+=this.authors[0].lastName.toLowerCase(),n+=this.publishedYear,n+=this.title.split(" ")[0].toLowerCase()),n||"Untitled"}get bibliographyEntries(){return new Map(this.citations.map(n=>{return[n,this.bibliography.get(n)]}))}set bibliography(n){n instanceof Map?this._bibliography=n:"object"==typeof n&&(this._bibliography=Er(n))}get bibliography(){return this._bibliography}static fromObject(n){const t=new Lr;return Object.assign(t,n),t}assignToObject(n){Object.assign(n,this),n.bibliography=Ar(this.bibliographyEntries),n.url=this.url,n.doi=this.doi,n.githubUrl=this.githubUrl,n.previewURL=this.previewURL,this.publishedDate&&(n.volume=this.volume,n.issue=this.issue,n.publishedDateRFC=this.publishedDateRFC,n.publishedYear=this.publishedYear,n.publishedMonth=this.publishedMonth,n.publishedDay=this.publishedDay,n.publishedMonthPadded=this.publishedMonthPadded,n.publishedDayPadded=this.publishedDayPadded),this.updatedDate&&(n.updatedDateRFC=this.updatedDateRFC),n.concatenatedAuthors=this.concatenatedAuthors,n.bibtexAuthors=this.bibtexAuthors,n.slug=this.slug}} +// Copyright 2018 The Distill Template Authors +const Dr=n=>(class extends n{constructor(){super();const n={childList:!0,characterData:!0,subtree:!0},t=new MutationObserver(()=>{t.disconnect(),this.renderIfPossible(),t.observe(this,n)});t.observe(this,n)}connectedCallback(){super.connectedCallback(),this.renderIfPossible()}renderIfPossible(){this.textContent&&this.root&&this.renderContent()}renderContent(){console.error(`Your class ${this.constructor.name} must provide a custom renderContent() method!`)}}),Or=(n,t,e=!0)=>i=>{const r=document.createElement("template");return r.innerHTML=t,e&&"ShadyCSS"in window&&ShadyCSS.prepareTemplate(r,n),class extends i{static get is(){return n}constructor(){super(),this.clone=document.importNode(r.content,!0),e&&(this.attachShadow({mode:"open"}),this.shadowRoot.appendChild(this.clone))}connectedCallback(){this.hasAttribute("distill-prerendered")||(e?"ShadyCSS"in window&&ShadyCSS.styleElement(this):this.insertBefore(this.clone,this.firstChild))}get root(){return e?this.shadowRoot:this}$(n){return this.root.querySelector(n)}$$(n){return this.root.querySelectorAll(n)}}}; +// Copyright 2018 The Distill Template Authors +var Ir='/*\n * Copyright 2018 The Distill Template Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nspan.katex-display {\n text-align: left;\n padding: 8px 0 8px 0;\n margin: 0.5em 0 0.5em 1em;\n}\n\nspan.katex {\n -webkit-font-smoothing: antialiased;\n color: rgba(0, 0, 0, 0.8);\n font-size: 1.18em;\n}\n'; +// Copyright 2018 The Distill Template Authors +const Fr=function(n,t,e){let i=e,r=0;const o=n.length;for(;i[n.left,n.right]),r=n=>i.some(t=>-1!==n.indexOf(t));e.mightHaveMath=r,Pr(n,e)},qr="https://distill.pub/third-party/katex/katex.min.js",jr='',Br=Or("d-math",`\n${jr}\n\n\n`);class Yr extends(Dr(Br(HTMLElement))){static set katexOptions(n){Yr._katexOptions=n,Yr.katexOptions.delimiters&&(Yr.katexAdded?Yr.katexLoadedCallback():Yr.addKatex())}static get katexOptions(){return Yr._katexOptions||(Yr._katexOptions={delimiters:[{left:"$$",right:"$$",display:!1}]}),Yr._katexOptions}static katexLoadedCallback(){const n=document.querySelectorAll("d-math");for(const t of n)t.renderContent();Yr.katexOptions.delimiters&&zr(document.body,Yr.katexOptions)}static addKatex(){document.head.insertAdjacentHTML("beforeend",jr);const n=document.createElement("script");n.src=qr,n.async=!0,n.onload=Yr.katexLoadedCallback,n.crossorigin="anonymous",document.head.appendChild(n),Yr.katexAdded=!0}get options(){const n={displayMode:this.hasAttribute("block")};return Object.assign(n,Yr.katexOptions)}connectedCallback(){super.connectedCallback(),Yr.katexAdded||Yr.addKatex()}renderContent(){if("undefined"!=typeof katex){const n=this.root.querySelector("#katex-container");katex.render(this.textContent,n,this.options)}}}Yr.katexAdded=!1,Yr.inlineMathRendered=!1,window.DMath=Yr;class Wr extends HTMLElement{static get is(){return"d-front-matter"}constructor(){super();const n={childList:!0,characterData:!0,subtree:!0};new MutationObserver(n=>{for(const t of n)if("SCRIPT"===t.target.nodeName||"characterData"===t.type){const n=d(this);this.notify(n)}}).observe(this,n)}notify(n){const t=new CustomEvent("onFrontMatterChanged",{detail:n,bubbles:!0});document.dispatchEvent(t)}}const Gr=new Lr,Vr={frontMatter:Gr,waitingOn:{bibliography:[],citations:[]},listeners:{onCiteKeyCreated(n){const[t,e]=n.detail;if(!Gr.citationsCollected)return void Vr.waitingOn.citations.push(()=>Vr.listeners.onCiteKeyCreated(n));if(!Gr.bibliographyParsed)return void Vr.waitingOn.bibliography.push(()=>Vr.listeners.onCiteKeyCreated(n));const i=e.map(n=>Gr.citations.indexOf(n));t.numbers=i;const r=e.map(n=>Gr.bibliography.get(n));t.entries=r},onCiteKeyChanged(){Gr.citations=t(),Gr.citationsCollected=!0;for(const n of Vr.waitingOn.citations.slice())n();const n=document.querySelector("d-citation-list"),e=new Map(Gr.citations.map(n=>[n,Gr.bibliography.get(n)]));n.citations=e;const i=document.querySelectorAll("d-cite");for(const n of i){console.log(n);const t=n.keys,e=t.map(n=>Gr.citations.indexOf(n));n.numbers=e;const i=t.map(n=>Gr.bibliography.get(n));n.entries=i}},onCiteKeyRemoved(n){Vr.listeners.onCiteKeyChanged(n)},onBibliographyChanged(n){const t=document.querySelector("d-citation-list"),e=n.detail;Gr.bibliography=e,Gr.bibliographyParsed=!0;for(const n of Vr.waitingOn.bibliography.slice())n();if(Gr.citationsCollected)if(t.hasAttribute("distill-prerendered"))console.debug("Citation list was prerendered; not updating it.");else{const n=new Map(Gr.citations.map(n=>[n,Gr.bibliography.get(n)]));t.citations=n}else Vr.waitingOn.citations.push(function(){Vr.listeners.onBibliographyChanged({target:n.target,detail:n.detail})})},onFootnoteChanged(){const n=document.querySelector("d-footnote-list");if(n){const t=document.querySelectorAll("d-footnote");n.footnotes=t}},onFrontMatterChanged(t){const e=t.detail;n(Gr,e);const i=document.querySelector("d-interstitial");if(i&&("undefined"!=typeof Gr.password?i.password=Gr.password:i.parentElement.removeChild(i)),!document.body.hasAttribute("distill-prerendered")&&u()){h(document,Gr);const n=document.querySelector("distill-appendix");n&&(n.frontMatter=Gr);const t=document.querySelector("d-byline");t&&(t.frontMatter=Gr),e.katex&&(Yr.katexOptions=e.katex)}},DOMContentLoaded(){if(Vr.loaded)return void console.warn("Controller received DOMContentLoaded but was already loaded!");if(!u())return void console.warn("Controller received DOMContentLoaded at document.readyState: "+document.readyState+"!");Vr.loaded=!0,console.debug("Runlevel 4: Controller running DOMContentLoaded");const n=document.querySelector("d-front-matter");if(n){const t=d(n);Vr.listeners.onFrontMatterChanged({detail:t})}Gr.citations=t(),Gr.citationsCollected=!0;for(const n of Vr.waitingOn.citations.slice())n();if(Gr.bibliographyParsed)for(const n of Vr.waitingOn.bibliography.slice())n();const e=document.querySelector("d-footnote-list");if(e){const n=document.querySelectorAll("d-footnote");e.footnotes=n}}}}; +// Copyright 2018 The Distill Template Authors +const Kr='/*\n * Copyright 2018 The Distill Template Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nhtml {\n font-size: 14px;\n\tline-height: 1.6em;\n /* font-family: "Libre Franklin", "Helvetica Neue", sans-serif; */\n font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Fira Sans", "Droid Sans", "Helvetica Neue", Arial, sans-serif;\n /*, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";*/\n text-size-adjust: 100%;\n -ms-text-size-adjust: 100%;\n -webkit-text-size-adjust: 100%;\n}\n\n@media(min-width: 768px) {\n html {\n font-size: 16px;\n }\n}\n\nbody {\n margin: 0;\n}\n\na {\n color: #004276;\n}\n\nfigure {\n margin: 0;\n}\n\ntable {\n\tborder-collapse: collapse;\n\tborder-spacing: 0;\n}\n\ntable th {\n\ttext-align: left;\n}\n\ntable thead {\n border-bottom: 1px solid rgba(0, 0, 0, 0.05);\n}\n\ntable thead th {\n padding-bottom: 0.5em;\n}\n\ntable tbody :first-child td {\n padding-top: 0.5em;\n}\n\npre {\n overflow: auto;\n max-width: 100%;\n}\n\np {\n margin-top: 0;\n margin-bottom: 1em;\n}\n\nsup, sub {\n vertical-align: baseline;\n position: relative;\n top: -0.4em;\n line-height: 1em;\n}\n\nsub {\n top: 0.4em;\n}\n\n.kicker,\n.marker {\n font-size: 15px;\n font-weight: 600;\n color: rgba(0, 0, 0, 0.5);\n}\n\n\n/* Headline */\n\n@media(min-width: 1024px) {\n d-title h1 span {\n display: block;\n }\n}\n\n/* Figure */\n\nfigure {\n position: relative;\n margin-bottom: 2.5em;\n margin-top: 1.5em;\n}\n\nfigcaption+figure {\n\n}\n\nfigure img {\n width: 100%;\n}\n\nfigure svg text,\nfigure svg tspan {\n}\n\nfigcaption,\n.figcaption {\n color: rgba(0, 0, 0, 0.6);\n font-size: 12px;\n line-height: 1.5em;\n}\n\n@media(min-width: 1024px) {\nfigcaption,\n.figcaption {\n font-size: 13px;\n }\n}\n\nfigure.external img {\n background: white;\n border: 1px solid rgba(0, 0, 0, 0.1);\n box-shadow: 0 1px 8px rgba(0, 0, 0, 0.1);\n padding: 18px;\n box-sizing: border-box;\n}\n\nfigcaption a {\n color: rgba(0, 0, 0, 0.6);\n}\n\nfigcaption b,\nfigcaption strong, {\n font-weight: 600;\n color: rgba(0, 0, 0, 1.0);\n}\n'+'/*\n * Copyright 2018 The Distill Template Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n@supports not (display: grid) {\n .base-grid,\n distill-header,\n d-title,\n d-abstract,\n d-article,\n d-appendix,\n distill-appendix,\n d-byline,\n d-footnote-list,\n d-citation-list,\n distill-footer {\n display: block;\n padding: 8px;\n }\n}\n\n.base-grid,\ndistill-header,\nd-title,\nd-abstract,\nd-article,\nd-appendix,\ndistill-appendix,\nd-byline,\nd-footnote-list,\nd-citation-list,\ndistill-footer {\n display: grid;\n justify-items: stretch;\n grid-template-columns: [screen-start] 8px [page-start kicker-start text-start gutter-start middle-start] 1fr 1fr 1fr 1fr 1fr 1fr 1fr 1fr [text-end page-end gutter-end kicker-end middle-end] 8px [screen-end];\n grid-column-gap: 8px;\n}\n\n.grid {\n display: grid;\n grid-column-gap: 8px;\n}\n\n@media(min-width: 768px) {\n .base-grid,\n distill-header,\n d-title,\n d-abstract,\n d-article,\n d-appendix,\n distill-appendix,\n d-byline,\n d-footnote-list,\n d-citation-list,\n distill-footer {\n grid-template-columns: [screen-start] 1fr [page-start kicker-start middle-start text-start] 45px 45px 45px 45px 45px 45px 45px 45px [ kicker-end text-end gutter-start] 45px [middle-end] 45px [page-end gutter-end] 1fr [screen-end];\n grid-column-gap: 16px;\n }\n\n .grid {\n grid-column-gap: 16px;\n }\n}\n\n@media(min-width: 1000px) {\n .base-grid,\n distill-header,\n d-title,\n d-abstract,\n d-article,\n d-appendix,\n distill-appendix,\n d-byline,\n d-footnote-list,\n d-citation-list,\n distill-footer {\n grid-template-columns: [screen-start] 1fr [page-start kicker-start] 50px [middle-start] 50px [text-start kicker-end] 50px 50px 50px 50px 50px 50px 50px 50px [text-end gutter-start] 50px [middle-end] 50px [page-end gutter-end] 1fr [screen-end];\n grid-column-gap: 16px;\n }\n\n .grid {\n grid-column-gap: 16px;\n }\n}\n\n@media(min-width: 1180px) {\n .base-grid,\n distill-header,\n d-title,\n d-abstract,\n d-article,\n d-appendix,\n distill-appendix,\n d-byline,\n d-footnote-list,\n d-citation-list,\n distill-footer {\n grid-template-columns: [screen-start] 1fr [page-start kicker-start] 60px [middle-start] 60px [text-start kicker-end] 60px 60px 60px 60px 60px 60px 60px 60px [text-end gutter-start] 60px [middle-end] 60px [page-end gutter-end] 1fr [screen-end];\n grid-column-gap: 32px;\n }\n\n .grid {\n grid-column-gap: 32px;\n }\n}\n\n\n\n\n.base-grid {\n grid-column: screen;\n}\n\n/* .l-body,\nd-article > * {\n grid-column: text;\n}\n\n.l-page,\nd-title > *,\nd-figure {\n grid-column: page;\n} */\n\n.l-gutter {\n grid-column: gutter;\n}\n\n.l-text,\n.l-body {\n grid-column: text;\n}\n\n.l-page {\n grid-column: page;\n}\n\n.l-body-outset {\n grid-column: middle;\n}\n\n.l-page-outset {\n grid-column: page;\n}\n\n.l-screen {\n grid-column: screen;\n}\n\n.l-screen-inset {\n grid-column: screen;\n padding-left: 16px;\n padding-left: 16px;\n}\n\n\n/* Aside */\n\nd-article aside {\n grid-column: gutter;\n font-size: 12px;\n line-height: 1.6em;\n color: rgba(0, 0, 0, 0.6)\n}\n\n@media(min-width: 768px) {\n aside {\n grid-column: gutter;\n }\n\n .side {\n grid-column: gutter;\n }\n}\n'+'/*\n * Copyright 2018 The Distill Template Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nd-title {\n padding: 2rem 0 1.5rem;\n contain: layout style;\n overflow-x: hidden;\n}\n\n@media(min-width: 768px) {\n d-title {\n padding: 4rem 0 1.5rem;\n }\n}\n\nd-title h1 {\n grid-column: text;\n font-size: 40px;\n font-weight: 700;\n line-height: 1.1em;\n margin: 0 0 0.5rem;\n}\n\n@media(min-width: 768px) {\n d-title h1 {\n font-size: 50px;\n }\n}\n\nd-title p {\n font-weight: 300;\n font-size: 1.2rem;\n line-height: 1.55em;\n grid-column: text;\n}\n\nd-title .status {\n margin-top: 0px;\n font-size: 12px;\n color: #009688;\n opacity: 0.8;\n grid-column: kicker;\n}\n\nd-title .status span {\n line-height: 1;\n display: inline-block;\n padding: 6px 0;\n border-bottom: 1px solid #80cbc4;\n font-size: 11px;\n text-transform: uppercase;\n}\n'+'/*\n * Copyright 2018 The Distill Template Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nd-byline {\n contain: style;\n overflow: hidden;\n border-top: 1px solid rgba(0, 0, 0, 0.1);\n font-size: 0.8rem;\n line-height: 1.8em;\n padding: 1.5rem 0;\n min-height: 1.8em;\n}\n\n\nd-byline .byline {\n grid-template-columns: 1fr 1fr;\n grid-column: text;\n}\n\n@media(min-width: 768px) {\n d-byline .byline {\n grid-template-columns: 1fr 1fr 1fr 1fr;\n }\n}\n\nd-byline .authors-affiliations {\n grid-column-end: span 2;\n grid-template-columns: 1fr 1fr;\n margin-bottom: 1em;\n}\n\n@media(min-width: 768px) {\n d-byline .authors-affiliations {\n margin-bottom: 0;\n }\n}\n\nd-byline h3 {\n font-size: 0.6rem;\n font-weight: 400;\n color: rgba(0, 0, 0, 0.5);\n margin: 0;\n text-transform: uppercase;\n}\n\nd-byline p {\n margin: 0;\n}\n\nd-byline a,\nd-article d-byline a {\n color: rgba(0, 0, 0, 0.8);\n text-decoration: none;\n border-bottom: none;\n}\n\nd-article d-byline a:hover {\n text-decoration: underline;\n border-bottom: none;\n}\n\nd-byline p.author {\n font-weight: 500;\n}\n\nd-byline .affiliations {\n\n}\n'+'/*\n * Copyright 2018 The Distill Template Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nd-article {\n contain: layout style;\n overflow-x: hidden;\n border-top: 1px solid rgba(0, 0, 0, 0.1);\n padding-top: 2rem;\n color: rgba(0, 0, 0, 0.8);\n}\n\nd-article > * {\n grid-column: text;\n}\n\n@media(min-width: 768px) {\n d-article {\n font-size: 16px;\n }\n}\n\n@media(min-width: 1024px) {\n d-article {\n font-size: 1.06rem;\n line-height: 1.7em;\n }\n}\n\n\n/* H2 */\n\n\nd-article .marker {\n text-decoration: none;\n border: none;\n counter-reset: section;\n grid-column: kicker;\n line-height: 1.7em;\n}\n\nd-article .marker:hover {\n border: none;\n}\n\nd-article .marker span {\n padding: 0 3px 4px;\n border-bottom: 1px solid rgba(0, 0, 0, 0.2);\n position: relative;\n top: 4px;\n}\n\nd-article .marker:hover span {\n color: rgba(0, 0, 0, 0.7);\n border-bottom: 1px solid rgba(0, 0, 0, 0.7);\n}\n\nd-article h2 {\n font-weight: 600;\n font-size: 24px;\n line-height: 1.25em;\n margin: 2rem 0 1.5rem 0;\n border-bottom: 1px solid rgba(0, 0, 0, 0.1);\n padding-bottom: 1rem;\n}\n\n@media(min-width: 1024px) {\n d-article h2 {\n font-size: 36px;\n }\n}\n\n/* H3 */\n\nd-article h3 {\n font-weight: 700;\n font-size: 18px;\n line-height: 1.4em;\n margin-bottom: 1em;\n margin-top: 2em;\n}\n\n@media(min-width: 1024px) {\n d-article h3 {\n font-size: 20px;\n }\n}\n\n/* H4 */\n\nd-article h4 {\n font-weight: 600;\n text-transform: uppercase;\n font-size: 14px;\n line-height: 1.4em;\n}\n\nd-article a {\n color: inherit;\n}\n\nd-article p,\nd-article ul,\nd-article ol,\nd-article blockquote {\n margin-top: 0;\n margin-bottom: 1em;\n margin-left: 0;\n margin-right: 0;\n}\n\nd-article blockquote {\n border-left: 2px solid rgba(0, 0, 0, 0.2);\n padding-left: 2em;\n font-style: italic;\n color: rgba(0, 0, 0, 0.6);\n}\n\nd-article a {\n border-bottom: 1px solid rgba(0, 0, 0, 0.4);\n text-decoration: none;\n}\n\nd-article a:hover {\n border-bottom: 1px solid rgba(0, 0, 0, 0.8);\n}\n\nd-article .link {\n text-decoration: underline;\n cursor: pointer;\n}\n\nd-article ul,\nd-article ol {\n padding-left: 24px;\n}\n\nd-article li {\n margin-bottom: 1em;\n margin-left: 0;\n padding-left: 0;\n}\n\nd-article li:last-child {\n margin-bottom: 0;\n}\n\nd-article pre {\n font-size: 14px;\n margin-bottom: 20px;\n}\n\nd-article hr {\n grid-column: screen;\n width: 100%;\n border: none;\n border-bottom: 1px solid rgba(0, 0, 0, 0.1);\n margin-top: 60px;\n margin-bottom: 60px;\n}\n\nd-article section {\n margin-top: 60px;\n margin-bottom: 60px;\n}\n\nd-article span.equation-mimic {\n font-family: georgia;\n font-size: 115%;\n font-style: italic;\n}\n\nd-article > d-code,\nd-article section > d-code {\n display: block;\n}\n\nd-article > d-math[block],\nd-article section > d-math[block] {\n display: block;\n}\n\n@media (max-width: 768px) {\n d-article > d-code,\n d-article section > d-code,\n d-article > d-math[block],\n d-article section > d-math[block] {\n overflow-x: scroll;\n -ms-overflow-style: none; // IE 10+\n overflow: -moz-scrollbars-none; // Firefox\n }\n\n d-article > d-code::-webkit-scrollbar,\n d-article section > d-code::-webkit-scrollbar,\n d-article > d-math[block]::-webkit-scrollbar,\n d-article section > d-math[block]::-webkit-scrollbar {\n display: none; // Safari and Chrome\n }\n}\n\nd-article .citation {\n color: #668;\n cursor: pointer;\n}\n\nd-include {\n width: auto;\n display: block;\n}\n\nd-figure {\n contain: layout style;\n}\n\n/* KaTeX */\n\n.katex, .katex-prerendered {\n contain: style;\n display: inline-block;\n}\n\n/* Tables */\n\nd-article table {\n border-collapse: collapse;\n margin-bottom: 1.5rem;\n border-bottom: 1px solid rgba(0, 0, 0, 0.2);\n}\n\nd-article table th {\n border-bottom: 1px solid rgba(0, 0, 0, 0.2);\n}\n\nd-article table td {\n border-bottom: 1px solid rgba(0, 0, 0, 0.05);\n}\n\nd-article table tr:last-of-type td {\n border-bottom: none;\n}\n\nd-article table th,\nd-article table td {\n font-size: 15px;\n padding: 2px 8px;\n}\n\nd-article table tbody :first-child td {\n padding-top: 2px;\n}\n'+Ir+'/*\n * Copyright 2018 The Distill Template Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n@media print {\n\n @page {\n size: 8in 11in;\n @bottom-right {\n content: counter(page) " of " counter(pages);\n }\n }\n\n html {\n /* no general margins -- CSS Grid takes care of those */\n }\n\n p, code {\n page-break-inside: avoid;\n }\n\n h2, h3 {\n page-break-after: avoid;\n }\n\n d-header {\n visibility: hidden;\n }\n\n d-footer {\n display: none!important;\n }\n\n}\n',Xr=[{name:"WebComponents",support:function(){return"customElements"in window&&"attachShadow"in Element.prototype&&"getRootNode"in Element.prototype&&"content"in document.createElement("template")&&"Promise"in window&&"from"in Array},url:"https://distill.pub/third-party/polyfills/webcomponents-lite.js"},{name:"IntersectionObserver",support:function(){return"IntersectionObserver"in window&&"IntersectionObserverEntry"in window},url:"https://distill.pub/third-party/polyfills/intersection-observer.js"}];class Zr{static browserSupportsAllFeatures(){return Xr.every(n=>n.support())}static load(n){const t=function(t){t.loaded=!0,console.debug("Runlevel 0: Polyfill has finished loading: "+t.name),Zr.neededPolyfills.every(n=>n.loaded)&&(console.debug("Runlevel 0: All required polyfills have finished loading."),console.debug("Runlevel 0->1."),window.distillRunlevel=1,n())};for(const n of Zr.neededPolyfills)f(n,t)}static get neededPolyfills(){return Zr._neededPolyfills||(Zr._neededPolyfills=Xr.filter(n=>!n.support())),Zr._neededPolyfills}}const Qr=Or("d-abstract",`\n\n\n\n`);class Jr extends(Qr(HTMLElement)){} +// Copyright 2018 The Distill Template Authors +const no=Or("d-appendix","\n\n\n",!1);class to extends(no(HTMLElement)){} +// Copyright 2018 The Distill Template Authors +const eo=/^\s*$/;class io extends HTMLElement{static get is(){return"d-article"}constructor(){super(),new MutationObserver(n=>{for(const t of n)for(const n of t.addedNodes)switch(n.nodeName){case"#text":{const t=n.nodeValue;if(!eo.test(t)){console.warn("Use of unwrapped text in distill articles is discouraged as it breaks layout! Please wrap any text in a or

    tag. We found the following text: "+t);const e=document.createElement("span");e.innerHTML=n.nodeValue,n.parentNode.insertBefore(e,n),n.parentNode.removeChild(n)}}}}).observe(this,{childList:!0})}}var ro="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},oo=m(function(n,t){!function(n){function t(){this.months=["jan","feb","mar","apr","may","jun","jul","aug","sep","oct","nov","dec"],this.notKey=[",","{","}"," ","="],this.pos=0,this.input="",this.entries=new Array,this.currentEntry="",this.setInput=function(n){this.input=n},this.getEntries=function(){return this.entries},this.isWhitespace=function(n){return" "==n||"\r"==n||"\t"==n||"\n"==n},this.match=function(n,t){if(t!=undefined&&null!=t||(t=!0),this.skipWhitespace(t),this.input.substring(this.pos,this.pos+n.length)!=n)throw"Token mismatch, expected "+n+", found "+this.input.substring(this.pos);this.pos+=n.length,this.skipWhitespace(t)},this.tryMatch=function(n,t){return t!=undefined&&null!=t||(t=!0),this.skipWhitespace(t),this.input.substring(this.pos,this.pos+n.length)==n},this.matchAt=function(){for(;this.input.length>this.pos&&"@"!=this.input[this.pos];)this.pos++;return"@"==this.input[this.pos]},this.skipWhitespace=function(n){for(;this.isWhitespace(this.input[this.pos]);)this.pos++;if("%"==this.input[this.pos]&&1==n){for(;"\n"!=this.input[this.pos];)this.pos++;this.skipWhitespace(n)}},this.value_braces=function(){var n=0;this.match("{",!1);for(var t=this.pos,e=!1;;){if(!e)if("}"==this.input[this.pos]){if(!(n>0)){var i=this.pos;return this.match("}",!1),this.input.substring(t,i)}n--}else if("{"==this.input[this.pos])n++;else if(this.pos>=this.input.length-1)throw"Unterminated value";e="\\"==this.input[this.pos]&&0==e,this.pos++}},this.value_comment=function(){for(var n="",t=0;!this.tryMatch("}",!1)||0!=t;){if(n+=this.input[this.pos],"{"==this.input[this.pos]&&t++,"}"==this.input[this.pos]&&t--,this.pos>=this.input.length-1)throw"Unterminated value:"+this.input.substring(start);this.pos++}return n},this.value_quotes=function(){this.match('"',!1);for(var n=this.pos,t=!1;;){if(!t){if('"'==this.input[this.pos]){var e=this.pos;return this.match('"',!1),this.input.substring(n,e)}if(this.pos>=this.input.length-1)throw"Unterminated value:"+this.input.substring(n)}t="\\"==this.input[this.pos]&&0==t,this.pos++}},this.single_value=function(){var n=this.pos;if(this.tryMatch("{"))return this.value_braces();if(this.tryMatch('"'))return this.value_quotes();var t=this.key();if(t.match("^[0-9]+$"))return t;if(this.months.indexOf(t.toLowerCase())>=0)return t.toLowerCase();throw"Value expected:"+this.input.substring(n)+" for key: "+t},this.value=function(){var n=[];for(n.push(this.single_value());this.tryMatch("#");)this.match("#"),n.push(this.single_value());return n.join("")},this.key=function(){for(var n=this.pos;;){if(this.pos>=this.input.length)throw"Runaway key";if(this.notKey.indexOf(this.input[this.pos])>=0)return this.input.substring(n,this.pos);this.pos++}},this.key_equals_value=function(){var n=this.key();if(this.tryMatch("="))return this.match("="),[n,this.value()];throw"... = value expected, equals sign missing:"+this.input.substring(this.pos)},this.key_value_list=function(){var n=this.key_equals_value();for(this.currentEntry.entryTags={},this.currentEntry.entryTags[n[0]]=n[1];this.tryMatch(",")&&(this.match(","),!this.tryMatch("}"));)n=this.key_equals_value(),this.currentEntry.entryTags[n[0]]=n[1]},this.entry_body=function(n){this.currentEntry={},this.currentEntry.citationKey=this.key(),this.currentEntry.entryType=n.substring(1),this.match(","),this.key_value_list(),this.entries.push(this.currentEntry)},this.directive=function(){return this.match("@"),"@"+this.key()},this.preamble=function(){this.currentEntry={},this.currentEntry.entryType="PREAMBLE",this.currentEntry.entry=this.value_comment(),this.entries.push(this.currentEntry)},this.comment=function(){this.currentEntry={},this.currentEntry.entryType="COMMENT",this.currentEntry.entry=this.value_comment(),this.entries.push(this.currentEntry)},this.entry=function(n){this.entry_body(n)},this.bibtex=function(){for(;this.matchAt();){var n=this.directive();this.match("{"),"@STRING"==n?this.string():"@PREAMBLE"==n?this.preamble():"@COMMENT"==n?this.comment():this.entry(n),this.match("}")}}}n.toJSON=function(n){var e=new t;return e.setInput(n),e.bibtex(),e.entries},n.toBibtex=function(n){var t="";for(var e in n){if(t+="@"+n[e].entryType,t+="{",n[e].citationKey&&(t+=n[e].citationKey+", "),n[e].entry&&(t+=n[e].entry),n[e].entryTags){var i="";for(var r in n[e].entryTags)0!=i.length&&(i+=", "),i+=r+"= {"+n[e].entryTags[r]+"}";t+=i}t+="}\n\n"}return t}}(t)});class ao extends HTMLElement{static get is(){return"d-bibliography"}constructor(){super();const n={childList:!0,characterData:!0,subtree:!0};new MutationObserver(n=>{for(const t of n)"SCRIPT"!==t.target.nodeName&&"characterData"!==t.type||this.parseIfPossible()}).observe(this,n)}connectedCallback(){requestAnimationFrame(()=>{this.parseIfPossible()})}parseIfPossible(){const n=this.querySelector("script");if(n)if("text/bibtex"==n.type){const t=n.textContent;if(this.bibtex!==t){this.bibtex=t;const n=y(this.bibtex);this.notify(n)}}else if("text/json"==n.type){const t=new Map(JSON.parse(n.textContent));this.notify(t)}else console.warn("Unsupported bibliography script tag type: "+n.type)}notify(n){const t=new CustomEvent("onBibliographyChanged",{detail:n,bubbles:!0});this.dispatchEvent(t)}static get observedAttributes(){return["src"]}receivedBibtex(n){const t=y(n.target.response);this.notify(t)}attributeChangedCallback(n,t,e){var i=new XMLHttpRequest;i.onload=(n=>this.receivedBibtex(n)),i.onerror=(()=>console.warn(`Could not load Bibtex! (tried ${e})`)),i.responseType="text",i.open("GET",e,!0),i.send()}}class so extends HTMLElement{static get is(){return"d-byline"}set frontMatter(n){this.innerHTML=w(n)}} +// Copyright 2018 The Distill Template Authors +const lo=Or("d-cite",'\n\n\n\n\n

    \n \n
    \n');class uo extends(lo(HTMLElement)){constructor(){super(),this._numbers=[],this._entries=[]}connectedCallback(){this.outerSpan=this.root.querySelector("#citation-"),this.innerSpan=this.root.querySelector(".citation-number"),this.hoverBox=this.root.querySelector("d-hover-box"),window.customElements.whenDefined("d-hover-box").then(()=>{this.hoverBox.listen(this)}),this.numbers&&this.displayNumbers(this.numbers),this.entries&&this.displayEntries(this.entries)}static get observedAttributes(){return["key","bibtex-key"]}attributeChangedCallback(n,t,e){const i=t?"onCiteKeyChanged":"onCiteKeyCreated",r=e.split(",").map(n=>n.trim()),o=new CustomEvent(i,{detail:[this,r],bubbles:!0});document.dispatchEvent(o)}set key(n){this.setAttribute("key",n)}get key(){return this.getAttribute("key")||this.getAttribute("bibtex-key")}get keys(){const n=this.key.split(",");return console.log(n),n}set numbers(n){this._numbers=n,this.displayNumbers(n)}get numbers(){return this._numbers}displayNumbers(n){if(!this.innerSpan)return;const t="["+n.map(n=>-1==n?"?":n+1+"").join(", ")+"]";this.innerSpan.textContent=t}set entries(n){this._entries=n,this.displayEntries(n)}get entries(){return this._entries}displayEntries(n){this.hoverBox&&(this.hoverBox.innerHTML=`
      \n ${n.map(l).map(n=>`
    • ${n}
    • `).join("\n")}\n
    `)}} +// Copyright 2018 The Distill Template Authors +const co="\nd-citation-list {\n contain: style;\n}\n\nd-citation-list .references {\n grid-column: text;\n}\n\nd-citation-list .references .title {\n font-weight: 500;\n}\n";class ho extends HTMLElement{static get is(){return"d-citation-list"}connectedCallback(){this.hasAttribute("distill-prerendered")||(this.style.display="none")}set citations(n){x(this,n)}}var po=m(function(n){var t=function(n){function t(n,t,e,i,r){this.type=n,this.content=t,this.alias=e,this.length=0|(i||"").length,this.greedy=!!r}function e(n,i,a,s,l,u,d){for(var h in a)if(a.hasOwnProperty(h)&&a[h]){var p=a[h];p=Array.isArray(p)?p:[p];for(var f=0;fn.length)return;if(!(M instanceof t)){var T=1;if(y&&k!=i.tail.prev){if(g.lastIndex=S,!(N=g.exec(n)))break;var _=N.index+(b&&N[1]?N[1].length:0),C=N.index+N[0].length,A=S;for(A+=k.value.length;_>=A;)A+=(k=k.next).value.length;if(S=A-=k.value.length,k.value instanceof t)continue;for(var E=k;E!==i.tail&&(A1&&e(n,i,a,k.prev,S,!0,h+","+f),u)break}else if(u)break}}}}}function i(){var n={value:null,prev:null,next:null},t={value:null,prev:n,next:null};n.next=t,this.head=n,this.tail=t,this.length=0}function r(n,t,e){var i=t.next,r={value:e,prev:t,next:i};return t.next=r,i.prev=r,n.length++,r}function o(n,t,e){for(var i=t.next,r=0;r"+i.content+""},!n.document)return n.addEventListener?(c.disableWorkerMessageHandler||n.addEventListener("message",function(t){var e=JSON.parse(t.data),i=e.language,r=e.code,o=e.immediateClose;n.postMessage(c.highlight(r,c.languages[i],i)),o&&n.close()},!1),c):c;var d=c.util.currentScript();if(d&&(c.filename=d.src,d.hasAttribute("data-manual")&&(c.manual=!0)),!c.manual){var h=document.readyState;"loading"===h||"interactive"===h&&d&&d.defer?document.addEventListener("DOMContentLoaded",s):window.requestAnimationFrame?window.requestAnimationFrame(s):window.setTimeout(s,16)}return c}("undefined"!=typeof window?window:"undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope?self:{});n.exports&&(n.exports=t),void 0!==ro&&(ro.Prism=t),t.languages.markup={comment://,prolog:/<\?[\s\S]+?\?>/,doctype:{pattern:/"'[\]]|"[^"]*"|'[^']*')+(?:\[(?:(?!)*\]\s*)?>/i,greedy:!0},cdata://i,tag:{pattern:/<\/?(?!\d)[^\s>\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/i,greedy:!0,inside:{tag:{pattern:/^<\/?[^\s>\/]+/i,inside:{punctuation:/^<\/?/,namespace:/^[^\s>\/:]+:/}},"attr-value":{pattern:/=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+)/i,inside:{punctuation:[/^=/,{pattern:/^(\s*)["']|["']$/,lookbehind:!0}]}},punctuation:/\/?>/,"attr-name":{pattern:/[^\s>\/]+/,inside:{namespace:/^[^\s>\/:]+:/}}}},entity:/&#?[\da-z]{1,8};/i},t.languages.markup.tag.inside["attr-value"].inside.entity=t.languages.markup.entity,t.hooks.add("wrap",function(n){"entity"===n.type&&(n.attributes.title=n.content.replace(/&/,"&"))}),Object.defineProperty(t.languages.markup.tag,"addInlined",{value:function(n,e){var i={};i["language-"+e]={pattern:/(^$)/i,lookbehind:!0,inside:t.languages[e]},i.cdata=/^$/i;var r={"included-cdata":{pattern://i,inside:i}};r["language-"+e]={pattern:/[\s\S]+/,inside:t.languages[e]};var o={};o[n]={pattern:RegExp(/(<__[\s\S]*?>)(?:\s*|[\s\S])*?(?=<\/__>)/.source.replace(/__/g,function(){return n}),"i"),lookbehind:!0,greedy:!0,inside:r},t.languages.insertBefore("markup","cdata",o)}}),t.languages.xml=t.languages.extend("markup",{}),t.languages.html=t.languages.markup,t.languages.mathml=t.languages.markup,t.languages.svg=t.languages.markup,function(n){var t=/("|')(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/;n.languages.css={comment:/\/\*[\s\S]*?\*\//,atrule:{pattern:/@[\w-]+[\s\S]*?(?:;|(?=\s*\{))/,inside:{rule:/^@[\w-]+/,"selector-function-argument":{pattern:/(\bselector\s*\((?!\s*\))\s*)(?:[^()]|\((?:[^()]|\([^()]*\))*\))+?(?=\s*\))/,lookbehind:!0,alias:"selector"}}},url:{pattern:RegExp("url\\((?:"+t.source+"|[^\n\r()]*)\\)","i"),greedy:!0,inside:{"function":/^url/i,punctuation:/^\(|\)$/}},selector:RegExp("[^{}\\s](?:[^{};\"']|"+t.source+")*?(?=\\s*\\{)"),string:{pattern:t,greedy:!0},property:/[-_a-z\xA0-\uFFFF][-\w\xA0-\uFFFF]*(?=\s*:)/i,important:/!important\b/i,"function":/[-a-z0-9]+(?=\()/i,punctuation:/[(){};:,]/},n.languages.css.atrule.inside.rest=n.languages.css;var e=n.languages.markup;e&&(e.tag.addInlined("style","css"),n.languages.insertBefore("inside","attr-value",{"style-attr":{pattern:/\s*style=("|')(?:\\[\s\S]|(?!\1)[^\\])*\1/i,inside:{"attr-name":{pattern:/^\s*style/i,inside:e.tag.inside},punctuation:/^\s*=\s*['"]|['"]\s*$/,"attr-value":{pattern:/.+/i,inside:n.languages.css}},alias:"language-css"}},e.tag))}(t),t.languages.clike={comment:[{pattern:/(^|[^\\])\/\*[\s\S]*?(?:\*\/|$)/,lookbehind:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0,greedy:!0}],string:{pattern:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},"class-name":{pattern:/(\b(?:class|interface|extends|implements|trait|instanceof|new)\s+|\bcatch\s+\()[\w.\\]+/i,lookbehind:!0,inside:{punctuation:/[.\\]/}},keyword:/\b(?:if|else|while|do|for|return|in|instanceof|function|new|try|throw|catch|finally|null|break|continue)\b/,boolean:/\b(?:true|false)\b/,"function":/\w+(?=\()/,number:/\b0x[\da-f]+\b|(?:\b\d+\.?\d*|\B\.\d+)(?:e[+-]?\d+)?/i,operator:/[<>]=?|[!=]=?=?|--?|\+\+?|&&?|\|\|?|[?*/~^%]/,punctuation:/[{}[\];(),.:]/},t.languages.javascript=t.languages.extend("clike",{"class-name":[t.languages.clike["class-name"],{pattern:/(^|[^$\w\xA0-\uFFFF])[_$A-Z\xA0-\uFFFF][$\w\xA0-\uFFFF]*(?=\.(?:prototype|constructor))/,lookbehind:!0}],keyword:[{pattern:/((?:^|})\s*)(?:catch|finally)\b/,lookbehind:!0},{pattern:/(^|[^.]|\.\.\.\s*)\b(?:as|async(?=\s*(?:function\b|\(|[$\w\xA0-\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\b/,lookbehind:!0}],number:/\b(?:(?:0[xX](?:[\dA-Fa-f](?:_[\dA-Fa-f])?)+|0[bB](?:[01](?:_[01])?)+|0[oO](?:[0-7](?:_[0-7])?)+)n?|(?:\d(?:_\d)?)+n|NaN|Infinity)\b|(?:\b(?:\d(?:_\d)?)+\.?(?:\d(?:_\d)?)*|\B\.(?:\d(?:_\d)?)+)(?:[Ee][+-]?(?:\d(?:_\d)?)+)?/,"function":/#?[_$a-zA-Z\xA0-\uFFFF][$\w\xA0-\uFFFF]*(?=\s*(?:\.\s*(?:apply|bind|call)\s*)?\()/,operator:/--|\+\+|\*\*=?|=>|&&|\|\||[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\.{3}|\?[.?]?|[~:]/}),t.languages.javascript["class-name"][0].pattern=/(\b(?:class|interface|extends|implements|instanceof|new)\s+)[\w.\\]+/,t.languages.insertBefore("javascript","keyword",{regex:{pattern:/((?:^|[^$\w\xA0-\uFFFF."'\])\s])\s*)\/(?:\[(?:[^\]\\\r\n]|\\.)*]|\\.|[^/\\\[\r\n])+\/[gimyus]{0,6}(?=(?:\s|\/\*[\s\S]*?\*\/)*(?:$|[\r\n,.;:})\]]|\/\/))/,lookbehind:!0,greedy:!0},"function-variable":{pattern:/#?[_$a-zA-Z\xA0-\uFFFF][$\w\xA0-\uFFFF]*(?=\s*[=:]\s*(?:async\s*)?(?:\bfunction\b|(?:\((?:[^()]|\([^()]*\))*\)|[_$a-zA-Z\xA0-\uFFFF][$\w\xA0-\uFFFF]*)\s*=>))/,alias:"function"},parameter:[{pattern:/(function(?:\s+[_$A-Za-z\xA0-\uFFFF][$\w\xA0-\uFFFF]*)?\s*\(\s*)(?!\s)(?:[^()]|\([^()]*\))+?(?=\s*\))/,lookbehind:!0,inside:t.languages.javascript},{pattern:/[_$a-z\xA0-\uFFFF][$\w\xA0-\uFFFF]*(?=\s*=>)/i,inside:t.languages.javascript},{pattern:/(\(\s*)(?!\s)(?:[^()]|\([^()]*\))+?(?=\s*\)\s*=>)/,lookbehind:!0,inside:t.languages.javascript},{pattern:/((?:\b|\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\w\xA0-\uFFFF]))(?:[_$A-Za-z\xA0-\uFFFF][$\w\xA0-\uFFFF]*\s*)\(\s*)(?!\s)(?:[^()]|\([^()]*\))+?(?=\s*\)\s*\{)/,lookbehind:!0,inside:t.languages.javascript}],constant:/\b[A-Z](?:[A-Z_]|\dx?)*\b/}),t.languages.insertBefore("javascript","string",{"template-string":{pattern:/`(?:\\[\s\S]|\${(?:[^{}]|{(?:[^{}]|{[^}]*})*})+}|(?!\${)[^\\`])*`/,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},interpolation:{pattern:/((?:^|[^\\])(?:\\{2})*)\${(?:[^{}]|{(?:[^{}]|{[^}]*})*})+}/,lookbehind:!0,inside:{"interpolation-punctuation":{pattern:/^\${|}$/,alias:"punctuation"},rest:t.languages.javascript}},string:/[\s\S]+/}}}),t.languages.markup&&t.languages.markup.tag.addInlined("script","javascript"),t.languages.js=t.languages.javascript,"undefined"!=typeof self&&self.Prism&&self.document&&document.querySelector&&(self.Prism.fileHighlight=function(n){n=n||document;var e={js:"javascript",py:"python",rb:"ruby",ps1:"powershell",psm1:"powershell",sh:"bash",bat:"batch",h:"c",tex:"latex"};Array.prototype.slice.call(n.querySelectorAll("pre[data-src]")).forEach(function(n){if(!n.hasAttribute("data-src-loaded")){for(var i,r=n.getAttribute("data-src"),o=n,a=/\blang(?:uage)?-([\w-]+)\b/i;o&&!a.test(o.className);)o=o.parentNode;if(o&&(i=(n.className.match(a)||[,""])[1]),!i){var s=(r.match(/\.(\w+)$/)||[,""])[1];i=e[s]||s}var l=document.createElement("code");l.className="language-"+i,n.textContent="",l.textContent="Loading\u2026",n.appendChild(l);var u=new XMLHttpRequest;u.open("GET",r,!0),u.onreadystatechange=function(){4==u.readyState&&(u.status<400&&u.responseText?(l.textContent=u.responseText,t.highlightElement(l),n.setAttribute("data-src-loaded","")):u.status>=400?l.textContent="\u2716 Error "+u.status+" while fetching file: "+u.statusText:l.textContent="\u2716 Error: File does not exist or is empty")},u.send(null)}})},document.addEventListener("DOMContentLoaded",function(){self.Prism.fileHighlight()}))});Prism.languages.python={comment:{pattern:/(^|[^\\])#.*/,lookbehind:!0},"string-interpolation":{pattern:/(?:f|rf|fr)(?:("""|''')[\s\S]+?\1|("|')(?:\\.|(?!\2)[^\\\r\n])*\2)/i,greedy:!0,inside:{interpolation:{pattern:/((?:^|[^{])(?:{{)*){(?!{)(?:[^{}]|{(?!{)(?:[^{}]|{(?!{)(?:[^{}])+})+})+}/,lookbehind:!0,inside:{"format-spec":{pattern:/(:)[^:(){}]+(?=}$)/,lookbehind:!0},"conversion-option":{pattern:/![sra](?=[:}]$)/,alias:"punctuation"},rest:null}},string:/[\s\S]+/}},"triple-quoted-string":{pattern:/(?:[rub]|rb|br)?("""|''')[\s\S]+?\1/i,greedy:!0,alias:"string"},string:{pattern:/(?:[rub]|rb|br)?("|')(?:\\.|(?!\1)[^\\\r\n])*\1/i,greedy:!0},"function":{pattern:/((?:^|\s)def[ \t]+)[a-zA-Z_]\w*(?=\s*\()/g,lookbehind:!0},"class-name":{pattern:/(\bclass\s+)\w+/i,lookbehind:!0},decorator:{pattern:/(^\s*)@\w+(?:\.\w+)*/im,lookbehind:!0,alias:["annotation","punctuation"],inside:{punctuation:/\./}},keyword:/\b(?:and|as|assert|async|await|break|class|continue|def|del|elif|else|except|exec|finally|for|from|global|if|import|in|is|lambda|nonlocal|not|or|pass|print|raise|return|try|while|with|yield)\b/,builtin:/\b(?:__import__|abs|all|any|apply|ascii|basestring|bin|bool|buffer|bytearray|bytes|callable|chr|classmethod|cmp|coerce|compile|complex|delattr|dict|dir|divmod|enumerate|eval|execfile|file|filter|float|format|frozenset|getattr|globals|hasattr|hash|help|hex|id|input|int|intern|isinstance|issubclass|iter|len|list|locals|long|map|max|memoryview|min|next|object|oct|open|ord|pow|property|range|raw_input|reduce|reload|repr|reversed|round|set|setattr|slice|sorted|staticmethod|str|sum|super|tuple|type|unichr|unicode|vars|xrange|zip)\b/,boolean:/\b(?:True|False|None)\b/,number:/(?:\b(?=\d)|\B(?=\.))(?:0[bo])?(?:(?:\d|0x[\da-f])[\da-f]*\.?\d*|\.\d+)(?:e[+-]?\d+)?j?\b/i,operator:/[-+%=]=?|!=|\*\*?=?|\/\/?=?|<[<=>]?|>[=>]?|[&|^~]/,punctuation:/[{}[\];(),.:]/},Prism.languages.python["string-interpolation"].inside.interpolation.inside.rest=Prism.languages.python,Prism.languages.py=Prism.languages.python,Prism.languages.clike={comment:[{pattern:/(^|[^\\])\/\*[\s\S]*?(?:\*\/|$)/,lookbehind:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0,greedy:!0}],string:{pattern:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},"class-name":{pattern:/(\b(?:class|interface|extends|implements|trait|instanceof|new)\s+|\bcatch\s+\()[\w.\\]+/i,lookbehind:!0,inside:{punctuation:/[.\\]/}},keyword:/\b(?:if|else|while|do|for|return|in|instanceof|function|new|try|throw|catch|finally|null|break|continue)\b/,boolean:/\b(?:true|false)\b/,"function":/\w+(?=\()/,number:/\b0x[\da-f]+\b|(?:\b\d+\.?\d*|\B\.\d+)(?:e[+-]?\d+)?/i,operator:/[<>]=?|[!=]=?=?|--?|\+\+?|&&?|\|\|?|[?*/~^%]/,punctuation:/[{}[\];(),.:]/},Prism.languages.lua={comment:/^#!.+|--(?:\[(=*)\[[\s\S]*?\]\1\]|.*)/m,string:{pattern:/(["'])(?:(?!\1)[^\\\r\n]|\\z(?:\r\n|\s)|\\(?:\r\n|[\s\S]))*\1|\[(=*)\[[\s\S]*?\]\2\]/,greedy:!0},number:/\b0x[a-f\d]+\.?[a-f\d]*(?:p[+-]?\d+)?\b|\b\d+(?:\.\B|\.?\d*(?:e[+-]?\d+)?\b)|\B\.\d+(?:e[+-]?\d+)?\b/i,keyword:/\b(?:and|break|do|else|elseif|end|false|for|function|goto|if|in|local|nil|not|or|repeat|return|then|true|until|while)\b/,"function":/(?!\d)\w+(?=\s*(?:[({]))/,operator:[/[-+*%^&|#]|\/\/?|<[<=]?|>[>=]?|[=~]=?/,{pattern:/(^|[^.])\.\.(?!\.)/,lookbehind:!0}],punctuation:/[\[\](){},;]|\.+|:+/},function(n){var t="\\b(?:BASH|BASHOPTS|BASH_ALIASES|BASH_ARGC|BASH_ARGV|BASH_CMDS|BASH_COMPLETION_COMPAT_DIR|BASH_LINENO|BASH_REMATCH|BASH_SOURCE|BASH_VERSINFO|BASH_VERSION|COLORTERM|COLUMNS|COMP_WORDBREAKS|DBUS_SESSION_BUS_ADDRESS|DEFAULTS_PATH|DESKTOP_SESSION|DIRSTACK|DISPLAY|EUID|GDMSESSION|GDM_LANG|GNOME_KEYRING_CONTROL|GNOME_KEYRING_PID|GPG_AGENT_INFO|GROUPS|HISTCONTROL|HISTFILE|HISTFILESIZE|HISTSIZE|HOME|HOSTNAME|HOSTTYPE|IFS|INSTANCE|JOB|LANG|LANGUAGE|LC_ADDRESS|LC_ALL|LC_IDENTIFICATION|LC_MEASUREMENT|LC_MONETARY|LC_NAME|LC_NUMERIC|LC_PAPER|LC_TELEPHONE|LC_TIME|LESSCLOSE|LESSOPEN|LINES|LOGNAME|LS_COLORS|MACHTYPE|MAILCHECK|MANDATORY_PATH|NO_AT_BRIDGE|OLDPWD|OPTERR|OPTIND|ORBIT_SOCKETDIR|OSTYPE|PAPERSIZE|PATH|PIPESTATUS|PPID|PS1|PS2|PS3|PS4|PWD|RANDOM|REPLY|SECONDS|SELINUX_INIT|SESSION|SESSIONTYPE|SESSION_MANAGER|SHELL|SHELLOPTS|SHLVL|SSH_AUTH_SOCK|TERM|UID|UPSTART_EVENTS|UPSTART_INSTANCE|UPSTART_JOB|UPSTART_SESSION|USER|WINDOWID|XAUTHORITY|XDG_CONFIG_DIRS|XDG_CURRENT_DESKTOP|XDG_DATA_DIRS|XDG_GREETER_DATA_DIR|XDG_MENU_PREFIX|XDG_RUNTIME_DIR|XDG_SEAT|XDG_SEAT_PATH|XDG_SESSION_DESKTOP|XDG_SESSION_ID|XDG_SESSION_PATH|XDG_SESSION_TYPE|XDG_VTNR|XMODIFIERS)\\b",e={environment:{pattern:RegExp("\\$"+t),alias:"constant"},variable:[{pattern:/\$?\(\([\s\S]+?\)\)/,greedy:!0,inside:{variable:[{pattern:/(^\$\(\([\s\S]+)\)\)/,lookbehind:!0},/^\$\(\(/],number:/\b0x[\dA-Fa-f]+\b|(?:\b\d+\.?\d*|\B\.\d+)(?:[Ee]-?\d+)?/,operator:/--?|-=|\+\+?|\+=|!=?|~|\*\*?|\*=|\/=?|%=?|<<=?|>>=?|<=?|>=?|==?|&&?|&=|\^=?|\|\|?|\|=|\?|:/,punctuation:/\(\(?|\)\)?|,|;/}},{pattern:/\$\((?:\([^)]+\)|[^()])+\)|`[^`]+`/,greedy:!0,inside:{variable:/^\$\(|^`|\)$|`$/}},{pattern:/\$\{[^}]+\}/,greedy:!0,inside:{operator:/:[-=?+]?|[!\/]|##?|%%?|\^\^?|,,?/,punctuation:/[\[\]]/,environment:{pattern:RegExp("(\\{)"+t),lookbehind:!0,alias:"constant"}}},/\$(?:\w+|[#?*!@$])/],entity:/\\(?:[abceEfnrtv\\"]|O?[0-7]{1,3}|x[0-9a-fA-F]{1,2}|u[0-9a-fA-F]{4}|U[0-9a-fA-F]{8})/};n.languages.bash={shebang:{pattern:/^#!\s*\/.*/,alias:"important"},comment:{pattern:/(^|[^"{\\$])#.*/,lookbehind:!0},"function-name":[{pattern:/(\bfunction\s+)\w+(?=(?:\s*\(?:\s*\))?\s*\{)/,lookbehind:!0,alias:"function"},{pattern:/\b\w+(?=\s*\(\s*\)\s*\{)/,alias:"function"}],"for-or-select":{pattern:/(\b(?:for|select)\s+)\w+(?=\s+in\s)/,alias:"variable",lookbehind:!0},"assign-left":{pattern:/(^|[\s;|&]|[<>]\()\w+(?=\+?=)/,inside:{environment:{pattern:RegExp("(^|[\\s;|&]|[<>]\\()"+t),lookbehind:!0,alias:"constant"}},alias:"variable",lookbehind:!0},string:[{pattern:/((?:^|[^<])<<-?\s*)(\w+?)\s*(?:\r?\n|\r)[\s\S]*?(?:\r?\n|\r)\2/,lookbehind:!0,greedy:!0,inside:e},{pattern:/((?:^|[^<])<<-?\s*)(["'])(\w+)\2\s*(?:\r?\n|\r)[\s\S]*?(?:\r?\n|\r)\3/,lookbehind:!0,greedy:!0},{pattern:/(^|[^\\](?:\\\\)*)(["'])(?:\\[\s\S]|\$\([^)]+\)|`[^`]+`|(?!\2)[^\\])*\2/,lookbehind:!0,greedy:!0,inside:e}],environment:{pattern:RegExp("\\$?"+t),alias:"constant"},variable:e.variable,"function":{pattern:/(^|[\s;|&]|[<>]\()(?:add|apropos|apt|aptitude|apt-cache|apt-get|aspell|automysqlbackup|awk|basename|bash|bc|bconsole|bg|bzip2|cal|cat|cfdisk|chgrp|chkconfig|chmod|chown|chroot|cksum|clear|cmp|column|comm|cp|cron|crontab|csplit|curl|cut|date|dc|dd|ddrescue|debootstrap|df|diff|diff3|dig|dir|dircolors|dirname|dirs|dmesg|du|egrep|eject|env|ethtool|expand|expect|expr|fdformat|fdisk|fg|fgrep|file|find|fmt|fold|format|free|fsck|ftp|fuser|gawk|git|gparted|grep|groupadd|groupdel|groupmod|groups|grub-mkconfig|gzip|halt|head|hg|history|host|hostname|htop|iconv|id|ifconfig|ifdown|ifup|import|install|ip|jobs|join|kill|killall|less|link|ln|locate|logname|logrotate|look|lpc|lpr|lprint|lprintd|lprintq|lprm|ls|lsof|lynx|make|man|mc|mdadm|mkconfig|mkdir|mke2fs|mkfifo|mkfs|mkisofs|mknod|mkswap|mmv|more|most|mount|mtools|mtr|mutt|mv|nano|nc|netstat|nice|nl|nohup|notify-send|npm|nslookup|op|open|parted|passwd|paste|pathchk|ping|pkill|pnpm|popd|pr|printcap|printenv|ps|pushd|pv|quota|quotacheck|quotactl|ram|rar|rcp|reboot|remsync|rename|renice|rev|rm|rmdir|rpm|rsync|scp|screen|sdiff|sed|sendmail|seq|service|sftp|sh|shellcheck|shuf|shutdown|sleep|slocate|sort|split|ssh|stat|strace|su|sudo|sum|suspend|swapon|sync|tac|tail|tar|tee|time|timeout|top|touch|tr|traceroute|tsort|tty|umount|uname|unexpand|uniq|units|unrar|unshar|unzip|update-grub|uptime|useradd|userdel|usermod|users|uudecode|uuencode|v|vdir|vi|vim|virsh|vmstat|wait|watch|wc|wget|whereis|which|who|whoami|write|xargs|xdg-open|yarn|yes|zenity|zip|zsh|zypper)(?=$|[)\s;|&])/,lookbehind:!0},keyword:{pattern:/(^|[\s;|&]|[<>]\()(?:if|then|else|elif|fi|for|while|in|case|esac|function|select|do|done|until)(?=$|[)\s;|&])/,lookbehind:!0},builtin:{pattern:/(^|[\s;|&]|[<>]\()(?:\.|:|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)(?=$|[)\s;|&])/,lookbehind:!0,alias:"class-name"},boolean:{pattern:/(^|[\s;|&]|[<>]\()(?:true|false)(?=$|[)\s;|&])/,lookbehind:!0},"file-descriptor":{pattern:/\B&\d\b/,alias:"important"},operator:{pattern:/\d?<>|>\||\+=|==?|!=?|=~|<<[<-]?|[&\d]?>>|\d?[<>]&?|&[>&]?|\|[&|]?|<=?|>=?/,inside:{"file-descriptor":{pattern:/^\d/,alias:"important"}}},punctuation:/\$?\(\(?|\)\)?|\.\.|[{}[\];\\]/,number:{pattern:/(^|\s)(?:[1-9]\d*|0)(?:[.,]\d+)?\b/,lookbehind:!0}};for(var i=["comment","function-name","for-or-select","assign-left","string","environment","function","keyword","builtin","boolean","file-descriptor","operator","punctuation","number"],r=e.variable[1].inside,o=0;o(?:>=?|=)?|<(?:<=?|=|-)?|:=|\.\.\./,number:/(?:\b0x[a-f\d]+|(?:\b\d+\.?\d*|\B\.\d+)(?:e[-+]?\d+)?)i?/i,string:{pattern:/(["'`])(?:\\[\s\S]|(?!\1)[^\\])*\1/,greedy:!0}}),delete Prism.languages.go["class-name"],function(n){function t(n,t){return n=n.replace(//g,function(){return e}),t&&(n=n+"|"+n.replace(/_/g,"\\*")),RegExp(/((?:^|[^\\])(?:\\{2})*)/.source+"(?:"+n+")")}var e=/(?:\\.|[^\\\n\r]|(?:\n|\r\n?)(?!\n|\r\n?))/.source,i=/(?:\\.|``.+?``|`[^`\r\n]+`|[^\\|\r\n`])+/.source,r=/\|?__(?:\|__)+\|?(?:(?:\n|\r\n?)|$)/.source.replace(/__/g,function(){return i}),o=/\|?[ \t]*:?-{3,}:?[ \t]*(?:\|[ \t]*:?-{3,}:?[ \t]*)+\|?(?:\n|\r\n?)/.source;n.languages.markdown=n.languages.extend("markup",{}),n.languages.insertBefore("markdown","prolog",{blockquote:{pattern:/^>(?:[\t ]*>)*/m,alias:"punctuation"},table:{pattern:RegExp("^"+r+o+"(?:"+r+")*","m"),inside:{"table-data-rows":{pattern:RegExp("^("+r+o+")(?:"+r+")*$"),lookbehind:!0,inside:{"table-data":{pattern:RegExp(i),inside:n.languages.markdown},punctuation:/\|/}},"table-line":{pattern:RegExp("^("+r+")"+o+"$"),lookbehind:!0,inside:{punctuation:/\||:?-{3,}:?/}},"table-header-row":{pattern:RegExp("^"+r+"$"),inside:{"table-header":{pattern:RegExp(i),alias:"important",inside:n.languages.markdown},punctuation:/\|/}}}},code:[{pattern:/((?:^|\n)[ \t]*\n|(?:^|\r\n?)[ \t]*\r\n?)(?: {4}|\t).+(?:(?:\n|\r\n?)(?: {4}|\t).+)*/,lookbehind:!0,alias:"keyword"},{pattern:/``.+?``|`[^`\r\n]+`/,alias:"keyword"},{pattern:/^```[\s\S]*?^```$/m,greedy:!0,inside:{"code-block":{pattern:/^(```.*(?:\n|\r\n?))[\s\S]+?(?=(?:\n|\r\n?)^```$)/m,lookbehind:!0},"code-language":{pattern:/^(```).+/,lookbehind:!0},punctuation:/```/}}],title:[{pattern:/\S.*(?:\n|\r\n?)(?:==+|--+)(?=[ \t]*$)/m,alias:"important",inside:{punctuation:/==+$|--+$/}},{pattern:/(^\s*)#+.+/m,lookbehind:!0,alias:"important",inside:{punctuation:/^#+|#+$/}}],hr:{pattern:/(^\s*)([*-])(?:[\t ]*\2){2,}(?=\s*$)/m,lookbehind:!0,alias:"punctuation"},list:{pattern:/(^\s*)(?:[*+-]|\d+\.)(?=[\t ].)/m,lookbehind:!0,alias:"punctuation"},"url-reference":{pattern:/!?\[[^\]]+\]:[\t ]+(?:\S+|<(?:\\.|[^>\\])+>)(?:[\t ]+(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\)))?/,inside:{variable:{pattern:/^(!?\[)[^\]]+/,lookbehind:!0},string:/(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\))$/,punctuation:/^[\[\]!:]|[<>]/},alias:"url"},bold:{pattern:t(/__(?:(?!_)|_(?:(?!_))+_)+__/.source,!0),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^..)[\s\S]+(?=..$)/,lookbehind:!0,inside:{}},punctuation:/\*\*|__/}},italic:{pattern:t(/_(?:(?!_)|__(?:(?!_))+__)+_/.source,!0),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^.)[\s\S]+(?=.$)/,lookbehind:!0,inside:{}},punctuation:/[*_]/}},strike:{pattern:t(/(~~?)(?:(?!~))+?\2/.source,!1),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^~~?)[\s\S]+(?=\1$)/,lookbehind:!0,inside:{}},punctuation:/~~?/}},url:{pattern:t(/!?\[(?:(?!\]))+\](?:\([^\s)]+(?:[\t ]+"(?:\\.|[^"\\])*")?\)| ?\[(?:(?!\]))+\])/.source,!1),lookbehind:!0,greedy:!0,inside:{variable:{pattern:/(\[)[^\]]+(?=\]$)/,lookbehind:!0},content:{pattern:/(^!?\[)[^\]]+(?=\])/,lookbehind:!0,inside:{}},string:{pattern:/"(?:\\.|[^"\\])*"(?=\)$)/}}}}),["url","bold","italic","strike"].forEach(function(t){["url","bold","italic","strike"].forEach(function(e){t!==e&&(n.languages.markdown[t].inside.content.inside[e]=n.languages.markdown[e])})}),n.hooks.add("after-tokenize",function(n){function t(n){if(n&&"string"!=typeof n)for(var e=0,i=n.length;e]?|<(?:<=?|[=:])?|>(?:=|>>?=?)?|==?=?|[~\u2260\u2264\u2265]/,punctuation:/[{}[\];(),.:]/,constant:/\b(?:(?:NaN|Inf)(?:16|32|64)?)\b/}; +// Copyright 2018 The Distill Template Authors +const fo=Or("d-code",`\n\n\n\n\n`);class go extends(Dr(fo(HTMLElement))){renderContent(){if(this.languageName=this.getAttribute("language"),!this.languageName)return void console.warn('You need to provide a language attribute to your block to let us know how to highlight your code; e.g.:\n zeros = np.zeros(shape).');const n=po.languages[this.languageName];if(n==undefined)return void console.warn(`Distill does not yet support highlighting your code block in "${this.languageName}'.`);let t=this.textContent;const e=this.shadowRoot.querySelector("#code-container");if(this.hasAttribute("block")){const n=(t=t.replace(/\n/,"")).match(/\s*/);if(t=(t=t.replace(new RegExp("\n"+n,"g"),"\n")).trim(),e.parentNode instanceof ShadowRoot){const n=document.createElement("pre");this.shadowRoot.removeChild(e),n.appendChild(e),this.shadowRoot.appendChild(n)}}e.className=`language-${this.languageName}`,e.innerHTML=po.highlight(t,n)}} +// Copyright 2018 The Distill Template Authors +const mo=Or("d-footnote",'\n\n\n\n
    \n \n
    \n
    \n\n\n \n\n\n');class bo extends(mo(HTMLElement)){constructor(){super();const n={childList:!0,characterData:!0,subtree:!0};new MutationObserver(this.notify).observe(this,n)}notify(){const n=new CustomEvent("onFootnoteChanged",{detail:this,bubbles:!0});document.dispatchEvent(n)}connectedCallback(){this.hoverBox=this.root.querySelector("d-hover-box"),window.customElements.whenDefined("d-hover-box").then(()=>{this.hoverBox.listen(this)}),bo.currentFootnoteId+=1;const n=bo.currentFootnoteId.toString();this.root.host.id="d-footnote-"+n;const t="dt-fn-hover-box-"+n;this.hoverBox.id=t;const e=this.root.querySelector("#fn-");e.setAttribute("id","fn-"+n),e.setAttribute("data-hover-ref",t),e.textContent=n}}bo.currentFootnoteId=0; +// Copyright 2018 The Distill Template Authors +const yo=Or("d-footnote-list","\n\n\n

    Footnotes

    \n
      \n",!1);class vo extends(yo(HTMLElement)){connectedCallback(){super.connectedCallback(),this.list=this.root.querySelector("ol"),this.root.style.display="none"}set footnotes(n){if(this.list.innerHTML="",n.length){this.root.style.display="";for(const t of n){const n=document.createElement("li");n.id=t.id+"-listing",n.innerHTML=t.innerHTML;const e=document.createElement("a");e.setAttribute("class","footnote-backlink"),e.textContent="[\u21a9]",e.href="#"+t.id,n.appendChild(e),this.list.appendChild(n)}}else this.root.style.display="none"}} +// Copyright 2018 The Distill Template Authors +const wo=Or("d-hover-box",'\n\n\n
      \n
      \n \n
      \n
      \n');class xo extends(wo(HTMLElement)){constructor(){super()}connectedCallback(){}listen(n){this.bindDivEvents(this),this.bindTriggerEvents(n)}bindDivEvents(n){n.addEventListener("mouseover",()=>{this.visible||this.showAtNode(n),this.stopTimeout()}),n.addEventListener("mouseout",()=>{this.extendTimeout(500)}),n.addEventListener("touchstart",n=>{n.stopPropagation()},{passive:!0}),document.body.addEventListener("touchstart",()=>{this.hide()},{passive:!0})}bindTriggerEvents(n){n.addEventListener("mouseover",()=>{this.visible||this.showAtNode(n),this.stopTimeout()}),n.addEventListener("mouseout",()=>{this.extendTimeout(300)}),n.addEventListener("touchstart",t=>{this.visible?this.hide():this.showAtNode(n),t.stopPropagation()},{passive:!0})}show(n){this.visible=!0,this.style.display="block",this.style.top=Math.round(n[1]+10)+"px"}showAtNode(n){const t=n.getBoundingClientRect();this.show([n.offsetLeft+t.width,n.offsetTop+t.height])}hide(){this.visible=!1,this.style.display="none",this.stopTimeout()}stopTimeout(){this.timeout&&clearTimeout(this.timeout)}extendTimeout(n){this.stopTimeout(),this.timeout=setTimeout(()=>{this.hide()},n)}} +// Copyright 2018 The Distill Template Authors +class ko extends HTMLElement{static get is(){return"d-title"}} +// Copyright 2018 The Distill Template Authors +const So=Or("d-references","\n\n",!1);class Mo extends(So(HTMLElement)){} +// Copyright 2018 The Distill Template Authors +class To extends HTMLElement{static get is(){return"d-toc"}connectedCallback(){this.getAttribute("prerendered")||(window.onload=(()=>{k(this,document.querySelector("d-article").querySelectorAll("h2, h3"))}))}}class _o extends HTMLElement{static get is(){return"d-figure"}static get readyQueue(){return _o._readyQueue||(_o._readyQueue=[]),_o._readyQueue}static addToReadyQueue(n){-1===_o.readyQueue.indexOf(n)&&(_o.readyQueue.push(n),_o.runReadyQueue())}static runReadyQueue(){const n=_o.readyQueue.sort((n,t)=>n._seenOnScreen-t._seenOnScreen).filter(n=>!n._ready).pop();n&&(n.ready(),requestAnimationFrame(_o.runReadyQueue))}constructor(){super(),this._ready=!1,this._onscreen=!1,this._offscreen=!0}connectedCallback(){this.loadsWhileScrolling=this.hasAttribute("loadsWhileScrolling"),_o.marginObserver.observe(this),_o.directObserver.observe(this)}disconnectedCallback(){_o.marginObserver.unobserve(this),_o.directObserver.unobserve(this)}static get marginObserver(){if(!_o._marginObserver){const n=window.innerHeight,t=Math.floor(2*n),e={rootMargin:t+"px 0px "+t+"px 0px",threshold:.01},i=_o.didObserveMarginIntersection,r=new IntersectionObserver(i,e);_o._marginObserver=r}return _o._marginObserver}static didObserveMarginIntersection(n){for(const t of n){const n=t.target;t.isIntersecting&&!n._ready&&_o.addToReadyQueue(n)}}static get directObserver(){return _o._directObserver||(_o._directObserver=new IntersectionObserver(_o.didObserveDirectIntersection,{rootMargin:"0px",threshold:[0,1]})),_o._directObserver}static didObserveDirectIntersection(n){for(const t of n){const n=t.target;t.isIntersecting?(n._seenOnScreen=new Date,n._offscreen&&n.onscreen()):n._onscreen&&n.offscreen()}}addEventListener(n,t){super.addEventListener(n,t),"ready"===n&&-1!==_o.readyQueue.indexOf(this)&&(this._ready=!1,_o.runReadyQueue()),"onscreen"===n&&this.onscreen()}ready(){this._ready=!0,_o.marginObserver.unobserve(this);const n=new CustomEvent("ready");this.dispatchEvent(n)}onscreen(){this._onscreen=!0,this._offscreen=!1;const n=new CustomEvent("onscreen");this.dispatchEvent(n)}offscreen(){this._onscreen=!1,this._offscreen=!0;const n=new CustomEvent("offscreen");this.dispatchEvent(n)}}if("undefined"!=typeof window){let n;_o.isScrolling=!1;const t=()=>{_o.isScrolling=!0,clearTimeout(n),n=setTimeout(()=>{_o.isScrolling=!1,_o.runReadyQueue()},500)};window.addEventListener("scroll",t,!0)} +// Copyright 2018 The Distill Template Authors +const Co="distill.pub",Ao=Or("d-interstitial",'\n\n\n
      \n
      \n

      This article is in review.

      \n

      Do not share this URL or the contents of this article. Thank you!

      \n \n

      Enter the password we shared with you as part of the review process to view the article.

      \n
      \n
      \n');class Eo extends(Ao(HTMLElement)){connectedCallback(){if(this.shouldRemoveSelf())this.parentElement.removeChild(this);else{this.root.querySelector("#interstitial-password-input").oninput=(n=>this.passwordChanged(n))}}passwordChanged(n){n.target.value===this.password&&(console.log("Correct password entered."),this.parentElement.removeChild(this),"undefined"!=typeof Storage&&(console.log("Saved that correct password was entered."),localStorage.setItem(this.localStorageIdentifier(),"true")))}shouldRemoveSelf(){return window&&window.location.hostname===Co?(console.warn("Interstitial found on production, hiding it."),!0):"undefined"!=typeof Storage&&"true"===localStorage.getItem(this.localStorageIdentifier())&&(console.log("Loaded that correct password was entered before; skipping interstitial."),!0)}localStorageIdentifier(){const n="interstitial-password-correct";return"distill-drafts"+(window?window.location.pathname:"-")+n}}var No=M(S).right,Lo=Math.sqrt(50),Do=Math.sqrt(10),Oo=Math.sqrt(2),Io=.7,Fo=1/Io,Ro="\\s*([+-]?\\d+)\\s*",Uo="\\s*([+-]?\\d*\\.?\\d+(?:[eE][+-]?\\d+)?)\\s*",$o="\\s*([+-]?\\d*\\.?\\d+(?:[eE][+-]?\\d+)?)%\\s*",Po=/^#([0-9a-f]{3,8})$/,Ho=new RegExp("^rgb\\("+[Ro,Ro,Ro]+"\\)$"),zo=new RegExp("^rgb\\("+[$o,$o,$o]+"\\)$"),qo=new RegExp("^rgba\\("+[Ro,Ro,Ro,Uo]+"\\)$"),jo=new RegExp("^rgba\\("+[$o,$o,$o,Uo]+"\\)$"),Bo=new RegExp("^hsl\\("+[Uo,$o,$o]+"\\)$"),Yo=new RegExp("^hsla\\("+[Uo,$o,$o,Uo]+"\\)$"),Wo={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074};L(O,U,{copy:function(n){return Object.assign(new this.constructor,this,n)},displayable:function(){return this.rgb().displayable()},hex:I,formatHex:I,formatHsl:F,formatRgb:R,toString:R}),L(q,z,D(O,{brighter:function(n){return n=null==n?Fo:Math.pow(Fo,n),new q(this.r*n,this.g*n,this.b*n,this.opacity)},darker:function(n){return n=null==n?Io:Math.pow(Io,n),new q(this.r*n,this.g*n,this.b*n,this.opacity)},rgb:function(){return this},displayable:function(){return-.5<=this.r&&this.r<255.5&&-.5<=this.g&&this.g<255.5&&-.5<=this.b&&this.b<255.5&&0<=this.opacity&&this.opacity<=1},hex:j,formatHex:j,formatRgb:B,toString:B})),L(K,V,D(O,{brighter:function(n){return n=null==n?Fo:Math.pow(Fo,n),new K(this.h,this.s,this.l*n,this.opacity)},darker:function(n){return n=null==n?Io:Math.pow(Io,n),new K(this.h,this.s,this.l*n,this.opacity)},rgb:function(){var n=this.h%360+360*(this.h<0),t=isNaN(n)||isNaN(this.s)?0:this.s,e=this.l,i=e+(e<.5?e:1-e)*t,r=2*e-i;return new q(X(n>=240?n-240:n+120,r,i),X(n,r,i),X(n<120?n+240:n-120,r,i),this.opacity)},displayable:function(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1},formatHsl:function(){var n=this.opacity;return(1===(n=isNaN(n)?1:Math.max(0,Math.min(1,n)))?"hsl(":"hsla(")+(this.h||0)+", "+100*(this.s||0)+"%, "+100*(this.l||0)+"%"+(1===n?")":", "+n+")")}}));var Go=Math.PI/180,Vo=180/Math.PI,Ko=18,Xo=.96422,Zo=1,Qo=.82521,Jo=4/29,na=6/29,ta=3*na*na,ea=na*na*na;L(J,Q,D(O,{brighter:function(n){return new J(this.l+Ko*(null==n?1:n),this.a,this.b,this.opacity)},darker:function(n){return new J(this.l-Ko*(null==n?1:n),this.a,this.b,this.opacity)},rgb:function(){var n=(this.l+16)/116,t=isNaN(this.a)?n:n+this.a/500,e=isNaN(this.b)?n:n-this.b/200;return new q(en(3.1338561*(t=Xo*tn(t))-1.6168667*(n=Zo*tn(n))-.4906146*(e=Qo*tn(e))),en(-.9787684*t+1.9161415*n+.033454*e),en(.0719453*t-.2289914*n+1.4052427*e),this.opacity)}})),L(sn,an,D(O,{brighter:function(n){return new sn(this.h,this.c,this.l+Ko*(null==n?1:n),this.opacity)},darker:function(n){return new sn(this.h,this.c,this.l-Ko*(null==n?1:n),this.opacity)},rgb:function(){return ln(this).rgb()}}));var ia=-.14861,ra=1.78277,oa=-.29227,aa=-.90649,sa=1.97294,la=sa*aa,ua=sa*ra,ca=ra*oa-aa*ia;L(dn,cn,D(O,{brighter:function(n){return n=null==n?Fo:Math.pow(Fo,n),new dn(this.h,this.s,this.l*n,this.opacity)},darker:function(n){return n=null==n?Io:Math.pow(Io,n),new dn(this.h,this.s,this.l*n,this.opacity)},rgb:function(){var n=isNaN(this.h)?0:(this.h+120)*Go,t=+this.l,e=isNaN(this.s)?0:this.s*t*(1-t),i=Math.cos(n),r=Math.sin(n);return new q(255*(t+e*(ia*i+ra*r)),255*(t+e*(oa*i+aa*r)),255*(t+e*(sa*i)),this.opacity)}}));var da,ha=function gs(n){function t(n,t){var i=e((n=z(n)).r,(t=z(t)).r),r=e(n.g,t.g),o=e(n.b,t.b),a=mn(n.opacity,t.opacity);return function(t){return n.r=i(t),n.g=r(t),n.b=o(t),n.opacity=a(t),n+""}}var e=gn(n);return t.gamma=gs,t}(1),pa=/[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g,fa=new RegExp(pa.source,"g"),ga=[0,1],ma=/^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i;qn.prototype=jn.prototype,jn.prototype.toString=function(){return this.fill+this.align+this.sign+this.symbol+(this.zero?"0":"")+(this.width===undefined?"":Math.max(1,0|this.width))+(this.comma?",":"")+(this.precision===undefined?"":"."+Math.max(0,0|this.precision))+(this.trim?"~":"")+this.type};var ba,ya,va,wa={"%":function(n,t){return(100*n).toFixed(t)},b:function(n){return Math.round(n).toString(2)},c:function(n){return n+""},d:function(n){return Math.round(n).toString(10)},e:function(n,t){return n.toExponential(t)},f:function(n,t){return n.toFixed(t)},g:function(n,t){return n.toPrecision(t)},o:function(n){return Math.round(n).toString(8)},p:function(n,t){return Wn(100*n,t)},r:Wn,s:Yn,X:function(n){return Math.round(n).toString(16).toUpperCase()},x:function(n){return Math.round(n).toString(16)}},xa=Array.prototype.map,ka=["y","z","a","f","p","n","\xb5","m","","k","M","G","T","P","E","Z","Y"];Kn({decimal:".",thousands:",",grouping:[3],currency:["$",""],minus:"-"});var Sa=new Date,Ma=new Date,Ta=et(function(){},function(n,t){n.setTime(+n+t)},function(n,t){return t-n});Ta.every=function(n){return n=Math.floor(n),isFinite(n)&&n>0?n>1?et(function(t){t.setTime(Math.floor(t/n)*n)},function(t,e){t.setTime(+t+e*n)},function(t,e){return(e-t)/n}):Ta:null};var _a=1e3,Ca=6e4,Aa=36e5,Ea=864e5,Na=6048e5,La=(et(function(n){n.setTime(n-n.getMilliseconds())},function(n,t){n.setTime(+n+t*_a)},function(n,t){return(t-n)/_a},function(n){return n.getUTCSeconds()}),et(function(n){n.setTime(n-n.getMilliseconds()-n.getSeconds()*_a)},function(n,t){n.setTime(+n+t*Ca)},function(n,t){return(t-n)/Ca},function(n){return n.getMinutes()}),et(function(n){n.setTime(n-n.getMilliseconds()-n.getSeconds()*_a-n.getMinutes()*Ca)},function(n,t){n.setTime(+n+t*Aa)},function(n,t){return(t-n)/Aa},function(n){return n.getHours()}),et(function(n){n.setHours(0,0,0,0)},function(n,t){n.setDate(n.getDate()+t)},function(n,t){return(t-n-(t.getTimezoneOffset()-n.getTimezoneOffset())*Ca)/Ea},function(n){return n.getDate()-1})),Da=it(0),Oa=it(1),Ia=(it(2),it(3),it(4)),Fa=(it(5),it(6),et(function(n){n.setDate(1),n.setHours(0,0,0,0)},function(n,t){n.setMonth(n.getMonth()+t)},function(n,t){return t.getMonth()-n.getMonth()+12*(t.getFullYear()-n.getFullYear())},function(n){return n.getMonth()}),et(function(n){n.setMonth(0,1),n.setHours(0,0,0,0)},function(n,t){n.setFullYear(n.getFullYear()+t)},function(n,t){return t.getFullYear()-n.getFullYear()},function(n){return n.getFullYear()}));Fa.every=function(n){return isFinite(n=Math.floor(n))&&n>0?et(function(t){t.setFullYear(Math.floor(t.getFullYear()/n)*n),t.setMonth(0,1),t.setHours(0,0,0,0)},function(t,e){t.setFullYear(t.getFullYear()+e*n)}):null};et(function(n){n.setUTCSeconds(0,0)},function(n,t){n.setTime(+n+t*Ca)},function(n,t){return(t-n)/Ca},function(n){return n.getUTCMinutes()}),et(function(n){n.setUTCMinutes(0,0,0)},function(n,t){n.setTime(+n+t*Aa)},function(n,t){return(t-n)/Aa},function(n){return n.getUTCHours()});var Ra=et(function(n){n.setUTCHours(0,0,0,0)},function(n,t){n.setUTCDate(n.getUTCDate()+t)},function(n,t){return(t-n)/Ea},function(n){return n.getUTCDate()-1}),Ua=rt(0),$a=rt(1),Pa=(rt(2),rt(3),rt(4)),Ha=(rt(5),rt(6),et(function(n){n.setUTCDate(1),n.setUTCHours(0,0,0,0)},function(n,t){n.setUTCMonth(n.getUTCMonth()+t)},function(n,t){return t.getUTCMonth()-n.getUTCMonth()+12*(t.getUTCFullYear()-n.getUTCFullYear())},function(n){return n.getUTCMonth()}),et(function(n){n.setUTCMonth(0,1),n.setUTCHours(0,0,0,0)},function(n,t){n.setUTCFullYear(n.getUTCFullYear()+t)},function(n,t){return t.getUTCFullYear()-n.getUTCFullYear()},function(n){return n.getUTCFullYear()}));Ha.every=function(n){return isFinite(n=Math.floor(n))&&n>0?et(function(t){t.setUTCFullYear(Math.floor(t.getUTCFullYear()/n)*n),t.setUTCMonth(0,1),t.setUTCHours(0,0,0,0)},function(t,e){t.setUTCFullYear(t.getUTCFullYear()+e*n)}):null};var za,qa,ja,Ba={"-":"",_:" ",0:"0"},Ya=/^\s*\d+/,Wa=/^%/,Ga=/[\\^$*+?|[\]().{}]/g;me({dateTime:"%x, %X",date:"%-m/%-d/%Y",time:"%-I:%M:%S %p",periods:["AM","PM"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]});var Va="%Y-%m-%dT%H:%M:%S.%LZ",Ka=(Date.prototype.toISOString||qa(Va),+new Date("2000-01-01T00:00:00.000Z")||ja(Va),{value:function(){}});we.prototype=ve.prototype={constructor:we,on:function(n,t){var e,i=this._,r=xe(n+"",i),o=-1,a=r.length;if(!(arguments.length<2)){if(null!=t&&"function"!=typeof t)throw new Error("invalid callback: "+t);for(;++o0)for(var e,i,r=new Array(e),o=0;o=0&&(this._names.splice(t,1),this._node.setAttribute("class",this._names.join(" ")))},contains:function(n){return this._names.indexOf(n)>=0}};var Ja={},ns=null;"undefined"!=typeof document&&("onmouseenter"in document.documentElement||(Ja={mouseenter:"mouseover",mouseleave:"mouseout"}));var ts=[null];or.prototype=ar.prototype={constructor:or,select:Ne,selectAll:Oe,filter:Fe,data:qe,enter:Ue,exit:je,join:Be,merge:Ye,order:We,sort:Ge,call:Ke,nodes:Xe,node:Ze,size:Qe,empty:Je,each:ni,attr:si,style:hi,property:bi,classed:_i,text:Ni,html:Ii,raise:Ri,lower:$i,append:Pi,insert:zi,remove:ji,clone:Wi,datum:Gi,on:Ji,dispatch:rr},br.prototype.on=function(){var n=this._.on.apply(this._,arguments);return n===this._?this:n};const es=Or("d-slider","\n\n\n
      \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n
      \n"),is={left:37,up:38,right:39,down:40,pageUp:33,pageDown:34,end:35,home:36};class rs extends(es(HTMLElement)){connectedCallback(){this.connected=!0,this.setAttribute("role","slider"),this.hasAttribute("tabindex")||this.setAttribute("tabindex",0),this.mouseEvent=!1,this.knob=this.root.querySelector(".knob-container"),this.background=this.root.querySelector(".background"),this.trackFill=this.root.querySelector(".track-fill"),this.track=this.root.querySelector(".track"),this.min=this.min?this.min:0,this.max=this.max?this.max:100,this.scale=tt().domain([this.min,this.max]).range([0,1]).clamp(!0),this.origin=this.origin!==undefined?this.origin:this.min,this.step=this.step?this.step:1,this.update(this.value?this.value:0),this.ticks=!!this.ticks&&this.ticks,this.renderTicks(),this.drag=kr().container(this.background).on("start",()=>{this.mouseEvent=!0,this.background.classList.add("mousedown"),this.changeValue=this.value,this.dragUpdate()}).on("drag",()=>{this.dragUpdate()}).on("end",()=>{this.mouseEvent=!1,this.background.classList.remove("mousedown"),this.dragUpdate(),this.changeValue!==this.value&&this.dispatchChange(),this.changeValue=this.value}),this.drag(sr(this.background)),this.addEventListener("focusin",()=>{this.mouseEvent||this.background.classList.add("focus")}),this.addEventListener("focusout",()=>{this.background.classList.remove("focus")}),this.addEventListener("keydown",this.onKeyDown)}static get observedAttributes(){return["min","max","value","step","ticks","origin","tickValues","tickLabels"]}attributeChangedCallback(n,t,e){isNaN(e)||e===undefined||null===e||("min"==n&&(this.min=+e,this.setAttribute("aria-valuemin",this.min)),"max"==n&&(this.max=+e,this.setAttribute("aria-valuemax",this.max)),"value"==n&&this.update(+e),"origin"==n&&(this.origin=+e),"step"==n&&e>0&&(this.step=+e),"ticks"==n&&(this.ticks=""===e||e))}onKeyDown(n){this.changeValue=this.value;let t=!1;switch(n.keyCode){case is.left:case is.down:this.update(this.value-this.step),t=!0;break;case is.right:case is.up:this.update(this.value+this.step),t=!0;break;case is.pageUp:case is.pageDown:this.update(this.value+10*this.step),t=!0;break;case is.home:this.update(this.min),t=!0;break;case is.end:this.update(this.max),t=!0}t&&(this.background.classList.add("focus"),n.preventDefault(),n.stopPropagation(),this.changeValue!==this.value&&this.dispatchChange())}validateValueRange(n,t,e){return Math.max(Math.min(t,e),n)}quantizeValue(n,t){return Math.round(n/t)*t}dragUpdate(){const n=this.background.getBoundingClientRect(),t=ns.x,e=n.width;this.update(this.scale.invert(t/e))}update(n){let t=n;"any"!==this.step&&(t=this.quantizeValue(n,this.step)),t=this.validateValueRange(this.min,this.max,t),this.connected&&(this.knob.style.left=100*this.scale(t)+"%",this.trackFill.style.width=100*this.scale(this.min+Math.abs(t-this.origin))+"%",this.trackFill.style.left=100*this.scale(Math.min(t,this.origin))+"%"),this.value!==t&&(this.value=t,this.setAttribute("aria-valuenow",this.value),this.dispatchInput())}dispatchChange(){const n=new Event("change");this.dispatchEvent(n,{})}dispatchInput(){const n=new Event("input");this.dispatchEvent(n,{})}renderTicks(){const n=this.root.querySelector(".ticks");if(!1!==this.ticks){let t=[];(t=this.ticks>0?this.scale.ticks(this.ticks):"any"===this.step?this.scale.ticks():_(this.min,this.max+1e-6,this.step)).forEach(t=>{const e=document.createElement("div");e.classList.add("tick"),e.style.left=100*this.scale(t)+"%",n.appendChild(e)})}else n.style.display="none"}}var os='\n \n\n';const as=Or("distill-header",`\n\n\n`,!1); +// Copyright 2018 The Distill Template Authors +class ss extends(as(HTMLElement)){} +// Copyright 2018 The Distill Template Authors +const ls="\n\n";class us extends HTMLElement{static get is(){return"distill-appendix"}set frontMatter(n){this.innerHTML=Sr(n)}}const cs=Or("distill-footer",`\n\n\n\n\n`); +// Copyright 2018 The Distill Template Authors +class ds extends(cs(HTMLElement)){} +// Copyright 2018 The Distill Template Authors +let hs=!1,ps=0;const fs=function(){if(window.distill.runlevel<1)throw new Error("Insufficient Runlevel for Distill Template!");if("distill"in window&&window.distill.templateIsLoading)throw new Error("Runlevel 1: Distill Template is getting loaded more than once, aborting!");window.distill.templateIsLoading=!0,console.debug("Runlevel 1: Distill Template has started loading."),p(document),console.debug("Runlevel 1: Static Distill styles have been added."),console.debug("Runlevel 1->2."),window.distill.runlevel+=1;for(const[n,t]of Object.entries(Vr.listeners))"function"==typeof t?document.addEventListener(n,t):console.error("Runlevel 2: Controller listeners need to be functions!");console.debug("Runlevel 2: We can now listen to controller events."),console.debug("Runlevel 2->3."),window.distill.runlevel+=1;const n=[Jr,to,io,ao,so,uo,ho,go,bo,vo,Wr,xo,ko,Yr,Mo,To,_o,rs,Eo],t=[ss,us,ds];if(window.distill.runlevel<2)throw new Error("Insufficient Runlevel for adding custom elements!");const e=n.concat(t);for(const n of e)console.debug("Runlevel 2: Registering custom element: "+n.is),customElements.define(n.is,n);console.debug("Runlevel 3: Distill Template finished registering custom elements."),console.debug("Runlevel 3->4."),window.distill.runlevel+=1,u()&&Vr.listeners.DOMContentLoaded(),console.debug("Runlevel 4: Distill Template initialisation complete."),window.distill.templateIsLoading=!1,window.distill.templateHasLoaded=!0};window.distill={runlevel:ps,initialize:fs,templateIsLoading:hs},Zr.browserSupportsAllFeatures()?(console.debug("Runlevel 0: No need for polyfills."),console.debug("Runlevel 0->1."),window.distill.runlevel+=1,window.distill.initialize()):(console.debug("Runlevel 0: Distill Template is loading polyfills."),Zr.load(window.distill.initialize))}); \ No newline at end of file diff --git a/assets/js/distillpub/transforms.v2.js b/assets/js/distillpub/transforms.v2.js index 2d12d323..41d3b7d3 100644 --- a/assets/js/distillpub/transforms.v2.js +++ b/assets/js/distillpub/transforms.v2.js @@ -1,13185 +1,75 @@ -(function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('fs')) : - typeof define === 'function' && define.amd ? define(['exports', 'fs'], factory) : - (global = global || self, factory(global.dl = {}, global.fs)); -}(this, (function (exports, fs) { 'use strict'; - - fs = fs && Object.prototype.hasOwnProperty.call(fs, 'default') ? fs['default'] : fs; - - // Copyright 2018 The Distill Template Authors - // - // Licensed under the Apache License, Version 2.0 (the "License"); - // you may not use this file except in compliance with the License. - // You may obtain a copy of the License at - // - // http://www.apache.org/licenses/LICENSE-2.0 - // - // Unless required by applicable law or agreed to in writing, software - // distributed under the License is distributed on an "AS IS" BASIS, - // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - // See the License for the specific language governing permissions and - // limitations under the License. - - const days = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday']; - const months = ['Jan.', 'Feb.', 'March', 'April', 'May', 'June', 'July', 'Aug.', 'Sept.', 'Oct.', 'Nov.', 'Dec.']; - const zeroPad = n => n < 10 ? '0' + n : n; - - const RFC = function(date) { - const day = days[date.getDay()].substring(0, 3); - const paddedDate = zeroPad(date.getDate()); - const month = months[date.getMonth()].substring(0,3); - const year = date.getFullYear().toString(); - const hours = date.getUTCHours().toString(); - const minutes = date.getUTCMinutes().toString(); - const seconds = date.getUTCSeconds().toString(); - return `${day}, ${paddedDate} ${month} ${year} ${hours}:${minutes}:${seconds} Z`; - }; - - const objectFromMap = function(map) { - const object = Array.from(map).reduce((object, [key, value]) => ( - Object.assign(object, { [key]: value }) // Be careful! Maps can have non-String keys; object literals can't. - ), {}); - return object; - }; - - const mapFromObject = function(object) { - const map = new Map(); - for (var property in object) { - if (object.hasOwnProperty(property)) { - map.set(property, object[property]); - } - } - return map; - }; - - class Author { - - // constructor(name='', personalURL='', affiliation='', affiliationURL='') { - // this.name = name; // 'Chris Olah' - // this.personalURL = personalURL; // 'https://colah.github.io' - // this.affiliation = affiliation; // 'Google Brain' - // this.affiliationURL = affiliationURL; // 'https://g.co/brain' - // } - - constructor(object) { - this.name = object.author; // 'Chris Olah' - this.personalURL = object.authorURL; // 'https://colah.github.io' - this.affiliation = object.affiliation; // 'Google Brain' - this.affiliationURL = object.affiliationURL; // 'https://g.co/brain' - this.affiliations = object.affiliations || []; // new-style affiliations - } - - // 'Chris' - get firstName() { - const names = this.name.split(' '); - return names.slice(0, names.length - 1).join(' '); - } - - // 'Olah' - get lastName() { - const names = this.name.split(' '); - return names[names.length -1]; - } - } - - function mergeFromYMLFrontmatter(target, source) { - target.title = source.title; - if (source.published) { - if (source.published instanceof Date) { - target.publishedDate = source.published; - } else if (source.published.constructor === String) { - target.publishedDate = new Date(source.published); - } - } - if (source.publishedDate) { - if (source.publishedDate instanceof Date) { - target.publishedDate = source.publishedDate; - } else if (source.publishedDate.constructor === String) { - target.publishedDate = new Date(source.publishedDate); - } else { - console.error('Don\'t know what to do with published date: ' + source.publishedDate); - } - } - target.description = source.description; - target.authors = source.authors.map( (authorObject) => new Author(authorObject)); - target.katex = source.katex; - target.password = source.password; - if (source.doi) { - target.doi = source.doi; - } - } - - class FrontMatter { - constructor() { - this.title = 'unnamed article'; // 'Attention and Augmented Recurrent Neural Networks' - this.description = ''; // 'A visual overview of neural attention...' - this.authors = []; // Array of Author(s) - - this.bibliography = new Map(); - this.bibliographyParsed = false; - // { - // 'gregor2015draw': { - // 'title': 'DRAW: A recurrent neural network for image generation', - // 'author': 'Gregor, Karol and Danihelka, Ivo and Graves, Alex and Rezende, Danilo Jimenez and Wierstra, Daan', - // 'journal': 'arXiv preprint arXiv:1502.04623', - // 'year': '2015', - // 'url': 'https://arxiv.org/pdf/1502.04623.pdf', - // 'type': 'article' - // }, - // } - - // Citation keys should be listed in the order that they are appear in the document. - // Each key refers to a key in the bibliography dictionary. - this.citations = []; // [ 'gregor2015draw', 'mercier2011humans' ] - this.citationsCollected = false; - - // - // Assigned from posts.csv - // - - // publishedDate: 2016-09-08T07:00:00.000Z, - // tags: [ 'rnn' ], - // distillPath: '2016/augmented-rnns', - // githubPath: 'distillpub/post--augmented-rnns', - // doiSuffix: 1, - - // - // Assigned from journal - // - this.journal = {}; - // journal: { - // 'title': 'Distill', - // 'full_title': 'Distill', - // 'abbrev_title': 'Distill', - // 'url': 'http://distill.pub', - // 'doi': '10.23915/distill', - // 'publisherName': 'Distill Working Group', - // 'publisherEmail': 'admin@distill.pub', - // 'issn': '2476-0757', - // 'editors': [...], - // 'committee': [...] - // } - // volume: 1, - // issue: 9, - - this.katex = {}; - - // - // Assigned from publishing process - // - - // githubCompareUpdatesUrl: 'https://github.com/distillpub/post--augmented-rnns/compare/1596e094d8943d2dc0ea445d92071129c6419c59...3bd9209e0c24d020f87cf6152dcecc6017cbc193', - // updatedDate: 2017-03-21T07:13:16.000Z, - // doi: '10.23915/distill.00001', - this.doi = undefined; - this.publishedDate = undefined; - } - - // Example: - // title: Demo Title Attention and Augmented Recurrent Neural Networks - // published: Jan 10, 2017 - // authors: - // - Chris Olah: - // - Shan Carter: http://shancarter.com - // affiliations: - // - Google Brain: - // - Google Brain: http://g.co/brain - - // - // Computed Properties - // - - // 'http://distill.pub/2016/augmented-rnns', - set url(value) { - this._url = value; - } - get url() { - if (this._url) { - return this._url; - } else if (this.distillPath && this.journal.url) { - return this.journal.url + '/' + this.distillPath; - } else if (this.journal.url) { - return this.journal.url; - } - } - - // 'https://github.com/distillpub/post--augmented-rnns', - get githubUrl() { - if (this.githubPath) { - return 'https://github.com/' + this.githubPath; - } else { - return undefined; - } - } - - // TODO resolve differences in naming of URL/Url/url. - // 'http://distill.pub/2016/augmented-rnns/thumbnail.jpg', - set previewURL(value) { - this._previewURL = value; - } - get previewURL() { - return this._previewURL ? this._previewURL : this.url + '/thumbnail.jpg'; - } - - // 'Thu, 08 Sep 2016 00:00:00 -0700', - get publishedDateRFC() { - return RFC(this.publishedDate); - } - - // 'Thu, 08 Sep 2016 00:00:00 -0700', - get updatedDateRFC() { - return RFC(this.updatedDate); - } - - // 2016, - get publishedYear() { - return this.publishedDate.getFullYear(); - } - - // 'Sept', - get publishedMonth() { - return months[this.publishedDate.getMonth()]; - } - - // 8, - get publishedDay() { - return this.publishedDate.getDate(); - } - - // '09', - get publishedMonthPadded() { - return zeroPad(this.publishedDate.getMonth() + 1); - } - - // '08', - get publishedDayPadded() { - return zeroPad(this.publishedDate.getDate()); - } - - get publishedISODateOnly() { - return this.publishedDate.toISOString().split('T')[0]; - } - - get volume() { - const volume = this.publishedYear - 2015; - if (volume < 1) { - throw new Error('Invalid publish date detected during computing volume'); - } - return volume; - } - - get issue() { - return this.publishedDate.getMonth() + 1; - } - - // 'Olah & Carter', - get concatenatedAuthors() { - if (this.authors.length > 2) { - return this.authors[0].lastName + ', et al.'; - } else if (this.authors.length === 2) { - return this.authors[0].lastName + ' & ' + this.authors[1].lastName; - } else if (this.authors.length === 1) { - return this.authors[0].lastName; - } - } - - // 'Olah, Chris and Carter, Shan', - get bibtexAuthors() { - return this.authors.map(author => { - return author.lastName + ', ' + author.firstName; - }).join(' and '); - } - - // 'olah2016attention' - get slug() { - let slug = ''; - if (this.authors.length) { - slug += this.authors[0].lastName.toLowerCase(); - slug += this.publishedYear; - slug += this.title.split(' ')[0].toLowerCase(); - } - return slug || 'Untitled'; - } - - get bibliographyEntries() { - return new Map(this.citations.map( citationKey => { - const entry = this.bibliography.get(citationKey); - return [citationKey, entry]; - })); - } - - set bibliography(bibliography) { - if (bibliography instanceof Map) { - this._bibliography = bibliography; - } else if (typeof bibliography === 'object') { - this._bibliography = mapFromObject(bibliography); - } - } - - get bibliography() { - return this._bibliography; - } - - static fromObject(source) { - const frontMatter = new FrontMatter(); - Object.assign(frontMatter, source); - return frontMatter; - } - - assignToObject(target) { - Object.assign(target, this); - target.bibliography = objectFromMap(this.bibliographyEntries); - target.url = this.url; - target.doi = this.doi; - target.githubUrl = this.githubUrl; - target.previewURL = this.previewURL; - if (this.publishedDate) { - target.volume = this.volume; - target.issue = this.issue; - target.publishedDateRFC = this.publishedDateRFC; - target.publishedYear = this.publishedYear; - target.publishedMonth = this.publishedMonth; - target.publishedDay = this.publishedDay; - target.publishedMonthPadded = this.publishedMonthPadded; - target.publishedDayPadded = this.publishedDayPadded; - } - if (this.updatedDate) { - target.updatedDateRFC = this.updatedDateRFC; - } - target.concatenatedAuthors = this.concatenatedAuthors; - target.bibtexAuthors = this.bibtexAuthors; - target.slug = this.slug; - } - - } - - // Copyright 2018 The Distill Template Authors - // - // Licensed under the Apache License, Version 2.0 (the "License"); - // you may not use this file except in compliance with the License. - // You may obtain a copy of the License at - // - // http://www.apache.org/licenses/LICENSE-2.0 - // - // Unless required by applicable law or agreed to in writing, software - // distributed under the License is distributed on an "AS IS" BASIS, - // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - // See the License for the specific language governing permissions and - // limitations under the License. - - function _moveLegacyAffiliationFormatIntoArray(frontMatter) { - // authors used to have propoerties "affiliation" and "affiliationURL". - // We now encourage using an array for affiliations containing objects with - // properties "name" and "url". - for (let author of frontMatter.authors) { - const hasOldStyle = Boolean(author.affiliation); - const hasNewStyle = Boolean(author.affiliations); - if (!hasOldStyle) continue; - if (hasNewStyle) { - console.warn(`Author ${author.author} has both old-style ("affiliation" & "affiliationURL") and new style ("affiliations") affiliation information!`); - } else { - let newAffiliation = { - "name": author.affiliation - }; - if (author.affiliationURL) newAffiliation.url = author.affiliationURL; - author.affiliations = [newAffiliation]; - } - } - return frontMatter - } - - function parseFrontmatter(element) { - const scriptTag = element.firstElementChild; - if (scriptTag) { - const type = scriptTag.getAttribute('type'); - if (type.split('/')[1] == 'json') { - const content = scriptTag.textContent; - const parsed = JSON.parse(content); - return _moveLegacyAffiliationFormatIntoArray(parsed); - } else { - console.error('Distill only supports JSON frontmatter tags anymore; no more YAML.'); - } - } else { - console.error('You added a frontmatter tag but did not provide a script tag with front matter data in it. Please take a look at our templates.'); - } - return {}; - } - - // Copyright 2018 The Distill Template Authors - - function ExtractFrontmatter(dom, data) { - const frontMatterTag = dom.querySelector('d-front-matter'); - if (!frontMatterTag) { - console.warn('No front matter tag found!'); - return; - } - const extractedData = parseFrontmatter(frontMatterTag); - mergeFromYMLFrontmatter(data, extractedData); - } - - function commonjsRequire () { - throw new Error('Dynamic requires are not currently supported by rollup-plugin-commonjs'); - } - - function unwrapExports (x) { - return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x; - } - - function createCommonjsModule(fn, module) { - return module = { exports: {} }, fn(module, module.exports), module.exports; - } - - var bibtexParse = createCommonjsModule(function (module, exports) { - /* start bibtexParse 0.0.22 */ - - //Original work by Henrik Muehe (c) 2010 - // - //CommonJS port by Mikola Lysenko 2013 - // - //Port to Browser lib by ORCID / RCPETERS - // - //Issues: - //no comment handling within strings - //no string concatenation - //no variable values yet - //Grammar implemented here: - //bibtex -> (string | preamble | comment | entry)*; - //string -> '@STRING' '{' key_equals_value '}'; - //preamble -> '@PREAMBLE' '{' value '}'; - //comment -> '@COMMENT' '{' value '}'; - //entry -> '@' key '{' key ',' key_value_list '}'; - //key_value_list -> key_equals_value (',' key_equals_value)*; - //key_equals_value -> key '=' value; - //value -> value_quotes | value_braces | key; - //value_quotes -> '"' .*? '"'; // not quite - //value_braces -> '{' .*? '"'; // not quite - (function(exports) { - - function BibtexParser() { - - this.months = ["jan", "feb", "mar", "apr", "may", "jun", "jul", "aug", "sep", "oct", "nov", "dec"]; - this.notKey = [',','{','}',' ','=']; - this.pos = 0; - this.input = ""; - this.entries = new Array(); - - this.currentEntry = ""; - - this.setInput = function(t) { - this.input = t; - }; - - this.getEntries = function() { - return this.entries; - }; - - this.isWhitespace = function(s) { - return (s == ' ' || s == '\r' || s == '\t' || s == '\n'); - }; - - this.match = function(s, canCommentOut) { - if (canCommentOut == undefined || canCommentOut == null) - canCommentOut = true; - this.skipWhitespace(canCommentOut); - if (this.input.substring(this.pos, this.pos + s.length) == s) { - this.pos += s.length; - } else { - throw "Token mismatch, expected " + s + ", found " - + this.input.substring(this.pos); - } this.skipWhitespace(canCommentOut); - }; - - this.tryMatch = function(s, canCommentOut) { - if (canCommentOut == undefined || canCommentOut == null) - canCommentOut = true; - this.skipWhitespace(canCommentOut); - if (this.input.substring(this.pos, this.pos + s.length) == s) { - return true; - } else { - return false; - } }; - - /* when search for a match all text can be ignored, not just white space */ - this.matchAt = function() { - while (this.input.length > this.pos && this.input[this.pos] != '@') { - this.pos++; - } - if (this.input[this.pos] == '@') { - return true; - } return false; - }; - - this.skipWhitespace = function(canCommentOut) { - while (this.isWhitespace(this.input[this.pos])) { - this.pos++; - } if (this.input[this.pos] == "%" && canCommentOut == true) { - while (this.input[this.pos] != "\n") { - this.pos++; - } this.skipWhitespace(canCommentOut); - } }; - - this.value_braces = function() { - var bracecount = 0; - this.match("{", false); - var start = this.pos; - var escaped = false; - while (true) { - if (!escaped) { - if (this.input[this.pos] == '}') { - if (bracecount > 0) { - bracecount--; - } else { - var end = this.pos; - this.match("}", false); - return this.input.substring(start, end); - } } else if (this.input[this.pos] == '{') { - bracecount++; - } else if (this.pos >= this.input.length - 1) { - throw "Unterminated value"; - } } if (this.input[this.pos] == '\\' && escaped == false) - escaped = true; - else - escaped = false; - this.pos++; - } }; - - this.value_comment = function() { - var str = ''; - var brcktCnt = 0; - while (!(this.tryMatch("}", false) && brcktCnt == 0)) { - str = str + this.input[this.pos]; - if (this.input[this.pos] == '{') - brcktCnt++; - if (this.input[this.pos] == '}') - brcktCnt--; - if (this.pos >= this.input.length - 1) { - throw "Unterminated value:" + this.input.substring(start); - } this.pos++; - } return str; - }; - - this.value_quotes = function() { - this.match('"', false); - var start = this.pos; - var escaped = false; - while (true) { - if (!escaped) { - if (this.input[this.pos] == '"') { - var end = this.pos; - this.match('"', false); - return this.input.substring(start, end); - } else if (this.pos >= this.input.length - 1) { - throw "Unterminated value:" + this.input.substring(start); - } } - if (this.input[this.pos] == '\\' && escaped == false) - escaped = true; - else - escaped = false; - this.pos++; - } }; - - this.single_value = function() { - var start = this.pos; - if (this.tryMatch("{")) { - return this.value_braces(); - } else if (this.tryMatch('"')) { - return this.value_quotes(); - } else { - var k = this.key(); - if (k.match("^[0-9]+$")) - return k; - else if (this.months.indexOf(k.toLowerCase()) >= 0) - return k.toLowerCase(); - else - throw "Value expected:" + this.input.substring(start) + ' for key: ' + k; - - } }; - - this.value = function() { - var values = []; - values.push(this.single_value()); - while (this.tryMatch("#")) { - this.match("#"); - values.push(this.single_value()); - } return values.join(""); - }; - - this.key = function() { - var start = this.pos; - while (true) { - if (this.pos >= this.input.length) { - throw "Runaway key"; - } // а-яА-Я is Cyrillic - //console.log(this.input[this.pos]); - if (this.notKey.indexOf(this.input[this.pos]) >= 0) { - return this.input.substring(start, this.pos); - } else { - this.pos++; - - } } }; - - this.key_equals_value = function() { - var key = this.key(); - if (this.tryMatch("=")) { - this.match("="); - var val = this.value(); - return [ key, val ]; - } else { - throw "... = value expected, equals sign missing:" - + this.input.substring(this.pos); - } }; - - this.key_value_list = function() { - var kv = this.key_equals_value(); - this.currentEntry['entryTags'] = {}; - this.currentEntry['entryTags'][kv[0]] = kv[1]; - while (this.tryMatch(",")) { - this.match(","); - // fixes problems with commas at the end of a list - if (this.tryMatch("}")) { - break; - } - kv = this.key_equals_value(); - this.currentEntry['entryTags'][kv[0]] = kv[1]; - } }; - - this.entry_body = function(d) { - this.currentEntry = {}; - this.currentEntry['citationKey'] = this.key(); - this.currentEntry['entryType'] = d.substring(1); - this.match(","); - this.key_value_list(); - this.entries.push(this.currentEntry); - }; - - this.directive = function() { - this.match("@"); - return "@" + this.key(); - }; - - this.preamble = function() { - this.currentEntry = {}; - this.currentEntry['entryType'] = 'PREAMBLE'; - this.currentEntry['entry'] = this.value_comment(); - this.entries.push(this.currentEntry); - }; - - this.comment = function() { - this.currentEntry = {}; - this.currentEntry['entryType'] = 'COMMENT'; - this.currentEntry['entry'] = this.value_comment(); - this.entries.push(this.currentEntry); - }; - - this.entry = function(d) { - this.entry_body(d); - }; - - this.bibtex = function() { - while (this.matchAt()) { - var d = this.directive(); - this.match("{"); - if (d == "@STRING") { - this.string(); - } else if (d == "@PREAMBLE") { - this.preamble(); - } else if (d == "@COMMENT") { - this.comment(); - } else { - this.entry(d); - } - this.match("}"); - } }; - } - exports.toJSON = function(bibtex) { - var b = new BibtexParser(); - b.setInput(bibtex); - b.bibtex(); - return b.entries; - }; - - /* added during hackathon don't hate on me */ - exports.toBibtex = function(json) { - var out = ''; - for ( var i in json) { - out += "@" + json[i].entryType; - out += '{'; - if (json[i].citationKey) - out += json[i].citationKey + ', '; - if (json[i].entry) - out += json[i].entry ; - if (json[i].entryTags) { - var tags = ''; - for (var jdx in json[i].entryTags) { - if (tags.length != 0) - tags += ', '; - tags += jdx + '= {' + json[i].entryTags[jdx] + '}'; - } - out += tags; - } - out += '}\n\n'; - } - return out; - - }; - - })( exports); - - /* end bibtexParse */ - }); - - // Copyright 2018 The Distill Template Authors - - function normalizeTag(string) { - return string - .replace(/[\t\n ]+/g, ' ') - .replace(/{\\["^`.'acu~Hvs]( )?([a-zA-Z])}/g, (full, x, char) => char) - .replace(/{\\([a-zA-Z])}/g, (full, char) => char); - } - - function parseBibtex(bibtex) { - const bibliography = new Map(); - const parsedEntries = bibtexParse.toJSON(bibtex); - for (const entry of parsedEntries) { - // normalize tags; note entryTags is an object, not Map - for (const [key, value] of Object.entries(entry.entryTags)) { - entry.entryTags[key.toLowerCase()] = normalizeTag(value); - } - entry.entryTags.type = entry.entryType; - // add to bibliography - bibliography.set(entry.citationKey, entry.entryTags); - } - return bibliography; - } - - function serializeFrontmatterToBibtex(frontMatter) { - return `@article{${frontMatter.slug}, - author = {${frontMatter.bibtexAuthors}}, - title = {${frontMatter.title}}, - journal = {${frontMatter.journal.title}}, - year = {${frontMatter.publishedYear}}, - note = {${frontMatter.url}}, - doi = {${frontMatter.doi}} -}`; - } - - // Copyright 2018 The Distill Template Authors - - function parseBibliography(element) { - const scriptTag = element.firstElementChild; - if (scriptTag && scriptTag.tagName === 'SCRIPT') { - if (scriptTag.type == 'text/bibtex') { - const bibtex = element.firstElementChild.textContent; - return parseBibtex(bibtex); - } else if (scriptTag.type == 'text/json') { - return new Map(JSON.parse(scriptTag.textContent)); - } else { - console.warn('Unsupported bibliography script tag type: ' + scriptTag.type); - } - } else { - console.warn('Bibliography did not have any script tag.'); - } - } - - // Copyright 2018 The Distill Template Authors - - function ExtractBibliography(dom, data) { - const bibliographyTag = dom.querySelector('d-bibliography'); - if (!bibliographyTag) { - console.warn('No bibliography tag found!'); - return; - } - - const src = bibliographyTag.getAttribute('src'); - if (src) { - const path = data.inputDirectory + '/' + src; - const text = fs.readFileSync(path, 'utf-8'); - const bibliography = parseBibtex(text); - const scriptTag = dom.createElement('script'); - scriptTag.type = 'text/json'; - scriptTag.textContent = JSON.stringify([...bibliography]); - bibliographyTag.appendChild(scriptTag); - bibliographyTag.removeAttribute('src'); - } - - data.bibliography = parseBibliography(bibliographyTag); - } - - // Copyright 2018 The Distill Template Authors - // - // Licensed under the Apache License, Version 2.0 (the "License"); - // you may not use this file except in compliance with the License. - // You may obtain a copy of the License at - // - // http://www.apache.org/licenses/LICENSE-2.0 - // - // Unless required by applicable law or agreed to in writing, software - // distributed under the License is distributed on an "AS IS" BASIS, - // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - // See the License for the specific language governing permissions and - // limitations under the License. - - function collect_citations(dom = document) { - const citations = new Set(); - const citeTags = dom.querySelectorAll("d-cite"); - for (const tag of citeTags) { - const keyString = tag.getAttribute("key") || tag.getAttribute("bibtex-key"); - const keys = keyString.split(",").map(k => k.trim()); - for (const key of keys) { - citations.add(key); - } - } - return [...citations]; - } - - function author_string(ent, template, sep, finalSep) { - if (ent.author == null) { - return ""; - } - var names = ent.author.split(" and "); - let name_strings = names.map(name => { - name = name.trim(); - if (name.indexOf(",") != -1) { - var last = name.split(",")[0].trim(); - var firsts = name.split(",")[1]; - } else if (name.indexOf(" ") != -1) { - var last = name - .split(" ") - .slice(-1)[0] - .trim(); - var firsts = name - .split(" ") - .slice(0, -1) - .join(" "); - } else { - var last = name.trim(); - } - var initials = ""; - if (firsts != undefined) { - initials = firsts - .trim() - .split(" ") - .map(s => s.trim()[0]); - initials = initials.join(".") + "."; - } - return template - .replace("${F}", firsts) - .replace("${L}", last) - .replace("${I}", initials) - .trim(); // in case one of first or last was empty - }); - if (names.length > 1) { - var str = name_strings.slice(0, names.length - 1).join(sep); - str += (finalSep || sep) + name_strings[names.length - 1]; - return str; - } else { - return name_strings[0]; - } - } - - function venue_string(ent) { - var cite = ent.journal || ent.booktitle || ""; - if ("volume" in ent) { - var issue = ent.issue || ent.number; - issue = issue != undefined ? "(" + issue + ")" : ""; - cite += ", Vol " + ent.volume + issue; - } - if ("pages" in ent) { - cite += ", pp. " + ent.pages; - } - if (cite != "") cite += ". "; - if ("publisher" in ent) { - cite += ent.publisher; - if (cite[cite.length - 1] != ".") cite += "."; - } - return cite; - } - - function link_string(ent) { - if ("url" in ent) { - var url = ent.url; - var arxiv_match = /arxiv\.org\/abs\/([0-9\.]*)/.exec(url); - if (arxiv_match != null) { - url = `http://arxiv.org/pdf/${arxiv_match[1]}.pdf`; - } - - if (url.slice(-4) == ".pdf") { - var label = "PDF"; - } else if (url.slice(-5) == ".html") { - var label = "HTML"; - } - return `  [${label || "link"}]`; - } /* else if ("doi" in ent){ - return `  [DOI]`; - }*/ else { - return ""; - } - } - function doi_string(ent, new_line) { - if ("doi" in ent) { - return `${new_line ? "
      " : ""} DOI: ${ent.doi}`; - } else { - return ""; - } - } - - function title_string(ent) { - return '' + ent.title + " "; - } - - function bibliography_cite(ent, fancy) { - if (ent) { - var cite = title_string(ent); - cite += link_string(ent) + "
      "; - if (ent.author) { - cite += author_string(ent, "${L}, ${I}", ", ", " and "); - if (ent.year || ent.date) { - cite += ", "; - } - } - if (ent.year || ent.date) { - cite += (ent.year || ent.date) + ". "; - } else { - cite += ". "; - } - cite += venue_string(ent); - cite += doi_string(ent); - return cite; - /*var cite = author_string(ent, "${L}, ${I}", ", ", " and "); - if (ent.year || ent.date){ - cite += ", " + (ent.year || ent.date) + ". " - } else { - cite += ". " - } - cite += "" + ent.title + ". "; - cite += venue_string(ent); - cite += doi_string(ent); - cite += link_string(ent); - return cite*/ - } else { - return "?"; - } - } - - // Copyright 2018 The Distill Template Authors - - function ExtractCitations(dom, data) { - const citations = new Set(data.citations); - const newCitations = collect_citations(dom); - for (const citation of newCitations) { - citations.add(citation); - } - data.citations = Array.from(citations); - } - - // Copyright 2018 The Distill Template Authors - // - // Licensed under the Apache License, Version 2.0 (the "License"); - // you may not use this file except in compliance with the License. - // You may obtain a copy of the License at - // - // http://www.apache.org/licenses/LICENSE-2.0 - // - // Unless required by applicable law or agreed to in writing, software - // distributed under the License is distributed on an "AS IS" BASIS, - // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - // See the License for the specific language governing permissions and - // limitations under the License. - - function HTML(dom) { - - const head = dom.querySelector('head'); - - // set language to 'en' - if (!dom.querySelector('html').getAttribute('lang')) { - dom.querySelector('html').setAttribute('lang', 'en'); - } - - // set charset to 'utf-8' - if (!dom.querySelector('meta[charset]')) { - const meta = dom.createElement('meta'); - meta.setAttribute('charset', 'utf-8'); - head.appendChild(meta); - } - - // set viewport - if (!dom.querySelector('meta[name=viewport]')) { - const meta = dom.createElement('meta'); - meta.setAttribute('name', 'viewport'); - meta.setAttribute('content', 'width=device-width, initial-scale=1'); - head.appendChild(meta); - } - } - - // Copyright 2018 The Distill Template Authors - // - // Licensed under the Apache License, Version 2.0 (the "License"); - // you may not use this file except in compliance with the License. - // You may obtain a copy of the License at - // - // http://www.apache.org/licenses/LICENSE-2.0 - // - // Unless required by applicable law or agreed to in writing, software - // distributed under the License is distributed on an "AS IS" BASIS, - // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - // See the License for the specific language governing permissions and - // limitations under the License. - - // import style from '../styles/d-byline.css'; - - function bylineTemplate(frontMatter) { - return ` - -`; - } - - // Copyright 2018 The Distill Template Authors - - function Byline(dom, data) { - const byline = dom.querySelector('d-byline'); - if (byline) { - byline.innerHTML = bylineTemplate(data); - } - } - - // Copyright 2018 The Distill Template Authors - // - // Licensed under the Apache License, Version 2.0 (the "License"); - // you may not use this file except in compliance with the License. - // You may obtain a copy of the License at - // - // http://www.apache.org/licenses/LICENSE-2.0 - // - // Unless required by applicable law or agreed to in writing, software - // distributed under the License is distributed on an "AS IS" BASIS, - // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - // See the License for the specific language governing permissions and - // limitations under the License. - - // no appendix -> add appendix - // title in front, no h1 -> add it - // no title in front, h1 -> read and put into frontMatter - // footnote -> footnote list - // break up bib - // if citation, no bib-list -> add citation-list - - // if authors, no byline -> add byline - - function OptionalComponents(dom, data) { - const body = dom.body; - const article = body.querySelector('d-article'); - - // If we don't have an article tag, something weird is going on—giving up. - if (!article) { - console.warn('No d-article tag found; skipping adding optional components!'); - return; - } - - let byline = dom.querySelector('d-byline'); - if (!byline) { - if (data.authors) { - byline = dom.createElement('d-byline'); - body.insertBefore(byline, article); - } else { - console.warn('No authors found in front matter; please add them before submission!'); - } - } - - let title = dom.querySelector('d-title'); - if (!title) { - title = dom.createElement('d-title'); - body.insertBefore(title, byline); - } - - let h1 = title.querySelector('h1'); - if (!h1) { - h1 = dom.createElement('h1'); - h1.textContent = data.title; - title.insertBefore(h1, title.firstChild); - } - - const hasPassword = typeof data.password !== 'undefined'; - let interstitial = body.querySelector('d-interstitial'); - if (hasPassword && !interstitial) { - const inBrowser = typeof window !== 'undefined'; - const onLocalhost = inBrowser && window.location.hostname.includes('localhost'); - if (!inBrowser || !onLocalhost) { - interstitial = dom.createElement('d-interstitial'); - interstitial.password = data.password; - body.insertBefore(interstitial, body.firstChild); - } - } else if (!hasPassword && interstitial) { - interstitial.parentElement.removeChild(this); - } - - let appendix = dom.querySelector('d-appendix'); - if (!appendix) { - appendix = dom.createElement('d-appendix'); - dom.body.appendChild(appendix); - } - - let footnoteList = dom.querySelector('d-footnote-list'); - if (!footnoteList) { - footnoteList = dom.createElement('d-footnote-list'); - appendix.appendChild(footnoteList); - } - - let citationList = dom.querySelector('d-citation-list'); - if (!citationList) { - citationList = dom.createElement('d-citation-list'); - appendix.appendChild(citationList); - } - - } - - var katex$1 = createCommonjsModule(function (module, exports) { - (function(f){{module.exports=f();}})(function(){return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof commonjsRequire=="function"&&commonjsRequire;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r);}return n[o].exports}var i=typeof commonjsRequire=="function"&&commonjsRequire;for(var o=0;o= 0; --i) { - tok = expansion[i]; - if (tok.text === "#") { - if (i === 0) { - throw new _ParseError2.default("Incomplete placeholder at end of macro body", tok); - } - tok = expansion[--i]; // next token on stack - if (tok.text === "#") { - // ## → # - expansion.splice(i + 1, 1); // drop first # - } else if (/^[1-9]$/.test(tok.text)) { - // expansion.splice(i, 2, arg[0], arg[1], …) - // to replace placeholder with the indicated argument. - // TODO: use spread once we move to ES2015 - expansion.splice.apply(expansion, [i, 2].concat(args[tok.text - 1])); - } else { - throw new _ParseError2.default("Not a valid argument number", tok); - } - } - } - } - this.stack = this.stack.concat(expansion); - } - } - }, { - key: "get", - value: function get(ignoreSpace) { - this.discardedWhiteSpace = []; - var token = this.nextToken(); - if (ignoreSpace) { - while (token.text === " ") { - this.discardedWhiteSpace.push(token); - token = this.nextToken(); - } - } - return token; - } - - /** - * Undo the effect of the preceding call to the get method. - * A call to this method MUST be immediately preceded and immediately followed - * by a call to get. Only used during mode switching, i.e. after one token - * was got in the old mode but should get got again in a new mode - * with possibly different whitespace handling. - */ - - }, { - key: "unget", - value: function unget(token) { - this.stack.push(token); - while (this.discardedWhiteSpace.length !== 0) { - this.stack.push(this.discardedWhiteSpace.pop()); - } - } - }]); - return MacroExpander; - }(); - - module.exports = MacroExpander; - - },{"./Lexer":26,"./ParseError":29,"./macros":44,"babel-runtime/helpers/classCallCheck":4,"babel-runtime/helpers/createClass":5,"object-assign":25}],28:[function(require,module,exports){ - - var _classCallCheck2 = require("babel-runtime/helpers/classCallCheck"); - - var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); - - var _createClass2 = require("babel-runtime/helpers/createClass"); - - var _createClass3 = _interopRequireDefault(_createClass2); - - var _fontMetrics2 = require("./fontMetrics"); - - var _fontMetrics3 = _interopRequireDefault(_fontMetrics2); - - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - - var BASESIZE = 6; /** - * This file contains information about the options that the Parser carries - * around with it while parsing. Data is held in an `Options` object, and when - * recursing, a new `Options` object can be created with the `.with*` and - * `.reset` functions. - */ - - var sizeStyleMap = [ - // Each element contains [textsize, scriptsize, scriptscriptsize]. - // The size mappings are taken from TeX with \normalsize=10pt. - [1, 1, 1], // size1: [5, 5, 5] \tiny - [2, 1, 1], // size2: [6, 5, 5] - [3, 1, 1], // size3: [7, 5, 5] \scriptsize - [4, 2, 1], // size4: [8, 6, 5] \footnotesize - [5, 2, 1], // size5: [9, 6, 5] \small - [6, 3, 1], // size6: [10, 7, 5] \normalsize - [7, 4, 2], // size7: [12, 8, 6] \large - [8, 6, 3], // size8: [14.4, 10, 7] \Large - [9, 7, 6], // size9: [17.28, 12, 10] \LARGE - [10, 8, 7], // size10: [20.74, 14.4, 12] \huge - [11, 10, 9]]; - - var sizeMultipliers = [ - // fontMetrics.js:getFontMetrics also uses size indexes, so if - // you change size indexes, change that function. - 0.5, 0.6, 0.7, 0.8, 0.9, 1.0, 1.2, 1.44, 1.728, 2.074, 2.488]; - - var sizeAtStyle = function sizeAtStyle(size, style) { - return style.size < 2 ? size : sizeStyleMap[size - 1][style.size - 1]; - }; - - /** - * This is the main options class. It contains the current style, size, color, - * and font. - * - * Options objects should not be modified. To create a new Options with - * different properties, call a `.having*` method. - */ - - var Options = function () { - function Options(data) { - (0, _classCallCheck3.default)(this, Options); - - this.style = data.style; - this.color = data.color; - this.size = data.size || BASESIZE; - this.textSize = data.textSize || this.size; - this.phantom = data.phantom; - this.font = data.font; - this.sizeMultiplier = sizeMultipliers[this.size - 1]; - this._fontMetrics = null; - } - - /** - * Returns a new options object with the same properties as "this". Properties - * from "extension" will be copied to the new options object. - */ - - - (0, _createClass3.default)(Options, [{ - key: "extend", - value: function extend(extension) { - var data = { - style: this.style, - size: this.size, - textSize: this.textSize, - color: this.color, - phantom: this.phantom, - font: this.font - }; - - for (var key in extension) { - if (extension.hasOwnProperty(key)) { - data[key] = extension[key]; - } - } - - return new Options(data); - } - - /** - * Return an options object with the given style. If `this.style === style`, - * returns `this`. - */ - - }, { - key: "havingStyle", - value: function havingStyle(style) { - if (this.style === style) { - return this; - } else { - return this.extend({ - style: style, - size: sizeAtStyle(this.textSize, style) - }); - } - } - - /** - * Return an options object with a cramped version of the current style. If - * the current style is cramped, returns `this`. - */ - - }, { - key: "havingCrampedStyle", - value: function havingCrampedStyle() { - return this.havingStyle(this.style.cramp()); - } - - /** - * Return an options object with the given size and in at least `\textstyle`. - * Returns `this` if appropriate. - */ - - }, { - key: "havingSize", - value: function havingSize(size) { - if (this.size === size && this.textSize === size) { - return this; - } else { - return this.extend({ - style: this.style.text(), - size: size, - textSize: size - }); - } - } - - /** - * Like `this.havingSize(BASESIZE).havingStyle(style)`. If `style` is omitted, - * changes to at least `\textstyle`. - */ - - }, { - key: "havingBaseStyle", - value: function havingBaseStyle(style) { - style = style || this.style.text(); - var wantSize = sizeAtStyle(BASESIZE, style); - if (this.size === wantSize && this.textSize === BASESIZE && this.style === style) { - return this; - } else { - return this.extend({ - style: style, - size: wantSize, - baseSize: BASESIZE - }); - } - } - - /** - * Create a new options object with the given color. - */ - - }, { - key: "withColor", - value: function withColor(color) { - return this.extend({ - color: color - }); - } - - /** - * Create a new options object with "phantom" set to true. - */ - - }, { - key: "withPhantom", - value: function withPhantom() { - return this.extend({ - phantom: true - }); - } - - /** - * Create a new options objects with the give font. - */ - - }, { - key: "withFont", - value: function withFont(font) { - return this.extend({ - font: font || this.font - }); - } - - /** - * Return the CSS sizing classes required to switch from enclosing options - * `oldOptions` to `this`. Returns an array of classes. - */ - - }, { - key: "sizingClasses", - value: function sizingClasses(oldOptions) { - if (oldOptions.size !== this.size) { - return ["sizing", "reset-size" + oldOptions.size, "size" + this.size]; - } else { - return []; - } - } - - /** - * Return the CSS sizing classes required to switch to the base size. Like - * `this.havingSize(BASESIZE).sizingClasses(this)`. - */ - - }, { - key: "baseSizingClasses", - value: function baseSizingClasses() { - if (this.size !== BASESIZE) { - return ["sizing", "reset-size" + this.size, "size" + BASESIZE]; - } else { - return []; - } - } - - /** - * Return the font metrics for this size. - */ - - }, { - key: "fontMetrics", - value: function fontMetrics() { - if (!this._fontMetrics) { - this._fontMetrics = _fontMetrics3.default.getFontMetrics(this.size); - } - return this._fontMetrics; - } - - /** - * A map of color names to CSS colors. - * TODO(emily): Remove this when we have real macros - */ - - }, { - key: "getColor", - - - /** - * Gets the CSS color of the current options object, accounting for the - * `colorMap`. - */ - value: function getColor() { - if (this.phantom) { - return "transparent"; - } else { - return Options.colorMap[this.color] || this.color; - } - } - }]); - return Options; - }(); - - /** - * The base size index. - */ - - - Options.colorMap = { - "katex-blue": "#6495ed", - "katex-orange": "#ffa500", - "katex-pink": "#ff00af", - "katex-red": "#df0030", - "katex-green": "#28ae7b", - "katex-gray": "gray", - "katex-purple": "#9d38bd", - "katex-blueA": "#ccfaff", - "katex-blueB": "#80f6ff", - "katex-blueC": "#63d9ea", - "katex-blueD": "#11accd", - "katex-blueE": "#0c7f99", - "katex-tealA": "#94fff5", - "katex-tealB": "#26edd5", - "katex-tealC": "#01d1c1", - "katex-tealD": "#01a995", - "katex-tealE": "#208170", - "katex-greenA": "#b6ffb0", - "katex-greenB": "#8af281", - "katex-greenC": "#74cf70", - "katex-greenD": "#1fab54", - "katex-greenE": "#0d923f", - "katex-goldA": "#ffd0a9", - "katex-goldB": "#ffbb71", - "katex-goldC": "#ff9c39", - "katex-goldD": "#e07d10", - "katex-goldE": "#a75a05", - "katex-redA": "#fca9a9", - "katex-redB": "#ff8482", - "katex-redC": "#f9685d", - "katex-redD": "#e84d39", - "katex-redE": "#bc2612", - "katex-maroonA": "#ffbde0", - "katex-maroonB": "#ff92c6", - "katex-maroonC": "#ed5fa6", - "katex-maroonD": "#ca337c", - "katex-maroonE": "#9e034e", - "katex-purpleA": "#ddd7ff", - "katex-purpleB": "#c6b9fc", - "katex-purpleC": "#aa87ff", - "katex-purpleD": "#7854ab", - "katex-purpleE": "#543b78", - "katex-mintA": "#f5f9e8", - "katex-mintB": "#edf2df", - "katex-mintC": "#e0e5cc", - "katex-grayA": "#f6f7f7", - "katex-grayB": "#f0f1f2", - "katex-grayC": "#e3e5e6", - "katex-grayD": "#d6d8da", - "katex-grayE": "#babec2", - "katex-grayF": "#888d93", - "katex-grayG": "#626569", - "katex-grayH": "#3b3e40", - "katex-grayI": "#21242c", - "katex-kaBlue": "#314453", - "katex-kaGreen": "#71B307" - }; - Options.BASESIZE = BASESIZE; - - module.exports = Options; - - },{"./fontMetrics":41,"babel-runtime/helpers/classCallCheck":4,"babel-runtime/helpers/createClass":5}],29:[function(require,module,exports){ - - var _classCallCheck2 = require("babel-runtime/helpers/classCallCheck"); - - var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); - - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - - /** - * This is the ParseError class, which is the main error thrown by KaTeX - * functions when something has gone wrong. This is used to distinguish internal - * errors from errors in the expression that the user provided. - * - * If possible, a caller should provide a Token or ParseNode with information - * about where in the source string the problem occurred. - * - * @param {string} message The error message - * @param {(Token|ParseNode)=} token An object providing position information - */ - var ParseError = function ParseError(message, token) { - (0, _classCallCheck3.default)(this, ParseError); - - var error = "KaTeX parse error: " + message; - var start = void 0; - var end = void 0; - - if (token && token.lexer && token.start <= token.end) { - // If we have the input and a position, make the error a bit fancier - - // Get the input - var input = token.lexer.input; - - // Prepend some information - start = token.start; - end = token.end; - if (start === input.length) { - error += " at end of input: "; - } else { - error += " at position " + (start + 1) + ": "; - } - - // Underline token in question using combining underscores - var underlined = input.slice(start, end).replace(/[^]/g, "$&\u0332"); - - // Extract some context from the input and add it to the error - var left = void 0; - if (start > 15) { - left = "…" + input.slice(start - 15, start); - } else { - left = input.slice(0, start); - } - var right = void 0; - if (end + 15 < input.length) { - right = input.slice(end, end + 15) + "…"; - } else { - right = input.slice(end); - } - error += left + underlined + right; - } - - // Some hackery to make ParseError a prototype of Error - // See http://stackoverflow.com/a/8460753 - var self = new Error(error); - self.name = "ParseError"; - self.__proto__ = ParseError.prototype; - - self.position = start; - return self; - }; - - // More hackery - - - ParseError.prototype.__proto__ = Error.prototype; - - module.exports = ParseError; - - },{"babel-runtime/helpers/classCallCheck":4}],30:[function(require,module,exports){ - - Object.defineProperty(exports, "__esModule", { - value: true - }); - - var _classCallCheck2 = require("babel-runtime/helpers/classCallCheck"); - - var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); - - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - - /** - * The resulting parse tree nodes of the parse tree. - * - * It is possible to provide position information, so that a ParseNode can - * fulfil a role similar to a Token in error reporting. - * For details on the corresponding properties see Token constructor. - * Providing such information can lead to better error reporting. - * - * @param {string} type type of node, like e.g. "ordgroup" - * @param {?object} value type-specific representation of the node - * @param {string} mode parse mode in action for this node, - * "math" or "text" - * @param {Token=} firstToken first token of the input for this node, - * will omit position information if unset - * @param {Token=} lastToken last token of the input for this node, - * will default to firstToken if unset - */ - var ParseNode = function ParseNode(type, value, mode, firstToken, lastToken) { - (0, _classCallCheck3.default)(this, ParseNode); - - this.type = type; - this.value = value; - this.mode = mode; - if (firstToken && (!lastToken || lastToken.lexer === firstToken.lexer)) { - this.lexer = firstToken.lexer; - this.start = firstToken.start; - this.end = (lastToken || firstToken).end; - } - }; - - exports.default = ParseNode; - - },{"babel-runtime/helpers/classCallCheck":4}],31:[function(require,module,exports){ - - var _classCallCheck2 = require("babel-runtime/helpers/classCallCheck"); - - var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); - - var _createClass2 = require("babel-runtime/helpers/createClass"); - - var _createClass3 = _interopRequireDefault(_createClass2); - - var _functions = require("./functions"); - - var _functions2 = _interopRequireDefault(_functions); - - var _environments = require("./environments"); - - var _environments2 = _interopRequireDefault(_environments); - - var _MacroExpander = require("./MacroExpander"); - - var _MacroExpander2 = _interopRequireDefault(_MacroExpander); - - var _symbols = require("./symbols"); - - var _symbols2 = _interopRequireDefault(_symbols); - - var _utils = require("./utils"); - - var _utils2 = _interopRequireDefault(_utils); - - var _units = require("./units"); - - var _units2 = _interopRequireDefault(_units); - - var _unicodeRegexes = require("./unicodeRegexes"); - - var _ParseNode = require("./ParseNode"); - - var _ParseNode2 = _interopRequireDefault(_ParseNode); - - var _ParseError = require("./ParseError"); - - var _ParseError2 = _interopRequireDefault(_ParseError); - - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - - /** - * This file contains the parser used to parse out a TeX expression from the - * input. Since TeX isn't context-free, standard parsers don't work particularly - * well. - * - * The strategy of this parser is as such: - * - * The main functions (the `.parse...` ones) take a position in the current - * parse string to parse tokens from. The lexer (found in Lexer.js, stored at - * this.lexer) also supports pulling out tokens at arbitrary places. When - * individual tokens are needed at a position, the lexer is called to pull out a - * token, which is then used. - * - * The parser has a property called "mode" indicating the mode that - * the parser is currently in. Currently it has to be one of "math" or - * "text", which denotes whether the current environment is a math-y - * one or a text-y one (e.g. inside \text). Currently, this serves to - * limit the functions which can be used in text mode. - * - * The main functions then return an object which contains the useful data that - * was parsed at its given point, and a new position at the end of the parsed - * data. The main functions can call each other and continue the parsing by - * using the returned position as a new starting point. - * - * There are also extra `.handle...` functions, which pull out some reused - * functionality into self-contained functions. - * - * The earlier functions return ParseNodes. - * The later functions (which are called deeper in the parse) sometimes return - * ParseFuncOrArgument, which contain a ParseNode as well as some data about - * whether the parsed object is a function which is missing some arguments, or a - * standalone object which can be used as an argument to another function. - */ - - /** - * An initial function (without its arguments), or an argument to a function. - * The `result` argument should be a ParseNode. - */ - function ParseFuncOrArgument(result, isFunction, token) { - this.result = result; - // Is this a function (i.e. is it something defined in functions.js)? - this.isFunction = isFunction; - this.token = token; - } /* eslint no-constant-condition:0 */ - - var Parser = function () { - function Parser(input, settings) { - (0, _classCallCheck3.default)(this, Parser); - - // Create a new macro expander (gullet) and (indirectly via that) also a - // new lexer (mouth) for this parser (stomach, in the language of TeX) - this.gullet = new _MacroExpander2.default(input, settings.macros); - // Use old \color behavior (same as LaTeX's \textcolor) if requested. - // We do this after the macros object has been copied by MacroExpander. - if (settings.colorIsTextColor) { - this.gullet.macros["\\color"] = "\\textcolor"; - } - // Store the settings for use in parsing - this.settings = settings; - // Count leftright depth (for \middle errors) - this.leftrightDepth = 0; - } - - /** - * Checks a result to make sure it has the right type, and throws an - * appropriate error otherwise. - * - * @param {boolean=} consume whether to consume the expected token, - * defaults to true - */ - - - (0, _createClass3.default)(Parser, [{ - key: "expect", - value: function expect(text, consume) { - if (this.nextToken.text !== text) { - throw new _ParseError2.default("Expected '" + text + "', got '" + this.nextToken.text + "'", this.nextToken); - } - if (consume !== false) { - this.consume(); - } - } - - /** - * Considers the current look ahead token as consumed, - * and fetches the one after that as the new look ahead. - */ - - }, { - key: "consume", - value: function consume() { - this.nextToken = this.gullet.get(this.mode === "math"); - } - }, { - key: "switchMode", - value: function switchMode(newMode) { - this.gullet.unget(this.nextToken); - this.mode = newMode; - this.consume(); - } - - /** - * Main parsing function, which parses an entire input. - * - * @return {?Array.} - */ - - }, { - key: "parse", - value: function parse() { - // Try to parse the input - this.mode = "math"; - this.consume(); - var parse = this.parseInput(); - return parse; - } - - /** - * Parses an entire input tree. - */ - - }, { - key: "parseInput", - value: function parseInput() { - // Parse an expression - var expression = this.parseExpression(false); - // If we succeeded, make sure there's an EOF at the end - this.expect("EOF", false); - return expression; - } - }, { - key: "parseExpression", - - - /** - * Parses an "expression", which is a list of atoms. - * - * @param {boolean} breakOnInfix Should the parsing stop when we hit infix - * nodes? This happens when functions have higher precendence - * than infix nodes in implicit parses. - * - * @param {?string} breakOnTokenText The text of the token that the expression - * should end with, or `null` if something else should end the - * expression. - * - * @return {ParseNode} - */ - value: function parseExpression(breakOnInfix, breakOnTokenText) { - var body = []; - // Keep adding atoms to the body until we can't parse any more atoms (either - // we reached the end, a }, or a \right) - while (true) { - var lex = this.nextToken; - if (Parser.endOfExpression.indexOf(lex.text) !== -1) { - break; - } - if (breakOnTokenText && lex.text === breakOnTokenText) { - break; - } - if (breakOnInfix && _functions2.default[lex.text] && _functions2.default[lex.text].infix) { - break; - } - var atom = this.parseAtom(); - if (!atom) { - if (!this.settings.throwOnError && lex.text[0] === "\\") { - var errorNode = this.handleUnsupportedCmd(); - body.push(errorNode); - continue; - } - - break; - } - body.push(atom); - } - return this.handleInfixNodes(body); - } - - /** - * Rewrites infix operators such as \over with corresponding commands such - * as \frac. - * - * There can only be one infix operator per group. If there's more than one - * then the expression is ambiguous. This can be resolved by adding {}. - * - * @returns {Array} - */ - - }, { - key: "handleInfixNodes", - value: function handleInfixNodes(body) { - var overIndex = -1; - var funcName = void 0; - - for (var i = 0; i < body.length; i++) { - var node = body[i]; - if (node.type === "infix") { - if (overIndex !== -1) { - throw new _ParseError2.default("only one infix operator per group", node.value.token); - } - overIndex = i; - funcName = node.value.replaceWith; - } - } - - if (overIndex !== -1) { - var numerNode = void 0; - var denomNode = void 0; - - var numerBody = body.slice(0, overIndex); - var denomBody = body.slice(overIndex + 1); - - if (numerBody.length === 1 && numerBody[0].type === "ordgroup") { - numerNode = numerBody[0]; - } else { - numerNode = new _ParseNode2.default("ordgroup", numerBody, this.mode); - } - - if (denomBody.length === 1 && denomBody[0].type === "ordgroup") { - denomNode = denomBody[0]; - } else { - denomNode = new _ParseNode2.default("ordgroup", denomBody, this.mode); - } - - var value = this.callFunction(funcName, [numerNode, denomNode], null); - return [new _ParseNode2.default(value.type, value, this.mode)]; - } else { - return body; - } - } - - // The greediness of a superscript or subscript - - }, { - key: "handleSupSubscript", - - - /** - * Handle a subscript or superscript with nice errors. - */ - value: function handleSupSubscript(name) { - var symbolToken = this.nextToken; - var symbol = symbolToken.text; - this.consume(); - var group = this.parseGroup(); - - if (!group) { - if (!this.settings.throwOnError && this.nextToken.text[0] === "\\") { - return this.handleUnsupportedCmd(); - } else { - throw new _ParseError2.default("Expected group after '" + symbol + "'", symbolToken); - } - } else if (group.isFunction) { - // ^ and _ have a greediness, so handle interactions with functions' - // greediness - var funcGreediness = _functions2.default[group.result].greediness; - if (funcGreediness > Parser.SUPSUB_GREEDINESS) { - return this.parseFunction(group); - } else { - throw new _ParseError2.default("Got function '" + group.result + "' with no arguments " + "as " + name, symbolToken); - } - } else { - return group.result; - } - } - - /** - * Converts the textual input of an unsupported command into a text node - * contained within a color node whose color is determined by errorColor - */ - - }, { - key: "handleUnsupportedCmd", - value: function handleUnsupportedCmd() { - var text = this.nextToken.text; - var textordArray = []; - - for (var i = 0; i < text.length; i++) { - textordArray.push(new _ParseNode2.default("textord", text[i], "text")); - } - - var textNode = new _ParseNode2.default("text", { - body: textordArray, - type: "text" - }, this.mode); - - var colorNode = new _ParseNode2.default("color", { - color: this.settings.errorColor, - value: [textNode], - type: "color" - }, this.mode); - - this.consume(); - return colorNode; - } - - /** - * Parses a group with optional super/subscripts. - * - * @return {?ParseNode} - */ - - }, { - key: "parseAtom", - value: function parseAtom() { - // The body of an atom is an implicit group, so that things like - // \left(x\right)^2 work correctly. - var base = this.parseImplicitGroup(); - - // In text mode, we don't have superscripts or subscripts - if (this.mode === "text") { - return base; - } - - // Note that base may be empty (i.e. null) at this point. - - var superscript = void 0; - var subscript = void 0; - while (true) { - // Lex the first token - var lex = this.nextToken; - - if (lex.text === "\\limits" || lex.text === "\\nolimits") { - // We got a limit control - if (!base || base.type !== "op") { - throw new _ParseError2.default("Limit controls must follow a math operator", lex); - } else { - var limits = lex.text === "\\limits"; - base.value.limits = limits; - base.value.alwaysHandleSupSub = true; - } - this.consume(); - } else if (lex.text === "^") { - // We got a superscript start - if (superscript) { - throw new _ParseError2.default("Double superscript", lex); - } - superscript = this.handleSupSubscript("superscript"); - } else if (lex.text === "_") { - // We got a subscript start - if (subscript) { - throw new _ParseError2.default("Double subscript", lex); - } - subscript = this.handleSupSubscript("subscript"); - } else if (lex.text === "'") { - // We got a prime - if (superscript) { - throw new _ParseError2.default("Double superscript", lex); - } - var prime = new _ParseNode2.default("textord", "\\prime", this.mode); - - // Many primes can be grouped together, so we handle this here - var primes = [prime]; - this.consume(); - // Keep lexing tokens until we get something that's not a prime - while (this.nextToken.text === "'") { - // For each one, add another prime to the list - primes.push(prime); - this.consume(); - } - // If there's a superscript following the primes, combine that - // superscript in with the primes. - if (this.nextToken.text === "^") { - primes.push(this.handleSupSubscript("superscript")); - } - // Put everything into an ordgroup as the superscript - superscript = new _ParseNode2.default("ordgroup", primes, this.mode); - } else { - // If it wasn't ^, _, or ', stop parsing super/subscripts - break; - } - } - - if (superscript || subscript) { - // If we got either a superscript or subscript, create a supsub - return new _ParseNode2.default("supsub", { - base: base, - sup: superscript, - sub: subscript - }, this.mode); - } else { - // Otherwise return the original body - return base; - } - } - - // A list of the size-changing functions, for use in parseImplicitGroup - - - // A list of the style-changing functions, for use in parseImplicitGroup - - - // Old font functions - - }, { - key: "parseImplicitGroup", - - - /** - * Parses an implicit group, which is a group that starts at the end of a - * specified, and ends right before a higher explicit group ends, or at EOL. It - * is used for functions that appear to affect the current style, like \Large or - * \textrm, where instead of keeping a style we just pretend that there is an - * implicit grouping after it until the end of the group. E.g. - * small text {\Large large text} small text again - * It is also used for \left and \right to get the correct grouping. - * - * @return {?ParseNode} - */ - value: function parseImplicitGroup() { - var start = this.parseSymbol(); - - if (start == null) { - // If we didn't get anything we handle, fall back to parseFunction - return this.parseFunction(); - } - - var func = start.result; - - if (func === "\\left") { - // If we see a left: - // Parse the entire left function (including the delimiter) - var left = this.parseFunction(start); - // Parse out the implicit body - ++this.leftrightDepth; - var body = this.parseExpression(false); - --this.leftrightDepth; - // Check the next token - this.expect("\\right", false); - var right = this.parseFunction(); - return new _ParseNode2.default("leftright", { - body: body, - left: left.value.value, - right: right.value.value - }, this.mode); - } else if (func === "\\begin") { - // begin...end is similar to left...right - var begin = this.parseFunction(start); - var envName = begin.value.name; - if (!_environments2.default.hasOwnProperty(envName)) { - throw new _ParseError2.default("No such environment: " + envName, begin.value.nameGroup); - } - // Build the environment object. Arguments and other information will - // be made available to the begin and end methods using properties. - var env = _environments2.default[envName]; - var args = this.parseArguments("\\begin{" + envName + "}", env); - var context = { - mode: this.mode, - envName: envName, - parser: this, - positions: args.pop() - }; - var result = env.handler(context, args); - this.expect("\\end", false); - var endNameToken = this.nextToken; - var end = this.parseFunction(); - if (end.value.name !== envName) { - throw new _ParseError2.default("Mismatch: \\begin{" + envName + "} matched " + "by \\end{" + end.value.name + "}", endNameToken); - } - result.position = end.position; - return result; - } else if (_utils2.default.contains(Parser.sizeFuncs, func)) { - // If we see a sizing function, parse out the implicit body - this.consumeSpaces(); - var _body = this.parseExpression(false); - return new _ParseNode2.default("sizing", { - // Figure out what size to use based on the list of functions above - size: _utils2.default.indexOf(Parser.sizeFuncs, func) + 1, - value: _body - }, this.mode); - } else if (_utils2.default.contains(Parser.styleFuncs, func)) { - // If we see a styling function, parse out the implicit body - this.consumeSpaces(); - var _body2 = this.parseExpression(true); - return new _ParseNode2.default("styling", { - // Figure out what style to use by pulling out the style from - // the function name - style: func.slice(1, func.length - 5), - value: _body2 - }, this.mode); - } else if (func in Parser.oldFontFuncs) { - var style = Parser.oldFontFuncs[func]; - // If we see an old font function, parse out the implicit body - this.consumeSpaces(); - var _body3 = this.parseExpression(true); - if (style.slice(0, 4) === 'text') { - return new _ParseNode2.default("text", { - style: style, - body: new _ParseNode2.default("ordgroup", _body3, this.mode) - }, this.mode); - } else { - return new _ParseNode2.default("font", { - font: style, - body: new _ParseNode2.default("ordgroup", _body3, this.mode) - }, this.mode); - } - } else if (func === "\\color") { - // If we see a styling function, parse out the implicit body - var color = this.parseColorGroup(false); - if (!color) { - throw new _ParseError2.default("\\color not followed by color"); - } - var _body4 = this.parseExpression(true); - return new _ParseNode2.default("color", { - type: "color", - color: color.result.value, - value: _body4 - }, this.mode); - } else if (func === "$") { - if (this.mode === "math") { - throw new _ParseError2.default("$ within math mode"); - } - this.consume(); - var outerMode = this.mode; - this.switchMode("math"); - var _body5 = this.parseExpression(false, "$"); - this.expect("$", true); - this.switchMode(outerMode); - return new _ParseNode2.default("styling", { - style: "text", - value: _body5 - }, "math"); - } else { - // Defer to parseFunction if it's not a function we handle - return this.parseFunction(start); - } - } - - /** - * Parses an entire function, including its base and all of its arguments. - * The base might either have been parsed already, in which case - * it is provided as an argument, or it's the next group in the input. - * - * @param {ParseFuncOrArgument=} baseGroup optional as described above - * @return {?ParseNode} - */ - - }, { - key: "parseFunction", - value: function parseFunction(baseGroup) { - if (!baseGroup) { - baseGroup = this.parseGroup(); - } - - if (baseGroup) { - if (baseGroup.isFunction) { - var func = baseGroup.result; - var funcData = _functions2.default[func]; - if (this.mode === "text" && !funcData.allowedInText) { - throw new _ParseError2.default("Can't use function '" + func + "' in text mode", baseGroup.token); - } else if (this.mode === "math" && funcData.allowedInMath === false) { - throw new _ParseError2.default("Can't use function '" + func + "' in math mode", baseGroup.token); - } - - var args = this.parseArguments(func, funcData); - var token = baseGroup.token; - var result = this.callFunction(func, args, args.pop(), token); - return new _ParseNode2.default(result.type, result, this.mode); - } else { - return baseGroup.result; - } - } else { - return null; - } - } - - /** - * Call a function handler with a suitable context and arguments. - */ - - }, { - key: "callFunction", - value: function callFunction(name, args, positions, token) { - var context = { - funcName: name, - parser: this, - positions: positions, - token: token - }; - return _functions2.default[name].handler(context, args); - } - - /** - * Parses the arguments of a function or environment - * - * @param {string} func "\name" or "\begin{name}" - * @param {{numArgs:number,numOptionalArgs:number|undefined}} funcData - * @return the array of arguments, with the list of positions as last element - */ - - }, { - key: "parseArguments", - value: function parseArguments(func, funcData) { - var totalArgs = funcData.numArgs + funcData.numOptionalArgs; - if (totalArgs === 0) { - return [[this.pos]]; - } - - var baseGreediness = funcData.greediness; - var positions = [this.pos]; - var args = []; - - for (var i = 0; i < totalArgs; i++) { - var nextToken = this.nextToken; - var argType = funcData.argTypes && funcData.argTypes[i]; - var arg = void 0; - if (i < funcData.numOptionalArgs) { - if (argType) { - arg = this.parseGroupOfType(argType, true); - } else { - arg = this.parseGroup(true); - } - if (!arg) { - args.push(null); - positions.push(this.pos); - continue; - } - } else { - if (argType) { - arg = this.parseGroupOfType(argType); - } else { - arg = this.parseGroup(); - } - if (!arg) { - if (!this.settings.throwOnError && this.nextToken.text[0] === "\\") { - arg = new ParseFuncOrArgument(this.handleUnsupportedCmd(this.nextToken.text), false); - } else { - throw new _ParseError2.default("Expected group after '" + func + "'", nextToken); - } - } - } - var argNode = void 0; - if (arg.isFunction) { - var argGreediness = _functions2.default[arg.result].greediness; - if (argGreediness > baseGreediness) { - argNode = this.parseFunction(arg); - } else { - throw new _ParseError2.default("Got function '" + arg.result + "' as " + "argument to '" + func + "'", nextToken); - } - } else { - argNode = arg.result; - } - args.push(argNode); - positions.push(this.pos); - } - - args.push(positions); - - return args; - } - - /** - * Parses a group when the mode is changing. - * - * @return {?ParseFuncOrArgument} - */ - - }, { - key: "parseGroupOfType", - value: function parseGroupOfType(innerMode, optional) { - var outerMode = this.mode; - // Handle `original` argTypes - if (innerMode === "original") { - innerMode = outerMode; - } - - if (innerMode === "color") { - return this.parseColorGroup(optional); - } - if (innerMode === "size") { - return this.parseSizeGroup(optional); - } - - this.switchMode(innerMode); - if (innerMode === "text") { - // text mode is special because it should ignore the whitespace before - // it - this.consumeSpaces(); - } - // By the time we get here, innerMode is one of "text" or "math". - // We switch the mode of the parser, recurse, then restore the old mode. - var res = this.parseGroup(optional); - this.switchMode(outerMode); - return res; - } - }, { - key: "consumeSpaces", - value: function consumeSpaces() { - while (this.nextToken.text === " ") { - this.consume(); - } - } - - /** - * Parses a group, essentially returning the string formed by the - * brace-enclosed tokens plus some position information. - * - * @param {string} modeName Used to describe the mode in error messages - * @param {boolean=} optional Whether the group is optional or required - */ - - }, { - key: "parseStringGroup", - value: function parseStringGroup(modeName, optional) { - if (optional && this.nextToken.text !== "[") { - return null; - } - var outerMode = this.mode; - this.mode = "text"; - this.expect(optional ? "[" : "{"); - var str = ""; - var firstToken = this.nextToken; - var lastToken = firstToken; - while (this.nextToken.text !== (optional ? "]" : "}")) { - if (this.nextToken.text === "EOF") { - throw new _ParseError2.default("Unexpected end of input in " + modeName, firstToken.range(this.nextToken, str)); - } - lastToken = this.nextToken; - str += lastToken.text; - this.consume(); - } - this.mode = outerMode; - this.expect(optional ? "]" : "}"); - return firstToken.range(lastToken, str); - } - - /** - * Parses a regex-delimited group: the largest sequence of tokens - * whose concatenated strings match `regex`. Returns the string - * formed by the tokens plus some position information. - * - * @param {RegExp} regex - * @param {string} modeName Used to describe the mode in error messages - */ - - }, { - key: "parseRegexGroup", - value: function parseRegexGroup(regex, modeName) { - var outerMode = this.mode; - this.mode = "text"; - var firstToken = this.nextToken; - var lastToken = firstToken; - var str = ""; - while (this.nextToken.text !== "EOF" && regex.test(str + this.nextToken.text)) { - lastToken = this.nextToken; - str += lastToken.text; - this.consume(); - } - if (str === "") { - throw new _ParseError2.default("Invalid " + modeName + ": '" + firstToken.text + "'", firstToken); - } - this.mode = outerMode; - return firstToken.range(lastToken, str); - } - - /** - * Parses a color description. - */ - - }, { - key: "parseColorGroup", - value: function parseColorGroup(optional) { - var res = this.parseStringGroup("color", optional); - if (!res) { - return null; - } - var match = /^(#[a-z0-9]+|[a-z]+)$/i.exec(res.text); - if (!match) { - throw new _ParseError2.default("Invalid color: '" + res.text + "'", res); - } - return new ParseFuncOrArgument(new _ParseNode2.default("color", match[0], this.mode), false); - } - - /** - * Parses a size specification, consisting of magnitude and unit. - */ - - }, { - key: "parseSizeGroup", - value: function parseSizeGroup(optional) { - var res = void 0; - if (!optional && this.nextToken.text !== "{") { - res = this.parseRegexGroup(/^[-+]? *(?:$|\d+|\d+\.\d*|\.\d*) *[a-z]{0,2} *$/, "size"); - } else { - res = this.parseStringGroup("size", optional); - } - if (!res) { - return null; - } - var match = /([-+]?) *(\d+(?:\.\d*)?|\.\d+) *([a-z]{2})/.exec(res.text); - if (!match) { - throw new _ParseError2.default("Invalid size: '" + res.text + "'", res); - } - var data = { - number: +(match[1] + match[2]), // sign + magnitude, cast to number - unit: match[3] - }; - if (!_units2.default.validUnit(data)) { - throw new _ParseError2.default("Invalid unit: '" + data.unit + "'", res); - } - return new ParseFuncOrArgument(new _ParseNode2.default("size", data, this.mode), false); - } - - /** - * If the argument is false or absent, this parses an ordinary group, - * which is either a single nucleus (like "x") or an expression - * in braces (like "{x+y}"). - * If the argument is true, it parses either a bracket-delimited expression - * (like "[x+y]") or returns null to indicate the absence of a - * bracket-enclosed group. - * - * @param {boolean=} optional Whether the group is optional or required - * @return {?ParseFuncOrArgument} - */ - - }, { - key: "parseGroup", - value: function parseGroup(optional) { - var firstToken = this.nextToken; - // Try to parse an open brace - if (this.nextToken.text === (optional ? "[" : "{")) { - // If we get a brace, parse an expression - this.consume(); - var expression = this.parseExpression(false, optional ? "]" : null); - var lastToken = this.nextToken; - // Make sure we get a close brace - this.expect(optional ? "]" : "}"); - if (this.mode === "text") { - this.formLigatures(expression); - } - return new ParseFuncOrArgument(new _ParseNode2.default("ordgroup", expression, this.mode, firstToken, lastToken), false); - } else { - // Otherwise, just return a nucleus, or nothing for an optional group - return optional ? null : this.parseSymbol(); - } - } - - /** - * Form ligature-like combinations of characters for text mode. - * This includes inputs like "--", "---", "``" and "''". - * The result will simply replace multiple textord nodes with a single - * character in each value by a single textord node having multiple - * characters in its value. The representation is still ASCII source. - * - * @param {Array.} group the nodes of this group, - * list will be moified in place - */ - - }, { - key: "formLigatures", - value: function formLigatures(group) { - var n = group.length - 1; - for (var i = 0; i < n; ++i) { - var a = group[i]; - var v = a.value; - if (v === "-" && group[i + 1].value === "-") { - if (i + 1 < n && group[i + 2].value === "-") { - group.splice(i, 3, new _ParseNode2.default("textord", "---", "text", a, group[i + 2])); - n -= 2; - } else { - group.splice(i, 2, new _ParseNode2.default("textord", "--", "text", a, group[i + 1])); - n -= 1; - } - } - if ((v === "'" || v === "`") && group[i + 1].value === v) { - group.splice(i, 2, new _ParseNode2.default("textord", v + v, "text", a, group[i + 1])); - n -= 1; - } - } - } - - /** - * Parse a single symbol out of the string. Here, we handle both the functions - * we have defined, as well as the single character symbols - * - * @return {?ParseFuncOrArgument} - */ - - }, { - key: "parseSymbol", - value: function parseSymbol() { - var nucleus = this.nextToken; - - if (_functions2.default[nucleus.text]) { - this.consume(); - // If there exists a function with this name, we return the function and - // say that it is a function. - return new ParseFuncOrArgument(nucleus.text, true, nucleus); - } else if (_symbols2.default[this.mode][nucleus.text]) { - this.consume(); - // Otherwise if this is a no-argument function, find the type it - // corresponds to in the symbols map - return new ParseFuncOrArgument(new _ParseNode2.default(_symbols2.default[this.mode][nucleus.text].group, nucleus.text, this.mode, nucleus), false, nucleus); - } else if (this.mode === "text" && _unicodeRegexes.cjkRegex.test(nucleus.text)) { - this.consume(); - return new ParseFuncOrArgument(new _ParseNode2.default("textord", nucleus.text, this.mode, nucleus), false, nucleus); - } else if (nucleus.text === "$") { - return new ParseFuncOrArgument(nucleus.text, false, nucleus); - } else { - return null; - } - } - }]); - return Parser; - }(); - - Parser.endOfExpression = ["}", "\\end", "\\right", "&", "\\\\", "\\cr"]; - Parser.SUPSUB_GREEDINESS = 1; - Parser.sizeFuncs = ["\\tiny", "\\sixptsize", "\\scriptsize", "\\footnotesize", "\\small", "\\normalsize", "\\large", "\\Large", "\\LARGE", "\\huge", "\\Huge"]; - Parser.styleFuncs = ["\\displaystyle", "\\textstyle", "\\scriptstyle", "\\scriptscriptstyle"]; - Parser.oldFontFuncs = { - "\\rm": "mathrm", - "\\sf": "mathsf", - "\\tt": "mathtt", - "\\bf": "mathbf", - "\\it": "mathit" - }; - - - Parser.prototype.ParseNode = _ParseNode2.default; - - module.exports = Parser; - - },{"./MacroExpander":27,"./ParseError":29,"./ParseNode":30,"./environments":40,"./functions":43,"./symbols":48,"./unicodeRegexes":49,"./units":50,"./utils":51,"babel-runtime/helpers/classCallCheck":4,"babel-runtime/helpers/createClass":5}],32:[function(require,module,exports){ - - var _classCallCheck2 = require("babel-runtime/helpers/classCallCheck"); - - var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); - - var _utils = require("./utils"); - - var _utils2 = _interopRequireDefault(_utils); - - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - - /** - * The main Settings object - * - * The current options stored are: - * - displayMode: Whether the expression should be typeset as inline math - * (false, the default), meaning that the math starts in - * \textstyle and is placed in an inline-block); or as display - * math (true), meaning that the math starts in \displaystyle - * and is placed in a block with vertical margin. - */ - var Settings = function Settings(options) { - (0, _classCallCheck3.default)(this, Settings); - - // allow null options - options = options || {}; - this.displayMode = _utils2.default.deflt(options.displayMode, false); - this.throwOnError = _utils2.default.deflt(options.throwOnError, true); - this.errorColor = _utils2.default.deflt(options.errorColor, "#cc0000"); - this.macros = options.macros || {}; - this.colorIsTextColor = _utils2.default.deflt(options.colorIsTextColor, false); - }; /** - * This is a module for storing settings passed into KaTeX. It correctly handles - * default settings. - */ - - module.exports = Settings; - - },{"./utils":51,"babel-runtime/helpers/classCallCheck":4}],33:[function(require,module,exports){ - - var _classCallCheck2 = require("babel-runtime/helpers/classCallCheck"); - - var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); - - var _createClass2 = require("babel-runtime/helpers/createClass"); - - var _createClass3 = _interopRequireDefault(_createClass2); - - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - - /** - * This file contains information and classes for the various kinds of styles - * used in TeX. It provides a generic `Style` class, which holds information - * about a specific style. It then provides instances of all the different kinds - * of styles possible, and provides functions to move between them and get - * information about them. - */ - - /** - * The main style class. Contains a unique id for the style, a size (which is - * the same for cramped and uncramped version of a style), and a cramped flag. - */ - var Style = function () { - function Style(id, size, cramped) { - (0, _classCallCheck3.default)(this, Style); - - this.id = id; - this.size = size; - this.cramped = cramped; - } - - /** - * Get the style of a superscript given a base in the current style. - */ - - - (0, _createClass3.default)(Style, [{ - key: "sup", - value: function sup() { - return styles[_sup[this.id]]; - } - - /** - * Get the style of a subscript given a base in the current style. - */ - - }, { - key: "sub", - value: function sub() { - return styles[_sub[this.id]]; - } - - /** - * Get the style of a fraction numerator given the fraction in the current - * style. - */ - - }, { - key: "fracNum", - value: function fracNum() { - return styles[_fracNum[this.id]]; - } - - /** - * Get the style of a fraction denominator given the fraction in the current - * style. - */ - - }, { - key: "fracDen", - value: function fracDen() { - return styles[_fracDen[this.id]]; - } - - /** - * Get the cramped version of a style (in particular, cramping a cramped style - * doesn't change the style). - */ - - }, { - key: "cramp", - value: function cramp() { - return styles[_cramp[this.id]]; - } - - /** - * Get a text or display version of this style. - */ - - }, { - key: "text", - value: function text() { - return styles[_text[this.id]]; - } - - /** - * Return if this style is tightly spaced (scriptstyle/scriptscriptstyle) - */ - - }, { - key: "isTight", - value: function isTight() { - return this.size >= 2; - } - }]); - return Style; - }(); - - // IDs of the different styles - - - var D = 0; - var Dc = 1; - var T = 2; - var Tc = 3; - var S = 4; - var Sc = 5; - var SS = 6; - var SSc = 7; - - // Instances of the different styles - var styles = [new Style(D, 0, false), new Style(Dc, 0, true), new Style(T, 1, false), new Style(Tc, 1, true), new Style(S, 2, false), new Style(Sc, 2, true), new Style(SS, 3, false), new Style(SSc, 3, true)]; - - // Lookup tables for switching from one style to another - var _sup = [S, Sc, S, Sc, SS, SSc, SS, SSc]; - var _sub = [Sc, Sc, Sc, Sc, SSc, SSc, SSc, SSc]; - var _fracNum = [T, Tc, S, Sc, SS, SSc, SS, SSc]; - var _fracDen = [Tc, Tc, Sc, Sc, SSc, SSc, SSc, SSc]; - var _cramp = [Dc, Dc, Tc, Tc, Sc, Sc, SSc, SSc]; - var _text = [D, Dc, T, Tc, T, Tc, T, Tc]; - - // We only export some of the styles. Also, we don't export the `Style` class so - // no more styles can be generated. - module.exports = { - DISPLAY: styles[D], - TEXT: styles[T], - SCRIPT: styles[S], - SCRIPTSCRIPT: styles[SS] - }; - - },{"babel-runtime/helpers/classCallCheck":4,"babel-runtime/helpers/createClass":5}],34:[function(require,module,exports){ - - var _domTree = require("./domTree"); - - var _domTree2 = _interopRequireDefault(_domTree); - - var _fontMetrics = require("./fontMetrics"); - - var _fontMetrics2 = _interopRequireDefault(_fontMetrics); - - var _symbols = require("./symbols"); - - var _symbols2 = _interopRequireDefault(_symbols); - - var _utils = require("./utils"); - - var _utils2 = _interopRequireDefault(_utils); - - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - - // The following have to be loaded from Main-Italic font, using class mainit - /* eslint no-console:0 */ - /** - * This module contains general functions that can be used for building - * different kinds of domTree nodes in a consistent manner. - */ - - var mainitLetters = ["\\imath", // dotless i - "\\jmath", // dotless j - "\\pounds"]; - - /** - * Looks up the given symbol in fontMetrics, after applying any symbol - * replacements defined in symbol.js - */ - var lookupSymbol = function lookupSymbol(value, fontFamily, mode) { - // Replace the value with its replaced value from symbol.js - if (_symbols2.default[mode][value] && _symbols2.default[mode][value].replace) { - value = _symbols2.default[mode][value].replace; - } - return { - value: value, - metrics: _fontMetrics2.default.getCharacterMetrics(value, fontFamily) - }; - }; - - /** - * Makes a symbolNode after translation via the list of symbols in symbols.js. - * Correctly pulls out metrics for the character, and optionally takes a list of - * classes to be attached to the node. - * - * TODO: make argument order closer to makeSpan - * TODO: add a separate argument for math class (e.g. `mop`, `mbin`), which - * should if present come first in `classes`. - */ - var makeSymbol = function makeSymbol(value, fontFamily, mode, options, classes) { - var lookup = lookupSymbol(value, fontFamily, mode); - var metrics = lookup.metrics; - value = lookup.value; - - var symbolNode = void 0; - if (metrics) { - var italic = metrics.italic; - if (mode === "text") { - italic = 0; - } - symbolNode = new _domTree2.default.symbolNode(value, metrics.height, metrics.depth, italic, metrics.skew, classes); - } else { - // TODO(emily): Figure out a good way to only print this in development - typeof console !== "undefined" && console.warn("No character metrics for '" + value + "' in style '" + fontFamily + "'"); - symbolNode = new _domTree2.default.symbolNode(value, 0, 0, 0, 0, classes); - } - - if (options) { - symbolNode.maxFontSize = options.sizeMultiplier; - if (options.style.isTight()) { - symbolNode.classes.push("mtight"); - } - if (options.getColor()) { - symbolNode.style.color = options.getColor(); - } - } - - return symbolNode; - }; - - /** - * Makes a symbol in Main-Regular or AMS-Regular. - * Used for rel, bin, open, close, inner, and punct. - */ - var mathsym = function mathsym(value, mode, options, classes) { - // Decide what font to render the symbol in by its entry in the symbols - // table. - // Have a special case for when the value = \ because the \ is used as a - // textord in unsupported command errors but cannot be parsed as a regular - // text ordinal and is therefore not present as a symbol in the symbols - // table for text - if (value === "\\" || _symbols2.default[mode][value].font === "main") { - return makeSymbol(value, "Main-Regular", mode, options, classes); - } else { - return makeSymbol(value, "AMS-Regular", mode, options, classes.concat(["amsrm"])); - } - }; - - /** - * Makes a symbol in the default font for mathords and textords. - */ - var mathDefault = function mathDefault(value, mode, options, classes, type) { - if (type === "mathord") { - var fontLookup = mathit(value); - return makeSymbol(value, fontLookup.fontName, mode, options, classes.concat([fontLookup.fontClass])); - } else if (type === "textord") { - var font = _symbols2.default[mode][value] && _symbols2.default[mode][value].font; - if (font === "ams") { - return makeSymbol(value, "AMS-Regular", mode, options, classes.concat(["amsrm"])); - } else { - // if (font === "main") { - return makeSymbol(value, "Main-Regular", mode, options, classes.concat(["mathrm"])); - } - } else { - throw new Error("unexpected type: " + type + " in mathDefault"); - } - }; - - /** - * Determines which of the two font names (Main-Italic and Math-Italic) and - * corresponding style tags (mainit or mathit) to use for font "mathit", - * depending on the symbol. Use this function instead of fontMap for font - * "mathit". - */ - var mathit = function mathit(value, mode, options, classes) { - if (/[0-9]/.test(value.charAt(0)) || - // glyphs for \imath and \jmath do not exist in Math-Italic so we - // need to use Main-Italic instead - _utils2.default.contains(mainitLetters, value)) { - return { - fontName: "Main-Italic", - fontClass: "mainit" - }; - } else { - return { - fontName: "Math-Italic", - fontClass: "mathit" - }; - } - }; - - /** - * Makes either a mathord or textord in the correct font and color. - */ - var makeOrd = function makeOrd(group, options, type) { - var mode = group.mode; - var value = group.value; - - var classes = ["mord"]; - - var font = options.font; - if (font) { - var fontLookup = void 0; - if (font === "mathit" || _utils2.default.contains(mainitLetters, value)) { - fontLookup = mathit(value); - } else { - fontLookup = fontMap[font]; - } - if (lookupSymbol(value, fontLookup.fontName, mode).metrics) { - return makeSymbol(value, fontLookup.fontName, mode, options, classes.concat([fontLookup.fontClass || font])); - } else { - return mathDefault(value, mode, options, classes, type); - } - } else { - return mathDefault(value, mode, options, classes, type); - } - }; - - /** - * Calculate the height, depth, and maxFontSize of an element based on its - * children. - */ - var sizeElementFromChildren = function sizeElementFromChildren(elem) { - var height = 0; - var depth = 0; - var maxFontSize = 0; - - if (elem.children) { - for (var i = 0; i < elem.children.length; i++) { - if (elem.children[i].height > height) { - height = elem.children[i].height; - } - if (elem.children[i].depth > depth) { - depth = elem.children[i].depth; - } - if (elem.children[i].maxFontSize > maxFontSize) { - maxFontSize = elem.children[i].maxFontSize; - } - } - } - - elem.height = height; - elem.depth = depth; - elem.maxFontSize = maxFontSize; - }; - - /** - * Makes a span with the given list of classes, list of children, and options. - * - * TODO: Ensure that `options` is always provided (currently some call sites - * don't pass it). - * TODO: add a separate argument for math class (e.g. `mop`, `mbin`), which - * should if present come first in `classes`. - */ - var makeSpan = function makeSpan(classes, children, options) { - var span = new _domTree2.default.span(classes, children, options); - - sizeElementFromChildren(span); - - return span; - }; - - /** - * Prepends the given children to the given span, updating height, depth, and - * maxFontSize. - */ - var prependChildren = function prependChildren(span, children) { - span.children = children.concat(span.children); - - sizeElementFromChildren(span); - }; - - /** - * Makes a document fragment with the given list of children. - */ - var makeFragment = function makeFragment(children) { - var fragment = new _domTree2.default.documentFragment(children); - - sizeElementFromChildren(fragment); - - return fragment; - }; - - /** - * Makes a vertical list by stacking elements and kerns on top of each other. - * Allows for many different ways of specifying the positioning method. - * - * Arguments: - * - children: A list of child or kern nodes to be stacked on top of each other - * (i.e. the first element will be at the bottom, and the last at - * the top). Element nodes are specified as - * {type: "elem", elem: node} - * while kern nodes are specified as - * {type: "kern", size: size} - * - positionType: The method by which the vlist should be positioned. Valid - * values are: - * - "individualShift": The children list only contains elem - * nodes, and each node contains an extra - * "shift" value of how much it should be - * shifted (note that shifting is always - * moving downwards). positionData is - * ignored. - * - "top": The positionData specifies the topmost point of - * the vlist (note this is expected to be a height, - * so positive values move up) - * - "bottom": The positionData specifies the bottommost point - * of the vlist (note this is expected to be a - * depth, so positive values move down - * - "shift": The vlist will be positioned such that its - * baseline is positionData away from the baseline - * of the first child. Positive values move - * downwards. - * - "firstBaseline": The vlist will be positioned such that - * its baseline is aligned with the - * baseline of the first child. - * positionData is ignored. (this is - * equivalent to "shift" with - * positionData=0) - * - positionData: Data used in different ways depending on positionType - * - options: An Options object - * - */ - var makeVList = function makeVList(children, positionType, positionData, options) { - var depth = void 0; - var currPos = void 0; - var i = void 0; - if (positionType === "individualShift") { - var oldChildren = children; - children = [oldChildren[0]]; - - // Add in kerns to the list of children to get each element to be - // shifted to the correct specified shift - depth = -oldChildren[0].shift - oldChildren[0].elem.depth; - currPos = depth; - for (i = 1; i < oldChildren.length; i++) { - var diff = -oldChildren[i].shift - currPos - oldChildren[i].elem.depth; - var size = diff - (oldChildren[i - 1].elem.height + oldChildren[i - 1].elem.depth); - - currPos = currPos + diff; - - children.push({ type: "kern", size: size }); - children.push(oldChildren[i]); - } - } else if (positionType === "top") { - // We always start at the bottom, so calculate the bottom by adding up - // all the sizes - var bottom = positionData; - for (i = 0; i < children.length; i++) { - if (children[i].type === "kern") { - bottom -= children[i].size; - } else { - bottom -= children[i].elem.height + children[i].elem.depth; - } - } - depth = bottom; - } else if (positionType === "bottom") { - depth = -positionData; - } else if (positionType === "shift") { - depth = -children[0].elem.depth - positionData; - } else if (positionType === "firstBaseline") { - depth = -children[0].elem.depth; - } else { - depth = 0; - } - - // Create a strut that is taller than any list item. The strut is added to - // each item, where it will determine the item's baseline. Since it has - // `overflow:hidden`, the strut's top edge will sit on the item's line box's - // top edge and the strut's bottom edge will sit on the item's baseline, - // with no additional line-height spacing. This allows the item baseline to - // be positioned precisely without worrying about font ascent and - // line-height. - var pstrutSize = 0; - for (i = 0; i < children.length; i++) { - if (children[i].type === "elem") { - var child = children[i].elem; - pstrutSize = Math.max(pstrutSize, child.maxFontSize, child.height); - } - } - pstrutSize += 2; - var pstrut = makeSpan(["pstrut"], []); - pstrut.style.height = pstrutSize + "em"; - - // Create a new list of actual children at the correct offsets - var realChildren = []; - var minPos = depth; - var maxPos = depth; - currPos = depth; - for (i = 0; i < children.length; i++) { - if (children[i].type === "kern") { - currPos += children[i].size; - } else { - var _child = children[i].elem; - - var childWrap = makeSpan([], [pstrut, _child]); - childWrap.style.top = -pstrutSize - currPos - _child.depth + "em"; - if (children[i].marginLeft) { - childWrap.style.marginLeft = children[i].marginLeft; - } - if (children[i].marginRight) { - childWrap.style.marginRight = children[i].marginRight; - } - - realChildren.push(childWrap); - currPos += _child.height + _child.depth; - } - minPos = Math.min(minPos, currPos); - maxPos = Math.max(maxPos, currPos); - } - - // The vlist contents go in a table-cell with `vertical-align:bottom`. - // This cell's bottom edge will determine the containing table's baseline - // without overly expanding the containing line-box. - var vlist = makeSpan(["vlist"], realChildren); - vlist.style.height = maxPos + "em"; - - // A second row is used if necessary to represent the vlist's depth. - var rows = void 0; - if (minPos < 0) { - var depthStrut = makeSpan(["vlist"], []); - depthStrut.style.height = -minPos + "em"; - - // Safari wants the first row to have inline content; otherwise it - // puts the bottom of the *second* row on the baseline. - var topStrut = makeSpan(["vlist-s"], [new _domTree2.default.symbolNode("\u200B")]); - - rows = [makeSpan(["vlist-r"], [vlist, topStrut]), makeSpan(["vlist-r"], [depthStrut])]; - } else { - rows = [makeSpan(["vlist-r"], [vlist])]; - } - - var vtable = makeSpan(["vlist-t"], rows); - if (rows.length === 2) { - vtable.classes.push("vlist-t2"); - } - vtable.height = maxPos; - vtable.depth = -minPos; - return vtable; - }; - - // A map of spacing functions to their attributes, like size and corresponding - // CSS class - var spacingFunctions = { - "\\qquad": { - size: "2em", - className: "qquad" - }, - "\\quad": { - size: "1em", - className: "quad" - }, - "\\enspace": { - size: "0.5em", - className: "enspace" - }, - "\\;": { - size: "0.277778em", - className: "thickspace" - }, - "\\:": { - size: "0.22222em", - className: "mediumspace" - }, - "\\,": { - size: "0.16667em", - className: "thinspace" - }, - "\\!": { - size: "-0.16667em", - className: "negativethinspace" - } - }; - - /** - * Maps TeX font commands to objects containing: - * - variant: string used for "mathvariant" attribute in buildMathML.js - * - fontName: the "style" parameter to fontMetrics.getCharacterMetrics - */ - // A map between tex font commands an MathML mathvariant attribute values - var fontMap = { - // styles - "mathbf": { - variant: "bold", - fontName: "Main-Bold" - }, - "mathrm": { - variant: "normal", - fontName: "Main-Regular" - }, - "textit": { - variant: "italic", - fontName: "Main-Italic" - }, - - // "mathit" is missing because it requires the use of two fonts: Main-Italic - // and Math-Italic. This is handled by a special case in makeOrd which ends - // up calling mathit. - - // families - "mathbb": { - variant: "double-struck", - fontName: "AMS-Regular" - }, - "mathcal": { - variant: "script", - fontName: "Caligraphic-Regular" - }, - "mathfrak": { - variant: "fraktur", - fontName: "Fraktur-Regular" - }, - "mathscr": { - variant: "script", - fontName: "Script-Regular" - }, - "mathsf": { - variant: "sans-serif", - fontName: "SansSerif-Regular" - }, - "mathtt": { - variant: "monospace", - fontName: "Typewriter-Regular" - } - }; - - module.exports = { - fontMap: fontMap, - makeSymbol: makeSymbol, - mathsym: mathsym, - makeSpan: makeSpan, - makeFragment: makeFragment, - makeVList: makeVList, - makeOrd: makeOrd, - prependChildren: prependChildren, - spacingFunctions: spacingFunctions - }; - - },{"./domTree":39,"./fontMetrics":41,"./symbols":48,"./utils":51}],35:[function(require,module,exports){ - - var _stringify = require("babel-runtime/core-js/json/stringify"); - - var _stringify2 = _interopRequireDefault(_stringify); - - var _ParseError = require("./ParseError"); - - var _ParseError2 = _interopRequireDefault(_ParseError); - - var _Style = require("./Style"); - - var _Style2 = _interopRequireDefault(_Style); - - var _buildCommon = require("./buildCommon"); - - var _buildCommon2 = _interopRequireDefault(_buildCommon); - - var _delimiter = require("./delimiter"); - - var _delimiter2 = _interopRequireDefault(_delimiter); - - var _domTree = require("./domTree"); - - var _domTree2 = _interopRequireDefault(_domTree); - - var _units = require("./units"); - - var _units2 = _interopRequireDefault(_units); - - var _utils = require("./utils"); - - var _utils2 = _interopRequireDefault(_utils); - - var _stretchy = require("./stretchy"); - - var _stretchy2 = _interopRequireDefault(_stretchy); - - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - - /* eslint no-console:0 */ - /** - * This file does the main work of building a domTree structure from a parse - * tree. The entry point is the `buildHTML` function, which takes a parse tree. - * Then, the buildExpression, buildGroup, and various groupTypes functions are - * called, to produce a final HTML tree. - */ - - var isSpace = function isSpace(node) { - return node instanceof _domTree2.default.span && node.classes[0] === "mspace"; - }; - - // Binary atoms (first class `mbin`) change into ordinary atoms (`mord`) - // depending on their surroundings. See TeXbook pg. 442-446, Rules 5 and 6, - // and the text before Rule 19. - var isBin = function isBin(node) { - return node && node.classes[0] === "mbin"; - }; - - var isBinLeftCanceller = function isBinLeftCanceller(node, isRealGroup) { - // TODO: This code assumes that a node's math class is the first element - // of its `classes` array. A later cleanup should ensure this, for - // instance by changing the signature of `makeSpan`. - if (node) { - return _utils2.default.contains(["mbin", "mopen", "mrel", "mop", "mpunct"], node.classes[0]); - } else { - return isRealGroup; - } - }; - - var isBinRightCanceller = function isBinRightCanceller(node, isRealGroup) { - if (node) { - return _utils2.default.contains(["mrel", "mclose", "mpunct"], node.classes[0]); - } else { - return isRealGroup; - } - }; - - /** - * Splice out any spaces from `children` starting at position `i`, and return - * the spliced-out array. Returns null if `children[i]` does not exist or is not - * a space. - */ - var spliceSpaces = function spliceSpaces(children, i) { - var j = i; - while (j < children.length && isSpace(children[j])) { - j++; - } - if (j === i) { - return null; - } else { - return children.splice(i, j - i); - } - }; - - /** - * Take a list of nodes, build them in order, and return a list of the built - * nodes. documentFragments are flattened into their contents, so the - * returned list contains no fragments. `isRealGroup` is true if `expression` - * is a real group (no atoms will be added on either side), as opposed to - * a partial group (e.g. one created by \color). - */ - var buildExpression = function buildExpression(expression, options, isRealGroup) { - // Parse expressions into `groups`. - var groups = []; - for (var i = 0; i < expression.length; i++) { - var group = expression[i]; - var output = buildGroup(group, options); - if (output instanceof _domTree2.default.documentFragment) { - Array.prototype.push.apply(groups, output.children); - } else { - groups.push(output); - } - } - // At this point `groups` consists entirely of `symbolNode`s and `span`s. - - // Explicit spaces (e.g., \;, \,) should be ignored with respect to atom - // spacing (e.g., "add thick space between mord and mrel"). Since CSS - // adjacency rules implement atom spacing, spaces should be invisible to - // CSS. So we splice them out of `groups` and into the atoms themselves. - for (var _i = 0; _i < groups.length; _i++) { - var spaces = spliceSpaces(groups, _i); - if (spaces) { - // Splicing of spaces may have removed all remaining groups. - if (_i < groups.length) { - // If there is a following group, move space within it. - if (groups[_i] instanceof _domTree2.default.symbolNode) { - groups[_i] = (0, _buildCommon.makeSpan)([].concat(groups[_i].classes), [groups[_i]]); - } - _buildCommon2.default.prependChildren(groups[_i], spaces); - } else { - // Otherwise, put any spaces back at the end of the groups. - Array.prototype.push.apply(groups, spaces); - break; - } - } - } - - // Binary operators change to ordinary symbols in some contexts. - for (var _i2 = 0; _i2 < groups.length; _i2++) { - if (isBin(groups[_i2]) && (isBinLeftCanceller(groups[_i2 - 1], isRealGroup) || isBinRightCanceller(groups[_i2 + 1], isRealGroup))) { - groups[_i2].classes[0] = "mord"; - } - } - - // Process \\not commands within the group. - // TODO(kevinb): Handle multiple \\not commands in a row. - // TODO(kevinb): Handle \\not{abc} correctly. The \\not should appear over - // the 'a' instead of the 'c'. - for (var _i3 = 0; _i3 < groups.length; _i3++) { - if (groups[_i3].value === "\u0338" && _i3 + 1 < groups.length) { - var children = groups.slice(_i3, _i3 + 2); - - children[0].classes = ["mainrm"]; - // \u0338 is a combining glyph so we could reorder the children so - // that it comes after the other glyph. This works correctly on - // most browsers except for Safari. Instead we absolutely position - // the glyph and set its right side to match that of the other - // glyph which is visually equivalent. - children[0].style.position = "absolute"; - children[0].style.right = "0"; - - // Copy the classes from the second glyph to the new container. - // This is so it behaves the same as though there was no \\not. - var classes = groups[_i3 + 1].classes; - var container = (0, _buildCommon.makeSpan)(classes, children); - - // LaTeX adds a space between ords separated by a \\not. - if (classes.indexOf("mord") !== -1) { - // \glue(\thickmuskip) 2.77771 plus 2.77771 - container.style.paddingLeft = "0.277771em"; - } - - // Ensure that the \u0338 is positioned relative to the container. - container.style.position = "relative"; - groups.splice(_i3, 2, container); - } - } - - return groups; - }; - - // Return math atom class (mclass) of a domTree. - var getTypeOfDomTree = function getTypeOfDomTree(node) { - if (node instanceof _domTree2.default.documentFragment) { - if (node.children.length) { - return getTypeOfDomTree(node.children[node.children.length - 1]); - } - } else { - if (_utils2.default.contains(["mord", "mop", "mbin", "mrel", "mopen", "mclose", "mpunct", "minner"], node.classes[0])) { - return node.classes[0]; - } - } - return null; - }; - - /** - * Sometimes, groups perform special rules when they have superscripts or - * subscripts attached to them. This function lets the `supsub` group know that - * its inner element should handle the superscripts and subscripts instead of - * handling them itself. - */ - var shouldHandleSupSub = function shouldHandleSupSub(group, options) { - if (!group.value.base) { - return false; - } else { - var base = group.value.base; - if (base.type === "op") { - // Operators handle supsubs differently when they have limits - // (e.g. `\displaystyle\sum_2^3`) - return base.value.limits && (options.style.size === _Style2.default.DISPLAY.size || base.value.alwaysHandleSupSub); - } else if (base.type === "accent") { - return isCharacterBox(base.value.base); - } else if (base.type === "horizBrace") { - var isSup = group.value.sub ? false : true; - return isSup === base.value.isOver; - } else { - return null; - } - } - }; - - /** - * Sometimes we want to pull out the innermost element of a group. In most - * cases, this will just be the group itself, but when ordgroups and colors have - * a single element, we want to pull that out. - */ - var getBaseElem = function getBaseElem(group) { - if (!group) { - return false; - } else if (group.type === "ordgroup") { - if (group.value.length === 1) { - return getBaseElem(group.value[0]); - } else { - return group; - } - } else if (group.type === "color") { - if (group.value.value.length === 1) { - return getBaseElem(group.value.value[0]); - } else { - return group; - } - } else if (group.type === "font") { - return getBaseElem(group.value.body); - } else { - return group; - } - }; - - /** - * TeXbook algorithms often reference "character boxes", which are simply groups - * with a single character in them. To decide if something is a character box, - * we find its innermost group, and see if it is a single character. - */ - var isCharacterBox = function isCharacterBox(group) { - var baseElem = getBaseElem(group); - - // These are all they types of groups which hold single characters - return baseElem.type === "mathord" || baseElem.type === "textord" || baseElem.type === "bin" || baseElem.type === "rel" || baseElem.type === "inner" || baseElem.type === "open" || baseElem.type === "close" || baseElem.type === "punct"; - }; - - var makeNullDelimiter = function makeNullDelimiter(options, classes) { - var moreClasses = ["nulldelimiter"].concat(options.baseSizingClasses()); - return (0, _buildCommon.makeSpan)(classes.concat(moreClasses)); - }; - - /** - * This is a map of group types to the function used to handle that type. - * Simpler types come at the beginning, while complicated types come afterwards. - */ - var groupTypes = {}; - - groupTypes.mathord = function (group, options) { - return _buildCommon2.default.makeOrd(group, options, "mathord"); - }; - - groupTypes.textord = function (group, options) { - return _buildCommon2.default.makeOrd(group, options, "textord"); - }; - - groupTypes.bin = function (group, options) { - return _buildCommon2.default.mathsym(group.value, group.mode, options, ["mbin"]); - }; - - groupTypes.rel = function (group, options) { - return _buildCommon2.default.mathsym(group.value, group.mode, options, ["mrel"]); - }; - - groupTypes.open = function (group, options) { - return _buildCommon2.default.mathsym(group.value, group.mode, options, ["mopen"]); - }; - - groupTypes.close = function (group, options) { - return _buildCommon2.default.mathsym(group.value, group.mode, options, ["mclose"]); - }; - - groupTypes.inner = function (group, options) { - return _buildCommon2.default.mathsym(group.value, group.mode, options, ["minner"]); - }; - - groupTypes.punct = function (group, options) { - return _buildCommon2.default.mathsym(group.value, group.mode, options, ["mpunct"]); - }; - - groupTypes.ordgroup = function (group, options) { - return (0, _buildCommon.makeSpan)(["mord"], buildExpression(group.value, options, true), options); - }; - - groupTypes.text = function (group, options) { - var newOptions = options.withFont(group.value.style); - var inner = buildExpression(group.value.body, newOptions, true); - for (var i = 0; i < inner.length - 1; i++) { - if (inner[i].tryCombine(inner[i + 1])) { - inner.splice(i + 1, 1); - i--; - } - } - return (0, _buildCommon.makeSpan)(["mord", "text"], inner, newOptions); - }; - - groupTypes.color = function (group, options) { - var elements = buildExpression(group.value.value, options.withColor(group.value.color), false); - - // \color isn't supposed to affect the type of the elements it contains. - // To accomplish this, we wrap the results in a fragment, so the inner - // elements will be able to directly interact with their neighbors. For - // example, `\color{red}{2 +} 3` has the same spacing as `2 + 3` - return new _buildCommon2.default.makeFragment(elements); - }; - - groupTypes.supsub = function (group, options) { - // Superscript and subscripts are handled in the TeXbook on page - // 445-446, rules 18(a-f). - - // Here is where we defer to the inner group if it should handle - // superscripts and subscripts itself. - if (shouldHandleSupSub(group, options)) { - return groupTypes[group.value.base.type](group, options); - } - - var base = buildGroup(group.value.base, options); - var supm = void 0; - var subm = void 0; - - var metrics = options.fontMetrics(); - var newOptions = void 0; - - // Rule 18a - var supShift = 0; - var subShift = 0; - - if (group.value.sup) { - newOptions = options.havingStyle(options.style.sup()); - supm = buildGroup(group.value.sup, newOptions, options); - if (!isCharacterBox(group.value.base)) { - supShift = base.height - newOptions.fontMetrics().supDrop * newOptions.sizeMultiplier / options.sizeMultiplier; - } - } - - if (group.value.sub) { - newOptions = options.havingStyle(options.style.sub()); - subm = buildGroup(group.value.sub, newOptions, options); - if (!isCharacterBox(group.value.base)) { - subShift = base.depth + newOptions.fontMetrics().subDrop * newOptions.sizeMultiplier / options.sizeMultiplier; - } - } - - // Rule 18c - var minSupShift = void 0; - if (options.style === _Style2.default.DISPLAY) { - minSupShift = metrics.sup1; - } else if (options.style.cramped) { - minSupShift = metrics.sup3; - } else { - minSupShift = metrics.sup2; - } - - // scriptspace is a font-size-independent size, so scale it - // appropriately - var multiplier = options.sizeMultiplier; - var scriptspace = 0.5 / metrics.ptPerEm / multiplier + "em"; - - var supsub = void 0; - if (!group.value.sup) { - // Rule 18b - subShift = Math.max(subShift, metrics.sub1, subm.height - 0.8 * metrics.xHeight); - - var vlistElem = [{ type: "elem", elem: subm, marginRight: scriptspace }]; - // Subscripts shouldn't be shifted by the base's italic correction. - // Account for that by shifting the subscript back the appropriate - // amount. Note we only do this when the base is a single symbol. - if (base instanceof _domTree2.default.symbolNode) { - vlistElem[0].marginLeft = -base.italic + "em"; - } - - supsub = _buildCommon2.default.makeVList(vlistElem, "shift", subShift, options); - } else if (!group.value.sub) { - // Rule 18c, d - supShift = Math.max(supShift, minSupShift, supm.depth + 0.25 * metrics.xHeight); - - supsub = _buildCommon2.default.makeVList([{ type: "elem", elem: supm, marginRight: scriptspace }], "shift", -supShift, options); - } else { - supShift = Math.max(supShift, minSupShift, supm.depth + 0.25 * metrics.xHeight); - subShift = Math.max(subShift, metrics.sub2); - - var ruleWidth = metrics.defaultRuleThickness; - - // Rule 18e - if (supShift - supm.depth - (subm.height - subShift) < 4 * ruleWidth) { - subShift = 4 * ruleWidth - (supShift - supm.depth) + subm.height; - var psi = 0.8 * metrics.xHeight - (supShift - supm.depth); - if (psi > 0) { - supShift += psi; - subShift -= psi; - } - } - - var _vlistElem = [{ type: "elem", elem: subm, shift: subShift, marginRight: scriptspace }, { type: "elem", elem: supm, shift: -supShift, marginRight: scriptspace }]; - // See comment above about subscripts not being shifted - if (base instanceof _domTree2.default.symbolNode) { - _vlistElem[0].marginLeft = -base.italic + "em"; - } - - supsub = _buildCommon2.default.makeVList(_vlistElem, "individualShift", null, options); - } - - // We ensure to wrap the supsub vlist in a span.msupsub to reset text-align - var mclass = getTypeOfDomTree(base) || "mord"; - return (0, _buildCommon.makeSpan)([mclass], [base, (0, _buildCommon.makeSpan)(["msupsub"], [supsub])], options); - }; - - groupTypes.genfrac = function (group, options) { - // Fractions are handled in the TeXbook on pages 444-445, rules 15(a-e). - // Figure out what style this fraction should be in based on the - // function used - var style = options.style; - if (group.value.size === "display") { - style = _Style2.default.DISPLAY; - } else if (group.value.size === "text") { - style = _Style2.default.TEXT; - } - - var nstyle = style.fracNum(); - var dstyle = style.fracDen(); - var newOptions = void 0; - - newOptions = options.havingStyle(nstyle); - var numerm = buildGroup(group.value.numer, newOptions, options); - - newOptions = options.havingStyle(dstyle); - var denomm = buildGroup(group.value.denom, newOptions, options); - - var rule = void 0; - var ruleWidth = void 0; - var ruleSpacing = void 0; - if (group.value.hasBarLine) { - rule = makeLineSpan("frac-line", options); - ruleWidth = rule.height; - ruleSpacing = rule.height; - } else { - rule = null; - ruleWidth = 0; - ruleSpacing = options.fontMetrics().defaultRuleThickness; - } - - // Rule 15b - var numShift = void 0; - var clearance = void 0; - var denomShift = void 0; - if (style.size === _Style2.default.DISPLAY.size) { - numShift = options.fontMetrics().num1; - if (ruleWidth > 0) { - clearance = 3 * ruleSpacing; - } else { - clearance = 7 * ruleSpacing; - } - denomShift = options.fontMetrics().denom1; - } else { - if (ruleWidth > 0) { - numShift = options.fontMetrics().num2; - clearance = ruleSpacing; - } else { - numShift = options.fontMetrics().num3; - clearance = 3 * ruleSpacing; - } - denomShift = options.fontMetrics().denom2; - } - - var frac = void 0; - if (ruleWidth === 0) { - // Rule 15c - var candidateClearance = numShift - numerm.depth - (denomm.height - denomShift); - if (candidateClearance < clearance) { - numShift += 0.5 * (clearance - candidateClearance); - denomShift += 0.5 * (clearance - candidateClearance); - } - - frac = _buildCommon2.default.makeVList([{ type: "elem", elem: denomm, shift: denomShift }, { type: "elem", elem: numerm, shift: -numShift }], "individualShift", null, options); - } else { - // Rule 15d - var axisHeight = options.fontMetrics().axisHeight; - - if (numShift - numerm.depth - (axisHeight + 0.5 * ruleWidth) < clearance) { - numShift += clearance - (numShift - numerm.depth - (axisHeight + 0.5 * ruleWidth)); - } - - if (axisHeight - 0.5 * ruleWidth - (denomm.height - denomShift) < clearance) { - denomShift += clearance - (axisHeight - 0.5 * ruleWidth - (denomm.height - denomShift)); - } - - var midShift = -(axisHeight - 0.5 * ruleWidth); - - frac = _buildCommon2.default.makeVList([{ type: "elem", elem: denomm, shift: denomShift }, { type: "elem", elem: rule, shift: midShift }, { type: "elem", elem: numerm, shift: -numShift }], "individualShift", null, options); - } - - // Since we manually change the style sometimes (with \dfrac or \tfrac), - // account for the possible size change here. - newOptions = options.havingStyle(style); - frac.height *= newOptions.sizeMultiplier / options.sizeMultiplier; - frac.depth *= newOptions.sizeMultiplier / options.sizeMultiplier; - - // Rule 15e - var delimSize = void 0; - if (style.size === _Style2.default.DISPLAY.size) { - delimSize = options.fontMetrics().delim1; - } else { - delimSize = options.fontMetrics().delim2; - } - - var leftDelim = void 0; - var rightDelim = void 0; - if (group.value.leftDelim == null) { - leftDelim = makeNullDelimiter(options, ["mopen"]); - } else { - leftDelim = _delimiter2.default.customSizedDelim(group.value.leftDelim, delimSize, true, options.havingStyle(style), group.mode, ["mopen"]); - } - if (group.value.rightDelim == null) { - rightDelim = makeNullDelimiter(options, ["mclose"]); - } else { - rightDelim = _delimiter2.default.customSizedDelim(group.value.rightDelim, delimSize, true, options.havingStyle(style), group.mode, ["mclose"]); - } - - return (0, _buildCommon.makeSpan)(["mord"].concat(newOptions.sizingClasses(options)), [leftDelim, (0, _buildCommon.makeSpan)(["mfrac"], [frac]), rightDelim], options); - }; - - groupTypes.array = function (group, options) { - var r = void 0; - var c = void 0; - var nr = group.value.body.length; - var nc = 0; - var body = new Array(nr); - - // Horizontal spacing - var pt = 1 / options.fontMetrics().ptPerEm; - var arraycolsep = 5 * pt; // \arraycolsep in article.cls - - // Vertical spacing - var baselineskip = 12 * pt; // see size10.clo - // Default \jot from ltmath.dtx - // TODO(edemaine): allow overriding \jot via \setlength (#687) - var jot = 3 * pt; - // Default \arraystretch from lttab.dtx - // TODO(gagern): may get redefined once we have user-defined macros - var arraystretch = _utils2.default.deflt(group.value.arraystretch, 1); - var arrayskip = arraystretch * baselineskip; - var arstrutHeight = 0.7 * arrayskip; // \strutbox in ltfsstrc.dtx and - var arstrutDepth = 0.3 * arrayskip; // \@arstrutbox in lttab.dtx - - var totalHeight = 0; - for (r = 0; r < group.value.body.length; ++r) { - var inrow = group.value.body[r]; - var height = arstrutHeight; // \@array adds an \@arstrut - var depth = arstrutDepth; // to each tow (via the template) - - if (nc < inrow.length) { - nc = inrow.length; - } - - var outrow = new Array(inrow.length); - for (c = 0; c < inrow.length; ++c) { - var elt = buildGroup(inrow[c], options); - if (depth < elt.depth) { - depth = elt.depth; - } - if (height < elt.height) { - height = elt.height; - } - outrow[c] = elt; - } - - var gap = 0; - if (group.value.rowGaps[r]) { - gap = _units2.default.calculateSize(group.value.rowGaps[r].value, options); - if (gap > 0) { - // \@argarraycr - gap += arstrutDepth; - if (depth < gap) { - depth = gap; // \@xargarraycr - } - gap = 0; - } - } - // In AMS multiline environments such as aligned and gathered, rows - // correspond to lines that have additional \jot added to the - // \baselineskip via \openup. - if (group.value.addJot) { - depth += jot; - } - - outrow.height = height; - outrow.depth = depth; - totalHeight += height; - outrow.pos = totalHeight; - totalHeight += depth + gap; // \@yargarraycr - body[r] = outrow; - } - - var offset = totalHeight / 2 + options.fontMetrics().axisHeight; - var colDescriptions = group.value.cols || []; - var cols = []; - var colSep = void 0; - var colDescrNum = void 0; - for (c = 0, colDescrNum = 0; - // Continue while either there are more columns or more column - // descriptions, so trailing separators don't get lost. - c < nc || colDescrNum < colDescriptions.length; ++c, ++colDescrNum) { - - var colDescr = colDescriptions[colDescrNum] || {}; - - var firstSeparator = true; - while (colDescr.type === "separator") { - // If there is more than one separator in a row, add a space - // between them. - if (!firstSeparator) { - colSep = (0, _buildCommon.makeSpan)(["arraycolsep"], []); - colSep.style.width = options.fontMetrics().doubleRuleSep + "em"; - cols.push(colSep); - } - - if (colDescr.separator === "|") { - var separator = (0, _buildCommon.makeSpan)(["vertical-separator"], []); - separator.style.height = totalHeight + "em"; - separator.style.verticalAlign = -(totalHeight - offset) + "em"; - - cols.push(separator); - } else { - throw new _ParseError2.default("Invalid separator type: " + colDescr.separator); - } - - colDescrNum++; - colDescr = colDescriptions[colDescrNum] || {}; - firstSeparator = false; - } - - if (c >= nc) { - continue; - } - - var sepwidth = void 0; - if (c > 0 || group.value.hskipBeforeAndAfter) { - sepwidth = _utils2.default.deflt(colDescr.pregap, arraycolsep); - if (sepwidth !== 0) { - colSep = (0, _buildCommon.makeSpan)(["arraycolsep"], []); - colSep.style.width = sepwidth + "em"; - cols.push(colSep); - } - } - - var col = []; - for (r = 0; r < nr; ++r) { - var row = body[r]; - var elem = row[c]; - if (!elem) { - continue; - } - var shift = row.pos - offset; - elem.depth = row.depth; - elem.height = row.height; - col.push({ type: "elem", elem: elem, shift: shift }); - } - - col = _buildCommon2.default.makeVList(col, "individualShift", null, options); - col = (0, _buildCommon.makeSpan)(["col-align-" + (colDescr.align || "c")], [col]); - cols.push(col); - - if (c < nc - 1 || group.value.hskipBeforeAndAfter) { - sepwidth = _utils2.default.deflt(colDescr.postgap, arraycolsep); - if (sepwidth !== 0) { - colSep = (0, _buildCommon.makeSpan)(["arraycolsep"], []); - colSep.style.width = sepwidth + "em"; - cols.push(colSep); - } - } - } - body = (0, _buildCommon.makeSpan)(["mtable"], cols); - return (0, _buildCommon.makeSpan)(["mord"], [body], options); - }; - - groupTypes.spacing = function (group, options) { - if (group.value === "\\ " || group.value === "\\space" || group.value === " " || group.value === "~") { - // Spaces are generated by adding an actual space. Each of these - // things has an entry in the symbols table, so these will be turned - // into appropriate outputs. - if (group.mode === "text") { - return _buildCommon2.default.makeOrd(group, options, "textord"); - } else { - return (0, _buildCommon.makeSpan)(["mspace"], [_buildCommon2.default.mathsym(group.value, group.mode, options)], options); - } - } else { - // Other kinds of spaces are of arbitrary width. We use CSS to - // generate these. - return (0, _buildCommon.makeSpan)(["mspace", _buildCommon2.default.spacingFunctions[group.value].className], [], options); - } - }; - - groupTypes.llap = function (group, options) { - var inner = (0, _buildCommon.makeSpan)(["inner"], [buildGroup(group.value.body, options)]); - var fix = (0, _buildCommon.makeSpan)(["fix"], []); - return (0, _buildCommon.makeSpan)(["mord", "llap"], [inner, fix], options); - }; - - groupTypes.rlap = function (group, options) { - var inner = (0, _buildCommon.makeSpan)(["inner"], [buildGroup(group.value.body, options)]); - var fix = (0, _buildCommon.makeSpan)(["fix"], []); - return (0, _buildCommon.makeSpan)(["mord", "rlap"], [inner, fix], options); - }; - - groupTypes.op = function (group, options) { - // Operators are handled in the TeXbook pg. 443-444, rule 13(a). - var supGroup = void 0; - var subGroup = void 0; - var hasLimits = false; - if (group.type === "supsub") { - // If we have limits, supsub will pass us its group to handle. Pull - // out the superscript and subscript and set the group to the op in - // its base. - supGroup = group.value.sup; - subGroup = group.value.sub; - group = group.value.base; - hasLimits = true; - } - - var style = options.style; - - // Most operators have a large successor symbol, but these don't. - var noSuccessor = ["\\smallint"]; - - var large = false; - if (style.size === _Style2.default.DISPLAY.size && group.value.symbol && !_utils2.default.contains(noSuccessor, group.value.body)) { - - // Most symbol operators get larger in displaystyle (rule 13) - large = true; - } - - var base = void 0; - if (group.value.symbol) { - // If this is a symbol, create the symbol. - var fontName = large ? "Size2-Regular" : "Size1-Regular"; - base = _buildCommon2.default.makeSymbol(group.value.body, fontName, "math", options, ["mop", "op-symbol", large ? "large-op" : "small-op"]); - } else if (group.value.value) { - // If this is a list, compose that list. - var inner = buildExpression(group.value.value, options, true); - if (inner.length === 1 && inner[0] instanceof _domTree2.default.symbolNode) { - base = inner[0]; - base.classes[0] = "mop"; // replace old mclass - } else { - base = (0, _buildCommon.makeSpan)(["mop"], inner, options); - } - } else { - // Otherwise, this is a text operator. Build the text from the - // operator's name. - // TODO(emily): Add a space in the middle of some of these - // operators, like \limsup - var output = []; - for (var i = 1; i < group.value.body.length; i++) { - output.push(_buildCommon2.default.mathsym(group.value.body[i], group.mode)); - } - base = (0, _buildCommon.makeSpan)(["mop"], output, options); - } - - // If content of op is a single symbol, shift it vertically. - var baseShift = 0; - var slant = 0; - if (base instanceof _domTree2.default.symbolNode) { - // Shift the symbol so its center lies on the axis (rule 13). It - // appears that our fonts have the centers of the symbols already - // almost on the axis, so these numbers are very small. Note we - // don't actually apply this here, but instead it is used either in - // the vlist creation or separately when there are no limits. - baseShift = (base.height - base.depth) / 2 - options.fontMetrics().axisHeight; - - // The slant of the symbol is just its italic correction. - slant = base.italic; - } - - if (hasLimits) { - // IE 8 clips \int if it is in a display: inline-block. We wrap it - // in a new span so it is an inline, and works. - base = (0, _buildCommon.makeSpan)([], [base]); - - var supm = void 0; - var supKern = void 0; - var subm = void 0; - var subKern = void 0; - var newOptions = void 0; - // We manually have to handle the superscripts and subscripts. This, - // aside from the kern calculations, is copied from supsub. - if (supGroup) { - newOptions = options.havingStyle(style.sup()); - supm = buildGroup(supGroup, newOptions, options); - - supKern = Math.max(options.fontMetrics().bigOpSpacing1, options.fontMetrics().bigOpSpacing3 - supm.depth); - } - - if (subGroup) { - newOptions = options.havingStyle(style.sub()); - subm = buildGroup(subGroup, newOptions, options); - - subKern = Math.max(options.fontMetrics().bigOpSpacing2, options.fontMetrics().bigOpSpacing4 - subm.height); - } - - // Build the final group as a vlist of the possible subscript, base, - // and possible superscript. - var finalGroup = void 0; - var top = void 0; - var bottom = void 0; - if (!supGroup) { - top = base.height - baseShift; - - // Shift the limits by the slant of the symbol. Note - // that we are supposed to shift the limits by 1/2 of the slant, - // but since we are centering the limits adding a full slant of - // margin will shift by 1/2 that. - finalGroup = _buildCommon2.default.makeVList([{ type: "kern", size: options.fontMetrics().bigOpSpacing5 }, { type: "elem", elem: subm, marginLeft: -slant + "em" }, { type: "kern", size: subKern }, { type: "elem", elem: base }], "top", top, options); - } else if (!subGroup) { - bottom = base.depth + baseShift; - - finalGroup = _buildCommon2.default.makeVList([{ type: "elem", elem: base }, { type: "kern", size: supKern }, { type: "elem", elem: supm, marginLeft: slant + "em" }, { type: "kern", size: options.fontMetrics().bigOpSpacing5 }], "bottom", bottom, options); - } else if (!supGroup && !subGroup) { - // This case probably shouldn't occur (this would mean the - // supsub was sending us a group with no superscript or - // subscript) but be safe. - return base; - } else { - bottom = options.fontMetrics().bigOpSpacing5 + subm.height + subm.depth + subKern + base.depth + baseShift; - - finalGroup = _buildCommon2.default.makeVList([{ type: "kern", size: options.fontMetrics().bigOpSpacing5 }, { type: "elem", elem: subm, marginLeft: -slant + "em" }, { type: "kern", size: subKern }, { type: "elem", elem: base }, { type: "kern", size: supKern }, { type: "elem", elem: supm, marginLeft: slant + "em" }, { type: "kern", size: options.fontMetrics().bigOpSpacing5 }], "bottom", bottom, options); - } - - return (0, _buildCommon.makeSpan)(["mop", "op-limits"], [finalGroup], options); - } else { - if (baseShift) { - base.style.position = "relative"; - base.style.top = baseShift + "em"; - } - - return base; - } - }; - - groupTypes.mod = function (group, options) { - var inner = []; - - if (group.value.modType === "bmod") { - // “\nonscript\mskip-\medmuskip\mkern5mu” - if (!options.style.isTight()) { - inner.push((0, _buildCommon.makeSpan)(["mspace", "negativemediumspace"], [], options)); - } - inner.push((0, _buildCommon.makeSpan)(["mspace", "thickspace"], [], options)); - } else if (options.style.size === _Style2.default.DISPLAY.size) { - inner.push((0, _buildCommon.makeSpan)(["mspace", "quad"], [], options)); - } else if (group.value.modType === "mod") { - inner.push((0, _buildCommon.makeSpan)(["mspace", "twelvemuspace"], [], options)); - } else { - inner.push((0, _buildCommon.makeSpan)(["mspace", "eightmuspace"], [], options)); - } - - if (group.value.modType === "pod" || group.value.modType === "pmod") { - inner.push(_buildCommon2.default.mathsym("(", group.mode)); - } - - if (group.value.modType !== "pod") { - var modInner = [_buildCommon2.default.mathsym("m", group.mode), _buildCommon2.default.mathsym("o", group.mode), _buildCommon2.default.mathsym("d", group.mode)]; - if (group.value.modType === "bmod") { - inner.push((0, _buildCommon.makeSpan)(["mbin"], modInner, options)); - // “\mkern5mu\nonscript\mskip-\medmuskip” - inner.push((0, _buildCommon.makeSpan)(["mspace", "thickspace"], [], options)); - if (!options.style.isTight()) { - inner.push((0, _buildCommon.makeSpan)(["mspace", "negativemediumspace"], [], options)); - } - } else { - Array.prototype.push.apply(inner, modInner); - inner.push((0, _buildCommon.makeSpan)(["mspace", "sixmuspace"], [], options)); - } - } - - if (group.value.value) { - Array.prototype.push.apply(inner, buildExpression(group.value.value, options, false)); - } - - if (group.value.modType === "pod" || group.value.modType === "pmod") { - inner.push(_buildCommon2.default.mathsym(")", group.mode)); - } - - return _buildCommon2.default.makeFragment(inner); - }; - - groupTypes.katex = function (group, options) { - // The KaTeX logo. The offsets for the K and a were chosen to look - // good, but the offsets for the T, E, and X were taken from the - // definition of \TeX in TeX (see TeXbook pg. 356) - var k = (0, _buildCommon.makeSpan)(["k"], [_buildCommon2.default.mathsym("K", group.mode)], options); - var a = (0, _buildCommon.makeSpan)(["a"], [_buildCommon2.default.mathsym("A", group.mode)], options); - - a.height = (a.height + 0.2) * 0.75; - a.depth = (a.height - 0.2) * 0.75; - - var t = (0, _buildCommon.makeSpan)(["t"], [_buildCommon2.default.mathsym("T", group.mode)], options); - var e = (0, _buildCommon.makeSpan)(["e"], [_buildCommon2.default.mathsym("E", group.mode)], options); - - e.height = e.height - 0.2155; - e.depth = e.depth + 0.2155; - - var x = (0, _buildCommon.makeSpan)(["x"], [_buildCommon2.default.mathsym("X", group.mode)], options); - - return (0, _buildCommon.makeSpan)(["mord", "katex-logo"], [k, a, t, e, x], options); - }; - - var makeLineSpan = function makeLineSpan(className, options, thickness) { - var line = (0, _buildCommon.makeSpan)([className], [], options); - line.height = thickness || options.fontMetrics().defaultRuleThickness; - line.style.borderBottomWidth = line.height + "em"; - line.maxFontSize = 1.0; - return line; - }; - - groupTypes.overline = function (group, options) { - // Overlines are handled in the TeXbook pg 443, Rule 9. - - // Build the inner group in the cramped style. - var innerGroup = buildGroup(group.value.body, options.havingCrampedStyle()); - - // Create the line above the body - var line = makeLineSpan("overline-line", options); - - // Generate the vlist, with the appropriate kerns - var vlist = _buildCommon2.default.makeVList([{ type: "elem", elem: innerGroup }, { type: "kern", size: 3 * line.height }, { type: "elem", elem: line }, { type: "kern", size: line.height }], "firstBaseline", null, options); - - return (0, _buildCommon.makeSpan)(["mord", "overline"], [vlist], options); - }; - - groupTypes.underline = function (group, options) { - // Underlines are handled in the TeXbook pg 443, Rule 10. - // Build the inner group. - var innerGroup = buildGroup(group.value.body, options); - - // Create the line above the body - var line = makeLineSpan("underline-line", options); - - // Generate the vlist, with the appropriate kerns - var vlist = _buildCommon2.default.makeVList([{ type: "kern", size: line.height }, { type: "elem", elem: line }, { type: "kern", size: 3 * line.height }, { type: "elem", elem: innerGroup }], "top", innerGroup.height, options); - - return (0, _buildCommon.makeSpan)(["mord", "underline"], [vlist], options); - }; - - groupTypes.sqrt = function (group, options) { - // Square roots are handled in the TeXbook pg. 443, Rule 11. - - // First, we do the same steps as in overline to build the inner group - // and line - var inner = buildGroup(group.value.body, options.havingCrampedStyle()); - - // Some groups can return document fragments. Handle those by wrapping - // them in a span. - if (inner instanceof _domTree2.default.documentFragment) { - inner = (0, _buildCommon.makeSpan)([], [inner], options); - } - - // Calculate the minimum size for the \surd delimiter - var metrics = options.fontMetrics(); - var theta = metrics.defaultRuleThickness; - - var phi = theta; - if (options.style.id < _Style2.default.TEXT.id) { - phi = options.fontMetrics().xHeight; - } - - // Calculate the clearance between the body and line - var lineClearance = theta + phi / 4; - - var minDelimiterHeight = (inner.height + inner.depth + lineClearance + theta) * options.sizeMultiplier; - - // Create a sqrt SVG of the required minimum size - var img = _delimiter2.default.customSizedDelim("\\surd", minDelimiterHeight, false, options, group.mode); - - // Calculate the actual line width. - // This actually should depend on the chosen font -- e.g. \boldmath - // should use the thicker surd symbols from e.g. KaTeX_Main-Bold, and - // have thicker rules. - var ruleWidth = options.fontMetrics().sqrtRuleThickness * img.sizeMultiplier; - - var delimDepth = img.height - ruleWidth; - - // Adjust the clearance based on the delimiter size - if (delimDepth > inner.height + inner.depth + lineClearance) { - lineClearance = (lineClearance + delimDepth - inner.height - inner.depth) / 2; - } - - // Shift the sqrt image - var imgShift = img.height - inner.height - lineClearance - ruleWidth; - - // We add a special case here, because even when `inner` is empty, we - // still get a line. So, we use a simple heuristic to decide if we - // should omit the body entirely. (note this doesn't work for something - // like `\sqrt{\rlap{x}}`, but if someone is doing that they deserve for - // it not to work. - var body = void 0; - if (inner.height === 0 && inner.depth === 0) { - body = (0, _buildCommon.makeSpan)(); - } else { - inner.style.paddingLeft = img.surdWidth + "em"; - - // Overlay the image and the argument. - body = _buildCommon2.default.makeVList([{ type: "elem", elem: inner }, { type: "kern", size: -(inner.height + imgShift) }, { type: "elem", elem: img }, { type: "kern", size: ruleWidth }], "firstBaseline", null, options); - body.children[0].children[0].classes.push("svg-align"); - } - - if (!group.value.index) { - return (0, _buildCommon.makeSpan)(["mord", "sqrt"], [body], options); - } else { - // Handle the optional root index - - // The index is always in scriptscript style - var newOptions = options.havingStyle(_Style2.default.SCRIPTSCRIPT); - var rootm = buildGroup(group.value.index, newOptions, options); - - // The amount the index is shifted by. This is taken from the TeX - // source, in the definition of `\r@@t`. - var toShift = 0.6 * (body.height - body.depth); - - // Build a VList with the superscript shifted up correctly - var rootVList = _buildCommon2.default.makeVList([{ type: "elem", elem: rootm }], "shift", -toShift, options); - // Add a class surrounding it so we can add on the appropriate - // kerning - var rootVListWrap = (0, _buildCommon.makeSpan)(["root"], [rootVList]); - - return (0, _buildCommon.makeSpan)(["mord", "sqrt"], [rootVListWrap, body], options); - } - }; - - function sizingGroup(value, options, baseOptions) { - var inner = buildExpression(value, options, false); - var multiplier = options.sizeMultiplier / baseOptions.sizeMultiplier; - - // Add size-resetting classes to the inner list and set maxFontSize - // manually. Handle nested size changes. - for (var i = 0; i < inner.length; i++) { - var pos = _utils2.default.indexOf(inner[i].classes, "sizing"); - if (pos < 0) { - Array.prototype.push.apply(inner[i].classes, options.sizingClasses(baseOptions)); - } else if (inner[i].classes[pos + 1] === "reset-size" + options.size) { - // This is a nested size change: e.g., inner[i] is the "b" in - // `\Huge a \small b`. Override the old size (the `reset-` class) - // but not the new size. - inner[i].classes[pos + 1] = "reset-size" + baseOptions.size; - } - - inner[i].height *= multiplier; - inner[i].depth *= multiplier; - } - - return _buildCommon2.default.makeFragment(inner); - } - - groupTypes.sizing = function (group, options) { - // Handle sizing operators like \Huge. Real TeX doesn't actually allow - // these functions inside of math expressions, so we do some special - // handling. - var newOptions = options.havingSize(group.value.size); - return sizingGroup(group.value.value, newOptions, options); - }; - - groupTypes.styling = function (group, options) { - // Style changes are handled in the TeXbook on pg. 442, Rule 3. - - // Figure out what style we're changing to. - var styleMap = { - "display": _Style2.default.DISPLAY, - "text": _Style2.default.TEXT, - "script": _Style2.default.SCRIPT, - "scriptscript": _Style2.default.SCRIPTSCRIPT - }; - - var newStyle = styleMap[group.value.style]; - var newOptions = options.havingStyle(newStyle); - return sizingGroup(group.value.value, newOptions, options); - }; - - groupTypes.font = function (group, options) { - var font = group.value.font; - return buildGroup(group.value.body, options.withFont(font)); - }; - - groupTypes.delimsizing = function (group, options) { - var delim = group.value.value; - - if (delim === ".") { - // Empty delimiters still count as elements, even though they don't - // show anything. - return (0, _buildCommon.makeSpan)([group.value.mclass]); - } - - // Use delimiter.sizedDelim to generate the delimiter. - return _delimiter2.default.sizedDelim(delim, group.value.size, options, group.mode, [group.value.mclass]); - }; - - groupTypes.leftright = function (group, options) { - // Build the inner expression - var inner = buildExpression(group.value.body, options, true); - - var innerHeight = 0; - var innerDepth = 0; - var hadMiddle = false; - - // Calculate its height and depth - for (var i = 0; i < inner.length; i++) { - if (inner[i].isMiddle) { - hadMiddle = true; - } else { - innerHeight = Math.max(inner[i].height, innerHeight); - innerDepth = Math.max(inner[i].depth, innerDepth); - } - } - - // The size of delimiters is the same, regardless of what style we are - // in. Thus, to correctly calculate the size of delimiter we need around - // a group, we scale down the inner size based on the size. - innerHeight *= options.sizeMultiplier; - innerDepth *= options.sizeMultiplier; - - var leftDelim = void 0; - if (group.value.left === ".") { - // Empty delimiters in \left and \right make null delimiter spaces. - leftDelim = makeNullDelimiter(options, ["mopen"]); - } else { - // Otherwise, use leftRightDelim to generate the correct sized - // delimiter. - leftDelim = _delimiter2.default.leftRightDelim(group.value.left, innerHeight, innerDepth, options, group.mode, ["mopen"]); - } - // Add it to the beginning of the expression - inner.unshift(leftDelim); - - // Handle middle delimiters - if (hadMiddle) { - for (var _i4 = 1; _i4 < inner.length; _i4++) { - var middleDelim = inner[_i4]; - if (middleDelim.isMiddle) { - // Apply the options that were active when \middle was called - inner[_i4] = _delimiter2.default.leftRightDelim(middleDelim.isMiddle.value, innerHeight, innerDepth, middleDelim.isMiddle.options, group.mode, []); - // Add back spaces shifted into the delimiter - var spaces = spliceSpaces(middleDelim.children, 0); - if (spaces) { - _buildCommon2.default.prependChildren(inner[_i4], spaces); - } - } - } - } - - var rightDelim = void 0; - // Same for the right delimiter - if (group.value.right === ".") { - rightDelim = makeNullDelimiter(options, ["mclose"]); - } else { - rightDelim = _delimiter2.default.leftRightDelim(group.value.right, innerHeight, innerDepth, options, group.mode, ["mclose"]); - } - // Add it to the end of the expression. - inner.push(rightDelim); - - return (0, _buildCommon.makeSpan)(["minner"], inner, options); - }; - - groupTypes.middle = function (group, options) { - var middleDelim = void 0; - if (group.value.value === ".") { - middleDelim = makeNullDelimiter(options, []); - } else { - middleDelim = _delimiter2.default.sizedDelim(group.value.value, 1, options, group.mode, []); - middleDelim.isMiddle = { value: group.value.value, options: options }; - } - return middleDelim; - }; - - groupTypes.rule = function (group, options) { - // Make an empty span for the rule - var rule = (0, _buildCommon.makeSpan)(["mord", "rule"], [], options); - - // Calculate the shift, width, and height of the rule, and account for units - var shift = 0; - if (group.value.shift) { - shift = _units2.default.calculateSize(group.value.shift, options); - } - - var width = _units2.default.calculateSize(group.value.width, options); - var height = _units2.default.calculateSize(group.value.height, options); - - // Style the rule to the right size - rule.style.borderRightWidth = width + "em"; - rule.style.borderTopWidth = height + "em"; - rule.style.bottom = shift + "em"; - - // Record the height and width - rule.width = width; - rule.height = height + shift; - rule.depth = -shift; - // Font size is the number large enough that the browser will - // reserve at least `absHeight` space above the baseline. - // The 1.125 factor was empirically determined - rule.maxFontSize = height * 1.125 * options.sizeMultiplier; - - return rule; - }; - - groupTypes.kern = function (group, options) { - // Make an empty span for the rule - var rule = (0, _buildCommon.makeSpan)(["mord", "rule"], [], options); - - if (group.value.dimension) { - var dimension = _units2.default.calculateSize(group.value.dimension, options); - rule.style.marginLeft = dimension + "em"; - } - - return rule; - }; - - groupTypes.accent = function (group, options) { - // Accents are handled in the TeXbook pg. 443, rule 12. - var base = group.value.base; - - var supsubGroup = void 0; - if (group.type === "supsub") { - // If our base is a character box, and we have superscripts and - // subscripts, the supsub will defer to us. In particular, we want - // to attach the superscripts and subscripts to the inner body (so - // that the position of the superscripts and subscripts won't be - // affected by the height of the accent). We accomplish this by - // sticking the base of the accent into the base of the supsub, and - // rendering that, while keeping track of where the accent is. - - // The supsub group is the group that was passed in - var supsub = group; - // The real accent group is the base of the supsub group - group = supsub.value.base; - // The character box is the base of the accent group - base = group.value.base; - // Stick the character box into the base of the supsub group - supsub.value.base = base; - - // Rerender the supsub group with its new base, and store that - // result. - supsubGroup = buildGroup(supsub, options); - } - - // Build the base group - var body = buildGroup(base, options.havingCrampedStyle()); - - // Does the accent need to shift for the skew of a character? - var mustShift = group.value.isShifty && isCharacterBox(base); - - // Calculate the skew of the accent. This is based on the line "If the - // nucleus is not a single character, let s = 0; otherwise set s to the - // kern amount for the nucleus followed by the \skewchar of its font." - // Note that our skew metrics are just the kern between each character - // and the skewchar. - var skew = 0; - if (mustShift) { - // If the base is a character box, then we want the skew of the - // innermost character. To do that, we find the innermost character: - var baseChar = getBaseElem(base); - // Then, we render its group to get the symbol inside it - var baseGroup = buildGroup(baseChar, options.havingCrampedStyle()); - // Finally, we pull the skew off of the symbol. - skew = baseGroup.skew; - // Note that we now throw away baseGroup, because the layers we - // removed with getBaseElem might contain things like \color which - // we can't get rid of. - // TODO(emily): Find a better way to get the skew - } - - // calculate the amount of space between the body and the accent - var clearance = Math.min(body.height, options.fontMetrics().xHeight); - - // Build the accent - var accentBody = void 0; - if (!group.value.isStretchy) { - var accent = _buildCommon2.default.makeSymbol(group.value.label, "Main-Regular", group.mode, options); - // Remove the italic correction of the accent, because it only serves to - // shift the accent over to a place we don't want. - accent.italic = 0; - - // The \vec character that the fonts use is a combining character, and - // thus shows up much too far to the left. To account for this, we add a - // specific class which shifts the accent over to where we want it. - // TODO(emily): Fix this in a better way, like by changing the font - // Similarly, text accent \H is a combining character and - // requires a different adjustment. - var accentClass = null; - if (group.value.label === "\\vec") { - accentClass = "accent-vec"; - } else if (group.value.label === '\\H') { - accentClass = "accent-hungarian"; - } - - accentBody = (0, _buildCommon.makeSpan)([], [accent]); - accentBody = (0, _buildCommon.makeSpan)(["accent-body", accentClass], [accentBody]); - - // Shift the accent over by the skew. Note we shift by twice the skew - // because we are centering the accent, so by adding 2*skew to the left, - // we shift it to the right by 1*skew. - accentBody.style.marginLeft = 2 * skew + "em"; - - accentBody = _buildCommon2.default.makeVList([{ type: "elem", elem: body }, { type: "kern", size: -clearance }, { type: "elem", elem: accentBody }], "firstBaseline", null, options); - } else { - accentBody = _stretchy2.default.svgSpan(group, options); - - accentBody = _buildCommon2.default.makeVList([{ type: "elem", elem: body }, { type: "elem", elem: accentBody }], "firstBaseline", null, options); - - var styleSpan = accentBody.children[0].children[0].children[1]; - styleSpan.classes.push("svg-align"); // text-align: left; - if (skew > 0) { - // Shorten the accent and nudge it to the right. - styleSpan.style.width = "calc(100% - " + 2 * skew + "em)"; - styleSpan.style.marginLeft = 2 * skew + "em"; - } - } - - var accentWrap = (0, _buildCommon.makeSpan)(["mord", "accent"], [accentBody], options); - - if (supsubGroup) { - // Here, we replace the "base" child of the supsub with our newly - // generated accent. - supsubGroup.children[0] = accentWrap; - - // Since we don't rerun the height calculation after replacing the - // accent, we manually recalculate height. - supsubGroup.height = Math.max(accentWrap.height, supsubGroup.height); - - // Accents should always be ords, even when their innards are not. - supsubGroup.classes[0] = "mord"; - - return supsubGroup; - } else { - return accentWrap; - } - }; - - groupTypes.horizBrace = function (group, options) { - var style = options.style; - - var hasSupSub = group.type === "supsub"; - var supSubGroup = void 0; - var newOptions = void 0; - if (hasSupSub) { - // Ref: LaTeX source2e: }}}}\limits} - // i.e. LaTeX treats the brace similar to an op and passes it - // with \limits, so we need to assign supsub style. - if (group.value.sup) { - newOptions = options.havingStyle(style.sup()); - supSubGroup = buildGroup(group.value.sup, newOptions, options); - } else { - newOptions = options.havingStyle(style.sub()); - supSubGroup = buildGroup(group.value.sub, newOptions, options); - } - group = group.value.base; - } - - // Build the base group - var body = buildGroup(group.value.base, options.havingBaseStyle(_Style2.default.DISPLAY)); - - // Create the stretchy element - var braceBody = _stretchy2.default.svgSpan(group, options); - - // Generate the vlist, with the appropriate kerns ┏━━━━━━━━┓ - // This first vlist contains the subject matter and the brace: equation - var vlist = void 0; - if (group.value.isOver) { - vlist = _buildCommon2.default.makeVList([{ type: "elem", elem: body }, { type: "kern", size: 0.1 }, { type: "elem", elem: braceBody }], "firstBaseline", null, options); - vlist.children[0].children[0].children[1].classes.push("svg-align"); - } else { - vlist = _buildCommon2.default.makeVList([{ type: "elem", elem: braceBody }, { type: "kern", size: 0.1 }, { type: "elem", elem: body }], "bottom", body.depth + 0.1 + braceBody.height, options); - vlist.children[0].children[0].children[0].classes.push("svg-align"); - } - - if (hasSupSub) { - // In order to write the supsub, wrap the first vlist in another vlist: - // They can't all go in the same vlist, because the note might be wider - // than the equation. We want the equation to control the brace width. - - // note long note long note - // ┏━━━━━━━━┓ or ┏━━━┓ not ┏━━━━━━━━━┓ - // equation eqn eqn - - var vSpan = (0, _buildCommon.makeSpan)(["mord", group.value.isOver ? "mover" : "munder"], [vlist], options); - - if (group.value.isOver) { - vlist = _buildCommon2.default.makeVList([{ type: "elem", elem: vSpan }, { type: "kern", size: 0.2 }, { type: "elem", elem: supSubGroup }], "firstBaseline", null, options); - } else { - vlist = _buildCommon2.default.makeVList([{ type: "elem", elem: supSubGroup }, { type: "kern", size: 0.2 }, { type: "elem", elem: vSpan }], "bottom", vSpan.depth + 0.2 + supSubGroup.height, options); - } - } - - return (0, _buildCommon.makeSpan)(["mord", group.value.isOver ? "mover" : "munder"], [vlist], options); - }; - - groupTypes.accentUnder = function (group, options) { - // Treat under accents much like underlines. - var innerGroup = buildGroup(group.value.body, options); - - var accentBody = _stretchy2.default.svgSpan(group, options); - var kern = /tilde/.test(group.value.label) ? 0.12 : 0; - - // Generate the vlist, with the appropriate kerns - var vlist = _buildCommon2.default.makeVList([{ type: "elem", elem: accentBody }, { type: "kern", size: kern }, { type: "elem", elem: innerGroup }], "bottom", accentBody.height + kern, options); - - vlist.children[0].children[0].children[0].classes.push("svg-align"); - - return (0, _buildCommon.makeSpan)(["mord", "accentunder"], [vlist], options); - }; - - groupTypes.enclose = function (group, options) { - // \cancel, \bcancel, \xcancel, \sout, \fbox - var inner = buildGroup(group.value.body, options); - - var label = group.value.label.substr(1); - var scale = options.sizeMultiplier; - var img = void 0; - var pad = 0; - var imgShift = 0; - - if (label === "sout") { - img = (0, _buildCommon.makeSpan)(["stretchy", "sout"]); - img.height = options.fontMetrics().defaultRuleThickness / scale; - imgShift = -0.5 * options.fontMetrics().xHeight; - } else { - // Add horizontal padding - inner.classes.push(label === "fbox" ? "boxpad" : "cancel-pad"); - - // Add vertical padding - var isCharBox = isCharacterBox(group.value.body); - // ref: LaTeX source2e: \fboxsep = 3pt; \fboxrule = .4pt - // ref: cancel package: \advance\totalheight2\p@ % "+2" - pad = label === "fbox" ? 0.34 : isCharBox ? 0.2 : 0; - imgShift = inner.depth + pad; - - img = _stretchy2.default.encloseSpan(inner, label, pad, options); - } - - var vlist = _buildCommon2.default.makeVList([{ type: "elem", elem: inner, shift: 0 }, { type: "elem", elem: img, shift: imgShift }], "individualShift", null, options); - - if (label !== "fbox") { - vlist.children[0].children[0].children[1].classes.push("svg-align"); - } - - if (/cancel/.test(label)) { - // cancel does not create horiz space for its line extension. - // That is, not when adjacent to a mord. - return (0, _buildCommon.makeSpan)(["mord", "cancel-lap"], [vlist], options); - } else { - return (0, _buildCommon.makeSpan)(["mord"], [vlist], options); - } - }; - - groupTypes.xArrow = function (group, options) { - var style = options.style; - - // Build the argument groups in the appropriate style. - // Ref: amsmath.dtx: \hbox{$\scriptstyle\mkern#3mu{#6}\mkern#4mu$}% - - var newOptions = options.havingStyle(style.sup()); - var upperGroup = buildGroup(group.value.body, newOptions, options); - upperGroup.classes.push("x-arrow-pad"); - - var lowerGroup = void 0; - if (group.value.below) { - // Build the lower group - newOptions = options.havingStyle(style.sub()); - lowerGroup = buildGroup(group.value.below, newOptions, options); - lowerGroup.classes.push("x-arrow-pad"); - } - - var arrowBody = _stretchy2.default.svgSpan(group, options); - - var arrowShift = -options.fontMetrics().axisHeight + arrowBody.depth; - var upperShift = -options.fontMetrics().axisHeight - arrowBody.height - 0.111; // 2 mu. Ref: amsmath.dtx: #7\if0#2\else\mkern#2mu\fi - - // Generate the vlist - var vlist = void 0; - if (group.value.below) { - var lowerShift = -options.fontMetrics().axisHeight + lowerGroup.height + arrowBody.height + 0.111; - vlist = _buildCommon2.default.makeVList([{ type: "elem", elem: upperGroup, shift: upperShift }, { type: "elem", elem: arrowBody, shift: arrowShift }, { type: "elem", elem: lowerGroup, shift: lowerShift }], "individualShift", null, options); - } else { - vlist = _buildCommon2.default.makeVList([{ type: "elem", elem: upperGroup, shift: upperShift }, { type: "elem", elem: arrowBody, shift: arrowShift }], "individualShift", null, options); - } - - vlist.children[0].children[0].children[1].classes.push("svg-align"); - - return (0, _buildCommon.makeSpan)(["mrel", "x-arrow"], [vlist], options); - }; - - groupTypes.phantom = function (group, options) { - var elements = buildExpression(group.value.value, options.withPhantom(), false); - - // \phantom isn't supposed to affect the elements it contains. - // See "color" for more details. - return new _buildCommon2.default.makeFragment(elements); - }; - - groupTypes.mclass = function (group, options) { - var elements = buildExpression(group.value.value, options, true); - - return (0, _buildCommon.makeSpan)([group.value.mclass], elements, options); - }; - - /** - * buildGroup is the function that takes a group and calls the correct groupType - * function for it. It also handles the interaction of size and style changes - * between parents and children. - */ - var buildGroup = function buildGroup(group, options, baseOptions) { - if (!group) { - return (0, _buildCommon.makeSpan)(); - } - - if (groupTypes[group.type]) { - // Call the groupTypes function - var groupNode = groupTypes[group.type](group, options); - - // If the size changed between the parent and the current group, account - // for that size difference. - if (baseOptions && options.size !== baseOptions.size) { - groupNode = (0, _buildCommon.makeSpan)(options.sizingClasses(baseOptions), [groupNode], options); - - var multiplier = options.sizeMultiplier / baseOptions.sizeMultiplier; - - groupNode.height *= multiplier; - groupNode.depth *= multiplier; - } - - return groupNode; - } else { - throw new _ParseError2.default("Got group of unknown type: '" + group.type + "'"); - } - }; - - /** - * Take an entire parse tree, and build it into an appropriate set of HTML - * nodes. - */ - var buildHTML = function buildHTML(tree, options) { - // buildExpression is destructive, so we need to make a clone - // of the incoming tree so that it isn't accidentally changed - tree = JSON.parse((0, _stringify2.default)(tree)); - - // Build the expression contained in the tree - var expression = buildExpression(tree, options, true); - var body = (0, _buildCommon.makeSpan)(["base"], expression, options); - - // Add struts, which ensure that the top of the HTML element falls at the - // height of the expression, and the bottom of the HTML element falls at the - // depth of the expression. - var topStrut = (0, _buildCommon.makeSpan)(["strut"]); - var bottomStrut = (0, _buildCommon.makeSpan)(["strut", "bottom"]); - - topStrut.style.height = body.height + "em"; - bottomStrut.style.height = body.height + body.depth + "em"; - // We'd like to use `vertical-align: top` but in IE 9 this lowers the - // baseline of the box to the bottom of this strut (instead staying in the - // normal place) so we use an absolute value for vertical-align instead - bottomStrut.style.verticalAlign = -body.depth + "em"; - - // Wrap the struts and body together - var htmlNode = (0, _buildCommon.makeSpan)(["katex-html"], [topStrut, bottomStrut, body]); - - htmlNode.setAttribute("aria-hidden", "true"); - - return htmlNode; - }; - - module.exports = buildHTML; - - },{"./ParseError":29,"./Style":33,"./buildCommon":34,"./delimiter":38,"./domTree":39,"./stretchy":47,"./units":50,"./utils":51,"babel-runtime/core-js/json/stringify":2}],36:[function(require,module,exports){ - - var _buildCommon = require("./buildCommon"); - - var _buildCommon2 = _interopRequireDefault(_buildCommon); - - var _fontMetrics = require("./fontMetrics"); - - var _fontMetrics2 = _interopRequireDefault(_fontMetrics); - - var _mathMLTree = require("./mathMLTree"); - - var _mathMLTree2 = _interopRequireDefault(_mathMLTree); - - var _ParseError = require("./ParseError"); - - var _ParseError2 = _interopRequireDefault(_ParseError); - - var _Style = require("./Style"); - - var _Style2 = _interopRequireDefault(_Style); - - var _symbols = require("./symbols"); - - var _symbols2 = _interopRequireDefault(_symbols); - - var _utils = require("./utils"); - - var _utils2 = _interopRequireDefault(_utils); - - var _stretchy = require("./stretchy"); - - var _stretchy2 = _interopRequireDefault(_stretchy); - - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - - /** - * Takes a symbol and converts it into a MathML text node after performing - * optional replacement from symbols.js. - */ - /** - * This file converts a parse tree into a cooresponding MathML tree. The main - * entry point is the `buildMathML` function, which takes a parse tree from the - * parser. - */ - - var makeText = function makeText(text, mode) { - if (_symbols2.default[mode][text] && _symbols2.default[mode][text].replace) { - text = _symbols2.default[mode][text].replace; - } - - return new _mathMLTree2.default.TextNode(text); - }; - - /** - * Returns the math variant as a string or null if none is required. - */ - var getVariant = function getVariant(group, options) { - var font = options.font; - if (!font) { - return null; - } - - var mode = group.mode; - if (font === "mathit") { - return "italic"; - } - - var value = group.value; - if (_utils2.default.contains(["\\imath", "\\jmath"], value)) { - return null; - } - - if (_symbols2.default[mode][value] && _symbols2.default[mode][value].replace) { - value = _symbols2.default[mode][value].replace; - } - - var fontName = _buildCommon.fontMap[font].fontName; - if (_fontMetrics2.default.getCharacterMetrics(value, fontName)) { - return _buildCommon.fontMap[options.font].variant; - } - - return null; - }; - - /** - * Functions for handling the different types of groups found in the parse - * tree. Each function should take a parse group and return a MathML node. - */ - var groupTypes = {}; - - var defaultVariant = { - "mi": "italic", - "mn": "normal", - "mtext": "normal" - }; - - groupTypes.mathord = function (group, options) { - var node = new _mathMLTree2.default.MathNode("mi", [makeText(group.value, group.mode)]); - - var variant = getVariant(group, options) || "italic"; - if (variant !== defaultVariant[node.type]) { - node.setAttribute("mathvariant", variant); - } - return node; - }; - - groupTypes.textord = function (group, options) { - var text = makeText(group.value, group.mode); - - var variant = getVariant(group, options) || "normal"; - - var node = void 0; - if (group.mode === 'text') { - node = new _mathMLTree2.default.MathNode("mtext", [text]); - } else if (/[0-9]/.test(group.value)) { - // TODO(kevinb) merge adjacent nodes - // do it as a post processing step - node = new _mathMLTree2.default.MathNode("mn", [text]); - } else if (group.value === "\\prime") { - node = new _mathMLTree2.default.MathNode("mo", [text]); - } else { - node = new _mathMLTree2.default.MathNode("mi", [text]); - } - if (variant !== defaultVariant[node.type]) { - node.setAttribute("mathvariant", variant); - } - - return node; - }; - - groupTypes.bin = function (group) { - var node = new _mathMLTree2.default.MathNode("mo", [makeText(group.value, group.mode)]); - - return node; - }; - - groupTypes.rel = function (group) { - var node = new _mathMLTree2.default.MathNode("mo", [makeText(group.value, group.mode)]); - - return node; - }; - - groupTypes.open = function (group) { - var node = new _mathMLTree2.default.MathNode("mo", [makeText(group.value, group.mode)]); - - return node; - }; - - groupTypes.close = function (group) { - var node = new _mathMLTree2.default.MathNode("mo", [makeText(group.value, group.mode)]); - - return node; - }; - - groupTypes.inner = function (group) { - var node = new _mathMLTree2.default.MathNode("mo", [makeText(group.value, group.mode)]); - - return node; - }; - - groupTypes.punct = function (group) { - var node = new _mathMLTree2.default.MathNode("mo", [makeText(group.value, group.mode)]); - - node.setAttribute("separator", "true"); - - return node; - }; - - groupTypes.ordgroup = function (group, options) { - var inner = buildExpression(group.value, options); - - var node = new _mathMLTree2.default.MathNode("mrow", inner); - - return node; - }; - - groupTypes.text = function (group, options) { - var body = group.value.body; - - // Convert each element of the body into MathML, and combine consecutive - // outputs into a single tag. In this way, we don't - // nest non-text items (e.g., $nested-math$) within an . - var inner = []; - var currentText = null; - for (var i = 0; i < body.length; i++) { - var _group = buildGroup(body[i], options); - if (_group.type === 'mtext' && currentText != null) { - Array.prototype.push.apply(currentText.children, _group.children); - } else { - inner.push(_group); - if (_group.type === 'mtext') { - currentText = _group; - } - } - } - - // If there is a single tag in the end (presumably ), - // just return it. Otherwise, wrap them in an . - if (inner.length === 1) { - return inner[0]; - } else { - return new _mathMLTree2.default.MathNode("mrow", inner); - } - }; - - groupTypes.color = function (group, options) { - var inner = buildExpression(group.value.value, options); - - var node = new _mathMLTree2.default.MathNode("mstyle", inner); - - node.setAttribute("mathcolor", group.value.color); - - return node; - }; - - groupTypes.supsub = function (group, options) { - // Is the inner group a relevant horizonal brace? - var isBrace = false; - var isOver = void 0; - var isSup = void 0; - if (group.value.base) { - if (group.value.base.value.type === "horizBrace") { - isSup = group.value.sup ? true : false; - if (isSup === group.value.base.value.isOver) { - isBrace = true; - isOver = group.value.base.value.isOver; - } - } - } - - var removeUnnecessaryRow = true; - var children = [buildGroup(group.value.base, options, removeUnnecessaryRow)]; - - if (group.value.sub) { - children.push(buildGroup(group.value.sub, options, removeUnnecessaryRow)); - } - - if (group.value.sup) { - children.push(buildGroup(group.value.sup, options, removeUnnecessaryRow)); - } - - var nodeType = void 0; - if (isBrace) { - nodeType = isOver ? "mover" : "munder"; - } else if (!group.value.sub) { - nodeType = "msup"; - } else if (!group.value.sup) { - nodeType = "msub"; - } else { - var base = group.value.base; - if (base && base.value.limits && options.style === _Style2.default.DISPLAY) { - nodeType = "munderover"; - } else { - nodeType = "msubsup"; - } - } - - var node = new _mathMLTree2.default.MathNode(nodeType, children); - - return node; - }; - - groupTypes.genfrac = function (group, options) { - var node = new _mathMLTree2.default.MathNode("mfrac", [buildGroup(group.value.numer, options), buildGroup(group.value.denom, options)]); - - if (!group.value.hasBarLine) { - node.setAttribute("linethickness", "0px"); - } - - if (group.value.leftDelim != null || group.value.rightDelim != null) { - var withDelims = []; - - if (group.value.leftDelim != null) { - var leftOp = new _mathMLTree2.default.MathNode("mo", [new _mathMLTree2.default.TextNode(group.value.leftDelim)]); - - leftOp.setAttribute("fence", "true"); - - withDelims.push(leftOp); - } - - withDelims.push(node); - - if (group.value.rightDelim != null) { - var rightOp = new _mathMLTree2.default.MathNode("mo", [new _mathMLTree2.default.TextNode(group.value.rightDelim)]); - - rightOp.setAttribute("fence", "true"); - - withDelims.push(rightOp); - } - - var outerNode = new _mathMLTree2.default.MathNode("mrow", withDelims); - - return outerNode; - } - - return node; - }; - - groupTypes.array = function (group, options) { - return new _mathMLTree2.default.MathNode("mtable", group.value.body.map(function (row) { - return new _mathMLTree2.default.MathNode("mtr", row.map(function (cell) { - return new _mathMLTree2.default.MathNode("mtd", [buildGroup(cell, options)]); - })); - })); - }; - - groupTypes.sqrt = function (group, options) { - var node = void 0; - if (group.value.index) { - node = new _mathMLTree2.default.MathNode("mroot", [buildGroup(group.value.body, options), buildGroup(group.value.index, options)]); - } else { - node = new _mathMLTree2.default.MathNode("msqrt", [buildGroup(group.value.body, options)]); - } - - return node; - }; - - groupTypes.leftright = function (group, options) { - var inner = buildExpression(group.value.body, options); - - if (group.value.left !== ".") { - var leftNode = new _mathMLTree2.default.MathNode("mo", [makeText(group.value.left, group.mode)]); - - leftNode.setAttribute("fence", "true"); - - inner.unshift(leftNode); - } - - if (group.value.right !== ".") { - var rightNode = new _mathMLTree2.default.MathNode("mo", [makeText(group.value.right, group.mode)]); - - rightNode.setAttribute("fence", "true"); - - inner.push(rightNode); - } - - var outerNode = new _mathMLTree2.default.MathNode("mrow", inner); - - return outerNode; - }; - - groupTypes.middle = function (group, options) { - var middleNode = new _mathMLTree2.default.MathNode("mo", [makeText(group.value.middle, group.mode)]); - middleNode.setAttribute("fence", "true"); - return middleNode; - }; - - groupTypes.accent = function (group, options) { - var accentNode = void 0; - if (group.value.isStretchy) { - accentNode = _stretchy2.default.mathMLnode(group.value.label); - } else { - accentNode = new _mathMLTree2.default.MathNode("mo", [makeText(group.value.label, group.mode)]); - } - - var node = new _mathMLTree2.default.MathNode("mover", [buildGroup(group.value.base, options), accentNode]); - - node.setAttribute("accent", "true"); - - return node; - }; - - groupTypes.spacing = function (group) { - var node = void 0; - - if (group.value === "\\ " || group.value === "\\space" || group.value === " " || group.value === "~") { - node = new _mathMLTree2.default.MathNode("mtext", [new _mathMLTree2.default.TextNode("\xA0")]); - } else { - node = new _mathMLTree2.default.MathNode("mspace"); - - node.setAttribute("width", _buildCommon2.default.spacingFunctions[group.value].size); - } - - return node; - }; - - groupTypes.op = function (group, options) { - var node = void 0; - - // TODO(emily): handle big operators using the `largeop` attribute - - if (group.value.symbol) { - // This is a symbol. Just add the symbol. - node = new _mathMLTree2.default.MathNode("mo", [makeText(group.value.body, group.mode)]); - } else if (group.value.value) { - // This is an operator with children. Add them. - node = new _mathMLTree2.default.MathNode("mo", buildExpression(group.value.value, options)); - } else { - // This is a text operator. Add all of the characters from the - // operator's name. - // TODO(emily): Add a space in the middle of some of these - // operators, like \limsup. - node = new _mathMLTree2.default.MathNode("mi", [new _mathMLTree2.default.TextNode(group.value.body.slice(1))]); - } - - return node; - }; - - groupTypes.mod = function (group, options) { - var inner = []; - - if (group.value.modType === "pod" || group.value.modType === "pmod") { - inner.push(new _mathMLTree2.default.MathNode("mo", [makeText("(", group.mode)])); - } - if (group.value.modType !== "pod") { - inner.push(new _mathMLTree2.default.MathNode("mo", [makeText("mod", group.mode)])); - } - if (group.value.value) { - var space = new _mathMLTree2.default.MathNode("mspace"); - space.setAttribute("width", "0.333333em"); - inner.push(space); - inner = inner.concat(buildExpression(group.value.value, options)); - } - if (group.value.modType === "pod" || group.value.modType === "pmod") { - inner.push(new _mathMLTree2.default.MathNode("mo", [makeText(")", group.mode)])); - } - - return new _mathMLTree2.default.MathNode("mo", inner); - }; - - groupTypes.katex = function (group) { - var node = new _mathMLTree2.default.MathNode("mtext", [new _mathMLTree2.default.TextNode("KaTeX")]); - - return node; - }; - - groupTypes.font = function (group, options) { - var font = group.value.font; - return buildGroup(group.value.body, options.withFont(font)); - }; - - groupTypes.delimsizing = function (group) { - var children = []; - - if (group.value.value !== ".") { - children.push(makeText(group.value.value, group.mode)); - } - - var node = new _mathMLTree2.default.MathNode("mo", children); - - if (group.value.mclass === "mopen" || group.value.mclass === "mclose") { - // Only some of the delimsizing functions act as fences, and they - // return "mopen" or "mclose" mclass. - node.setAttribute("fence", "true"); - } else { - // Explicitly disable fencing if it's not a fence, to override the - // defaults. - node.setAttribute("fence", "false"); - } - - return node; - }; - - groupTypes.styling = function (group, options) { - // Figure out what style we're changing to. - // TODO(kevinb): dedupe this with buildHTML.js - // This will be easier of handling of styling nodes is in the same file. - var styleMap = { - "display": _Style2.default.DISPLAY, - "text": _Style2.default.TEXT, - "script": _Style2.default.SCRIPT, - "scriptscript": _Style2.default.SCRIPTSCRIPT - }; - - var newStyle = styleMap[group.value.style]; - var newOptions = options.havingStyle(newStyle); - - var inner = buildExpression(group.value.value, newOptions); - - var node = new _mathMLTree2.default.MathNode("mstyle", inner); - - var styleAttributes = { - "display": ["0", "true"], - "text": ["0", "false"], - "script": ["1", "false"], - "scriptscript": ["2", "false"] - }; - - var attr = styleAttributes[group.value.style]; - - node.setAttribute("scriptlevel", attr[0]); - node.setAttribute("displaystyle", attr[1]); - - return node; - }; - - groupTypes.sizing = function (group, options) { - var newOptions = options.havingSize(group.value.size); - var inner = buildExpression(group.value.value, newOptions); - - var node = new _mathMLTree2.default.MathNode("mstyle", inner); - - // TODO(emily): This doesn't produce the correct size for nested size - // changes, because we don't keep state of what style we're currently - // in, so we can't reset the size to normal before changing it. Now - // that we're passing an options parameter we should be able to fix - // this. - node.setAttribute("mathsize", newOptions.sizeMultiplier + "em"); - - return node; - }; - - groupTypes.overline = function (group, options) { - var operator = new _mathMLTree2.default.MathNode("mo", [new _mathMLTree2.default.TextNode("\u203E")]); - operator.setAttribute("stretchy", "true"); - - var node = new _mathMLTree2.default.MathNode("mover", [buildGroup(group.value.body, options), operator]); - node.setAttribute("accent", "true"); - - return node; - }; - - groupTypes.underline = function (group, options) { - var operator = new _mathMLTree2.default.MathNode("mo", [new _mathMLTree2.default.TextNode("\u203E")]); - operator.setAttribute("stretchy", "true"); - - var node = new _mathMLTree2.default.MathNode("munder", [buildGroup(group.value.body, options), operator]); - node.setAttribute("accentunder", "true"); - - return node; - }; - - groupTypes.accentUnder = function (group, options) { - var accentNode = _stretchy2.default.mathMLnode(group.value.label); - var node = new _mathMLTree2.default.MathNode("munder", [buildGroup(group.value.body, options), accentNode]); - node.setAttribute("accentunder", "true"); - return node; - }; - - groupTypes.enclose = function (group, options) { - var node = new _mathMLTree2.default.MathNode("menclose", [buildGroup(group.value.body, options)]); - var notation = ""; - switch (group.value.label) { - case "\\bcancel": - notation = "downdiagonalstrike"; - break; - case "\\sout": - notation = "horizontalstrike"; - break; - case "\\fbox": - notation = "box"; - break; - default: - notation = "updiagonalstrike"; - } - node.setAttribute("notation", notation); - return node; - }; - - groupTypes.horizBrace = function (group, options) { - var accentNode = _stretchy2.default.mathMLnode(group.value.label); - return new _mathMLTree2.default.MathNode(group.value.isOver ? "mover" : "munder", [buildGroup(group.value.base, options), accentNode]); - }; - - groupTypes.xArrow = function (group, options) { - var arrowNode = _stretchy2.default.mathMLnode(group.value.label); - var node = void 0; - var lowerNode = void 0; - - if (group.value.body) { - var upperNode = buildGroup(group.value.body, options); - if (group.value.below) { - lowerNode = buildGroup(group.value.below, options); - node = new _mathMLTree2.default.MathNode("munderover", [arrowNode, lowerNode, upperNode]); - } else { - node = new _mathMLTree2.default.MathNode("mover", [arrowNode, upperNode]); - } - } else if (group.value.below) { - lowerNode = buildGroup(group.value.below, options); - node = new _mathMLTree2.default.MathNode("munder", [arrowNode, lowerNode]); - } else { - node = new _mathMLTree2.default.MathNode("mover", [arrowNode]); - } - return node; - }; - - groupTypes.rule = function (group) { - // TODO(emily): Figure out if there's an actual way to draw black boxes - // in MathML. - var node = new _mathMLTree2.default.MathNode("mrow"); - - return node; - }; - - groupTypes.kern = function (group) { - // TODO(kevin): Figure out if there's a way to add space in MathML - var node = new _mathMLTree2.default.MathNode("mrow"); - - return node; - }; - - groupTypes.llap = function (group, options) { - var node = new _mathMLTree2.default.MathNode("mpadded", [buildGroup(group.value.body, options)]); - - node.setAttribute("lspace", "-1width"); - node.setAttribute("width", "0px"); - - return node; - }; - - groupTypes.rlap = function (group, options) { - var node = new _mathMLTree2.default.MathNode("mpadded", [buildGroup(group.value.body, options)]); - - node.setAttribute("width", "0px"); - - return node; - }; - - groupTypes.phantom = function (group, options) { - var inner = buildExpression(group.value.value, options); - return new _mathMLTree2.default.MathNode("mphantom", inner); - }; - - groupTypes.mclass = function (group, options) { - var inner = buildExpression(group.value.value, options); - return new _mathMLTree2.default.MathNode("mstyle", inner); - }; - - /** - * Takes a list of nodes, builds them, and returns a list of the generated - * MathML nodes. A little simpler than the HTML version because we don't do any - * previous-node handling. - */ - var buildExpression = function buildExpression(expression, options) { - var groups = []; - for (var i = 0; i < expression.length; i++) { - var group = expression[i]; - groups.push(buildGroup(group, options)); - } - - // TODO(kevinb): combine \\not with mrels and mords - - return groups; - }; - - /** - * Takes a group from the parser and calls the appropriate groupTypes function - * on it to produce a MathML node. - */ - // TODO(kevinb): determine if removeUnnecessaryRow should always be true - var buildGroup = function buildGroup(group, options) { - var removeUnnecessaryRow = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; - - if (!group) { - return new _mathMLTree2.default.MathNode("mrow"); - } - - if (groupTypes[group.type]) { - // Call the groupTypes function - var result = groupTypes[group.type](group, options); - if (removeUnnecessaryRow) { - if (result.type === "mrow" && result.children.length === 1) { - return result.children[0]; - } - } - return result; - } else { - throw new _ParseError2.default("Got group of unknown type: '" + group.type + "'"); - } - }; - - /** - * Takes a full parse tree and settings and builds a MathML representation of - * it. In particular, we put the elements from building the parse tree into a - * tag so we can also include that TeX source as an annotation. - * - * Note that we actually return a domTree element with a `` inside it so - * we can do appropriate styling. - */ - var buildMathML = function buildMathML(tree, texExpression, options) { - var expression = buildExpression(tree, options); - - // Wrap up the expression in an mrow so it is presented in the semantics - // tag correctly. - var wrapper = new _mathMLTree2.default.MathNode("mrow", expression); - - // Build a TeX annotation of the source - var annotation = new _mathMLTree2.default.MathNode("annotation", [new _mathMLTree2.default.TextNode(texExpression)]); - - annotation.setAttribute("encoding", "application/x-tex"); - - var semantics = new _mathMLTree2.default.MathNode("semantics", [wrapper, annotation]); - - var math = new _mathMLTree2.default.MathNode("math", [semantics]); - - // You can't style nodes, so we wrap the node in a span. - return (0, _buildCommon.makeSpan)(["katex-mathml"], [math]); - }; - - module.exports = buildMathML; - - },{"./ParseError":29,"./Style":33,"./buildCommon":34,"./fontMetrics":41,"./mathMLTree":45,"./stretchy":47,"./symbols":48,"./utils":51}],37:[function(require,module,exports){ - - var _buildHTML = require("./buildHTML"); - - var _buildHTML2 = _interopRequireDefault(_buildHTML); - - var _buildMathML = require("./buildMathML"); - - var _buildMathML2 = _interopRequireDefault(_buildMathML); - - var _buildCommon = require("./buildCommon"); - - var _Options = require("./Options"); - - var _Options2 = _interopRequireDefault(_Options); - - var _Settings = require("./Settings"); - - var _Settings2 = _interopRequireDefault(_Settings); - - var _Style = require("./Style"); - - var _Style2 = _interopRequireDefault(_Style); - - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - - var buildTree = function buildTree(tree, expression, settings) { - settings = settings || new _Settings2.default({}); - - var startStyle = _Style2.default.TEXT; - if (settings.displayMode) { - startStyle = _Style2.default.DISPLAY; - } - - // Setup the default options - var options = new _Options2.default({ - style: startStyle - }); - - // `buildHTML` sometimes messes with the parse tree (like turning bins -> - // ords), so we build the MathML version first. - var mathMLNode = (0, _buildMathML2.default)(tree, expression, options); - var htmlNode = (0, _buildHTML2.default)(tree, options); - - var katexNode = (0, _buildCommon.makeSpan)(["katex"], [mathMLNode, htmlNode]); - - if (settings.displayMode) { - return (0, _buildCommon.makeSpan)(["katex-display"], [katexNode]); - } else { - return katexNode; - } - }; - - module.exports = buildTree; - - },{"./Options":28,"./Settings":32,"./Style":33,"./buildCommon":34,"./buildHTML":35,"./buildMathML":36}],38:[function(require,module,exports){ - - var _ParseError = require("./ParseError"); - - var _ParseError2 = _interopRequireDefault(_ParseError); - - var _Style = require("./Style"); - - var _Style2 = _interopRequireDefault(_Style); - - var _buildCommon = require("./buildCommon"); - - var _buildCommon2 = _interopRequireDefault(_buildCommon); - - var _fontMetrics = require("./fontMetrics"); - - var _fontMetrics2 = _interopRequireDefault(_fontMetrics); - - var _symbols = require("./symbols"); - - var _symbols2 = _interopRequireDefault(_symbols); - - var _utils = require("./utils"); - - var _utils2 = _interopRequireDefault(_utils); - - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - - /** - * Get the metrics for a given symbol and font, after transformation (i.e. - * after following replacement from symbols.js) - */ - /** - * This file deals with creating delimiters of various sizes. The TeXbook - * discusses these routines on page 441-442, in the "Another subroutine sets box - * x to a specified variable delimiter" paragraph. - * - * There are three main routines here. `makeSmallDelim` makes a delimiter in the - * normal font, but in either text, script, or scriptscript style. - * `makeLargeDelim` makes a delimiter in textstyle, but in one of the Size1, - * Size2, Size3, or Size4 fonts. `makeStackedDelim` makes a delimiter out of - * smaller pieces that are stacked on top of one another. - * - * The functions take a parameter `center`, which determines if the delimiter - * should be centered around the axis. - * - * Then, there are three exposed functions. `sizedDelim` makes a delimiter in - * one of the given sizes. This is used for things like `\bigl`. - * `customSizedDelim` makes a delimiter with a given total height+depth. It is - * called in places like `\sqrt`. `leftRightDelim` makes an appropriate - * delimiter which surrounds an expression of a given height an depth. It is - * used in `\left` and `\right`. - */ - - var getMetrics = function getMetrics(symbol, font) { - if (_symbols2.default.math[symbol] && _symbols2.default.math[symbol].replace) { - return _fontMetrics2.default.getCharacterMetrics(_symbols2.default.math[symbol].replace, font); - } else { - return _fontMetrics2.default.getCharacterMetrics(symbol, font); - } - }; - - /** - * Puts a delimiter span in a given style, and adds appropriate height, depth, - * and maxFontSizes. - */ - var styleWrap = function styleWrap(delim, toStyle, options, classes) { - var newOptions = options.havingBaseStyle(toStyle); - - var span = (0, _buildCommon.makeSpan)((classes || []).concat(newOptions.sizingClasses(options)), [delim], options); - - span.delimSizeMultiplier = newOptions.sizeMultiplier / options.sizeMultiplier; - span.height *= span.delimSizeMultiplier; - span.depth *= span.delimSizeMultiplier; - span.maxFontSize = newOptions.sizeMultiplier; - - return span; - }; - - var centerSpan = function centerSpan(span, options, style) { - var newOptions = options.havingBaseStyle(style); - var shift = (1 - options.sizeMultiplier / newOptions.sizeMultiplier) * options.fontMetrics().axisHeight; - - span.classes.push("delimcenter"); - span.style.top = shift + "em"; - span.height -= shift; - span.depth += shift; - }; - - /** - * Makes a small delimiter. This is a delimiter that comes in the Main-Regular - * font, but is restyled to either be in textstyle, scriptstyle, or - * scriptscriptstyle. - */ - var makeSmallDelim = function makeSmallDelim(delim, style, center, options, mode, classes) { - var text = _buildCommon2.default.makeSymbol(delim, "Main-Regular", mode, options); - var span = styleWrap(text, style, options, classes); - if (center) { - centerSpan(span, options, style); - } - return span; - }; - - /** - * Builds a symbol in the given font size (note size is an integer) - */ - var mathrmSize = function mathrmSize(value, size, mode, options) { - return _buildCommon2.default.makeSymbol(value, "Size" + size + "-Regular", mode, options); - }; - - /** - * Makes a large delimiter. This is a delimiter that comes in the Size1, Size2, - * Size3, or Size4 fonts. It is always rendered in textstyle. - */ - var makeLargeDelim = function makeLargeDelim(delim, size, center, options, mode, classes) { - var inner = mathrmSize(delim, size, mode, options); - var span = styleWrap((0, _buildCommon.makeSpan)(["delimsizing", "size" + size], [inner], options), _Style2.default.TEXT, options, classes); - if (center) { - centerSpan(span, options, _Style2.default.TEXT); - } - return span; - }; - - /** - * Make an inner span with the given offset and in the given font. This is used - * in `makeStackedDelim` to make the stacking pieces for the delimiter. - */ - var makeInner = function makeInner(symbol, font, mode) { - var sizeClass = void 0; - // Apply the correct CSS class to choose the right font. - if (font === "Size1-Regular") { - sizeClass = "delim-size1"; - } else if (font === "Size4-Regular") { - sizeClass = "delim-size4"; - } - - var inner = (0, _buildCommon.makeSpan)(["delimsizinginner", sizeClass], [(0, _buildCommon.makeSpan)([], [_buildCommon2.default.makeSymbol(symbol, font, mode)])]); - - // Since this will be passed into `makeVList` in the end, wrap the element - // in the appropriate tag that VList uses. - return { type: "elem", elem: inner }; - }; - - /** - * Make a stacked delimiter out of a given delimiter, with the total height at - * least `heightTotal`. This routine is mentioned on page 442 of the TeXbook. - */ - var makeStackedDelim = function makeStackedDelim(delim, heightTotal, center, options, mode, classes) { - // There are four parts, the top, an optional middle, a repeated part, and a - // bottom. - var top = void 0; - var middle = void 0; - var repeat = void 0; - var bottom = void 0; - top = repeat = bottom = delim; - middle = null; - // Also keep track of what font the delimiters are in - var font = "Size1-Regular"; - - // We set the parts and font based on the symbol. Note that we use - // '\u23d0' instead of '|' and '\u2016' instead of '\\|' for the - // repeats of the arrows - if (delim === "\\uparrow") { - repeat = bottom = "\u23D0"; - } else if (delim === "\\Uparrow") { - repeat = bottom = "\u2016"; - } else if (delim === "\\downarrow") { - top = repeat = "\u23D0"; - } else if (delim === "\\Downarrow") { - top = repeat = "\u2016"; - } else if (delim === "\\updownarrow") { - top = "\\uparrow"; - repeat = "\u23D0"; - bottom = "\\downarrow"; - } else if (delim === "\\Updownarrow") { - top = "\\Uparrow"; - repeat = "\u2016"; - bottom = "\\Downarrow"; - } else if (delim === "[" || delim === "\\lbrack") { - top = "\u23A1"; - repeat = "\u23A2"; - bottom = "\u23A3"; - font = "Size4-Regular"; - } else if (delim === "]" || delim === "\\rbrack") { - top = "\u23A4"; - repeat = "\u23A5"; - bottom = "\u23A6"; - font = "Size4-Regular"; - } else if (delim === "\\lfloor") { - repeat = top = "\u23A2"; - bottom = "\u23A3"; - font = "Size4-Regular"; - } else if (delim === "\\lceil") { - top = "\u23A1"; - repeat = bottom = "\u23A2"; - font = "Size4-Regular"; - } else if (delim === "\\rfloor") { - repeat = top = "\u23A5"; - bottom = "\u23A6"; - font = "Size4-Regular"; - } else if (delim === "\\rceil") { - top = "\u23A4"; - repeat = bottom = "\u23A5"; - font = "Size4-Regular"; - } else if (delim === "(") { - top = "\u239B"; - repeat = "\u239C"; - bottom = "\u239D"; - font = "Size4-Regular"; - } else if (delim === ")") { - top = "\u239E"; - repeat = "\u239F"; - bottom = "\u23A0"; - font = "Size4-Regular"; - } else if (delim === "\\{" || delim === "\\lbrace") { - top = "\u23A7"; - middle = "\u23A8"; - bottom = "\u23A9"; - repeat = "\u23AA"; - font = "Size4-Regular"; - } else if (delim === "\\}" || delim === "\\rbrace") { - top = "\u23AB"; - middle = "\u23AC"; - bottom = "\u23AD"; - repeat = "\u23AA"; - font = "Size4-Regular"; - } else if (delim === "\\lgroup") { - top = "\u23A7"; - bottom = "\u23A9"; - repeat = "\u23AA"; - font = "Size4-Regular"; - } else if (delim === "\\rgroup") { - top = "\u23AB"; - bottom = "\u23AD"; - repeat = "\u23AA"; - font = "Size4-Regular"; - } else if (delim === "\\lmoustache") { - top = "\u23A7"; - bottom = "\u23AD"; - repeat = "\u23AA"; - font = "Size4-Regular"; - } else if (delim === "\\rmoustache") { - top = "\u23AB"; - bottom = "\u23A9"; - repeat = "\u23AA"; - font = "Size4-Regular"; - } - - // Get the metrics of the four sections - var topMetrics = getMetrics(top, font); - var topHeightTotal = topMetrics.height + topMetrics.depth; - var repeatMetrics = getMetrics(repeat, font); - var repeatHeightTotal = repeatMetrics.height + repeatMetrics.depth; - var bottomMetrics = getMetrics(bottom, font); - var bottomHeightTotal = bottomMetrics.height + bottomMetrics.depth; - var middleHeightTotal = 0; - var middleFactor = 1; - if (middle !== null) { - var middleMetrics = getMetrics(middle, font); - middleHeightTotal = middleMetrics.height + middleMetrics.depth; - middleFactor = 2; // repeat symmetrically above and below middle - } - - // Calcuate the minimal height that the delimiter can have. - // It is at least the size of the top, bottom, and optional middle combined. - var minHeight = topHeightTotal + bottomHeightTotal + middleHeightTotal; - - // Compute the number of copies of the repeat symbol we will need - var repeatCount = Math.ceil((heightTotal - minHeight) / (middleFactor * repeatHeightTotal)); - - // Compute the total height of the delimiter including all the symbols - var realHeightTotal = minHeight + repeatCount * middleFactor * repeatHeightTotal; - - // The center of the delimiter is placed at the center of the axis. Note - // that in this context, "center" means that the delimiter should be - // centered around the axis in the current style, while normally it is - // centered around the axis in textstyle. - var axisHeight = options.fontMetrics().axisHeight; - if (center) { - axisHeight *= options.sizeMultiplier; - } - // Calculate the depth - var depth = realHeightTotal / 2 - axisHeight; - - // Now, we start building the pieces that will go into the vlist - - // Keep a list of the inner pieces - var inners = []; - - // Add the bottom symbol - inners.push(makeInner(bottom, font, mode)); - - if (middle === null) { - // Add that many symbols - for (var i = 0; i < repeatCount; i++) { - inners.push(makeInner(repeat, font, mode)); - } - } else { - // When there is a middle bit, we need the middle part and two repeated - // sections - for (var _i = 0; _i < repeatCount; _i++) { - inners.push(makeInner(repeat, font, mode)); - } - inners.push(makeInner(middle, font, mode)); - for (var _i2 = 0; _i2 < repeatCount; _i2++) { - inners.push(makeInner(repeat, font, mode)); - } - } - - // Add the top symbol - inners.push(makeInner(top, font, mode)); - - // Finally, build the vlist - var newOptions = options.havingBaseStyle(_Style2.default.TEXT); - var inner = _buildCommon2.default.makeVList(inners, "bottom", depth, newOptions); - - return styleWrap((0, _buildCommon.makeSpan)(["delimsizing", "mult"], [inner], newOptions), _Style2.default.TEXT, options, classes); - }; - - var sqrtInnerSVG = { - // The main path geometry is from glyph U221A in the font KaTeX Main - main: "", - - // size1 is from glyph U221A in the font KaTeX_Size1-Regular - 1: "", - - // size2 is from glyph U221A in the font KaTeX_Size2-Regular - 2: "", - - // size3 is from glyph U221A in the font KaTeX_Size3-Regular - 3: "", - - // size4 is from glyph U221A in the font KaTeX_Size4-Regular - 4: "", - - // tall is from glyph U23B7 in the font KaTeX_Size4-Regular - tall: "l-4 4-4 4c-.667.667-2 1.5-4 2.5s-4.167 1.833-6.5 2.5-5.5 1-9.5 1h\n-12l-28-84c-16.667-52-96.667 -294.333-240-727l-212 -643 -85 170c-4-3.333-8.333\n-7.667-13 -13l-13-13l77-155 77-156c66 199.333 139 419.667 219 661 l218 661z\nM702 0H400000v40H742z'/>" - }; - - var sqrtSpan = function sqrtSpan(height, delim, options) { - // Create a span containing an SVG image of a sqrt symbol. - var span = _buildCommon2.default.makeSpan([], [], options); - var sizeMultiplier = options.sizeMultiplier; // default - - if (delim.type === "small") { - // Get an SVG that is derived from glyph U+221A in font KaTeX-Main. - var newOptions = options.havingBaseStyle(delim.style); - sizeMultiplier = newOptions.sizeMultiplier / options.sizeMultiplier; - - span.height = 1 * sizeMultiplier; - span.style.height = span.height + "em"; - span.surdWidth = 0.833 * sizeMultiplier; // from the font. - //In the font, the glyph is 1000 units tall. The font scale is 1:1000. - - span.innerHTML = "\n " + sqrtInnerSVG['main'] + ""; - } else if (delim.type === "large") { - // These SVGs come from fonts: KaTeX_Size1, _Size2, etc. - // Get sqrt height from font data - span.height = sizeToMaxHeight[delim.size] / sizeMultiplier; - span.style.height = span.height + "em"; - span.surdWidth = 1.0 / sizeMultiplier; // from the font - - span.innerHTML = "\n " + sqrtInnerSVG[delim.size] + ""; - } else { - // Tall sqrt. In TeX, this would be stacked using multiple glyphs. - // We'll use a single SVG to accomplish the same thing. - span.height = height / sizeMultiplier; - span.style.height = span.height + "em"; - span.surdWidth = 1.056 / sizeMultiplier; - var viewBoxHeight = Math.floor(span.height * 1000); // scale = 1:1000 - var vertSegment = viewBoxHeight - 54; - - // This \sqrt is customized in both height and width. We set the - // height now. Then CSS will stretch the image to the correct width. - // This SVG path comes from glyph U+23B7, font KaTeX_Size4-Regular. - span.innerHTML = "\n \n "; - } - - span.sizeMultiplier = sizeMultiplier; - - return span; - }; - - // There are three kinds of delimiters, delimiters that stack when they become - // too large - var stackLargeDelimiters = ["(", ")", "[", "\\lbrack", "]", "\\rbrack", "\\{", "\\lbrace", "\\}", "\\rbrace", "\\lfloor", "\\rfloor", "\\lceil", "\\rceil", "\\surd"]; - - // delimiters that always stack - var stackAlwaysDelimiters = ["\\uparrow", "\\downarrow", "\\updownarrow", "\\Uparrow", "\\Downarrow", "\\Updownarrow", "|", "\\|", "\\vert", "\\Vert", "\\lvert", "\\rvert", "\\lVert", "\\rVert", "\\lgroup", "\\rgroup", "\\lmoustache", "\\rmoustache"]; - - // and delimiters that never stack - var stackNeverDelimiters = ["<", ">", "\\langle", "\\rangle", "/", "\\backslash", "\\lt", "\\gt"]; - - // Metrics of the different sizes. Found by looking at TeX's output of - // $\bigl| // \Bigl| \biggl| \Biggl| \showlists$ - // Used to create stacked delimiters of appropriate sizes in makeSizedDelim. - var sizeToMaxHeight = [0, 1.2, 1.8, 2.4, 3.0]; - - /** - * Used to create a delimiter of a specific size, where `size` is 1, 2, 3, or 4. - */ - var makeSizedDelim = function makeSizedDelim(delim, size, options, mode, classes) { - // < and > turn into \langle and \rangle in delimiters - if (delim === "<" || delim === "\\lt") { - delim = "\\langle"; - } else if (delim === ">" || delim === "\\gt") { - delim = "\\rangle"; - } - - // Sized delimiters are never centered. - if (_utils2.default.contains(stackLargeDelimiters, delim) || _utils2.default.contains(stackNeverDelimiters, delim)) { - return makeLargeDelim(delim, size, false, options, mode, classes); - } else if (_utils2.default.contains(stackAlwaysDelimiters, delim)) { - return makeStackedDelim(delim, sizeToMaxHeight[size], false, options, mode, classes); - } else { - throw new _ParseError2.default("Illegal delimiter: '" + delim + "'"); - } - }; - - /** - * There are three different sequences of delimiter sizes that the delimiters - * follow depending on the kind of delimiter. This is used when creating custom - * sized delimiters to decide whether to create a small, large, or stacked - * delimiter. - * - * In real TeX, these sequences aren't explicitly defined, but are instead - * defined inside the font metrics. Since there are only three sequences that - * are possible for the delimiters that TeX defines, it is easier to just encode - * them explicitly here. - */ - - // Delimiters that never stack try small delimiters and large delimiters only - var stackNeverDelimiterSequence = [{ type: "small", style: _Style2.default.SCRIPTSCRIPT }, { type: "small", style: _Style2.default.SCRIPT }, { type: "small", style: _Style2.default.TEXT }, { type: "large", size: 1 }, { type: "large", size: 2 }, { type: "large", size: 3 }, { type: "large", size: 4 }]; - - // Delimiters that always stack try the small delimiters first, then stack - var stackAlwaysDelimiterSequence = [{ type: "small", style: _Style2.default.SCRIPTSCRIPT }, { type: "small", style: _Style2.default.SCRIPT }, { type: "small", style: _Style2.default.TEXT }, { type: "stack" }]; - - // Delimiters that stack when large try the small and then large delimiters, and - // stack afterwards - var stackLargeDelimiterSequence = [{ type: "small", style: _Style2.default.SCRIPTSCRIPT }, { type: "small", style: _Style2.default.SCRIPT }, { type: "small", style: _Style2.default.TEXT }, { type: "large", size: 1 }, { type: "large", size: 2 }, { type: "large", size: 3 }, { type: "large", size: 4 }, { type: "stack" }]; - - /** - * Get the font used in a delimiter based on what kind of delimiter it is. - */ - var delimTypeToFont = function delimTypeToFont(type) { - if (type.type === "small") { - return "Main-Regular"; - } else if (type.type === "large") { - return "Size" + type.size + "-Regular"; - } else if (type.type === "stack") { - return "Size4-Regular"; - } - }; - - /** - * Traverse a sequence of types of delimiters to decide what kind of delimiter - * should be used to create a delimiter of the given height+depth. - */ - var traverseSequence = function traverseSequence(delim, height, sequence, options) { - // Here, we choose the index we should start at in the sequences. In smaller - // sizes (which correspond to larger numbers in style.size) we start earlier - // in the sequence. Thus, scriptscript starts at index 3-3=0, script starts - // at index 3-2=1, text starts at 3-1=2, and display starts at min(2,3-0)=2 - var start = Math.min(2, 3 - options.style.size); - for (var i = start; i < sequence.length; i++) { - if (sequence[i].type === "stack") { - // This is always the last delimiter, so we just break the loop now. - break; - } - - var metrics = getMetrics(delim, delimTypeToFont(sequence[i])); - var heightDepth = metrics.height + metrics.depth; - - // Small delimiters are scaled down versions of the same font, so we - // account for the style change size. - - if (sequence[i].type === "small") { - var newOptions = options.havingBaseStyle(sequence[i].style); - heightDepth *= newOptions.sizeMultiplier; - } - - // Check if the delimiter at this size works for the given height. - if (heightDepth > height) { - return sequence[i]; - } - } - - // If we reached the end of the sequence, return the last sequence element. - return sequence[sequence.length - 1]; - }; - - /** - * Make a delimiter of a given height+depth, with optional centering. Here, we - * traverse the sequences, and create a delimiter that the sequence tells us to. - */ - var makeCustomSizedDelim = function makeCustomSizedDelim(delim, height, center, options, mode, classes) { - if (delim === "<" || delim === "\\lt") { - delim = "\\langle"; - } else if (delim === ">" || delim === "\\gt") { - delim = "\\rangle"; - } - - // Decide what sequence to use - var sequence = void 0; - if (_utils2.default.contains(stackNeverDelimiters, delim)) { - sequence = stackNeverDelimiterSequence; - } else if (_utils2.default.contains(stackLargeDelimiters, delim)) { - sequence = stackLargeDelimiterSequence; - } else { - sequence = stackAlwaysDelimiterSequence; - } - - // Look through the sequence - var delimType = traverseSequence(delim, height, sequence, options); - - if (delim === "\\surd") { - // Get an SVG image for - return sqrtSpan(height, delimType, options); - } else { - // Get the delimiter from font glyphs. - // Depending on the sequence element we decided on, call the - // appropriate function. - if (delimType.type === "small") { - return makeSmallDelim(delim, delimType.style, center, options, mode, classes); - } else if (delimType.type === "large") { - return makeLargeDelim(delim, delimType.size, center, options, mode, classes); - } else if (delimType.type === "stack") { - return makeStackedDelim(delim, height, center, options, mode, classes); - } - } - }; - - /** - * Make a delimiter for use with `\left` and `\right`, given a height and depth - * of an expression that the delimiters surround. - */ - var makeLeftRightDelim = function makeLeftRightDelim(delim, height, depth, options, mode, classes) { - // We always center \left/\right delimiters, so the axis is always shifted - var axisHeight = options.fontMetrics().axisHeight * options.sizeMultiplier; - - // Taken from TeX source, tex.web, function make_left_right - var delimiterFactor = 901; - var delimiterExtend = 5.0 / options.fontMetrics().ptPerEm; - - var maxDistFromAxis = Math.max(height - axisHeight, depth + axisHeight); - - var totalHeight = Math.max( - // In real TeX, calculations are done using integral values which are - // 65536 per pt, or 655360 per em. So, the division here truncates in - // TeX but doesn't here, producing different results. If we wanted to - // exactly match TeX's calculation, we could do - // Math.floor(655360 * maxDistFromAxis / 500) * - // delimiterFactor / 655360 - // (To see the difference, compare - // x^{x^{\left(\rule{0.1em}{0.68em}\right)}} - // in TeX and KaTeX) - maxDistFromAxis / 500 * delimiterFactor, 2 * maxDistFromAxis - delimiterExtend); - - // Finally, we defer to `makeCustomSizedDelim` with our calculated total - // height - return makeCustomSizedDelim(delim, totalHeight, true, options, mode, classes); - }; - - module.exports = { - sizedDelim: makeSizedDelim, - customSizedDelim: makeCustomSizedDelim, - leftRightDelim: makeLeftRightDelim - }; - - },{"./ParseError":29,"./Style":33,"./buildCommon":34,"./fontMetrics":41,"./symbols":48,"./utils":51}],39:[function(require,module,exports){ - - var _classCallCheck2 = require("babel-runtime/helpers/classCallCheck"); - - var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); - - var _createClass2 = require("babel-runtime/helpers/createClass"); - - var _createClass3 = _interopRequireDefault(_createClass2); - - var _unicodeRegexes = require("./unicodeRegexes"); - - var _unicodeRegexes2 = _interopRequireDefault(_unicodeRegexes); - - var _utils = require("./utils"); - - var _utils2 = _interopRequireDefault(_utils); - - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - - /** - * Create an HTML className based on a list of classes. In addition to joining - * with spaces, we also remove null or empty classes. - */ - /** - * These objects store the data about the DOM nodes we create, as well as some - * extra data. They can then be transformed into real DOM nodes with the - * `toNode` function or HTML markup using `toMarkup`. They are useful for both - * storing extra properties on the nodes, as well as providing a way to easily - * work with the DOM. - * - * Similar functions for working with MathML nodes exist in mathMLTree.js. - */ - var createClass = function createClass(classes) { - classes = classes.slice(); - for (var i = classes.length - 1; i >= 0; i--) { - if (!classes[i]) { - classes.splice(i, 1); - } - } - - return classes.join(" "); - }; - - /** - * This node represents a span node, with a className, a list of children, and - * an inline style. It also contains information about its height, depth, and - * maxFontSize. - */ - - var span = function () { - function span(classes, children, options) { - (0, _classCallCheck3.default)(this, span); - - this.classes = classes || []; - this.children = children || []; - this.height = 0; - this.depth = 0; - this.maxFontSize = 0; - this.style = {}; - this.attributes = {}; - this.innerHTML; // used for inline SVG code. - if (options) { - if (options.style.isTight()) { - this.classes.push("mtight"); - } - if (options.getColor()) { - this.style.color = options.getColor(); - } - } - } - - /** - * Sets an arbitrary attribute on the span. Warning: use this wisely. Not all - * browsers support attributes the same, and having too many custom attributes - * is probably bad. - */ - - - (0, _createClass3.default)(span, [{ - key: "setAttribute", - value: function setAttribute(attribute, value) { - this.attributes[attribute] = value; - } - }, { - key: "tryCombine", - value: function tryCombine(sibling) { - return false; - } - - /** - * Convert the span into an HTML node - */ - - }, { - key: "toNode", - value: function toNode() { - var span = document.createElement("span"); - - // Apply the class - span.className = createClass(this.classes); - - // Apply inline styles - for (var style in this.style) { - if (Object.prototype.hasOwnProperty.call(this.style, style)) { - span.style[style] = this.style[style]; - } - } - - // Apply attributes - for (var attr in this.attributes) { - if (Object.prototype.hasOwnProperty.call(this.attributes, attr)) { - span.setAttribute(attr, this.attributes[attr]); - } - } - - if (this.innerHTML) { - span.innerHTML = this.innerHTML; - } - - // Append the children, also as HTML nodes - for (var i = 0; i < this.children.length; i++) { - span.appendChild(this.children[i].toNode()); - } - - return span; - } - - /** - * Convert the span into an HTML markup string - */ - - }, { - key: "toMarkup", - value: function toMarkup() { - var markup = " 0 || createClass(this.classes) !== createClass(sibling.classes) || this.skew !== sibling.skew || this.maxFontSize !== sibling.maxFontSize) { - return false; - } - for (var style in this.style) { - if (this.style.hasOwnProperty(style) && this.style[style] !== sibling.style[style]) { - return false; - } - } - for (var _style in sibling.style) { - if (sibling.style.hasOwnProperty(_style) && this.style[_style] !== sibling.style[_style]) { - return false; - } - } - this.value += sibling.value; - this.height = Math.max(this.height, sibling.height); - this.depth = Math.max(this.depth, sibling.depth); - this.italic = sibling.italic; - return true; - } - - /** - * Creates a text node or span from a symbol node. Note that a span is only - * created if it is needed. - */ - - }, { - key: "toNode", - value: function toNode() { - var node = document.createTextNode(this.value); - var span = null; - - if (this.italic > 0) { - span = document.createElement("span"); - span.style.marginRight = this.italic + "em"; - } - - if (this.classes.length > 0) { - span = span || document.createElement("span"); - span.className = createClass(this.classes); - } - - for (var style in this.style) { - if (this.style.hasOwnProperty(style)) { - span = span || document.createElement("span"); - span.style[style] = this.style[style]; - } - } - - if (span) { - span.appendChild(node); - return span; - } else { - return node; - } - } - - /** - * Creates markup for a symbol node. - */ - - }, { - key: "toMarkup", - value: function toMarkup() { - // TODO(alpert): More duplication than I'd like from - // span.prototype.toMarkup and symbolNode.prototype.toNode... - var needsSpan = false; - - var markup = " 0) { - styles += "margin-right:" + this.italic + "em;"; - } - for (var style in this.style) { - if (this.style.hasOwnProperty(style)) { - styles += _utils2.default.hyphenate(style) + ":" + this.style[style] + ";"; - } - } - - if (styles) { - needsSpan = true; - markup += " style=\"" + _utils2.default.escape(styles) + "\""; - } - - var escaped = _utils2.default.escape(this.value); - if (needsSpan) { - markup += ">"; - markup += escaped; - markup += "
      "; - return markup; - } else { - return escaped; - } - } - }]); - return symbolNode; - }(); - - module.exports = { - span: span, - documentFragment: documentFragment, - symbolNode: symbolNode - }; - - },{"./unicodeRegexes":49,"./utils":51,"babel-runtime/helpers/classCallCheck":4,"babel-runtime/helpers/createClass":5}],40:[function(require,module,exports){ - - var _ParseNode = require("./ParseNode"); - - var _ParseNode2 = _interopRequireDefault(_ParseNode); - - var _ParseError = require("./ParseError"); - - var _ParseError2 = _interopRequireDefault(_ParseError); - - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - - /** - * Parse the body of the environment, with rows delimited by \\ and - * columns delimited by &, and create a nested list in row-major order - * with one group per cell. If given an optional argument style - * ("text", "display", etc.), then each cell is cast into that style. - */ - /* eslint no-constant-condition:0 */ - function parseArray(parser, result, style) { - var row = []; - var body = [row]; - var rowGaps = []; - while (true) { - var cell = parser.parseExpression(false, null); - cell = new _ParseNode2.default("ordgroup", cell, parser.mode); - if (style) { - cell = new _ParseNode2.default("styling", { - style: style, - value: [cell] - }, parser.mode); - } - row.push(cell); - var next = parser.nextToken.text; - if (next === "&") { - parser.consume(); - } else if (next === "\\end") { - break; - } else if (next === "\\\\" || next === "\\cr") { - var cr = parser.parseFunction(); - rowGaps.push(cr.value.size); - row = []; - body.push(row); - } else { - throw new _ParseError2.default("Expected & or \\\\ or \\end", parser.nextToken); - } - } - result.body = body; - result.rowGaps = rowGaps; - return new _ParseNode2.default(result.type, result, parser.mode); - } - - /* - * An environment definition is very similar to a function definition: - * it is declared with a name or a list of names, a set of properties - * and a handler containing the actual implementation. - * - * The properties include: - * - numArgs: The number of arguments after the \begin{name} function. - * - argTypes: (optional) Just like for a function - * - allowedInText: (optional) Whether or not the environment is allowed inside - * text mode (default false) (not enforced yet) - * - numOptionalArgs: (optional) Just like for a function - * A bare number instead of that object indicates the numArgs value. - * - * The handler function will receive two arguments - * - context: information and references provided by the parser - * - args: an array of arguments passed to \begin{name} - * The context contains the following properties: - * - envName: the name of the environment, one of the listed names. - * - parser: the parser object - * - lexer: the lexer object - * - positions: the positions associated with these arguments from args. - * The handler must return a ParseResult. - */ - function defineEnvironment(names, props, handler) { - if (typeof names === "string") { - names = [names]; - } - if (typeof props === "number") { - props = { numArgs: props }; - } - // Set default values of environments - var data = { - numArgs: props.numArgs || 0, - argTypes: props.argTypes, - greediness: 1, - allowedInText: !!props.allowedInText, - numOptionalArgs: props.numOptionalArgs || 0, - handler: handler - }; - for (var i = 0; i < names.length; ++i) { - module.exports[names[i]] = data; - } - } - - // Decides on a style for cells in an array according to whether the given - // environment name starts with the letter 'd'. - function dCellStyle(envName) { - if (envName.substr(0, 1) === "d") { - return "display"; - } else { - return "text"; - } - } - - // Arrays are part of LaTeX, defined in lttab.dtx so its documentation - // is part of the source2e.pdf file of LaTeX2e source documentation. - // {darray} is an {array} environment where cells are set in \displaystyle, - // as defined in nccmath.sty. - defineEnvironment(["array", "darray"], { - numArgs: 1 - }, function (context, args) { - var colalign = args[0]; - colalign = colalign.value.map ? colalign.value : [colalign]; - var cols = colalign.map(function (node) { - var ca = node.value; - if ("lcr".indexOf(ca) !== -1) { - return { - type: "align", - align: ca - }; - } else if (ca === "|") { - return { - type: "separator", - separator: "|" - }; - } - throw new _ParseError2.default("Unknown column alignment: " + node.value, node); - }); - var res = { - type: "array", - cols: cols, - hskipBeforeAndAfter: true }; - res = parseArray(context.parser, res, dCellStyle(context.envName)); - return res; - }); - - // The matrix environments of amsmath builds on the array environment - // of LaTeX, which is discussed above. - defineEnvironment(["matrix", "pmatrix", "bmatrix", "Bmatrix", "vmatrix", "Vmatrix"], {}, function (context) { - var delimiters = { - "matrix": null, - "pmatrix": ["(", ")"], - "bmatrix": ["[", "]"], - "Bmatrix": ["\\{", "\\}"], - "vmatrix": ["|", "|"], - "Vmatrix": ["\\Vert", "\\Vert"] - }[context.envName]; - var res = { - type: "array", - hskipBeforeAndAfter: false }; - res = parseArray(context.parser, res, dCellStyle(context.envName)); - if (delimiters) { - res = new _ParseNode2.default("leftright", { - body: [res], - left: delimiters[0], - right: delimiters[1] - }, context.mode); - } - return res; - }); - - // A cases environment (in amsmath.sty) is almost equivalent to - // \def\arraystretch{1.2}% - // \left\{\begin{array}{@{}l@{\quad}l@{}} … \end{array}\right. - // {dcases} is a {cases} environment where cells are set in \displaystyle, - // as defined in mathtools.sty. - defineEnvironment(["cases", "dcases"], {}, function (context) { - var res = { - type: "array", - arraystretch: 1.2, - cols: [{ - type: "align", - align: "l", - pregap: 0, - // TODO(kevinb) get the current style. - // For now we use the metrics for TEXT style which is what we were - // doing before. Before attempting to get the current style we - // should look at TeX's behavior especially for \over and matrices. - postgap: 1.0 }, { - type: "align", - align: "l", - pregap: 0, - postgap: 0 - }] - }; - res = parseArray(context.parser, res, dCellStyle(context.envName)); - res = new _ParseNode2.default("leftright", { - body: [res], - left: "\\{", - right: "." - }, context.mode); - return res; - }); - - // An aligned environment is like the align* environment - // except it operates within math mode. - // Note that we assume \nomallineskiplimit to be zero, - // so that \strut@ is the same as \strut. - defineEnvironment("aligned", {}, function (context) { - var res = { - type: "array", - cols: [], - addJot: true - }; - res = parseArray(context.parser, res, "display"); - // Count number of columns = maximum number of cells in each row. - // At the same time, prepend empty group {} at beginning of every second - // cell in each row (starting with second cell) so that operators become - // binary. This behavior is implemented in amsmath's \start@aligned. - var emptyGroup = new _ParseNode2.default("ordgroup", [], context.mode); - var numCols = 0; - res.value.body.forEach(function (row) { - for (var i = 1; i < row.length; i += 2) { - // Modify ordgroup node within styling node - var ordgroup = row[i].value.value[0]; - ordgroup.value.unshift(emptyGroup); - } - if (numCols < row.length) { - numCols = row.length; - } - }); - for (var i = 0; i < numCols; ++i) { - var align = "r"; - var pregap = 0; - if (i % 2 === 1) { - align = "l"; - } else if (i > 0) { - pregap = 2; // one \qquad between columns - } - res.value.cols[i] = { - type: "align", - align: align, - pregap: pregap, - postgap: 0 - }; - } - return res; - }); - - // A gathered environment is like an array environment with one centered - // column, but where rows are considered lines so get \jot line spacing - // and contents are set in \displaystyle. - defineEnvironment("gathered", {}, function (context) { - var res = { - type: "array", - cols: [{ - type: "align", - align: "c" - }], - addJot: true - }; - res = parseArray(context.parser, res, "display"); - return res; - }); - - },{"./ParseError":29,"./ParseNode":30}],41:[function(require,module,exports){ - - var _unicodeRegexes = require("./unicodeRegexes"); - - var _fontMetricsData = require("./fontMetricsData"); - - var _fontMetricsData2 = _interopRequireDefault(_fontMetricsData); - - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - - /** - * This file contains metrics regarding fonts and individual symbols. The sigma - * and xi variables, as well as the metricMap map contain data extracted from - * TeX, TeX font metrics, and the TTF files. These data are then exposed via the - * `metrics` variable and the getCharacterMetrics function. - */ - - // In TeX, there are actually three sets of dimensions, one for each of - // textstyle (size index 5 and higher: >=9pt), scriptstyle (size index 3 and 4: - // 7-8pt), and scriptscriptstyle (size index 1 and 2: 5-6pt). These are - // provided in the the arrays below, in that order. - // - // The font metrics are stored in fonts cmsy10, cmsy7, and cmsy5 respsectively. - // This was determined by running the following script: - // - // latex -interaction=nonstopmode \ - // '\documentclass{article}\usepackage{amsmath}\begin{document}' \ - // '$a$ \expandafter\show\the\textfont2' \ - // '\expandafter\show\the\scriptfont2' \ - // '\expandafter\show\the\scriptscriptfont2' \ - // '\stop' - // - // The metrics themselves were retreived using the following commands: - // - // tftopl cmsy10 - // tftopl cmsy7 - // tftopl cmsy5 - // - // The output of each of these commands is quite lengthy. The only part we - // care about is the FONTDIMEN section. Each value is measured in EMs. - var sigmasAndXis = { - slant: [0.250, 0.250, 0.250], // sigma1 - space: [0.000, 0.000, 0.000], // sigma2 - stretch: [0.000, 0.000, 0.000], // sigma3 - shrink: [0.000, 0.000, 0.000], // sigma4 - xHeight: [0.431, 0.431, 0.431], // sigma5 - quad: [1.000, 1.171, 1.472], // sigma6 - extraSpace: [0.000, 0.000, 0.000], // sigma7 - num1: [0.677, 0.732, 0.925], // sigma8 - num2: [0.394, 0.384, 0.387], // sigma9 - num3: [0.444, 0.471, 0.504], // sigma10 - denom1: [0.686, 0.752, 1.025], // sigma11 - denom2: [0.345, 0.344, 0.532], // sigma12 - sup1: [0.413, 0.503, 0.504], // sigma13 - sup2: [0.363, 0.431, 0.404], // sigma14 - sup3: [0.289, 0.286, 0.294], // sigma15 - sub1: [0.150, 0.143, 0.200], // sigma16 - sub2: [0.247, 0.286, 0.400], // sigma17 - supDrop: [0.386, 0.353, 0.494], // sigma18 - subDrop: [0.050, 0.071, 0.100], // sigma19 - delim1: [2.390, 1.700, 1.980], // sigma20 - delim2: [1.010, 1.157, 1.420], // sigma21 - axisHeight: [0.250, 0.250, 0.250], // sigma22 - - // These font metrics are extracted from TeX by using tftopl on cmex10.tfm; - // they correspond to the font parameters of the extension fonts (family 3). - // See the TeXbook, page 441. In AMSTeX, the extension fonts scale; to - // match cmex7, we'd use cmex7.tfm values for script and scriptscript - // values. - defaultRuleThickness: [0.04, 0.049, 0.049], // xi8; cmex7: 0.049 - bigOpSpacing1: [0.111, 0.111, 0.111], // xi9 - bigOpSpacing2: [0.166, 0.166, 0.166], // xi10 - bigOpSpacing3: [0.2, 0.2, 0.2], // xi11 - bigOpSpacing4: [0.6, 0.611, 0.611], // xi12; cmex7: 0.611 - bigOpSpacing5: [0.1, 0.143, 0.143], // xi13; cmex7: 0.143 - - // The \sqrt rule width is taken from the height of the surd character. - // Since we use the same font at all sizes, this thickness doesn't scale. - sqrtRuleThickness: [0.04, 0.04, 0.04], - - // This value determines how large a pt is, for metrics which are defined - // in terms of pts. - // This value is also used in katex.less; if you change it make sure the - // values match. - ptPerEm: [10.0, 10.0, 10.0], - - // The space between adjacent `|` columns in an array definition. From - // `\showthe\doublerulesep` in LaTeX. Equals 2.0 / ptPerEm. - doubleRuleSep: [0.2, 0.2, 0.2] - }; - - // This map contains a mapping from font name and character code to character - // metrics, including height, depth, italic correction, and skew (kern from the - // character to the corresponding \skewchar) - // This map is generated via `make metrics`. It should not be changed manually. - - - // These are very rough approximations. We default to Times New Roman which - // should have Latin-1 and Cyrillic characters, but may not depending on the - // operating system. The metrics do not account for extra height from the - // accents. In the case of Cyrillic characters which have both ascenders and - // descenders we prefer approximations with ascenders, primarily to prevent - // the fraction bar or root line from intersecting the glyph. - // TODO(kevinb) allow union of multiple glyph metrics for better accuracy. - var extraCharacterMap = { - // Latin-1 - 'À': 'A', - 'Á': 'A', - 'Â': 'A', - 'Ã': 'A', - 'Ä': 'A', - 'Å': 'A', - 'Æ': 'A', - 'Ç': 'C', - 'È': 'E', - 'É': 'E', - 'Ê': 'E', - 'Ë': 'E', - 'Ì': 'I', - 'Í': 'I', - 'Î': 'I', - 'Ï': 'I', - 'Ð': 'D', - 'Ñ': 'N', - 'Ò': 'O', - 'Ó': 'O', - 'Ô': 'O', - 'Õ': 'O', - 'Ö': 'O', - 'Ø': 'O', - 'Ù': 'U', - 'Ú': 'U', - 'Û': 'U', - 'Ü': 'U', - 'Ý': 'Y', - 'Þ': 'o', - 'ß': 'B', - 'à': 'a', - 'á': 'a', - 'â': 'a', - 'ã': 'a', - 'ä': 'a', - 'å': 'a', - 'æ': 'a', - 'ç': 'c', - 'è': 'e', - 'é': 'e', - 'ê': 'e', - 'ë': 'e', - 'ì': 'i', - 'í': 'i', - 'î': 'i', - 'ï': 'i', - 'ð': 'd', - 'ñ': 'n', - 'ò': 'o', - 'ó': 'o', - 'ô': 'o', - 'õ': 'o', - 'ö': 'o', - 'ø': 'o', - 'ù': 'u', - 'ú': 'u', - 'û': 'u', - 'ü': 'u', - 'ý': 'y', - 'þ': 'o', - 'ÿ': 'y', - - // Cyrillic - 'А': 'A', - 'Б': 'B', - 'В': 'B', - 'Г': 'F', - 'Д': 'A', - 'Е': 'E', - 'Ж': 'K', - 'З': '3', - 'И': 'N', - 'Й': 'N', - 'К': 'K', - 'Л': 'N', - 'М': 'M', - 'Н': 'H', - 'О': 'O', - 'П': 'N', - 'Р': 'P', - 'С': 'C', - 'Т': 'T', - 'У': 'y', - 'Ф': 'O', - 'Х': 'X', - 'Ц': 'U', - 'Ч': 'h', - 'Ш': 'W', - 'Щ': 'W', - 'Ъ': 'B', - 'Ы': 'X', - 'Ь': 'B', - 'Э': '3', - 'Ю': 'X', - 'Я': 'R', - 'а': 'a', - 'б': 'b', - 'в': 'a', - 'г': 'r', - 'д': 'y', - 'е': 'e', - 'ж': 'm', - 'з': 'e', - 'и': 'n', - 'й': 'n', - 'к': 'n', - 'л': 'n', - 'м': 'm', - 'н': 'n', - 'о': 'o', - 'п': 'n', - 'р': 'p', - 'с': 'c', - 'т': 'o', - 'у': 'y', - 'ф': 'b', - 'х': 'x', - 'ц': 'n', - 'ч': 'n', - 'ш': 'w', - 'щ': 'w', - 'ъ': 'a', - 'ы': 'm', - 'ь': 'a', - 'э': 'e', - 'ю': 'm', - 'я': 'r' - }; - - /** - * This function is a convenience function for looking up information in the - * metricMap table. It takes a character as a string, and a style. - * - * Note: the `width` property may be undefined if fontMetricsData.js wasn't - * built using `Make extended_metrics`. - */ - var getCharacterMetrics = function getCharacterMetrics(character, style) { - var ch = character.charCodeAt(0); - if (character[0] in extraCharacterMap) { - ch = extraCharacterMap[character[0]].charCodeAt(0); - } else if (_unicodeRegexes.cjkRegex.test(character[0])) { - ch = 'M'.charCodeAt(0); - } - var metrics = _fontMetricsData2.default[style][ch]; - if (metrics) { - return { - depth: metrics[0], - height: metrics[1], - italic: metrics[2], - skew: metrics[3], - width: metrics[4] - }; - } - }; - - var fontMetricsBySizeIndex = {}; - - /** - * Get the font metrics for a given size. - */ - var getFontMetrics = function getFontMetrics(size) { - var sizeIndex = void 0; - if (size >= 5) { - sizeIndex = 0; - } else if (size >= 3) { - sizeIndex = 1; - } else { - sizeIndex = 2; - } - if (!fontMetricsBySizeIndex[sizeIndex]) { - var metrics = fontMetricsBySizeIndex[sizeIndex] = {}; - for (var key in sigmasAndXis) { - if (sigmasAndXis.hasOwnProperty(key)) { - metrics[key] = sigmasAndXis[key][sizeIndex]; - } - } - metrics.cssEmPerMu = metrics.quad / 18; - } - return fontMetricsBySizeIndex[sizeIndex]; - }; - - module.exports = { - getFontMetrics: getFontMetrics, - getCharacterMetrics: getCharacterMetrics - }; - - },{"./fontMetricsData":42,"./unicodeRegexes":49}],42:[function(require,module,exports){ - - module.exports = { - "AMS-Regular": { - "65": [0, 0.68889, 0, 0], - "66": [0, 0.68889, 0, 0], - "67": [0, 0.68889, 0, 0], - "68": [0, 0.68889, 0, 0], - "69": [0, 0.68889, 0, 0], - "70": [0, 0.68889, 0, 0], - "71": [0, 0.68889, 0, 0], - "72": [0, 0.68889, 0, 0], - "73": [0, 0.68889, 0, 0], - "74": [0.16667, 0.68889, 0, 0], - "75": [0, 0.68889, 0, 0], - "76": [0, 0.68889, 0, 0], - "77": [0, 0.68889, 0, 0], - "78": [0, 0.68889, 0, 0], - "79": [0.16667, 0.68889, 0, 0], - "80": [0, 0.68889, 0, 0], - "81": [0.16667, 0.68889, 0, 0], - "82": [0, 0.68889, 0, 0], - "83": [0, 0.68889, 0, 0], - "84": [0, 0.68889, 0, 0], - "85": [0, 0.68889, 0, 0], - "86": [0, 0.68889, 0, 0], - "87": [0, 0.68889, 0, 0], - "88": [0, 0.68889, 0, 0], - "89": [0, 0.68889, 0, 0], - "90": [0, 0.68889, 0, 0], - "107": [0, 0.68889, 0, 0], - "165": [0, 0.675, 0.025, 0], - "174": [0.15559, 0.69224, 0, 0], - "240": [0, 0.68889, 0, 0], - "295": [0, 0.68889, 0, 0], - "710": [0, 0.825, 0, 0], - "732": [0, 0.9, 0, 0], - "770": [0, 0.825, 0, 0], - "771": [0, 0.9, 0, 0], - "989": [0.08167, 0.58167, 0, 0], - "1008": [0, 0.43056, 0.04028, 0], - "8245": [0, 0.54986, 0, 0], - "8463": [0, 0.68889, 0, 0], - "8487": [0, 0.68889, 0, 0], - "8498": [0, 0.68889, 0, 0], - "8502": [0, 0.68889, 0, 0], - "8503": [0, 0.68889, 0, 0], - "8504": [0, 0.68889, 0, 0], - "8513": [0, 0.68889, 0, 0], - "8592": [-0.03598, 0.46402, 0, 0], - "8594": [-0.03598, 0.46402, 0, 0], - "8602": [-0.13313, 0.36687, 0, 0], - "8603": [-0.13313, 0.36687, 0, 0], - "8606": [0.01354, 0.52239, 0, 0], - "8608": [0.01354, 0.52239, 0, 0], - "8610": [0.01354, 0.52239, 0, 0], - "8611": [0.01354, 0.52239, 0, 0], - "8619": [0, 0.54986, 0, 0], - "8620": [0, 0.54986, 0, 0], - "8621": [-0.13313, 0.37788, 0, 0], - "8622": [-0.13313, 0.36687, 0, 0], - "8624": [0, 0.69224, 0, 0], - "8625": [0, 0.69224, 0, 0], - "8630": [0, 0.43056, 0, 0], - "8631": [0, 0.43056, 0, 0], - "8634": [0.08198, 0.58198, 0, 0], - "8635": [0.08198, 0.58198, 0, 0], - "8638": [0.19444, 0.69224, 0, 0], - "8639": [0.19444, 0.69224, 0, 0], - "8642": [0.19444, 0.69224, 0, 0], - "8643": [0.19444, 0.69224, 0, 0], - "8644": [0.1808, 0.675, 0, 0], - "8646": [0.1808, 0.675, 0, 0], - "8647": [0.1808, 0.675, 0, 0], - "8648": [0.19444, 0.69224, 0, 0], - "8649": [0.1808, 0.675, 0, 0], - "8650": [0.19444, 0.69224, 0, 0], - "8651": [0.01354, 0.52239, 0, 0], - "8652": [0.01354, 0.52239, 0, 0], - "8653": [-0.13313, 0.36687, 0, 0], - "8654": [-0.13313, 0.36687, 0, 0], - "8655": [-0.13313, 0.36687, 0, 0], - "8666": [0.13667, 0.63667, 0, 0], - "8667": [0.13667, 0.63667, 0, 0], - "8669": [-0.13313, 0.37788, 0, 0], - "8672": [-0.064, 0.437, 0, 0], - "8674": [-0.064, 0.437, 0, 0], - "8705": [0, 0.825, 0, 0], - "8708": [0, 0.68889, 0, 0], - "8709": [0.08167, 0.58167, 0, 0], - "8717": [0, 0.43056, 0, 0], - "8722": [-0.03598, 0.46402, 0, 0], - "8724": [0.08198, 0.69224, 0, 0], - "8726": [0.08167, 0.58167, 0, 0], - "8733": [0, 0.69224, 0, 0], - "8736": [0, 0.69224, 0, 0], - "8737": [0, 0.69224, 0, 0], - "8738": [0.03517, 0.52239, 0, 0], - "8739": [0.08167, 0.58167, 0, 0], - "8740": [0.25142, 0.74111, 0, 0], - "8741": [0.08167, 0.58167, 0, 0], - "8742": [0.25142, 0.74111, 0, 0], - "8756": [0, 0.69224, 0, 0], - "8757": [0, 0.69224, 0, 0], - "8764": [-0.13313, 0.36687, 0, 0], - "8765": [-0.13313, 0.37788, 0, 0], - "8769": [-0.13313, 0.36687, 0, 0], - "8770": [-0.03625, 0.46375, 0, 0], - "8774": [0.30274, 0.79383, 0, 0], - "8776": [-0.01688, 0.48312, 0, 0], - "8778": [0.08167, 0.58167, 0, 0], - "8782": [0.06062, 0.54986, 0, 0], - "8783": [0.06062, 0.54986, 0, 0], - "8785": [0.08198, 0.58198, 0, 0], - "8786": [0.08198, 0.58198, 0, 0], - "8787": [0.08198, 0.58198, 0, 0], - "8790": [0, 0.69224, 0, 0], - "8791": [0.22958, 0.72958, 0, 0], - "8796": [0.08198, 0.91667, 0, 0], - "8806": [0.25583, 0.75583, 0, 0], - "8807": [0.25583, 0.75583, 0, 0], - "8808": [0.25142, 0.75726, 0, 0], - "8809": [0.25142, 0.75726, 0, 0], - "8812": [0.25583, 0.75583, 0, 0], - "8814": [0.20576, 0.70576, 0, 0], - "8815": [0.20576, 0.70576, 0, 0], - "8816": [0.30274, 0.79383, 0, 0], - "8817": [0.30274, 0.79383, 0, 0], - "8818": [0.22958, 0.72958, 0, 0], - "8819": [0.22958, 0.72958, 0, 0], - "8822": [0.1808, 0.675, 0, 0], - "8823": [0.1808, 0.675, 0, 0], - "8828": [0.13667, 0.63667, 0, 0], - "8829": [0.13667, 0.63667, 0, 0], - "8830": [0.22958, 0.72958, 0, 0], - "8831": [0.22958, 0.72958, 0, 0], - "8832": [0.20576, 0.70576, 0, 0], - "8833": [0.20576, 0.70576, 0, 0], - "8840": [0.30274, 0.79383, 0, 0], - "8841": [0.30274, 0.79383, 0, 0], - "8842": [0.13597, 0.63597, 0, 0], - "8843": [0.13597, 0.63597, 0, 0], - "8847": [0.03517, 0.54986, 0, 0], - "8848": [0.03517, 0.54986, 0, 0], - "8858": [0.08198, 0.58198, 0, 0], - "8859": [0.08198, 0.58198, 0, 0], - "8861": [0.08198, 0.58198, 0, 0], - "8862": [0, 0.675, 0, 0], - "8863": [0, 0.675, 0, 0], - "8864": [0, 0.675, 0, 0], - "8865": [0, 0.675, 0, 0], - "8872": [0, 0.69224, 0, 0], - "8873": [0, 0.69224, 0, 0], - "8874": [0, 0.69224, 0, 0], - "8876": [0, 0.68889, 0, 0], - "8877": [0, 0.68889, 0, 0], - "8878": [0, 0.68889, 0, 0], - "8879": [0, 0.68889, 0, 0], - "8882": [0.03517, 0.54986, 0, 0], - "8883": [0.03517, 0.54986, 0, 0], - "8884": [0.13667, 0.63667, 0, 0], - "8885": [0.13667, 0.63667, 0, 0], - "8888": [0, 0.54986, 0, 0], - "8890": [0.19444, 0.43056, 0, 0], - "8891": [0.19444, 0.69224, 0, 0], - "8892": [0.19444, 0.69224, 0, 0], - "8901": [0, 0.54986, 0, 0], - "8903": [0.08167, 0.58167, 0, 0], - "8905": [0.08167, 0.58167, 0, 0], - "8906": [0.08167, 0.58167, 0, 0], - "8907": [0, 0.69224, 0, 0], - "8908": [0, 0.69224, 0, 0], - "8909": [-0.03598, 0.46402, 0, 0], - "8910": [0, 0.54986, 0, 0], - "8911": [0, 0.54986, 0, 0], - "8912": [0.03517, 0.54986, 0, 0], - "8913": [0.03517, 0.54986, 0, 0], - "8914": [0, 0.54986, 0, 0], - "8915": [0, 0.54986, 0, 0], - "8916": [0, 0.69224, 0, 0], - "8918": [0.0391, 0.5391, 0, 0], - "8919": [0.0391, 0.5391, 0, 0], - "8920": [0.03517, 0.54986, 0, 0], - "8921": [0.03517, 0.54986, 0, 0], - "8922": [0.38569, 0.88569, 0, 0], - "8923": [0.38569, 0.88569, 0, 0], - "8926": [0.13667, 0.63667, 0, 0], - "8927": [0.13667, 0.63667, 0, 0], - "8928": [0.30274, 0.79383, 0, 0], - "8929": [0.30274, 0.79383, 0, 0], - "8934": [0.23222, 0.74111, 0, 0], - "8935": [0.23222, 0.74111, 0, 0], - "8936": [0.23222, 0.74111, 0, 0], - "8937": [0.23222, 0.74111, 0, 0], - "8938": [0.20576, 0.70576, 0, 0], - "8939": [0.20576, 0.70576, 0, 0], - "8940": [0.30274, 0.79383, 0, 0], - "8941": [0.30274, 0.79383, 0, 0], - "8994": [0.19444, 0.69224, 0, 0], - "8995": [0.19444, 0.69224, 0, 0], - "9416": [0.15559, 0.69224, 0, 0], - "9484": [0, 0.69224, 0, 0], - "9488": [0, 0.69224, 0, 0], - "9492": [0, 0.37788, 0, 0], - "9496": [0, 0.37788, 0, 0], - "9585": [0.19444, 0.68889, 0, 0], - "9586": [0.19444, 0.74111, 0, 0], - "9632": [0, 0.675, 0, 0], - "9633": [0, 0.675, 0, 0], - "9650": [0, 0.54986, 0, 0], - "9651": [0, 0.54986, 0, 0], - "9654": [0.03517, 0.54986, 0, 0], - "9660": [0, 0.54986, 0, 0], - "9661": [0, 0.54986, 0, 0], - "9664": [0.03517, 0.54986, 0, 0], - "9674": [0.11111, 0.69224, 0, 0], - "9733": [0.19444, 0.69224, 0, 0], - "10003": [0, 0.69224, 0, 0], - "10016": [0, 0.69224, 0, 0], - "10731": [0.11111, 0.69224, 0, 0], - "10846": [0.19444, 0.75583, 0, 0], - "10877": [0.13667, 0.63667, 0, 0], - "10878": [0.13667, 0.63667, 0, 0], - "10885": [0.25583, 0.75583, 0, 0], - "10886": [0.25583, 0.75583, 0, 0], - "10887": [0.13597, 0.63597, 0, 0], - "10888": [0.13597, 0.63597, 0, 0], - "10889": [0.26167, 0.75726, 0, 0], - "10890": [0.26167, 0.75726, 0, 0], - "10891": [0.48256, 0.98256, 0, 0], - "10892": [0.48256, 0.98256, 0, 0], - "10901": [0.13667, 0.63667, 0, 0], - "10902": [0.13667, 0.63667, 0, 0], - "10933": [0.25142, 0.75726, 0, 0], - "10934": [0.25142, 0.75726, 0, 0], - "10935": [0.26167, 0.75726, 0, 0], - "10936": [0.26167, 0.75726, 0, 0], - "10937": [0.26167, 0.75726, 0, 0], - "10938": [0.26167, 0.75726, 0, 0], - "10949": [0.25583, 0.75583, 0, 0], - "10950": [0.25583, 0.75583, 0, 0], - "10955": [0.28481, 0.79383, 0, 0], - "10956": [0.28481, 0.79383, 0, 0], - "57350": [0.08167, 0.58167, 0, 0], - "57351": [0.08167, 0.58167, 0, 0], - "57352": [0.08167, 0.58167, 0, 0], - "57353": [0, 0.43056, 0.04028, 0], - "57356": [0.25142, 0.75726, 0, 0], - "57357": [0.25142, 0.75726, 0, 0], - "57358": [0.41951, 0.91951, 0, 0], - "57359": [0.30274, 0.79383, 0, 0], - "57360": [0.30274, 0.79383, 0, 0], - "57361": [0.41951, 0.91951, 0, 0], - "57366": [0.25142, 0.75726, 0, 0], - "57367": [0.25142, 0.75726, 0, 0], - "57368": [0.25142, 0.75726, 0, 0], - "57369": [0.25142, 0.75726, 0, 0], - "57370": [0.13597, 0.63597, 0, 0], - "57371": [0.13597, 0.63597, 0, 0] - }, - "Caligraphic-Regular": { - "48": [0, 0.43056, 0, 0], - "49": [0, 0.43056, 0, 0], - "50": [0, 0.43056, 0, 0], - "51": [0.19444, 0.43056, 0, 0], - "52": [0.19444, 0.43056, 0, 0], - "53": [0.19444, 0.43056, 0, 0], - "54": [0, 0.64444, 0, 0], - "55": [0.19444, 0.43056, 0, 0], - "56": [0, 0.64444, 0, 0], - "57": [0.19444, 0.43056, 0, 0], - "65": [0, 0.68333, 0, 0.19445], - "66": [0, 0.68333, 0.03041, 0.13889], - "67": [0, 0.68333, 0.05834, 0.13889], - "68": [0, 0.68333, 0.02778, 0.08334], - "69": [0, 0.68333, 0.08944, 0.11111], - "70": [0, 0.68333, 0.09931, 0.11111], - "71": [0.09722, 0.68333, 0.0593, 0.11111], - "72": [0, 0.68333, 0.00965, 0.11111], - "73": [0, 0.68333, 0.07382, 0], - "74": [0.09722, 0.68333, 0.18472, 0.16667], - "75": [0, 0.68333, 0.01445, 0.05556], - "76": [0, 0.68333, 0, 0.13889], - "77": [0, 0.68333, 0, 0.13889], - "78": [0, 0.68333, 0.14736, 0.08334], - "79": [0, 0.68333, 0.02778, 0.11111], - "80": [0, 0.68333, 0.08222, 0.08334], - "81": [0.09722, 0.68333, 0, 0.11111], - "82": [0, 0.68333, 0, 0.08334], - "83": [0, 0.68333, 0.075, 0.13889], - "84": [0, 0.68333, 0.25417, 0], - "85": [0, 0.68333, 0.09931, 0.08334], - "86": [0, 0.68333, 0.08222, 0], - "87": [0, 0.68333, 0.08222, 0.08334], - "88": [0, 0.68333, 0.14643, 0.13889], - "89": [0.09722, 0.68333, 0.08222, 0.08334], - "90": [0, 0.68333, 0.07944, 0.13889] - }, - "Fraktur-Regular": { - "33": [0, 0.69141, 0, 0], - "34": [0, 0.69141, 0, 0], - "38": [0, 0.69141, 0, 0], - "39": [0, 0.69141, 0, 0], - "40": [0.24982, 0.74947, 0, 0], - "41": [0.24982, 0.74947, 0, 0], - "42": [0, 0.62119, 0, 0], - "43": [0.08319, 0.58283, 0, 0], - "44": [0, 0.10803, 0, 0], - "45": [0.08319, 0.58283, 0, 0], - "46": [0, 0.10803, 0, 0], - "47": [0.24982, 0.74947, 0, 0], - "48": [0, 0.47534, 0, 0], - "49": [0, 0.47534, 0, 0], - "50": [0, 0.47534, 0, 0], - "51": [0.18906, 0.47534, 0, 0], - "52": [0.18906, 0.47534, 0, 0], - "53": [0.18906, 0.47534, 0, 0], - "54": [0, 0.69141, 0, 0], - "55": [0.18906, 0.47534, 0, 0], - "56": [0, 0.69141, 0, 0], - "57": [0.18906, 0.47534, 0, 0], - "58": [0, 0.47534, 0, 0], - "59": [0.12604, 0.47534, 0, 0], - "61": [-0.13099, 0.36866, 0, 0], - "63": [0, 0.69141, 0, 0], - "65": [0, 0.69141, 0, 0], - "66": [0, 0.69141, 0, 0], - "67": [0, 0.69141, 0, 0], - "68": [0, 0.69141, 0, 0], - "69": [0, 0.69141, 0, 0], - "70": [0.12604, 0.69141, 0, 0], - "71": [0, 0.69141, 0, 0], - "72": [0.06302, 0.69141, 0, 0], - "73": [0, 0.69141, 0, 0], - "74": [0.12604, 0.69141, 0, 0], - "75": [0, 0.69141, 0, 0], - "76": [0, 0.69141, 0, 0], - "77": [0, 0.69141, 0, 0], - "78": [0, 0.69141, 0, 0], - "79": [0, 0.69141, 0, 0], - "80": [0.18906, 0.69141, 0, 0], - "81": [0.03781, 0.69141, 0, 0], - "82": [0, 0.69141, 0, 0], - "83": [0, 0.69141, 0, 0], - "84": [0, 0.69141, 0, 0], - "85": [0, 0.69141, 0, 0], - "86": [0, 0.69141, 0, 0], - "87": [0, 0.69141, 0, 0], - "88": [0, 0.69141, 0, 0], - "89": [0.18906, 0.69141, 0, 0], - "90": [0.12604, 0.69141, 0, 0], - "91": [0.24982, 0.74947, 0, 0], - "93": [0.24982, 0.74947, 0, 0], - "94": [0, 0.69141, 0, 0], - "97": [0, 0.47534, 0, 0], - "98": [0, 0.69141, 0, 0], - "99": [0, 0.47534, 0, 0], - "100": [0, 0.62119, 0, 0], - "101": [0, 0.47534, 0, 0], - "102": [0.18906, 0.69141, 0, 0], - "103": [0.18906, 0.47534, 0, 0], - "104": [0.18906, 0.69141, 0, 0], - "105": [0, 0.69141, 0, 0], - "106": [0, 0.69141, 0, 0], - "107": [0, 0.69141, 0, 0], - "108": [0, 0.69141, 0, 0], - "109": [0, 0.47534, 0, 0], - "110": [0, 0.47534, 0, 0], - "111": [0, 0.47534, 0, 0], - "112": [0.18906, 0.52396, 0, 0], - "113": [0.18906, 0.47534, 0, 0], - "114": [0, 0.47534, 0, 0], - "115": [0, 0.47534, 0, 0], - "116": [0, 0.62119, 0, 0], - "117": [0, 0.47534, 0, 0], - "118": [0, 0.52396, 0, 0], - "119": [0, 0.52396, 0, 0], - "120": [0.18906, 0.47534, 0, 0], - "121": [0.18906, 0.47534, 0, 0], - "122": [0.18906, 0.47534, 0, 0], - "8216": [0, 0.69141, 0, 0], - "8217": [0, 0.69141, 0, 0], - "58112": [0, 0.62119, 0, 0], - "58113": [0, 0.62119, 0, 0], - "58114": [0.18906, 0.69141, 0, 0], - "58115": [0.18906, 0.69141, 0, 0], - "58116": [0.18906, 0.47534, 0, 0], - "58117": [0, 0.69141, 0, 0], - "58118": [0, 0.62119, 0, 0], - "58119": [0, 0.47534, 0, 0] - }, - "Main-Bold": { - "33": [0, 0.69444, 0, 0], - "34": [0, 0.69444, 0, 0], - "35": [0.19444, 0.69444, 0, 0], - "36": [0.05556, 0.75, 0, 0], - "37": [0.05556, 0.75, 0, 0], - "38": [0, 0.69444, 0, 0], - "39": [0, 0.69444, 0, 0], - "40": [0.25, 0.75, 0, 0], - "41": [0.25, 0.75, 0, 0], - "42": [0, 0.75, 0, 0], - "43": [0.13333, 0.63333, 0, 0], - "44": [0.19444, 0.15556, 0, 0], - "45": [0, 0.44444, 0, 0], - "46": [0, 0.15556, 0, 0], - "47": [0.25, 0.75, 0, 0], - "48": [0, 0.64444, 0, 0], - "49": [0, 0.64444, 0, 0], - "50": [0, 0.64444, 0, 0], - "51": [0, 0.64444, 0, 0], - "52": [0, 0.64444, 0, 0], - "53": [0, 0.64444, 0, 0], - "54": [0, 0.64444, 0, 0], - "55": [0, 0.64444, 0, 0], - "56": [0, 0.64444, 0, 0], - "57": [0, 0.64444, 0, 0], - "58": [0, 0.44444, 0, 0], - "59": [0.19444, 0.44444, 0, 0], - "60": [0.08556, 0.58556, 0, 0], - "61": [-0.10889, 0.39111, 0, 0], - "62": [0.08556, 0.58556, 0, 0], - "63": [0, 0.69444, 0, 0], - "64": [0, 0.69444, 0, 0], - "65": [0, 0.68611, 0, 0], - "66": [0, 0.68611, 0, 0], - "67": [0, 0.68611, 0, 0], - "68": [0, 0.68611, 0, 0], - "69": [0, 0.68611, 0, 0], - "70": [0, 0.68611, 0, 0], - "71": [0, 0.68611, 0, 0], - "72": [0, 0.68611, 0, 0], - "73": [0, 0.68611, 0, 0], - "74": [0, 0.68611, 0, 0], - "75": [0, 0.68611, 0, 0], - "76": [0, 0.68611, 0, 0], - "77": [0, 0.68611, 0, 0], - "78": [0, 0.68611, 0, 0], - "79": [0, 0.68611, 0, 0], - "80": [0, 0.68611, 0, 0], - "81": [0.19444, 0.68611, 0, 0], - "82": [0, 0.68611, 0, 0], - "83": [0, 0.68611, 0, 0], - "84": [0, 0.68611, 0, 0], - "85": [0, 0.68611, 0, 0], - "86": [0, 0.68611, 0.01597, 0], - "87": [0, 0.68611, 0.01597, 0], - "88": [0, 0.68611, 0, 0], - "89": [0, 0.68611, 0.02875, 0], - "90": [0, 0.68611, 0, 0], - "91": [0.25, 0.75, 0, 0], - "92": [0.25, 0.75, 0, 0], - "93": [0.25, 0.75, 0, 0], - "94": [0, 0.69444, 0, 0], - "95": [0.31, 0.13444, 0.03194, 0], - "96": [0, 0.69444, 0, 0], - "97": [0, 0.44444, 0, 0], - "98": [0, 0.69444, 0, 0], - "99": [0, 0.44444, 0, 0], - "100": [0, 0.69444, 0, 0], - "101": [0, 0.44444, 0, 0], - "102": [0, 0.69444, 0.10903, 0], - "103": [0.19444, 0.44444, 0.01597, 0], - "104": [0, 0.69444, 0, 0], - "105": [0, 0.69444, 0, 0], - "106": [0.19444, 0.69444, 0, 0], - "107": [0, 0.69444, 0, 0], - "108": [0, 0.69444, 0, 0], - "109": [0, 0.44444, 0, 0], - "110": [0, 0.44444, 0, 0], - "111": [0, 0.44444, 0, 0], - "112": [0.19444, 0.44444, 0, 0], - "113": [0.19444, 0.44444, 0, 0], - "114": [0, 0.44444, 0, 0], - "115": [0, 0.44444, 0, 0], - "116": [0, 0.63492, 0, 0], - "117": [0, 0.44444, 0, 0], - "118": [0, 0.44444, 0.01597, 0], - "119": [0, 0.44444, 0.01597, 0], - "120": [0, 0.44444, 0, 0], - "121": [0.19444, 0.44444, 0.01597, 0], - "122": [0, 0.44444, 0, 0], - "123": [0.25, 0.75, 0, 0], - "124": [0.25, 0.75, 0, 0], - "125": [0.25, 0.75, 0, 0], - "126": [0.35, 0.34444, 0, 0], - "168": [0, 0.69444, 0, 0], - "172": [0, 0.44444, 0, 0], - "175": [0, 0.59611, 0, 0], - "176": [0, 0.69444, 0, 0], - "177": [0.13333, 0.63333, 0, 0], - "180": [0, 0.69444, 0, 0], - "215": [0.13333, 0.63333, 0, 0], - "247": [0.13333, 0.63333, 0, 0], - "305": [0, 0.44444, 0, 0], - "567": [0.19444, 0.44444, 0, 0], - "710": [0, 0.69444, 0, 0], - "711": [0, 0.63194, 0, 0], - "713": [0, 0.59611, 0, 0], - "714": [0, 0.69444, 0, 0], - "715": [0, 0.69444, 0, 0], - "728": [0, 0.69444, 0, 0], - "729": [0, 0.69444, 0, 0], - "730": [0, 0.69444, 0, 0], - "732": [0, 0.69444, 0, 0], - "768": [0, 0.69444, 0, 0], - "769": [0, 0.69444, 0, 0], - "770": [0, 0.69444, 0, 0], - "771": [0, 0.69444, 0, 0], - "772": [0, 0.59611, 0, 0], - "774": [0, 0.69444, 0, 0], - "775": [0, 0.69444, 0, 0], - "776": [0, 0.69444, 0, 0], - "778": [0, 0.69444, 0, 0], - "779": [0, 0.69444, 0, 0], - "780": [0, 0.63194, 0, 0], - "824": [0.19444, 0.69444, 0, 0], - "915": [0, 0.68611, 0, 0], - "916": [0, 0.68611, 0, 0], - "920": [0, 0.68611, 0, 0], - "923": [0, 0.68611, 0, 0], - "926": [0, 0.68611, 0, 0], - "928": [0, 0.68611, 0, 0], - "931": [0, 0.68611, 0, 0], - "933": [0, 0.68611, 0, 0], - "934": [0, 0.68611, 0, 0], - "936": [0, 0.68611, 0, 0], - "937": [0, 0.68611, 0, 0], - "8211": [0, 0.44444, 0.03194, 0], - "8212": [0, 0.44444, 0.03194, 0], - "8216": [0, 0.69444, 0, 0], - "8217": [0, 0.69444, 0, 0], - "8220": [0, 0.69444, 0, 0], - "8221": [0, 0.69444, 0, 0], - "8224": [0.19444, 0.69444, 0, 0], - "8225": [0.19444, 0.69444, 0, 0], - "8242": [0, 0.55556, 0, 0], - "8407": [0, 0.72444, 0.15486, 0], - "8463": [0, 0.69444, 0, 0], - "8465": [0, 0.69444, 0, 0], - "8467": [0, 0.69444, 0, 0], - "8472": [0.19444, 0.44444, 0, 0], - "8476": [0, 0.69444, 0, 0], - "8501": [0, 0.69444, 0, 0], - "8592": [-0.10889, 0.39111, 0, 0], - "8593": [0.19444, 0.69444, 0, 0], - "8594": [-0.10889, 0.39111, 0, 0], - "8595": [0.19444, 0.69444, 0, 0], - "8596": [-0.10889, 0.39111, 0, 0], - "8597": [0.25, 0.75, 0, 0], - "8598": [0.19444, 0.69444, 0, 0], - "8599": [0.19444, 0.69444, 0, 0], - "8600": [0.19444, 0.69444, 0, 0], - "8601": [0.19444, 0.69444, 0, 0], - "8636": [-0.10889, 0.39111, 0, 0], - "8637": [-0.10889, 0.39111, 0, 0], - "8640": [-0.10889, 0.39111, 0, 0], - "8641": [-0.10889, 0.39111, 0, 0], - "8656": [-0.10889, 0.39111, 0, 0], - "8657": [0.19444, 0.69444, 0, 0], - "8658": [-0.10889, 0.39111, 0, 0], - "8659": [0.19444, 0.69444, 0, 0], - "8660": [-0.10889, 0.39111, 0, 0], - "8661": [0.25, 0.75, 0, 0], - "8704": [0, 0.69444, 0, 0], - "8706": [0, 0.69444, 0.06389, 0], - "8707": [0, 0.69444, 0, 0], - "8709": [0.05556, 0.75, 0, 0], - "8711": [0, 0.68611, 0, 0], - "8712": [0.08556, 0.58556, 0, 0], - "8715": [0.08556, 0.58556, 0, 0], - "8722": [0.13333, 0.63333, 0, 0], - "8723": [0.13333, 0.63333, 0, 0], - "8725": [0.25, 0.75, 0, 0], - "8726": [0.25, 0.75, 0, 0], - "8727": [-0.02778, 0.47222, 0, 0], - "8728": [-0.02639, 0.47361, 0, 0], - "8729": [-0.02639, 0.47361, 0, 0], - "8730": [0.18, 0.82, 0, 0], - "8733": [0, 0.44444, 0, 0], - "8734": [0, 0.44444, 0, 0], - "8736": [0, 0.69224, 0, 0], - "8739": [0.25, 0.75, 0, 0], - "8741": [0.25, 0.75, 0, 0], - "8743": [0, 0.55556, 0, 0], - "8744": [0, 0.55556, 0, 0], - "8745": [0, 0.55556, 0, 0], - "8746": [0, 0.55556, 0, 0], - "8747": [0.19444, 0.69444, 0.12778, 0], - "8764": [-0.10889, 0.39111, 0, 0], - "8768": [0.19444, 0.69444, 0, 0], - "8771": [0.00222, 0.50222, 0, 0], - "8776": [0.02444, 0.52444, 0, 0], - "8781": [0.00222, 0.50222, 0, 0], - "8801": [0.00222, 0.50222, 0, 0], - "8804": [0.19667, 0.69667, 0, 0], - "8805": [0.19667, 0.69667, 0, 0], - "8810": [0.08556, 0.58556, 0, 0], - "8811": [0.08556, 0.58556, 0, 0], - "8826": [0.08556, 0.58556, 0, 0], - "8827": [0.08556, 0.58556, 0, 0], - "8834": [0.08556, 0.58556, 0, 0], - "8835": [0.08556, 0.58556, 0, 0], - "8838": [0.19667, 0.69667, 0, 0], - "8839": [0.19667, 0.69667, 0, 0], - "8846": [0, 0.55556, 0, 0], - "8849": [0.19667, 0.69667, 0, 0], - "8850": [0.19667, 0.69667, 0, 0], - "8851": [0, 0.55556, 0, 0], - "8852": [0, 0.55556, 0, 0], - "8853": [0.13333, 0.63333, 0, 0], - "8854": [0.13333, 0.63333, 0, 0], - "8855": [0.13333, 0.63333, 0, 0], - "8856": [0.13333, 0.63333, 0, 0], - "8857": [0.13333, 0.63333, 0, 0], - "8866": [0, 0.69444, 0, 0], - "8867": [0, 0.69444, 0, 0], - "8868": [0, 0.69444, 0, 0], - "8869": [0, 0.69444, 0, 0], - "8900": [-0.02639, 0.47361, 0, 0], - "8901": [-0.02639, 0.47361, 0, 0], - "8902": [-0.02778, 0.47222, 0, 0], - "8968": [0.25, 0.75, 0, 0], - "8969": [0.25, 0.75, 0, 0], - "8970": [0.25, 0.75, 0, 0], - "8971": [0.25, 0.75, 0, 0], - "8994": [-0.13889, 0.36111, 0, 0], - "8995": [-0.13889, 0.36111, 0, 0], - "9651": [0.19444, 0.69444, 0, 0], - "9657": [-0.02778, 0.47222, 0, 0], - "9661": [0.19444, 0.69444, 0, 0], - "9667": [-0.02778, 0.47222, 0, 0], - "9711": [0.19444, 0.69444, 0, 0], - "9824": [0.12963, 0.69444, 0, 0], - "9825": [0.12963, 0.69444, 0, 0], - "9826": [0.12963, 0.69444, 0, 0], - "9827": [0.12963, 0.69444, 0, 0], - "9837": [0, 0.75, 0, 0], - "9838": [0.19444, 0.69444, 0, 0], - "9839": [0.19444, 0.69444, 0, 0], - "10216": [0.25, 0.75, 0, 0], - "10217": [0.25, 0.75, 0, 0], - "10815": [0, 0.68611, 0, 0], - "10927": [0.19667, 0.69667, 0, 0], - "10928": [0.19667, 0.69667, 0, 0] - }, - "Main-Italic": { - "33": [0, 0.69444, 0.12417, 0], - "34": [0, 0.69444, 0.06961, 0], - "35": [0.19444, 0.69444, 0.06616, 0], - "37": [0.05556, 0.75, 0.13639, 0], - "38": [0, 0.69444, 0.09694, 0], - "39": [0, 0.69444, 0.12417, 0], - "40": [0.25, 0.75, 0.16194, 0], - "41": [0.25, 0.75, 0.03694, 0], - "42": [0, 0.75, 0.14917, 0], - "43": [0.05667, 0.56167, 0.03694, 0], - "44": [0.19444, 0.10556, 0, 0], - "45": [0, 0.43056, 0.02826, 0], - "46": [0, 0.10556, 0, 0], - "47": [0.25, 0.75, 0.16194, 0], - "48": [0, 0.64444, 0.13556, 0], - "49": [0, 0.64444, 0.13556, 0], - "50": [0, 0.64444, 0.13556, 0], - "51": [0, 0.64444, 0.13556, 0], - "52": [0.19444, 0.64444, 0.13556, 0], - "53": [0, 0.64444, 0.13556, 0], - "54": [0, 0.64444, 0.13556, 0], - "55": [0.19444, 0.64444, 0.13556, 0], - "56": [0, 0.64444, 0.13556, 0], - "57": [0, 0.64444, 0.13556, 0], - "58": [0, 0.43056, 0.0582, 0], - "59": [0.19444, 0.43056, 0.0582, 0], - "61": [-0.13313, 0.36687, 0.06616, 0], - "63": [0, 0.69444, 0.1225, 0], - "64": [0, 0.69444, 0.09597, 0], - "65": [0, 0.68333, 0, 0], - "66": [0, 0.68333, 0.10257, 0], - "67": [0, 0.68333, 0.14528, 0], - "68": [0, 0.68333, 0.09403, 0], - "69": [0, 0.68333, 0.12028, 0], - "70": [0, 0.68333, 0.13305, 0], - "71": [0, 0.68333, 0.08722, 0], - "72": [0, 0.68333, 0.16389, 0], - "73": [0, 0.68333, 0.15806, 0], - "74": [0, 0.68333, 0.14028, 0], - "75": [0, 0.68333, 0.14528, 0], - "76": [0, 0.68333, 0, 0], - "77": [0, 0.68333, 0.16389, 0], - "78": [0, 0.68333, 0.16389, 0], - "79": [0, 0.68333, 0.09403, 0], - "80": [0, 0.68333, 0.10257, 0], - "81": [0.19444, 0.68333, 0.09403, 0], - "82": [0, 0.68333, 0.03868, 0], - "83": [0, 0.68333, 0.11972, 0], - "84": [0, 0.68333, 0.13305, 0], - "85": [0, 0.68333, 0.16389, 0], - "86": [0, 0.68333, 0.18361, 0], - "87": [0, 0.68333, 0.18361, 0], - "88": [0, 0.68333, 0.15806, 0], - "89": [0, 0.68333, 0.19383, 0], - "90": [0, 0.68333, 0.14528, 0], - "91": [0.25, 0.75, 0.1875, 0], - "93": [0.25, 0.75, 0.10528, 0], - "94": [0, 0.69444, 0.06646, 0], - "95": [0.31, 0.12056, 0.09208, 0], - "97": [0, 0.43056, 0.07671, 0], - "98": [0, 0.69444, 0.06312, 0], - "99": [0, 0.43056, 0.05653, 0], - "100": [0, 0.69444, 0.10333, 0], - "101": [0, 0.43056, 0.07514, 0], - "102": [0.19444, 0.69444, 0.21194, 0], - "103": [0.19444, 0.43056, 0.08847, 0], - "104": [0, 0.69444, 0.07671, 0], - "105": [0, 0.65536, 0.1019, 0], - "106": [0.19444, 0.65536, 0.14467, 0], - "107": [0, 0.69444, 0.10764, 0], - "108": [0, 0.69444, 0.10333, 0], - "109": [0, 0.43056, 0.07671, 0], - "110": [0, 0.43056, 0.07671, 0], - "111": [0, 0.43056, 0.06312, 0], - "112": [0.19444, 0.43056, 0.06312, 0], - "113": [0.19444, 0.43056, 0.08847, 0], - "114": [0, 0.43056, 0.10764, 0], - "115": [0, 0.43056, 0.08208, 0], - "116": [0, 0.61508, 0.09486, 0], - "117": [0, 0.43056, 0.07671, 0], - "118": [0, 0.43056, 0.10764, 0], - "119": [0, 0.43056, 0.10764, 0], - "120": [0, 0.43056, 0.12042, 0], - "121": [0.19444, 0.43056, 0.08847, 0], - "122": [0, 0.43056, 0.12292, 0], - "126": [0.35, 0.31786, 0.11585, 0], - "163": [0, 0.69444, 0, 0], - "305": [0, 0.43056, 0, 0.02778], - "567": [0.19444, 0.43056, 0, 0.08334], - "768": [0, 0.69444, 0, 0], - "769": [0, 0.69444, 0.09694, 0], - "770": [0, 0.69444, 0.06646, 0], - "771": [0, 0.66786, 0.11585, 0], - "772": [0, 0.56167, 0.10333, 0], - "774": [0, 0.69444, 0.10806, 0], - "775": [0, 0.66786, 0.11752, 0], - "776": [0, 0.66786, 0.10474, 0], - "778": [0, 0.69444, 0, 0], - "779": [0, 0.69444, 0.1225, 0], - "780": [0, 0.62847, 0.08295, 0], - "915": [0, 0.68333, 0.13305, 0], - "916": [0, 0.68333, 0, 0], - "920": [0, 0.68333, 0.09403, 0], - "923": [0, 0.68333, 0, 0], - "926": [0, 0.68333, 0.15294, 0], - "928": [0, 0.68333, 0.16389, 0], - "931": [0, 0.68333, 0.12028, 0], - "933": [0, 0.68333, 0.11111, 0], - "934": [0, 0.68333, 0.05986, 0], - "936": [0, 0.68333, 0.11111, 0], - "937": [0, 0.68333, 0.10257, 0], - "8211": [0, 0.43056, 0.09208, 0], - "8212": [0, 0.43056, 0.09208, 0], - "8216": [0, 0.69444, 0.12417, 0], - "8217": [0, 0.69444, 0.12417, 0], - "8220": [0, 0.69444, 0.1685, 0], - "8221": [0, 0.69444, 0.06961, 0], - "8463": [0, 0.68889, 0, 0] - }, - "Main-Regular": { - "32": [0, 0, 0, 0], - "33": [0, 0.69444, 0, 0], - "34": [0, 0.69444, 0, 0], - "35": [0.19444, 0.69444, 0, 0], - "36": [0.05556, 0.75, 0, 0], - "37": [0.05556, 0.75, 0, 0], - "38": [0, 0.69444, 0, 0], - "39": [0, 0.69444, 0, 0], - "40": [0.25, 0.75, 0, 0], - "41": [0.25, 0.75, 0, 0], - "42": [0, 0.75, 0, 0], - "43": [0.08333, 0.58333, 0, 0], - "44": [0.19444, 0.10556, 0, 0], - "45": [0, 0.43056, 0, 0], - "46": [0, 0.10556, 0, 0], - "47": [0.25, 0.75, 0, 0], - "48": [0, 0.64444, 0, 0], - "49": [0, 0.64444, 0, 0], - "50": [0, 0.64444, 0, 0], - "51": [0, 0.64444, 0, 0], - "52": [0, 0.64444, 0, 0], - "53": [0, 0.64444, 0, 0], - "54": [0, 0.64444, 0, 0], - "55": [0, 0.64444, 0, 0], - "56": [0, 0.64444, 0, 0], - "57": [0, 0.64444, 0, 0], - "58": [0, 0.43056, 0, 0], - "59": [0.19444, 0.43056, 0, 0], - "60": [0.0391, 0.5391, 0, 0], - "61": [-0.13313, 0.36687, 0, 0], - "62": [0.0391, 0.5391, 0, 0], - "63": [0, 0.69444, 0, 0], - "64": [0, 0.69444, 0, 0], - "65": [0, 0.68333, 0, 0], - "66": [0, 0.68333, 0, 0], - "67": [0, 0.68333, 0, 0], - "68": [0, 0.68333, 0, 0], - "69": [0, 0.68333, 0, 0], - "70": [0, 0.68333, 0, 0], - "71": [0, 0.68333, 0, 0], - "72": [0, 0.68333, 0, 0], - "73": [0, 0.68333, 0, 0], - "74": [0, 0.68333, 0, 0], - "75": [0, 0.68333, 0, 0], - "76": [0, 0.68333, 0, 0], - "77": [0, 0.68333, 0, 0], - "78": [0, 0.68333, 0, 0], - "79": [0, 0.68333, 0, 0], - "80": [0, 0.68333, 0, 0], - "81": [0.19444, 0.68333, 0, 0], - "82": [0, 0.68333, 0, 0], - "83": [0, 0.68333, 0, 0], - "84": [0, 0.68333, 0, 0], - "85": [0, 0.68333, 0, 0], - "86": [0, 0.68333, 0.01389, 0], - "87": [0, 0.68333, 0.01389, 0], - "88": [0, 0.68333, 0, 0], - "89": [0, 0.68333, 0.025, 0], - "90": [0, 0.68333, 0, 0], - "91": [0.25, 0.75, 0, 0], - "92": [0.25, 0.75, 0, 0], - "93": [0.25, 0.75, 0, 0], - "94": [0, 0.69444, 0, 0], - "95": [0.31, 0.12056, 0.02778, 0], - "96": [0, 0.69444, 0, 0], - "97": [0, 0.43056, 0, 0], - "98": [0, 0.69444, 0, 0], - "99": [0, 0.43056, 0, 0], - "100": [0, 0.69444, 0, 0], - "101": [0, 0.43056, 0, 0], - "102": [0, 0.69444, 0.07778, 0], - "103": [0.19444, 0.43056, 0.01389, 0], - "104": [0, 0.69444, 0, 0], - "105": [0, 0.66786, 0, 0], - "106": [0.19444, 0.66786, 0, 0], - "107": [0, 0.69444, 0, 0], - "108": [0, 0.69444, 0, 0], - "109": [0, 0.43056, 0, 0], - "110": [0, 0.43056, 0, 0], - "111": [0, 0.43056, 0, 0], - "112": [0.19444, 0.43056, 0, 0], - "113": [0.19444, 0.43056, 0, 0], - "114": [0, 0.43056, 0, 0], - "115": [0, 0.43056, 0, 0], - "116": [0, 0.61508, 0, 0], - "117": [0, 0.43056, 0, 0], - "118": [0, 0.43056, 0.01389, 0], - "119": [0, 0.43056, 0.01389, 0], - "120": [0, 0.43056, 0, 0], - "121": [0.19444, 0.43056, 0.01389, 0], - "122": [0, 0.43056, 0, 0], - "123": [0.25, 0.75, 0, 0], - "124": [0.25, 0.75, 0, 0], - "125": [0.25, 0.75, 0, 0], - "126": [0.35, 0.31786, 0, 0], - "160": [0, 0, 0, 0], - "168": [0, 0.66786, 0, 0], - "172": [0, 0.43056, 0, 0], - "175": [0, 0.56778, 0, 0], - "176": [0, 0.69444, 0, 0], - "177": [0.08333, 0.58333, 0, 0], - "180": [0, 0.69444, 0, 0], - "215": [0.08333, 0.58333, 0, 0], - "247": [0.08333, 0.58333, 0, 0], - "305": [0, 0.43056, 0, 0], - "567": [0.19444, 0.43056, 0, 0], - "710": [0, 0.69444, 0, 0], - "711": [0, 0.62847, 0, 0], - "713": [0, 0.56778, 0, 0], - "714": [0, 0.69444, 0, 0], - "715": [0, 0.69444, 0, 0], - "728": [0, 0.69444, 0, 0], - "729": [0, 0.66786, 0, 0], - "730": [0, 0.69444, 0, 0], - "732": [0, 0.66786, 0, 0], - "768": [0, 0.69444, 0, 0], - "769": [0, 0.69444, 0, 0], - "770": [0, 0.69444, 0, 0], - "771": [0, 0.66786, 0, 0], - "772": [0, 0.56778, 0, 0], - "774": [0, 0.69444, 0, 0], - "775": [0, 0.66786, 0, 0], - "776": [0, 0.66786, 0, 0], - "778": [0, 0.69444, 0, 0], - "779": [0, 0.69444, 0, 0], - "780": [0, 0.62847, 0, 0], - "824": [0.19444, 0.69444, 0, 0], - "915": [0, 0.68333, 0, 0], - "916": [0, 0.68333, 0, 0], - "920": [0, 0.68333, 0, 0], - "923": [0, 0.68333, 0, 0], - "926": [0, 0.68333, 0, 0], - "928": [0, 0.68333, 0, 0], - "931": [0, 0.68333, 0, 0], - "933": [0, 0.68333, 0, 0], - "934": [0, 0.68333, 0, 0], - "936": [0, 0.68333, 0, 0], - "937": [0, 0.68333, 0, 0], - "8211": [0, 0.43056, 0.02778, 0], - "8212": [0, 0.43056, 0.02778, 0], - "8216": [0, 0.69444, 0, 0], - "8217": [0, 0.69444, 0, 0], - "8220": [0, 0.69444, 0, 0], - "8221": [0, 0.69444, 0, 0], - "8224": [0.19444, 0.69444, 0, 0], - "8225": [0.19444, 0.69444, 0, 0], - "8230": [0, 0.12, 0, 0], - "8242": [0, 0.55556, 0, 0], - "8407": [0, 0.71444, 0.15382, 0], - "8463": [0, 0.68889, 0, 0], - "8465": [0, 0.69444, 0, 0], - "8467": [0, 0.69444, 0, 0.11111], - "8472": [0.19444, 0.43056, 0, 0.11111], - "8476": [0, 0.69444, 0, 0], - "8501": [0, 0.69444, 0, 0], - "8592": [-0.13313, 0.36687, 0, 0], - "8593": [0.19444, 0.69444, 0, 0], - "8594": [-0.13313, 0.36687, 0, 0], - "8595": [0.19444, 0.69444, 0, 0], - "8596": [-0.13313, 0.36687, 0, 0], - "8597": [0.25, 0.75, 0, 0], - "8598": [0.19444, 0.69444, 0, 0], - "8599": [0.19444, 0.69444, 0, 0], - "8600": [0.19444, 0.69444, 0, 0], - "8601": [0.19444, 0.69444, 0, 0], - "8614": [0.011, 0.511, 0, 0], - "8617": [0.011, 0.511, 0, 0], - "8618": [0.011, 0.511, 0, 0], - "8636": [-0.13313, 0.36687, 0, 0], - "8637": [-0.13313, 0.36687, 0, 0], - "8640": [-0.13313, 0.36687, 0, 0], - "8641": [-0.13313, 0.36687, 0, 0], - "8652": [0.011, 0.671, 0, 0], - "8656": [-0.13313, 0.36687, 0, 0], - "8657": [0.19444, 0.69444, 0, 0], - "8658": [-0.13313, 0.36687, 0, 0], - "8659": [0.19444, 0.69444, 0, 0], - "8660": [-0.13313, 0.36687, 0, 0], - "8661": [0.25, 0.75, 0, 0], - "8704": [0, 0.69444, 0, 0], - "8706": [0, 0.69444, 0.05556, 0.08334], - "8707": [0, 0.69444, 0, 0], - "8709": [0.05556, 0.75, 0, 0], - "8711": [0, 0.68333, 0, 0], - "8712": [0.0391, 0.5391, 0, 0], - "8715": [0.0391, 0.5391, 0, 0], - "8722": [0.08333, 0.58333, 0, 0], - "8723": [0.08333, 0.58333, 0, 0], - "8725": [0.25, 0.75, 0, 0], - "8726": [0.25, 0.75, 0, 0], - "8727": [-0.03472, 0.46528, 0, 0], - "8728": [-0.05555, 0.44445, 0, 0], - "8729": [-0.05555, 0.44445, 0, 0], - "8730": [0.2, 0.8, 0, 0], - "8733": [0, 0.43056, 0, 0], - "8734": [0, 0.43056, 0, 0], - "8736": [0, 0.69224, 0, 0], - "8739": [0.25, 0.75, 0, 0], - "8741": [0.25, 0.75, 0, 0], - "8743": [0, 0.55556, 0, 0], - "8744": [0, 0.55556, 0, 0], - "8745": [0, 0.55556, 0, 0], - "8746": [0, 0.55556, 0, 0], - "8747": [0.19444, 0.69444, 0.11111, 0], - "8764": [-0.13313, 0.36687, 0, 0], - "8768": [0.19444, 0.69444, 0, 0], - "8771": [-0.03625, 0.46375, 0, 0], - "8773": [-0.022, 0.589, 0, 0], - "8776": [-0.01688, 0.48312, 0, 0], - "8781": [-0.03625, 0.46375, 0, 0], - "8784": [-0.133, 0.67, 0, 0], - "8800": [0.215, 0.716, 0, 0], - "8801": [-0.03625, 0.46375, 0, 0], - "8804": [0.13597, 0.63597, 0, 0], - "8805": [0.13597, 0.63597, 0, 0], - "8810": [0.0391, 0.5391, 0, 0], - "8811": [0.0391, 0.5391, 0, 0], - "8826": [0.0391, 0.5391, 0, 0], - "8827": [0.0391, 0.5391, 0, 0], - "8834": [0.0391, 0.5391, 0, 0], - "8835": [0.0391, 0.5391, 0, 0], - "8838": [0.13597, 0.63597, 0, 0], - "8839": [0.13597, 0.63597, 0, 0], - "8846": [0, 0.55556, 0, 0], - "8849": [0.13597, 0.63597, 0, 0], - "8850": [0.13597, 0.63597, 0, 0], - "8851": [0, 0.55556, 0, 0], - "8852": [0, 0.55556, 0, 0], - "8853": [0.08333, 0.58333, 0, 0], - "8854": [0.08333, 0.58333, 0, 0], - "8855": [0.08333, 0.58333, 0, 0], - "8856": [0.08333, 0.58333, 0, 0], - "8857": [0.08333, 0.58333, 0, 0], - "8866": [0, 0.69444, 0, 0], - "8867": [0, 0.69444, 0, 0], - "8868": [0, 0.69444, 0, 0], - "8869": [0, 0.69444, 0, 0], - "8872": [0.249, 0.75, 0, 0], - "8900": [-0.05555, 0.44445, 0, 0], - "8901": [-0.05555, 0.44445, 0, 0], - "8902": [-0.03472, 0.46528, 0, 0], - "8904": [0.005, 0.505, 0, 0], - "8942": [0.03, 0.9, 0, 0], - "8943": [-0.19, 0.31, 0, 0], - "8945": [-0.1, 0.82, 0, 0], - "8968": [0.25, 0.75, 0, 0], - "8969": [0.25, 0.75, 0, 0], - "8970": [0.25, 0.75, 0, 0], - "8971": [0.25, 0.75, 0, 0], - "8994": [-0.14236, 0.35764, 0, 0], - "8995": [-0.14236, 0.35764, 0, 0], - "9136": [0.244, 0.744, 0, 0], - "9137": [0.244, 0.744, 0, 0], - "9651": [0.19444, 0.69444, 0, 0], - "9657": [-0.03472, 0.46528, 0, 0], - "9661": [0.19444, 0.69444, 0, 0], - "9667": [-0.03472, 0.46528, 0, 0], - "9711": [0.19444, 0.69444, 0, 0], - "9824": [0.12963, 0.69444, 0, 0], - "9825": [0.12963, 0.69444, 0, 0], - "9826": [0.12963, 0.69444, 0, 0], - "9827": [0.12963, 0.69444, 0, 0], - "9837": [0, 0.75, 0, 0], - "9838": [0.19444, 0.69444, 0, 0], - "9839": [0.19444, 0.69444, 0, 0], - "10216": [0.25, 0.75, 0, 0], - "10217": [0.25, 0.75, 0, 0], - "10222": [0.244, 0.744, 0, 0], - "10223": [0.244, 0.744, 0, 0], - "10229": [0.011, 0.511, 0, 0], - "10230": [0.011, 0.511, 0, 0], - "10231": [0.011, 0.511, 0, 0], - "10232": [0.024, 0.525, 0, 0], - "10233": [0.024, 0.525, 0, 0], - "10234": [0.024, 0.525, 0, 0], - "10236": [0.011, 0.511, 0, 0], - "10815": [0, 0.68333, 0, 0], - "10927": [0.13597, 0.63597, 0, 0], - "10928": [0.13597, 0.63597, 0, 0] - }, - "Math-BoldItalic": { - "47": [0.19444, 0.69444, 0, 0], - "65": [0, 0.68611, 0, 0], - "66": [0, 0.68611, 0.04835, 0], - "67": [0, 0.68611, 0.06979, 0], - "68": [0, 0.68611, 0.03194, 0], - "69": [0, 0.68611, 0.05451, 0], - "70": [0, 0.68611, 0.15972, 0], - "71": [0, 0.68611, 0, 0], - "72": [0, 0.68611, 0.08229, 0], - "73": [0, 0.68611, 0.07778, 0], - "74": [0, 0.68611, 0.10069, 0], - "75": [0, 0.68611, 0.06979, 0], - "76": [0, 0.68611, 0, 0], - "77": [0, 0.68611, 0.11424, 0], - "78": [0, 0.68611, 0.11424, 0], - "79": [0, 0.68611, 0.03194, 0], - "80": [0, 0.68611, 0.15972, 0], - "81": [0.19444, 0.68611, 0, 0], - "82": [0, 0.68611, 0.00421, 0], - "83": [0, 0.68611, 0.05382, 0], - "84": [0, 0.68611, 0.15972, 0], - "85": [0, 0.68611, 0.11424, 0], - "86": [0, 0.68611, 0.25555, 0], - "87": [0, 0.68611, 0.15972, 0], - "88": [0, 0.68611, 0.07778, 0], - "89": [0, 0.68611, 0.25555, 0], - "90": [0, 0.68611, 0.06979, 0], - "97": [0, 0.44444, 0, 0], - "98": [0, 0.69444, 0, 0], - "99": [0, 0.44444, 0, 0], - "100": [0, 0.69444, 0, 0], - "101": [0, 0.44444, 0, 0], - "102": [0.19444, 0.69444, 0.11042, 0], - "103": [0.19444, 0.44444, 0.03704, 0], - "104": [0, 0.69444, 0, 0], - "105": [0, 0.69326, 0, 0], - "106": [0.19444, 0.69326, 0.0622, 0], - "107": [0, 0.69444, 0.01852, 0], - "108": [0, 0.69444, 0.0088, 0], - "109": [0, 0.44444, 0, 0], - "110": [0, 0.44444, 0, 0], - "111": [0, 0.44444, 0, 0], - "112": [0.19444, 0.44444, 0, 0], - "113": [0.19444, 0.44444, 0.03704, 0], - "114": [0, 0.44444, 0.03194, 0], - "115": [0, 0.44444, 0, 0], - "116": [0, 0.63492, 0, 0], - "117": [0, 0.44444, 0, 0], - "118": [0, 0.44444, 0.03704, 0], - "119": [0, 0.44444, 0.02778, 0], - "120": [0, 0.44444, 0, 0], - "121": [0.19444, 0.44444, 0.03704, 0], - "122": [0, 0.44444, 0.04213, 0], - "915": [0, 0.68611, 0.15972, 0], - "916": [0, 0.68611, 0, 0], - "920": [0, 0.68611, 0.03194, 0], - "923": [0, 0.68611, 0, 0], - "926": [0, 0.68611, 0.07458, 0], - "928": [0, 0.68611, 0.08229, 0], - "931": [0, 0.68611, 0.05451, 0], - "933": [0, 0.68611, 0.15972, 0], - "934": [0, 0.68611, 0, 0], - "936": [0, 0.68611, 0.11653, 0], - "937": [0, 0.68611, 0.04835, 0], - "945": [0, 0.44444, 0, 0], - "946": [0.19444, 0.69444, 0.03403, 0], - "947": [0.19444, 0.44444, 0.06389, 0], - "948": [0, 0.69444, 0.03819, 0], - "949": [0, 0.44444, 0, 0], - "950": [0.19444, 0.69444, 0.06215, 0], - "951": [0.19444, 0.44444, 0.03704, 0], - "952": [0, 0.69444, 0.03194, 0], - "953": [0, 0.44444, 0, 0], - "954": [0, 0.44444, 0, 0], - "955": [0, 0.69444, 0, 0], - "956": [0.19444, 0.44444, 0, 0], - "957": [0, 0.44444, 0.06898, 0], - "958": [0.19444, 0.69444, 0.03021, 0], - "959": [0, 0.44444, 0, 0], - "960": [0, 0.44444, 0.03704, 0], - "961": [0.19444, 0.44444, 0, 0], - "962": [0.09722, 0.44444, 0.07917, 0], - "963": [0, 0.44444, 0.03704, 0], - "964": [0, 0.44444, 0.13472, 0], - "965": [0, 0.44444, 0.03704, 0], - "966": [0.19444, 0.44444, 0, 0], - "967": [0.19444, 0.44444, 0, 0], - "968": [0.19444, 0.69444, 0.03704, 0], - "969": [0, 0.44444, 0.03704, 0], - "977": [0, 0.69444, 0, 0], - "981": [0.19444, 0.69444, 0, 0], - "982": [0, 0.44444, 0.03194, 0], - "1009": [0.19444, 0.44444, 0, 0], - "1013": [0, 0.44444, 0, 0] - }, - "Math-Italic": { - "47": [0.19444, 0.69444, 0, 0], - "65": [0, 0.68333, 0, 0.13889], - "66": [0, 0.68333, 0.05017, 0.08334], - "67": [0, 0.68333, 0.07153, 0.08334], - "68": [0, 0.68333, 0.02778, 0.05556], - "69": [0, 0.68333, 0.05764, 0.08334], - "70": [0, 0.68333, 0.13889, 0.08334], - "71": [0, 0.68333, 0, 0.08334], - "72": [0, 0.68333, 0.08125, 0.05556], - "73": [0, 0.68333, 0.07847, 0.11111], - "74": [0, 0.68333, 0.09618, 0.16667], - "75": [0, 0.68333, 0.07153, 0.05556], - "76": [0, 0.68333, 0, 0.02778], - "77": [0, 0.68333, 0.10903, 0.08334], - "78": [0, 0.68333, 0.10903, 0.08334], - "79": [0, 0.68333, 0.02778, 0.08334], - "80": [0, 0.68333, 0.13889, 0.08334], - "81": [0.19444, 0.68333, 0, 0.08334], - "82": [0, 0.68333, 0.00773, 0.08334], - "83": [0, 0.68333, 0.05764, 0.08334], - "84": [0, 0.68333, 0.13889, 0.08334], - "85": [0, 0.68333, 0.10903, 0.02778], - "86": [0, 0.68333, 0.22222, 0], - "87": [0, 0.68333, 0.13889, 0], - "88": [0, 0.68333, 0.07847, 0.08334], - "89": [0, 0.68333, 0.22222, 0], - "90": [0, 0.68333, 0.07153, 0.08334], - "97": [0, 0.43056, 0, 0], - "98": [0, 0.69444, 0, 0], - "99": [0, 0.43056, 0, 0.05556], - "100": [0, 0.69444, 0, 0.16667], - "101": [0, 0.43056, 0, 0.05556], - "102": [0.19444, 0.69444, 0.10764, 0.16667], - "103": [0.19444, 0.43056, 0.03588, 0.02778], - "104": [0, 0.69444, 0, 0], - "105": [0, 0.65952, 0, 0], - "106": [0.19444, 0.65952, 0.05724, 0], - "107": [0, 0.69444, 0.03148, 0], - "108": [0, 0.69444, 0.01968, 0.08334], - "109": [0, 0.43056, 0, 0], - "110": [0, 0.43056, 0, 0], - "111": [0, 0.43056, 0, 0.05556], - "112": [0.19444, 0.43056, 0, 0.08334], - "113": [0.19444, 0.43056, 0.03588, 0.08334], - "114": [0, 0.43056, 0.02778, 0.05556], - "115": [0, 0.43056, 0, 0.05556], - "116": [0, 0.61508, 0, 0.08334], - "117": [0, 0.43056, 0, 0.02778], - "118": [0, 0.43056, 0.03588, 0.02778], - "119": [0, 0.43056, 0.02691, 0.08334], - "120": [0, 0.43056, 0, 0.02778], - "121": [0.19444, 0.43056, 0.03588, 0.05556], - "122": [0, 0.43056, 0.04398, 0.05556], - "915": [0, 0.68333, 0.13889, 0.08334], - "916": [0, 0.68333, 0, 0.16667], - "920": [0, 0.68333, 0.02778, 0.08334], - "923": [0, 0.68333, 0, 0.16667], - "926": [0, 0.68333, 0.07569, 0.08334], - "928": [0, 0.68333, 0.08125, 0.05556], - "931": [0, 0.68333, 0.05764, 0.08334], - "933": [0, 0.68333, 0.13889, 0.05556], - "934": [0, 0.68333, 0, 0.08334], - "936": [0, 0.68333, 0.11, 0.05556], - "937": [0, 0.68333, 0.05017, 0.08334], - "945": [0, 0.43056, 0.0037, 0.02778], - "946": [0.19444, 0.69444, 0.05278, 0.08334], - "947": [0.19444, 0.43056, 0.05556, 0], - "948": [0, 0.69444, 0.03785, 0.05556], - "949": [0, 0.43056, 0, 0.08334], - "950": [0.19444, 0.69444, 0.07378, 0.08334], - "951": [0.19444, 0.43056, 0.03588, 0.05556], - "952": [0, 0.69444, 0.02778, 0.08334], - "953": [0, 0.43056, 0, 0.05556], - "954": [0, 0.43056, 0, 0], - "955": [0, 0.69444, 0, 0], - "956": [0.19444, 0.43056, 0, 0.02778], - "957": [0, 0.43056, 0.06366, 0.02778], - "958": [0.19444, 0.69444, 0.04601, 0.11111], - "959": [0, 0.43056, 0, 0.05556], - "960": [0, 0.43056, 0.03588, 0], - "961": [0.19444, 0.43056, 0, 0.08334], - "962": [0.09722, 0.43056, 0.07986, 0.08334], - "963": [0, 0.43056, 0.03588, 0], - "964": [0, 0.43056, 0.1132, 0.02778], - "965": [0, 0.43056, 0.03588, 0.02778], - "966": [0.19444, 0.43056, 0, 0.08334], - "967": [0.19444, 0.43056, 0, 0.05556], - "968": [0.19444, 0.69444, 0.03588, 0.11111], - "969": [0, 0.43056, 0.03588, 0], - "977": [0, 0.69444, 0, 0.08334], - "981": [0.19444, 0.69444, 0, 0.08334], - "982": [0, 0.43056, 0.02778, 0], - "1009": [0.19444, 0.43056, 0, 0.08334], - "1013": [0, 0.43056, 0, 0.05556] - }, - "Math-Regular": { - "65": [0, 0.68333, 0, 0.13889], - "66": [0, 0.68333, 0.05017, 0.08334], - "67": [0, 0.68333, 0.07153, 0.08334], - "68": [0, 0.68333, 0.02778, 0.05556], - "69": [0, 0.68333, 0.05764, 0.08334], - "70": [0, 0.68333, 0.13889, 0.08334], - "71": [0, 0.68333, 0, 0.08334], - "72": [0, 0.68333, 0.08125, 0.05556], - "73": [0, 0.68333, 0.07847, 0.11111], - "74": [0, 0.68333, 0.09618, 0.16667], - "75": [0, 0.68333, 0.07153, 0.05556], - "76": [0, 0.68333, 0, 0.02778], - "77": [0, 0.68333, 0.10903, 0.08334], - "78": [0, 0.68333, 0.10903, 0.08334], - "79": [0, 0.68333, 0.02778, 0.08334], - "80": [0, 0.68333, 0.13889, 0.08334], - "81": [0.19444, 0.68333, 0, 0.08334], - "82": [0, 0.68333, 0.00773, 0.08334], - "83": [0, 0.68333, 0.05764, 0.08334], - "84": [0, 0.68333, 0.13889, 0.08334], - "85": [0, 0.68333, 0.10903, 0.02778], - "86": [0, 0.68333, 0.22222, 0], - "87": [0, 0.68333, 0.13889, 0], - "88": [0, 0.68333, 0.07847, 0.08334], - "89": [0, 0.68333, 0.22222, 0], - "90": [0, 0.68333, 0.07153, 0.08334], - "97": [0, 0.43056, 0, 0], - "98": [0, 0.69444, 0, 0], - "99": [0, 0.43056, 0, 0.05556], - "100": [0, 0.69444, 0, 0.16667], - "101": [0, 0.43056, 0, 0.05556], - "102": [0.19444, 0.69444, 0.10764, 0.16667], - "103": [0.19444, 0.43056, 0.03588, 0.02778], - "104": [0, 0.69444, 0, 0], - "105": [0, 0.65952, 0, 0], - "106": [0.19444, 0.65952, 0.05724, 0], - "107": [0, 0.69444, 0.03148, 0], - "108": [0, 0.69444, 0.01968, 0.08334], - "109": [0, 0.43056, 0, 0], - "110": [0, 0.43056, 0, 0], - "111": [0, 0.43056, 0, 0.05556], - "112": [0.19444, 0.43056, 0, 0.08334], - "113": [0.19444, 0.43056, 0.03588, 0.08334], - "114": [0, 0.43056, 0.02778, 0.05556], - "115": [0, 0.43056, 0, 0.05556], - "116": [0, 0.61508, 0, 0.08334], - "117": [0, 0.43056, 0, 0.02778], - "118": [0, 0.43056, 0.03588, 0.02778], - "119": [0, 0.43056, 0.02691, 0.08334], - "120": [0, 0.43056, 0, 0.02778], - "121": [0.19444, 0.43056, 0.03588, 0.05556], - "122": [0, 0.43056, 0.04398, 0.05556], - "915": [0, 0.68333, 0.13889, 0.08334], - "916": [0, 0.68333, 0, 0.16667], - "920": [0, 0.68333, 0.02778, 0.08334], - "923": [0, 0.68333, 0, 0.16667], - "926": [0, 0.68333, 0.07569, 0.08334], - "928": [0, 0.68333, 0.08125, 0.05556], - "931": [0, 0.68333, 0.05764, 0.08334], - "933": [0, 0.68333, 0.13889, 0.05556], - "934": [0, 0.68333, 0, 0.08334], - "936": [0, 0.68333, 0.11, 0.05556], - "937": [0, 0.68333, 0.05017, 0.08334], - "945": [0, 0.43056, 0.0037, 0.02778], - "946": [0.19444, 0.69444, 0.05278, 0.08334], - "947": [0.19444, 0.43056, 0.05556, 0], - "948": [0, 0.69444, 0.03785, 0.05556], - "949": [0, 0.43056, 0, 0.08334], - "950": [0.19444, 0.69444, 0.07378, 0.08334], - "951": [0.19444, 0.43056, 0.03588, 0.05556], - "952": [0, 0.69444, 0.02778, 0.08334], - "953": [0, 0.43056, 0, 0.05556], - "954": [0, 0.43056, 0, 0], - "955": [0, 0.69444, 0, 0], - "956": [0.19444, 0.43056, 0, 0.02778], - "957": [0, 0.43056, 0.06366, 0.02778], - "958": [0.19444, 0.69444, 0.04601, 0.11111], - "959": [0, 0.43056, 0, 0.05556], - "960": [0, 0.43056, 0.03588, 0], - "961": [0.19444, 0.43056, 0, 0.08334], - "962": [0.09722, 0.43056, 0.07986, 0.08334], - "963": [0, 0.43056, 0.03588, 0], - "964": [0, 0.43056, 0.1132, 0.02778], - "965": [0, 0.43056, 0.03588, 0.02778], - "966": [0.19444, 0.43056, 0, 0.08334], - "967": [0.19444, 0.43056, 0, 0.05556], - "968": [0.19444, 0.69444, 0.03588, 0.11111], - "969": [0, 0.43056, 0.03588, 0], - "977": [0, 0.69444, 0, 0.08334], - "981": [0.19444, 0.69444, 0, 0.08334], - "982": [0, 0.43056, 0.02778, 0], - "1009": [0.19444, 0.43056, 0, 0.08334], - "1013": [0, 0.43056, 0, 0.05556] - }, - "SansSerif-Regular": { - "33": [0, 0.69444, 0, 0], - "34": [0, 0.69444, 0, 0], - "35": [0.19444, 0.69444, 0, 0], - "36": [0.05556, 0.75, 0, 0], - "37": [0.05556, 0.75, 0, 0], - "38": [0, 0.69444, 0, 0], - "39": [0, 0.69444, 0, 0], - "40": [0.25, 0.75, 0, 0], - "41": [0.25, 0.75, 0, 0], - "42": [0, 0.75, 0, 0], - "43": [0.08333, 0.58333, 0, 0], - "44": [0.125, 0.08333, 0, 0], - "45": [0, 0.44444, 0, 0], - "46": [0, 0.08333, 0, 0], - "47": [0.25, 0.75, 0, 0], - "48": [0, 0.65556, 0, 0], - "49": [0, 0.65556, 0, 0], - "50": [0, 0.65556, 0, 0], - "51": [0, 0.65556, 0, 0], - "52": [0, 0.65556, 0, 0], - "53": [0, 0.65556, 0, 0], - "54": [0, 0.65556, 0, 0], - "55": [0, 0.65556, 0, 0], - "56": [0, 0.65556, 0, 0], - "57": [0, 0.65556, 0, 0], - "58": [0, 0.44444, 0, 0], - "59": [0.125, 0.44444, 0, 0], - "61": [-0.13, 0.37, 0, 0], - "63": [0, 0.69444, 0, 0], - "64": [0, 0.69444, 0, 0], - "65": [0, 0.69444, 0, 0], - "66": [0, 0.69444, 0, 0], - "67": [0, 0.69444, 0, 0], - "68": [0, 0.69444, 0, 0], - "69": [0, 0.69444, 0, 0], - "70": [0, 0.69444, 0, 0], - "71": [0, 0.69444, 0, 0], - "72": [0, 0.69444, 0, 0], - "73": [0, 0.69444, 0, 0], - "74": [0, 0.69444, 0, 0], - "75": [0, 0.69444, 0, 0], - "76": [0, 0.69444, 0, 0], - "77": [0, 0.69444, 0, 0], - "78": [0, 0.69444, 0, 0], - "79": [0, 0.69444, 0, 0], - "80": [0, 0.69444, 0, 0], - "81": [0.125, 0.69444, 0, 0], - "82": [0, 0.69444, 0, 0], - "83": [0, 0.69444, 0, 0], - "84": [0, 0.69444, 0, 0], - "85": [0, 0.69444, 0, 0], - "86": [0, 0.69444, 0.01389, 0], - "87": [0, 0.69444, 0.01389, 0], - "88": [0, 0.69444, 0, 0], - "89": [0, 0.69444, 0.025, 0], - "90": [0, 0.69444, 0, 0], - "91": [0.25, 0.75, 0, 0], - "93": [0.25, 0.75, 0, 0], - "94": [0, 0.69444, 0, 0], - "95": [0.35, 0.09444, 0.02778, 0], - "97": [0, 0.44444, 0, 0], - "98": [0, 0.69444, 0, 0], - "99": [0, 0.44444, 0, 0], - "100": [0, 0.69444, 0, 0], - "101": [0, 0.44444, 0, 0], - "102": [0, 0.69444, 0.06944, 0], - "103": [0.19444, 0.44444, 0.01389, 0], - "104": [0, 0.69444, 0, 0], - "105": [0, 0.67937, 0, 0], - "106": [0.19444, 0.67937, 0, 0], - "107": [0, 0.69444, 0, 0], - "108": [0, 0.69444, 0, 0], - "109": [0, 0.44444, 0, 0], - "110": [0, 0.44444, 0, 0], - "111": [0, 0.44444, 0, 0], - "112": [0.19444, 0.44444, 0, 0], - "113": [0.19444, 0.44444, 0, 0], - "114": [0, 0.44444, 0.01389, 0], - "115": [0, 0.44444, 0, 0], - "116": [0, 0.57143, 0, 0], - "117": [0, 0.44444, 0, 0], - "118": [0, 0.44444, 0.01389, 0], - "119": [0, 0.44444, 0.01389, 0], - "120": [0, 0.44444, 0, 0], - "121": [0.19444, 0.44444, 0.01389, 0], - "122": [0, 0.44444, 0, 0], - "126": [0.35, 0.32659, 0, 0], - "305": [0, 0.44444, 0, 0], - "567": [0.19444, 0.44444, 0, 0], - "768": [0, 0.69444, 0, 0], - "769": [0, 0.69444, 0, 0], - "770": [0, 0.69444, 0, 0], - "771": [0, 0.67659, 0, 0], - "772": [0, 0.60889, 0, 0], - "774": [0, 0.69444, 0, 0], - "775": [0, 0.67937, 0, 0], - "776": [0, 0.67937, 0, 0], - "778": [0, 0.69444, 0, 0], - "779": [0, 0.69444, 0, 0], - "780": [0, 0.63194, 0, 0], - "915": [0, 0.69444, 0, 0], - "916": [0, 0.69444, 0, 0], - "920": [0, 0.69444, 0, 0], - "923": [0, 0.69444, 0, 0], - "926": [0, 0.69444, 0, 0], - "928": [0, 0.69444, 0, 0], - "931": [0, 0.69444, 0, 0], - "933": [0, 0.69444, 0, 0], - "934": [0, 0.69444, 0, 0], - "936": [0, 0.69444, 0, 0], - "937": [0, 0.69444, 0, 0], - "8211": [0, 0.44444, 0.02778, 0], - "8212": [0, 0.44444, 0.02778, 0], - "8216": [0, 0.69444, 0, 0], - "8217": [0, 0.69444, 0, 0], - "8220": [0, 0.69444, 0, 0], - "8221": [0, 0.69444, 0, 0] - }, - "Script-Regular": { - "65": [0, 0.7, 0.22925, 0], - "66": [0, 0.7, 0.04087, 0], - "67": [0, 0.7, 0.1689, 0], - "68": [0, 0.7, 0.09371, 0], - "69": [0, 0.7, 0.18583, 0], - "70": [0, 0.7, 0.13634, 0], - "71": [0, 0.7, 0.17322, 0], - "72": [0, 0.7, 0.29694, 0], - "73": [0, 0.7, 0.19189, 0], - "74": [0.27778, 0.7, 0.19189, 0], - "75": [0, 0.7, 0.31259, 0], - "76": [0, 0.7, 0.19189, 0], - "77": [0, 0.7, 0.15981, 0], - "78": [0, 0.7, 0.3525, 0], - "79": [0, 0.7, 0.08078, 0], - "80": [0, 0.7, 0.08078, 0], - "81": [0, 0.7, 0.03305, 0], - "82": [0, 0.7, 0.06259, 0], - "83": [0, 0.7, 0.19189, 0], - "84": [0, 0.7, 0.29087, 0], - "85": [0, 0.7, 0.25815, 0], - "86": [0, 0.7, 0.27523, 0], - "87": [0, 0.7, 0.27523, 0], - "88": [0, 0.7, 0.26006, 0], - "89": [0, 0.7, 0.2939, 0], - "90": [0, 0.7, 0.24037, 0] - }, - "Size1-Regular": { - "40": [0.35001, 0.85, 0, 0], - "41": [0.35001, 0.85, 0, 0], - "47": [0.35001, 0.85, 0, 0], - "91": [0.35001, 0.85, 0, 0], - "92": [0.35001, 0.85, 0, 0], - "93": [0.35001, 0.85, 0, 0], - "123": [0.35001, 0.85, 0, 0], - "125": [0.35001, 0.85, 0, 0], - "710": [0, 0.72222, 0, 0], - "732": [0, 0.72222, 0, 0], - "770": [0, 0.72222, 0, 0], - "771": [0, 0.72222, 0, 0], - "8214": [-0.00099, 0.601, 0, 0], - "8593": [1e-05, 0.6, 0, 0], - "8595": [1e-05, 0.6, 0, 0], - "8657": [1e-05, 0.6, 0, 0], - "8659": [1e-05, 0.6, 0, 0], - "8719": [0.25001, 0.75, 0, 0], - "8720": [0.25001, 0.75, 0, 0], - "8721": [0.25001, 0.75, 0, 0], - "8730": [0.35001, 0.85, 0, 0], - "8739": [-0.00599, 0.606, 0, 0], - "8741": [-0.00599, 0.606, 0, 0], - "8747": [0.30612, 0.805, 0.19445, 0], - "8748": [0.306, 0.805, 0.19445, 0], - "8749": [0.306, 0.805, 0.19445, 0], - "8750": [0.30612, 0.805, 0.19445, 0], - "8896": [0.25001, 0.75, 0, 0], - "8897": [0.25001, 0.75, 0, 0], - "8898": [0.25001, 0.75, 0, 0], - "8899": [0.25001, 0.75, 0, 0], - "8968": [0.35001, 0.85, 0, 0], - "8969": [0.35001, 0.85, 0, 0], - "8970": [0.35001, 0.85, 0, 0], - "8971": [0.35001, 0.85, 0, 0], - "9168": [-0.00099, 0.601, 0, 0], - "10216": [0.35001, 0.85, 0, 0], - "10217": [0.35001, 0.85, 0, 0], - "10752": [0.25001, 0.75, 0, 0], - "10753": [0.25001, 0.75, 0, 0], - "10754": [0.25001, 0.75, 0, 0], - "10756": [0.25001, 0.75, 0, 0], - "10758": [0.25001, 0.75, 0, 0] - }, - "Size2-Regular": { - "40": [0.65002, 1.15, 0, 0], - "41": [0.65002, 1.15, 0, 0], - "47": [0.65002, 1.15, 0, 0], - "91": [0.65002, 1.15, 0, 0], - "92": [0.65002, 1.15, 0, 0], - "93": [0.65002, 1.15, 0, 0], - "123": [0.65002, 1.15, 0, 0], - "125": [0.65002, 1.15, 0, 0], - "710": [0, 0.75, 0, 0], - "732": [0, 0.75, 0, 0], - "770": [0, 0.75, 0, 0], - "771": [0, 0.75, 0, 0], - "8719": [0.55001, 1.05, 0, 0], - "8720": [0.55001, 1.05, 0, 0], - "8721": [0.55001, 1.05, 0, 0], - "8730": [0.65002, 1.15, 0, 0], - "8747": [0.86225, 1.36, 0.44445, 0], - "8748": [0.862, 1.36, 0.44445, 0], - "8749": [0.862, 1.36, 0.44445, 0], - "8750": [0.86225, 1.36, 0.44445, 0], - "8896": [0.55001, 1.05, 0, 0], - "8897": [0.55001, 1.05, 0, 0], - "8898": [0.55001, 1.05, 0, 0], - "8899": [0.55001, 1.05, 0, 0], - "8968": [0.65002, 1.15, 0, 0], - "8969": [0.65002, 1.15, 0, 0], - "8970": [0.65002, 1.15, 0, 0], - "8971": [0.65002, 1.15, 0, 0], - "10216": [0.65002, 1.15, 0, 0], - "10217": [0.65002, 1.15, 0, 0], - "10752": [0.55001, 1.05, 0, 0], - "10753": [0.55001, 1.05, 0, 0], - "10754": [0.55001, 1.05, 0, 0], - "10756": [0.55001, 1.05, 0, 0], - "10758": [0.55001, 1.05, 0, 0] - }, - "Size3-Regular": { - "40": [0.95003, 1.45, 0, 0], - "41": [0.95003, 1.45, 0, 0], - "47": [0.95003, 1.45, 0, 0], - "91": [0.95003, 1.45, 0, 0], - "92": [0.95003, 1.45, 0, 0], - "93": [0.95003, 1.45, 0, 0], - "123": [0.95003, 1.45, 0, 0], - "125": [0.95003, 1.45, 0, 0], - "710": [0, 0.75, 0, 0], - "732": [0, 0.75, 0, 0], - "770": [0, 0.75, 0, 0], - "771": [0, 0.75, 0, 0], - "8730": [0.95003, 1.45, 0, 0], - "8968": [0.95003, 1.45, 0, 0], - "8969": [0.95003, 1.45, 0, 0], - "8970": [0.95003, 1.45, 0, 0], - "8971": [0.95003, 1.45, 0, 0], - "10216": [0.95003, 1.45, 0, 0], - "10217": [0.95003, 1.45, 0, 0] - }, - "Size4-Regular": { - "40": [1.25003, 1.75, 0, 0], - "41": [1.25003, 1.75, 0, 0], - "47": [1.25003, 1.75, 0, 0], - "91": [1.25003, 1.75, 0, 0], - "92": [1.25003, 1.75, 0, 0], - "93": [1.25003, 1.75, 0, 0], - "123": [1.25003, 1.75, 0, 0], - "125": [1.25003, 1.75, 0, 0], - "710": [0, 0.825, 0, 0], - "732": [0, 0.825, 0, 0], - "770": [0, 0.825, 0, 0], - "771": [0, 0.825, 0, 0], - "8730": [1.25003, 1.75, 0, 0], - "8968": [1.25003, 1.75, 0, 0], - "8969": [1.25003, 1.75, 0, 0], - "8970": [1.25003, 1.75, 0, 0], - "8971": [1.25003, 1.75, 0, 0], - "9115": [0.64502, 1.155, 0, 0], - "9116": [1e-05, 0.6, 0, 0], - "9117": [0.64502, 1.155, 0, 0], - "9118": [0.64502, 1.155, 0, 0], - "9119": [1e-05, 0.6, 0, 0], - "9120": [0.64502, 1.155, 0, 0], - "9121": [0.64502, 1.155, 0, 0], - "9122": [-0.00099, 0.601, 0, 0], - "9123": [0.64502, 1.155, 0, 0], - "9124": [0.64502, 1.155, 0, 0], - "9125": [-0.00099, 0.601, 0, 0], - "9126": [0.64502, 1.155, 0, 0], - "9127": [1e-05, 0.9, 0, 0], - "9128": [0.65002, 1.15, 0, 0], - "9129": [0.90001, 0, 0, 0], - "9130": [0, 0.3, 0, 0], - "9131": [1e-05, 0.9, 0, 0], - "9132": [0.65002, 1.15, 0, 0], - "9133": [0.90001, 0, 0, 0], - "9143": [0.88502, 0.915, 0, 0], - "10216": [1.25003, 1.75, 0, 0], - "10217": [1.25003, 1.75, 0, 0], - "57344": [-0.00499, 0.605, 0, 0], - "57345": [-0.00499, 0.605, 0, 0], - "57680": [0, 0.12, 0, 0], - "57681": [0, 0.12, 0, 0], - "57682": [0, 0.12, 0, 0], - "57683": [0, 0.12, 0, 0] - }, - "Typewriter-Regular": { - "33": [0, 0.61111, 0, 0], - "34": [0, 0.61111, 0, 0], - "35": [0, 0.61111, 0, 0], - "36": [0.08333, 0.69444, 0, 0], - "37": [0.08333, 0.69444, 0, 0], - "38": [0, 0.61111, 0, 0], - "39": [0, 0.61111, 0, 0], - "40": [0.08333, 0.69444, 0, 0], - "41": [0.08333, 0.69444, 0, 0], - "42": [0, 0.52083, 0, 0], - "43": [-0.08056, 0.53055, 0, 0], - "44": [0.13889, 0.125, 0, 0], - "45": [-0.08056, 0.53055, 0, 0], - "46": [0, 0.125, 0, 0], - "47": [0.08333, 0.69444, 0, 0], - "48": [0, 0.61111, 0, 0], - "49": [0, 0.61111, 0, 0], - "50": [0, 0.61111, 0, 0], - "51": [0, 0.61111, 0, 0], - "52": [0, 0.61111, 0, 0], - "53": [0, 0.61111, 0, 0], - "54": [0, 0.61111, 0, 0], - "55": [0, 0.61111, 0, 0], - "56": [0, 0.61111, 0, 0], - "57": [0, 0.61111, 0, 0], - "58": [0, 0.43056, 0, 0], - "59": [0.13889, 0.43056, 0, 0], - "60": [-0.05556, 0.55556, 0, 0], - "61": [-0.19549, 0.41562, 0, 0], - "62": [-0.05556, 0.55556, 0, 0], - "63": [0, 0.61111, 0, 0], - "64": [0, 0.61111, 0, 0], - "65": [0, 0.61111, 0, 0], - "66": [0, 0.61111, 0, 0], - "67": [0, 0.61111, 0, 0], - "68": [0, 0.61111, 0, 0], - "69": [0, 0.61111, 0, 0], - "70": [0, 0.61111, 0, 0], - "71": [0, 0.61111, 0, 0], - "72": [0, 0.61111, 0, 0], - "73": [0, 0.61111, 0, 0], - "74": [0, 0.61111, 0, 0], - "75": [0, 0.61111, 0, 0], - "76": [0, 0.61111, 0, 0], - "77": [0, 0.61111, 0, 0], - "78": [0, 0.61111, 0, 0], - "79": [0, 0.61111, 0, 0], - "80": [0, 0.61111, 0, 0], - "81": [0.13889, 0.61111, 0, 0], - "82": [0, 0.61111, 0, 0], - "83": [0, 0.61111, 0, 0], - "84": [0, 0.61111, 0, 0], - "85": [0, 0.61111, 0, 0], - "86": [0, 0.61111, 0, 0], - "87": [0, 0.61111, 0, 0], - "88": [0, 0.61111, 0, 0], - "89": [0, 0.61111, 0, 0], - "90": [0, 0.61111, 0, 0], - "91": [0.08333, 0.69444, 0, 0], - "92": [0.08333, 0.69444, 0, 0], - "93": [0.08333, 0.69444, 0, 0], - "94": [0, 0.61111, 0, 0], - "95": [0.09514, 0, 0, 0], - "96": [0, 0.61111, 0, 0], - "97": [0, 0.43056, 0, 0], - "98": [0, 0.61111, 0, 0], - "99": [0, 0.43056, 0, 0], - "100": [0, 0.61111, 0, 0], - "101": [0, 0.43056, 0, 0], - "102": [0, 0.61111, 0, 0], - "103": [0.22222, 0.43056, 0, 0], - "104": [0, 0.61111, 0, 0], - "105": [0, 0.61111, 0, 0], - "106": [0.22222, 0.61111, 0, 0], - "107": [0, 0.61111, 0, 0], - "108": [0, 0.61111, 0, 0], - "109": [0, 0.43056, 0, 0], - "110": [0, 0.43056, 0, 0], - "111": [0, 0.43056, 0, 0], - "112": [0.22222, 0.43056, 0, 0], - "113": [0.22222, 0.43056, 0, 0], - "114": [0, 0.43056, 0, 0], - "115": [0, 0.43056, 0, 0], - "116": [0, 0.55358, 0, 0], - "117": [0, 0.43056, 0, 0], - "118": [0, 0.43056, 0, 0], - "119": [0, 0.43056, 0, 0], - "120": [0, 0.43056, 0, 0], - "121": [0.22222, 0.43056, 0, 0], - "122": [0, 0.43056, 0, 0], - "123": [0.08333, 0.69444, 0, 0], - "124": [0.08333, 0.69444, 0, 0], - "125": [0.08333, 0.69444, 0, 0], - "126": [0, 0.61111, 0, 0], - "127": [0, 0.61111, 0, 0], - "305": [0, 0.43056, 0, 0], - "567": [0.22222, 0.43056, 0, 0], - "768": [0, 0.61111, 0, 0], - "769": [0, 0.61111, 0, 0], - "770": [0, 0.61111, 0, 0], - "771": [0, 0.61111, 0, 0], - "772": [0, 0.56555, 0, 0], - "774": [0, 0.61111, 0, 0], - "776": [0, 0.61111, 0, 0], - "778": [0, 0.61111, 0, 0], - "780": [0, 0.56597, 0, 0], - "915": [0, 0.61111, 0, 0], - "916": [0, 0.61111, 0, 0], - "920": [0, 0.61111, 0, 0], - "923": [0, 0.61111, 0, 0], - "926": [0, 0.61111, 0, 0], - "928": [0, 0.61111, 0, 0], - "931": [0, 0.61111, 0, 0], - "933": [0, 0.61111, 0, 0], - "934": [0, 0.61111, 0, 0], - "936": [0, 0.61111, 0, 0], - "937": [0, 0.61111, 0, 0], - "2018": [0, 0.61111, 0, 0], - "2019": [0, 0.61111, 0, 0], - "8242": [0, 0.61111, 0, 0] - } - }; - - },{}],43:[function(require,module,exports){ - - var _utils = require("./utils"); - - var _utils2 = _interopRequireDefault(_utils); - - var _ParseError = require("./ParseError"); - - var _ParseError2 = _interopRequireDefault(_ParseError); - - var _ParseNode = require("./ParseNode"); - - var _ParseNode2 = _interopRequireDefault(_ParseNode); - - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - - /* This file contains a list of functions that we parse, identified by - * the calls to defineFunction. - * - * The first argument to defineFunction is a single name or a list of names. - * All functions named in such a list will share a single implementation. - * - * Each declared function can have associated properties, which - * include the following: - * - * - numArgs: The number of arguments the function takes. - * If this is the only property, it can be passed as a number - * instead of an element of a properties object. - * - argTypes: (optional) An array corresponding to each argument of the - * function, giving the type of argument that should be parsed. Its - * length should be equal to `numArgs + numOptionalArgs`. Valid - * types: - * - "size": A size-like thing, such as "1em" or "5ex" - * - "color": An html color, like "#abc" or "blue" - * - "original": The same type as the environment that the - * function being parsed is in (e.g. used for the - * bodies of functions like \textcolor where the - * first argument is special and the second - * argument is parsed normally) - * Other possible types (probably shouldn't be used) - * - "text": Text-like (e.g. \text) - * - "math": Normal math - * If undefined, this will be treated as an appropriate length - * array of "original" strings - * - greediness: (optional) The greediness of the function to use ungrouped - * arguments. - * - * E.g. if you have an expression - * \sqrt \frac 1 2 - * since \frac has greediness=2 vs \sqrt's greediness=1, \frac - * will use the two arguments '1' and '2' as its two arguments, - * then that whole function will be used as the argument to - * \sqrt. On the other hand, the expressions - * \frac \frac 1 2 3 - * and - * \frac \sqrt 1 2 - * will fail because \frac and \frac have equal greediness - * and \sqrt has a lower greediness than \frac respectively. To - * make these parse, we would have to change them to: - * \frac {\frac 1 2} 3 - * and - * \frac {\sqrt 1} 2 - * - * The default value is `1` - * - allowedInText: (optional) Whether or not the function is allowed inside - * text mode (default false) - * - numOptionalArgs: (optional) The number of optional arguments the function - * should parse. If the optional arguments aren't found, - * `null` will be passed to the handler in their place. - * (default 0) - * - infix: (optional) Must be true if the function is an infix operator. - * - * The last argument is that implementation, the handler for the function(s). - * It is called to handle these functions and their arguments. - * It receives two arguments: - * - context contains information and references provided by the parser - * - args is an array of arguments obtained from TeX input - * The context contains the following properties: - * - funcName: the text (i.e. name) of the function, including \ - * - parser: the parser object - * - lexer: the lexer object - * - positions: the positions in the overall string of the function - * and the arguments. - * The latter three should only be used to produce error messages. - * - * The function should return an object with the following keys: - * - type: The type of element that this is. This is then used in - * buildHTML/buildMathML to determine which function - * should be called to build this node into a DOM node - * Any other data can be added to the object, which will be passed - * in to the function in buildHTML/buildMathML as `group.value`. - */ - - function defineFunction(names, props, handler) { - if (typeof names === "string") { - names = [names]; - } - if (typeof props === "number") { - props = { numArgs: props }; - } - // Set default values of functions - var data = { - numArgs: props.numArgs, - argTypes: props.argTypes, - greediness: props.greediness === undefined ? 1 : props.greediness, - allowedInText: !!props.allowedInText, - allowedInMath: props.allowedInMath, - numOptionalArgs: props.numOptionalArgs || 0, - infix: !!props.infix, - handler: handler - }; - for (var i = 0; i < names.length; ++i) { - module.exports[names[i]] = data; - } - } - - // Since the corresponding buildHTML/buildMathML function expects a - // list of elements, we normalize for different kinds of arguments - var ordargument = function ordargument(arg) { - if (arg.type === "ordgroup") { - return arg.value; - } else { - return [arg]; - } - }; - - // A normal square root - defineFunction("\\sqrt", { - numArgs: 1, - numOptionalArgs: 1 - }, function (context, args) { - var index = args[0]; - var body = args[1]; - return { - type: "sqrt", - body: body, - index: index - }; - }); - - // Non-mathy text, possibly in a font - var textFunctionStyles = { - "\\text": undefined, "\\textrm": "mathrm", "\\textsf": "mathsf", - "\\texttt": "mathtt", "\\textnormal": "mathrm", "\\textbf": "mathbf", - "\\textit": "textit" - }; - - defineFunction(["\\text", "\\textrm", "\\textsf", "\\texttt", "\\textnormal", "\\textbf", "\\textit"], { - numArgs: 1, - argTypes: ["text"], - greediness: 2, - allowedInText: true - }, function (context, args) { - var body = args[0]; - return { - type: "text", - body: ordargument(body), - style: textFunctionStyles[context.funcName] - }; - }); - - // A two-argument custom color - defineFunction("\\textcolor", { - numArgs: 2, - allowedInText: true, - greediness: 3, - argTypes: ["color", "original"] - }, function (context, args) { - var color = args[0]; - var body = args[1]; - return { - type: "color", - color: color.value, - value: ordargument(body) - }; - }); - - // \color is handled in Parser.js's parseImplicitGroup - defineFunction("\\color", { - numArgs: 1, - allowedInText: true, - greediness: 3, - argTypes: ["color"] - }, null); - - // An overline - defineFunction("\\overline", { - numArgs: 1 - }, function (context, args) { - var body = args[0]; - return { - type: "overline", - body: body - }; - }); - - // An underline - defineFunction("\\underline", { - numArgs: 1 - }, function (context, args) { - var body = args[0]; - return { - type: "underline", - body: body - }; - }); - - // A box of the width and height - defineFunction("\\rule", { - numArgs: 2, - numOptionalArgs: 1, - argTypes: ["size", "size", "size"] - }, function (context, args) { - var shift = args[0]; - var width = args[1]; - var height = args[2]; - return { - type: "rule", - shift: shift && shift.value, - width: width.value, - height: height.value - }; - }); - - // TODO: In TeX, \mkern only accepts mu-units, and \kern does not accept - // mu-units. In current KaTeX we relax this; both commands accept any unit. - defineFunction(["\\kern", "\\mkern"], { - numArgs: 1, - argTypes: ["size"] - }, function (context, args) { - return { - type: "kern", - dimension: args[0].value - }; - }); - - // A KaTeX logo - defineFunction("\\KaTeX", { - numArgs: 0 - }, function (context) { - return { - type: "katex" - }; - }); - - defineFunction("\\phantom", { - numArgs: 1 - }, function (context, args) { - var body = args[0]; - return { - type: "phantom", - value: ordargument(body) - }; - }); - - // Math class commands except \mathop - defineFunction(["\\mathord", "\\mathbin", "\\mathrel", "\\mathopen", "\\mathclose", "\\mathpunct", "\\mathinner"], { - numArgs: 1 - }, function (context, args) { - var body = args[0]; - return { - type: "mclass", - mclass: "m" + context.funcName.substr(5), - value: ordargument(body) - }; - }); - - // Build a relation by placing one symbol on top of another - defineFunction("\\stackrel", { - numArgs: 2 - }, function (context, args) { - var top = args[0]; - var bottom = args[1]; - - var bottomop = new _ParseNode2.default("op", { - type: "op", - limits: true, - alwaysHandleSupSub: true, - symbol: false, - value: ordargument(bottom) - }, bottom.mode); - - var supsub = new _ParseNode2.default("supsub", { - base: bottomop, - sup: top, - sub: null - }, top.mode); - - return { - type: "mclass", - mclass: "mrel", - value: [supsub] - }; - }); - - // \mod-type functions - defineFunction("\\bmod", { - numArgs: 0 - }, function (context, args) { - return { - type: "mod", - modType: "bmod", - value: null - }; - }); - - defineFunction(["\\pod", "\\pmod", "\\mod"], { - numArgs: 1 - }, function (context, args) { - var body = args[0]; - return { - type: "mod", - modType: context.funcName.substr(1), - value: ordargument(body) - }; - }); - - // Extra data needed for the delimiter handler down below - var delimiterSizes = { - "\\bigl": { mclass: "mopen", size: 1 }, - "\\Bigl": { mclass: "mopen", size: 2 }, - "\\biggl": { mclass: "mopen", size: 3 }, - "\\Biggl": { mclass: "mopen", size: 4 }, - "\\bigr": { mclass: "mclose", size: 1 }, - "\\Bigr": { mclass: "mclose", size: 2 }, - "\\biggr": { mclass: "mclose", size: 3 }, - "\\Biggr": { mclass: "mclose", size: 4 }, - "\\bigm": { mclass: "mrel", size: 1 }, - "\\Bigm": { mclass: "mrel", size: 2 }, - "\\biggm": { mclass: "mrel", size: 3 }, - "\\Biggm": { mclass: "mrel", size: 4 }, - "\\big": { mclass: "mord", size: 1 }, - "\\Big": { mclass: "mord", size: 2 }, - "\\bigg": { mclass: "mord", size: 3 }, - "\\Bigg": { mclass: "mord", size: 4 } - }; - - var delimiters = ["(", ")", "[", "\\lbrack", "]", "\\rbrack", "\\{", "\\lbrace", "\\}", "\\rbrace", "\\lfloor", "\\rfloor", "\\lceil", "\\rceil", "<", ">", "\\langle", "\\rangle", "\\lt", "\\gt", "\\lvert", "\\rvert", "\\lVert", "\\rVert", "\\lgroup", "\\rgroup", "\\lmoustache", "\\rmoustache", "/", "\\backslash", "|", "\\vert", "\\|", "\\Vert", "\\uparrow", "\\Uparrow", "\\downarrow", "\\Downarrow", "\\updownarrow", "\\Updownarrow", "."]; - - var fontAliases = { - "\\Bbb": "\\mathbb", - "\\bold": "\\mathbf", - "\\frak": "\\mathfrak" - }; - - // Single-argument color functions - defineFunction(["\\blue", "\\orange", "\\pink", "\\red", "\\green", "\\gray", "\\purple", "\\blueA", "\\blueB", "\\blueC", "\\blueD", "\\blueE", "\\tealA", "\\tealB", "\\tealC", "\\tealD", "\\tealE", "\\greenA", "\\greenB", "\\greenC", "\\greenD", "\\greenE", "\\goldA", "\\goldB", "\\goldC", "\\goldD", "\\goldE", "\\redA", "\\redB", "\\redC", "\\redD", "\\redE", "\\maroonA", "\\maroonB", "\\maroonC", "\\maroonD", "\\maroonE", "\\purpleA", "\\purpleB", "\\purpleC", "\\purpleD", "\\purpleE", "\\mintA", "\\mintB", "\\mintC", "\\grayA", "\\grayB", "\\grayC", "\\grayD", "\\grayE", "\\grayF", "\\grayG", "\\grayH", "\\grayI", "\\kaBlue", "\\kaGreen"], { - numArgs: 1, - allowedInText: true, - greediness: 3 - }, function (context, args) { - var body = args[0]; - return { - type: "color", - color: "katex-" + context.funcName.slice(1), - value: ordargument(body) - }; - }); - - // There are 2 flags for operators; whether they produce limits in - // displaystyle, and whether they are symbols and should grow in - // displaystyle. These four groups cover the four possible choices. - - // No limits, not symbols - defineFunction(["\\arcsin", "\\arccos", "\\arctan", "\\arctg", "\\arcctg", "\\arg", "\\ch", "\\cos", "\\cosec", "\\cosh", "\\cot", "\\cotg", "\\coth", "\\csc", "\\ctg", "\\cth", "\\deg", "\\dim", "\\exp", "\\hom", "\\ker", "\\lg", "\\ln", "\\log", "\\sec", "\\sin", "\\sinh", "\\sh", "\\tan", "\\tanh", "\\tg", "\\th"], { - numArgs: 0 - }, function (context) { - return { - type: "op", - limits: false, - symbol: false, - body: context.funcName - }; - }); - - // Limits, not symbols - defineFunction(["\\det", "\\gcd", "\\inf", "\\lim", "\\liminf", "\\limsup", "\\max", "\\min", "\\Pr", "\\sup"], { - numArgs: 0 - }, function (context) { - return { - type: "op", - limits: true, - symbol: false, - body: context.funcName - }; - }); - - // No limits, symbols - defineFunction(["\\int", "\\iint", "\\iiint", "\\oint"], { - numArgs: 0 - }, function (context) { - return { - type: "op", - limits: false, - symbol: true, - body: context.funcName - }; - }); - - // Limits, symbols - defineFunction(["\\coprod", "\\bigvee", "\\bigwedge", "\\biguplus", "\\bigcap", "\\bigcup", "\\intop", "\\prod", "\\sum", "\\bigotimes", "\\bigoplus", "\\bigodot", "\\bigsqcup", "\\smallint"], { - numArgs: 0 - }, function (context) { - return { - type: "op", - limits: true, - symbol: true, - body: context.funcName - }; - }); - - // \mathop class command - defineFunction("\\mathop", { - numArgs: 1 - }, function (context, args) { - var body = args[0]; - return { - type: "op", - limits: false, - symbol: false, - value: ordargument(body) - }; - }); - - // Fractions - defineFunction(["\\dfrac", "\\frac", "\\tfrac", "\\dbinom", "\\binom", "\\tbinom", "\\\\atopfrac"], { - numArgs: 2, - greediness: 2 - }, function (context, args) { - var numer = args[0]; - var denom = args[1]; - var hasBarLine = void 0; - var leftDelim = null; - var rightDelim = null; - var size = "auto"; - - switch (context.funcName) { - case "\\dfrac": - case "\\frac": - case "\\tfrac": - hasBarLine = true; - break; - case "\\\\atopfrac": - hasBarLine = false; - break; - case "\\dbinom": - case "\\binom": - case "\\tbinom": - hasBarLine = false; - leftDelim = "("; - rightDelim = ")"; - break; - default: - throw new Error("Unrecognized genfrac command"); - } - - switch (context.funcName) { - case "\\dfrac": - case "\\dbinom": - size = "display"; - break; - case "\\tfrac": - case "\\tbinom": - size = "text"; - break; - } - - return { - type: "genfrac", - numer: numer, - denom: denom, - hasBarLine: hasBarLine, - leftDelim: leftDelim, - rightDelim: rightDelim, - size: size - }; - }); - - // Left and right overlap functions - defineFunction(["\\llap", "\\rlap"], { - numArgs: 1, - allowedInText: true - }, function (context, args) { - var body = args[0]; - return { - type: context.funcName.slice(1), - body: body - }; - }); - - // Delimiter functions - var checkDelimiter = function checkDelimiter(delim, context) { - if (_utils2.default.contains(delimiters, delim.value)) { - return delim; - } else { - throw new _ParseError2.default("Invalid delimiter: '" + delim.value + "' after '" + context.funcName + "'", delim); - } - }; - - defineFunction(["\\bigl", "\\Bigl", "\\biggl", "\\Biggl", "\\bigr", "\\Bigr", "\\biggr", "\\Biggr", "\\bigm", "\\Bigm", "\\biggm", "\\Biggm", "\\big", "\\Big", "\\bigg", "\\Bigg"], { - numArgs: 1 - }, function (context, args) { - var delim = checkDelimiter(args[0], context); - - return { - type: "delimsizing", - size: delimiterSizes[context.funcName].size, - mclass: delimiterSizes[context.funcName].mclass, - value: delim.value - }; - }); - - defineFunction(["\\left", "\\right"], { - numArgs: 1 - }, function (context, args) { - var delim = checkDelimiter(args[0], context); - - // \left and \right are caught somewhere in Parser.js, which is - // why this data doesn't match what is in buildHTML. - return { - type: "leftright", - value: delim.value - }; - }); - - defineFunction("\\middle", { - numArgs: 1 - }, function (context, args) { - var delim = checkDelimiter(args[0], context); - if (!context.parser.leftrightDepth) { - throw new _ParseError2.default("\\middle without preceding \\left", delim); - } - - return { - type: "middle", - value: delim.value - }; - }); - - // Sizing functions (handled in Parser.js explicitly, hence no handler) - defineFunction(["\\tiny", "\\scriptsize", "\\footnotesize", "\\small", "\\normalsize", "\\large", "\\Large", "\\LARGE", "\\huge", "\\Huge"], 0, null); - - // Style changing functions (handled in Parser.js explicitly, hence no - // handler) - defineFunction(["\\displaystyle", "\\textstyle", "\\scriptstyle", "\\scriptscriptstyle"], 0, null); - - // Old font changing functions - defineFunction(["\\rm", "\\sf", "\\tt", "\\bf", "\\it"], 0, null); - - defineFunction([ - // styles - "\\mathrm", "\\mathit", "\\mathbf", - - // families - "\\mathbb", "\\mathcal", "\\mathfrak", "\\mathscr", "\\mathsf", "\\mathtt", - - // aliases - "\\Bbb", "\\bold", "\\frak"], { - numArgs: 1, - greediness: 2 - }, function (context, args) { - var body = args[0]; - var func = context.funcName; - if (func in fontAliases) { - func = fontAliases[func]; - } - return { - type: "font", - font: func.slice(1), - body: body - }; - }); - - // Accents - defineFunction(["\\acute", "\\grave", "\\ddot", "\\tilde", "\\bar", "\\breve", "\\check", "\\hat", "\\vec", "\\dot", "\\widehat", "\\widetilde", "\\overrightarrow", "\\overleftarrow", "\\Overrightarrow", "\\overleftrightarrow", "\\overgroup", "\\overlinesegment", "\\overleftharpoon", "\\overrightharpoon"], { - numArgs: 1 - }, function (context, args) { - var base = args[0]; - - var isStretchy = !_utils2.default.contains(["\\acute", "\\grave", "\\ddot", "\\tilde", "\\bar", "\\breve", "\\check", "\\hat", "\\vec", "\\dot"], context.funcName); - - var isShifty = !isStretchy || _utils2.default.contains(["\\widehat", "\\widetilde"], context.funcName); - - return { - type: "accent", - label: context.funcName, - isStretchy: isStretchy, - isShifty: isShifty, - value: ordargument(base), - base: base - }; - }); - - // Text-mode accents - defineFunction(["\\'", "\\`", "\\^", "\\~", "\\=", "\\u", "\\.", '\\"', "\\r", "\\H", "\\v"], { - numArgs: 1, - allowedInText: true, - allowedInMath: false - }, function (context, args) { - var base = args[0]; - - return { - type: "accent", - label: context.funcName, - isStretchy: false, - isShifty: true, - value: ordargument(base), - base: base - }; - }); - - // Horizontal stretchy braces - defineFunction(["\\overbrace", "\\underbrace"], { - numArgs: 1 - }, function (context, args) { - var base = args[0]; - return { - type: "horizBrace", - label: context.funcName, - isOver: /^\\over/.test(context.funcName), - base: base - }; - }); - - // Stretchy accents under the body - defineFunction(["\\underleftarrow", "\\underrightarrow", "\\underleftrightarrow", "\\undergroup", "\\underlinesegment", "\\undertilde"], { - numArgs: 1 - }, function (context, args) { - var body = args[0]; - return { - type: "accentUnder", - label: context.funcName, - value: ordargument(body), - body: body - }; - }); - - // Stretchy arrows with an optional argument - defineFunction(["\\xleftarrow", "\\xrightarrow", "\\xLeftarrow", "\\xRightarrow", "\\xleftrightarrow", "\\xLeftrightarrow", "\\xhookleftarrow", "\\xhookrightarrow", "\\xmapsto", "\\xrightharpoondown", "\\xrightharpoonup", "\\xleftharpoondown", "\\xleftharpoonup", "\\xrightleftharpoons", "\\xleftrightharpoons", "\\xLongequal", "\\xtwoheadrightarrow", "\\xtwoheadleftarrow", "\\xLongequal", "\\xtofrom"], { - numArgs: 1, - numOptionalArgs: 1 - }, function (context, args) { - var below = args[0]; - var body = args[1]; - return { - type: "xArrow", // x for extensible - label: context.funcName, - body: body, - below: below - }; - }); - - // enclose - defineFunction(["\\cancel", "\\bcancel", "\\xcancel", "\\sout", "\\fbox"], { - numArgs: 1 - }, function (context, args) { - var body = args[0]; - return { - type: "enclose", - label: context.funcName, - body: body - }; - }); - - // Infix generalized fractions - defineFunction(["\\over", "\\choose", "\\atop"], { - numArgs: 0, - infix: true - }, function (context) { - var replaceWith = void 0; - switch (context.funcName) { - case "\\over": - replaceWith = "\\frac"; - break; - case "\\choose": - replaceWith = "\\binom"; - break; - case "\\atop": - replaceWith = "\\\\atopfrac"; - break; - default: - throw new Error("Unrecognized infix genfrac command"); - } - return { - type: "infix", - replaceWith: replaceWith, - token: context.token - }; - }); - - // Row breaks for aligned data - defineFunction(["\\\\", "\\cr"], { - numArgs: 0, - numOptionalArgs: 1, - argTypes: ["size"] - }, function (context, args) { - var size = args[0]; - return { - type: "cr", - size: size - }; - }); - - // Environment delimiters - defineFunction(["\\begin", "\\end"], { - numArgs: 1, - argTypes: ["text"] - }, function (context, args) { - var nameGroup = args[0]; - if (nameGroup.type !== "ordgroup") { - throw new _ParseError2.default("Invalid environment name", nameGroup); - } - var name = ""; - for (var i = 0; i < nameGroup.value.length; ++i) { - name += nameGroup.value[i].value; - } - return { - type: "environment", - name: name, - nameGroup: nameGroup - }; - }); - - },{"./ParseError":29,"./ParseNode":30,"./utils":51}],44:[function(require,module,exports){ - - /** - * Predefined macros for KaTeX. - * This can be used to define some commands in terms of others. - */ - - // This function might one day accept additional argument and do more things. - function defineMacro(name, body) { - module.exports[name] = body; - } - - ////////////////////////////////////////////////////////////////////// - // basics - defineMacro("\\bgroup", "{"); - defineMacro("\\egroup", "}"); - defineMacro("\\begingroup", "{"); - defineMacro("\\endgroup", "}"); - - // We don't distinguish between math and nonmath kerns. - // (In TeX, the mu unit works only with \mkern.) - defineMacro("\\mkern", "\\kern"); - - ////////////////////////////////////////////////////////////////////// - // amsmath.sty - - // \def\overset#1#2{\binrel@{#2}\binrel@@{\mathop{\kern\z@#2}\limits^{#1}}} - defineMacro("\\overset", "\\mathop{#2}\\limits^{#1}"); - defineMacro("\\underset", "\\mathop{#2}\\limits_{#1}"); - - // \newcommand{\boxed}[1]{\fbox{\m@th$\displaystyle#1$}} - defineMacro("\\boxed", "\\fbox{\\displaystyle{#1}}"); - - //TODO: When implementing \dots, should ideally add the \DOTSB indicator - // into the macro, to indicate these are binary operators. - // \def\iff{\DOTSB\;\Longleftrightarrow\;} - // \def\implies{\DOTSB\;\Longrightarrow\;} - // \def\impliedby{\DOTSB\;\Longleftarrow\;} - defineMacro("\\iff", "\\;\\Longleftrightarrow\\;"); - defineMacro("\\implies", "\\;\\Longrightarrow\\;"); - defineMacro("\\impliedby", "\\;\\Longleftarrow\\;"); - - ////////////////////////////////////////////////////////////////////// - // mathtools.sty - - //\providecommand\ordinarycolon{:} - defineMacro("\\ordinarycolon", ":"); - //\def\vcentcolon{\mathrel{\mathop\ordinarycolon}} - //TODO(edemaine): Not yet centered. Fix via \raisebox or #726 - defineMacro("\\vcentcolon", "\\mathrel{\\mathop\\ordinarycolon}"); - // \providecommand*\dblcolon{\vcentcolon\mathrel{\mkern-.9mu}\vcentcolon} - defineMacro("\\dblcolon", "\\vcentcolon\\mathrel{\\mkern-.9mu}\\vcentcolon"); - // \providecommand*\coloneqq{\vcentcolon\mathrel{\mkern-1.2mu}=} - defineMacro("\\coloneqq", "\\vcentcolon\\mathrel{\\mkern-1.2mu}="); - // \providecommand*\Coloneqq{\dblcolon\mathrel{\mkern-1.2mu}=} - defineMacro("\\Coloneqq", "\\dblcolon\\mathrel{\\mkern-1.2mu}="); - // \providecommand*\coloneq{\vcentcolon\mathrel{\mkern-1.2mu}\mathrel{-}} - defineMacro("\\coloneq", "\\vcentcolon\\mathrel{\\mkern-1.2mu}\\mathrel{-}"); - // \providecommand*\Coloneq{\dblcolon\mathrel{\mkern-1.2mu}\mathrel{-}} - defineMacro("\\Coloneq", "\\dblcolon\\mathrel{\\mkern-1.2mu}\\mathrel{-}"); - // \providecommand*\eqqcolon{=\mathrel{\mkern-1.2mu}\vcentcolon} - defineMacro("\\eqqcolon", "=\\mathrel{\\mkern-1.2mu}\\vcentcolon"); - // \providecommand*\Eqqcolon{=\mathrel{\mkern-1.2mu}\dblcolon} - defineMacro("\\Eqqcolon", "=\\mathrel{\\mkern-1.2mu}\\dblcolon"); - // \providecommand*\eqcolon{\mathrel{-}\mathrel{\mkern-1.2mu}\vcentcolon} - defineMacro("\\eqcolon", "\\mathrel{-}\\mathrel{\\mkern-1.2mu}\\vcentcolon"); - // \providecommand*\Eqcolon{\mathrel{-}\mathrel{\mkern-1.2mu}\dblcolon} - defineMacro("\\Eqcolon", "\\mathrel{-}\\mathrel{\\mkern-1.2mu}\\dblcolon"); - // \providecommand*\colonapprox{\vcentcolon\mathrel{\mkern-1.2mu}\approx} - defineMacro("\\colonapprox", "\\vcentcolon\\mathrel{\\mkern-1.2mu}\\approx"); - // \providecommand*\Colonapprox{\dblcolon\mathrel{\mkern-1.2mu}\approx} - defineMacro("\\Colonapprox", "\\dblcolon\\mathrel{\\mkern-1.2mu}\\approx"); - // \providecommand*\colonsim{\vcentcolon\mathrel{\mkern-1.2mu}\sim} - defineMacro("\\colonsim", "\\vcentcolon\\mathrel{\\mkern-1.2mu}\\sim"); - // \providecommand*\Colonsim{\dblcolon\mathrel{\mkern-1.2mu}\sim} - defineMacro("\\Colonsim", "\\dblcolon\\mathrel{\\mkern-1.2mu}\\sim"); - - ////////////////////////////////////////////////////////////////////// - // colonequals.sty - - // Alternate names for mathtools's macros: - defineMacro("\\ratio", "\\vcentcolon"); - defineMacro("\\coloncolon", "\\dblcolon"); - defineMacro("\\colonequals", "\\coloneqq"); - defineMacro("\\coloncolonequals", "\\Coloneqq"); - defineMacro("\\equalscolon", "\\eqqcolon"); - defineMacro("\\equalscoloncolon", "\\Eqqcolon"); - defineMacro("\\colonminus", "\\coloneq"); - defineMacro("\\coloncolonminus", "\\Coloneq"); - defineMacro("\\minuscolon", "\\eqcolon"); - defineMacro("\\minuscoloncolon", "\\Eqcolon"); - // \colonapprox name is same in mathtools and colonequals. - defineMacro("\\coloncolonapprox", "\\Colonapprox"); - // \colonsim name is same in mathtools and colonequals. - defineMacro("\\coloncolonsim", "\\Colonsim"); - - // Additional macros, implemented by analogy with mathtools definitions: - defineMacro("\\simcolon", "\\sim\\mathrel{\\mkern-1.2mu}\\vcentcolon"); - defineMacro("\\simcoloncolon", "\\sim\\mathrel{\\mkern-1.2mu}\\dblcolon"); - defineMacro("\\approxcolon", "\\approx\\mathrel{\\mkern-1.2mu}\\vcentcolon"); - defineMacro("\\approxcoloncolon", "\\approx\\mathrel{\\mkern-1.2mu}\\dblcolon"); - - },{}],45:[function(require,module,exports){ - - var _classCallCheck2 = require("babel-runtime/helpers/classCallCheck"); - - var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); - - var _createClass2 = require("babel-runtime/helpers/createClass"); - - var _createClass3 = _interopRequireDefault(_createClass2); - - var _utils = require("./utils"); - - var _utils2 = _interopRequireDefault(_utils); - - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - - /** - * This node represents a general purpose MathML node of any type. The - * constructor requires the type of node to create (for example, `"mo"` or - * `"mspace"`, corresponding to `` and `` tags). - */ - var MathNode = function () { - function MathNode(type, children) { - (0, _classCallCheck3.default)(this, MathNode); - - this.type = type; - this.attributes = {}; - this.children = children || []; - } - - /** - * Sets an attribute on a MathML node. MathML depends on attributes to convey a - * semantic content, so this is used heavily. - */ - - - (0, _createClass3.default)(MathNode, [{ - key: "setAttribute", - value: function setAttribute(name, value) { - this.attributes[name] = value; - } - - /** - * Converts the math node into a MathML-namespaced DOM element. - */ - - }, { - key: "toNode", - value: function toNode() { - var node = document.createElementNS("http://www.w3.org/1998/Math/MathML", this.type); - - for (var attr in this.attributes) { - if (Object.prototype.hasOwnProperty.call(this.attributes, attr)) { - node.setAttribute(attr, this.attributes[attr]); - } - } - - for (var i = 0; i < this.children.length; i++) { - node.appendChild(this.children[i].toNode()); - } - - return node; - } - - /** - * Converts the math node into an HTML markup string. - */ - - }, { - key: "toMarkup", - value: function toMarkup() { - var markup = "<" + this.type; - - // Add the attributes - for (var attr in this.attributes) { - if (Object.prototype.hasOwnProperty.call(this.attributes, attr)) { - markup += " " + attr + "=\""; - markup += _utils2.default.escape(this.attributes[attr]); - markup += "\""; - } - } - - markup += ">"; - - for (var i = 0; i < this.children.length; i++) { - markup += this.children[i].toMarkup(); - } - - markup += ""; - - return markup; - } - }]); - return MathNode; - }(); - - /** - * This node represents a piece of text. - */ - /** - * These objects store data about MathML nodes. This is the MathML equivalent - * of the types in domTree.js. Since MathML handles its own rendering, and - * since we're mainly using MathML to improve accessibility, we don't manage - * any of the styling state that the plain DOM nodes do. - * - * The `toNode` and `toMarkup` functions work simlarly to how they do in - * domTree.js, creating namespaced DOM nodes and HTML text markup respectively. - */ - - var TextNode = function () { - function TextNode(text) { - (0, _classCallCheck3.default)(this, TextNode); - - this.text = text; - } - - /** - * Converts the text node into a DOM text node. - */ - - - (0, _createClass3.default)(TextNode, [{ - key: "toNode", - value: function toNode() { - return document.createTextNode(this.text); - } - - /** - * Converts the text node into HTML markup (which is just the text itself). - */ - - }, { - key: "toMarkup", - value: function toMarkup() { - return _utils2.default.escape(this.text); - } - }]); - return TextNode; - }(); - - module.exports = { - MathNode: MathNode, - TextNode: TextNode - }; - - },{"./utils":51,"babel-runtime/helpers/classCallCheck":4,"babel-runtime/helpers/createClass":5}],46:[function(require,module,exports){ - - var _Parser = require('./Parser'); - - var _Parser2 = _interopRequireDefault(_Parser); - - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - - /** - * Parses an expression using a Parser, then returns the parsed result. - */ - var parseTree = function parseTree(toParse, settings) { - if (!(typeof toParse === 'string' || toParse instanceof String)) { - throw new TypeError('KaTeX can only parse string typed expression'); - } - var parser = new _Parser2.default(toParse, settings); - - return parser.parse(); - }; /** - * Provides a single function for parsing an expression using a Parser - * TODO(emily): Remove this - */ - - module.exports = parseTree; - - },{"./Parser":31}],47:[function(require,module,exports){ - - /** - * This file provides support to buildMathML.js and buildHTML.js - * for stretchy wide elements rendered from SVG files - * and other CSS trickery. - */ - - var buildCommon = require("./buildCommon"); - var mathMLTree = require("./mathMLTree"); - var utils = require("./utils"); - - var stretchyCodePoint = { - widehat: "^", - widetilde: "~", - undertilde: "~", - overleftarrow: "\u2190", - underleftarrow: "\u2190", - xleftarrow: "\u2190", - overrightarrow: "\u2192", - underrightarrow: "\u2192", - xrightarrow: "\u2192", - underbrace: "\u23B5", - overbrace: "\u23DE", - overleftrightarrow: "\u2194", - underleftrightarrow: "\u2194", - xleftrightarrow: "\u2194", - Overrightarrow: "\u21D2", - xRightarrow: "\u21D2", - overleftharpoon: "\u21BC", - xleftharpoonup: "\u21BC", - overrightharpoon: "\u21C0", - xrightharpoonup: "\u21C0", - xLeftarrow: "\u21D0", - xLeftrightarrow: "\u21D4", - xhookleftarrow: "\u21A9", - xhookrightarrow: "\u21AA", - xmapsto: "\u21A6", - xrightharpoondown: "\u21C1", - xleftharpoondown: "\u21BD", - xrightleftharpoons: "\u21CC", - xleftrightharpoons: "\u21CB", - xtwoheadleftarrow: "\u219E", - xtwoheadrightarrow: "\u21A0", - xLongequal: "=", - xtofrom: "\u21C4" - }; - - var mathMLnode = function mathMLnode(label) { - var node = new mathMLTree.MathNode("mo", [new mathMLTree.TextNode(stretchyCodePoint[label.substr(1)])]); - node.setAttribute("stretchy", "true"); - return node; - }; - - // In the katexImagesData object just below, the dimensions all - // correspond to path geometry inside the relevant SVG. - // For example, \rightarrow uses the same arrowhead as glyph U+2192 - // from the KaTeX Main font. The scaling factor is 1000. - // That is, inside the font, that arrowhead is 522 units tall, which - // corresponds to 0.522 em inside the document. - // And for extensible arrows, we split that distance around the math axis. - - var katexImagesData = { - // height, depth, imageName, minWidth - overleftarrow: [0.522, 0, "leftarrow", 0.5], - underleftarrow: [0.522, 0, "leftarrow", 0.5], - xleftarrow: [0.261, 0.261, "leftarrow", 0.783], - overrightarrow: [0.522, 0, "rightarrow", 0.5], - underrightarrow: [0.522, 0, "rightarrow", 0.5], - xrightarrow: [0.261, 0.261, "rightarrow", 0.783], - overbrace: [0.548, 0, "overbrace", 1.6], - underbrace: [0.548, 0, "underbrace", 1.6], - overleftrightarrow: [0.522, 0, "leftrightarrow", 0.5], - underleftrightarrow: [0.522, 0, "leftrightarrow", 0.5], - xleftrightarrow: [0.261, 0.261, "leftrightarrow", 0.783], - Overrightarrow: [0.56, 0, "doublerightarrow", 0.5], - xLeftarrow: [0.28, 0.28, "doubleleftarrow", 0.783], - xRightarrow: [0.28, 0.28, "doublerightarrow", 0.783], - xLeftrightarrow: [0.28, 0.28, "doubleleftrightarrow", 0.955], - overleftharpoon: [0.522, 0, "leftharpoon", 0.5], - overrightharpoon: [0.522, 0, "rightharpoon", 0.5], - xleftharpoonup: [0.261, 0.261, "leftharpoon", 0.783], - xrightharpoonup: [0.261, 0.261, "rightharpoon", 0.783], - xhookleftarrow: [0.261, 0.261, "hookleftarrow", 0.87], - xhookrightarrow: [0.261, 0.261, "hookrightarrow", 0.87], - overlinesegment: [0.414, 0, "linesegment", 0.5], - underlinesegment: [0.414, 0, "linesegment", 0.5], - xmapsto: [0.261, 0.261, "mapsto", 0.783], - xrightharpoondown: [0.261, 0.261, "rightharpoondown", 0.783], - xleftharpoondown: [0.261, 0.261, "leftharpoondown", 0.783], - xrightleftharpoons: [0.358, 0.358, "rightleftharpoons", 0.716], - xleftrightharpoons: [0.358, 0.358, "leftrightharpoons", 0.716], - overgroup: [0.342, 0, "overgroup", 0.87], - undergroup: [0.342, 0, "undergroup", 0.87], - xtwoheadleftarrow: [0.167, 0.167, "twoheadleftarrow", 0.86], - xtwoheadrightarrow: [0.167, 0.167, "twoheadrightarrow", 0.86], - xLongequal: [0.167, 0.167, "longequal", 0.5], - xtofrom: [0.264, 0.264, "tofrom", 0.86] - }; - - // Many of the KaTeX SVG images have been adapted from glyphs in KaTeX fonts. - // Copyright (c) 2009-2010, Design Science, Inc. () - // Copyright (c) 2014-2017 Khan Academy () - // Licensed under the SIL Open Font License, Version 1.1. - // See \nhttp://scripts.sil.org/OFL - - // Nested SVGs - // Many of the KaTeX SVG images contain a nested SVG. This is done to - // achieve a stretchy image while avoiding distortion of arrowheads or - // brace corners. - - // The inner SVG typically contains a very long (400 em) arrow. - - // The outer SVG acts like a window that exposes only part of the inner SVG. - // The outer SVG will grow or shrink to match the dimensions set by CSS. - - // The inner SVG always has a longer, thinner aspect ratio than the outer - // SVG. After the inner SVG fills 100% of the height of the outer SVG, - // there is a long arrow shaft left over. That left-over shaft is not shown. - // Instead, it is sliced off because the inner SVG is set to - // "preserveAspectRatio='... slice'". - - // Thus, the reader sees an arrow that matches the subject matter width - // without distortion. - - // Some functions, such as \cancel, need to vary their aspect ratio. These - // functions do not get the nested SVG treatment. - - // Second Brush Stroke - // Low resolution monitors struggle to display images in fine detail. - // So browsers apply anti-aliasing. A long straight arrow shaft therefore - // will sometimes appear as if it has a blurred edge. - - // To mitigate this, these SVG files contain a second "brush-stroke" on the - // arrow shafts. That is, a second long thin rectangular SVG path has been - // written directly on top of each arrow shaft. This reinforcement causes - // some of the screen pixels to display as black instead of the anti-aliased - // gray pixel that a single path would generate. So we get arrow shafts - // whose edges appear to be sharper. - - var svgPath = { - doubleleftarrow: "", - - doublerightarrow: "", - - leftarrow: "", - - rightarrow: "" - }; - - var innerSVG = { - // Since bcancel's SVG is inline and it omits the viewBox attribute, - // it's stroke-width will not vary with span area. - bcancel: "", - - cancel: "", - - // The doubleleftarrow geometry is from glyph U+21D0 in the font KaTeX Main - doubleleftarrow: ">" + svgPath["doubleleftarrow"] + "", - - // doubleleftrightarrow is from glyph U+21D4 in font KaTeX Main - doubleleftrightarrow: ">" + svgPath["doubleleftarrow"] + "\n" + svgPath["doublerightarrow"] + "", - - // doublerightarrow is from glyph U+21D2 in font KaTeX Main - doublerightarrow: ">" + svgPath["doublerightarrow"] + "", - - // hookleftarrow is from glyph U+21A9 in font KaTeX Main - hookleftarrow: ">" + svgPath["leftarrow"] + "\n", - - // hookrightarrow is from glyph U+21AA in font KaTeX Main - hookrightarrow: ">" + svgPath["rightarrow"] + "", - - // leftarrow is from glyph U+2190 in font KaTeX Main - leftarrow: ">" + svgPath["leftarrow"] + "", - - // leftharpoon is from glyph U+21BD in font KaTeX Main - leftharpoon: ">", - - // leftharpoondown is from glyph U+21BD in font KaTeX Main - leftharpoondown: ">", - - // leftrightarrow is from glyph U+2194 in font KaTeX Main - leftrightarrow: ">" + svgPath["leftarrow"] + "\n" + svgPath["rightarrow"] + "", - - // leftrightharpoons is from glyphs U+21BC/21B1 in font KaTeX Main - leftrightharpoons: ">\n", - - linesegment: ">\n", - - longequal: " viewBox='0 0 100 334' preserveAspectRatio='none'>\n", - - // mapsto is from glyph U+21A6 in font KaTeX Main - mapsto: ">" + svgPath["rightarrow"] + "", - - // overbrace is from glyphs U+23A9/23A8/23A7 in font KaTeX_Size4-Regular - overbrace: ">\n", - - // overgroup is from the MnSymbol package (public domain) - overgroup: ">", - - // rightarrow is from glyph U+2192 in font KaTeX Main - rightarrow: ">" + svgPath["rightarrow"] + "", - - // rightharpoon is from glyph U+21C0 in font KaTeX Main - rightharpoon: ">", - - // rightharpoondown is from glyph U+21C1 in font KaTeX Main - rightharpoondown: ">", - - // rightleftharpoons is from glyph U+21CC in font KaTeX Main - rightleftharpoons: ">", - - // tilde1 is a modified version of a glyph from the MnSymbol package - tilde1: " viewBox='0 0 600 260' preserveAspectRatio='none'>\n", - - // Ditto tilde2, tilde3, and tilde 4 - tilde2: " viewBox='0 0 1033 286' preserveAspectRatio='none'>\n", - - tilde3: " viewBox='0 0 2339 306' preserveAspectRatio='none'>\n", - - tilde4: " viewBox='0 0 2340 312' preserveAspectRatio='none'>\n", - - // tofrom is from glyph U+21C4 in font KaTeX AMS Regular - tofrom: ">", - - // twoheadleftarrow is from glyph U+219E in font KaTeX AMS Regular - twoheadleftarrow: ">\n", - - // twoheadrightarrow is from glyph U+21A0 in font KaTeX AMS Regular - twoheadrightarrow: ">\n", - - // underbrace is from glyphs U+23A9/23A8/23A7 in font KaTeX_Size4-Regular - underbrace: ">\n", - - // undergroup is from the MnSymbol package (public domain) - undergroup: ">", - - // widehat1 is a modified version of a glyph from the MnSymbol package - widehat1: " viewBox='0 0 1062 239' preserveAspectRatio='none'>\n", - - // Ditto widehat2, widehat3, and widehat4 - widehat2: " viewBox='0 0 2364 300' preserveAspectRatio='none'>\n", - - widehat3: " viewBox='0 0 2364 360' preserveAspectRatio='none'>\n", - - widehat4: " viewBox='0 0 2364 420' preserveAspectRatio='none'>\n", - - xcancel: "\n" - }; - - var svgSpan = function svgSpan(group, options) { - // Create a span with inline SVG for the element. - var label = group.value.label.substr(1); - var height = 0; - var depth = 0; - var imageName = ""; - var minWidth = 0; - - if (utils.contains(["widehat", "widetilde", "undertilde"], label)) { - // There are four SVG images available for each function. - // Choose a taller image when there are more characters. - var numChars = group.value.value.length; - if (numChars > 5) { - height = 0.312; - imageName = (label === "widehat" ? "widehat" : "tilde") + "4"; - } else { - var imgIndex = [1, 1, 2, 2, 3, 3][numChars]; - if (label === "widehat") { - height = [0, 0.24, 0.30, 0.30, 0.36, 0.36][numChars]; - imageName = "widehat" + imgIndex; - } else { - height = [0, 0.26, 0.30, 0.30, 0.34, 0.34][numChars]; - imageName = "tilde" + imgIndex; - } - } - } else { - var imgData = katexImagesData[label]; - height = imgData[0]; - depth = imgData[1]; - imageName = imgData[2]; - minWidth = imgData[3]; - } - - var span = buildCommon.makeSpan([], [], options); - span.height = height; - span.depth = depth; - var totalHeight = height + depth; - span.style.height = totalHeight + "em"; - if (minWidth > 0) { - span.style.minWidth = minWidth + "em"; - } - - span.innerHTML = ""; - - return span; - }; - - var encloseSpan = function encloseSpan(inner, label, pad, options) { - // Return an image span for \cancel, \bcancel, \xcancel, or \fbox - var img = void 0; - var totalHeight = inner.height + inner.depth + 2 * pad; - - if (label === "fbox") { - img = buildCommon.makeSpan(["stretchy", label], [], options); - if (options.color) { - img.style.borderColor = options.getColor(); - } - } else { - img = buildCommon.makeSpan([], [], options); - img.innerHTML = "" + innerSVG[label] + ""; - } - - img.height = totalHeight; - img.style.height = totalHeight + "em"; - - return img; - }; - - module.exports = { - encloseSpan: encloseSpan, - mathMLnode: mathMLnode, - svgSpan: svgSpan - }; - - },{"./buildCommon":34,"./mathMLTree":45,"./utils":51}],48:[function(require,module,exports){ - - /** - * This file holds a list of all no-argument functions and single-character - * symbols (like 'a' or ';'). - * - * For each of the symbols, there are three properties they can have: - * - font (required): the font to be used for this symbol. Either "main" (the - normal font), or "ams" (the ams fonts). - * - group (required): the ParseNode group type the symbol should have (i.e. - "textord", "mathord", etc). - See https://github.com/Khan/KaTeX/wiki/Examining-TeX#group-types - * - replace: the character that this symbol or function should be - * replaced with (i.e. "\phi" has a replace value of "\u03d5", the phi - * character in the main font). - * - * The outermost map in the table indicates what mode the symbols should be - * accepted in (e.g. "math" or "text"). - */ - - module.exports = { - math: {}, - text: {} - }; - - function defineSymbol(mode, font, group, replace, name, acceptUnicodeChar) { - module.exports[mode][name] = { - font: font, - group: group, - replace: replace - }; - - if (acceptUnicodeChar) { - module.exports[mode][replace] = module.exports[mode][name]; - } - } - - // Some abbreviations for commonly used strings. - // This helps minify the code, and also spotting typos using jshint. - - // modes: - var math = "math"; - var text = "text"; - - // fonts: - var main = "main"; - var ams = "ams"; - - // groups: - var accent = "accent"; - var bin = "bin"; - var close = "close"; - var inner = "inner"; - var mathord = "mathord"; - var op = "op"; - var open = "open"; - var punct = "punct"; - var rel = "rel"; - var spacing = "spacing"; - var textord = "textord"; - - // Now comes the symbol table - - // Relation Symbols - defineSymbol(math, main, rel, "\u2261", "\\equiv"); - defineSymbol(math, main, rel, "\u227A", "\\prec"); - defineSymbol(math, main, rel, "\u227B", "\\succ"); - defineSymbol(math, main, rel, "\u223C", "\\sim"); - defineSymbol(math, main, rel, "\u22A5", "\\perp"); - defineSymbol(math, main, rel, "\u2AAF", "\\preceq"); - defineSymbol(math, main, rel, "\u2AB0", "\\succeq"); - defineSymbol(math, main, rel, "\u2243", "\\simeq"); - defineSymbol(math, main, rel, "\u2223", "\\mid"); - defineSymbol(math, main, rel, "\u226A", "\\ll"); - defineSymbol(math, main, rel, "\u226B", "\\gg"); - defineSymbol(math, main, rel, "\u224D", "\\asymp"); - defineSymbol(math, main, rel, "\u2225", "\\parallel"); - defineSymbol(math, main, rel, "\u22C8", "\\bowtie"); - defineSymbol(math, main, rel, "\u2323", "\\smile"); - defineSymbol(math, main, rel, "\u2291", "\\sqsubseteq"); - defineSymbol(math, main, rel, "\u2292", "\\sqsupseteq"); - defineSymbol(math, main, rel, "\u2250", "\\doteq"); - defineSymbol(math, main, rel, "\u2322", "\\frown"); - defineSymbol(math, main, rel, "\u220B", "\\ni"); - defineSymbol(math, main, rel, "\u221D", "\\propto"); - defineSymbol(math, main, rel, "\u22A2", "\\vdash"); - defineSymbol(math, main, rel, "\u22A3", "\\dashv"); - defineSymbol(math, main, rel, "\u220B", "\\owns"); - - // Punctuation - defineSymbol(math, main, punct, ".", "\\ldotp"); - defineSymbol(math, main, punct, "\u22C5", "\\cdotp"); - - // Misc Symbols - defineSymbol(math, main, textord, "#", "\\#"); - defineSymbol(text, main, textord, "#", "\\#"); - defineSymbol(math, main, textord, "&", "\\&"); - defineSymbol(text, main, textord, "&", "\\&"); - defineSymbol(math, main, textord, "\u2135", "\\aleph"); - defineSymbol(math, main, textord, "\u2200", "\\forall"); - defineSymbol(math, main, textord, "\u210F", "\\hbar"); - defineSymbol(math, main, textord, "\u2203", "\\exists"); - defineSymbol(math, main, textord, "\u2207", "\\nabla"); - defineSymbol(math, main, textord, "\u266D", "\\flat"); - defineSymbol(math, main, textord, "\u2113", "\\ell"); - defineSymbol(math, main, textord, "\u266E", "\\natural"); - defineSymbol(math, main, textord, "\u2663", "\\clubsuit"); - defineSymbol(math, main, textord, "\u2118", "\\wp"); - defineSymbol(math, main, textord, "\u266F", "\\sharp"); - defineSymbol(math, main, textord, "\u2662", "\\diamondsuit"); - defineSymbol(math, main, textord, "\u211C", "\\Re"); - defineSymbol(math, main, textord, "\u2661", "\\heartsuit"); - defineSymbol(math, main, textord, "\u2111", "\\Im"); - defineSymbol(math, main, textord, "\u2660", "\\spadesuit"); - - // Math and Text - defineSymbol(math, main, textord, "\u2020", "\\dag"); - defineSymbol(text, main, textord, "\u2020", "\\dag"); - defineSymbol(text, main, textord, "\u2020", "\\textdagger"); - defineSymbol(math, main, textord, "\u2021", "\\ddag"); - defineSymbol(text, main, textord, "\u2021", "\\ddag"); - defineSymbol(text, main, textord, "\u2020", "\\textdaggerdbl"); - - // Large Delimiters - defineSymbol(math, main, close, "\u23B1", "\\rmoustache"); - defineSymbol(math, main, open, "\u23B0", "\\lmoustache"); - defineSymbol(math, main, close, "\u27EF", "\\rgroup"); - defineSymbol(math, main, open, "\u27EE", "\\lgroup"); - - // Binary Operators - defineSymbol(math, main, bin, "\u2213", "\\mp"); - defineSymbol(math, main, bin, "\u2296", "\\ominus"); - defineSymbol(math, main, bin, "\u228E", "\\uplus"); - defineSymbol(math, main, bin, "\u2293", "\\sqcap"); - defineSymbol(math, main, bin, "\u2217", "\\ast"); - defineSymbol(math, main, bin, "\u2294", "\\sqcup"); - defineSymbol(math, main, bin, "\u25EF", "\\bigcirc"); - defineSymbol(math, main, bin, "\u2219", "\\bullet"); - defineSymbol(math, main, bin, "\u2021", "\\ddagger"); - defineSymbol(math, main, bin, "\u2240", "\\wr"); - defineSymbol(math, main, bin, "\u2A3F", "\\amalg"); - - // Arrow Symbols - defineSymbol(math, main, rel, "\u27F5", "\\longleftarrow"); - defineSymbol(math, main, rel, "\u21D0", "\\Leftarrow"); - defineSymbol(math, main, rel, "\u27F8", "\\Longleftarrow"); - defineSymbol(math, main, rel, "\u27F6", "\\longrightarrow"); - defineSymbol(math, main, rel, "\u21D2", "\\Rightarrow"); - defineSymbol(math, main, rel, "\u27F9", "\\Longrightarrow"); - defineSymbol(math, main, rel, "\u2194", "\\leftrightarrow"); - defineSymbol(math, main, rel, "\u27F7", "\\longleftrightarrow"); - defineSymbol(math, main, rel, "\u21D4", "\\Leftrightarrow"); - defineSymbol(math, main, rel, "\u27FA", "\\Longleftrightarrow"); - defineSymbol(math, main, rel, "\u21A6", "\\mapsto"); - defineSymbol(math, main, rel, "\u27FC", "\\longmapsto"); - defineSymbol(math, main, rel, "\u2197", "\\nearrow"); - defineSymbol(math, main, rel, "\u21A9", "\\hookleftarrow"); - defineSymbol(math, main, rel, "\u21AA", "\\hookrightarrow"); - defineSymbol(math, main, rel, "\u2198", "\\searrow"); - defineSymbol(math, main, rel, "\u21BC", "\\leftharpoonup"); - defineSymbol(math, main, rel, "\u21C0", "\\rightharpoonup"); - defineSymbol(math, main, rel, "\u2199", "\\swarrow"); - defineSymbol(math, main, rel, "\u21BD", "\\leftharpoondown"); - defineSymbol(math, main, rel, "\u21C1", "\\rightharpoondown"); - defineSymbol(math, main, rel, "\u2196", "\\nwarrow"); - defineSymbol(math, main, rel, "\u21CC", "\\rightleftharpoons"); - - // AMS Negated Binary Relations - defineSymbol(math, ams, rel, "\u226E", "\\nless"); - defineSymbol(math, ams, rel, "\uE010", "\\nleqslant"); - defineSymbol(math, ams, rel, "\uE011", "\\nleqq"); - defineSymbol(math, ams, rel, "\u2A87", "\\lneq"); - defineSymbol(math, ams, rel, "\u2268", "\\lneqq"); - defineSymbol(math, ams, rel, "\uE00C", "\\lvertneqq"); - defineSymbol(math, ams, rel, "\u22E6", "\\lnsim"); - defineSymbol(math, ams, rel, "\u2A89", "\\lnapprox"); - defineSymbol(math, ams, rel, "\u2280", "\\nprec"); - defineSymbol(math, ams, rel, "\u22E0", "\\npreceq"); - defineSymbol(math, ams, rel, "\u22E8", "\\precnsim"); - defineSymbol(math, ams, rel, "\u2AB9", "\\precnapprox"); - defineSymbol(math, ams, rel, "\u2241", "\\nsim"); - defineSymbol(math, ams, rel, "\uE006", "\\nshortmid"); - defineSymbol(math, ams, rel, "\u2224", "\\nmid"); - defineSymbol(math, ams, rel, "\u22AC", "\\nvdash"); - defineSymbol(math, ams, rel, "\u22AD", "\\nvDash"); - defineSymbol(math, ams, rel, "\u22EA", "\\ntriangleleft"); - defineSymbol(math, ams, rel, "\u22EC", "\\ntrianglelefteq"); - defineSymbol(math, ams, rel, "\u228A", "\\subsetneq"); - defineSymbol(math, ams, rel, "\uE01A", "\\varsubsetneq"); - defineSymbol(math, ams, rel, "\u2ACB", "\\subsetneqq"); - defineSymbol(math, ams, rel, "\uE017", "\\varsubsetneqq"); - defineSymbol(math, ams, rel, "\u226F", "\\ngtr"); - defineSymbol(math, ams, rel, "\uE00F", "\\ngeqslant"); - defineSymbol(math, ams, rel, "\uE00E", "\\ngeqq"); - defineSymbol(math, ams, rel, "\u2A88", "\\gneq"); - defineSymbol(math, ams, rel, "\u2269", "\\gneqq"); - defineSymbol(math, ams, rel, "\uE00D", "\\gvertneqq"); - defineSymbol(math, ams, rel, "\u22E7", "\\gnsim"); - defineSymbol(math, ams, rel, "\u2A8A", "\\gnapprox"); - defineSymbol(math, ams, rel, "\u2281", "\\nsucc"); - defineSymbol(math, ams, rel, "\u22E1", "\\nsucceq"); - defineSymbol(math, ams, rel, "\u22E9", "\\succnsim"); - defineSymbol(math, ams, rel, "\u2ABA", "\\succnapprox"); - defineSymbol(math, ams, rel, "\u2246", "\\ncong"); - defineSymbol(math, ams, rel, "\uE007", "\\nshortparallel"); - defineSymbol(math, ams, rel, "\u2226", "\\nparallel"); - defineSymbol(math, ams, rel, "\u22AF", "\\nVDash"); - defineSymbol(math, ams, rel, "\u22EB", "\\ntriangleright"); - defineSymbol(math, ams, rel, "\u22ED", "\\ntrianglerighteq"); - defineSymbol(math, ams, rel, "\uE018", "\\nsupseteqq"); - defineSymbol(math, ams, rel, "\u228B", "\\supsetneq"); - defineSymbol(math, ams, rel, "\uE01B", "\\varsupsetneq"); - defineSymbol(math, ams, rel, "\u2ACC", "\\supsetneqq"); - defineSymbol(math, ams, rel, "\uE019", "\\varsupsetneqq"); - defineSymbol(math, ams, rel, "\u22AE", "\\nVdash"); - defineSymbol(math, ams, rel, "\u2AB5", "\\precneqq"); - defineSymbol(math, ams, rel, "\u2AB6", "\\succneqq"); - defineSymbol(math, ams, rel, "\uE016", "\\nsubseteqq"); - defineSymbol(math, ams, bin, "\u22B4", "\\unlhd"); - defineSymbol(math, ams, bin, "\u22B5", "\\unrhd"); - - // AMS Negated Arrows - defineSymbol(math, ams, rel, "\u219A", "\\nleftarrow"); - defineSymbol(math, ams, rel, "\u219B", "\\nrightarrow"); - defineSymbol(math, ams, rel, "\u21CD", "\\nLeftarrow"); - defineSymbol(math, ams, rel, "\u21CF", "\\nRightarrow"); - defineSymbol(math, ams, rel, "\u21AE", "\\nleftrightarrow"); - defineSymbol(math, ams, rel, "\u21CE", "\\nLeftrightarrow"); - - // AMS Misc - defineSymbol(math, ams, rel, "\u25B3", "\\vartriangle"); - defineSymbol(math, ams, textord, "\u210F", "\\hslash"); - defineSymbol(math, ams, textord, "\u25BD", "\\triangledown"); - defineSymbol(math, ams, textord, "\u25CA", "\\lozenge"); - defineSymbol(math, ams, textord, "\u24C8", "\\circledS"); - defineSymbol(math, ams, textord, "\xAE", "\\circledR"); - defineSymbol(text, ams, textord, "\xAE", "\\circledR"); - defineSymbol(math, ams, textord, "\u2221", "\\measuredangle"); - defineSymbol(math, ams, textord, "\u2204", "\\nexists"); - defineSymbol(math, ams, textord, "\u2127", "\\mho"); - defineSymbol(math, ams, textord, "\u2132", "\\Finv"); - defineSymbol(math, ams, textord, "\u2141", "\\Game"); - defineSymbol(math, ams, textord, "k", "\\Bbbk"); - defineSymbol(math, ams, textord, "\u2035", "\\backprime"); - defineSymbol(math, ams, textord, "\u25B2", "\\blacktriangle"); - defineSymbol(math, ams, textord, "\u25BC", "\\blacktriangledown"); - defineSymbol(math, ams, textord, "\u25A0", "\\blacksquare"); - defineSymbol(math, ams, textord, "\u29EB", "\\blacklozenge"); - defineSymbol(math, ams, textord, "\u2605", "\\bigstar"); - defineSymbol(math, ams, textord, "\u2222", "\\sphericalangle"); - defineSymbol(math, ams, textord, "\u2201", "\\complement"); - defineSymbol(math, ams, textord, "\xF0", "\\eth"); - defineSymbol(math, ams, textord, "\u2571", "\\diagup"); - defineSymbol(math, ams, textord, "\u2572", "\\diagdown"); - defineSymbol(math, ams, textord, "\u25A1", "\\square"); - defineSymbol(math, ams, textord, "\u25A1", "\\Box"); - defineSymbol(math, ams, textord, "\u25CA", "\\Diamond"); - defineSymbol(math, ams, textord, "\xA5", "\\yen"); - defineSymbol(math, ams, textord, "\u2713", "\\checkmark"); - defineSymbol(text, ams, textord, "\u2713", "\\checkmark"); - - // AMS Hebrew - defineSymbol(math, ams, textord, "\u2136", "\\beth"); - defineSymbol(math, ams, textord, "\u2138", "\\daleth"); - defineSymbol(math, ams, textord, "\u2137", "\\gimel"); - - // AMS Greek - defineSymbol(math, ams, textord, "\u03DD", "\\digamma"); - defineSymbol(math, ams, textord, "\u03F0", "\\varkappa"); - - // AMS Delimiters - defineSymbol(math, ams, open, "\u250C", "\\ulcorner"); - defineSymbol(math, ams, close, "\u2510", "\\urcorner"); - defineSymbol(math, ams, open, "\u2514", "\\llcorner"); - defineSymbol(math, ams, close, "\u2518", "\\lrcorner"); - - // AMS Binary Relations - defineSymbol(math, ams, rel, "\u2266", "\\leqq"); - defineSymbol(math, ams, rel, "\u2A7D", "\\leqslant"); - defineSymbol(math, ams, rel, "\u2A95", "\\eqslantless"); - defineSymbol(math, ams, rel, "\u2272", "\\lesssim"); - defineSymbol(math, ams, rel, "\u2A85", "\\lessapprox"); - defineSymbol(math, ams, rel, "\u224A", "\\approxeq"); - defineSymbol(math, ams, bin, "\u22D6", "\\lessdot"); - defineSymbol(math, ams, rel, "\u22D8", "\\lll"); - defineSymbol(math, ams, rel, "\u2276", "\\lessgtr"); - defineSymbol(math, ams, rel, "\u22DA", "\\lesseqgtr"); - defineSymbol(math, ams, rel, "\u2A8B", "\\lesseqqgtr"); - defineSymbol(math, ams, rel, "\u2251", "\\doteqdot"); - defineSymbol(math, ams, rel, "\u2253", "\\risingdotseq"); - defineSymbol(math, ams, rel, "\u2252", "\\fallingdotseq"); - defineSymbol(math, ams, rel, "\u223D", "\\backsim"); - defineSymbol(math, ams, rel, "\u22CD", "\\backsimeq"); - defineSymbol(math, ams, rel, "\u2AC5", "\\subseteqq"); - defineSymbol(math, ams, rel, "\u22D0", "\\Subset"); - defineSymbol(math, ams, rel, "\u228F", "\\sqsubset"); - defineSymbol(math, ams, rel, "\u227C", "\\preccurlyeq"); - defineSymbol(math, ams, rel, "\u22DE", "\\curlyeqprec"); - defineSymbol(math, ams, rel, "\u227E", "\\precsim"); - defineSymbol(math, ams, rel, "\u2AB7", "\\precapprox"); - defineSymbol(math, ams, rel, "\u22B2", "\\vartriangleleft"); - defineSymbol(math, ams, rel, "\u22B4", "\\trianglelefteq"); - defineSymbol(math, ams, rel, "\u22A8", "\\vDash"); - defineSymbol(math, ams, rel, "\u22AA", "\\Vvdash"); - defineSymbol(math, ams, rel, "\u2323", "\\smallsmile"); - defineSymbol(math, ams, rel, "\u2322", "\\smallfrown"); - defineSymbol(math, ams, rel, "\u224F", "\\bumpeq"); - defineSymbol(math, ams, rel, "\u224E", "\\Bumpeq"); - defineSymbol(math, ams, rel, "\u2267", "\\geqq"); - defineSymbol(math, ams, rel, "\u2A7E", "\\geqslant"); - defineSymbol(math, ams, rel, "\u2A96", "\\eqslantgtr"); - defineSymbol(math, ams, rel, "\u2273", "\\gtrsim"); - defineSymbol(math, ams, rel, "\u2A86", "\\gtrapprox"); - defineSymbol(math, ams, bin, "\u22D7", "\\gtrdot"); - defineSymbol(math, ams, rel, "\u22D9", "\\ggg"); - defineSymbol(math, ams, rel, "\u2277", "\\gtrless"); - defineSymbol(math, ams, rel, "\u22DB", "\\gtreqless"); - defineSymbol(math, ams, rel, "\u2A8C", "\\gtreqqless"); - defineSymbol(math, ams, rel, "\u2256", "\\eqcirc"); - defineSymbol(math, ams, rel, "\u2257", "\\circeq"); - defineSymbol(math, ams, rel, "\u225C", "\\triangleq"); - defineSymbol(math, ams, rel, "\u223C", "\\thicksim"); - defineSymbol(math, ams, rel, "\u2248", "\\thickapprox"); - defineSymbol(math, ams, rel, "\u2AC6", "\\supseteqq"); - defineSymbol(math, ams, rel, "\u22D1", "\\Supset"); - defineSymbol(math, ams, rel, "\u2290", "\\sqsupset"); - defineSymbol(math, ams, rel, "\u227D", "\\succcurlyeq"); - defineSymbol(math, ams, rel, "\u22DF", "\\curlyeqsucc"); - defineSymbol(math, ams, rel, "\u227F", "\\succsim"); - defineSymbol(math, ams, rel, "\u2AB8", "\\succapprox"); - defineSymbol(math, ams, rel, "\u22B3", "\\vartriangleright"); - defineSymbol(math, ams, rel, "\u22B5", "\\trianglerighteq"); - defineSymbol(math, ams, rel, "\u22A9", "\\Vdash"); - defineSymbol(math, ams, rel, "\u2223", "\\shortmid"); - defineSymbol(math, ams, rel, "\u2225", "\\shortparallel"); - defineSymbol(math, ams, rel, "\u226C", "\\between"); - defineSymbol(math, ams, rel, "\u22D4", "\\pitchfork"); - defineSymbol(math, ams, rel, "\u221D", "\\varpropto"); - defineSymbol(math, ams, rel, "\u25C0", "\\blacktriangleleft"); - defineSymbol(math, ams, rel, "\u2234", "\\therefore"); - defineSymbol(math, ams, rel, "\u220D", "\\backepsilon"); - defineSymbol(math, ams, rel, "\u25B6", "\\blacktriangleright"); - defineSymbol(math, ams, rel, "\u2235", "\\because"); - defineSymbol(math, ams, rel, "\u22D8", "\\llless"); - defineSymbol(math, ams, rel, "\u22D9", "\\gggtr"); - defineSymbol(math, ams, bin, "\u22B2", "\\lhd"); - defineSymbol(math, ams, bin, "\u22B3", "\\rhd"); - defineSymbol(math, ams, rel, "\u2242", "\\eqsim"); - defineSymbol(math, main, rel, "\u22C8", "\\Join"); - defineSymbol(math, ams, rel, "\u2251", "\\Doteq"); - - // AMS Binary Operators - defineSymbol(math, ams, bin, "\u2214", "\\dotplus"); - defineSymbol(math, ams, bin, "\u2216", "\\smallsetminus"); - defineSymbol(math, ams, bin, "\u22D2", "\\Cap"); - defineSymbol(math, ams, bin, "\u22D3", "\\Cup"); - defineSymbol(math, ams, bin, "\u2A5E", "\\doublebarwedge"); - defineSymbol(math, ams, bin, "\u229F", "\\boxminus"); - defineSymbol(math, ams, bin, "\u229E", "\\boxplus"); - defineSymbol(math, ams, bin, "\u22C7", "\\divideontimes"); - defineSymbol(math, ams, bin, "\u22C9", "\\ltimes"); - defineSymbol(math, ams, bin, "\u22CA", "\\rtimes"); - defineSymbol(math, ams, bin, "\u22CB", "\\leftthreetimes"); - defineSymbol(math, ams, bin, "\u22CC", "\\rightthreetimes"); - defineSymbol(math, ams, bin, "\u22CF", "\\curlywedge"); - defineSymbol(math, ams, bin, "\u22CE", "\\curlyvee"); - defineSymbol(math, ams, bin, "\u229D", "\\circleddash"); - defineSymbol(math, ams, bin, "\u229B", "\\circledast"); - defineSymbol(math, ams, bin, "\u22C5", "\\centerdot"); - defineSymbol(math, ams, bin, "\u22BA", "\\intercal"); - defineSymbol(math, ams, bin, "\u22D2", "\\doublecap"); - defineSymbol(math, ams, bin, "\u22D3", "\\doublecup"); - defineSymbol(math, ams, bin, "\u22A0", "\\boxtimes"); - - // AMS Arrows - defineSymbol(math, ams, rel, "\u21E2", "\\dashrightarrow"); - defineSymbol(math, ams, rel, "\u21E0", "\\dashleftarrow"); - defineSymbol(math, ams, rel, "\u21C7", "\\leftleftarrows"); - defineSymbol(math, ams, rel, "\u21C6", "\\leftrightarrows"); - defineSymbol(math, ams, rel, "\u21DA", "\\Lleftarrow"); - defineSymbol(math, ams, rel, "\u219E", "\\twoheadleftarrow"); - defineSymbol(math, ams, rel, "\u21A2", "\\leftarrowtail"); - defineSymbol(math, ams, rel, "\u21AB", "\\looparrowleft"); - defineSymbol(math, ams, rel, "\u21CB", "\\leftrightharpoons"); - defineSymbol(math, ams, rel, "\u21B6", "\\curvearrowleft"); - defineSymbol(math, ams, rel, "\u21BA", "\\circlearrowleft"); - defineSymbol(math, ams, rel, "\u21B0", "\\Lsh"); - defineSymbol(math, ams, rel, "\u21C8", "\\upuparrows"); - defineSymbol(math, ams, rel, "\u21BF", "\\upharpoonleft"); - defineSymbol(math, ams, rel, "\u21C3", "\\downharpoonleft"); - defineSymbol(math, ams, rel, "\u22B8", "\\multimap"); - defineSymbol(math, ams, rel, "\u21AD", "\\leftrightsquigarrow"); - defineSymbol(math, ams, rel, "\u21C9", "\\rightrightarrows"); - defineSymbol(math, ams, rel, "\u21C4", "\\rightleftarrows"); - defineSymbol(math, ams, rel, "\u21A0", "\\twoheadrightarrow"); - defineSymbol(math, ams, rel, "\u21A3", "\\rightarrowtail"); - defineSymbol(math, ams, rel, "\u21AC", "\\looparrowright"); - defineSymbol(math, ams, rel, "\u21B7", "\\curvearrowright"); - defineSymbol(math, ams, rel, "\u21BB", "\\circlearrowright"); - defineSymbol(math, ams, rel, "\u21B1", "\\Rsh"); - defineSymbol(math, ams, rel, "\u21CA", "\\downdownarrows"); - defineSymbol(math, ams, rel, "\u21BE", "\\upharpoonright"); - defineSymbol(math, ams, rel, "\u21C2", "\\downharpoonright"); - defineSymbol(math, ams, rel, "\u21DD", "\\rightsquigarrow"); - defineSymbol(math, ams, rel, "\u21DD", "\\leadsto"); - defineSymbol(math, ams, rel, "\u21DB", "\\Rrightarrow"); - defineSymbol(math, ams, rel, "\u21BE", "\\restriction"); - - defineSymbol(math, main, textord, "\u2018", "`"); - defineSymbol(math, main, textord, "$", "\\$"); - defineSymbol(text, main, textord, "$", "\\$"); - defineSymbol(text, main, textord, "$", "\\textdollar"); - defineSymbol(math, main, textord, "%", "\\%"); - defineSymbol(text, main, textord, "%", "\\%"); - defineSymbol(math, main, textord, "_", "\\_"); - defineSymbol(text, main, textord, "_", "\\_"); - defineSymbol(text, main, textord, "_", "\\textunderscore"); - defineSymbol(math, main, textord, "\u2220", "\\angle"); - defineSymbol(math, main, textord, "\u221E", "\\infty"); - defineSymbol(math, main, textord, "\u2032", "\\prime"); - defineSymbol(math, main, textord, "\u25B3", "\\triangle"); - defineSymbol(math, main, textord, "\u0393", "\\Gamma", true); - defineSymbol(math, main, textord, "\u0394", "\\Delta", true); - defineSymbol(math, main, textord, "\u0398", "\\Theta", true); - defineSymbol(math, main, textord, "\u039B", "\\Lambda", true); - defineSymbol(math, main, textord, "\u039E", "\\Xi", true); - defineSymbol(math, main, textord, "\u03A0", "\\Pi", true); - defineSymbol(math, main, textord, "\u03A3", "\\Sigma", true); - defineSymbol(math, main, textord, "\u03A5", "\\Upsilon", true); - defineSymbol(math, main, textord, "\u03A6", "\\Phi", true); - defineSymbol(math, main, textord, "\u03A8", "\\Psi", true); - defineSymbol(math, main, textord, "\u03A9", "\\Omega", true); - defineSymbol(math, main, textord, "\xAC", "\\neg"); - defineSymbol(math, main, textord, "\xAC", "\\lnot"); - defineSymbol(math, main, textord, "\u22A4", "\\top"); - defineSymbol(math, main, textord, "\u22A5", "\\bot"); - defineSymbol(math, main, textord, "\u2205", "\\emptyset"); - defineSymbol(math, ams, textord, "\u2205", "\\varnothing"); - defineSymbol(math, main, mathord, "\u03B1", "\\alpha", true); - defineSymbol(math, main, mathord, "\u03B2", "\\beta", true); - defineSymbol(math, main, mathord, "\u03B3", "\\gamma", true); - defineSymbol(math, main, mathord, "\u03B4", "\\delta", true); - defineSymbol(math, main, mathord, "\u03F5", "\\epsilon", true); - defineSymbol(math, main, mathord, "\u03B6", "\\zeta", true); - defineSymbol(math, main, mathord, "\u03B7", "\\eta", true); - defineSymbol(math, main, mathord, "\u03B8", "\\theta", true); - defineSymbol(math, main, mathord, "\u03B9", "\\iota", true); - defineSymbol(math, main, mathord, "\u03BA", "\\kappa", true); - defineSymbol(math, main, mathord, "\u03BB", "\\lambda", true); - defineSymbol(math, main, mathord, "\u03BC", "\\mu", true); - defineSymbol(math, main, mathord, "\u03BD", "\\nu", true); - defineSymbol(math, main, mathord, "\u03BE", "\\xi", true); - defineSymbol(math, main, mathord, "\u03BF", "\\omicron", true); - defineSymbol(math, main, mathord, "\u03C0", "\\pi", true); - defineSymbol(math, main, mathord, "\u03C1", "\\rho", true); - defineSymbol(math, main, mathord, "\u03C3", "\\sigma", true); - defineSymbol(math, main, mathord, "\u03C4", "\\tau", true); - defineSymbol(math, main, mathord, "\u03C5", "\\upsilon", true); - defineSymbol(math, main, mathord, "\u03D5", "\\phi", true); - defineSymbol(math, main, mathord, "\u03C7", "\\chi", true); - defineSymbol(math, main, mathord, "\u03C8", "\\psi", true); - defineSymbol(math, main, mathord, "\u03C9", "\\omega", true); - defineSymbol(math, main, mathord, "\u03B5", "\\varepsilon", true); - defineSymbol(math, main, mathord, "\u03D1", "\\vartheta", true); - defineSymbol(math, main, mathord, "\u03D6", "\\varpi", true); - defineSymbol(math, main, mathord, "\u03F1", "\\varrho", true); - defineSymbol(math, main, mathord, "\u03C2", "\\varsigma", true); - defineSymbol(math, main, mathord, "\u03C6", "\\varphi", true); - defineSymbol(math, main, bin, "\u2217", "*"); - defineSymbol(math, main, bin, "+", "+"); - defineSymbol(math, main, bin, "\u2212", "-"); - defineSymbol(math, main, bin, "\u22C5", "\\cdot"); - defineSymbol(math, main, bin, "\u2218", "\\circ"); - defineSymbol(math, main, bin, "\xF7", "\\div"); - defineSymbol(math, main, bin, "\xB1", "\\pm"); - defineSymbol(math, main, bin, "\xD7", "\\times"); - defineSymbol(math, main, bin, "\u2229", "\\cap"); - defineSymbol(math, main, bin, "\u222A", "\\cup"); - defineSymbol(math, main, bin, "\u2216", "\\setminus"); - defineSymbol(math, main, bin, "\u2227", "\\land"); - defineSymbol(math, main, bin, "\u2228", "\\lor"); - defineSymbol(math, main, bin, "\u2227", "\\wedge"); - defineSymbol(math, main, bin, "\u2228", "\\vee"); - defineSymbol(math, main, textord, "\u221A", "\\surd"); - defineSymbol(math, main, open, "(", "("); - defineSymbol(math, main, open, "[", "["); - defineSymbol(math, main, open, "\u27E8", "\\langle"); - defineSymbol(math, main, open, "\u2223", "\\lvert"); - defineSymbol(math, main, open, "\u2225", "\\lVert"); - defineSymbol(math, main, close, ")", ")"); - defineSymbol(math, main, close, "]", "]"); - defineSymbol(math, main, close, "?", "?"); - defineSymbol(math, main, close, "!", "!"); - defineSymbol(math, main, close, "\u27E9", "\\rangle"); - defineSymbol(math, main, close, "\u2223", "\\rvert"); - defineSymbol(math, main, close, "\u2225", "\\rVert"); - defineSymbol(math, main, rel, "=", "="); - defineSymbol(math, main, rel, "<", "<"); - defineSymbol(math, main, rel, ">", ">"); - defineSymbol(math, main, rel, ":", ":"); - defineSymbol(math, main, rel, "\u2248", "\\approx"); - defineSymbol(math, main, rel, "\u2245", "\\cong"); - defineSymbol(math, main, rel, "\u2265", "\\ge"); - defineSymbol(math, main, rel, "\u2265", "\\geq"); - defineSymbol(math, main, rel, "\u2190", "\\gets"); - defineSymbol(math, main, rel, ">", "\\gt"); - defineSymbol(math, main, rel, "\u2208", "\\in"); - defineSymbol(math, main, rel, "\u2209", "\\notin"); - defineSymbol(math, main, rel, "\u0338", "\\not"); - defineSymbol(math, main, rel, "\u2282", "\\subset"); - defineSymbol(math, main, rel, "\u2283", "\\supset"); - defineSymbol(math, main, rel, "\u2286", "\\subseteq"); - defineSymbol(math, main, rel, "\u2287", "\\supseteq"); - defineSymbol(math, ams, rel, "\u2288", "\\nsubseteq"); - defineSymbol(math, ams, rel, "\u2289", "\\nsupseteq"); - defineSymbol(math, main, rel, "\u22A8", "\\models"); - defineSymbol(math, main, rel, "\u2190", "\\leftarrow"); - defineSymbol(math, main, rel, "\u2264", "\\le"); - defineSymbol(math, main, rel, "\u2264", "\\leq"); - defineSymbol(math, main, rel, "<", "\\lt"); - defineSymbol(math, main, rel, "\u2260", "\\ne"); - defineSymbol(math, main, rel, "\u2260", "\\neq"); - defineSymbol(math, main, rel, "\u2192", "\\rightarrow"); - defineSymbol(math, main, rel, "\u2192", "\\to"); - defineSymbol(math, ams, rel, "\u2271", "\\ngeq"); - defineSymbol(math, ams, rel, "\u2270", "\\nleq"); - defineSymbol(math, main, spacing, null, "\\!"); - defineSymbol(math, main, spacing, "\xA0", "\\ "); - defineSymbol(math, main, spacing, "\xA0", "~"); - defineSymbol(math, main, spacing, null, "\\,"); - defineSymbol(math, main, spacing, null, "\\:"); - defineSymbol(math, main, spacing, null, "\\;"); - defineSymbol(math, main, spacing, null, "\\enspace"); - defineSymbol(math, main, spacing, null, "\\qquad"); - defineSymbol(math, main, spacing, null, "\\quad"); - defineSymbol(math, main, spacing, "\xA0", "\\space"); - defineSymbol(math, main, punct, ",", ","); - defineSymbol(math, main, punct, ";", ";"); - defineSymbol(math, main, punct, ":", "\\colon"); - defineSymbol(math, ams, bin, "\u22BC", "\\barwedge"); - defineSymbol(math, ams, bin, "\u22BB", "\\veebar"); - defineSymbol(math, main, bin, "\u2299", "\\odot"); - defineSymbol(math, main, bin, "\u2295", "\\oplus"); - defineSymbol(math, main, bin, "\u2297", "\\otimes"); - defineSymbol(math, main, textord, "\u2202", "\\partial"); - defineSymbol(math, main, bin, "\u2298", "\\oslash"); - defineSymbol(math, ams, bin, "\u229A", "\\circledcirc"); - defineSymbol(math, ams, bin, "\u22A1", "\\boxdot"); - defineSymbol(math, main, bin, "\u25B3", "\\bigtriangleup"); - defineSymbol(math, main, bin, "\u25BD", "\\bigtriangledown"); - defineSymbol(math, main, bin, "\u2020", "\\dagger"); - defineSymbol(math, main, bin, "\u22C4", "\\diamond"); - defineSymbol(math, main, bin, "\u22C6", "\\star"); - defineSymbol(math, main, bin, "\u25C3", "\\triangleleft"); - defineSymbol(math, main, bin, "\u25B9", "\\triangleright"); - defineSymbol(math, main, open, "{", "\\{"); - defineSymbol(text, main, textord, "{", "\\{"); - defineSymbol(text, main, textord, "{", "\\textbraceleft"); - defineSymbol(math, main, close, "}", "\\}"); - defineSymbol(text, main, textord, "}", "\\}"); - defineSymbol(text, main, textord, "}", "\\textbraceright"); - defineSymbol(math, main, open, "{", "\\lbrace"); - defineSymbol(math, main, close, "}", "\\rbrace"); - defineSymbol(math, main, open, "[", "\\lbrack"); - defineSymbol(math, main, close, "]", "\\rbrack"); - defineSymbol(text, main, textord, "<", "\\textless"); // in T1 fontenc - defineSymbol(text, main, textord, ">", "\\textgreater"); // in T1 fontenc - defineSymbol(math, main, open, "\u230A", "\\lfloor"); - defineSymbol(math, main, close, "\u230B", "\\rfloor"); - defineSymbol(math, main, open, "\u2308", "\\lceil"); - defineSymbol(math, main, close, "\u2309", "\\rceil"); - defineSymbol(math, main, textord, "\\", "\\backslash"); - defineSymbol(math, main, textord, "\u2223", "|"); - defineSymbol(math, main, textord, "\u2223", "\\vert"); - defineSymbol(text, main, textord, "|", "\\textbar"); // in T1 fontenc - defineSymbol(math, main, textord, "\u2225", "\\|"); - defineSymbol(math, main, textord, "\u2225", "\\Vert"); - defineSymbol(text, main, textord, "\u2225", "\\textbardbl"); - defineSymbol(math, main, rel, "\u2191", "\\uparrow"); - defineSymbol(math, main, rel, "\u21D1", "\\Uparrow"); - defineSymbol(math, main, rel, "\u2193", "\\downarrow"); - defineSymbol(math, main, rel, "\u21D3", "\\Downarrow"); - defineSymbol(math, main, rel, "\u2195", "\\updownarrow"); - defineSymbol(math, main, rel, "\u21D5", "\\Updownarrow"); - defineSymbol(math, main, op, "\u2210", "\\coprod"); - defineSymbol(math, main, op, "\u22C1", "\\bigvee"); - defineSymbol(math, main, op, "\u22C0", "\\bigwedge"); - defineSymbol(math, main, op, "\u2A04", "\\biguplus"); - defineSymbol(math, main, op, "\u22C2", "\\bigcap"); - defineSymbol(math, main, op, "\u22C3", "\\bigcup"); - defineSymbol(math, main, op, "\u222B", "\\int"); - defineSymbol(math, main, op, "\u222B", "\\intop"); - defineSymbol(math, main, op, "\u222C", "\\iint"); - defineSymbol(math, main, op, "\u222D", "\\iiint"); - defineSymbol(math, main, op, "\u220F", "\\prod"); - defineSymbol(math, main, op, "\u2211", "\\sum"); - defineSymbol(math, main, op, "\u2A02", "\\bigotimes"); - defineSymbol(math, main, op, "\u2A01", "\\bigoplus"); - defineSymbol(math, main, op, "\u2A00", "\\bigodot"); - defineSymbol(math, main, op, "\u222E", "\\oint"); - defineSymbol(math, main, op, "\u2A06", "\\bigsqcup"); - defineSymbol(math, main, op, "\u222B", "\\smallint"); - defineSymbol(text, main, inner, "\u2026", "\\textellipsis"); - defineSymbol(math, main, inner, "\u2026", "\\mathellipsis"); - defineSymbol(text, main, inner, "\u2026", "\\ldots", true); - defineSymbol(math, main, inner, "\u2026", "\\ldots", true); - defineSymbol(math, main, inner, "\u22EF", "\\cdots", true); - defineSymbol(math, main, inner, "\u22F1", "\\ddots", true); - defineSymbol(math, main, textord, "\u22EE", "\\vdots", true); - defineSymbol(math, main, accent, "\xB4", "\\acute"); - defineSymbol(math, main, accent, "`", "\\grave"); - defineSymbol(math, main, accent, "\xA8", "\\ddot"); - defineSymbol(math, main, accent, "~", "\\tilde"); - defineSymbol(math, main, accent, "\xAF", "\\bar"); - defineSymbol(math, main, accent, "\u02D8", "\\breve"); - defineSymbol(math, main, accent, "\u02C7", "\\check"); - defineSymbol(math, main, accent, "^", "\\hat"); - defineSymbol(math, main, accent, "\u20D7", "\\vec"); - defineSymbol(math, main, accent, "\u02D9", "\\dot"); - defineSymbol(math, main, mathord, "\u0131", "\\imath"); - defineSymbol(math, main, mathord, "\u0237", "\\jmath"); - defineSymbol(text, main, accent, "\u02CA", "\\'"); // acute - defineSymbol(text, main, accent, "\u02CB", "\\`"); // grave - defineSymbol(text, main, accent, "\u02C6", "\\^"); // circumflex - defineSymbol(text, main, accent, "\u02DC", "\\~"); // tilde - defineSymbol(text, main, accent, "\u02C9", "\\="); // macron - defineSymbol(text, main, accent, "\u02D8", "\\u"); // breve - defineSymbol(text, main, accent, "\u02D9", "\\."); // dot above - defineSymbol(text, main, accent, "\u02DA", "\\r"); // ring above - defineSymbol(text, main, accent, "\u02C7", "\\v"); // caron - defineSymbol(text, main, accent, "\xA8", '\\"'); // diaresis - defineSymbol(text, main, accent, "\u030B", "\\H"); // double acute - - defineSymbol(text, main, textord, "\u2013", "--"); - defineSymbol(text, main, textord, "\u2013", "\\textendash"); - defineSymbol(text, main, textord, "\u2014", "---"); - defineSymbol(text, main, textord, "\u2014", "\\textemdash"); - defineSymbol(text, main, textord, "\u2018", "`"); - defineSymbol(text, main, textord, "\u2018", "\\textquoteleft"); - defineSymbol(text, main, textord, "\u2019", "'"); - defineSymbol(text, main, textord, "\u2019", "\\textquoteright"); - defineSymbol(text, main, textord, "\u201C", "``"); - defineSymbol(text, main, textord, "\u201C", "\\textquotedblleft"); - defineSymbol(text, main, textord, "\u201D", "''"); - defineSymbol(text, main, textord, "\u201D", "\\textquotedblright"); - defineSymbol(math, main, textord, "\xB0", "\\degree"); - defineSymbol(text, main, textord, "\xB0", "\\degree"); - // TODO: In LaTeX, \pounds can generate a different character in text and math - // mode, but among our fonts, only Main-Italic defines this character "163". - defineSymbol(math, main, mathord, "\xA3", "\\pounds"); - defineSymbol(math, main, mathord, "\xA3", "\\mathsterling"); - defineSymbol(text, main, mathord, "\xA3", "\\pounds"); - defineSymbol(text, main, mathord, "\xA3", "\\textsterling"); - defineSymbol(math, ams, textord, "\u2720", "\\maltese"); - defineSymbol(text, ams, textord, "\u2720", "\\maltese"); - - defineSymbol(text, main, spacing, "\xA0", "\\ "); - defineSymbol(text, main, spacing, "\xA0", " "); - defineSymbol(text, main, spacing, "\xA0", "~"); - - // There are lots of symbols which are the same, so we add them in afterwards. - - // All of these are textords in math mode - var mathTextSymbols = "0123456789/@.\""; - for (var i = 0; i < mathTextSymbols.length; i++) { - var ch = mathTextSymbols.charAt(i); - defineSymbol(math, main, textord, ch, ch); - } - - // All of these are textords in text mode - var textSymbols = "0123456789!@*()-=+[]<>|\";:?/.,"; - for (var _i = 0; _i < textSymbols.length; _i++) { - var _ch = textSymbols.charAt(_i); - defineSymbol(text, main, textord, _ch, _ch); - } - - // All of these are textords in text mode, and mathords in math mode - var letters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; - for (var _i2 = 0; _i2 < letters.length; _i2++) { - var _ch2 = letters.charAt(_i2); - defineSymbol(math, main, mathord, _ch2, _ch2); - defineSymbol(text, main, textord, _ch2, _ch2); - } - - // Latin-1 letters - for (var _i3 = 0x00C0; _i3 <= 0x00D6; _i3++) { - var _ch3 = String.fromCharCode(_i3); - defineSymbol(math, main, mathord, _ch3, _ch3); - defineSymbol(text, main, textord, _ch3, _ch3); - } - - for (var _i4 = 0x00D8; _i4 <= 0x00F6; _i4++) { - var _ch4 = String.fromCharCode(_i4); - defineSymbol(math, main, mathord, _ch4, _ch4); - defineSymbol(text, main, textord, _ch4, _ch4); - } - - for (var _i5 = 0x00F8; _i5 <= 0x00FF; _i5++) { - var _ch5 = String.fromCharCode(_i5); - defineSymbol(math, main, mathord, _ch5, _ch5); - defineSymbol(text, main, textord, _ch5, _ch5); - } - - // Cyrillic - for (var _i6 = 0x0410; _i6 <= 0x044F; _i6++) { - var _ch6 = String.fromCharCode(_i6); - defineSymbol(text, main, textord, _ch6, _ch6); - } - - // Unicode versions of existing characters - defineSymbol(text, main, textord, "\u2013", "–"); - defineSymbol(text, main, textord, "\u2014", "—"); - defineSymbol(text, main, textord, "\u2018", "‘"); - defineSymbol(text, main, textord, "\u2019", "’"); - defineSymbol(text, main, textord, "\u201C", "“"); - defineSymbol(text, main, textord, "\u201D", "”"); - - },{}],49:[function(require,module,exports){ - - var hangulRegex = /[\uAC00-\uD7AF]/; - - // This regex combines - // - CJK symbols and punctuation: [\u3000-\u303F] - // - Hiragana: [\u3040-\u309F] - // - Katakana: [\u30A0-\u30FF] - // - CJK ideograms: [\u4E00-\u9FAF] - // - Hangul syllables: [\uAC00-\uD7AF] - // - Fullwidth punctuation: [\uFF00-\uFF60] - // Notably missing are halfwidth Katakana and Romanji glyphs. - var cjkRegex = /[\u3000-\u30FF\u4E00-\u9FAF\uAC00-\uD7AF\uFF00-\uFF60]/; - - module.exports = { - cjkRegex: cjkRegex, - hangulRegex: hangulRegex - }; - - },{}],50:[function(require,module,exports){ - - var _ParseError = require("./ParseError"); - - var _ParseError2 = _interopRequireDefault(_ParseError); - - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - - // This table gives the number of TeX pts in one of each *absolute* TeX unit. - // Thus, multiplying a length by this number converts the length from units - // into pts. Dividing the result by ptPerEm gives the number of ems - // *assuming* a font size of ptPerEm (normal size, normal style). - var ptPerUnit = { - // https://en.wikibooks.org/wiki/LaTeX/Lengths and - // https://tex.stackexchange.com/a/8263 - "pt": 1, // TeX point - "mm": 7227 / 2540, // millimeter - "cm": 7227 / 254, // centimeter - "in": 72.27, // inch - "bp": 803 / 800, // big (PostScript) points - "pc": 12, // pica - "dd": 1238 / 1157, // didot - "cc": 14856 / 1157, // cicero (12 didot) - "nd": 685 / 642, // new didot - "nc": 1370 / 107, // new cicero (12 new didot) - "sp": 1 / 65536, // scaled point (TeX's internal smallest unit) - // https://tex.stackexchange.com/a/41371 - "px": 803 / 800 }; - - // Dictionary of relative units, for fast validity testing. - /* eslint no-console:0 */ - - /** - * This file does conversion between units. In particular, it provides - * calculateSize to convert other units into ems. - */ - - var relativeUnit = { - "ex": true, - "em": true, - "mu": true - }; - - /** - * Determine whether the specified unit (either a string defining the unit - * or a "size" parse node containing a unit field) is valid. - */ - var validUnit = function validUnit(unit) { - if (unit.unit) { - unit = unit.unit; - } - return unit in ptPerUnit || unit in relativeUnit || unit === "ex"; - }; - - /* - * Convert a "size" parse node (with numeric "number" and string "unit" fields, - * as parsed by functions.js argType "size") into a CSS em value for the - * current style/scale. `options` gives the current options. - */ - var calculateSize = function calculateSize(sizeValue, options) { - var scale = void 0; - if (sizeValue.unit in ptPerUnit) { - // Absolute units - scale = ptPerUnit[sizeValue.unit] // Convert unit to pt - / options.fontMetrics().ptPerEm // Convert pt to CSS em - / options.sizeMultiplier; // Unscale to make absolute units - } else if (sizeValue.unit === "mu") { - // `mu` units scale with scriptstyle/scriptscriptstyle. - scale = options.fontMetrics().cssEmPerMu; - } else { - // Other relative units always refer to the *textstyle* font - // in the current size. - var unitOptions = void 0; - if (options.style.isTight()) { - // isTight() means current style is script/scriptscript. - unitOptions = options.havingStyle(options.style.text()); - } else { - unitOptions = options; - } - // TODO: In TeX these units are relative to the quad of the current - // *text* font, e.g. cmr10. KaTeX instead uses values from the - // comparably-sized *Computer Modern symbol* font. At 10pt, these - // match. At 7pt and 5pt, they differ: cmr7=1.138894, cmsy7=1.170641; - // cmr5=1.361133, cmsy5=1.472241. Consider $\scriptsize a\kern1emb$. - // TeX \showlists shows a kern of 1.13889 * fontsize; - // KaTeX shows a kern of 1.171 * fontsize. - if (sizeValue.unit === "ex") { - scale = unitOptions.fontMetrics().xHeight; - } else if (sizeValue.unit === "em") { - scale = unitOptions.fontMetrics().quad; - } else { - throw new _ParseError2.default("Invalid unit: '" + sizeValue.unit + "'"); - } - if (unitOptions !== options) { - scale *= unitOptions.sizeMultiplier / options.sizeMultiplier; - } - } - return sizeValue.number * scale; - }; - - module.exports = { - validUnit: validUnit, - calculateSize: calculateSize - }; - - },{"./ParseError":29}],51:[function(require,module,exports){ - - /** - * This file contains a list of utility functions which are useful in other - * files. - */ - - /** - * Provide an `indexOf` function which works in IE8, but defers to native if - * possible. - */ - var nativeIndexOf = Array.prototype.indexOf; - var indexOf = function indexOf(list, elem) { - if (list == null) { - return -1; - } - if (nativeIndexOf && list.indexOf === nativeIndexOf) { - return list.indexOf(elem); - } - var l = list.length; - for (var i = 0; i < l; i++) { - if (list[i] === elem) { - return i; - } - } - return -1; - }; - - /** - * Return whether an element is contained in a list - */ - var contains = function contains(list, elem) { - return indexOf(list, elem) !== -1; - }; - - /** - * Provide a default value if a setting is undefined - */ - var deflt = function deflt(setting, defaultIfUndefined) { - return setting === undefined ? defaultIfUndefined : setting; - }; - - // hyphenate and escape adapted from Facebook's React under Apache 2 license - - var uppercase = /([A-Z])/g; - var hyphenate = function hyphenate(str) { - return str.replace(uppercase, "-$1").toLowerCase(); - }; - - var ESCAPE_LOOKUP = { - "&": "&", - ">": ">", - "<": "<", - "\"": """, - "'": "'" - }; - - var ESCAPE_REGEX = /[&><"']/g; - - function escaper(match) { - return ESCAPE_LOOKUP[match]; - } - - /** - * Escapes text to prevent scripting attacks. - * - * @param {*} text Text value to escape. - * @return {string} An escaped string. - */ - function escape(text) { - return ("" + text).replace(ESCAPE_REGEX, escaper); - } - - /** - * A function to set the text content of a DOM element in all supported - * browsers. Note that we don't define this if there is no document. - */ - var setTextContent = void 0; - if (typeof document !== "undefined") { - var testNode = document.createElement("span"); - if ("textContent" in testNode) { - setTextContent = function setTextContent(node, text) { - node.textContent = text; - }; - } else { - setTextContent = function setTextContent(node, text) { - node.innerText = text; - }; - } - } - - /** - * A function to clear a node. - */ - function clearNode(node) { - setTextContent(node, ""); - } - - module.exports = { - contains: contains, - deflt: deflt, - escape: escape, - hyphenate: hyphenate, - indexOf: indexOf, - setTextContent: setTextContent, - clearNode: clearNode - }; - - },{}]},{},[1])(1) - }); - }); - - var katex$2 = unwrapExports(katex$1); - - // Copyright 2018 The Distill Template Authors - // - // Licensed under the Apache License, Version 2.0 (the "License"); - // you may not use this file except in compliance with the License. - // You may obtain a copy of the License at - // - // http://www.apache.org/licenses/LICENSE-2.0 - // - // Unless required by applicable law or agreed to in writing, software - // distributed under the License is distributed on an "AS IS" BASIS, - // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - // See the License for the specific language governing permissions and - // limitations under the License. - - // This is a straight concatenation of code from KaTeX's contrib folder, - // but we aren't using some of their helpers that don't work well outside a browser environment. - - /*global katex */ - - const findEndOfMath = function(delimiter, text, startIndex) { - // Adapted from - // https://github.com/Khan/perseus/blob/master/src/perseus-markdown.jsx - let index = startIndex; - let braceLevel = 0; - - const delimLength = delimiter.length; - - while (index < text.length) { - const character = text[index]; - - if ( - braceLevel <= 0 && - text.slice(index, index + delimLength) === delimiter - ) { - return index; - } else if (character === "\\") { - index++; - } else if (character === "{") { - braceLevel++; - } else if (character === "}") { - braceLevel--; - } - - index++; - } - - return -1; - }; - - const splitAtDelimiters = function(startData, leftDelim, rightDelim, display) { - const finalData = []; - - for (let i = 0; i < startData.length; i++) { - if (startData[i].type === "text") { - const text = startData[i].data; - - let lookingForLeft = true; - let currIndex = 0; - let nextIndex; - - nextIndex = text.indexOf(leftDelim); - if (nextIndex !== -1) { - currIndex = nextIndex; - finalData.push({ - type: "text", - data: text.slice(0, currIndex) - }); - lookingForLeft = false; - } - - while (true) { - // eslint-disable-line no-constant-condition - if (lookingForLeft) { - nextIndex = text.indexOf(leftDelim, currIndex); - if (nextIndex === -1) { - break; - } - - finalData.push({ - type: "text", - data: text.slice(currIndex, nextIndex) - }); - - currIndex = nextIndex; - } else { - nextIndex = findEndOfMath( - rightDelim, - text, - currIndex + leftDelim.length - ); - if (nextIndex === -1) { - break; - } - - finalData.push({ - type: "math", - data: text.slice(currIndex + leftDelim.length, nextIndex), - rawData: text.slice(currIndex, nextIndex + rightDelim.length), - display: display - }); - - currIndex = nextIndex + rightDelim.length; - } - - lookingForLeft = !lookingForLeft; - } - - finalData.push({ - type: "text", - data: text.slice(currIndex) - }); - } else { - finalData.push(startData[i]); - } - } - - return finalData; - }; - - const splitWithDelimiters = function(text, delimiters) { - let data = [{ type: "text", data: text }]; - for (let i = 0; i < delimiters.length; i++) { - const delimiter = delimiters[i]; - data = splitAtDelimiters( - data, - delimiter.left, - delimiter.right, - delimiter.display || false - ); - } - return data; - }; - - /* Note: optionsCopy is mutated by this method. If it is ever exposed in the - * API, we should copy it before mutating. - */ - const renderMathInText = function(text, optionsCopy) { - const data = splitWithDelimiters(text, optionsCopy.delimiters); - const fragment = document.createDocumentFragment(); - - for (let i = 0; i < data.length; i++) { - if (data[i].type === "text") { - fragment.appendChild(document.createTextNode(data[i].data)); - } else { - const tag = document.createElement("d-math"); - const math = data[i].data; - // Override any display mode defined in the settings with that - // defined by the text itself - optionsCopy.displayMode = data[i].display; - try { - tag.textContent = math; - if (optionsCopy.displayMode) { - tag.setAttribute("block", ""); - } - } catch (e) { - if (!(e instanceof katex.ParseError)) { - throw e; - } - optionsCopy.errorCallback( - "KaTeX auto-render: Failed to parse `" + data[i].data + "` with ", - e - ); - fragment.appendChild(document.createTextNode(data[i].rawData)); - continue; - } - fragment.appendChild(tag); - } - } - - return fragment; - }; - - const renderElem = function(elem, optionsCopy) { - for (let i = 0; i < elem.childNodes.length; i++) { - const childNode = elem.childNodes[i]; - if (childNode.nodeType === 3) { - // Text node - const text = childNode.textContent; - if (optionsCopy.mightHaveMath(text)) { - const frag = renderMathInText(text, optionsCopy); - i += frag.childNodes.length - 1; - elem.replaceChild(frag, childNode); - } - } else if (childNode.nodeType === 1) { - // Element node - const shouldRender = - optionsCopy.ignoredTags.indexOf(childNode.nodeName.toLowerCase()) === - -1; - - if (shouldRender) { - renderElem(childNode, optionsCopy); - } - } - // Otherwise, it's something else, and ignore it. - } - }; - - const defaultAutoRenderOptions = { - delimiters: [ - { left: "$$", right: "$$", display: true }, - { left: "\\[", right: "\\]", display: true }, - { left: "\\(", right: "\\)", display: false } - // LaTeX uses this, but it ruins the display of normal `$` in text: - // {left: '$', right: '$', display: false}, - ], - - ignoredTags: [ - "script", - "noscript", - "style", - "textarea", - "pre", - "code", - "svg" - ], - - errorCallback: function(msg, err) { - console.error(msg, err); - } - }; - - const renderMathInElement = function(elem, options) { - if (!elem) { - throw new Error("No element provided to render"); - } - - const optionsCopy = Object.assign({}, defaultAutoRenderOptions, options); - const delimiterStrings = optionsCopy.delimiters.flatMap(d => [ - d.left, - d.right - ]); - const mightHaveMath = text => - delimiterStrings.some(d => text.indexOf(d) !== -1); - optionsCopy.mightHaveMath = mightHaveMath; - renderElem(elem, optionsCopy); - }; - - // Copyright 2018 The Distill Template Authors - - function Mathematics(dom, data) { - let needsCSS = false; - const body = dom.querySelector('body'); - - if (!body) { - console.warn("No body tag found!"); - return; - } - - if (data.katex && data.katex.delimiters) { - global.document = dom; - renderMathInElement(body, data.katex); - } - - // render d-math tags - const mathTags = body.querySelectorAll('d-math'); - if (mathTags.length > 0) { - needsCSS = true; - console.warn(`Prerendering ${mathTags.length} math tags...`); - for (const mathTag of mathTags) { - const localOptions = { displayMode: mathTag.hasAttribute('block') }; - const options = Object.assign(localOptions, data.katex); - const html = katex$2.renderToString(mathTag.textContent, options); - const container = dom.createElement('span'); - container.innerHTML = html; - mathTag.parentElement.insertBefore(container, mathTag); - mathTag.parentElement.removeChild(mathTag); - } - } - - if (needsCSS) { - const katexCSSTag = ''; - dom.head.insertAdjacentHTML('beforeend', katexCSSTag); - } - - } - - var favicon = "iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA99JREFUeNrsG4t1ozDMzQSM4A2ODUonKBucN2hugtIJ6E1AboLcBiQTkJsANiAb9OCd/OpzMWBJBl5TvaeXPiiyJetry0J8wW3D3QpjRh3GjneXDq+fSQA9s2mH9x3KDhN4foJfCb8N/Jrv+2fnDn8vLRQOplWHVYdvHZYdZsBcZP1vBmh/n8DzEmhUQDPaOuP9pFuY+JwJHwHnCLQE2tnWBGEyXozY9xCUgHMhhjE2I4heVWtgIkZ83wL6Qgxj1obfWBxymPwe+b00BCCRNPbwfb60yleAkkBHGT5AEehIYz7eJrFDMF9CvH4wwhcGHiHMneFvLDQwlwvMLQq58trRcYBWfYn0A0OgHWQUSu25mE+BnoYKnnEJoeIWAifzOv7vLWd2ZKRfWAIme3tOiUaQ3UnLkb0xj1FxRIeEGKaGIHOs9nEgLaaA9i0JRYo1Ic67wJW86KSKE/ZAM8KuVMk8ITVhmxUxJ3Cl2xlm9Vtkeju1+mpCQNxaEGNCY8bs9X2YqwNoQeGjBWut/ma0QAWy/TqAsHx9wSya3I5IRxOfTC+leG+kA/4vSeEcGBtNUN6byhu3+keEZCQJUNh8MAO7HL6H8pQLnsW/Hd4T4lv93TPjfM7A46iEEqbB5EDOvwYNW6tGNZzT/o+CZ6sqZ6wUtR/wf7mi/VL8iNciT6rHih48Y55b4nKCHJCCzb4y0nwFmin3ZEMIoLfZF8F7nncFmvnWBaBj7CGAYA/WGJsUwHdYqVDwAmNsUgAx4CGgAA7GOOxADYOFWOaIKifuVYzmOpREqA21Mo7aPsgiY1PhOMAmxtR+AUbYH3Id2wc0SAFIQTsn9IUGWR8k9jx3vtXSiAacFxTAGakBk9UudkNECd6jLe+6HrshshvIuC6IlLMRy7er+JpcKma24SlE4cFZSZJDGVVrsNvitQhQrDhW0jfiOLfFd47C42eHT56D/BK0To+58Ahj+cAT8HT1UWlfLZCCd/uKawzU0Rh2EyIX/Icqth3niG8ybNroezwe6khdCNxRN+l4XGdOLVLlOOt2hTRJlr1ETIuMAltVTMz70mJrkdGAaZLSmnBEqmAE32JCMmuTlCnRgsBENtOUpHhvvsYIL0ibnBkaC6QvKcR7738GKp0AKnim7xgUSNv1bpS8QwhBt8r+EP47v/oyRK/S34yJ9nT+AN0Tkm4OdB9E4BsmXM3SnMlRFUrtp6IDpV2eKzdYvF3etm3KhQksbOLChGkSmcBdmcEwvqkrMy5BzL00NZeu3qPYJOOuCc+5NjcWKXQxFvTa3NoXJ4d8in7fiAUuTt781dkvuHX4K8AA2Usy7yNKLy0AAAAASUVORK5CYII=\n"; - - /*! +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("fs")):"function"==typeof define&&define.amd?define(["exports","fs"],t):t((e=e||self).dl={},e.fs)}(this,function(e,t){"use strict";function n(e,t){e.title=t.title,t.published&&(t.published instanceof Date?e.publishedDate=t.published:t.published.constructor===String&&(e.publishedDate=new Date(t.published))),t.publishedDate&&(t.publishedDate instanceof Date?e.publishedDate=t.publishedDate:t.publishedDate.constructor===String?e.publishedDate=new Date(t.publishedDate):console.error("Don't know what to do with published date: "+t.publishedDate)),e.description=t.description,e.authors=t.authors.map(e=>new te(e)),e.katex=t.katex,e.password=t.password,t.doi&&(e.doi=t.doi)} +// Copyright 2018 The Distill Template Authors +function r(e){for(let t of e.authors){const e=Boolean(t.affiliation),n=Boolean(t.affiliations);if(e)if(n)console.warn(`Author ${t.author} has both old-style ("affiliation" & "affiliationURL") and new style ("affiliations") affiliation information!`);else{let e={name:t.affiliation};t.affiliationURL&&(e.url=t.affiliationURL),t.affiliations=[e]}}return e}function i(e){const t=e.firstElementChild;if(t){if("json"==t.getAttribute("type").split("/")[1]){const e=t.textContent;return r(JSON.parse(e))}console.error("Distill only supports JSON frontmatter tags anymore; no more YAML.")}else console.error("You added a frontmatter tag but did not provide a script tag with front matter data in it. Please take a look at our templates.");return{}} +// Copyright 2018 The Distill Template Authors +function a(e,t){const r=e.querySelector("d-front-matter");r?n(t,i(r)):console.warn("No front matter tag found!")}function o(){throw new Error("Dynamic requires are not currently supported by rollup-plugin-commonjs")}function s(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e["default"]:e}function l(e,t){return e(t={exports:{}},t.exports),t.exports} +// Copyright 2018 The Distill Template Authors +function u(e){return e.replace(/[\t\n ]+/g," ").replace(/{\\["^`.'acu~Hvs]( )?([a-zA-Z])}/g,(e,t,n)=>n).replace(/{\\([a-zA-Z])}/g,(e,t)=>t)}function d(e){const t=new Map,n=re.toJSON(e);for(const e of n){for(const[t,n]of Object.entries(e.entryTags))e.entryTags[t.toLowerCase()]=u(n);e.entryTags.type=e.entryType,t.set(e.citationKey,e.entryTags)}return t}function c(e){return`@article{${e.slug},\n author = {${e.bibtexAuthors}},\n title = {${e.title}},\n journal = {${e.journal.title}},\n year = {${e.publishedYear}},\n note = {${e.url}},\n doi = {${e.doi}}\n}`} +// Copyright 2018 The Distill Template Authors +function h(e){const t=e.firstElementChild;if(t&&"SCRIPT"===t.tagName){if("text/bibtex"==t.type){return d(e.firstElementChild.textContent)}if("text/json"==t.type)return new Map(JSON.parse(t.textContent));console.warn("Unsupported bibliography script tag type: "+t.type)}else console.warn("Bibliography did not have any script tag.")} +// Copyright 2018 The Distill Template Authors +function p(e,n){const r=e.querySelector("d-bibliography");if(!r)return void console.warn("No bibliography tag found!");const i=r.getAttribute("src");if(i){const a=n.inputDirectory+"/"+i,o=d(t.readFileSync(a,"utf-8")),s=e.createElement("script");s.type="text/json",s.textContent=JSON.stringify([...o]),r.appendChild(s),r.removeAttribute("src")}n.bibliography=h(r)} +// Copyright 2018 The Distill Template Authors +function f(e=document){const t=new Set,n=e.querySelectorAll("d-cite");for(const e of n){const n=(e.getAttribute("key")||e.getAttribute("bibtex-key")).split(",").map(e=>e.trim());for(const e of n)t.add(e)}return[...t]}function m(e,t,n,r){if(null==e.author)return"";var i=e.author.split(" and ");let a=i.map(e=>{if(-1!=(e=e.trim()).indexOf(","))var n=e.split(",")[0].trim(),r=e.split(",")[1];else if(-1!=e.indexOf(" "))n=e.split(" ").slice(-1)[0].trim(),r=e.split(" ").slice(0,-1).join(" ");else n=e.trim();var i="";return r!=undefined&&(i=(i=r.trim().split(" ").map(e=>e.trim()[0])).join(".")+"."),t.replace("${F}",r).replace("${L}",n).replace("${I}",i).trim()});if(i.length>1){var o=a.slice(0,i.length-1).join(n);return o+=(r||n)+a[i.length-1]}return a[0]}function g(e){var t=e.journal||e.booktitle||"";if("volume"in e){var n=e.issue||e.number;n=n!=undefined?"("+n+")":"",t+=", Vol "+e.volume+n}return"pages"in e&&(t+=", pp. "+e.pages),""!=t&&(t+=". "),"publisher"in e&&"."!=(t+=e.publisher)[t.length-1]&&(t+="."),t}function v(e){if("url"in e){var t=e.url,n=/arxiv\.org\/abs\/([0-9\.]*)/.exec(t);if(null!=n&&(t=`http://arxiv.org/pdf/${n[1]}.pdf`),".pdf"==t.slice(-4))var r="PDF";else if(".html"==t.slice(-5))r="HTML";return`  [${r||"link"}]`}return""}function b(e,t){return"doi"in e?`${t?"
      ":""} DOI: ${e.doi}`:""}function y(e){return''+e.title+" "}function x(e){if(e){var t=y(e);return t+=v(e)+"
      ",e.author&&(t+=m(e,"${L}, ${I}",", "," and "),(e.year||e.date)&&(t+=", ")),e.year||e.date?t+=(e.year||e.date)+". ":t+=". ",t+=g(e),t+=b(e)}return"?"} +// Copyright 2018 The Distill Template Authors +function w(e,t){const n=new Set(t.citations),r=f(e);for(const e of r)n.add(e);t.citations=Array.from(n)} +// Copyright 2018 The Distill Template Authors +function k(e){const t=e.querySelector("head");if(e.querySelector("html").getAttribute("lang")||e.querySelector("html").setAttribute("lang","en"),!e.querySelector("meta[charset]")){const n=e.createElement("meta");n.setAttribute("charset","utf-8"),t.appendChild(n)}if(!e.querySelector("meta[name=viewport]")){const n=e.createElement("meta");n.setAttribute("name","viewport"),n.setAttribute("content","width=device-width, initial-scale=1"),t.appendChild(n)}} +// Copyright 2018 The Distill Template Authors +function M(e){return`\n \n`} +// Copyright 2018 The Distill Template Authors +function S(e,t){const n=e.querySelector("d-byline");n&&(n.innerHTML=M(t))} +// Copyright 2018 The Distill Template Authors +function z(e,t){const n=e.body,r=n.querySelector("d-article");if(!r)return void console.warn("No d-article tag found; skipping adding optional components!");let i=e.querySelector("d-byline");i||(t.authors?(i=e.createElement("d-byline"),n.insertBefore(i,r)):console.warn("No authors found in front matter; please add them before submission!"));let a=e.querySelector("d-title");a||(a=e.createElement("d-title"),n.insertBefore(a,i));let o=a.querySelector("h1");o||((o=e.createElement("h1")).textContent=t.title,a.insertBefore(o,a.firstChild));const s="undefined"!=typeof t.password;let l=n.querySelector("d-interstitial");if(s&&!l){const r="undefined"!=typeof window,i=r&&window.location.hostname.includes("localhost");r&&i||((l=e.createElement("d-interstitial")).password=t.password,n.insertBefore(l,n.firstChild))}else!s&&l&&l.parentElement.removeChild(this);let u=e.querySelector("d-appendix");u||(u=e.createElement("d-appendix"),e.body.appendChild(u));let d=e.querySelector("d-footnote-list");d||(d=e.createElement("d-footnote-list"),u.appendChild(d));let c=e.querySelector("d-citation-list");c||(c=e.createElement("d-citation-list"),u.appendChild(c))} +// Copyright 2018 The Distill Template Authors +function A(e,t){let n=!1;const r=e.querySelector("body");if(!r)return void console.warn("No body tag found!");t.katex&&t.katex.delimiters&&(global.document=e,ce(r,t.katex));const i=r.querySelectorAll("d-math");if(i.length>0){n=!0,console.warn(`Prerendering ${i.length} math tags...`);for(const n of i){const r={displayMode:n.hasAttribute("block")},i=Object.assign(r,t.katex),a=ie.renderToString(n.textContent,i),o=e.createElement("span");o.innerHTML=a,n.parentElement.insertBefore(o,n),n.parentElement.removeChild(n)}}if(n){const t='';e.head.insertAdjacentHTML("beforeend",t)}}function C(e){var t,n=""+e,r=pe.exec(n);if(!r)return n;var i="",a=0,o=0;for(a=r.index;a\n`)}let r=e.querySelector("head"),i=e=>N(r,e);if(i(`\n \n \n \n `),t.title&&i(`\n ${fe(t.title)}\n `),t.url&&i(`\n \n `),t.publishedDate&&i(`\n \n \n \n \n `),t.updatedDate&&i(`\n \n `),(t.authors||[]).forEach(e=>{N(r,`\n `)}),i(`\n \n \n \n \n \n \n \n \n `),i(`\n \n \n \n \n \n \n \n \n `),t.doiSuffix){i("\n \n"),n("citation_title",t.title),n("citation_fulltext_html_url",t.url),n("citation_volume",t.volume),n("citation_issue",t.issue),n("citation_firstpage",t.doiSuffix?`e${t.doiSuffix}`:undefined),n("citation_doi",t.doi);let e=t.journal||{};n("citation_journal_title",e.full_title||e.title),n("citation_journal_abbrev",e.abbrev_title),n("citation_issn",e.issn),n("citation_publisher",e.publisher),n("citation_fulltext_world_readable","",!0),t.publishedDate&&(n("citation_online_date",`${t.publishedYear}/${t.publishedMonthPadded}/${t.publishedDayPadded}`),n("citation_publication_date",`${t.publishedYear}/${t.publishedMonthPadded}/${t.publishedDayPadded}`)),(t.authors||[]).forEach(e=>{n("citation_author",`${e.lastName}, ${e.firstName}`),n("citation_author_institution",e.affiliation)})}else console.warn("No DOI suffix in data; not adding citation meta tags!");t.citations?t.citations.forEach(e=>{if(t.bibliography&&t.bibliography.has(e)){n("citation_reference",E(t.bibliography.get(e)))}else console.warn("No bibliography data found for "+e)}):console.warn("No citations found; not adding any references meta tags!")}function N(e,t){e.innerHTML+=t}function E(e){var t=`citation_title=${e.title};`;e.author&&""!==e.author&&e.author.split(" and ").forEach(e=>{let n,r;-1!=(e=e.trim()).indexOf(",")?(n=e.split(",")[0].trim(),r=e.split(",")[1].trim()):(n=e.split(" ").slice(-1)[0].trim(),r=e.split(" ").slice(0,-1).join(" ")),t+=`citation_author=${r} ${n};`}),"year"in e&&(t+=`citation_publication_date=${e.year};`);let n=/https?:\/\/arxiv\.org\/pdf\/([0-9]*\.[0-9]*)\.pdf/.exec(e.url);return(n=(n=n||/https?:\/\/arxiv\.org\/abs\/([0-9]*\.[0-9]*)/.exec(e.url))||/arXiv preprint arXiv:([0-9]*\.[0-9]*)/.exec(e.journal))&&n[1]?t+=`citation_arxiv_id=${n[1]};`:("journal"in e&&(t+=`citation_journal_title=${fe(e.journal)};`),"volume"in e&&(t+=`citation_volume=${fe(e.volume)};`),("issue"in e||"number"in e)&&(t+=`citation_number=${fe(e.issue||e.number)};`),t)}function R(e){const t="distill-prerendered-styles";if(!e.getElementById(t)){const n=e.createElement("style");n.id=t,n.type="text/css";const r=e.createTextNode(me);n.appendChild(r);const i=e.head.querySelector("script");e.head.insertBefore(n,i)}} +// Copyright 2018 The Distill Template Authors +function L(e,t){let n='\n \n \n

      Table of contents

      \n
        ';for(const e of t){const t="D-TITLE"==e.parentElement.tagName,r=e.getAttribute("no-toc");if(t||r)continue;const i=e.textContent;let a='
      • '+i+"
      • ";"H3"==e.tagName?a="
          "+a+"
        ":a+="
        ",n+=a}n+="
      ",e.innerHTML=n} +// Copyright 2018 The Distill Template Authors +function O(e){const t=e.querySelector("d-article"),n=e.querySelector("d-toc");if(n){L(n,t.querySelectorAll("h2, h3")),n.setAttribute("prerendered","true")}} +// Copyright 2018 The Distill Template Authors +function q(e){for(var t=e.createTreeWalker(e.body,e.defaultView.NodeFilter.SHOW_TEXT);t.nextNode();){var n=t.currentNode,r=n.nodeValue;r&&_(n)&&(r=D(r=B(r)),n.nodeValue=r)}}function _(e){var t=e.parentElement,n=!!(t&&t.getAttribute&&t.getAttribute("class"))&&(t.getAttribute("class").includes("katex")||t.getAttribute("class").includes("MathJax"));return t&&"SCRIPT"!==t.nodeName&&"STYLE"!==t.nodeName&&"CODE"!==t.nodeName&&"PRE"!==t.nodeName&&"SPAN"!==t.nodeName&&"D-HEADER"!==t.nodeName&&"D-BYLINE"!==t.nodeName&&"D-MATH"!==t.nodeName&&"D-CODE"!==t.nodeName&&"D-BIBLIOGRAPHY"!==t.nodeName&&"D-FOOTER"!==t.nodeName&&"D-APPENDIX"!==t.nodeName&&"D-FRONTMATTER"!==t.nodeName&&"D-TOC"!==t.nodeName&&8!==t.nodeType&&!n} +/*! + * typeset - Typesetting for the web + * @version v0.1.6 + * @link https://github.com/davidmerfield/Typeset.js + * @author David Merfield + */function D(e){var t="\xa0",n=/([\xab\xbf\xa1]) /g,r=/ ([!?:;.,\u203d\xbb])/g;return e=(e=(e=(e=(e=e.replace(/--/g,"\u2014")).replace(/\s*\u2014\s*/g,"\u2009\u2014\u2009")).replace(/\.\.\./g,"\u2026")).replace(n,"$1"+t)).replace(r,t+"$1")}function B(e){return e=(e=(e=(e=(e=e.replace(/(\W|^)"([^\s!?:;.,\u203d\xbb])/g,"$1\u201c$2").replace(/(\u201c[^"]*)"([^"]*$|[^\u201c"]*\u201c)/g,"$1\u201d$2").replace(/([^0-9])"/g,"$1\u201d").replace(/(\W|^)'(\S)/g,"$1\u2018$2").replace(/([a-z])'([a-z])/gi,"$1\u2019$2").replace(/((\u2018[^']*)|[a-z])'([^0-9]|$)/gi,"$1\u2019$3").replace(/(\u2018)([0-9]{2}[^\u2019]*)(\u2018([^0-9]|$)|$|\u2019[a-z])/gi,"\u2019$2$3").replace(/(\B|^)\u2018(?=([^\u2019]*\u2019\b)*([^\u2019\u2018]*\W[\u2019\u2018]\b|[^\u2019\u2018]*$))/gi,"$1\u2019").replace(/'''/g,"\u2034").replace(/("|'')/g,"\u2033").replace(/'/g,"\u2032")).replace(/\\\u201c/,'"')).replace(/\\\u201d/,'"')).replace(/\\\u2019/,"'")).replace(/\\\u2018/,"'")} +// Copyright 2018 The Distill Template Authors +function I(e){const t=e.querySelector('script[src*="template.v2.js"]');t?t.parentNode.removeChild(t):console.debug("FYI: Did not find template tag when trying to remove it. You may not have added it. Be aware that our polyfills will add it.");const n=e.createElement("script");n.src="https://cdnjs.cloudflare.com/ajax/libs/webcomponentsjs/1.0.17/webcomponents-loader.js",e.head.insertBefore(n,e.head.firstChild);const r=e.createElement("script");r.innerHTML=ge,e.head.insertBefore(r,e.head.firstChild)} +// Copyright 2018 The Distill Template Authors +function H(e,t,n=document){if(t.size>0){e.style.display="";let r=e.querySelector(".references");if(r)r.innerHTML="";else{const t=n.createElement("style");t.innerHTML=ve,e.appendChild(t);const i=n.createElement("h3");i.id="references",i.textContent="References",e.appendChild(i),(r=n.createElement("ol")).id="references-list",r.className="references",e.appendChild(r)}for(const[e,i]of t){const t=n.createElement("li");t.id=e,t.innerHTML=x(i),r.appendChild(t)}}else e.style.display="none"} +// Copyright 2018 The Distill Template Authors +function P(e,t){const n=e.querySelector("d-citation-list");if(n){H(n,new Map(t.citations.map(e=>[e,t.bibliography.get(e)])),e),n.setAttribute("distill-prerendered","true")}} +// Copyright 2018 The Distill Template Authors +function j(e){const t=e.head,n=t.querySelector("meta[http-equiv]");t.insertBefore(n,t.firstChild);const r=t.querySelector("meta[name=viewport]");t.insertBefore(r,t.firstChild);const i=t.querySelector("meta[charset]");t.insertBefore(i,t.firstChild)} +// Copyright 2018 The Distill Template Authors +function F(e){if(!e.querySelector("distill-header")){const t=e.createElement("distill-header");t.innerHTML=ye,t.setAttribute("distill-prerendered","");const n=e.querySelector("body");n.insertBefore(t,n.firstChild)}} +// Copyright 2018 The Distill Template Authors +function $(e){let t=xe;"undefined"!=typeof e.githubUrl&&(t+='\n

      Updates and Corrections

      \n

      ',e.githubCompareUpdatesUrl&&(t+=`View all changes to this article since it was first published.`),t+=`\n If you see mistakes or want to suggest changes, please create an issue on GitHub.

      \n `);const n=e.journal;return void 0!==n&&"Distill"===n.title&&(t+=`\n

      Reuse

      \n

      Diagrams and text are licensed under Creative Commons Attribution CC-BY 4.0 with the source available on GitHub, unless noted otherwise. The figures that have been reused from other sources don\u2019t fall under this license and can be recognized by a note in their caption: \u201cFigure from \u2026\u201d.

      \n `),"undefined"!=typeof e.publishedDate&&(t+=`\n

      Citation

      \n

      For attribution in academic contexts, please cite this work as

      \n
      ${e.concatenatedAuthors}, "${e.title}", Distill, ${e.publishedYear}.
      \n

      BibTeX citation

      \n
      ${c(e)}
      \n `),t} +// Copyright 2018 The Distill Template Authors +function U(e,t){const n=e.querySelector("d-appendix");if(n){if(!n.querySelector("distill-appendix")){const r=e.createElement("distill-appendix");n.appendChild(r),r.innerHTML=$(t)}}else console.warn("No appendix tag found!")} +// Copyright 2018 The Distill Template Authors +function Y(e){if(!e.querySelector("distill-footer")){const t=e.createElement("distill-footer");t.innerHTML=we,e.querySelector("body").appendChild(t)}} +// Copyright 2018 The Distill Template Authors +function V(e,t,n=!0){let r;r=t instanceof ne?t:ne.fromObject(t);for(const[t,i]of ke.entries())n&&console.warn("Running extractor: "+t),i(e,r,n);for(const[t,i]of Me.entries())n&&console.warn("Running transform: "+t),i(e,r,n);e.body.setAttribute("distill-prerendered",""),t instanceof ne||r.assignToObject(t)}function G(e,t,n=!0){for(const[r,i]of Se.entries())n&&console.warn("Running distillify: ",r),i(e,t,n)}function W(e){const t=e.querySelectorAll("script");let n=undefined;for(const e of t){const t=e.src;if(t.includes("template.v1.js"))n=!1;else if(t.includes("template.v2.js"))n=!0;else if(t.includes("template."))throw new Error("Uses distill template, but unknown version?!")}if(n===undefined)throw new Error("Does not seem to use Distill template at all.");return n}t=t&&Object.prototype.hasOwnProperty.call(t,"default")?t["default"]:t; +// Copyright 2018 The Distill Template Authors +const K=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],J=["Jan.","Feb.","March","April","May","June","July","Aug.","Sept.","Oct.","Nov.","Dec."],X=e=>e<10?"0"+e:e,Z=function(e){return`${K[e.getDay()].substring(0,3)}, ${X(e.getDate())} ${J[e.getMonth()].substring(0,3)} ${e.getFullYear().toString()} ${e.getUTCHours().toString()}:${e.getUTCMinutes().toString()}:${e.getUTCSeconds().toString()} Z`},Q=function(e){return Array.from(e).reduce((e,[t,n])=>Object.assign(e,{[t]:n}),{})},ee=function(e){const t=new Map;for(var n in e)e.hasOwnProperty(n)&&t.set(n,e[n]);return t};class te{constructor(e){this.name=e.author,this.personalURL=e.authorURL,this.affiliation=e.affiliation,this.affiliationURL=e.affiliationURL,this.affiliations=e.affiliations||[]}get firstName(){const e=this.name.split(" ");return e.slice(0,e.length-1).join(" ")}get lastName(){const e=this.name.split(" ");return e[e.length-1]}}class ne{constructor(){this.title="unnamed article",this.description="",this.authors=[],this.bibliography=new Map,this.bibliographyParsed=!1,this.citations=[],this.citationsCollected=!1,this.journal={},this.katex={},this.doi=undefined,this.publishedDate=undefined}set url(e){this._url=e}get url(){return this._url?this._url:this.distillPath&&this.journal.url?this.journal.url+"/"+this.distillPath:this.journal.url?this.journal.url:void 0}get githubUrl(){return this.githubPath?"https://github.com/"+this.githubPath:undefined}set previewURL(e){this._previewURL=e}get previewURL(){return this._previewURL?this._previewURL:this.url+"/thumbnail.jpg"}get publishedDateRFC(){return Z(this.publishedDate)}get updatedDateRFC(){return Z(this.updatedDate)}get publishedYear(){return this.publishedDate.getFullYear()}get publishedMonth(){return J[this.publishedDate.getMonth()]}get publishedDay(){return this.publishedDate.getDate()}get publishedMonthPadded(){return X(this.publishedDate.getMonth()+1)}get publishedDayPadded(){return X(this.publishedDate.getDate())}get publishedISODateOnly(){return this.publishedDate.toISOString().split("T")[0]}get volume(){const e=this.publishedYear-2015;if(e<1)throw new Error("Invalid publish date detected during computing volume");return e}get issue(){return this.publishedDate.getMonth()+1}get concatenatedAuthors(){return this.authors.length>2?this.authors[0].lastName+", et al.":2===this.authors.length?this.authors[0].lastName+" & "+this.authors[1].lastName:1===this.authors.length?this.authors[0].lastName:void 0}get bibtexAuthors(){return this.authors.map(e=>e.lastName+", "+e.firstName).join(" and ")}get slug(){let e="";return this.authors.length&&(e+=this.authors[0].lastName.toLowerCase(),e+=this.publishedYear,e+=this.title.split(" ")[0].toLowerCase()),e||"Untitled"}get bibliographyEntries(){return new Map(this.citations.map(e=>{return[e,this.bibliography.get(e)]}))}set bibliography(e){e instanceof Map?this._bibliography=e:"object"==typeof e&&(this._bibliography=ee(e))}get bibliography(){return this._bibliography}static fromObject(e){const t=new ne;return Object.assign(t,e),t}assignToObject(e){Object.assign(e,this),e.bibliography=Q(this.bibliographyEntries),e.url=this.url,e.doi=this.doi,e.githubUrl=this.githubUrl,e.previewURL=this.previewURL,this.publishedDate&&(e.volume=this.volume,e.issue=this.issue,e.publishedDateRFC=this.publishedDateRFC,e.publishedYear=this.publishedYear,e.publishedMonth=this.publishedMonth,e.publishedDay=this.publishedDay,e.publishedMonthPadded=this.publishedMonthPadded,e.publishedDayPadded=this.publishedDayPadded),this.updatedDate&&(e.updatedDateRFC=this.updatedDateRFC),e.concatenatedAuthors=this.concatenatedAuthors,e.bibtexAuthors=this.bibtexAuthors,e.slug=this.slug}}var re=l(function(e,t){!function(e){function t(){this.months=["jan","feb","mar","apr","may","jun","jul","aug","sep","oct","nov","dec"],this.notKey=[",","{","}"," ","="],this.pos=0,this.input="",this.entries=new Array,this.currentEntry="",this.setInput=function(e){this.input=e},this.getEntries=function(){return this.entries},this.isWhitespace=function(e){return" "==e||"\r"==e||"\t"==e||"\n"==e},this.match=function(e,t){if(t!=undefined&&null!=t||(t=!0),this.skipWhitespace(t),this.input.substring(this.pos,this.pos+e.length)!=e)throw"Token mismatch, expected "+e+", found "+this.input.substring(this.pos);this.pos+=e.length,this.skipWhitespace(t)},this.tryMatch=function(e,t){return t!=undefined&&null!=t||(t=!0),this.skipWhitespace(t),this.input.substring(this.pos,this.pos+e.length)==e},this.matchAt=function(){for(;this.input.length>this.pos&&"@"!=this.input[this.pos];)this.pos++;return"@"==this.input[this.pos]},this.skipWhitespace=function(e){for(;this.isWhitespace(this.input[this.pos]);)this.pos++;if("%"==this.input[this.pos]&&1==e){for(;"\n"!=this.input[this.pos];)this.pos++;this.skipWhitespace(e)}},this.value_braces=function(){var e=0;this.match("{",!1);for(var t=this.pos,n=!1;;){if(!n)if("}"==this.input[this.pos]){if(!(e>0)){var r=this.pos;return this.match("}",!1),this.input.substring(t,r)}e--}else if("{"==this.input[this.pos])e++;else if(this.pos>=this.input.length-1)throw"Unterminated value";n="\\"==this.input[this.pos]&&0==n,this.pos++}},this.value_comment=function(){for(var e="",t=0;!this.tryMatch("}",!1)||0!=t;){if(e+=this.input[this.pos],"{"==this.input[this.pos]&&t++,"}"==this.input[this.pos]&&t--,this.pos>=this.input.length-1)throw"Unterminated value:"+this.input.substring(start);this.pos++}return e},this.value_quotes=function(){this.match('"',!1);for(var e=this.pos,t=!1;;){if(!t){if('"'==this.input[this.pos]){var n=this.pos;return this.match('"',!1),this.input.substring(e,n)}if(this.pos>=this.input.length-1)throw"Unterminated value:"+this.input.substring(e)}t="\\"==this.input[this.pos]&&0==t,this.pos++}},this.single_value=function(){var e=this.pos;if(this.tryMatch("{"))return this.value_braces();if(this.tryMatch('"'))return this.value_quotes();var t=this.key();if(t.match("^[0-9]+$"))return t;if(this.months.indexOf(t.toLowerCase())>=0)return t.toLowerCase();throw"Value expected:"+this.input.substring(e)+" for key: "+t},this.value=function(){var e=[];for(e.push(this.single_value());this.tryMatch("#");)this.match("#"),e.push(this.single_value());return e.join("")},this.key=function(){for(var e=this.pos;;){if(this.pos>=this.input.length)throw"Runaway key";if(this.notKey.indexOf(this.input[this.pos])>=0)return this.input.substring(e,this.pos);this.pos++}},this.key_equals_value=function(){var e=this.key();if(this.tryMatch("="))return this.match("="),[e,this.value()];throw"... = value expected, equals sign missing:"+this.input.substring(this.pos)},this.key_value_list=function(){var e=this.key_equals_value();for(this.currentEntry.entryTags={},this.currentEntry.entryTags[e[0]]=e[1];this.tryMatch(",")&&(this.match(","),!this.tryMatch("}"));)e=this.key_equals_value(),this.currentEntry.entryTags[e[0]]=e[1]},this.entry_body=function(e){this.currentEntry={},this.currentEntry.citationKey=this.key(),this.currentEntry.entryType=e.substring(1),this.match(","),this.key_value_list(),this.entries.push(this.currentEntry)},this.directive=function(){return this.match("@"),"@"+this.key()},this.preamble=function(){this.currentEntry={},this.currentEntry.entryType="PREAMBLE",this.currentEntry.entry=this.value_comment(),this.entries.push(this.currentEntry)},this.comment=function(){this.currentEntry={},this.currentEntry.entryType="COMMENT",this.currentEntry.entry=this.value_comment(),this.entries.push(this.currentEntry)},this.entry=function(e){this.entry_body(e)},this.bibtex=function(){for(;this.matchAt();){var e=this.directive();this.match("{"),"@STRING"==e?this.string():"@PREAMBLE"==e?this.preamble():"@COMMENT"==e?this.comment():this.entry(e),this.match("}")}}}e.toJSON=function(e){var n=new t;return n.setInput(e),n.bibtex(),n.entries},e.toBibtex=function(e){var t="";for(var n in e){if(t+="@"+e[n].entryType,t+="{",e[n].citationKey&&(t+=e[n].citationKey+", "),e[n].entry&&(t+=e[n].entry),e[n].entryTags){var r="";for(var i in e[n].entryTags)0!=r.length&&(r+=", "),r+=i+"= {"+e[n].entryTags[i]+"}";t+=r}t+="}\n\n"}return t}}(t)}),ie=s(l(function(e){var t;t=function(){return function e(t,n,r){function i(s,l){if(!n[s]){if(!t[s]){var u="function"==typeof o&&o;if(!l&&u)return u(s,!0);if(a)return a(s,!0);var d=new Error("Cannot find module '"+s+"'");throw d.code="MODULE_NOT_FOUND",d}var c=n[s]={exports:{}};t[s][0].call(c.exports,function(e){var n=t[s][1][e];return i(n||e)},c,c.exports,e,t,n,r)}return n[s].exports}for(var a="function"==typeof o&&o,s=0;s=0;--d)if("#"===(n=r[d]).text){if(0===d)throw new s["default"]("Incomplete placeholder at end of macro body",n);if("#"===(n=r[--d]).text)r.splice(d+1,1);else{if(!/^[1-9]$/.test(n.text))throw new s["default"]("Not a valid argument number",n);r.splice.apply(r,[d,2].concat(u[n.text-1]))}}}this.stack=this.stack.concat(r)}}},{key:"get",value:function(e){this.discardedWhiteSpace=[];var t=this.nextToken();if(e)for(;" "===t.text;)this.discardedWhiteSpace.push(t),t=this.nextToken();return t}},{key:"unget",value:function(e){for(this.stack.push(e);0!==this.discardedWhiteSpace.length;)this.stack.push(this.discardedWhiteSpace.pop())}}]),e}();t.exports=u},{"./Lexer":26,"./ParseError":29,"./macros":44,"babel-runtime/helpers/classCallCheck":4,"babel-runtime/helpers/createClass":5,"object-assign":25}],28:[function(e,t){function n(e){return e&&e.__esModule?e:{"default":e}}var r=n(e("babel-runtime/helpers/classCallCheck")),i=n(e("babel-runtime/helpers/createClass")),a=n(e("./fontMetrics")),o=6,s=[[1,1,1],[2,1,1],[3,1,1],[4,2,1],[5,2,1],[6,3,1],[7,4,2],[8,6,3],[9,7,6],[10,8,7],[11,10,9]],l=[.5,.6,.7,.8,.9,1,1.2,1.44,1.728,2.074,2.488],u=function(e,t){return t.size<2?e:s[e-1][t.size-1]},d=function(){function e(t){(0,r["default"])(this,e),this.style=t.style,this.color=t.color,this.size=t.size||o,this.textSize=t.textSize||this.size,this.phantom=t.phantom,this.font=t.font,this.sizeMultiplier=l[this.size-1],this._fontMetrics=null}return(0,i["default"])(e,[{key:"extend",value:function(t){var n={style:this.style,size:this.size,textSize:this.textSize,color:this.color,phantom:this.phantom,font:this.font};for(var r in t)t.hasOwnProperty(r)&&(n[r]=t[r]);return new e(n)}},{key:"havingStyle",value:function(e){return this.style===e?this:this.extend({style:e,size:u(this.textSize,e)})}},{key:"havingCrampedStyle",value:function(){return this.havingStyle(this.style.cramp())}},{key:"havingSize",value:function(e){return this.size===e&&this.textSize===e?this:this.extend({style:this.style.text(),size:e,textSize:e})}},{key:"havingBaseStyle",value:function(e){e=e||this.style.text();var t=u(o,e);return this.size===t&&this.textSize===o&&this.style===e?this:this.extend({style:e,size:t,baseSize:o})}},{key:"withColor",value:function(e){return this.extend({color:e})}},{key:"withPhantom",value:function(){return this.extend({phantom:!0})}},{key:"withFont",value:function(e){return this.extend({font:e||this.font})}},{key:"sizingClasses",value:function(e){return e.size!==this.size?["sizing","reset-size"+e.size,"size"+this.size]:[]}},{key:"baseSizingClasses",value:function(){return this.size!==o?["sizing","reset-size"+this.size,"size"+o]:[]}},{key:"fontMetrics",value:function(){return this._fontMetrics||(this._fontMetrics=a["default"].getFontMetrics(this.size)),this._fontMetrics}},{key:"getColor",value:function(){return this.phantom?"transparent":e.colorMap[this.color]||this.color}}]),e}();d.colorMap={"katex-blue":"#6495ed","katex-orange":"#ffa500","katex-pink":"#ff00af","katex-red":"#df0030","katex-green":"#28ae7b","katex-gray":"gray","katex-purple":"#9d38bd","katex-blueA":"#ccfaff","katex-blueB":"#80f6ff","katex-blueC":"#63d9ea","katex-blueD":"#11accd","katex-blueE":"#0c7f99","katex-tealA":"#94fff5","katex-tealB":"#26edd5","katex-tealC":"#01d1c1","katex-tealD":"#01a995","katex-tealE":"#208170","katex-greenA":"#b6ffb0","katex-greenB":"#8af281","katex-greenC":"#74cf70","katex-greenD":"#1fab54","katex-greenE":"#0d923f","katex-goldA":"#ffd0a9","katex-goldB":"#ffbb71","katex-goldC":"#ff9c39","katex-goldD":"#e07d10","katex-goldE":"#a75a05","katex-redA":"#fca9a9","katex-redB":"#ff8482","katex-redC":"#f9685d","katex-redD":"#e84d39","katex-redE":"#bc2612","katex-maroonA":"#ffbde0","katex-maroonB":"#ff92c6","katex-maroonC":"#ed5fa6","katex-maroonD":"#ca337c","katex-maroonE":"#9e034e","katex-purpleA":"#ddd7ff","katex-purpleB":"#c6b9fc","katex-purpleC":"#aa87ff","katex-purpleD":"#7854ab","katex-purpleE":"#543b78","katex-mintA":"#f5f9e8","katex-mintB":"#edf2df","katex-mintC":"#e0e5cc","katex-grayA":"#f6f7f7","katex-grayB":"#f0f1f2","katex-grayC":"#e3e5e6","katex-grayD":"#d6d8da","katex-grayE":"#babec2","katex-grayF":"#888d93","katex-grayG":"#626569","katex-grayH":"#3b3e40","katex-grayI":"#21242c","katex-kaBlue":"#314453","katex-kaGreen":"#71B307"},d.BASESIZE=o,t.exports=d},{"./fontMetrics":41,"babel-runtime/helpers/classCallCheck":4,"babel-runtime/helpers/createClass":5}],29:[function(e,t){function n(e){return e&&e.__esModule?e:{"default":e}}var r=n(e("babel-runtime/helpers/classCallCheck")),i=function a(e,t){(0,r["default"])(this,a);var n="KaTeX parse error: "+e,i=void 0,o=void 0;if(t&&t.lexer&&t.start<=t.end){var s=t.lexer.input;i=t.start,o=t.end,i===s.length?n+=" at end of input: ":n+=" at position "+(i+1)+": ";var l=s.slice(i,o).replace(/[^]/g,"$&\u0332");n+=(i>15?"\u2026"+s.slice(i-15,i):s.slice(0,i))+l+(o+15e.SUPSUB_GREEDINESS)return this.parseFunction(i);throw new f["default"]("Got function '"+i.result+"' with no arguments as "+t,n)}return i.result}if(this.settings.throwOnError||"\\"!==this.nextToken.text[0])throw new f["default"]("Expected group after '"+r+"'",n);return this.handleUnsupportedCmd()}},{key:"handleUnsupportedCmd",value:function(){for(var e=this.nextToken.text,t=[],n=0;ni))throw new f["default"]("Got function '"+c.result+"' as argument to '"+e+"'",u);h=this.parseFunction(c)}else h=c.result;s.push(h),a.push(this.pos)}return s.push(a),s}},{key:"parseGroupOfType",value:function(e,t){var n=this.mode;if("original"===e&&(e=n),"color"===e)return this.parseColorGroup(t);if("size"===e)return this.parseSizeGroup(t);this.switchMode(e),"text"===e&&this.consumeSpaces();var r=this.parseGroup(t);return this.switchMode(n),r}},{key:"consumeSpaces",value:function(){for(;" "===this.nextToken.text;)this.consume()}},{key:"parseStringGroup",value:function(e,t){if(t&&"["!==this.nextToken.text)return null;var n=this.mode;this.mode="text",this.expect(t?"[":"{");for(var r="",i=this.nextToken,a=i;this.nextToken.text!==(t?"]":"}");){if("EOF"===this.nextToken.text)throw new f["default"]("Unexpected end of input in "+e,i.range(this.nextToken,r));r+=(a=this.nextToken).text,this.consume()}return this.mode=n,this.expect(t?"]":"}"),i.range(a,r)}},{key:"parseRegexGroup",value:function(e,t){var n=this.mode;this.mode="text";for(var r=this.nextToken,i=r,a="";"EOF"!==this.nextToken.text&&e.test(a+this.nextToken.text);)a+=(i=this.nextToken).text,this.consume();if(""===a)throw new f["default"]("Invalid "+t+": '"+r.text+"'",r);return this.mode=n,r.range(i,a)}},{key:"parseColorGroup",value:function(e){var t=this.parseStringGroup("color",e);if(!t)return null;var n=/^(#[a-z0-9]+|[a-z]+)$/i.exec(t.text);if(!n)throw new f["default"]("Invalid color: '"+t.text+"'",t) +;return new r(new p["default"]("color",n[0],this.mode),!1)}},{key:"parseSizeGroup",value:function(e){var t=void 0;if(!(t=e||"{"===this.nextToken.text?this.parseStringGroup("size",e):this.parseRegexGroup(/^[-+]? *(?:$|\d+|\d+\.\d*|\.\d*) *[a-z]{0,2} *$/,"size")))return null;var n=/([-+]?) *(\d+(?:\.\d*)?|\.\d+) *([a-z]{2})/.exec(t.text);if(!n)throw new f["default"]("Invalid size: '"+t.text+"'",t);var i={number:+(n[1]+n[2]),unit:n[3]};if(!c["default"].validUnit(i))throw new f["default"]("Invalid unit: '"+i.unit+"'",t);return new r(new p["default"]("size",i,this.mode),!1)}},{key:"parseGroup",value:function(e){var t=this.nextToken;if(this.nextToken.text===(e?"[":"{")){this.consume();var n=this.parseExpression(!1,e?"]":null),i=this.nextToken;return this.expect(e?"]":"}"),"text"===this.mode&&this.formLigatures(n),new r(new p["default"]("ordgroup",n,this.mode,t,i),!1)}return e?null:this.parseSymbol()}},{key:"formLigatures",value:function(e){for(var t=e.length-1,n=0;n=2}}]),e}(),o=0,s=1,l=2,u=3,d=4,c=5,h=6,p=7,f=[new a(o,0,!1),new a(s,0,!0),new a(l,1,!1),new a(u,1,!0),new a(d,2,!1),new a(c,2,!0),new a(h,3,!1),new a(p,3,!0)],m=[d,c,d,c,h,p,h,p],g=[c,c,c,c,p,p,p,p],v=[l,u,d,c,h,p,h,p],b=[u,u,c,c,p,p,p,p],y=[s,s,u,u,c,c,p,p],x=[o,s,l,u,l,u,l,u];t.exports={DISPLAY:f[o],TEXT:f[l],SCRIPT:f[d],SCRIPTSCRIPT:f[h]}},{"babel-runtime/helpers/classCallCheck":4,"babel-runtime/helpers/createClass":5}],34:[function(e,t){function n(e){return e&&e.__esModule?e:{"default":e}}var r=n(e("./domTree")),i=n(e("./fontMetrics")),a=n(e("./symbols")),o=n(e("./utils")),s=["\\imath","\\jmath","\\pounds"],l=function(e,t,n){return a["default"][n][e]&&a["default"][n][e].replace&&(e=a["default"][n][e].replace),{value:e,metrics:i["default"].getCharacterMetrics(e,t)}},u=function(e,t,n,i,a){var o=l(e,t,n),s=o.metrics;e=o.value;var u=void 0;if(s){var d=s.italic;"text"===n&&(d=0),u=new r["default"].symbolNode(e,s.height,s.depth,d,s.skew,a)}else"undefined"!=typeof console&&console.warn("No character metrics for '"+e+"' in style '"+t+"'"),u=new r["default"].symbolNode(e,0,0,0,0,a);return i&&(u.maxFontSize=i.sizeMultiplier,i.style.isTight()&&u.classes.push("mtight"),i.getColor()&&(u.style.color=i.getColor())),u},d=function(e,t,n,r){return"\\"===e||"main"===a["default"][t][e].font?u(e,"Main-Regular",t,n,r):u(e,"AMS-Regular",t,n,r.concat(["amsrm"]))},c=function(e,t,n,r,i){if("mathord"===i){var o=h(e);return u(e,o.fontName,t,n,r.concat([o.fontClass]))}if("textord"===i)return"ams"===(a["default"][t][e]&&a["default"][t][e].font)?u(e,"AMS-Regular",t,n,r.concat(["amsrm"])):u(e,"Main-Regular",t,n,r.concat(["mathrm"]));throw new Error("unexpected type: "+i+" in mathDefault")},h=function(e){return/[0-9]/.test(e.charAt(0))||o["default"].contains(s,e)?{fontName:"Main-Italic",fontClass:"mainit"}:{fontName:"Math-Italic",fontClass:"mathit"}},p=function(e,t,n){var r=e.mode,i=e.value,a=["mord"],d=t.font;if(d){var p=void 0;return p="mathit"===d||o["default"].contains(s,i)?h(i):x[d],l(i,p.fontName,r).metrics?u(i,p.fontName,r,t,a.concat([p.fontClass||d])):c(i,r,t,a,n)}return c(i,r,t,a,n)},f=function(e){var t=0,n=0,r=0;if(e.children)for(var i=0;it&&(t=e.children[i].height),e.children[i].depth>n&&(n=e.children[i].depth),e.children[i].maxFontSize>r&&(r=e.children[i].maxFontSize);e.height=t,e.depth=n,e.maxFontSize=r},m=function(e,t,n){var i=new r["default"].span(e,t,n);return f(i),i},g=function(e,t){e.children=t.concat(e.children),f(e)},v=function(e){var t=new r["default"].documentFragment(e);return f(t),t},b=function(e,t,n){var i=void 0,a=void 0,o=void 0;if("individualShift"===t){var s=e;for(e=[s[0]],a=i=-s[0].shift-s[0].elem.depth,o=1;o0&&(c+=b,h-=b)}var y=[{type:"elem",elem:i,shift:h,marginRight:m},{type:"elem",elem:r,shift:-c,marginRight:m}];n instanceof d["default"].symbolNode&&(y[0].marginLeft=-n.italic+"em"),g=l["default"].makeVList(y,"individualShift",null,t)}else c=Math.max(c,p,r.depth+.25*a.xHeight),g=l["default"].makeVList([{type:"elem",elem:r,marginRight:m}],"shift",-c,t);else{h=Math.max(h,a.sub1,i.height-.8*a.xHeight);var k=[{type:"elem",elem:i,marginRight:m}];n instanceof d["default"].symbolNode&&(k[0].marginLeft=-n.italic+"em"),g=l["default"].makeVList(k,"shift",h,t)}var S=x(n)||"mord";return(0,s.makeSpan)([S],[n,(0,s.makeSpan)(["msupsub"],[g])],t)},genfrac:function(e,t){var n=t.style;"display"===e.value.size?n=o["default"].DISPLAY:"text"===e.value.size&&(n=o["default"].TEXT);var r=n.fracNum(),i=n.fracDen(),a=void 0;a=t.havingStyle(r);var d=C(e.value.numer,a,t);a=t.havingStyle(i);var c=C(e.value.denom,a,t),h=void 0,p=void 0,f=void 0;e.value.hasBarLine?(p=(h=A("frac-line",t)).height,f=h.height):(h=null,p=0,f=t.fontMetrics().defaultRuleThickness);var m=void 0,g=void 0,v=void 0;n.size===o["default"].DISPLAY.size?(m=t.fontMetrics().num1,g=p>0?3*f:7*f,v=t.fontMetrics().denom1):(p>0?(m=t.fontMetrics().num2,g=f):(m=t.fontMetrics().num3,g=3*f),v=t.fontMetrics().denom2);var b=void 0;if(0===p){var y=m-d.depth-(c.height-v);y0&&(k<(z+=b)&&(k=z),z=0),e.value.addJot&&(k+=m),M.height=w,M.depth=k,y+=w,M.pos=y,y+=k+z,u[n]=M}var A=y/2+t.fontMetrics().axisHeight,T=e.value.cols||[],N=[],E=void 0,R=void 0;for(r=0,R=0;r=o)){var _=void 0;(r>0||e.value.hskipBeforeAndAfter)&&0!==(_=h["default"].deflt(L.pregap,p))&&((E=(0,s.makeSpan)(["arraycolsep"],[])).style.width=_+"em",N.push(E));var D=[];for(n=0;nn.height+n.depth+a&&(a=(a+f-n.height-n.depth)/2);var m=h.height-n.height-a-p,g=void 0;if(0===n.height&&0===n.depth?g=(0,s.makeSpan)():(n.style.paddingLeft=h.surdWidth+"em",(g=l["default"].makeVList([{type:"elem",elem:n},{type:"kern",size:-(n.height+m)},{type:"elem",elem:h},{type:"kern",size:p}],"firstBaseline",null,t)).children[0].children[0].classes.push("svg-align")),e.value.index){var v=t.havingStyle(o["default"].SCRIPTSCRIPT),b=C(e.value.index,v,t),y=.6*(g.height-g.depth),x=l["default"].makeVList([{type:"elem",elem:b}],"shift",-y,t),w=(0,s.makeSpan)(["root"],[x]);return(0,s.makeSpan)(["mord","sqrt"],[w,g],t)}return(0,s.makeSpan)(["mord","sqrt"],[g],t)},z.sizing=function(e,t){var n=t.havingSize(e.value.size);return r(e.value.value,n,t)},z.styling=function(e,t){var n={display:o["default"].DISPLAY,text:o["default"].TEXT,script:o["default"].SCRIPT,scriptscript:o["default"].SCRIPTSCRIPT}[e.value.style],i=t.havingStyle(n);return r(e.value.value,i,t)},z.font=function(e,t){var n=e.value.font;return C(e.value.body,t.withFont(n))},z.delimsizing=function(e,t){var n=e.value.value;return"."===n?(0,s.makeSpan)([e.value.mclass]):u["default"].sizedDelim(n,e.value.size,t,e.mode,[e.value.mclass])},z.leftright=function(e,t){for(var n=y(e.value.body,t,!0),r=0,i=0,a=!1,o=0;o0&&(h.style.width="calc(100% - "+2*o+"em)",h.style.marginLeft=2*o+"em")}else{var f=l["default"].makeSymbol(e.value.label,"Main-Regular",e.mode,t);f.italic=0;var m=null;"\\vec"===e.value.label?m="accent-vec":"\\H"===e.value.label&&(m="accent-hungarian"),c=(0,s.makeSpan)([],[f]),(c=(0,s.makeSpan)(["accent-body",m],[c])).style.marginLeft=2*o+"em",c=l["default"].makeVList([{type:"elem",elem:a},{type:"kern",size:-d},{type:"elem",elem:c}],"firstBaseline",null,t)}var g=(0,s.makeSpan)(["mord","accent"],[c],t);return r?(r.children[0]=g,r.height=Math.max(g.height,r.height),r.classes[0]="mord",r):g},z.horizBrace=function(e,t){var n=t.style,r="supsub"===e.type,i=void 0,a=void 0;r&&(e.value.sup?(a=t.havingStyle(n.sup()),i=C(e.value.sup,a,t)):(a=t.havingStyle(n.sub()),i=C(e.value.sub,a,t)),e=e.value.base);var u=C(e.value.base,t.havingBaseStyle(o["default"].DISPLAY)),d=p["default"].svgSpan(e,t),c=void 0;if(e.value.isOver?(c=l["default"].makeVList([{type:"elem",elem:u},{type:"kern",size:.1},{type:"elem",elem:d}],"firstBaseline",null,t)).children[0].children[0].children[1].classes.push("svg-align"):(c=l["default"].makeVList([{type:"elem",elem:d},{type:"kern",size:.1},{type:"elem",elem:u}],"bottom",u.depth+.1+d.height,t)).children[0].children[0].children[0].classes.push("svg-align"),r){var h=(0,s.makeSpan)(["mord",e.value.isOver?"mover":"munder"],[c],t);c=e.value.isOver?l["default"].makeVList([{type:"elem",elem:h},{type:"kern",size:.2},{type:"elem",elem:i}],"firstBaseline",null,t):l["default"].makeVList([{type:"elem",elem:i},{type:"kern",size:.2},{type:"elem",elem:h}],"bottom",h.depth+.2+i.height,t)}return(0,s.makeSpan)(["mord",e.value.isOver?"mover":"munder"],[c],t)},z.accentUnder=function(e,t){var n=C(e.value.body,t),r=p["default"].svgSpan(e,t),i=/tilde/.test(e.value.label)?.12:0,a=l["default"].makeVList([{type:"elem",elem:r},{type:"kern",size:i},{type:"elem",elem:n}],"bottom",r.height+i,t);return a.children[0].children[0].children[0].classes.push("svg-align"),(0,s.makeSpan)(["mord","accentunder"],[a],t)},z.enclose=function(e,t){var n=C(e.value.body,t),r=e.value.label.substr(1),i=t.sizeMultiplier,a=void 0,o=0,u=0;if("sout"===r)(a=(0,s.makeSpan)(["stretchy","sout"])).height=t.fontMetrics().defaultRuleThickness/i,u=-.5*t.fontMetrics().xHeight;else{n.classes.push("fbox"===r?"boxpad":"cancel-pad");var d=M(e.value.body);o="fbox"===r?.34:d?.2:0,u=n.depth+o,a=p["default"].encloseSpan(n,r,o,t)}var c=l["default"].makeVList([{type:"elem",elem:n,shift:0},{type:"elem",elem:a,shift:u}],"individualShift",null,t);return"fbox"!==r&&c.children[0].children[0].children[1].classes.push("svg-align"),/cancel/.test(r)?(0,s.makeSpan)(["mord","cancel-lap"],[c],t):(0,s.makeSpan)(["mord"],[c],t)},z.xArrow=function(e,t){var n=t.style,r=t.havingStyle(n.sup()),i=C(e.value.body,r,t);i.classes.push("x-arrow-pad");var a=void 0;e.value.below&&(r=t.havingStyle(n.sub()),(a=C(e.value.below,r,t)).classes.push("x-arrow-pad"));var o=p["default"].svgSpan(e,t),u=-t.fontMetrics().axisHeight+o.depth,d=-t.fontMetrics().axisHeight-o.height-.111,c=void 0;if(e.value.below){var h=-t.fontMetrics().axisHeight+a.height+o.height+.111;c=l["default"].makeVList([{type:"elem",elem:i,shift:d},{type:"elem",elem:o,shift:u},{type:"elem",elem:a,shift:h}],"individualShift",null,t)}else c=l["default"].makeVList([{type:"elem",elem:i,shift:d},{type:"elem",elem:o,shift:u}],"individualShift",null,t);return c.children[0].children[0].children[1].classes.push("svg-align"),(0,s.makeSpan)(["mrel","x-arrow"],[c],t)},z.phantom=function(e,t){var n=y(e.value.value,t.withPhantom(),!1);return new l["default"].makeFragment(n)},z.mclass=function(e,t){var n=y(e.value.value,t,!0);return(0,s.makeSpan)([e.value.mclass],n,t)};var C=function(e,t,n){if(!e)return(0,s.makeSpan)();if(z[e.type]){var r=z[e.type](e,t);if(n&&t.size!==n.size){r=(0,s.makeSpan)(t.sizingClasses(n),[r],t);var i=t.sizeMultiplier/n.sizeMultiplier;r.height*=i,r.depth*=i}return r}throw new a["default"]("Got group of unknown type: '"+e.type+"'")},T=function(e,t){e=JSON.parse((0,i["default"])(e));var n=y(e,t,!0),r=(0,s.makeSpan)(["base"],n,t),a=(0,s.makeSpan)(["strut"]),o=(0,s.makeSpan)(["strut","bottom"]);a.style.height=r.height+"em",o.style.height=r.height+r.depth+"em",o.style.verticalAlign=-r.depth+"em";var l=(0,s.makeSpan)(["katex-html"],[a,o,r]);return l.setAttribute("aria-hidden","true"),l};t.exports=T},{"./ParseError":29,"./Style":33,"./buildCommon":34,"./delimiter":38,"./domTree":39,"./stretchy":47,"./units":50,"./utils":51,"babel-runtime/core-js/json/stringify":2}],36:[function(e,t){function n(e){return e&&e.__esModule?e:{"default":e}}var r=e("./buildCommon"),i=n(r),a=n(e("./fontMetrics")),o=n(e("./mathMLTree")),s=n(e("./ParseError")),l=n(e("./Style")),u=n(e("./symbols")),d=n(e("./utils")),c=n(e("./stretchy")),h=function(e,t){return u["default"][t][e]&&u["default"][t][e].replace&&(e=u["default"][t][e].replace),new o["default"].TextNode(e)},p=function(e,t){var n=t.font;if(!n)return null;var i=e.mode;if("mathit"===n)return"italic";var o=e.value;if(d["default"].contains(["\\imath","\\jmath"],o))return null;u["default"][i][o]&&u["default"][i][o].replace&&(o=u["default"][i][o].replace);var s=r.fontMap[n].fontName;return a["default"].getCharacterMetrics(o,s)?r.fontMap[t.font].variant:null},f={},m={mi:"italic",mn:"normal",mtext:"normal"};f.mathord=function(e,t){var n=new o["default"].MathNode("mi",[h(e.value,e.mode)]),r=p(e,t)||"italic";return r!==m[n.type]&&n.setAttribute("mathvariant",r),n},f.textord=function(e,t){var n=h(e.value,e.mode),r=p(e,t)||"normal",i=void 0;return i="text"===e.mode?new o["default"].MathNode("mtext",[n]):/[0-9]/.test(e.value)?new o["default"].MathNode("mn",[n]):"\\prime"===e.value?new o["default"].MathNode("mo",[n]):new o["default"].MathNode("mi",[n]),r!==m[i.type]&&i.setAttribute("mathvariant",r),i},f.bin=function(e){return new o["default"].MathNode("mo",[h(e.value,e.mode)])},f.rel=function(e){return new o["default"].MathNode("mo",[h(e.value,e.mode)])},f.open=function(e){return new o["default"].MathNode("mo",[h(e.value,e.mode)])},f.close=function(e){return new o["default"].MathNode("mo",[h(e.value,e.mode)])},f.inner=function(e){return new o["default"].MathNode("mo",[h(e.value,e.mode)])},f.punct=function(e){var t=new o["default"].MathNode("mo",[h(e.value,e.mode)]);return t.setAttribute("separator","true"),t},f.ordgroup=function(e,t){var n=g(e.value,t);return new o["default"].MathNode("mrow",n)},f.text=function(e,t){for(var n=e.value.body,r=[],i=null,a=0;a2&&arguments[2]!==undefined&&arguments[2];if(!e)return new o["default"].MathNode("mrow");if(f[e.type]){var r=f[e.type](e,t);return n&&"mrow"===r.type&&1===r.children.length?r.children[0]:r}throw new s["default"]("Got group of unknown type: '"+e.type+"'")},b=function(e,t,n){var i=g(e,n),a=new o["default"].MathNode("mrow",i),s=new o["default"].MathNode("annotation",[new o["default"].TextNode(t)]);s.setAttribute("encoding","application/x-tex");var l=new o["default"].MathNode("semantics",[a,s]),u=new o["default"].MathNode("math",[l]);return(0,r.makeSpan)(["katex-mathml"],[u])};t.exports=b},{"./ParseError":29,"./Style":33,"./buildCommon":34,"./fontMetrics":41,"./mathMLTree":45,"./stretchy":47,"./symbols":48,"./utils":51}],37:[function(e,t){function n(e){return e&&e.__esModule?e:{"default":e}}var r=n(e("./buildHTML")),i=n(e("./buildMathML")),a=e("./buildCommon"),o=n(e("./Options")),s=n(e("./Settings")),l=n(e("./Style")),u=function(e,t,n){n=n||new s["default"]({});var u=l["default"].TEXT;n.displayMode&&(u=l["default"].DISPLAY);var d=new o["default"]({style:u}),c=(0,i["default"])(e,t,d),h=(0,r["default"])(e,d),p=(0,a.makeSpan)(["katex"],[c,h]);return n.displayMode?(0,a.makeSpan)(["katex-display"],[p]):p};t.exports=u},{"./Options":28,"./Settings":32,"./Style":33,"./buildCommon":34,"./buildHTML":35,"./buildMathML":36}],38:[function(e,t){function n(e){return e&&e.__esModule?e:{"default":e}}var r=n(e("./ParseError")),i=n(e("./Style")),a=e("./buildCommon"),o=n(a),s=n(e("./fontMetrics")),l=n(e("./symbols")),u=n(e("./utils")),d=function(e,t){return l["default"].math[e]&&l["default"].math[e].replace?s["default"].getCharacterMetrics(l["default"].math[e].replace,t):s["default"].getCharacterMetrics(e,t)},c=function(e,t,n,r){var i=n.havingBaseStyle(t),o=(0,a.makeSpan)((r||[]).concat(i.sizingClasses(n)),[e],n);return o.delimSizeMultiplier=i.sizeMultiplier/n.sizeMultiplier,o.height*=o.delimSizeMultiplier,o.depth*=o.delimSizeMultiplier,o.maxFontSize=i.sizeMultiplier,o},h=function(e,t,n){var r=t.havingBaseStyle(n),i=(1-t.sizeMultiplier/r.sizeMultiplier)*t.fontMetrics().axisHeight;e.classes.push("delimcenter"),e.style.top=i+"em",e.height-=i,e.depth+=i},p=function(e,t,n,r,i,a){var s=o["default"].makeSymbol(e,"Main-Regular",i,r),l=c(s,t,r,a);return n&&h(l,r,t),l},f=function(e,t,n,r){return o["default"].makeSymbol(e,"Size"+t+"-Regular",n,r)},m=function(e,t,n,r,o,s){var l=f(e,t,o,r),u=c((0,a.makeSpan)(["delimsizing","size"+t],[l],r),i["default"].TEXT,r,s);return n&&h(u,r,i["default"].TEXT),u},g=function(e,t,n){var r=void 0;return"Size1-Regular"===t?r="delim-size1":"Size4-Regular"===t&&(r="delim-size4"),{type:"elem",elem:(0,a.makeSpan)(["delimsizinginner",r],[(0,a.makeSpan)([],[o["default"].makeSymbol(e,t,n)])])}},v=function(e,t,n,r,s,l){var u=void 0,h=void 0,p=void 0,f=void 0;u=p=f=e,h=null;var m="Size1-Regular";"\\uparrow"===e?p=f="\u23d0":"\\Uparrow"===e?p=f="\u2016":"\\downarrow"===e?u=p="\u23d0":"\\Downarrow"===e?u=p="\u2016":"\\updownarrow"===e?(u="\\uparrow",p="\u23d0",f="\\downarrow"):"\\Updownarrow"===e?(u="\\Uparrow",p="\u2016",f="\\Downarrow"):"["===e||"\\lbrack"===e?(u="\u23a1",p="\u23a2",f="\u23a3",m="Size4-Regular"):"]"===e||"\\rbrack"===e?(u="\u23a4",p="\u23a5",f="\u23a6",m="Size4-Regular"):"\\lfloor"===e?(p=u="\u23a2",f="\u23a3",m="Size4-Regular"):"\\lceil"===e?(u="\u23a1",p=f="\u23a2",m="Size4-Regular"):"\\rfloor"===e?(p=u="\u23a5",f="\u23a6",m="Size4-Regular"):"\\rceil"===e?(u="\u23a4",p=f="\u23a5",m="Size4-Regular"):"("===e?(u="\u239b",p="\u239c",f="\u239d",m="Size4-Regular"):")"===e?(u="\u239e",p="\u239f",f="\u23a0",m="Size4-Regular"):"\\{"===e||"\\lbrace"===e?(u="\u23a7",h="\u23a8",f="\u23a9",p="\u23aa",m="Size4-Regular"):"\\}"===e||"\\rbrace"===e?(u="\u23ab",h="\u23ac",f="\u23ad",p="\u23aa",m="Size4-Regular"):"\\lgroup"===e?(u="\u23a7",f="\u23a9",p="\u23aa",m="Size4-Regular"):"\\rgroup"===e?(u="\u23ab",f="\u23ad",p="\u23aa",m="Size4-Regular"):"\\lmoustache"===e?(u="\u23a7",f="\u23ad",p="\u23aa",m="Size4-Regular"):"\\rmoustache"===e&&(u="\u23ab",f="\u23a9",p="\u23aa",m="Size4-Regular");var v=d(u,m),b=v.height+v.depth,y=d(p,m),x=y.height+y.depth,w=d(f,m),k=w.height+w.depth,M=0,S=1;if(null!==h){var z=d(h,m);M=z.height+z.depth,S=2}var A=b+k+M,C=Math.ceil((t-A)/(S*x)),T=A+C*S*x,N=r.fontMetrics().axisHeight;n&&(N*=r.sizeMultiplier);var E=T/2-N,R=[];if(R.push(g(f,m,s)),null===h)for(var L=0;L",1:"",2:"",3:"",4:"",tall:"l-4 4-4 4c-.667.667-2 1.5-4 2.5s-4.167 1.833-6.5 2.5-5.5 1-9.5 1h\n-12l-28-84c-16.667-52-96.667 -294.333-240-727l-212 -643 -85 170c-4-3.333-8.333\n-7.667-13 -13l-13-13l77-155 77-156c66 199.333 139 419.667 219 661 l218 661z\nM702 0H400000v40H742z'/>"},y=function(e,t,n){var r=o["default"].makeSpan([],[],n),i=n.sizeMultiplier;if("small"===t.type)i=n.havingBaseStyle(t.style).sizeMultiplier/n.sizeMultiplier,r.height=1*i,r.style.height=r.height+"em",r.surdWidth=.833*i,r.innerHTML="\n "+b.main+"";else if("large"===t.type)r.height=M[t.size]/i,r.style.height=r.height+"em",r.surdWidth=1/i,r.innerHTML='\n '+b[t.size]+"";else{r.height=e/i,r.style.height=r.height+"em",r.surdWidth=1.056/i;var a=Math.floor(1e3*r.height),s=a-54;r.innerHTML="\n \n t)return n[i]}return n[n.length-1]},E=function(e,t,n,r,i,a){"<"===e||"\\lt"===e?e="\\langle":">"!==e&&"\\gt"!==e||(e="\\rangle");var o=void 0;o=u["default"].contains(k,e)?z:u["default"].contains(x,e)?C:A;var s=N(e,t,o,r);return"\\surd"===e?y(t,s,r):"small"===s.type?p(e,s.style,n,r,i,a):"large"===s.type?m(e,s.size,n,r,i,a):"stack"===s.type?v(e,t,n,r,i,a):void 0},R=function(e,t,n,r,i,a){var o=r.fontMetrics().axisHeight*r.sizeMultiplier,s=901,l=5/r.fontMetrics().ptPerEm,u=Math.max(t-o,n+o),d=Math.max(u/500*s,2*u-l);return E(e,d,!0,r,i,a)};t.exports={sizedDelim:S,customSizedDelim:E,leftRightDelim:R}},{"./ParseError":29,"./Style":33,"./buildCommon":34,"./fontMetrics":41,"./symbols":48,"./utils":51}],39:[function(e,t){function n(e){return e&&e.__esModule?e:{"default":e}}var r=n(e("babel-runtime/helpers/classCallCheck")),i=n(e("babel-runtime/helpers/createClass")),a=n(e("./unicodeRegexes")),o=n(e("./utils")),s=function(e){for(var t=(e=e.slice()).length-1;t>=0;t--)e[t]||e.splice(t,1);return e.join(" ")},l=function(){function e(t,n,i){(0,r["default"])(this,e),this.classes=t||[],this.children=n||[],this.height=0,this.depth=0,this.maxFontSize=0,this.style={},this.attributes={},this.innerHTML,i&&(i.style.isTight()&&this.classes.push("mtight"),i.getColor()&&(this.style.color=i.getColor()))}return(0,i["default"])(e,[{key:"setAttribute",value:function(e,t){this.attributes[e]=t}},{key:"tryCombine",value:function(){return!1}},{key:"toNode",value:function(){var e=document.createElement("span");for(var t in e.className=s(this.classes),this.style)Object.prototype.hasOwnProperty.call(this.style,t)&&(e.style[t]=this.style[t]);for(var n in this.attributes)Object.prototype.hasOwnProperty.call(this.attributes,n)&&e.setAttribute(n,this.attributes[n]);this.innerHTML&&(e.innerHTML=this.innerHTML);for(var r=0;r0||s(this.classes)!==s(t.classes)||this.skew!==t.skew||this.maxFontSize!==t.maxFontSize)return!1;for(var n in this.style)if(this.style.hasOwnProperty(n)&&this.style[n]!==t.style[n])return!1;for(var r in t.style)if(t.style.hasOwnProperty(r)&&this.style[r]!==t.style[r])return!1;return this.value+=t.value,this.height=Math.max(this.height,t.height),this.depth=Math.max(this.depth,t.depth),this.italic=t.italic,!0}},{key:"toNode",value:function(){var e=document.createTextNode(this.value),t=null;for(var n in this.italic>0&&((t=document.createElement("span")).style.marginRight=this.italic+"em"),this.classes.length>0&&((t=t||document.createElement("span")).className=s(this.classes)),this.style)this.style.hasOwnProperty(n)&&((t=t||document.createElement("span")).style[n]=this.style[n]);return t?(t.appendChild(e),t):e}},{key:"toMarkup",value:function(){var e=!1,t="0&&(n+="margin-right:"+this.italic+"em;"),this.style)this.style.hasOwnProperty(r)&&(n+=o["default"].hyphenate(r)+":"+this.style[r]+";");n&&(e=!0,t+=' style="'+o["default"].escape(n)+'"');var i=o["default"].escape(this.value);return e?(t+=">",t+=i,t+=""):i}}]),e}();t.exports={span:l,documentFragment:u,symbolNode:c}},{"./unicodeRegexes":49,"./utils":51,"babel-runtime/helpers/classCallCheck":4,"babel-runtime/helpers/createClass":5}],40:[function(e,t){function n(e){return e&&e.__esModule?e:{"default":e}}function r(e,t,n){for(var r=[],i=[r],a=[];;){var l=e.parseExpression(!1,null);l=new o["default"]("ordgroup",l,e.mode),n&&(l=new o["default"]("styling",{style:n,value:[l]},e.mode)),r.push(l);var u=e.nextToken.text;if("&"===u)e.consume();else{if("\\end"===u)break;if("\\\\"!==u&&"\\cr"!==u)throw new s["default"]("Expected & or \\\\ or \\end",e.nextToken);var d=e.parseFunction();a.push(d.value.size),r=[],i.push(r)}}return t.body=i,t.rowGaps=a,new o["default"](t.type,t,e.mode)}function i(e,n,r){"string"==typeof e&&(e=[e]),"number"==typeof n&&(n={numArgs:n});for(var i={numArgs:n.numArgs||0,argTypes:n.argTypes,greediness:1,allowedInText:!!n.allowedInText,numOptionalArgs:n.numOptionalArgs||0,handler:r},a=0;a0&&(l=2),t.value.cols[a]={type:"align",align:s,pregap:l,postgap:0}}return t}),i("gathered",{},function(e){var t={type:"array",cols:[{type:"align",align:"c"}],addJot:!0};return t=r(e.parser,t,"display")})},{"./ParseError":29,"./ParseNode":30}],41:[function(e,t){function n(e){return e&&e.__esModule?e:{"default":e}}var r=e("./unicodeRegexes"),i=n(e("./fontMetricsData")),a={slant:[.25,.25,.25],space:[0,0,0],stretch:[0,0,0],shrink:[0,0,0],xHeight:[.431,.431,.431],quad:[1,1.171,1.472],extraSpace:[0,0,0],num1:[.677,.732,.925],num2:[.394,.384,.387],num3:[.444,.471,.504],denom1:[.686,.752,1.025],denom2:[.345,.344,.532],sup1:[.413,.503,.504],sup2:[.363,.431,.404],sup3:[.289,.286,.294],sub1:[.15,.143,.2],sub2:[.247,.286,.4],supDrop:[.386,.353,.494],subDrop:[.05,.071,.1],delim1:[2.39,1.7,1.98],delim2:[1.01,1.157,1.42],axisHeight:[.25,.25,.25],defaultRuleThickness:[.04,.049,.049],bigOpSpacing1:[.111,.111,.111],bigOpSpacing2:[.166,.166,.166],bigOpSpacing3:[.2,.2,.2],bigOpSpacing4:[.6,.611,.611],bigOpSpacing5:[.1,.143,.143],sqrtRuleThickness:[.04,.04,.04],ptPerEm:[10,10,10],doubleRuleSep:[.2,.2,.2]},o={"\xc0":"A","\xc1":"A","\xc2":"A","\xc3":"A","\xc4":"A","\xc5":"A","\xc6":"A","\xc7":"C","\xc8":"E","\xc9":"E","\xca":"E","\xcb":"E","\xcc":"I","\xcd":"I","\xce":"I","\xcf":"I","\xd0":"D","\xd1":"N","\xd2":"O","\xd3":"O","\xd4":"O","\xd5":"O","\xd6":"O","\xd8":"O","\xd9":"U","\xda":"U","\xdb":"U","\xdc":"U","\xdd":"Y","\xde":"o","\xdf":"B","\xe0":"a","\xe1":"a","\xe2":"a","\xe3":"a","\xe4":"a","\xe5":"a","\xe6":"a","\xe7":"c","\xe8":"e","\xe9":"e","\xea":"e","\xeb":"e","\xec":"i","\xed":"i","\xee":"i","\xef":"i","\xf0":"d","\xf1":"n","\xf2":"o","\xf3":"o","\xf4":"o","\xf5":"o","\xf6":"o","\xf8":"o","\xf9":"u","\xfa":"u","\xfb":"u","\xfc":"u","\xfd":"y","\xfe":"o","\xff":"y","\u0410":"A","\u0411":"B","\u0412":"B","\u0413":"F","\u0414":"A","\u0415":"E","\u0416":"K","\u0417":"3","\u0418":"N","\u0419":"N","\u041a":"K","\u041b":"N","\u041c":"M","\u041d":"H","\u041e":"O","\u041f":"N","\u0420":"P","\u0421":"C","\u0422":"T","\u0423":"y","\u0424":"O","\u0425":"X","\u0426":"U","\u0427":"h","\u0428":"W","\u0429":"W","\u042a":"B","\u042b":"X","\u042c":"B","\u042d":"3","\u042e":"X","\u042f":"R","\u0430":"a","\u0431":"b","\u0432":"a","\u0433":"r","\u0434":"y","\u0435":"e","\u0436":"m","\u0437":"e","\u0438":"n","\u0439":"n","\u043a":"n","\u043b":"n","\u043c":"m","\u043d":"n","\u043e":"o","\u043f":"n","\u0440":"p","\u0441":"c","\u0442":"o","\u0443":"y","\u0444":"b","\u0445":"x","\u0446":"n","\u0447":"n","\u0448":"w","\u0449":"w","\u044a":"a","\u044b":"m","\u044c":"a","\u044d":"e","\u044e":"m","\u044f":"r"},s=function(e,t){var n=e.charCodeAt(0);e[0]in o?n=o[e[0]].charCodeAt(0):r.cjkRegex.test(e[0])&&(n="M".charCodeAt(0));var a=i["default"][t][n];if(a)return{depth:a[0],height:a[1],italic:a[2],skew:a[3],width:a[4]}},l={},u=function(e){var t=void 0;if(!l[t=e>=5?0:e>=3?1:2]){var n=l[t]={};for(var r in a)a.hasOwnProperty(r)&&(n[r]=a[r][t]);n.cssEmPerMu=n.quad/18}return l[t]};t.exports={getFontMetrics:u,getCharacterMetrics:s}},{"./fontMetricsData":42,"./unicodeRegexes":49}],42:[function(e,t){t.exports={"AMS-Regular":{65:[0,.68889,0,0],66:[0,.68889,0,0],67:[0,.68889,0,0],68:[0,.68889,0,0],69:[0,.68889,0,0],70:[0,.68889,0,0],71:[0,.68889,0,0],72:[0,.68889,0,0],73:[0,.68889,0,0],74:[.16667,.68889,0,0],75:[0,.68889,0,0],76:[0,.68889,0,0],77:[0,.68889,0,0],78:[0,.68889,0,0],79:[.16667,.68889,0,0],80:[0,.68889,0,0],81:[.16667,.68889,0,0],82:[0,.68889,0,0],83:[0,.68889,0,0],84:[0,.68889,0,0],85:[0,.68889,0,0],86:[0,.68889,0,0],87:[0,.68889,0,0],88:[0,.68889,0,0],89:[0,.68889,0,0],90:[0,.68889,0,0],107:[0,.68889,0,0],165:[0,.675,.025,0],174:[.15559,.69224,0,0],240:[0,.68889,0,0],295:[0,.68889,0,0],710:[0,.825,0,0],732:[0,.9,0,0],770:[0,.825,0,0],771:[0,.9,0,0],989:[.08167,.58167,0,0],1008:[0,.43056,.04028,0],8245:[0,.54986,0,0],8463:[0,.68889,0,0],8487:[0,.68889,0,0],8498:[0,.68889,0,0],8502:[0,.68889,0,0],8503:[0,.68889,0,0],8504:[0,.68889,0,0],8513:[0,.68889,0,0],8592:[-.03598,.46402,0,0],8594:[-.03598,.46402,0,0],8602:[-.13313,.36687,0,0],8603:[-.13313,.36687,0,0],8606:[.01354,.52239,0,0],8608:[.01354,.52239,0,0],8610:[.01354,.52239,0,0],8611:[.01354,.52239,0,0],8619:[0,.54986,0,0],8620:[0,.54986,0,0],8621:[-.13313,.37788,0,0],8622:[-.13313,.36687,0,0],8624:[0,.69224,0,0],8625:[0,.69224,0,0],8630:[0,.43056,0,0],8631:[0,.43056,0,0],8634:[.08198,.58198,0,0],8635:[.08198,.58198,0,0],8638:[.19444,.69224,0,0],8639:[.19444,.69224,0,0],8642:[.19444,.69224,0,0],8643:[.19444,.69224,0,0],8644:[.1808,.675,0,0],8646:[.1808,.675,0,0],8647:[.1808,.675,0,0],8648:[.19444,.69224,0,0],8649:[.1808,.675,0,0],8650:[.19444,.69224,0,0],8651:[.01354,.52239,0,0],8652:[.01354,.52239,0,0],8653:[-.13313,.36687,0,0],8654:[-.13313,.36687,0,0],8655:[-.13313,.36687,0,0],8666:[.13667,.63667,0,0],8667:[.13667,.63667,0,0],8669:[-.13313,.37788,0,0],8672:[-.064,.437,0,0],8674:[-.064,.437,0,0],8705:[0,.825,0,0],8708:[0,.68889,0,0],8709:[.08167,.58167,0,0],8717:[0,.43056,0,0],8722:[-.03598,.46402,0,0],8724:[.08198,.69224,0,0],8726:[.08167,.58167,0,0],8733:[0,.69224,0,0],8736:[0,.69224,0,0],8737:[0,.69224,0,0],8738:[.03517,.52239,0,0],8739:[.08167,.58167,0,0],8740:[.25142,.74111,0,0],8741:[.08167,.58167,0,0],8742:[.25142,.74111,0,0],8756:[0,.69224,0,0],8757:[0,.69224,0,0],8764:[-.13313,.36687,0,0],8765:[-.13313,.37788,0,0],8769:[-.13313,.36687,0,0],8770:[-.03625,.46375,0,0],8774:[.30274,.79383,0,0],8776:[-.01688,.48312,0,0],8778:[.08167,.58167,0,0],8782:[.06062,.54986,0,0],8783:[.06062,.54986,0,0],8785:[.08198,.58198,0,0],8786:[.08198,.58198,0,0],8787:[.08198,.58198,0,0],8790:[0,.69224,0,0],8791:[.22958,.72958,0,0],8796:[.08198,.91667,0,0],8806:[.25583,.75583,0,0],8807:[.25583,.75583,0,0],8808:[.25142,.75726,0,0],8809:[.25142,.75726,0,0],8812:[.25583,.75583,0,0],8814:[.20576,.70576,0,0],8815:[.20576,.70576,0,0],8816:[.30274,.79383,0,0],8817:[.30274,.79383,0,0],8818:[.22958,.72958,0,0],8819:[.22958,.72958,0,0],8822:[.1808,.675,0,0],8823:[.1808,.675,0,0],8828:[.13667,.63667,0,0],8829:[.13667,.63667,0,0],8830:[.22958,.72958,0,0],8831:[.22958,.72958,0,0],8832:[.20576,.70576,0,0],8833:[.20576,.70576,0,0],8840:[.30274,.79383,0,0],8841:[.30274,.79383,0,0],8842:[.13597,.63597,0,0],8843:[.13597,.63597,0,0],8847:[.03517,.54986,0,0],8848:[.03517,.54986,0,0],8858:[.08198,.58198,0,0],8859:[.08198,.58198,0,0],8861:[.08198,.58198,0,0],8862:[0,.675,0,0],8863:[0,.675,0,0],8864:[0,.675,0,0],8865:[0,.675,0,0],8872:[0,.69224,0,0],8873:[0,.69224,0,0],8874:[0,.69224,0,0],8876:[0,.68889,0,0],8877:[0,.68889,0,0],8878:[0,.68889,0,0],8879:[0,.68889,0,0],8882:[.03517,.54986,0,0],8883:[.03517,.54986,0,0],8884:[.13667,.63667,0,0],8885:[.13667,.63667,0,0],8888:[0,.54986,0,0],8890:[.19444,.43056,0,0],8891:[.19444,.69224,0,0],8892:[.19444,.69224,0,0],8901:[0,.54986,0,0],8903:[.08167,.58167,0,0],8905:[.08167,.58167,0,0],8906:[.08167,.58167,0,0],8907:[0,.69224,0,0],8908:[0,.69224,0,0],8909:[-.03598,.46402,0,0],8910:[0,.54986,0,0],8911:[0,.54986,0,0],8912:[.03517,.54986,0,0],8913:[.03517,.54986,0,0],8914:[0,.54986,0,0],8915:[0,.54986,0,0],8916:[0,.69224,0,0],8918:[.0391,.5391,0,0],8919:[.0391,.5391,0,0],8920:[.03517,.54986,0,0],8921:[.03517,.54986,0,0],8922:[.38569,.88569,0,0],8923:[.38569,.88569,0,0],8926:[.13667,.63667,0,0],8927:[.13667,.63667,0,0],8928:[.30274,.79383,0,0],8929:[.30274,.79383,0,0],8934:[.23222,.74111,0,0],8935:[.23222,.74111,0,0],8936:[.23222,.74111,0,0],8937:[.23222,.74111,0,0],8938:[.20576,.70576,0,0],8939:[.20576,.70576,0,0],8940:[.30274,.79383,0,0],8941:[.30274,.79383,0,0],8994:[.19444,.69224,0,0],8995:[.19444,.69224,0,0],9416:[.15559,.69224,0,0],9484:[0,.69224,0,0],9488:[0,.69224,0,0],9492:[0,.37788,0,0],9496:[0,.37788,0,0],9585:[.19444,.68889,0,0],9586:[.19444,.74111,0,0],9632:[0,.675,0,0],9633:[0,.675,0,0],9650:[0,.54986,0,0],9651:[0,.54986,0,0],9654:[.03517,.54986,0,0],9660:[0,.54986,0,0],9661:[0,.54986,0,0],9664:[.03517,.54986,0,0],9674:[.11111,.69224,0,0],9733:[.19444,.69224,0,0],10003:[0,.69224,0,0],10016:[0,.69224,0,0],10731:[.11111,.69224,0,0],10846:[.19444,.75583,0,0],10877:[.13667,.63667,0,0],10878:[.13667,.63667,0,0],10885:[.25583,.75583,0,0],10886:[.25583,.75583,0,0],10887:[.13597,.63597,0,0],10888:[.13597,.63597,0,0],10889:[.26167,.75726,0,0],10890:[.26167,.75726,0,0],10891:[.48256,.98256,0,0],10892:[.48256,.98256,0,0],10901:[.13667,.63667,0,0],10902:[.13667,.63667,0,0],10933:[.25142,.75726,0,0],10934:[.25142,.75726,0,0],10935:[.26167,.75726,0,0],10936:[.26167,.75726,0,0],10937:[.26167,.75726,0,0],10938:[.26167,.75726,0,0],10949:[.25583,.75583,0,0],10950:[.25583,.75583,0,0],10955:[.28481,.79383,0,0],10956:[.28481,.79383,0,0],57350:[.08167,.58167,0,0],57351:[.08167,.58167,0,0],57352:[.08167,.58167,0,0],57353:[0,.43056,.04028,0],57356:[.25142,.75726,0,0],57357:[.25142,.75726,0,0],57358:[.41951,.91951,0,0],57359:[.30274,.79383,0,0],57360:[.30274,.79383,0,0],57361:[.41951,.91951,0,0],57366:[.25142,.75726,0,0],57367:[.25142,.75726,0,0],57368:[.25142,.75726,0,0],57369:[.25142,.75726,0,0],57370:[.13597,.63597,0,0],57371:[.13597,.63597,0,0]},"Caligraphic-Regular":{48:[0,.43056,0,0],49:[0,.43056,0,0],50:[0,.43056,0,0],51:[.19444,.43056,0,0],52:[.19444,.43056,0,0],53:[.19444,.43056,0,0],54:[0,.64444,0,0],55:[.19444,.43056,0,0],56:[0,.64444,0,0],57:[.19444,.43056,0,0],65:[0,.68333,0,.19445],66:[0,.68333,.03041,.13889],67:[0,.68333,.05834,.13889], +68:[0,.68333,.02778,.08334],69:[0,.68333,.08944,.11111],70:[0,.68333,.09931,.11111],71:[.09722,.68333,.0593,.11111],72:[0,.68333,.00965,.11111],73:[0,.68333,.07382,0],74:[.09722,.68333,.18472,.16667],75:[0,.68333,.01445,.05556],76:[0,.68333,0,.13889],77:[0,.68333,0,.13889],78:[0,.68333,.14736,.08334],79:[0,.68333,.02778,.11111],80:[0,.68333,.08222,.08334],81:[.09722,.68333,0,.11111],82:[0,.68333,0,.08334],83:[0,.68333,.075,.13889],84:[0,.68333,.25417,0],85:[0,.68333,.09931,.08334],86:[0,.68333,.08222,0],87:[0,.68333,.08222,.08334],88:[0,.68333,.14643,.13889],89:[.09722,.68333,.08222,.08334],90:[0,.68333,.07944,.13889]},"Fraktur-Regular":{33:[0,.69141,0,0],34:[0,.69141,0,0],38:[0,.69141,0,0],39:[0,.69141,0,0],40:[.24982,.74947,0,0],41:[.24982,.74947,0,0],42:[0,.62119,0,0],43:[.08319,.58283,0,0],44:[0,.10803,0,0],45:[.08319,.58283,0,0],46:[0,.10803,0,0],47:[.24982,.74947,0,0],48:[0,.47534,0,0],49:[0,.47534,0,0],50:[0,.47534,0,0],51:[.18906,.47534,0,0],52:[.18906,.47534,0,0],53:[.18906,.47534,0,0],54:[0,.69141,0,0],55:[.18906,.47534,0,0],56:[0,.69141,0,0],57:[.18906,.47534,0,0],58:[0,.47534,0,0],59:[.12604,.47534,0,0],61:[-.13099,.36866,0,0],63:[0,.69141,0,0],65:[0,.69141,0,0],66:[0,.69141,0,0],67:[0,.69141,0,0],68:[0,.69141,0,0],69:[0,.69141,0,0],70:[.12604,.69141,0,0],71:[0,.69141,0,0],72:[.06302,.69141,0,0],73:[0,.69141,0,0],74:[.12604,.69141,0,0],75:[0,.69141,0,0],76:[0,.69141,0,0],77:[0,.69141,0,0],78:[0,.69141,0,0],79:[0,.69141,0,0],80:[.18906,.69141,0,0],81:[.03781,.69141,0,0],82:[0,.69141,0,0],83:[0,.69141,0,0],84:[0,.69141,0,0],85:[0,.69141,0,0],86:[0,.69141,0,0],87:[0,.69141,0,0],88:[0,.69141,0,0],89:[.18906,.69141,0,0],90:[.12604,.69141,0,0],91:[.24982,.74947,0,0],93:[.24982,.74947,0,0],94:[0,.69141,0,0],97:[0,.47534,0,0],98:[0,.69141,0,0],99:[0,.47534,0,0],100:[0,.62119,0,0],101:[0,.47534,0,0],102:[.18906,.69141,0,0],103:[.18906,.47534,0,0],104:[.18906,.69141,0,0],105:[0,.69141,0,0],106:[0,.69141,0,0],107:[0,.69141,0,0],108:[0,.69141,0,0],109:[0,.47534,0,0],110:[0,.47534,0,0],111:[0,.47534,0,0],112:[.18906,.52396,0,0],113:[.18906,.47534,0,0],114:[0,.47534,0,0],115:[0,.47534,0,0],116:[0,.62119,0,0],117:[0,.47534,0,0],118:[0,.52396,0,0],119:[0,.52396,0,0],120:[.18906,.47534,0,0],121:[.18906,.47534,0,0],122:[.18906,.47534,0,0],8216:[0,.69141,0,0],8217:[0,.69141,0,0],58112:[0,.62119,0,0],58113:[0,.62119,0,0],58114:[.18906,.69141,0,0],58115:[.18906,.69141,0,0],58116:[.18906,.47534,0,0],58117:[0,.69141,0,0],58118:[0,.62119,0,0],58119:[0,.47534,0,0]},"Main-Bold":{33:[0,.69444,0,0],34:[0,.69444,0,0],35:[.19444,.69444,0,0],36:[.05556,.75,0,0],37:[.05556,.75,0,0],38:[0,.69444,0,0],39:[0,.69444,0,0],40:[.25,.75,0,0],41:[.25,.75,0,0],42:[0,.75,0,0],43:[.13333,.63333,0,0],44:[.19444,.15556,0,0],45:[0,.44444,0,0],46:[0,.15556,0,0],47:[.25,.75,0,0],48:[0,.64444,0,0],49:[0,.64444,0,0],50:[0,.64444,0,0],51:[0,.64444,0,0],52:[0,.64444,0,0],53:[0,.64444,0,0],54:[0,.64444,0,0],55:[0,.64444,0,0],56:[0,.64444,0,0],57:[0,.64444,0,0],58:[0,.44444,0,0],59:[.19444,.44444,0,0],60:[.08556,.58556,0,0],61:[-.10889,.39111,0,0],62:[.08556,.58556,0,0],63:[0,.69444,0,0],64:[0,.69444,0,0],65:[0,.68611,0,0],66:[0,.68611,0,0],67:[0,.68611,0,0],68:[0,.68611,0,0],69:[0,.68611,0,0],70:[0,.68611,0,0],71:[0,.68611,0,0],72:[0,.68611,0,0],73:[0,.68611,0,0],74:[0,.68611,0,0],75:[0,.68611,0,0],76:[0,.68611,0,0],77:[0,.68611,0,0],78:[0,.68611,0,0],79:[0,.68611,0,0],80:[0,.68611,0,0],81:[.19444,.68611,0,0],82:[0,.68611,0,0],83:[0,.68611,0,0],84:[0,.68611,0,0],85:[0,.68611,0,0],86:[0,.68611,.01597,0],87:[0,.68611,.01597,0],88:[0,.68611,0,0],89:[0,.68611,.02875,0],90:[0,.68611,0,0],91:[.25,.75,0,0],92:[.25,.75,0,0],93:[.25,.75,0,0],94:[0,.69444,0,0],95:[.31,.13444,.03194,0],96:[0,.69444,0,0],97:[0,.44444,0,0],98:[0,.69444,0,0],99:[0,.44444,0,0],100:[0,.69444,0,0],101:[0,.44444,0,0],102:[0,.69444,.10903,0],103:[.19444,.44444,.01597,0],104:[0,.69444,0,0],105:[0,.69444,0,0],106:[.19444,.69444,0,0],107:[0,.69444,0,0],108:[0,.69444,0,0],109:[0,.44444,0,0],110:[0,.44444,0,0],111:[0,.44444,0,0],112:[.19444,.44444,0,0],113:[.19444,.44444,0,0],114:[0,.44444,0,0],115:[0,.44444,0,0],116:[0,.63492,0,0],117:[0,.44444,0,0],118:[0,.44444,.01597,0],119:[0,.44444,.01597,0],120:[0,.44444,0,0],121:[.19444,.44444,.01597,0],122:[0,.44444,0,0],123:[.25,.75,0,0],124:[.25,.75,0,0],125:[.25,.75,0,0],126:[.35,.34444,0,0],168:[0,.69444,0,0],172:[0,.44444,0,0],175:[0,.59611,0,0],176:[0,.69444,0,0],177:[.13333,.63333,0,0],180:[0,.69444,0,0],215:[.13333,.63333,0,0],247:[.13333,.63333,0,0],305:[0,.44444,0,0],567:[.19444,.44444,0,0],710:[0,.69444,0,0],711:[0,.63194,0,0],713:[0,.59611,0,0],714:[0,.69444,0,0],715:[0,.69444,0,0],728:[0,.69444,0,0],729:[0,.69444,0,0],730:[0,.69444,0,0],732:[0,.69444,0,0],768:[0,.69444,0,0],769:[0,.69444,0,0],770:[0,.69444,0,0],771:[0,.69444,0,0],772:[0,.59611,0,0],774:[0,.69444,0,0],775:[0,.69444,0,0],776:[0,.69444,0,0],778:[0,.69444,0,0],779:[0,.69444,0,0],780:[0,.63194,0,0],824:[.19444,.69444,0,0],915:[0,.68611,0,0],916:[0,.68611,0,0],920:[0,.68611,0,0],923:[0,.68611,0,0],926:[0,.68611,0,0],928:[0,.68611,0,0],931:[0,.68611,0,0],933:[0,.68611,0,0],934:[0,.68611,0,0],936:[0,.68611,0,0],937:[0,.68611,0,0],8211:[0,.44444,.03194,0],8212:[0,.44444,.03194,0],8216:[0,.69444,0,0],8217:[0,.69444,0,0],8220:[0,.69444,0,0],8221:[0,.69444,0,0],8224:[.19444,.69444,0,0],8225:[.19444,.69444,0,0],8242:[0,.55556,0,0],8407:[0,.72444,.15486,0],8463:[0,.69444,0,0],8465:[0,.69444,0,0],8467:[0,.69444,0,0],8472:[.19444,.44444,0,0],8476:[0,.69444,0,0],8501:[0,.69444,0,0],8592:[-.10889,.39111,0,0],8593:[.19444,.69444,0,0],8594:[-.10889,.39111,0,0],8595:[.19444,.69444,0,0],8596:[-.10889,.39111,0,0],8597:[.25,.75,0,0],8598:[.19444,.69444,0,0],8599:[.19444,.69444,0,0],8600:[.19444,.69444,0,0],8601:[.19444,.69444,0,0],8636:[-.10889,.39111,0,0],8637:[-.10889,.39111,0,0],8640:[-.10889,.39111,0,0],8641:[-.10889,.39111,0,0],8656:[-.10889,.39111,0,0],8657:[.19444,.69444,0,0],8658:[-.10889,.39111,0,0],8659:[.19444,.69444,0,0],8660:[-.10889,.39111,0,0],8661:[.25,.75,0,0],8704:[0,.69444,0,0],8706:[0,.69444,.06389,0],8707:[0,.69444,0,0],8709:[.05556,.75,0,0],8711:[0,.68611,0,0],8712:[.08556,.58556,0,0],8715:[.08556,.58556,0,0],8722:[.13333,.63333,0,0],8723:[.13333,.63333,0,0],8725:[.25,.75,0,0],8726:[.25,.75,0,0],8727:[-.02778,.47222,0,0],8728:[-.02639,.47361,0,0],8729:[-.02639,.47361,0,0],8730:[.18,.82,0,0],8733:[0,.44444,0,0],8734:[0,.44444,0,0],8736:[0,.69224,0,0],8739:[.25,.75,0,0],8741:[.25,.75,0,0],8743:[0,.55556,0,0],8744:[0,.55556,0,0],8745:[0,.55556,0,0],8746:[0,.55556,0,0],8747:[.19444,.69444,.12778,0],8764:[-.10889,.39111,0,0],8768:[.19444,.69444,0,0],8771:[.00222,.50222,0,0],8776:[.02444,.52444,0,0],8781:[.00222,.50222,0,0],8801:[.00222,.50222,0,0],8804:[.19667,.69667,0,0],8805:[.19667,.69667,0,0],8810:[.08556,.58556,0,0],8811:[.08556,.58556,0,0],8826:[.08556,.58556,0,0],8827:[.08556,.58556,0,0],8834:[.08556,.58556,0,0],8835:[.08556,.58556,0,0],8838:[.19667,.69667,0,0],8839:[.19667,.69667,0,0],8846:[0,.55556,0,0],8849:[.19667,.69667,0,0],8850:[.19667,.69667,0,0],8851:[0,.55556,0,0],8852:[0,.55556,0,0],8853:[.13333,.63333,0,0],8854:[.13333,.63333,0,0],8855:[.13333,.63333,0,0],8856:[.13333,.63333,0,0],8857:[.13333,.63333,0,0],8866:[0,.69444,0,0],8867:[0,.69444,0,0],8868:[0,.69444,0,0],8869:[0,.69444,0,0],8900:[-.02639,.47361,0,0],8901:[-.02639,.47361,0,0],8902:[-.02778,.47222,0,0],8968:[.25,.75,0,0],8969:[.25,.75,0,0],8970:[.25,.75,0,0],8971:[.25,.75,0,0],8994:[-.13889,.36111,0,0],8995:[-.13889,.36111,0,0],9651:[.19444,.69444,0,0],9657:[-.02778,.47222,0,0],9661:[.19444,.69444,0,0],9667:[-.02778,.47222,0,0],9711:[.19444,.69444,0,0],9824:[.12963,.69444,0,0],9825:[.12963,.69444,0,0],9826:[.12963,.69444,0,0],9827:[.12963,.69444,0,0],9837:[0,.75,0,0],9838:[.19444,.69444,0,0],9839:[.19444,.69444,0,0],10216:[.25,.75,0,0],10217:[.25,.75,0,0],10815:[0,.68611,0,0],10927:[.19667,.69667,0,0],10928:[.19667,.69667,0,0]},"Main-Italic":{33:[0,.69444,.12417,0],34:[0,.69444,.06961,0],35:[.19444,.69444,.06616,0],37:[.05556,.75,.13639,0],38:[0,.69444,.09694,0],39:[0,.69444,.12417,0],40:[.25,.75,.16194,0],41:[.25,.75,.03694,0],42:[0,.75,.14917,0],43:[.05667,.56167,.03694,0],44:[.19444,.10556,0,0],45:[0,.43056,.02826,0],46:[0,.10556,0,0],47:[.25,.75,.16194,0],48:[0,.64444,.13556,0],49:[0,.64444,.13556,0],50:[0,.64444,.13556,0],51:[0,.64444,.13556,0],52:[.19444,.64444,.13556,0],53:[0,.64444,.13556,0],54:[0,.64444,.13556,0],55:[.19444,.64444,.13556,0],56:[0,.64444,.13556,0],57:[0,.64444,.13556,0],58:[0,.43056,.0582,0],59:[.19444,.43056,.0582,0],61:[-.13313,.36687,.06616,0],63:[0,.69444,.1225,0],64:[0,.69444,.09597,0],65:[0,.68333,0,0],66:[0,.68333,.10257,0],67:[0,.68333,.14528,0],68:[0,.68333,.09403,0],69:[0,.68333,.12028,0],70:[0,.68333,.13305,0],71:[0,.68333,.08722,0],72:[0,.68333,.16389,0],73:[0,.68333,.15806,0],74:[0,.68333,.14028,0],75:[0,.68333,.14528,0],76:[0,.68333,0,0],77:[0,.68333,.16389,0],78:[0,.68333,.16389,0],79:[0,.68333,.09403,0],80:[0,.68333,.10257,0],81:[.19444,.68333,.09403,0],82:[0,.68333,.03868,0],83:[0,.68333,.11972,0],84:[0,.68333,.13305,0],85:[0,.68333,.16389,0],86:[0,.68333,.18361,0],87:[0,.68333,.18361,0],88:[0,.68333,.15806,0],89:[0,.68333,.19383,0],90:[0,.68333,.14528,0],91:[.25,.75,.1875,0],93:[.25,.75,.10528,0],94:[0,.69444,.06646,0],95:[.31,.12056,.09208,0],97:[0,.43056,.07671,0],98:[0,.69444,.06312,0],99:[0,.43056,.05653,0],100:[0,.69444,.10333,0],101:[0,.43056,.07514,0],102:[.19444,.69444,.21194,0],103:[.19444,.43056,.08847,0],104:[0,.69444,.07671,0],105:[0,.65536,.1019,0],106:[.19444,.65536,.14467,0],107:[0,.69444,.10764,0],108:[0,.69444,.10333,0],109:[0,.43056,.07671,0],110:[0,.43056,.07671,0],111:[0,.43056,.06312,0],112:[.19444,.43056,.06312,0],113:[.19444,.43056,.08847,0],114:[0,.43056,.10764,0],115:[0,.43056,.08208,0],116:[0,.61508,.09486,0],117:[0,.43056,.07671,0],118:[0,.43056,.10764,0],119:[0,.43056,.10764,0],120:[0,.43056,.12042,0],121:[.19444,.43056,.08847,0],122:[0,.43056,.12292,0],126:[.35,.31786,.11585,0],163:[0,.69444,0,0],305:[0,.43056,0,.02778],567:[.19444,.43056,0,.08334],768:[0,.69444,0,0],769:[0,.69444,.09694,0],770:[0,.69444,.06646,0],771:[0,.66786,.11585,0],772:[0,.56167,.10333,0],774:[0,.69444,.10806,0],775:[0,.66786,.11752,0],776:[0,.66786,.10474,0],778:[0,.69444,0,0],779:[0,.69444,.1225,0],780:[0,.62847,.08295,0],915:[0,.68333,.13305,0],916:[0,.68333,0,0],920:[0,.68333,.09403,0],923:[0,.68333,0,0],926:[0,.68333,.15294,0],928:[0,.68333,.16389,0],931:[0,.68333,.12028,0],933:[0,.68333,.11111,0],934:[0,.68333,.05986,0],936:[0,.68333,.11111,0],937:[0,.68333,.10257,0],8211:[0,.43056,.09208,0],8212:[0,.43056,.09208,0],8216:[0,.69444,.12417,0],8217:[0,.69444,.12417,0],8220:[0,.69444,.1685,0],8221:[0,.69444,.06961,0],8463:[0,.68889,0,0]},"Main-Regular":{32:[0,0,0,0],33:[0,.69444,0,0],34:[0,.69444,0,0],35:[.19444,.69444,0,0],36:[.05556,.75,0,0],37:[.05556,.75,0,0],38:[0,.69444,0,0],39:[0,.69444,0,0],40:[.25,.75,0,0],41:[.25,.75,0,0],42:[0,.75,0,0],43:[.08333,.58333,0,0],44:[.19444,.10556,0,0],45:[0,.43056,0,0],46:[0,.10556,0,0],47:[.25,.75,0,0],48:[0,.64444,0,0],49:[0,.64444,0,0],50:[0,.64444,0,0],51:[0,.64444,0,0],52:[0,.64444,0,0],53:[0,.64444,0,0],54:[0,.64444,0,0],55:[0,.64444,0,0],56:[0,.64444,0,0],57:[0,.64444,0,0],58:[0,.43056,0,0],59:[.19444,.43056,0,0],60:[.0391,.5391,0,0],61:[-.13313,.36687,0,0],62:[.0391,.5391,0,0],63:[0,.69444,0,0],64:[0,.69444,0,0],65:[0,.68333,0,0],66:[0,.68333,0,0],67:[0,.68333,0,0],68:[0,.68333,0,0],69:[0,.68333,0,0],70:[0,.68333,0,0],71:[0,.68333,0,0],72:[0,.68333,0,0],73:[0,.68333,0,0],74:[0,.68333,0,0],75:[0,.68333,0,0],76:[0,.68333,0,0],77:[0,.68333,0,0],78:[0,.68333,0,0],79:[0,.68333,0,0],80:[0,.68333,0,0],81:[.19444,.68333,0,0],82:[0,.68333,0,0],83:[0,.68333,0,0],84:[0,.68333,0,0],85:[0,.68333,0,0],86:[0,.68333,.01389,0],87:[0,.68333,.01389,0],88:[0,.68333,0,0],89:[0,.68333,.025,0],90:[0,.68333,0,0],91:[.25,.75,0,0],92:[.25,.75,0,0],93:[.25,.75,0,0],94:[0,.69444,0,0],95:[.31,.12056,.02778,0],96:[0,.69444,0,0],97:[0,.43056,0,0],98:[0,.69444,0,0],99:[0,.43056,0,0],100:[0,.69444,0,0],101:[0,.43056,0,0],102:[0,.69444,.07778,0],103:[.19444,.43056,.01389,0],104:[0,.69444,0,0],105:[0,.66786,0,0],106:[.19444,.66786,0,0],107:[0,.69444,0,0],108:[0,.69444,0,0],109:[0,.43056,0,0],110:[0,.43056,0,0],111:[0,.43056,0,0],112:[.19444,.43056,0,0],113:[.19444,.43056,0,0],114:[0,.43056,0,0],115:[0,.43056,0,0],116:[0,.61508,0,0],117:[0,.43056,0,0],118:[0,.43056,.01389,0],119:[0,.43056,.01389,0],120:[0,.43056,0,0],121:[.19444,.43056,.01389,0],122:[0,.43056,0,0],123:[.25,.75,0,0],124:[.25,.75,0,0],125:[.25,.75,0,0],126:[.35,.31786,0,0],160:[0,0,0,0],168:[0,.66786,0,0],172:[0,.43056,0,0],175:[0,.56778,0,0],176:[0,.69444,0,0],177:[.08333,.58333,0,0],180:[0,.69444,0,0],215:[.08333,.58333,0,0],247:[.08333,.58333,0,0],305:[0,.43056,0,0],567:[.19444,.43056,0,0],710:[0,.69444,0,0],711:[0,.62847,0,0],713:[0,.56778,0,0],714:[0,.69444,0,0],715:[0,.69444,0,0],728:[0,.69444,0,0],729:[0,.66786,0,0],730:[0,.69444,0,0],732:[0,.66786,0,0],768:[0,.69444,0,0],769:[0,.69444,0,0],770:[0,.69444,0,0],771:[0,.66786,0,0],772:[0,.56778,0,0],774:[0,.69444,0,0],775:[0,.66786,0,0],776:[0,.66786,0,0],778:[0,.69444,0,0],779:[0,.69444,0,0],780:[0,.62847,0,0],824:[.19444,.69444,0,0],915:[0,.68333,0,0],916:[0,.68333,0,0],920:[0,.68333,0,0],923:[0,.68333,0,0],926:[0,.68333,0,0],928:[0,.68333,0,0],931:[0,.68333,0,0],933:[0,.68333,0,0],934:[0,.68333,0,0],936:[0,.68333,0,0],937:[0,.68333,0,0],8211:[0,.43056,.02778,0],8212:[0,.43056,.02778,0],8216:[0,.69444,0,0],8217:[0,.69444,0,0],8220:[0,.69444,0,0],8221:[0,.69444,0,0],8224:[.19444,.69444,0,0],8225:[.19444,.69444,0,0],8230:[0,.12,0,0],8242:[0,.55556,0,0],8407:[0,.71444,.15382,0],8463:[0,.68889,0,0],8465:[0,.69444,0,0],8467:[0,.69444,0,.11111],8472:[.19444,.43056,0,.11111],8476:[0,.69444,0,0],8501:[0,.69444,0,0],8592:[-.13313,.36687,0,0],8593:[.19444,.69444,0,0],8594:[-.13313,.36687,0,0],8595:[.19444,.69444,0,0],8596:[-.13313,.36687,0,0],8597:[.25,.75,0,0],8598:[.19444,.69444,0,0],8599:[.19444,.69444,0,0],8600:[.19444,.69444,0,0],8601:[.19444,.69444,0,0],8614:[.011,.511,0,0],8617:[.011,.511,0,0],8618:[.011,.511,0,0],8636:[-.13313,.36687,0,0],8637:[-.13313,.36687,0,0],8640:[-.13313,.36687,0,0],8641:[-.13313,.36687,0,0],8652:[.011,.671,0,0],8656:[-.13313,.36687,0,0],8657:[.19444,.69444,0,0],8658:[-.13313,.36687,0,0],8659:[.19444,.69444,0,0],8660:[-.13313,.36687,0,0],8661:[.25,.75,0,0],8704:[0,.69444,0,0],8706:[0,.69444,.05556,.08334],8707:[0,.69444,0,0],8709:[.05556,.75,0,0],8711:[0,.68333,0,0],8712:[.0391,.5391,0,0],8715:[.0391,.5391,0,0],8722:[.08333,.58333,0,0],8723:[.08333,.58333,0,0],8725:[.25,.75,0,0],8726:[.25,.75,0,0],8727:[-.03472,.46528,0,0],8728:[-.05555,.44445,0,0],8729:[-.05555,.44445,0,0],8730:[.2,.8,0,0],8733:[0,.43056,0,0],8734:[0,.43056,0,0],8736:[0,.69224,0,0],8739:[.25,.75,0,0],8741:[.25,.75,0,0],8743:[0,.55556,0,0],8744:[0,.55556,0,0],8745:[0,.55556,0,0],8746:[0,.55556,0,0],8747:[.19444,.69444,.11111,0],8764:[-.13313,.36687,0,0],8768:[.19444,.69444,0,0],8771:[-.03625,.46375,0,0],8773:[-.022,.589,0,0],8776:[-.01688,.48312,0,0],8781:[-.03625,.46375,0,0],8784:[-.133,.67,0,0],8800:[.215,.716,0,0],8801:[-.03625,.46375,0,0],8804:[.13597,.63597,0,0],8805:[.13597,.63597,0,0],8810:[.0391,.5391,0,0],8811:[.0391,.5391,0,0],8826:[.0391,.5391,0,0],8827:[.0391,.5391,0,0],8834:[.0391,.5391,0,0],8835:[.0391,.5391,0,0],8838:[.13597,.63597,0,0],8839:[.13597,.63597,0,0],8846:[0,.55556,0,0],8849:[.13597,.63597,0,0],8850:[.13597,.63597,0,0],8851:[0,.55556,0,0],8852:[0,.55556,0,0],8853:[.08333,.58333,0,0],8854:[.08333,.58333,0,0],8855:[.08333,.58333,0,0],8856:[.08333,.58333,0,0],8857:[.08333,.58333,0,0],8866:[0,.69444,0,0],8867:[0,.69444,0,0],8868:[0,.69444,0,0],8869:[0,.69444,0,0],8872:[.249,.75,0,0],8900:[-.05555,.44445,0,0],8901:[-.05555,.44445,0,0],8902:[-.03472,.46528,0,0],8904:[.005,.505,0,0],8942:[.03,.9,0,0],8943:[-.19,.31,0,0],8945:[-.1,.82,0,0],8968:[.25,.75,0,0],8969:[.25,.75,0,0],8970:[.25,.75,0,0],8971:[.25,.75,0,0],8994:[-.14236,.35764,0,0],8995:[-.14236,.35764,0,0],9136:[.244,.744,0,0],9137:[.244,.744,0,0],9651:[.19444,.69444,0,0],9657:[-.03472,.46528,0,0],9661:[.19444,.69444,0,0],9667:[-.03472,.46528,0,0],9711:[.19444,.69444,0,0],9824:[.12963,.69444,0,0],9825:[.12963,.69444,0,0],9826:[.12963,.69444,0,0],9827:[.12963,.69444,0,0],9837:[0,.75,0,0],9838:[.19444,.69444,0,0],9839:[.19444,.69444,0,0],10216:[.25,.75,0,0],10217:[.25,.75,0,0],10222:[.244,.744,0,0],10223:[.244,.744,0,0],10229:[.011,.511,0,0],10230:[.011,.511,0,0],10231:[.011,.511,0,0],10232:[.024,.525,0,0],10233:[.024,.525,0,0],10234:[.024,.525,0,0],10236:[.011,.511,0,0],10815:[0,.68333,0,0],10927:[.13597,.63597,0,0],10928:[.13597,.63597,0,0]},"Math-BoldItalic":{47:[.19444,.69444,0,0],65:[0,.68611,0,0],66:[0,.68611,.04835,0],67:[0,.68611,.06979,0],68:[0,.68611,.03194,0],69:[0,.68611,.05451,0],70:[0,.68611,.15972,0],71:[0,.68611,0,0],72:[0,.68611,.08229,0],73:[0,.68611,.07778,0],74:[0,.68611,.10069,0],75:[0,.68611,.06979,0],76:[0,.68611,0,0],77:[0,.68611,.11424,0],78:[0,.68611,.11424,0],79:[0,.68611,.03194,0],80:[0,.68611,.15972,0],81:[.19444,.68611,0,0],82:[0,.68611,.00421,0],83:[0,.68611,.05382,0],84:[0,.68611,.15972,0],85:[0,.68611,.11424,0],86:[0,.68611,.25555,0],87:[0,.68611,.15972,0],88:[0,.68611,.07778,0],89:[0,.68611,.25555,0],90:[0,.68611,.06979,0],97:[0,.44444,0,0],98:[0,.69444,0,0],99:[0,.44444,0,0],100:[0,.69444,0,0],101:[0,.44444,0,0],102:[.19444,.69444,.11042,0],103:[.19444,.44444,.03704,0],104:[0,.69444,0,0],105:[0,.69326,0,0],106:[.19444,.69326,.0622,0],107:[0,.69444,.01852,0],108:[0,.69444,.0088,0],109:[0,.44444,0,0],110:[0,.44444,0,0],111:[0,.44444,0,0],112:[.19444,.44444,0,0],113:[.19444,.44444,.03704,0],114:[0,.44444,.03194,0],115:[0,.44444,0,0],116:[0,.63492,0,0],117:[0,.44444,0,0],118:[0,.44444,.03704,0],119:[0,.44444,.02778,0],120:[0,.44444,0,0],121:[.19444,.44444,.03704,0],122:[0,.44444,.04213,0],915:[0,.68611,.15972,0],916:[0,.68611,0,0],920:[0,.68611,.03194,0],923:[0,.68611,0,0],926:[0,.68611,.07458,0],928:[0,.68611,.08229,0],931:[0,.68611,.05451,0],933:[0,.68611,.15972,0],934:[0,.68611,0,0],936:[0,.68611,.11653,0],937:[0,.68611,.04835,0],945:[0,.44444,0,0],946:[.19444,.69444,.03403,0],947:[.19444,.44444,.06389,0],948:[0,.69444,.03819,0],949:[0,.44444,0,0],950:[.19444,.69444,.06215,0],951:[.19444,.44444,.03704,0],952:[0,.69444,.03194,0],953:[0,.44444,0,0],954:[0,.44444,0,0],955:[0,.69444,0,0],956:[.19444,.44444,0,0],957:[0,.44444,.06898,0],958:[.19444,.69444,.03021,0],959:[0,.44444,0,0],960:[0,.44444,.03704,0],961:[.19444,.44444,0,0],962:[.09722,.44444,.07917,0],963:[0,.44444,.03704,0],964:[0,.44444,.13472,0],965:[0,.44444,.03704,0],966:[.19444,.44444,0,0],967:[.19444,.44444,0,0],968:[.19444,.69444,.03704,0],969:[0,.44444,.03704,0],977:[0,.69444,0,0],981:[.19444,.69444,0,0],982:[0,.44444,.03194,0],1009:[.19444,.44444,0,0],1013:[0,.44444,0,0]},"Math-Italic":{47:[.19444,.69444,0,0],65:[0,.68333,0,.13889],66:[0,.68333,.05017,.08334],67:[0,.68333,.07153,.08334],68:[0,.68333,.02778,.05556],69:[0,.68333,.05764,.08334],70:[0,.68333,.13889,.08334],71:[0,.68333,0,.08334],72:[0,.68333,.08125,.05556],73:[0,.68333,.07847,.11111],74:[0,.68333,.09618,.16667],75:[0,.68333,.07153,.05556],76:[0,.68333,0,.02778],77:[0,.68333,.10903,.08334],78:[0,.68333,.10903,.08334],79:[0,.68333,.02778,.08334],80:[0,.68333,.13889,.08334],81:[.19444,.68333,0,.08334],82:[0,.68333,.00773,.08334],83:[0,.68333,.05764,.08334],84:[0,.68333,.13889,.08334],85:[0,.68333,.10903,.02778],86:[0,.68333,.22222,0],87:[0,.68333,.13889,0],88:[0,.68333,.07847,.08334],89:[0,.68333,.22222,0],90:[0,.68333,.07153,.08334],97:[0,.43056,0,0],98:[0,.69444,0,0],99:[0,.43056,0,.05556],100:[0,.69444,0,.16667],101:[0,.43056,0,.05556],102:[.19444,.69444,.10764,.16667],103:[.19444,.43056,.03588,.02778],104:[0,.69444,0,0],105:[0,.65952,0,0],106:[.19444,.65952,.05724,0],107:[0,.69444,.03148,0],108:[0,.69444,.01968,.08334],109:[0,.43056,0,0],110:[0,.43056,0,0],111:[0,.43056,0,.05556],112:[.19444,.43056,0,.08334],113:[.19444,.43056,.03588,.08334],114:[0,.43056,.02778,.05556],115:[0,.43056,0,.05556],116:[0,.61508,0,.08334],117:[0,.43056,0,.02778],118:[0,.43056,.03588,.02778],119:[0,.43056,.02691,.08334],120:[0,.43056,0,.02778],121:[.19444,.43056,.03588,.05556],122:[0,.43056,.04398,.05556],915:[0,.68333,.13889,.08334],916:[0,.68333,0,.16667],920:[0,.68333,.02778,.08334],923:[0,.68333,0,.16667],926:[0,.68333,.07569,.08334],928:[0,.68333,.08125,.05556],931:[0,.68333,.05764,.08334],933:[0,.68333,.13889,.05556],934:[0,.68333,0,.08334],936:[0,.68333,.11,.05556],937:[0,.68333,.05017,.08334],945:[0,.43056,.0037,.02778],946:[.19444,.69444,.05278,.08334],947:[.19444,.43056,.05556,0],948:[0,.69444,.03785,.05556],949:[0,.43056,0,.08334],950:[.19444,.69444,.07378,.08334],951:[.19444,.43056,.03588,.05556],952:[0,.69444,.02778,.08334],953:[0,.43056,0,.05556],954:[0,.43056,0,0],955:[0,.69444,0,0],956:[.19444,.43056,0,.02778],957:[0,.43056,.06366,.02778],958:[.19444,.69444,.04601,.11111],959:[0,.43056,0,.05556],960:[0,.43056,.03588,0],961:[.19444,.43056,0,.08334],962:[.09722,.43056,.07986,.08334],963:[0,.43056,.03588,0],964:[0,.43056,.1132,.02778],965:[0,.43056,.03588,.02778],966:[.19444,.43056,0,.08334],967:[.19444,.43056,0,.05556],968:[.19444,.69444,.03588,.11111],969:[0,.43056,.03588,0],977:[0,.69444,0,.08334],981:[.19444,.69444,0,.08334],982:[0,.43056,.02778,0],1009:[.19444,.43056,0,.08334],1013:[0,.43056,0,.05556]},"Math-Regular":{65:[0,.68333,0,.13889],66:[0,.68333,.05017,.08334],67:[0,.68333,.07153,.08334],68:[0,.68333,.02778,.05556],69:[0,.68333,.05764,.08334],70:[0,.68333,.13889,.08334],71:[0,.68333,0,.08334],72:[0,.68333,.08125,.05556],73:[0,.68333,.07847,.11111],74:[0,.68333,.09618,.16667],75:[0,.68333,.07153,.05556],76:[0,.68333,0,.02778],77:[0,.68333,.10903,.08334],78:[0,.68333,.10903,.08334],79:[0,.68333,.02778,.08334],80:[0,.68333,.13889,.08334],81:[.19444,.68333,0,.08334],82:[0,.68333,.00773,.08334],83:[0,.68333,.05764,.08334],84:[0,.68333,.13889,.08334],85:[0,.68333,.10903,.02778],86:[0,.68333,.22222,0],87:[0,.68333,.13889,0],88:[0,.68333,.07847,.08334],89:[0,.68333,.22222,0],90:[0,.68333,.07153,.08334],97:[0,.43056,0,0],98:[0,.69444,0,0],99:[0,.43056,0,.05556],100:[0,.69444,0,.16667],101:[0,.43056,0,.05556],102:[.19444,.69444,.10764,.16667],103:[.19444,.43056,.03588,.02778],104:[0,.69444,0,0],105:[0,.65952,0,0],106:[.19444,.65952,.05724,0],107:[0,.69444,.03148,0],108:[0,.69444,.01968,.08334],109:[0,.43056,0,0],110:[0,.43056,0,0],111:[0,.43056,0,.05556],112:[.19444,.43056,0,.08334],113:[.19444,.43056,.03588,.08334],114:[0,.43056,.02778,.05556],115:[0,.43056,0,.05556],116:[0,.61508,0,.08334],117:[0,.43056,0,.02778],118:[0,.43056,.03588,.02778],119:[0,.43056,.02691,.08334],120:[0,.43056,0,.02778],121:[.19444,.43056,.03588,.05556],122:[0,.43056,.04398,.05556],915:[0,.68333,.13889,.08334],916:[0,.68333,0,.16667],920:[0,.68333,.02778,.08334],923:[0,.68333,0,.16667],926:[0,.68333,.07569,.08334],928:[0,.68333,.08125,.05556],931:[0,.68333,.05764,.08334],933:[0,.68333,.13889,.05556],934:[0,.68333,0,.08334],936:[0,.68333,.11,.05556],937:[0,.68333,.05017,.08334],945:[0,.43056,.0037,.02778],946:[.19444,.69444,.05278,.08334],947:[.19444,.43056,.05556,0],948:[0,.69444,.03785,.05556],949:[0,.43056,0,.08334],950:[.19444,.69444,.07378,.08334],951:[.19444,.43056,.03588,.05556],952:[0,.69444,.02778,.08334],953:[0,.43056,0,.05556],954:[0,.43056,0,0],955:[0,.69444,0,0],956:[.19444,.43056,0,.02778],957:[0,.43056,.06366,.02778],958:[.19444,.69444,.04601,.11111],959:[0,.43056,0,.05556],960:[0,.43056,.03588,0],961:[.19444,.43056,0,.08334],962:[.09722,.43056,.07986,.08334],963:[0,.43056,.03588,0],964:[0,.43056,.1132,.02778],965:[0,.43056,.03588,.02778],966:[.19444,.43056,0,.08334],967:[.19444,.43056,0,.05556],968:[.19444,.69444,.03588,.11111],969:[0,.43056,.03588,0],977:[0,.69444,0,.08334],981:[.19444,.69444,0,.08334],982:[0,.43056,.02778,0],1009:[.19444,.43056,0,.08334],1013:[0,.43056,0,.05556]},"SansSerif-Regular":{33:[0,.69444,0,0],34:[0,.69444,0,0],35:[.19444,.69444,0,0],36:[.05556,.75,0,0],37:[.05556,.75,0,0],38:[0,.69444,0,0],39:[0,.69444,0,0],40:[.25,.75,0,0],41:[.25,.75,0,0],42:[0,.75,0,0],43:[.08333,.58333,0,0],44:[.125,.08333,0,0],45:[0,.44444,0,0],46:[0,.08333,0,0],47:[.25,.75,0,0],48:[0,.65556,0,0],49:[0,.65556,0,0],50:[0,.65556,0,0],51:[0,.65556,0,0],52:[0,.65556,0,0],53:[0,.65556,0,0],54:[0,.65556,0,0],55:[0,.65556,0,0],56:[0,.65556,0,0],57:[0,.65556,0,0],58:[0,.44444,0,0],59:[.125,.44444,0,0],61:[-.13,.37,0,0],63:[0,.69444,0,0],64:[0,.69444,0,0],65:[0,.69444,0,0],66:[0,.69444,0,0],67:[0,.69444,0,0],68:[0,.69444,0,0],69:[0,.69444,0,0],70:[0,.69444,0,0],71:[0,.69444,0,0],72:[0,.69444,0,0],73:[0,.69444,0,0],74:[0,.69444,0,0],75:[0,.69444,0,0],76:[0,.69444,0,0],77:[0,.69444,0,0],78:[0,.69444,0,0],79:[0,.69444,0,0],80:[0,.69444,0,0],81:[.125,.69444,0,0],82:[0,.69444,0,0],83:[0,.69444,0,0],84:[0,.69444,0,0],85:[0,.69444,0,0],86:[0,.69444,.01389,0],87:[0,.69444,.01389,0],88:[0,.69444,0,0],89:[0,.69444,.025,0],90:[0,.69444,0,0],91:[.25,.75,0,0],93:[.25,.75,0,0],94:[0,.69444,0,0],95:[.35,.09444,.02778,0],97:[0,.44444,0,0],98:[0,.69444,0,0],99:[0,.44444,0,0],100:[0,.69444,0,0],101:[0,.44444,0,0],102:[0,.69444,.06944,0],103:[.19444,.44444,.01389,0],104:[0,.69444,0,0],105:[0,.67937,0,0],106:[.19444,.67937,0,0],107:[0,.69444,0,0],108:[0,.69444,0,0],109:[0,.44444,0,0],110:[0,.44444,0,0],111:[0,.44444,0,0],112:[.19444,.44444,0,0],113:[.19444,.44444,0,0],114:[0,.44444,.01389,0],115:[0,.44444,0,0],116:[0,.57143,0,0],117:[0,.44444,0,0],118:[0,.44444,.01389,0],119:[0,.44444,.01389,0],120:[0,.44444,0,0],121:[.19444,.44444,.01389,0],122:[0,.44444,0,0],126:[.35,.32659,0,0],305:[0,.44444,0,0],567:[.19444,.44444,0,0],768:[0,.69444,0,0],769:[0,.69444,0,0],770:[0,.69444,0,0],771:[0,.67659,0,0],772:[0,.60889,0,0],774:[0,.69444,0,0],775:[0,.67937,0,0],776:[0,.67937,0,0],778:[0,.69444,0,0],779:[0,.69444,0,0],780:[0,.63194,0,0],915:[0,.69444,0,0],916:[0,.69444,0,0],920:[0,.69444,0,0],923:[0,.69444,0,0],926:[0,.69444,0,0],928:[0,.69444,0,0],931:[0,.69444,0,0],933:[0,.69444,0,0],934:[0,.69444,0,0],936:[0,.69444,0,0],937:[0,.69444,0,0],8211:[0,.44444,.02778,0],8212:[0,.44444,.02778,0],8216:[0,.69444,0,0],8217:[0,.69444,0,0],8220:[0,.69444,0,0],8221:[0,.69444,0,0]},"Script-Regular":{65:[0,.7,.22925,0],66:[0,.7,.04087,0],67:[0,.7,.1689,0],68:[0,.7,.09371,0],69:[0,.7,.18583,0],70:[0,.7,.13634,0],71:[0,.7,.17322,0],72:[0,.7,.29694,0],73:[0,.7,.19189,0],74:[.27778,.7,.19189,0],75:[0,.7,.31259,0],76:[0,.7,.19189,0],77:[0,.7,.15981,0],78:[0,.7,.3525,0],79:[0,.7,.08078,0],80:[0,.7,.08078,0],81:[0,.7,.03305,0],82:[0,.7,.06259,0],83:[0,.7,.19189,0],84:[0,.7,.29087,0],85:[0,.7,.25815,0],86:[0,.7,.27523,0],87:[0,.7,.27523,0],88:[0,.7,.26006,0],89:[0,.7,.2939,0],90:[0,.7,.24037,0]},"Size1-Regular":{40:[.35001,.85,0,0],41:[.35001,.85,0,0],47:[.35001,.85,0,0],91:[.35001,.85,0,0],92:[.35001,.85,0,0],93:[.35001,.85,0,0],123:[.35001,.85,0,0],125:[.35001,.85,0,0],710:[0,.72222,0,0],732:[0,.72222,0,0],770:[0,.72222,0,0],771:[0,.72222,0,0],8214:[-99e-5,.601,0,0],8593:[1e-5,.6,0,0],8595:[1e-5,.6,0,0],8657:[1e-5,.6,0,0],8659:[1e-5,.6,0,0],8719:[.25001,.75,0,0],8720:[.25001,.75,0,0],8721:[.25001,.75,0,0],8730:[.35001,.85,0,0],8739:[-.00599,.606,0,0],8741:[-.00599,.606,0,0],8747:[.30612,.805,.19445,0],8748:[.306,.805,.19445,0],8749:[.306,.805,.19445,0],8750:[.30612,.805,.19445,0],8896:[.25001,.75,0,0],8897:[.25001,.75,0,0],8898:[.25001,.75,0,0],8899:[.25001,.75,0,0],8968:[.35001,.85,0,0],8969:[.35001,.85,0,0],8970:[.35001,.85,0,0],8971:[.35001,.85,0,0],9168:[-99e-5,.601,0,0],10216:[.35001,.85,0,0],10217:[.35001,.85,0,0],10752:[.25001,.75,0,0],10753:[.25001,.75,0,0],10754:[.25001,.75,0,0],10756:[.25001,.75,0,0],10758:[.25001,.75,0,0]},"Size2-Regular":{40:[.65002,1.15,0,0],41:[.65002,1.15,0,0],47:[.65002,1.15,0,0],91:[.65002,1.15,0,0],92:[.65002,1.15,0,0],93:[.65002,1.15,0,0],123:[.65002,1.15,0,0],125:[.65002,1.15,0,0],710:[0,.75,0,0],732:[0,.75,0,0],770:[0,.75,0,0],771:[0,.75,0,0],8719:[.55001,1.05,0,0],8720:[.55001,1.05,0,0],8721:[.55001,1.05,0,0],8730:[.65002,1.15,0,0],8747:[.86225,1.36,.44445,0],8748:[.862,1.36,.44445,0],8749:[.862,1.36,.44445,0],8750:[.86225,1.36,.44445,0],8896:[.55001,1.05,0,0],8897:[.55001,1.05,0,0],8898:[.55001,1.05,0,0],8899:[.55001,1.05,0,0],8968:[.65002,1.15,0,0],8969:[.65002,1.15,0,0],8970:[.65002,1.15,0,0],8971:[.65002,1.15,0,0],10216:[.65002,1.15,0,0],10217:[.65002,1.15,0,0],10752:[.55001,1.05,0,0],10753:[.55001,1.05,0,0],10754:[.55001,1.05,0,0],10756:[.55001,1.05,0,0],10758:[.55001,1.05,0,0]},"Size3-Regular":{40:[.95003,1.45,0,0],41:[.95003,1.45,0,0],47:[.95003,1.45,0,0],91:[.95003,1.45,0,0],92:[.95003,1.45,0,0],93:[.95003,1.45,0,0],123:[.95003,1.45,0,0],125:[.95003,1.45,0,0],710:[0,.75,0,0],732:[0,.75,0,0],770:[0,.75,0,0],771:[0,.75,0,0],8730:[.95003,1.45,0,0],8968:[.95003,1.45,0,0],8969:[.95003,1.45,0,0],8970:[.95003,1.45,0,0],8971:[.95003,1.45,0,0],10216:[.95003,1.45,0,0],10217:[.95003,1.45,0,0]},"Size4-Regular":{40:[1.25003,1.75,0,0],41:[1.25003,1.75,0,0],47:[1.25003,1.75,0,0],91:[1.25003,1.75,0,0],92:[1.25003,1.75,0,0],93:[1.25003,1.75,0,0],123:[1.25003,1.75,0,0],125:[1.25003,1.75,0,0],710:[0,.825,0,0],732:[0,.825,0,0],770:[0,.825,0,0],771:[0,.825,0,0],8730:[1.25003,1.75,0,0],8968:[1.25003,1.75,0,0],8969:[1.25003,1.75,0,0],8970:[1.25003,1.75,0,0],8971:[1.25003,1.75,0,0],9115:[.64502,1.155,0,0],9116:[1e-5,.6,0,0],9117:[.64502,1.155,0,0],9118:[.64502,1.155,0,0],9119:[1e-5,.6,0,0],9120:[.64502,1.155,0,0],9121:[.64502,1.155,0,0],9122:[-99e-5,.601,0,0],9123:[.64502,1.155,0,0],9124:[.64502,1.155,0,0],9125:[-99e-5,.601,0,0],9126:[.64502,1.155,0,0],9127:[1e-5,.9,0,0],9128:[.65002,1.15,0,0],9129:[.90001,0,0,0],9130:[0,.3,0,0],9131:[1e-5,.9,0,0],9132:[.65002,1.15,0,0],9133:[.90001,0,0,0],9143:[.88502,.915,0,0],10216:[1.25003,1.75,0,0],10217:[1.25003,1.75,0,0],57344:[-.00499,.605,0,0],57345:[-.00499,.605,0,0],57680:[0,.12,0,0],57681:[0,.12,0,0],57682:[0,.12,0,0],57683:[0,.12,0,0]},"Typewriter-Regular":{33:[0,.61111,0,0],34:[0,.61111,0,0],35:[0,.61111,0,0],36:[.08333,.69444,0,0],37:[.08333,.69444,0,0],38:[0,.61111,0,0],39:[0,.61111,0,0],40:[.08333,.69444,0,0],41:[.08333,.69444,0,0],42:[0,.52083,0,0],43:[-.08056,.53055,0,0],44:[.13889,.125,0,0],45:[-.08056,.53055,0,0],46:[0,.125,0,0],47:[.08333,.69444,0,0],48:[0,.61111,0,0],49:[0,.61111,0,0],50:[0,.61111,0,0],51:[0,.61111,0,0],52:[0,.61111,0,0],53:[0,.61111,0,0],54:[0,.61111,0,0],55:[0,.61111,0,0],56:[0,.61111,0,0],57:[0,.61111,0,0],58:[0,.43056,0,0],59:[.13889,.43056,0,0],60:[-.05556,.55556,0,0],61:[-.19549,.41562,0,0],62:[-.05556,.55556,0,0],63:[0,.61111,0,0],64:[0,.61111,0,0],65:[0,.61111,0,0],66:[0,.61111,0,0],67:[0,.61111,0,0],68:[0,.61111,0,0],69:[0,.61111,0,0],70:[0,.61111,0,0],71:[0,.61111,0,0],72:[0,.61111,0,0],73:[0,.61111,0,0],74:[0,.61111,0,0],75:[0,.61111,0,0],76:[0,.61111,0,0],77:[0,.61111,0,0],78:[0,.61111,0,0],79:[0,.61111,0,0],80:[0,.61111,0,0],81:[.13889,.61111,0,0],82:[0,.61111,0,0],83:[0,.61111,0,0],84:[0,.61111,0,0],85:[0,.61111,0,0],86:[0,.61111,0,0],87:[0,.61111,0,0],88:[0,.61111,0,0],89:[0,.61111,0,0],90:[0,.61111,0,0],91:[.08333,.69444,0,0],92:[.08333,.69444,0,0],93:[.08333,.69444,0,0],94:[0,.61111,0,0],95:[.09514,0,0,0],96:[0,.61111,0,0],97:[0,.43056,0,0],98:[0,.61111,0,0],99:[0,.43056,0,0],100:[0,.61111,0,0],101:[0,.43056,0,0],102:[0,.61111,0,0],103:[.22222,.43056,0,0],104:[0,.61111,0,0],105:[0,.61111,0,0],106:[.22222,.61111,0,0],107:[0,.61111,0,0],108:[0,.61111,0,0],109:[0,.43056,0,0],110:[0,.43056,0,0],111:[0,.43056,0,0],112:[.22222,.43056,0,0],113:[.22222,.43056,0,0],114:[0,.43056,0,0],115:[0,.43056,0,0],116:[0,.55358,0,0],117:[0,.43056,0,0],118:[0,.43056,0,0],119:[0,.43056,0,0],120:[0,.43056,0,0],121:[.22222,.43056,0,0],122:[0,.43056,0,0],123:[.08333,.69444,0,0],124:[.08333,.69444,0,0],125:[.08333,.69444,0,0],126:[0,.61111,0,0],127:[0,.61111,0,0],305:[0,.43056,0,0],567:[.22222,.43056,0,0],768:[0,.61111,0,0],769:[0,.61111,0,0],770:[0,.61111,0,0],771:[0,.61111,0,0],772:[0,.56555,0,0],774:[0,.61111,0,0],776:[0,.61111,0,0],778:[0,.61111,0,0],780:[0,.56597,0,0],915:[0,.61111,0,0],916:[0,.61111,0,0],920:[0,.61111,0,0],923:[0,.61111,0,0],926:[0,.61111,0,0],928:[0,.61111,0,0],931:[0,.61111,0,0],933:[0,.61111,0,0],934:[0,.61111,0,0],936:[0,.61111,0,0],937:[0,.61111,0,0],2018:[0,.61111,0,0],2019:[0,.61111,0,0],8242:[0,.61111,0,0]}}},{}],43:[function(e,t){function n(e){return e&&e.__esModule?e:{"default":e}}function r(e,n,r){"string"==typeof e&&(e=[e]),"number"==typeof n&&(n={numArgs:n});for(var i={numArgs:n.numArgs,argTypes:n.argTypes,greediness:n.greediness===undefined?1:n.greediness,allowedInText:!!n.allowedInText,allowedInMath:n.allowedInMath,numOptionalArgs:n.numOptionalArgs||0,infix:!!n.infix,handler:r},a=0;a","\\langle","\\rangle","\\lt","\\gt","\\lvert","\\rvert","\\lVert","\\rVert","\\lgroup","\\rgroup","\\lmoustache","\\rmoustache","/","\\backslash","|","\\vert","\\|","\\Vert","\\uparrow","\\Uparrow","\\downarrow","\\Downarrow","\\updownarrow","\\Updownarrow","."],c={"\\Bbb":"\\mathbb","\\bold":"\\mathbf","\\frak":"\\mathfrak"};r(["\\blue","\\orange","\\pink","\\red","\\green","\\gray","\\purple","\\blueA","\\blueB","\\blueC","\\blueD","\\blueE","\\tealA","\\tealB","\\tealC","\\tealD","\\tealE","\\greenA","\\greenB","\\greenC","\\greenD","\\greenE","\\goldA","\\goldB","\\goldC","\\goldD","\\goldE","\\redA","\\redB","\\redC","\\redD","\\redE","\\maroonA","\\maroonB","\\maroonC","\\maroonD","\\maroonE","\\purpleA","\\purpleB","\\purpleC","\\purpleD","\\purpleE","\\mintA","\\mintB","\\mintC","\\grayA","\\grayB","\\grayC","\\grayD","\\grayE","\\grayF","\\grayG","\\grayH","\\grayI","\\kaBlue","\\kaGreen"],{numArgs:1,allowedInText:!0,greediness:3},function(e,t){var n=t[0];return{type:"color",color:"katex-"+e.funcName.slice(1),value:s(n)}}),r(["\\arcsin","\\arccos","\\arctan","\\arctg","\\arcctg","\\arg","\\ch","\\cos","\\cosec","\\cosh","\\cot","\\cotg","\\coth","\\csc","\\ctg","\\cth","\\deg","\\dim","\\exp","\\hom","\\ker","\\lg","\\ln","\\log","\\sec","\\sin","\\sinh","\\sh","\\tan","\\tanh","\\tg","\\th"],{numArgs:0},function(e){return{type:"op",limits:!1,symbol:!1,body:e.funcName}}),r(["\\det","\\gcd","\\inf","\\lim","\\liminf","\\limsup","\\max","\\min","\\Pr","\\sup"],{numArgs:0},function(e){return{type:"op",limits:!0,symbol:!1,body:e.funcName}}),r(["\\int","\\iint","\\iiint","\\oint"],{numArgs:0},function(e){return{type:"op",limits:!1,symbol:!0,body:e.funcName}}),r(["\\coprod","\\bigvee","\\bigwedge","\\biguplus","\\bigcap","\\bigcup","\\intop","\\prod","\\sum","\\bigotimes","\\bigoplus","\\bigodot","\\bigsqcup","\\smallint"],{numArgs:0},function(e){return{type:"op",limits:!0,symbol:!0,body:e.funcName}}),r("\\mathop",{numArgs:1},function(e,t){var n=t[0];return{type:"op",limits:!1,symbol:!1,value:s(n)}}),r(["\\dfrac","\\frac","\\tfrac","\\dbinom","\\binom","\\tbinom","\\\\atopfrac"],{numArgs:2,greediness:2},function(e,t){var n=t[0],r=t[1],i=void 0,a=null,o=null,s="auto";switch(e.funcName){case"\\dfrac":case"\\frac":case"\\tfrac":i=!0;break;case"\\\\atopfrac":i=!1;break;case"\\dbinom":case"\\binom":case"\\tbinom":i=!1,a="(",o=")";break;default:throw new Error("Unrecognized genfrac command")}switch(e.funcName){case"\\dfrac":case"\\dbinom":s="display";break;case"\\tfrac":case"\\tbinom":s="text"}return{type:"genfrac",numer:n,denom:r,hasBarLine:i,leftDelim:a,rightDelim:o,size:s}}),r(["\\llap","\\rlap"],{numArgs:1,allowedInText:!0},function(e,t){var n=t[0];return{type:e.funcName.slice(1),body:n}});var h=function(e,t){if(i["default"].contains(d,e.value))return e;throw new a["default"]("Invalid delimiter: '"+e.value+"' after '"+t.funcName+"'",e)};r(["\\bigl","\\Bigl","\\biggl","\\Biggl","\\bigr","\\Bigr","\\biggr","\\Biggr","\\bigm","\\Bigm","\\biggm","\\Biggm","\\big","\\Big","\\bigg","\\Bigg"],{numArgs:1},function(e,t){var n=h(t[0],e);return{type:"delimsizing",size:u[e.funcName].size,mclass:u[e.funcName].mclass,value:n.value}}),r(["\\left","\\right"],{numArgs:1},function(e,t){return{type:"leftright",value:h(t[0],e).value}}),r("\\middle",{numArgs:1},function(e,t){var n=h(t[0],e);if(!e.parser.leftrightDepth)throw new a["default"]("\\middle without preceding \\left",n);return{type:"middle",value:n.value}}),r(["\\tiny","\\scriptsize","\\footnotesize","\\small","\\normalsize","\\large","\\Large","\\LARGE","\\huge","\\Huge"],0,null),r(["\\displaystyle","\\textstyle","\\scriptstyle","\\scriptscriptstyle"],0,null),r(["\\rm","\\sf","\\tt","\\bf","\\it"],0,null),r(["\\mathrm","\\mathit","\\mathbf","\\mathbb","\\mathcal","\\mathfrak","\\mathscr","\\mathsf","\\mathtt","\\Bbb","\\bold","\\frak"],{numArgs:1,greediness:2},function(e,t){var n=t[0],r=e.funcName;return r in c&&(r=c[r]),{type:"font",font:r.slice(1),body:n}}),r(["\\acute","\\grave","\\ddot","\\tilde","\\bar","\\breve","\\check","\\hat","\\vec","\\dot","\\widehat","\\widetilde","\\overrightarrow","\\overleftarrow","\\Overrightarrow","\\overleftrightarrow","\\overgroup","\\overlinesegment","\\overleftharpoon","\\overrightharpoon"],{numArgs:1},function(e,t){var n=t[0],r=!i["default"].contains(["\\acute","\\grave","\\ddot","\\tilde","\\bar","\\breve","\\check","\\hat","\\vec","\\dot"],e.funcName),a=!r||i["default"].contains(["\\widehat","\\widetilde"],e.funcName);return{type:"accent",label:e.funcName,isStretchy:r,isShifty:a,value:s(n),base:n}}),r(["\\'","\\`","\\^","\\~","\\=","\\u","\\.",'\\"',"\\r","\\H","\\v"],{numArgs:1,allowedInText:!0,allowedInMath:!1},function(e,t){var n=t[0];return{type:"accent",label:e.funcName,isStretchy:!1,isShifty:!0,value:s(n),base:n}}),r(["\\overbrace","\\underbrace"],{numArgs:1},function(e,t){var n=t[0];return{type:"horizBrace",label:e.funcName,isOver:/^\\over/.test(e.funcName),base:n}}),r(["\\underleftarrow","\\underrightarrow","\\underleftrightarrow","\\undergroup","\\underlinesegment","\\undertilde"],{numArgs:1},function(e,t){var n=t[0];return{type:"accentUnder",label:e.funcName,value:s(n),body:n}}),r(["\\xleftarrow","\\xrightarrow","\\xLeftarrow","\\xRightarrow","\\xleftrightarrow","\\xLeftrightarrow","\\xhookleftarrow","\\xhookrightarrow","\\xmapsto","\\xrightharpoondown","\\xrightharpoonup","\\xleftharpoondown","\\xleftharpoonup","\\xrightleftharpoons","\\xleftrightharpoons","\\xLongequal","\\xtwoheadrightarrow","\\xtwoheadleftarrow","\\xLongequal","\\xtofrom"],{numArgs:1,numOptionalArgs:1},function(e,t){var n=t[0],r=t[1];return{type:"xArrow",label:e.funcName,body:r,below:n}}),r(["\\cancel","\\bcancel","\\xcancel","\\sout","\\fbox"],{numArgs:1},function(e,t){var n=t[0];return{type:"enclose",label:e.funcName,body:n}}),r(["\\over","\\choose","\\atop"],{numArgs:0,infix:!0},function(e){var t=void 0;switch(e.funcName){case"\\over":t="\\frac";break;case"\\choose":t="\\binom";break;case"\\atop":t="\\\\atopfrac";break;default:throw new Error("Unrecognized infix genfrac command")}return{type:"infix",replaceWith:t,token:e.token}}),r(["\\\\","\\cr"],{numArgs:0,numOptionalArgs:1,argTypes:["size"]},function(e,t){return{type:"cr",size:t[0]}}),r(["\\begin","\\end"],{numArgs:1,argTypes:["text"]},function(e,t){var n=t[0];if("ordgroup"!==n.type)throw new a["default"]("Invalid environment name",n);for(var r="",i=0;i"}}]),e}(),s=function(){function e(t){(0,r["default"])(this,e),this.text=t}return(0,i["default"])(e,[{key:"toNode",value:function(){return document.createTextNode(this.text)}},{key:"toMarkup",value:function(){return a["default"].escape(this.text)}}]),e}();t.exports={MathNode:o,TextNode:s}},{"./utils":51,"babel-runtime/helpers/classCallCheck":4,"babel-runtime/helpers/createClass":5}],46:[function(e,t){function n(e){return e&&e.__esModule?e:{"default":e}}var r=n(e("./Parser")),i=function(e,t){if(!("string"==typeof e||e instanceof String))throw new TypeError("KaTeX can only parse string typed expression");return new r["default"](e,t).parse()};t.exports=i},{"./Parser":31}],47:[function(e,t){var n=e("./buildCommon"),r=e("./mathMLTree"),i=e("./utils"),a={widehat:"^",widetilde:"~",undertilde:"~",overleftarrow:"\u2190",underleftarrow:"\u2190",xleftarrow:"\u2190",overrightarrow:"\u2192",underrightarrow:"\u2192",xrightarrow:"\u2192",underbrace:"\u23b5",overbrace:"\u23de",overleftrightarrow:"\u2194",underleftrightarrow:"\u2194",xleftrightarrow:"\u2194",Overrightarrow:"\u21d2",xRightarrow:"\u21d2",overleftharpoon:"\u21bc",xleftharpoonup:"\u21bc",overrightharpoon:"\u21c0",xrightharpoonup:"\u21c0",xLeftarrow:"\u21d0",xLeftrightarrow:"\u21d4",xhookleftarrow:"\u21a9",xhookrightarrow:"\u21aa",xmapsto:"\u21a6",xrightharpoondown:"\u21c1",xleftharpoondown:"\u21bd",xrightleftharpoons:"\u21cc",xleftrightharpoons:"\u21cb",xtwoheadleftarrow:"\u219e",xtwoheadrightarrow:"\u21a0",xLongequal:"=",xtofrom:"\u21c4"},o=function(e){var t=new r.MathNode("mo",[new r.TextNode(a[e.substr(1)])]);return t.setAttribute("stretchy","true"),t},s={overleftarrow:[.522,0,"leftarrow",.5],underleftarrow:[.522,0,"leftarrow",.5],xleftarrow:[.261,.261,"leftarrow",.783],overrightarrow:[.522,0,"rightarrow",.5],underrightarrow:[.522,0,"rightarrow",.5],xrightarrow:[.261,.261,"rightarrow",.783],overbrace:[.548,0,"overbrace",1.6],underbrace:[.548,0,"underbrace",1.6],overleftrightarrow:[.522,0,"leftrightarrow",.5],underleftrightarrow:[.522,0,"leftrightarrow",.5],xleftrightarrow:[.261,.261,"leftrightarrow",.783],Overrightarrow:[.56,0,"doublerightarrow",.5],xLeftarrow:[.28,.28,"doubleleftarrow",.783],xRightarrow:[.28,.28,"doublerightarrow",.783],xLeftrightarrow:[.28,.28,"doubleleftrightarrow",.955],overleftharpoon:[.522,0,"leftharpoon",.5],overrightharpoon:[.522,0,"rightharpoon",.5],xleftharpoonup:[.261,.261,"leftharpoon",.783],xrightharpoonup:[.261,.261,"rightharpoon",.783],xhookleftarrow:[.261,.261,"hookleftarrow",.87],xhookrightarrow:[.261,.261,"hookrightarrow",.87],overlinesegment:[.414,0,"linesegment",.5],underlinesegment:[.414,0,"linesegment",.5],xmapsto:[.261,.261,"mapsto",.783],xrightharpoondown:[.261,.261,"rightharpoondown",.783],xleftharpoondown:[.261,.261,"leftharpoondown",.783],xrightleftharpoons:[.358,.358,"rightleftharpoons",.716],xleftrightharpoons:[.358,.358,"leftrightharpoons",.716],overgroup:[.342,0,"overgroup",.87],undergroup:[.342,0,"undergroup",.87],xtwoheadleftarrow:[.167,.167,"twoheadleftarrow",.86],xtwoheadrightarrow:[.167,.167,"twoheadrightarrow",.86],xLongequal:[.167,.167,"longequal",.5],xtofrom:[.264,.264,"tofrom",.86]},l={doubleleftarrow:"",doublerightarrow:"",leftarrow:"",rightarrow:""},u={bcancel:"",cancel:"",doubleleftarrow:">"+l.doubleleftarrow+"",doubleleftrightarrow:">"+l.doubleleftarrow+"\n"+l.doublerightarrow+"",doublerightarrow:">"+l.doublerightarrow+"",hookleftarrow:">"+l.leftarrow+"\n",hookrightarrow:">"+l.rightarrow+"",leftarrow:">"+l.leftarrow+"",leftharpoon:">",leftharpoondown:">",leftrightarrow:">"+l.leftarrow+"\n"+l.rightarrow+"",leftrightharpoons:">\n",linesegment:">\n",longequal:" viewBox='0 0 100 334' preserveAspectRatio='none'>\n",mapsto:">"+l.rightarrow+"",overbrace:">\n",overgroup:">",rightarrow:">"+l.rightarrow+"",rightharpoon:">",rightharpoondown:">",rightleftharpoons:">",tilde1:" viewBox='0 0 600 260' preserveAspectRatio='none'>\n",tilde2:" viewBox='0 0 1033 286' preserveAspectRatio='none'>\n",tilde3:" viewBox='0 0 2339 306' preserveAspectRatio='none'>\n",tilde4:" viewBox='0 0 2340 312' preserveAspectRatio='none'>\n",tofrom:">",twoheadleftarrow:">\n",twoheadrightarrow:">\n",underbrace:">\n",undergroup:">",widehat1:" viewBox='0 0 1062 239' preserveAspectRatio='none'>\n",widehat2:" viewBox='0 0 2364 300' preserveAspectRatio='none'>\n",widehat3:" viewBox='0 0 2364 360' preserveAspectRatio='none'>\n",widehat4:" viewBox='0 0 2364 420' preserveAspectRatio='none'>\n",xcancel:"\n"},d=function(e,t){var r=e.value.label.substr(1),a=0,o=0,l="",d=0;if(i.contains(["widehat","widetilde","undertilde"],r)){var c=e.value.value.length;if(c>5)a=.312,l=("widehat"===r?"widehat":"tilde")+"4";else{var h=[1,1,2,2,3,3][c];"widehat"===r?(a=[0,.24,.3,.3,.36,.36][c],l="widehat"+h):(a=[0,.26,.3,.3,.34,.34][c],l="tilde"+h)}}else{var p=s[r];a=p[0],o=p[1],l=p[2],d=p[3]}var f=n.makeSpan([],[],t);f.height=a,f.depth=o;var m=a+o;return f.style.height=m+"em",d>0&&(f.style.minWidth=d+"em"),f.innerHTML="",f},c=function(e,t,r,i){var a=void 0,o=e.height+e.depth+2*r;return"fbox"===t?(a=n.makeSpan(["stretchy",t],[],i),i.color&&(a.style.borderColor=i.getColor())):(a=n.makeSpan([],[],i)).innerHTML=""+u[t]+"",a.height=o,a.style.height=o+"em",a};t.exports={encloseSpan:c,mathMLnode:o,svgSpan:d}},{"./buildCommon":34,"./mathMLTree":45,"./utils":51}],48:[function(e,t){function n(e,n,r,i,a,o){t.exports[e][a]={font:n,group:r,replace:i},o&&(t.exports[e][i]=t.exports[e][a])}t.exports={math:{},text:{}};var r="math",i="text",a="main",o="ams",s="accent",l="bin",u="close",d="inner",c="mathord",h="op",p="open",f="punct",m="rel",g="spacing",v="textord";n(r,a,m,"\u2261","\\equiv"),n(r,a,m,"\u227a","\\prec"),n(r,a,m,"\u227b","\\succ"),n(r,a,m,"\u223c","\\sim"),n(r,a,m,"\u22a5","\\perp"),n(r,a,m,"\u2aaf","\\preceq"),n(r,a,m,"\u2ab0","\\succeq"),n(r,a,m,"\u2243","\\simeq"),n(r,a,m,"\u2223","\\mid"),n(r,a,m,"\u226a","\\ll"),n(r,a,m,"\u226b","\\gg"),n(r,a,m,"\u224d","\\asymp"),n(r,a,m,"\u2225","\\parallel"),n(r,a,m,"\u22c8","\\bowtie"),n(r,a,m,"\u2323","\\smile"),n(r,a,m,"\u2291","\\sqsubseteq"),n(r,a,m,"\u2292","\\sqsupseteq"),n(r,a,m,"\u2250","\\doteq"),n(r,a,m,"\u2322","\\frown"),n(r,a,m,"\u220b","\\ni"),n(r,a,m,"\u221d","\\propto"),n(r,a,m,"\u22a2","\\vdash"),n(r,a,m,"\u22a3","\\dashv"), +n(r,a,m,"\u220b","\\owns"),n(r,a,f,".","\\ldotp"),n(r,a,f,"\u22c5","\\cdotp"),n(r,a,v,"#","\\#"),n(i,a,v,"#","\\#"),n(r,a,v,"&","\\&"),n(i,a,v,"&","\\&"),n(r,a,v,"\u2135","\\aleph"),n(r,a,v,"\u2200","\\forall"),n(r,a,v,"\u210f","\\hbar"),n(r,a,v,"\u2203","\\exists"),n(r,a,v,"\u2207","\\nabla"),n(r,a,v,"\u266d","\\flat"),n(r,a,v,"\u2113","\\ell"),n(r,a,v,"\u266e","\\natural"),n(r,a,v,"\u2663","\\clubsuit"),n(r,a,v,"\u2118","\\wp"),n(r,a,v,"\u266f","\\sharp"),n(r,a,v,"\u2662","\\diamondsuit"),n(r,a,v,"\u211c","\\Re"),n(r,a,v,"\u2661","\\heartsuit"),n(r,a,v,"\u2111","\\Im"),n(r,a,v,"\u2660","\\spadesuit"),n(r,a,v,"\u2020","\\dag"),n(i,a,v,"\u2020","\\dag"),n(i,a,v,"\u2020","\\textdagger"),n(r,a,v,"\u2021","\\ddag"),n(i,a,v,"\u2021","\\ddag"),n(i,a,v,"\u2020","\\textdaggerdbl"),n(r,a,u,"\u23b1","\\rmoustache"),n(r,a,p,"\u23b0","\\lmoustache"),n(r,a,u,"\u27ef","\\rgroup"),n(r,a,p,"\u27ee","\\lgroup"),n(r,a,l,"\u2213","\\mp"),n(r,a,l,"\u2296","\\ominus"),n(r,a,l,"\u228e","\\uplus"),n(r,a,l,"\u2293","\\sqcap"),n(r,a,l,"\u2217","\\ast"),n(r,a,l,"\u2294","\\sqcup"),n(r,a,l,"\u25ef","\\bigcirc"),n(r,a,l,"\u2219","\\bullet"),n(r,a,l,"\u2021","\\ddagger"),n(r,a,l,"\u2240","\\wr"),n(r,a,l,"\u2a3f","\\amalg"),n(r,a,m,"\u27f5","\\longleftarrow"),n(r,a,m,"\u21d0","\\Leftarrow"),n(r,a,m,"\u27f8","\\Longleftarrow"),n(r,a,m,"\u27f6","\\longrightarrow"),n(r,a,m,"\u21d2","\\Rightarrow"),n(r,a,m,"\u27f9","\\Longrightarrow"),n(r,a,m,"\u2194","\\leftrightarrow"),n(r,a,m,"\u27f7","\\longleftrightarrow"),n(r,a,m,"\u21d4","\\Leftrightarrow"),n(r,a,m,"\u27fa","\\Longleftrightarrow"),n(r,a,m,"\u21a6","\\mapsto"),n(r,a,m,"\u27fc","\\longmapsto"),n(r,a,m,"\u2197","\\nearrow"),n(r,a,m,"\u21a9","\\hookleftarrow"),n(r,a,m,"\u21aa","\\hookrightarrow"),n(r,a,m,"\u2198","\\searrow"),n(r,a,m,"\u21bc","\\leftharpoonup"),n(r,a,m,"\u21c0","\\rightharpoonup"),n(r,a,m,"\u2199","\\swarrow"),n(r,a,m,"\u21bd","\\leftharpoondown"),n(r,a,m,"\u21c1","\\rightharpoondown"),n(r,a,m,"\u2196","\\nwarrow"),n(r,a,m,"\u21cc","\\rightleftharpoons"),n(r,o,m,"\u226e","\\nless"),n(r,o,m,"\ue010","\\nleqslant"),n(r,o,m,"\ue011","\\nleqq"),n(r,o,m,"\u2a87","\\lneq"),n(r,o,m,"\u2268","\\lneqq"),n(r,o,m,"\ue00c","\\lvertneqq"),n(r,o,m,"\u22e6","\\lnsim"),n(r,o,m,"\u2a89","\\lnapprox"),n(r,o,m,"\u2280","\\nprec"),n(r,o,m,"\u22e0","\\npreceq"),n(r,o,m,"\u22e8","\\precnsim"),n(r,o,m,"\u2ab9","\\precnapprox"),n(r,o,m,"\u2241","\\nsim"),n(r,o,m,"\ue006","\\nshortmid"),n(r,o,m,"\u2224","\\nmid"),n(r,o,m,"\u22ac","\\nvdash"),n(r,o,m,"\u22ad","\\nvDash"),n(r,o,m,"\u22ea","\\ntriangleleft"),n(r,o,m,"\u22ec","\\ntrianglelefteq"),n(r,o,m,"\u228a","\\subsetneq"),n(r,o,m,"\ue01a","\\varsubsetneq"),n(r,o,m,"\u2acb","\\subsetneqq"),n(r,o,m,"\ue017","\\varsubsetneqq"),n(r,o,m,"\u226f","\\ngtr"),n(r,o,m,"\ue00f","\\ngeqslant"),n(r,o,m,"\ue00e","\\ngeqq"),n(r,o,m,"\u2a88","\\gneq"),n(r,o,m,"\u2269","\\gneqq"),n(r,o,m,"\ue00d","\\gvertneqq"),n(r,o,m,"\u22e7","\\gnsim"),n(r,o,m,"\u2a8a","\\gnapprox"),n(r,o,m,"\u2281","\\nsucc"),n(r,o,m,"\u22e1","\\nsucceq"),n(r,o,m,"\u22e9","\\succnsim"),n(r,o,m,"\u2aba","\\succnapprox"),n(r,o,m,"\u2246","\\ncong"),n(r,o,m,"\ue007","\\nshortparallel"),n(r,o,m,"\u2226","\\nparallel"),n(r,o,m,"\u22af","\\nVDash"),n(r,o,m,"\u22eb","\\ntriangleright"),n(r,o,m,"\u22ed","\\ntrianglerighteq"),n(r,o,m,"\ue018","\\nsupseteqq"),n(r,o,m,"\u228b","\\supsetneq"),n(r,o,m,"\ue01b","\\varsupsetneq"),n(r,o,m,"\u2acc","\\supsetneqq"),n(r,o,m,"\ue019","\\varsupsetneqq"),n(r,o,m,"\u22ae","\\nVdash"),n(r,o,m,"\u2ab5","\\precneqq"),n(r,o,m,"\u2ab6","\\succneqq"),n(r,o,m,"\ue016","\\nsubseteqq"),n(r,o,l,"\u22b4","\\unlhd"),n(r,o,l,"\u22b5","\\unrhd"),n(r,o,m,"\u219a","\\nleftarrow"),n(r,o,m,"\u219b","\\nrightarrow"),n(r,o,m,"\u21cd","\\nLeftarrow"),n(r,o,m,"\u21cf","\\nRightarrow"),n(r,o,m,"\u21ae","\\nleftrightarrow"),n(r,o,m,"\u21ce","\\nLeftrightarrow"),n(r,o,m,"\u25b3","\\vartriangle"),n(r,o,v,"\u210f","\\hslash"),n(r,o,v,"\u25bd","\\triangledown"),n(r,o,v,"\u25ca","\\lozenge"),n(r,o,v,"\u24c8","\\circledS"),n(r,o,v,"\xae","\\circledR"),n(i,o,v,"\xae","\\circledR"),n(r,o,v,"\u2221","\\measuredangle"),n(r,o,v,"\u2204","\\nexists"),n(r,o,v,"\u2127","\\mho"),n(r,o,v,"\u2132","\\Finv"),n(r,o,v,"\u2141","\\Game"),n(r,o,v,"k","\\Bbbk"),n(r,o,v,"\u2035","\\backprime"),n(r,o,v,"\u25b2","\\blacktriangle"),n(r,o,v,"\u25bc","\\blacktriangledown"),n(r,o,v,"\u25a0","\\blacksquare"),n(r,o,v,"\u29eb","\\blacklozenge"),n(r,o,v,"\u2605","\\bigstar"),n(r,o,v,"\u2222","\\sphericalangle"),n(r,o,v,"\u2201","\\complement"),n(r,o,v,"\xf0","\\eth"),n(r,o,v,"\u2571","\\diagup"),n(r,o,v,"\u2572","\\diagdown"),n(r,o,v,"\u25a1","\\square"),n(r,o,v,"\u25a1","\\Box"),n(r,o,v,"\u25ca","\\Diamond"),n(r,o,v,"\xa5","\\yen"),n(r,o,v,"\u2713","\\checkmark"),n(i,o,v,"\u2713","\\checkmark"),n(r,o,v,"\u2136","\\beth"),n(r,o,v,"\u2138","\\daleth"),n(r,o,v,"\u2137","\\gimel"),n(r,o,v,"\u03dd","\\digamma"),n(r,o,v,"\u03f0","\\varkappa"),n(r,o,p,"\u250c","\\ulcorner"),n(r,o,u,"\u2510","\\urcorner"),n(r,o,p,"\u2514","\\llcorner"),n(r,o,u,"\u2518","\\lrcorner"),n(r,o,m,"\u2266","\\leqq"),n(r,o,m,"\u2a7d","\\leqslant"),n(r,o,m,"\u2a95","\\eqslantless"),n(r,o,m,"\u2272","\\lesssim"),n(r,o,m,"\u2a85","\\lessapprox"),n(r,o,m,"\u224a","\\approxeq"),n(r,o,l,"\u22d6","\\lessdot"),n(r,o,m,"\u22d8","\\lll"),n(r,o,m,"\u2276","\\lessgtr"),n(r,o,m,"\u22da","\\lesseqgtr"),n(r,o,m,"\u2a8b","\\lesseqqgtr"),n(r,o,m,"\u2251","\\doteqdot"),n(r,o,m,"\u2253","\\risingdotseq"),n(r,o,m,"\u2252","\\fallingdotseq"),n(r,o,m,"\u223d","\\backsim"),n(r,o,m,"\u22cd","\\backsimeq"),n(r,o,m,"\u2ac5","\\subseteqq"),n(r,o,m,"\u22d0","\\Subset"),n(r,o,m,"\u228f","\\sqsubset"),n(r,o,m,"\u227c","\\preccurlyeq"),n(r,o,m,"\u22de","\\curlyeqprec"),n(r,o,m,"\u227e","\\precsim"),n(r,o,m,"\u2ab7","\\precapprox"),n(r,o,m,"\u22b2","\\vartriangleleft"),n(r,o,m,"\u22b4","\\trianglelefteq"),n(r,o,m,"\u22a8","\\vDash"),n(r,o,m,"\u22aa","\\Vvdash"),n(r,o,m,"\u2323","\\smallsmile"),n(r,o,m,"\u2322","\\smallfrown"),n(r,o,m,"\u224f","\\bumpeq"),n(r,o,m,"\u224e","\\Bumpeq"),n(r,o,m,"\u2267","\\geqq"),n(r,o,m,"\u2a7e","\\geqslant"),n(r,o,m,"\u2a96","\\eqslantgtr"),n(r,o,m,"\u2273","\\gtrsim"),n(r,o,m,"\u2a86","\\gtrapprox"),n(r,o,l,"\u22d7","\\gtrdot"),n(r,o,m,"\u22d9","\\ggg"),n(r,o,m,"\u2277","\\gtrless"),n(r,o,m,"\u22db","\\gtreqless"),n(r,o,m,"\u2a8c","\\gtreqqless"),n(r,o,m,"\u2256","\\eqcirc"),n(r,o,m,"\u2257","\\circeq"),n(r,o,m,"\u225c","\\triangleq"),n(r,o,m,"\u223c","\\thicksim"),n(r,o,m,"\u2248","\\thickapprox"),n(r,o,m,"\u2ac6","\\supseteqq"),n(r,o,m,"\u22d1","\\Supset"),n(r,o,m,"\u2290","\\sqsupset"),n(r,o,m,"\u227d","\\succcurlyeq"),n(r,o,m,"\u22df","\\curlyeqsucc"),n(r,o,m,"\u227f","\\succsim"),n(r,o,m,"\u2ab8","\\succapprox"),n(r,o,m,"\u22b3","\\vartriangleright"),n(r,o,m,"\u22b5","\\trianglerighteq"),n(r,o,m,"\u22a9","\\Vdash"),n(r,o,m,"\u2223","\\shortmid"),n(r,o,m,"\u2225","\\shortparallel"),n(r,o,m,"\u226c","\\between"),n(r,o,m,"\u22d4","\\pitchfork"),n(r,o,m,"\u221d","\\varpropto"),n(r,o,m,"\u25c0","\\blacktriangleleft"),n(r,o,m,"\u2234","\\therefore"),n(r,o,m,"\u220d","\\backepsilon"),n(r,o,m,"\u25b6","\\blacktriangleright"),n(r,o,m,"\u2235","\\because"),n(r,o,m,"\u22d8","\\llless"),n(r,o,m,"\u22d9","\\gggtr"),n(r,o,l,"\u22b2","\\lhd"),n(r,o,l,"\u22b3","\\rhd"),n(r,o,m,"\u2242","\\eqsim"),n(r,a,m,"\u22c8","\\Join"),n(r,o,m,"\u2251","\\Doteq"),n(r,o,l,"\u2214","\\dotplus"),n(r,o,l,"\u2216","\\smallsetminus"),n(r,o,l,"\u22d2","\\Cap"),n(r,o,l,"\u22d3","\\Cup"),n(r,o,l,"\u2a5e","\\doublebarwedge"),n(r,o,l,"\u229f","\\boxminus"),n(r,o,l,"\u229e","\\boxplus"),n(r,o,l,"\u22c7","\\divideontimes"),n(r,o,l,"\u22c9","\\ltimes"),n(r,o,l,"\u22ca","\\rtimes"),n(r,o,l,"\u22cb","\\leftthreetimes"),n(r,o,l,"\u22cc","\\rightthreetimes"),n(r,o,l,"\u22cf","\\curlywedge"),n(r,o,l,"\u22ce","\\curlyvee"),n(r,o,l,"\u229d","\\circleddash"),n(r,o,l,"\u229b","\\circledast"),n(r,o,l,"\u22c5","\\centerdot"),n(r,o,l,"\u22ba","\\intercal"),n(r,o,l,"\u22d2","\\doublecap"),n(r,o,l,"\u22d3","\\doublecup"),n(r,o,l,"\u22a0","\\boxtimes"),n(r,o,m,"\u21e2","\\dashrightarrow"),n(r,o,m,"\u21e0","\\dashleftarrow"),n(r,o,m,"\u21c7","\\leftleftarrows"),n(r,o,m,"\u21c6","\\leftrightarrows"),n(r,o,m,"\u21da","\\Lleftarrow"),n(r,o,m,"\u219e","\\twoheadleftarrow"),n(r,o,m,"\u21a2","\\leftarrowtail"),n(r,o,m,"\u21ab","\\looparrowleft"),n(r,o,m,"\u21cb","\\leftrightharpoons"),n(r,o,m,"\u21b6","\\curvearrowleft"),n(r,o,m,"\u21ba","\\circlearrowleft"),n(r,o,m,"\u21b0","\\Lsh"),n(r,o,m,"\u21c8","\\upuparrows"),n(r,o,m,"\u21bf","\\upharpoonleft"),n(r,o,m,"\u21c3","\\downharpoonleft"),n(r,o,m,"\u22b8","\\multimap"),n(r,o,m,"\u21ad","\\leftrightsquigarrow"),n(r,o,m,"\u21c9","\\rightrightarrows"),n(r,o,m,"\u21c4","\\rightleftarrows"),n(r,o,m,"\u21a0","\\twoheadrightarrow"),n(r,o,m,"\u21a3","\\rightarrowtail"),n(r,o,m,"\u21ac","\\looparrowright"),n(r,o,m,"\u21b7","\\curvearrowright"),n(r,o,m,"\u21bb","\\circlearrowright"),n(r,o,m,"\u21b1","\\Rsh"),n(r,o,m,"\u21ca","\\downdownarrows"),n(r,o,m,"\u21be","\\upharpoonright"),n(r,o,m,"\u21c2","\\downharpoonright"),n(r,o,m,"\u21dd","\\rightsquigarrow"),n(r,o,m,"\u21dd","\\leadsto"),n(r,o,m,"\u21db","\\Rrightarrow"),n(r,o,m,"\u21be","\\restriction"),n(r,a,v,"\u2018","`"),n(r,a,v,"$","\\$"),n(i,a,v,"$","\\$"),n(i,a,v,"$","\\textdollar"),n(r,a,v,"%","\\%"),n(i,a,v,"%","\\%"),n(r,a,v,"_","\\_"),n(i,a,v,"_","\\_"),n(i,a,v,"_","\\textunderscore"),n(r,a,v,"\u2220","\\angle"),n(r,a,v,"\u221e","\\infty"),n(r,a,v,"\u2032","\\prime"),n(r,a,v,"\u25b3","\\triangle"),n(r,a,v,"\u0393","\\Gamma",!0),n(r,a,v,"\u0394","\\Delta",!0),n(r,a,v,"\u0398","\\Theta",!0),n(r,a,v,"\u039b","\\Lambda",!0),n(r,a,v,"\u039e","\\Xi",!0),n(r,a,v,"\u03a0","\\Pi",!0),n(r,a,v,"\u03a3","\\Sigma",!0),n(r,a,v,"\u03a5","\\Upsilon",!0),n(r,a,v,"\u03a6","\\Phi",!0),n(r,a,v,"\u03a8","\\Psi",!0),n(r,a,v,"\u03a9","\\Omega",!0),n(r,a,v,"\xac","\\neg"),n(r,a,v,"\xac","\\lnot"),n(r,a,v,"\u22a4","\\top"),n(r,a,v,"\u22a5","\\bot"),n(r,a,v,"\u2205","\\emptyset"),n(r,o,v,"\u2205","\\varnothing"),n(r,a,c,"\u03b1","\\alpha",!0),n(r,a,c,"\u03b2","\\beta",!0),n(r,a,c,"\u03b3","\\gamma",!0),n(r,a,c,"\u03b4","\\delta",!0),n(r,a,c,"\u03f5","\\epsilon",!0),n(r,a,c,"\u03b6","\\zeta",!0),n(r,a,c,"\u03b7","\\eta",!0),n(r,a,c,"\u03b8","\\theta",!0),n(r,a,c,"\u03b9","\\iota",!0),n(r,a,c,"\u03ba","\\kappa",!0),n(r,a,c,"\u03bb","\\lambda",!0),n(r,a,c,"\u03bc","\\mu",!0),n(r,a,c,"\u03bd","\\nu",!0),n(r,a,c,"\u03be","\\xi",!0),n(r,a,c,"\u03bf","\\omicron",!0),n(r,a,c,"\u03c0","\\pi",!0),n(r,a,c,"\u03c1","\\rho",!0),n(r,a,c,"\u03c3","\\sigma",!0),n(r,a,c,"\u03c4","\\tau",!0),n(r,a,c,"\u03c5","\\upsilon",!0),n(r,a,c,"\u03d5","\\phi",!0),n(r,a,c,"\u03c7","\\chi",!0),n(r,a,c,"\u03c8","\\psi",!0),n(r,a,c,"\u03c9","\\omega",!0),n(r,a,c,"\u03b5","\\varepsilon",!0),n(r,a,c,"\u03d1","\\vartheta",!0),n(r,a,c,"\u03d6","\\varpi",!0),n(r,a,c,"\u03f1","\\varrho",!0),n(r,a,c,"\u03c2","\\varsigma",!0),n(r,a,c,"\u03c6","\\varphi",!0),n(r,a,l,"\u2217","*"),n(r,a,l,"+","+"),n(r,a,l,"\u2212","-"),n(r,a,l,"\u22c5","\\cdot"),n(r,a,l,"\u2218","\\circ"),n(r,a,l,"\xf7","\\div"),n(r,a,l,"\xb1","\\pm"),n(r,a,l,"\xd7","\\times"),n(r,a,l,"\u2229","\\cap"),n(r,a,l,"\u222a","\\cup"),n(r,a,l,"\u2216","\\setminus"),n(r,a,l,"\u2227","\\land"),n(r,a,l,"\u2228","\\lor"),n(r,a,l,"\u2227","\\wedge"),n(r,a,l,"\u2228","\\vee"),n(r,a,v,"\u221a","\\surd"),n(r,a,p,"(","("),n(r,a,p,"[","["),n(r,a,p,"\u27e8","\\langle"),n(r,a,p,"\u2223","\\lvert"),n(r,a,p,"\u2225","\\lVert"),n(r,a,u,")",")"),n(r,a,u,"]","]"),n(r,a,u,"?","?"),n(r,a,u,"!","!"),n(r,a,u,"\u27e9","\\rangle"),n(r,a,u,"\u2223","\\rvert"),n(r,a,u,"\u2225","\\rVert"),n(r,a,m,"=","="),n(r,a,m,"<","<"),n(r,a,m,">",">"),n(r,a,m,":",":"),n(r,a,m,"\u2248","\\approx"),n(r,a,m,"\u2245","\\cong"),n(r,a,m,"\u2265","\\ge"),n(r,a,m,"\u2265","\\geq"),n(r,a,m,"\u2190","\\gets"),n(r,a,m,">","\\gt"),n(r,a,m,"\u2208","\\in"),n(r,a,m,"\u2209","\\notin"),n(r,a,m,"\u0338","\\not"),n(r,a,m,"\u2282","\\subset"),n(r,a,m,"\u2283","\\supset"),n(r,a,m,"\u2286","\\subseteq"),n(r,a,m,"\u2287","\\supseteq"),n(r,o,m,"\u2288","\\nsubseteq"),n(r,o,m,"\u2289","\\nsupseteq"),n(r,a,m,"\u22a8","\\models"),n(r,a,m,"\u2190","\\leftarrow"),n(r,a,m,"\u2264","\\le"),n(r,a,m,"\u2264","\\leq"),n(r,a,m,"<","\\lt"),n(r,a,m,"\u2260","\\ne"),n(r,a,m,"\u2260","\\neq"),n(r,a,m,"\u2192","\\rightarrow"),n(r,a,m,"\u2192","\\to"),n(r,o,m,"\u2271","\\ngeq"),n(r,o,m,"\u2270","\\nleq"),n(r,a,g,null,"\\!"),n(r,a,g,"\xa0","\\ "),n(r,a,g,"\xa0","~"),n(r,a,g,null,"\\,"),n(r,a,g,null,"\\:"),n(r,a,g,null,"\\;"),n(r,a,g,null,"\\enspace"),n(r,a,g,null,"\\qquad"),n(r,a,g,null,"\\quad"),n(r,a,g,"\xa0","\\space"),n(r,a,f,",",","),n(r,a,f,";",";"),n(r,a,f,":","\\colon"),n(r,o,l,"\u22bc","\\barwedge"),n(r,o,l,"\u22bb","\\veebar"),n(r,a,l,"\u2299","\\odot"),n(r,a,l,"\u2295","\\oplus"),n(r,a,l,"\u2297","\\otimes"),n(r,a,v,"\u2202","\\partial"),n(r,a,l,"\u2298","\\oslash"),n(r,o,l,"\u229a","\\circledcirc"),n(r,o,l,"\u22a1","\\boxdot"),n(r,a,l,"\u25b3","\\bigtriangleup"),n(r,a,l,"\u25bd","\\bigtriangledown"),n(r,a,l,"\u2020","\\dagger"),n(r,a,l,"\u22c4","\\diamond"),n(r,a,l,"\u22c6","\\star"),n(r,a,l,"\u25c3","\\triangleleft"),n(r,a,l,"\u25b9","\\triangleright"),n(r,a,p,"{","\\{"),n(i,a,v,"{","\\{"),n(i,a,v,"{","\\textbraceleft"),n(r,a,u,"}","\\}"),n(i,a,v,"}","\\}"),n(i,a,v,"}","\\textbraceright"),n(r,a,p,"{","\\lbrace"),n(r,a,u,"}","\\rbrace"),n(r,a,p,"[","\\lbrack"),n(r,a,u,"]","\\rbrack"),n(i,a,v,"<","\\textless"),n(i,a,v,">","\\textgreater"),n(r,a,p,"\u230a","\\lfloor"),n(r,a,u,"\u230b","\\rfloor"),n(r,a,p,"\u2308","\\lceil"),n(r,a,u,"\u2309","\\rceil"),n(r,a,v,"\\","\\backslash"),n(r,a,v,"\u2223","|"),n(r,a,v,"\u2223","\\vert"),n(i,a,v,"|","\\textbar"),n(r,a,v,"\u2225","\\|"),n(r,a,v,"\u2225","\\Vert"),n(i,a,v,"\u2225","\\textbardbl"),n(r,a,m,"\u2191","\\uparrow"),n(r,a,m,"\u21d1","\\Uparrow"),n(r,a,m,"\u2193","\\downarrow"),n(r,a,m,"\u21d3","\\Downarrow"),n(r,a,m,"\u2195","\\updownarrow"),n(r,a,m,"\u21d5","\\Updownarrow"),n(r,a,h,"\u2210","\\coprod"),n(r,a,h,"\u22c1","\\bigvee"),n(r,a,h,"\u22c0","\\bigwedge"),n(r,a,h,"\u2a04","\\biguplus"),n(r,a,h,"\u22c2","\\bigcap"),n(r,a,h,"\u22c3","\\bigcup"),n(r,a,h,"\u222b","\\int"),n(r,a,h,"\u222b","\\intop"),n(r,a,h,"\u222c","\\iint"),n(r,a,h,"\u222d","\\iiint"),n(r,a,h,"\u220f","\\prod"),n(r,a,h,"\u2211","\\sum"),n(r,a,h,"\u2a02","\\bigotimes"),n(r,a,h,"\u2a01","\\bigoplus"),n(r,a,h,"\u2a00","\\bigodot"),n(r,a,h,"\u222e","\\oint"),n(r,a,h,"\u2a06","\\bigsqcup"),n(r,a,h,"\u222b","\\smallint"),n(i,a,d,"\u2026","\\textellipsis"),n(r,a,d,"\u2026","\\mathellipsis"),n(i,a,d,"\u2026","\\ldots",!0),n(r,a,d,"\u2026","\\ldots",!0),n(r,a,d,"\u22ef","\\cdots",!0),n(r,a,d,"\u22f1","\\ddots",!0),n(r,a,v,"\u22ee","\\vdots",!0),n(r,a,s,"\xb4","\\acute"),n(r,a,s,"`","\\grave"),n(r,a,s,"\xa8","\\ddot"),n(r,a,s,"~","\\tilde"),n(r,a,s,"\xaf","\\bar"),n(r,a,s,"\u02d8","\\breve"),n(r,a,s,"\u02c7","\\check"),n(r,a,s,"^","\\hat"),n(r,a,s,"\u20d7","\\vec"),n(r,a,s,"\u02d9","\\dot"),n(r,a,c,"\u0131","\\imath"),n(r,a,c,"\u0237","\\jmath"),n(i,a,s,"\u02ca","\\'"),n(i,a,s,"\u02cb","\\`"),n(i,a,s,"\u02c6","\\^"),n(i,a,s,"\u02dc","\\~"),n(i,a,s,"\u02c9","\\="),n(i,a,s,"\u02d8","\\u"),n(i,a,s,"\u02d9","\\."),n(i,a,s,"\u02da","\\r"),n(i,a,s,"\u02c7","\\v"),n(i,a,s,"\xa8",'\\"'),n(i,a,s,"\u030b","\\H"),n(i,a,v,"\u2013","--"),n(i,a,v,"\u2013","\\textendash"),n(i,a,v,"\u2014","---"),n(i,a,v,"\u2014","\\textemdash"),n(i,a,v,"\u2018","`"),n(i,a,v,"\u2018","\\textquoteleft"),n(i,a,v,"\u2019","'"),n(i,a,v,"\u2019","\\textquoteright"),n(i,a,v,"\u201c","``"),n(i,a,v,"\u201c","\\textquotedblleft"),n(i,a,v,"\u201d","''"),n(i,a,v,"\u201d","\\textquotedblright"),n(r,a,v,"\xb0","\\degree"),n(i,a,v,"\xb0","\\degree"),n(r,a,c,"\xa3","\\pounds"),n(r,a,c,"\xa3","\\mathsterling"),n(i,a,c,"\xa3","\\pounds"),n(i,a,c,"\xa3","\\textsterling"),n(r,o,v,"\u2720","\\maltese"),n(i,o,v,"\u2720","\\maltese"),n(i,a,g,"\xa0","\\ "),n(i,a,g,"\xa0"," "),n(i,a,g,"\xa0","~");for(var b='0123456789/@."',y=0;y":">","<":"<",'"':""","'":"'"},h=/[&><"']/g,p=void 0;if("undefined"!=typeof document){var f=document.createElement("span");p="textContent"in f?function(e,t){e.textContent=t}:function(e,t){e.innerText=t}}t.exports={contains:s,deflt:l,escape:r,hyphenate:d,indexOf:o,setTextContent:p,clearNode:i}},{}]},{},[1])(1)},e.exports=t()})); +// Copyright 2018 The Distill Template Authors +const ae=function(e,t,n){let r=n,i=0;const a=e.length;for(;r[e.left,e.right]),i=e=>r.some(t=>-1!==e.indexOf(t));n.mightHaveMath=i,ue(e,n)};var he="iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA99JREFUeNrsG4t1ozDMzQSM4A2ODUonKBucN2hugtIJ6E1AboLcBiQTkJsANiAb9OCd/OpzMWBJBl5TvaeXPiiyJetry0J8wW3D3QpjRh3GjneXDq+fSQA9s2mH9x3KDhN4foJfCb8N/Jrv+2fnDn8vLRQOplWHVYdvHZYdZsBcZP1vBmh/n8DzEmhUQDPaOuP9pFuY+JwJHwHnCLQE2tnWBGEyXozY9xCUgHMhhjE2I4heVWtgIkZ83wL6Qgxj1obfWBxymPwe+b00BCCRNPbwfb60yleAkkBHGT5AEehIYz7eJrFDMF9CvH4wwhcGHiHMneFvLDQwlwvMLQq58trRcYBWfYn0A0OgHWQUSu25mE+BnoYKnnEJoeIWAifzOv7vLWd2ZKRfWAIme3tOiUaQ3UnLkb0xj1FxRIeEGKaGIHOs9nEgLaaA9i0JRYo1Ic67wJW86KSKE/ZAM8KuVMk8ITVhmxUxJ3Cl2xlm9Vtkeju1+mpCQNxaEGNCY8bs9X2YqwNoQeGjBWut/ma0QAWy/TqAsHx9wSya3I5IRxOfTC+leG+kA/4vSeEcGBtNUN6byhu3+keEZCQJUNh8MAO7HL6H8pQLnsW/Hd4T4lv93TPjfM7A46iEEqbB5EDOvwYNW6tGNZzT/o+CZ6sqZ6wUtR/wf7mi/VL8iNciT6rHih48Y55b4nKCHJCCzb4y0nwFmin3ZEMIoLfZF8F7nncFmvnWBaBj7CGAYA/WGJsUwHdYqVDwAmNsUgAx4CGgAA7GOOxADYOFWOaIKifuVYzmOpREqA21Mo7aPsgiY1PhOMAmxtR+AUbYH3Id2wc0SAFIQTsn9IUGWR8k9jx3vtXSiAacFxTAGakBk9UudkNECd6jLe+6HrshshvIuC6IlLMRy7er+JpcKma24SlE4cFZSZJDGVVrsNvitQhQrDhW0jfiOLfFd47C42eHT56D/BK0To+58Ahj+cAT8HT1UWlfLZCCd/uKawzU0Rh2EyIX/Icqth3niG8ybNroezwe6khdCNxRN+l4XGdOLVLlOOt2hTRJlr1ETIuMAltVTMz70mJrkdGAaZLSmnBEqmAE32JCMmuTlCnRgsBENtOUpHhvvsYIL0ibnBkaC6QvKcR7738GKp0AKnim7xgUSNv1bpS8QwhBt8r+EP47v/oyRK/S34yJ9nT+AN0Tkm4OdB9E4BsmXM3SnMlRFUrtp6IDpV2eKzdYvF3etm3KhQksbOLChGkSmcBdmcEwvqkrMy5BzL00NZeu3qPYJOOuCc+5NjcWKXQxFvTa3NoXJ4d8in7fiAUuTt781dkvuHX4K8AA2Usy7yNKLy0AAAAASUVORK5CYII=\n",pe=/["'&<>]/,fe=C; +/*! * escape-html * Copyright(c) 2012-2013 TJ Holowaychuk * Copyright(c) 2015 Andreas Lubbe * Copyright(c) 2015 Tiancheng "Timothy" Gu * MIT Licensed */ - - /** - * Module variables. - * @private - */ - - var matchHtmlRegExp = /["'&<>]/; - - /** - * Module exports. - * @public - */ - - var escapeHtml_1 = escapeHtml; - - /** - * Escape special characters in the given string of html. - * - * @param {string} string The string to escape for inserting into HTML - * @return {string} - * @public - */ - - function escapeHtml(string) { - var str = '' + string; - var match = matchHtmlRegExp.exec(str); - - if (!match) { - return str; - } - - var escape; - var html = ''; - var index = 0; - var lastIndex = 0; - - for (index = match.index; index < str.length; index++) { - switch (str.charCodeAt(index)) { - case 34: // " - escape = '"'; - break; - case 38: // & - escape = '&'; - break; - case 39: // ' - escape = '''; - break; - case 60: // < - escape = '<'; - break; - case 62: // > - escape = '>'; - break; - default: - continue; - } - - if (lastIndex !== index) { - html += str.substring(lastIndex, index); - } - - lastIndex = index + 1; - html += escape; - } - - return lastIndex !== index - ? html + str.substring(lastIndex, index) - : html; - } - - // Copyright 2018 The Distill Template Authors - - function Meta(dom, data) { - let head = dom.querySelector('head'); - let appendHead = html => appendHtml(head, html); - - function meta(name, content, force) { - if (content || force) - appendHead(` \n`); - } - - appendHead(` - - - - `); - - if (data.title) { - appendHead(` - ${escapeHtml_1(data.title)} - `); - } - - if (data.url) { - appendHead(` - - `); - } - - - if (data.publishedDate){ - appendHead(` - - - - - `); - } - - if (data.updatedDate) { - appendHead(` - - `); - } - - (data.authors || []).forEach((a) => { - appendHtml(head, ` - `); - }); - - appendHead(` - - - - - - - - - `); - - appendHead(` - - - - - - - - - `); - - // if this is a proprer article, generate Google Scholar meta data - if (data.doiSuffix){ - appendHead(` - \n`); - - meta('citation_title', data.title); - meta('citation_fulltext_html_url', data.url); - meta('citation_volume', data.volume); - meta('citation_issue', data.issue); - meta('citation_firstpage', data.doiSuffix ? `e${data.doiSuffix}` : undefined); - meta('citation_doi', data.doi); - - let journal = data.journal || {}; - meta('citation_journal_title', journal.full_title || journal.title); - meta('citation_journal_abbrev', journal.abbrev_title); - meta('citation_issn', journal.issn); - meta('citation_publisher', journal.publisher); - meta('citation_fulltext_world_readable', '', true); - - if (data.publishedDate){ - meta('citation_online_date', `${data.publishedYear}/${data.publishedMonthPadded}/${data.publishedDayPadded}`); - meta('citation_publication_date', `${data.publishedYear}/${data.publishedMonthPadded}/${data.publishedDayPadded}`); - } - - (data.authors || []).forEach((a) => { - meta('citation_author', `${a.lastName}, ${a.firstName}`); - meta('citation_author_institution', a.affiliation); - }); - } else { - console.warn('No DOI suffix in data; not adding citation meta tags!'); - } - - if (data.citations) { - data.citations.forEach(key => { - if (data.bibliography && data.bibliography.has(key)) { - const entry = data.bibliography.get(key); - meta('citation_reference', citation_meta_content(entry) ); - } else { - console.warn('No bibliography data found for ' + key); - } - }); - } else { - console.warn('No citations found; not adding any references meta tags!'); - } - } - - function appendHtml(el, html) { - el.innerHTML += html; - } - - function citation_meta_content(ref){ - var content = `citation_title=${ref.title};`; - - if (ref.author && ref.author !== '') { - ref.author.split(' and ').forEach(name => { - name = name.trim(); - let last, firsts; - if (name.indexOf(',') != -1){ - last = name.split(',')[0].trim(); - firsts = name.split(',')[1].trim(); - } else { - last = name.split(' ').slice(-1)[0].trim(); - firsts = name.split(' ').slice(0,-1).join(' '); - } - content += `citation_author=${firsts} ${last};`; - }); - } - - if ('year' in ref) { - content += `citation_publication_date=${ref.year};`; - } - - // Special test for arxiv - let arxiv_id_search = /https?:\/\/arxiv\.org\/pdf\/([0-9]*\.[0-9]*)\.pdf/.exec(ref.url); - arxiv_id_search = arxiv_id_search || /https?:\/\/arxiv\.org\/abs\/([0-9]*\.[0-9]*)/.exec(ref.url); - arxiv_id_search = arxiv_id_search || /arXiv preprint arXiv:([0-9]*\.[0-9]*)/.exec(ref.journal); - if (arxiv_id_search && arxiv_id_search[1]){ - content += `citation_arxiv_id=${arxiv_id_search[1]};`; - return content; // arXiv is not considered a journal, so we don't need journal/volume/issue - } - if ('journal' in ref){ - content += `citation_journal_title=${escapeHtml_1(ref.journal)};`; - } - if ('volume' in ref) { - content += `citation_volume=${escapeHtml_1(ref.volume)};`; - } - if ('issue' in ref || 'number' in ref){ - content += `citation_number=${escapeHtml_1(ref.issue || ref.number)};`; - } - return content; - } - - var base = "/*\n * Copyright 2018 The Distill Template Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nhtml {\n font-size: 14px;\n\tline-height: 1.6em;\n /* font-family: \"Libre Franklin\", \"Helvetica Neue\", sans-serif; */\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Oxygen, Ubuntu, Cantarell, \"Fira Sans\", \"Droid Sans\", \"Helvetica Neue\", Arial, sans-serif;\n /*, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\";*/\n text-size-adjust: 100%;\n -ms-text-size-adjust: 100%;\n -webkit-text-size-adjust: 100%;\n}\n\n@media(min-width: 768px) {\n html {\n font-size: 16px;\n }\n}\n\nbody {\n margin: 0;\n}\n\na {\n color: #004276;\n}\n\nfigure {\n margin: 0;\n}\n\ntable {\n\tborder-collapse: collapse;\n\tborder-spacing: 0;\n}\n\ntable th {\n\ttext-align: left;\n}\n\ntable thead {\n border-bottom: 1px solid rgba(0, 0, 0, 0.05);\n}\n\ntable thead th {\n padding-bottom: 0.5em;\n}\n\ntable tbody :first-child td {\n padding-top: 0.5em;\n}\n\npre {\n overflow: auto;\n max-width: 100%;\n}\n\np {\n margin-top: 0;\n margin-bottom: 1em;\n}\n\nsup, sub {\n vertical-align: baseline;\n position: relative;\n top: -0.4em;\n line-height: 1em;\n}\n\nsub {\n top: 0.4em;\n}\n\n.kicker,\n.marker {\n font-size: 15px;\n font-weight: 600;\n color: rgba(0, 0, 0, 0.5);\n}\n\n\n/* Headline */\n\n@media(min-width: 1024px) {\n d-title h1 span {\n display: block;\n }\n}\n\n/* Figure */\n\nfigure {\n position: relative;\n margin-bottom: 2.5em;\n margin-top: 1.5em;\n}\n\nfigcaption+figure {\n\n}\n\nfigure img {\n width: 100%;\n}\n\nfigure svg text,\nfigure svg tspan {\n}\n\nfigcaption,\n.figcaption {\n color: rgba(0, 0, 0, 0.6);\n font-size: 12px;\n line-height: 1.5em;\n}\n\n@media(min-width: 1024px) {\nfigcaption,\n.figcaption {\n font-size: 13px;\n }\n}\n\nfigure.external img {\n background: white;\n border: 1px solid rgba(0, 0, 0, 0.1);\n box-shadow: 0 1px 8px rgba(0, 0, 0, 0.1);\n padding: 18px;\n box-sizing: border-box;\n}\n\nfigcaption a {\n color: rgba(0, 0, 0, 0.6);\n}\n\nfigcaption b,\nfigcaption strong, {\n font-weight: 600;\n color: rgba(0, 0, 0, 1.0);\n}\n"; - - var layout = "/*\n * Copyright 2018 The Distill Template Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n@supports not (display: grid) {\n .base-grid,\n distill-header,\n d-title,\n d-abstract,\n d-article,\n d-appendix,\n distill-appendix,\n d-byline,\n d-footnote-list,\n d-citation-list,\n distill-footer {\n display: block;\n padding: 8px;\n }\n}\n\n.base-grid,\ndistill-header,\nd-title,\nd-abstract,\nd-article,\nd-appendix,\ndistill-appendix,\nd-byline,\nd-footnote-list,\nd-citation-list,\ndistill-footer {\n display: grid;\n justify-items: stretch;\n grid-template-columns: [screen-start] 8px [page-start kicker-start text-start gutter-start middle-start] 1fr 1fr 1fr 1fr 1fr 1fr 1fr 1fr [text-end page-end gutter-end kicker-end middle-end] 8px [screen-end];\n grid-column-gap: 8px;\n}\n\n.grid {\n display: grid;\n grid-column-gap: 8px;\n}\n\n@media(min-width: 768px) {\n .base-grid,\n distill-header,\n d-title,\n d-abstract,\n d-article,\n d-appendix,\n distill-appendix,\n d-byline,\n d-footnote-list,\n d-citation-list,\n distill-footer {\n grid-template-columns: [screen-start] 1fr [page-start kicker-start middle-start text-start] 45px 45px 45px 45px 45px 45px 45px 45px [ kicker-end text-end gutter-start] 45px [middle-end] 45px [page-end gutter-end] 1fr [screen-end];\n grid-column-gap: 16px;\n }\n\n .grid {\n grid-column-gap: 16px;\n }\n}\n\n@media(min-width: 1000px) {\n .base-grid,\n distill-header,\n d-title,\n d-abstract,\n d-article,\n d-appendix,\n distill-appendix,\n d-byline,\n d-footnote-list,\n d-citation-list,\n distill-footer {\n grid-template-columns: [screen-start] 1fr [page-start kicker-start] 50px [middle-start] 50px [text-start kicker-end] 50px 50px 50px 50px 50px 50px 50px 50px [text-end gutter-start] 50px [middle-end] 50px [page-end gutter-end] 1fr [screen-end];\n grid-column-gap: 16px;\n }\n\n .grid {\n grid-column-gap: 16px;\n }\n}\n\n@media(min-width: 1180px) {\n .base-grid,\n distill-header,\n d-title,\n d-abstract,\n d-article,\n d-appendix,\n distill-appendix,\n d-byline,\n d-footnote-list,\n d-citation-list,\n distill-footer {\n grid-template-columns: [screen-start] 1fr [page-start kicker-start] 60px [middle-start] 60px [text-start kicker-end] 60px 60px 60px 60px 60px 60px 60px 60px [text-end gutter-start] 60px [middle-end] 60px [page-end gutter-end] 1fr [screen-end];\n grid-column-gap: 32px;\n }\n\n .grid {\n grid-column-gap: 32px;\n }\n}\n\n\n\n\n.base-grid {\n grid-column: screen;\n}\n\n/* .l-body,\nd-article > * {\n grid-column: text;\n}\n\n.l-page,\nd-title > *,\nd-figure {\n grid-column: page;\n} */\n\n.l-gutter {\n grid-column: gutter;\n}\n\n.l-text,\n.l-body {\n grid-column: text;\n}\n\n.l-page {\n grid-column: page;\n}\n\n.l-body-outset {\n grid-column: middle;\n}\n\n.l-page-outset {\n grid-column: page;\n}\n\n.l-screen {\n grid-column: screen;\n}\n\n.l-screen-inset {\n grid-column: screen;\n padding-left: 16px;\n padding-left: 16px;\n}\n\n\n/* Aside */\n\nd-article aside {\n grid-column: gutter;\n font-size: 12px;\n line-height: 1.6em;\n color: rgba(0, 0, 0, 0.6)\n}\n\n@media(min-width: 768px) {\n aside {\n grid-column: gutter;\n }\n\n .side {\n grid-column: gutter;\n }\n}\n"; - - var print = "/*\n * Copyright 2018 The Distill Template Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n@media print {\n\n @page {\n size: 8in 11in;\n @bottom-right {\n content: counter(page) \" of \" counter(pages);\n }\n }\n\n html {\n /* no general margins -- CSS Grid takes care of those */\n }\n\n p, code {\n page-break-inside: avoid;\n }\n\n h2, h3 {\n page-break-after: avoid;\n }\n\n d-header {\n visibility: hidden;\n }\n\n d-footer {\n display: none!important;\n }\n\n}\n"; - - var byline = "/*\n * Copyright 2018 The Distill Template Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nd-byline {\n contain: style;\n overflow: hidden;\n border-top: 1px solid rgba(0, 0, 0, 0.1);\n font-size: 0.8rem;\n line-height: 1.8em;\n padding: 1.5rem 0;\n min-height: 1.8em;\n}\n\n\nd-byline .byline {\n grid-template-columns: 1fr 1fr;\n grid-column: text;\n}\n\n@media(min-width: 768px) {\n d-byline .byline {\n grid-template-columns: 1fr 1fr 1fr 1fr;\n }\n}\n\nd-byline .authors-affiliations {\n grid-column-end: span 2;\n grid-template-columns: 1fr 1fr;\n margin-bottom: 1em;\n}\n\n@media(min-width: 768px) {\n d-byline .authors-affiliations {\n margin-bottom: 0;\n }\n}\n\nd-byline h3 {\n font-size: 0.6rem;\n font-weight: 400;\n color: rgba(0, 0, 0, 0.5);\n margin: 0;\n text-transform: uppercase;\n}\n\nd-byline p {\n margin: 0;\n}\n\nd-byline a,\nd-article d-byline a {\n color: rgba(0, 0, 0, 0.8);\n text-decoration: none;\n border-bottom: none;\n}\n\nd-article d-byline a:hover {\n text-decoration: underline;\n border-bottom: none;\n}\n\nd-byline p.author {\n font-weight: 500;\n}\n\nd-byline .affiliations {\n\n}\n"; - - var article = "/*\n * Copyright 2018 The Distill Template Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nd-article {\n contain: layout style;\n overflow-x: hidden;\n border-top: 1px solid rgba(0, 0, 0, 0.1);\n padding-top: 2rem;\n color: rgba(0, 0, 0, 0.8);\n}\n\nd-article > * {\n grid-column: text;\n}\n\n@media(min-width: 768px) {\n d-article {\n font-size: 16px;\n }\n}\n\n@media(min-width: 1024px) {\n d-article {\n font-size: 1.06rem;\n line-height: 1.7em;\n }\n}\n\n\n/* H2 */\n\n\nd-article .marker {\n text-decoration: none;\n border: none;\n counter-reset: section;\n grid-column: kicker;\n line-height: 1.7em;\n}\n\nd-article .marker:hover {\n border: none;\n}\n\nd-article .marker span {\n padding: 0 3px 4px;\n border-bottom: 1px solid rgba(0, 0, 0, 0.2);\n position: relative;\n top: 4px;\n}\n\nd-article .marker:hover span {\n color: rgba(0, 0, 0, 0.7);\n border-bottom: 1px solid rgba(0, 0, 0, 0.7);\n}\n\nd-article h2 {\n font-weight: 600;\n font-size: 24px;\n line-height: 1.25em;\n margin: 2rem 0 1.5rem 0;\n border-bottom: 1px solid rgba(0, 0, 0, 0.1);\n padding-bottom: 1rem;\n}\n\n@media(min-width: 1024px) {\n d-article h2 {\n font-size: 36px;\n }\n}\n\n/* H3 */\n\nd-article h3 {\n font-weight: 700;\n font-size: 18px;\n line-height: 1.4em;\n margin-bottom: 1em;\n margin-top: 2em;\n}\n\n@media(min-width: 1024px) {\n d-article h3 {\n font-size: 20px;\n }\n}\n\n/* H4 */\n\nd-article h4 {\n font-weight: 600;\n text-transform: uppercase;\n font-size: 14px;\n line-height: 1.4em;\n}\n\nd-article a {\n color: inherit;\n}\n\nd-article p,\nd-article ul,\nd-article ol,\nd-article blockquote {\n margin-top: 0;\n margin-bottom: 1em;\n margin-left: 0;\n margin-right: 0;\n}\n\nd-article blockquote {\n border-left: 2px solid rgba(0, 0, 0, 0.2);\n padding-left: 2em;\n font-style: italic;\n color: rgba(0, 0, 0, 0.6);\n}\n\nd-article a {\n border-bottom: 1px solid rgba(0, 0, 0, 0.4);\n text-decoration: none;\n}\n\nd-article a:hover {\n border-bottom: 1px solid rgba(0, 0, 0, 0.8);\n}\n\nd-article .link {\n text-decoration: underline;\n cursor: pointer;\n}\n\nd-article ul,\nd-article ol {\n padding-left: 24px;\n}\n\nd-article li {\n margin-bottom: 1em;\n margin-left: 0;\n padding-left: 0;\n}\n\nd-article li:last-child {\n margin-bottom: 0;\n}\n\nd-article pre {\n font-size: 14px;\n margin-bottom: 20px;\n}\n\nd-article hr {\n grid-column: screen;\n width: 100%;\n border: none;\n border-bottom: 1px solid rgba(0, 0, 0, 0.1);\n margin-top: 60px;\n margin-bottom: 60px;\n}\n\nd-article section {\n margin-top: 60px;\n margin-bottom: 60px;\n}\n\nd-article span.equation-mimic {\n font-family: georgia;\n font-size: 115%;\n font-style: italic;\n}\n\nd-article > d-code,\nd-article section > d-code {\n display: block;\n}\n\nd-article > d-math[block],\nd-article section > d-math[block] {\n display: block;\n}\n\n@media (max-width: 768px) {\n d-article > d-code,\n d-article section > d-code,\n d-article > d-math[block],\n d-article section > d-math[block] {\n overflow-x: scroll;\n -ms-overflow-style: none; // IE 10+\n overflow: -moz-scrollbars-none; // Firefox\n }\n\n d-article > d-code::-webkit-scrollbar,\n d-article section > d-code::-webkit-scrollbar,\n d-article > d-math[block]::-webkit-scrollbar,\n d-article section > d-math[block]::-webkit-scrollbar {\n display: none; // Safari and Chrome\n }\n}\n\nd-article .citation {\n color: #668;\n cursor: pointer;\n}\n\nd-include {\n width: auto;\n display: block;\n}\n\nd-figure {\n contain: layout style;\n}\n\n/* KaTeX */\n\n.katex, .katex-prerendered {\n contain: style;\n display: inline-block;\n}\n\n/* Tables */\n\nd-article table {\n border-collapse: collapse;\n margin-bottom: 1.5rem;\n border-bottom: 1px solid rgba(0, 0, 0, 0.2);\n}\n\nd-article table th {\n border-bottom: 1px solid rgba(0, 0, 0, 0.2);\n}\n\nd-article table td {\n border-bottom: 1px solid rgba(0, 0, 0, 0.05);\n}\n\nd-article table tr:last-of-type td {\n border-bottom: none;\n}\n\nd-article table th,\nd-article table td {\n font-size: 15px;\n padding: 2px 8px;\n}\n\nd-article table tbody :first-child td {\n padding-top: 2px;\n}\n"; - - var title = "/*\n * Copyright 2018 The Distill Template Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nd-title {\n padding: 2rem 0 1.5rem;\n contain: layout style;\n overflow-x: hidden;\n}\n\n@media(min-width: 768px) {\n d-title {\n padding: 4rem 0 1.5rem;\n }\n}\n\nd-title h1 {\n grid-column: text;\n font-size: 40px;\n font-weight: 700;\n line-height: 1.1em;\n margin: 0 0 0.5rem;\n}\n\n@media(min-width: 768px) {\n d-title h1 {\n font-size: 50px;\n }\n}\n\nd-title p {\n font-weight: 300;\n font-size: 1.2rem;\n line-height: 1.55em;\n grid-column: text;\n}\n\nd-title .status {\n margin-top: 0px;\n font-size: 12px;\n color: #009688;\n opacity: 0.8;\n grid-column: kicker;\n}\n\nd-title .status span {\n line-height: 1;\n display: inline-block;\n padding: 6px 0;\n border-bottom: 1px solid #80cbc4;\n font-size: 11px;\n text-transform: uppercase;\n}\n"; - - var math = "/*\n * Copyright 2018 The Distill Template Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nspan.katex-display {\n text-align: left;\n padding: 8px 0 8px 0;\n margin: 0.5em 0 0.5em 1em;\n}\n\nspan.katex {\n -webkit-font-smoothing: antialiased;\n color: rgba(0, 0, 0, 0.8);\n font-size: 1.18em;\n}\n"; - - // Copyright 2018 The Distill Template Authors - - const styles = base + layout + title + byline + article + math + print; - - function makeStyleTag(dom) { - - const styleTagId = 'distill-prerendered-styles'; - const prerenderedTag = dom.getElementById(styleTagId); - if (!prerenderedTag) { - const styleTag = dom.createElement('style'); - styleTag.id = styleTagId; - styleTag.type = 'text/css'; - const cssTextTag = dom.createTextNode(styles); - styleTag.appendChild(cssTextTag); - const firstScriptTag = dom.head.querySelector('script'); - dom.head.insertBefore(styleTag, firstScriptTag); - } - - } - - // Copyright 2018 The Distill Template Authors - - function renderTOC(element, headings) { - - let ToC =` - - -

      Table of contents

      -
        `; - - for (const el of headings) { - // should element be included in TOC? - const isInTitle = el.parentElement.tagName == 'D-TITLE'; - const isException = el.getAttribute('no-toc'); - if (isInTitle || isException) continue; - // create TOC entry - const title = el.textContent; - const link = '#' + el.getAttribute('id'); - - let newLine = '
      • ' + '' + title + '' + '
      • '; - if (el.tagName == 'H3') { - newLine = '
          ' + newLine + '
        '; - } else { - newLine += '
        '; - } - ToC += newLine; - - } - - ToC += '
      '; - element.innerHTML = ToC; - } - - // Copyright 2018 The Distill Template Authors - - function TOC(dom) { - const article = dom.querySelector('d-article'); - const toc = dom.querySelector('d-toc'); - if (toc) { - const headings = article.querySelectorAll('h2, h3'); - renderTOC(toc, headings); - toc.setAttribute('prerendered', 'true'); - } - } - - // Copyright 2018 The Distill Template Authors - // - // Licensed under the Apache License, Version 2.0 (the "License"); - // you may not use this file except in compliance with the License. - // You may obtain a copy of the License at - // - // http://www.apache.org/licenses/LICENSE-2.0 - // - // Unless required by applicable law or agreed to in writing, software - // distributed under the License is distributed on an "AS IS" BASIS, - // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - // See the License for the specific language governing permissions and - // limitations under the License. - - function Typeset(dom) { - - var textNodes = dom.createTreeWalker( - dom.body, - dom.defaultView.NodeFilter.SHOW_TEXT - ); - while (textNodes.nextNode()) { - var n = textNodes.currentNode, - text = n.nodeValue; - if (text && acceptNode(n)) { - text = quotes(text); - text = punctuation(text); - // TODO: Add back support for ligatures once their uppercased versions don't hang Chrome search anymore - // see: https://bugs.chromium.org/p/chromium/issues/detail?id=862648 - // text = ligatures(text); - n.nodeValue = text; - } - } - } - - // 2018-07-11 shancarter@ and ludwigschubert@ no longer know what this was meant to accomplish - // if it was trying to not replace text in any child nodes of those listed here, - // then it does not accomplish that. - function acceptNode(node) { - var parent = node.parentElement; - var isMath = (parent && parent.getAttribute && parent.getAttribute('class')) ? parent.getAttribute('class').includes('katex') || parent.getAttribute('class').includes('MathJax') : false; - return parent && - parent.nodeName !== 'SCRIPT' && - parent.nodeName !== 'STYLE' && - parent.nodeName !== 'CODE' && - parent.nodeName !== 'PRE' && - parent.nodeName !== 'SPAN' && - parent.nodeName !== 'D-HEADER' && - parent.nodeName !== 'D-BYLINE' && - parent.nodeName !== 'D-MATH' && - parent.nodeName !== 'D-CODE' && - parent.nodeName !== 'D-BIBLIOGRAPHY' && - parent.nodeName !== 'D-FOOTER' && - parent.nodeName !== 'D-APPENDIX' && - parent.nodeName !== 'D-FRONTMATTER' && - parent.nodeName !== 'D-TOC' && - parent.nodeType !== 8 && //comment nodes - !isMath; - } - - - /*! - * typeset - Typesetting for the web - * @version v0.1.6 - * @link https://github.com/davidmerfield/Typeset.js - * @author David Merfield - */ - // which has a CC0 license - // http://creativecommons.org/publicdomain/zero/1.0/ - - - function punctuation(text){ - - // Dashes - text = text.replace(/--/g, '\u2014'); - text = text.replace(/\s*\u2014\s*/g,'\u2009\u2014\u2009'); //this has thin spaces - - // Elipses - text = text.replace(/\.\.\./g,'…'); - - // Nbsp for punc with spaces - var NBSP = '\u00a0'; - var NBSP_PUNCTUATION_START = /([«¿¡]) /g; - var NBSP_PUNCTUATION_END = / ([!?:;.,‽»])/g; - - text = text.replace(NBSP_PUNCTUATION_START, '$1' + NBSP); - text = text.replace(NBSP_PUNCTUATION_END, NBSP + '$1'); - - return text; - } - - function quotes(text) { - - text = text - .replace(/(\W|^)"([^\s!?:;.,‽»])/g, '$1\u201c$2') // beginning " - .replace(/(\u201c[^"]*)"([^"]*$|[^\u201c"]*\u201c)/g, '$1\u201d$2') // ending " - .replace(/([^0-9])"/g,'$1\u201d') // remaining " at end of word - .replace(/(\W|^)'(\S)/g, '$1\u2018$2') // beginning ' - .replace(/([a-z])'([a-z])/ig, '$1\u2019$2') // conjunction's possession - .replace(/((\u2018[^']*)|[a-z])'([^0-9]|$)/ig, '$1\u2019$3') // ending ' - .replace(/(\u2018)([0-9]{2}[^\u2019]*)(\u2018([^0-9]|$)|$|\u2019[a-z])/ig, '\u2019$2$3') // abbrev. years like '93 - .replace(/(\B|^)\u2018(?=([^\u2019]*\u2019\b)*([^\u2019\u2018]*\W[\u2019\u2018]\b|[^\u2019\u2018]*$))/ig, '$1\u2019') // backwards apostrophe - .replace(/'''/g, '\u2034') // triple prime - .replace(/("|'')/g, '\u2033') // double prime - .replace(/'/g, '\u2032'); - - // Allow escaped quotes - text = text.replace(/\\“/, '"'); - text = text.replace(/\\”/, '"'); - text = text.replace(/\\’/, '\''); - text = text.replace(/\\‘/, '\''); - - return text; - } - - // Copyright 2018 The Distill Template Authors - - // const template = ` - // if ('IntersectionObserver' in window && - // 'IntersectionObserverEntry' in window && - // 'intersectionRatio' in IntersectionObserverEntry.prototype) { - // // Platform supports IntersectionObserver natively! :-) - // if (!('isIntersecting' in IntersectionObserverEntry.prototype)) { - // Object.defineProperty(IntersectionObserverEntry.prototype, - // 'isIntersecting', { - // get: function () { - // return this.intersectionRatio > 0; - // } - // }); - // } - // } else { - // // Platform does not support webcomponents--loading polyfills synchronously. - // const scriptTag = document.createElement('script'); - // scriptTag.src = '${intersectionObserverPath}'; - // scriptTag.async = false; - // document.currentScript.parentNode.insertBefore(scriptTag, document.currentScript.nextSibling); - // } - // - // if ('registerElement' in document && - // 'import' in document.createElement('link') && - // 'content' in document.createElement('template')) { - // // Platform supports webcomponents natively! :-) - // } else { - // // Platform does not support webcomponents--loading polyfills synchronously. - // const scriptTag = document.createElement('script'); - // scriptTag.src = '${webcomponentPath}'; - // scriptTag.async = false; - // document.currentScript.parentNode.insertBefore(scriptTag, document.currentScript.nextSibling); - // } - // - // - // `; - - - const addBackIn = ` -window.addEventListener('WebComponentsReady', function() { - console.warn('WebComponentsReady'); - const loaderTag = document.createElement('script'); - loaderTag.src = 'https://distill.pub/template.v2.js'; - document.head.insertBefore(loaderTag, document.head.firstChild); -}); -`; - - function render(dom) { - // pull out template script tag - const templateTag = dom.querySelector('script[src*="template.v2.js"]'); - if (templateTag) { - templateTag.parentNode.removeChild(templateTag); - } else { - console.debug('FYI: Did not find template tag when trying to remove it. You may not have added it. Be aware that our polyfills will add it.'); - } - - // add loader - const loaderTag = dom.createElement('script'); - loaderTag.src = 'https://cdnjs.cloudflare.com/ajax/libs/webcomponentsjs/1.0.17/webcomponents-loader.js'; - dom.head.insertBefore(loaderTag, dom.head.firstChild); - - // add loader event listener to add tempalrte back in - const addTag = dom.createElement('script'); - addTag.innerHTML = addBackIn; - dom.head.insertBefore(addTag, dom.head.firstChild); - - - // create polyfill script tag - // const polyfillScriptTag = dom.createElement('script'); - // polyfillScriptTag.innerHTML = template; - // polyfillScriptTag.id = 'polyfills'; - - // insert at appropriate position--before any other script tag - // const firstScriptTag = dom.head.querySelector('script'); - // dom.head.insertBefore(polyfillScriptTag, firstScriptTag); - } - - // Copyright 2018 The Distill Template Authors - - const styles$1 = ` -d-citation-list { - contain: style; -} - -d-citation-list .references { - grid-column: text; -} - -d-citation-list .references .title { - font-weight: 500; -} -`; - - function renderCitationList(element, entries, dom=document) { - if (entries.size > 0) { - element.style.display = ''; - let list = element.querySelector('.references'); - if (list) { - list.innerHTML = ''; - } else { - const stylesTag = dom.createElement('style'); - stylesTag.innerHTML = styles$1; - element.appendChild(stylesTag); - - const heading = dom.createElement('h3'); - heading.id = 'references'; - heading.textContent = 'References'; - element.appendChild(heading); - - list = dom.createElement('ol'); - list.id = 'references-list'; - list.className = 'references'; - element.appendChild(list); - } - - for (const [key, entry] of entries) { - const listItem = dom.createElement('li'); - listItem.id = key; - listItem.innerHTML = bibliography_cite(entry); - list.appendChild(listItem); - } - } else { - element.style.display = 'none'; - } - } - - // Copyright 2018 The Distill Template Authors - - function CitationList(dom, data) { - const citationListTag = dom.querySelector('d-citation-list'); - if (citationListTag) { - const entries = new Map(data.citations.map( citationKey => { - return [citationKey, data.bibliography.get(citationKey)]; - })); - renderCitationList(citationListTag, entries, dom); - citationListTag.setAttribute('distill-prerendered', 'true'); - } - } - - // Copyright 2018 The Distill Template Authors - // - // Licensed under the Apache License, Version 2.0 (the "License"); - // you may not use this file except in compliance with the License. - // You may obtain a copy of the License at - // - // http://www.apache.org/licenses/LICENSE-2.0 - // - // Unless required by applicable law or agreed to in writing, software - // distributed under the License is distributed on an "AS IS" BASIS, - // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - // See the License for the specific language governing permissions and - // limitations under the License. - - /* - Try to only reorder things that MAY be user defined. - Try to use templates etc to define the order of our own tags. - */ - - function render$1(dom) { - const head = dom.head; - - const metaIE = head.querySelector('meta[http-equiv]'); - head.insertBefore(metaIE, head.firstChild); - - const metaViewport = head.querySelector('meta[name=viewport]'); - head.insertBefore(metaViewport, head.firstChild); - - const metaCharset = head.querySelector('meta[charset]'); - head.insertBefore(metaCharset, head.firstChild); - } - - var logo = "\n \n\n"; - - const headerTemplate = ` - - -`; - - // Copyright 2018 The Distill Template Authors - - function DistillHeader(dom, data) { - const headerTag = dom.querySelector('distill-header'); - if (!headerTag) { - const header = dom.createElement('distill-header'); - header.innerHTML = headerTemplate; - header.setAttribute('distill-prerendered', ""); - const body = dom.querySelector('body'); - body.insertBefore(header, body.firstChild); - } - } - - // Copyright 2018 The Distill Template Authors - - const styles$2 = ` - -`; - - function appendixTemplate(frontMatter) { - let html = styles$2; - - if (typeof frontMatter.githubUrl !== 'undefined') { - html += ` -

      Updates and Corrections

      -

      `; - if (frontMatter.githubCompareUpdatesUrl) { - html += `View all changes to this article since it was first published.`; - } - html += ` - If you see mistakes or want to suggest changes, please create an issue on GitHub.

      - `; - } - - const journal = frontMatter.journal; - if (typeof journal !== 'undefined' && journal.title === 'Distill') { - html += ` -

      Reuse

      -

      Diagrams and text are licensed under Creative Commons Attribution CC-BY 4.0 with the source available on GitHub, unless noted otherwise. The figures that have been reused from other sources don’t fall under this license and can be recognized by a note in their caption: “Figure from …”.

      - `; - } - - if (typeof frontMatter.publishedDate !== 'undefined') { - html += ` -

      Citation

      -

      For attribution in academic contexts, please cite this work as

      -
      ${frontMatter.concatenatedAuthors}, "${frontMatter.title}", Distill, ${frontMatter.publishedYear}.
      -

      BibTeX citation

      -
      ${serializeFrontmatterToBibtex(frontMatter)}
      - `; - } - - return html; - } - - // Copyright 2018 The Distill Template Authors - - function DistillAppendix(dom, data) { - - const appendixTag = dom.querySelector('d-appendix'); - if (!appendixTag) { - console.warn('No appendix tag found!'); - return; - } - const distillAppendixTag = appendixTag.querySelector('distill-appendix'); - if (!distillAppendixTag) { - const distillAppendix = dom.createElement('distill-appendix'); - appendixTag.appendChild(distillAppendix); - distillAppendix.innerHTML = appendixTemplate(data); - } - - } - - const footerTemplate = ` - - - - -`; - - // Copyright 2018 The Distill Template Authors - - function DistillFooter(dom) { - const footerTag = dom.querySelector('distill-footer'); - if(!footerTag) { - const footer = dom.createElement('distill-footer'); - footer.innerHTML = footerTemplate; - const body = dom.querySelector('body'); - body.appendChild(footer); - } - } - - // Copyright 2018 The Distill Template Authors - - const extractors = new Map([ - ['ExtractFrontmatter', ExtractFrontmatter], - ['ExtractBibliography', ExtractBibliography], - ['ExtractCitations', ExtractCitations], - ]); - - const transforms = new Map([ - ['HTML', HTML], - ['makeStyleTag', makeStyleTag], - ['OptionalComponents', OptionalComponents], - ['TOC', TOC], - ['Byline', Byline], - ['Mathematics', Mathematics], - ['Meta', Meta], - ['Typeset', Typeset], - ['Polyfills', render], - ['CitationList', CitationList], - ['Reorder', render$1] // keep last - ]); - - const distillTransforms = new Map([ - ['DistillHeader', DistillHeader], - ['DistillAppendix', DistillAppendix], - ['DistillFooter', DistillFooter], - ]); - - /* Exported functions */ - - function render$2(dom, data, verbose=true) { - let frontMatter; - if (data instanceof FrontMatter) { - frontMatter = data; - } else { - frontMatter = FrontMatter.fromObject(data); - } - // first, we collect static data from the dom - for (const [name, extract] of extractors.entries()) { - if (verbose) console.warn('Running extractor: ' + name); - extract(dom, frontMatter, verbose); - } - // secondly we use it to transform parts of the dom - for (const [name, transform] of transforms.entries()) { - if (verbose) console.warn('Running transform: ' + name); - // console.warn('Running transform: ', transform); - transform(dom, frontMatter, verbose); - } - dom.body.setAttribute('distill-prerendered', ''); - // the function calling us can now use the transformed dom and filled data object - if (data instanceof FrontMatter) ; else { - frontMatter.assignToObject(data); - } - } - - function distillify(dom, data, verbose=true) { - // thirdly, we can use these additional transforms when publishing on the Distill website - for (const [name, transform] of distillTransforms.entries()) { - if (verbose) console.warn('Running distillify: ', name); - transform(dom, data, verbose); - } - } - - function usesTemplateV2(dom) { - const tags = dom.querySelectorAll('script'); - let usesV2 = undefined; - for (const tag of tags) { - const src = tag.src; - if (src.includes('template.v1.js')) { - usesV2 = false; - } else if (src.includes('template.v2.js')) { - usesV2 = true; - } else if (src.includes('template.')) { - throw new Error('Uses distill template, but unknown version?!'); - } - } - - if (usesV2 === undefined) { - throw new Error('Does not seem to use Distill template at all.'); - } else { - return usesV2; - } - } - - const testing = { - extractors: extractors, - transforms: transforms, - distillTransforms: distillTransforms - }; - - exports.FrontMatter = FrontMatter; - exports.distillify = distillify; - exports.render = render$2; - exports.testing = testing; - exports.usesTemplateV2 = usesTemplateV2; - - Object.defineProperty(exports, '__esModule', { value: true }); - -}))); -//# sourceMappingURL=transforms.v2.js.map +// Copyright 2018 The Distill Template Authors +const me='/*\n * Copyright 2018 The Distill Template Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nhtml {\n font-size: 14px;\n\tline-height: 1.6em;\n /* font-family: "Libre Franklin", "Helvetica Neue", sans-serif; */\n font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Fira Sans", "Droid Sans", "Helvetica Neue", Arial, sans-serif;\n /*, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";*/\n text-size-adjust: 100%;\n -ms-text-size-adjust: 100%;\n -webkit-text-size-adjust: 100%;\n}\n\n@media(min-width: 768px) {\n html {\n font-size: 16px;\n }\n}\n\nbody {\n margin: 0;\n}\n\na {\n color: #004276;\n}\n\nfigure {\n margin: 0;\n}\n\ntable {\n\tborder-collapse: collapse;\n\tborder-spacing: 0;\n}\n\ntable th {\n\ttext-align: left;\n}\n\ntable thead {\n border-bottom: 1px solid rgba(0, 0, 0, 0.05);\n}\n\ntable thead th {\n padding-bottom: 0.5em;\n}\n\ntable tbody :first-child td {\n padding-top: 0.5em;\n}\n\npre {\n overflow: auto;\n max-width: 100%;\n}\n\np {\n margin-top: 0;\n margin-bottom: 1em;\n}\n\nsup, sub {\n vertical-align: baseline;\n position: relative;\n top: -0.4em;\n line-height: 1em;\n}\n\nsub {\n top: 0.4em;\n}\n\n.kicker,\n.marker {\n font-size: 15px;\n font-weight: 600;\n color: rgba(0, 0, 0, 0.5);\n}\n\n\n/* Headline */\n\n@media(min-width: 1024px) {\n d-title h1 span {\n display: block;\n }\n}\n\n/* Figure */\n\nfigure {\n position: relative;\n margin-bottom: 2.5em;\n margin-top: 1.5em;\n}\n\nfigcaption+figure {\n\n}\n\nfigure img {\n width: 100%;\n}\n\nfigure svg text,\nfigure svg tspan {\n}\n\nfigcaption,\n.figcaption {\n color: rgba(0, 0, 0, 0.6);\n font-size: 12px;\n line-height: 1.5em;\n}\n\n@media(min-width: 1024px) {\nfigcaption,\n.figcaption {\n font-size: 13px;\n }\n}\n\nfigure.external img {\n background: white;\n border: 1px solid rgba(0, 0, 0, 0.1);\n box-shadow: 0 1px 8px rgba(0, 0, 0, 0.1);\n padding: 18px;\n box-sizing: border-box;\n}\n\nfigcaption a {\n color: rgba(0, 0, 0, 0.6);\n}\n\nfigcaption b,\nfigcaption strong, {\n font-weight: 600;\n color: rgba(0, 0, 0, 1.0);\n}\n'+'/*\n * Copyright 2018 The Distill Template Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n@supports not (display: grid) {\n .base-grid,\n distill-header,\n d-title,\n d-abstract,\n d-article,\n d-appendix,\n distill-appendix,\n d-byline,\n d-footnote-list,\n d-citation-list,\n distill-footer {\n display: block;\n padding: 8px;\n }\n}\n\n.base-grid,\ndistill-header,\nd-title,\nd-abstract,\nd-article,\nd-appendix,\ndistill-appendix,\nd-byline,\nd-footnote-list,\nd-citation-list,\ndistill-footer {\n display: grid;\n justify-items: stretch;\n grid-template-columns: [screen-start] 8px [page-start kicker-start text-start gutter-start middle-start] 1fr 1fr 1fr 1fr 1fr 1fr 1fr 1fr [text-end page-end gutter-end kicker-end middle-end] 8px [screen-end];\n grid-column-gap: 8px;\n}\n\n.grid {\n display: grid;\n grid-column-gap: 8px;\n}\n\n@media(min-width: 768px) {\n .base-grid,\n distill-header,\n d-title,\n d-abstract,\n d-article,\n d-appendix,\n distill-appendix,\n d-byline,\n d-footnote-list,\n d-citation-list,\n distill-footer {\n grid-template-columns: [screen-start] 1fr [page-start kicker-start middle-start text-start] 45px 45px 45px 45px 45px 45px 45px 45px [ kicker-end text-end gutter-start] 45px [middle-end] 45px [page-end gutter-end] 1fr [screen-end];\n grid-column-gap: 16px;\n }\n\n .grid {\n grid-column-gap: 16px;\n }\n}\n\n@media(min-width: 1000px) {\n .base-grid,\n distill-header,\n d-title,\n d-abstract,\n d-article,\n d-appendix,\n distill-appendix,\n d-byline,\n d-footnote-list,\n d-citation-list,\n distill-footer {\n grid-template-columns: [screen-start] 1fr [page-start kicker-start] 50px [middle-start] 50px [text-start kicker-end] 50px 50px 50px 50px 50px 50px 50px 50px [text-end gutter-start] 50px [middle-end] 50px [page-end gutter-end] 1fr [screen-end];\n grid-column-gap: 16px;\n }\n\n .grid {\n grid-column-gap: 16px;\n }\n}\n\n@media(min-width: 1180px) {\n .base-grid,\n distill-header,\n d-title,\n d-abstract,\n d-article,\n d-appendix,\n distill-appendix,\n d-byline,\n d-footnote-list,\n d-citation-list,\n distill-footer {\n grid-template-columns: [screen-start] 1fr [page-start kicker-start] 60px [middle-start] 60px [text-start kicker-end] 60px 60px 60px 60px 60px 60px 60px 60px [text-end gutter-start] 60px [middle-end] 60px [page-end gutter-end] 1fr [screen-end];\n grid-column-gap: 32px;\n }\n\n .grid {\n grid-column-gap: 32px;\n }\n}\n\n\n\n\n.base-grid {\n grid-column: screen;\n}\n\n/* .l-body,\nd-article > * {\n grid-column: text;\n}\n\n.l-page,\nd-title > *,\nd-figure {\n grid-column: page;\n} */\n\n.l-gutter {\n grid-column: gutter;\n}\n\n.l-text,\n.l-body {\n grid-column: text;\n}\n\n.l-page {\n grid-column: page;\n}\n\n.l-body-outset {\n grid-column: middle;\n}\n\n.l-page-outset {\n grid-column: page;\n}\n\n.l-screen {\n grid-column: screen;\n}\n\n.l-screen-inset {\n grid-column: screen;\n padding-left: 16px;\n padding-left: 16px;\n}\n\n\n/* Aside */\n\nd-article aside {\n grid-column: gutter;\n font-size: 12px;\n line-height: 1.6em;\n color: rgba(0, 0, 0, 0.6)\n}\n\n@media(min-width: 768px) {\n aside {\n grid-column: gutter;\n }\n\n .side {\n grid-column: gutter;\n }\n}\n'+'/*\n * Copyright 2018 The Distill Template Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nd-title {\n padding: 2rem 0 1.5rem;\n contain: layout style;\n overflow-x: hidden;\n}\n\n@media(min-width: 768px) {\n d-title {\n padding: 4rem 0 1.5rem;\n }\n}\n\nd-title h1 {\n grid-column: text;\n font-size: 40px;\n font-weight: 700;\n line-height: 1.1em;\n margin: 0 0 0.5rem;\n}\n\n@media(min-width: 768px) {\n d-title h1 {\n font-size: 50px;\n }\n}\n\nd-title p {\n font-weight: 300;\n font-size: 1.2rem;\n line-height: 1.55em;\n grid-column: text;\n}\n\nd-title .status {\n margin-top: 0px;\n font-size: 12px;\n color: #009688;\n opacity: 0.8;\n grid-column: kicker;\n}\n\nd-title .status span {\n line-height: 1;\n display: inline-block;\n padding: 6px 0;\n border-bottom: 1px solid #80cbc4;\n font-size: 11px;\n text-transform: uppercase;\n}\n'+'/*\n * Copyright 2018 The Distill Template Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nd-byline {\n contain: style;\n overflow: hidden;\n border-top: 1px solid rgba(0, 0, 0, 0.1);\n font-size: 0.8rem;\n line-height: 1.8em;\n padding: 1.5rem 0;\n min-height: 1.8em;\n}\n\n\nd-byline .byline {\n grid-template-columns: 1fr 1fr;\n grid-column: text;\n}\n\n@media(min-width: 768px) {\n d-byline .byline {\n grid-template-columns: 1fr 1fr 1fr 1fr;\n }\n}\n\nd-byline .authors-affiliations {\n grid-column-end: span 2;\n grid-template-columns: 1fr 1fr;\n margin-bottom: 1em;\n}\n\n@media(min-width: 768px) {\n d-byline .authors-affiliations {\n margin-bottom: 0;\n }\n}\n\nd-byline h3 {\n font-size: 0.6rem;\n font-weight: 400;\n color: rgba(0, 0, 0, 0.5);\n margin: 0;\n text-transform: uppercase;\n}\n\nd-byline p {\n margin: 0;\n}\n\nd-byline a,\nd-article d-byline a {\n color: rgba(0, 0, 0, 0.8);\n text-decoration: none;\n border-bottom: none;\n}\n\nd-article d-byline a:hover {\n text-decoration: underline;\n border-bottom: none;\n}\n\nd-byline p.author {\n font-weight: 500;\n}\n\nd-byline .affiliations {\n\n}\n'+'/*\n * Copyright 2018 The Distill Template Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nd-article {\n contain: layout style;\n overflow-x: hidden;\n border-top: 1px solid rgba(0, 0, 0, 0.1);\n padding-top: 2rem;\n color: rgba(0, 0, 0, 0.8);\n}\n\nd-article > * {\n grid-column: text;\n}\n\n@media(min-width: 768px) {\n d-article {\n font-size: 16px;\n }\n}\n\n@media(min-width: 1024px) {\n d-article {\n font-size: 1.06rem;\n line-height: 1.7em;\n }\n}\n\n\n/* H2 */\n\n\nd-article .marker {\n text-decoration: none;\n border: none;\n counter-reset: section;\n grid-column: kicker;\n line-height: 1.7em;\n}\n\nd-article .marker:hover {\n border: none;\n}\n\nd-article .marker span {\n padding: 0 3px 4px;\n border-bottom: 1px solid rgba(0, 0, 0, 0.2);\n position: relative;\n top: 4px;\n}\n\nd-article .marker:hover span {\n color: rgba(0, 0, 0, 0.7);\n border-bottom: 1px solid rgba(0, 0, 0, 0.7);\n}\n\nd-article h2 {\n font-weight: 600;\n font-size: 24px;\n line-height: 1.25em;\n margin: 2rem 0 1.5rem 0;\n border-bottom: 1px solid rgba(0, 0, 0, 0.1);\n padding-bottom: 1rem;\n}\n\n@media(min-width: 1024px) {\n d-article h2 {\n font-size: 36px;\n }\n}\n\n/* H3 */\n\nd-article h3 {\n font-weight: 700;\n font-size: 18px;\n line-height: 1.4em;\n margin-bottom: 1em;\n margin-top: 2em;\n}\n\n@media(min-width: 1024px) {\n d-article h3 {\n font-size: 20px;\n }\n}\n\n/* H4 */\n\nd-article h4 {\n font-weight: 600;\n text-transform: uppercase;\n font-size: 14px;\n line-height: 1.4em;\n}\n\nd-article a {\n color: inherit;\n}\n\nd-article p,\nd-article ul,\nd-article ol,\nd-article blockquote {\n margin-top: 0;\n margin-bottom: 1em;\n margin-left: 0;\n margin-right: 0;\n}\n\nd-article blockquote {\n border-left: 2px solid rgba(0, 0, 0, 0.2);\n padding-left: 2em;\n font-style: italic;\n color: rgba(0, 0, 0, 0.6);\n}\n\nd-article a {\n border-bottom: 1px solid rgba(0, 0, 0, 0.4);\n text-decoration: none;\n}\n\nd-article a:hover {\n border-bottom: 1px solid rgba(0, 0, 0, 0.8);\n}\n\nd-article .link {\n text-decoration: underline;\n cursor: pointer;\n}\n\nd-article ul,\nd-article ol {\n padding-left: 24px;\n}\n\nd-article li {\n margin-bottom: 1em;\n margin-left: 0;\n padding-left: 0;\n}\n\nd-article li:last-child {\n margin-bottom: 0;\n}\n\nd-article pre {\n font-size: 14px;\n margin-bottom: 20px;\n}\n\nd-article hr {\n grid-column: screen;\n width: 100%;\n border: none;\n border-bottom: 1px solid rgba(0, 0, 0, 0.1);\n margin-top: 60px;\n margin-bottom: 60px;\n}\n\nd-article section {\n margin-top: 60px;\n margin-bottom: 60px;\n}\n\nd-article span.equation-mimic {\n font-family: georgia;\n font-size: 115%;\n font-style: italic;\n}\n\nd-article > d-code,\nd-article section > d-code {\n display: block;\n}\n\nd-article > d-math[block],\nd-article section > d-math[block] {\n display: block;\n}\n\n@media (max-width: 768px) {\n d-article > d-code,\n d-article section > d-code,\n d-article > d-math[block],\n d-article section > d-math[block] {\n overflow-x: scroll;\n -ms-overflow-style: none; // IE 10+\n overflow: -moz-scrollbars-none; // Firefox\n }\n\n d-article > d-code::-webkit-scrollbar,\n d-article section > d-code::-webkit-scrollbar,\n d-article > d-math[block]::-webkit-scrollbar,\n d-article section > d-math[block]::-webkit-scrollbar {\n display: none; // Safari and Chrome\n }\n}\n\nd-article .citation {\n color: #668;\n cursor: pointer;\n}\n\nd-include {\n width: auto;\n display: block;\n}\n\nd-figure {\n contain: layout style;\n}\n\n/* KaTeX */\n\n.katex, .katex-prerendered {\n contain: style;\n display: inline-block;\n}\n\n/* Tables */\n\nd-article table {\n border-collapse: collapse;\n margin-bottom: 1.5rem;\n border-bottom: 1px solid rgba(0, 0, 0, 0.2);\n}\n\nd-article table th {\n border-bottom: 1px solid rgba(0, 0, 0, 0.2);\n}\n\nd-article table td {\n border-bottom: 1px solid rgba(0, 0, 0, 0.05);\n}\n\nd-article table tr:last-of-type td {\n border-bottom: none;\n}\n\nd-article table th,\nd-article table td {\n font-size: 15px;\n padding: 2px 8px;\n}\n\nd-article table tbody :first-child td {\n padding-top: 2px;\n}\n'+'/*\n * Copyright 2018 The Distill Template Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nspan.katex-display {\n text-align: left;\n padding: 8px 0 8px 0;\n margin: 0.5em 0 0.5em 1em;\n}\n\nspan.katex {\n -webkit-font-smoothing: antialiased;\n color: rgba(0, 0, 0, 0.8);\n font-size: 1.18em;\n}\n'+'/*\n * Copyright 2018 The Distill Template Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n@media print {\n\n @page {\n size: 8in 11in;\n @bottom-right {\n content: counter(page) " of " counter(pages);\n }\n }\n\n html {\n /* no general margins -- CSS Grid takes care of those */\n }\n\n p, code {\n page-break-inside: avoid;\n }\n\n h2, h3 {\n page-break-after: avoid;\n }\n\n d-header {\n visibility: hidden;\n }\n\n d-footer {\n display: none!important;\n }\n\n}\n',ge="\nwindow.addEventListener('WebComponentsReady', function() {\n console.warn('WebComponentsReady');\n const loaderTag = document.createElement('script');\n loaderTag.src = 'https://distill.pub/template.v2.js';\n document.head.insertBefore(loaderTag, document.head.firstChild);\n});\n",ve="\nd-citation-list {\n contain: style;\n}\n\nd-citation-list .references {\n grid-column: text;\n}\n\nd-citation-list .references .title {\n font-weight: 500;\n}\n";var be='\n \n\n';const ye=`\n\n\n`,xe="\n\n",we=`\n\n\n\n\n`,ke=new Map([["ExtractFrontmatter",a],["ExtractBibliography",p],["ExtractCitations",w]]),Me=new Map([["HTML",k],["makeStyleTag",R],["OptionalComponents",z],["TOC",O],["Byline",S],["Mathematics",A],["Meta",T],["Typeset",q],["Polyfills",I],["CitationList",P],["Reorder",j]]),Se=new Map([["DistillHeader",F],["DistillAppendix",U],["DistillFooter",Y]]),ze={extractors:ke,transforms:Me,distillTransforms:Se};e.FrontMatter=ne,e.distillify=G,e.render=V,e.testing=ze,e.usesTemplateV2=W,Object.defineProperty(e,"__esModule",{value:!0})}); \ No newline at end of file diff --git a/assets/js/masonry.js b/assets/js/masonry.js index 054f3a08..57fd6fe5 100644 --- a/assets/js/masonry.js +++ b/assets/js/masonry.js @@ -1,12 +1 @@ -$(document).ready(function() { - // Init Masonry - var $grid = $('.grid').masonry({ - gutter: 10, - horizontalOrder: true, - itemSelector: '.grid-item', - }); - // Layout Masonry after each image loads - $grid.imagesLoaded().progress( function() { - $grid.masonry('layout'); - }); -}); +$(document).ready(function(){var r=$(".grid").masonry({gutter:10,horizontalOrder:!0,itemSelector:".grid-item"});r.imagesLoaded().progress(function(){r.masonry("layout")})}); \ No newline at end of file diff --git a/assets/js/theme.js b/assets/js/theme.js index 8cd51510..3eb6d1cb 100644 --- a/assets/js/theme.js +++ b/assets/js/theme.js @@ -1,83 +1 @@ -// Has to be in the head tag, otherwise a flicker effect will occur. - -let toggleTheme = (theme) => { - if (theme == "dark") { - setTheme("light"); - } else { - setTheme("dark"); - } -} - - -let setTheme = (theme) => { - transTheme(); - setHighlight(theme); - setGiscusTheme(theme); - - if (theme) { - document.documentElement.setAttribute("data-theme", theme); - } - else { - document.documentElement.removeAttribute("data-theme"); - } - localStorage.setItem("theme", theme); - - // Updates the background of medium-zoom overlay. - if (typeof medium_zoom !== 'undefined') { - medium_zoom.update({ - background: getComputedStyle(document.documentElement) - .getPropertyValue('--global-bg-color') + 'ee', // + 'ee' for trasparency. - }) - } -}; - - -let setHighlight = (theme) => { - if (theme == "dark") { - document.getElementById("highlight_theme_light").media = "none"; - document.getElementById("highlight_theme_dark").media = ""; - } else { - document.getElementById("highlight_theme_dark").media = "none"; - document.getElementById("highlight_theme_light").media = ""; - } -} - - -let setGiscusTheme = (theme) => { - - function sendMessage(message) { - const iframe = document.querySelector('iframe.giscus-frame'); - if (!iframe) return; - iframe.contentWindow.postMessage({ giscus: message }, 'https://giscus.app'); - } - - sendMessage({ - setConfig: { - theme: theme - } - }); - -} - - -let transTheme = () => { - document.documentElement.classList.add("transition"); - window.setTimeout(() => { - document.documentElement.classList.remove("transition"); - }, 500) -} - - -let initTheme = (theme) => { - if (theme == null || theme == 'null') { - const userPref = window.matchMedia; - if (userPref && userPref('(prefers-color-scheme: dark)').matches) { - theme = 'dark'; - } - } - - setTheme(theme); -} - - -initTheme(localStorage.getItem("theme")); +let toggleTheme=e=>{setTheme("dark"==e?"light":"dark")},setTheme=e=>{transTheme(),setHighlight(e),setGiscusTheme(e),e?document.documentElement.setAttribute("data-theme",e):document.documentElement.removeAttribute("data-theme"),localStorage.setItem("theme",e),"undefined"!=typeof medium_zoom&&medium_zoom.update({background:getComputedStyle(document.documentElement).getPropertyValue("--global-bg-color")+"ee"})},setHighlight=e=>{"dark"==e?(document.getElementById("highlight_theme_light").media="none",document.getElementById("highlight_theme_dark").media=""):(document.getElementById("highlight_theme_dark").media="none",document.getElementById("highlight_theme_light").media="")},setGiscusTheme=e=>{function t(e){const t=document.querySelector("iframe.giscus-frame");t&&t.contentWindow.postMessage({giscus:e},"https://giscus.app")}t({setConfig:{theme:e}})},transTheme=()=>{document.documentElement.classList.add("transition"),window.setTimeout(()=>{document.documentElement.classList.remove("transition")},500)},initTheme=e=>{if(null==e||"null"==e){const t=window.matchMedia;t&&t("(prefers-color-scheme: dark)").matches&&(e="dark")}setTheme(e)};initTheme(localStorage.getItem("theme")); \ No newline at end of file diff --git a/assets/js/zoom.js b/assets/js/zoom.js index c8610d61..2a8bc1fb 100644 --- a/assets/js/zoom.js +++ b/assets/js/zoom.js @@ -1,8 +1 @@ -// Initialize medium zoom. -$(document).ready(function() { - medium_zoom = mediumZoom('[data-zoomable]', { - margin: 100, - background: getComputedStyle(document.documentElement) - .getPropertyValue('--global-bg-color') + 'ee', // + 'ee' for trasparency. - }) -}); +$(document).ready(function(){medium_zoom=mediumZoom("[data-zoomable]",{margin:100,background:getComputedStyle(document.documentElement).getPropertyValue("--global-bg-color")+"ee"})}); \ No newline at end of file diff --git a/bin/cibuild b/bin/cibuild deleted file mode 100755 index d5c9e195..00000000 --- a/bin/cibuild +++ /dev/null @@ -1 +0,0 @@ -bundle exec jekyll build diff --git a/bin/deploy b/bin/deploy deleted file mode 100755 index 396212c8..00000000 --- a/bin/deploy +++ /dev/null @@ -1,116 +0,0 @@ -#!/usr/bin/env bash - -# Run this script to deploy the app to Github Pages - -# Parse cmd arguments - -SRC_BRANCH="source" -DEPLOY_BRANCH="master" - -USAGE_MSG="usage: deploy [-h|--help] [-u|--user] [-s|--src SRC_BRANCH] [-d|--deploy DEPLOY_BRANCH] [--verbose] [--no-push]" - -while [[ $# > 0 ]]; do - key="$1" - - case $key in - -h|--help) - echo $USAGE_MSG - exit 0 - ;; - -u|--user) - ;; - -s|--src) - SRC_BRANCH="$2" - shift - ;; - -d|--deploy) - DEPLOY_BRANCH="$2" - shift - ;; - --verbose) - set -x - ;; - --no-push) - NO_PUSH="--no-push" - ;; - *) - echo "Option $1 is unknown." >&2 - echo $USAGE_MSG >&2 - exit 1 - ;; - esac - shift -done - -# Exit if any subcommand fails -set -e - -echo "Deploying..." -echo "Source branch: $SRC_BRANCH" -echo "Deploy branch: $DEPLOY_BRANCH" - -read -r -p "Do you want to proceed? [y/N] " response -if [[ ! $response =~ ^([yY][eE][sS]|[yY])+$ ]] -then - echo "Aborting." - [[ "$0" = "$BASH_SOURCE" ]] && exit 1 || return 1 -fi - -# Check if there are any uncommitted changes -if ! git diff-index --quiet HEAD --; then - echo "Changes to the following files are uncommitted:" - git diff-index --name-only HEAD -- - echo "Please commit the changes before proceeding." - echo "Aborting." - [[ "$0" = "$BASH_SOURCE" ]] && exit 1 || return 1 -fi - -# Check if there are any untracked files -if ! test -z "$(git ls-files --exclude-standard --others)"; then - echo "There are untracked files:" - git ls-files --exclude-standard --others - echo "Please commit those files or stash them before proceeding." - echo "Aborting." - [[ "$0" = "$BASH_SOURCE" ]] && exit 1 || return 1 -fi - -# Switch to source branch (creates it if necessary from the current branch) -if [ `git branch | grep $SRC_BRANCH | tr ' ' '\n' | tail -1` ] -then - git checkout $SRC_BRANCH -else - git checkout -b $SRC_BRANCH -fi - -# Checkout DEPLOY_BRANCH branch -if [ `git branch | grep $DEPLOY_BRANCH` ] -then - git branch -D $DEPLOY_BRANCH -fi -git checkout -b $DEPLOY_BRANCH - -# Export JEKYLL_ENV=production -export JEKYLL_ENV=production - -# Build site -bundle exec jekyll build - -# Delete and move files -find . -maxdepth 1 ! -name '_site' ! -name '.git' ! -name 'CNAME' ! -name '.gitignore' -exec rm -rf {} \; -mv _site/* . -rm -R _site/ - -# Create `.nojekyll` file (bypass GitHub Pages Jekyll processing) -touch .nojekyll - -# Push to DEPLOY_BRANCH -git add -fA -git commit --allow-empty -m "$(git log -1 --pretty=%B) [ci skip]" -[[ ${NO_PUSH} ]] || git push -f -q origin $DEPLOY_BRANCH - -# Move back to SRC_BRANCH -git checkout $SRC_BRANCH - -echo "Deployed successfully!" - -exit 0 diff --git a/bin/docker_build_image.sh b/bin/docker_build_image.sh deleted file mode 100755 index fe208afb..00000000 --- a/bin/docker_build_image.sh +++ /dev/null @@ -1,5 +0,0 @@ - FILE=Gemfile.lock -if [ -f "$FILE" ]; then - rm $FILE -fi - docker build -t "al-folio:latest" . \ No newline at end of file diff --git a/bin/docker_run.sh b/bin/docker_run.sh deleted file mode 100755 index 9c3d3d8a..00000000 --- a/bin/docker_run.sh +++ /dev/null @@ -1,8 +0,0 @@ -FILE=Gemfile.lock -if [ -f "$FILE" ]; then - rm $FILE -fi -docker run --rm -v "$PWD:/srv/jekyll/" -p "8080:8080" \ - -it al-folio:latest bundler \ - exec jekyll serve --watch --port=8080 --host=0.0.0.0 \ - --verbose --livereload \ No newline at end of file diff --git a/bin/dockerhub_run.sh b/bin/dockerhub_run.sh deleted file mode 100755 index ac6a14e9..00000000 --- a/bin/dockerhub_run.sh +++ /dev/null @@ -1,8 +0,0 @@ -FILE=Gemfile.lock -if [ -f "$FILE" ]; then - rm $FILE -fi -docker run --rm -v "$PWD:/srv/jekyll/" -p "8080:8080" \ - -it amirpourmand/al-folio bundler \ - exec jekyll serve --watch --port=8080 --host=0.0.0.0 \ - --verbose --livereload diff --git a/blog/2023/HTML-to-website/index.html b/blog/2023/HTML-to-website/index.html new file mode 100644 index 00000000..e0782bfe --- /dev/null +++ b/blog/2023/HTML-to-website/index.html @@ -0,0 +1,50 @@ + How to automatically publish the HTML of my contribution to a website? | COMPUTO

      How to automatically publish the HTML of my contribution to a website?

      Some authors reported that their contribution was not published automatically, even when using one of our 3 template repositories and even when the build action was successful. This is basically due to the fact that the gh-pages is not preporly setup.

      We review here the full process for more clarity.

      1. Check that the build action is correctly configured

      If you used one of our template repository, the build action (in .github/workflows/build.yml) should look like this:

      
      +
      1
      +2
      +3
      +4
      +5
      +6
      +7
      +8
      +9
      +10
      +11
      +12
      +13
      +14
      +15
      +16
      +17
      +18
      +19
      +20
      +21
      +22
      +23
      +24
      +
      name: build
      +
      +on:
      +  workflow_dispatch:
      +  push:
      +    branches: main
      +
      +jobs:
      +  build-deploy:
      +    runs-on: ubuntu-latest
      +    permissions:
      +      contents: write
      +    steps:
      +      - name: Check out repository
      +        uses: actions/checkout@v2
      +
      +    [...]
      +
      +      - name: Render and Publish
      +        uses: quarto-dev/quarto-actions/publish@v2
      +        with:
      +          target: gh-pages
      +        env:
      +          GITHUB_TOKEN: $
      +

      The last step named Render and Publish first compiles your notebook and then pushes the HTML and PDF output to a special branch named gh-pages which is preferably used by Github to define a web page associated with the current repository, with the address https://user.github.io/repo_name : this is where your final rendered paper should go. If the build action is successful, you don’t have to worry and you can move on to the next check.

      2. Check that gh-pages is activated on your repos

      By default, the mechanism that checks if a web page should be published in association with your repository is not activated. You need to go to Settings > page and apply the following configuration:

      Once this is done, you may need to trigger the build action for the first successful deployment of your web page.

      3. One last thing

      Don’t forget to include the address of the page where your contribution is published to help the reviewer in the About section of your repository. For example, for the Computo R template, we get :

      \ No newline at end of file diff --git a/blog/2023/data/index.html b/blog/2023/data/index.html new file mode 100644 index 00000000..d84f3ce2 --- /dev/null +++ b/blog/2023/data/index.html @@ -0,0 +1 @@ + I have large or sensible data. How should I proceed? | COMPUTO

      I have large or sensible data. How should I proceed?

      Large data sets

      If your submission materials contain files larger than 50MB, especially data files, they won’t fit on a git repository as is. For this reason, we encourage you to put your data or any materials you deem necessary on an external “open data” centered repository hub such a Zenodo or OSF.

      You could also use any long-term (emphasis on long-term) data repository that is standard in your scientific community (or for a specific type of data/scientific application), and for which it is straight-forward to retrieve the data using a script code/notebook code (we highly encourage to use open platforms, ideally institutionally hosted).

      Sensible data sets

      Since the reproducibility of numerical results is a necessary condition for publication in Computo, your submissions must include all necessary data (e.g. via Zenodo repositories). However, if you have sensible data (for example, biomedical data that needs to be anonymized), you are invited to contact the editorial committee to explain and justify your position. In any case, we will ask you to make public at least a sample of the original data, and a demonstration of its use in your article for Computo. The results of the analyses carried out on the totality of the data should be made available in the form of a binary file, in order to produce the statistical summaries necessary to illustrate your assertions.

      \ No newline at end of file diff --git a/blog/2023/index.html b/blog/2023/index.html new file mode 100644 index 00000000..f37db6d3 --- /dev/null +++ b/blog/2023/index.html @@ -0,0 +1 @@ + 2023 | COMPUTO
      \ No newline at end of file diff --git a/blog/2023/long-running-code/index.html b/blog/2023/long-running-code/index.html new file mode 100644 index 00000000..696eff82 --- /dev/null +++ b/blog/2023/long-running-code/index.html @@ -0,0 +1 @@ + My data analysis takes several hours/days/weeks... How to address the issue of reproducibility? | COMPUTO

      My data analysis takes several hours/days/weeks... How to address the issue of reproducibility?

      If your analyses, model tuning or training phase take a prohibitively long time to compile and integrate, you can include the results of the trained methods in the form of a binary file. However, you must provide the code enabling the user to fully reproduce the training phase, and illustrate your code in a small, toy-sized example.

      \ No newline at end of file diff --git a/blog/2023/others-languages/index.html b/blog/2023/others-languages/index.html new file mode 100644 index 00000000..2305166c --- /dev/null +++ b/blog/2023/others-languages/index.html @@ -0,0 +1 @@ + I use a different language than Python, R or Julia: would Computo accept my contributions? | COMPUTO

      I use a different language than Python, R or Julia: would Computo accept my contributions?

      In principle, we are open to any kind of language.

      In practice, we need to integrate reproducible and compilable code into our quarto template. Natively, we support, R, Python and Julia and provide dedicated templates. For others, if the language is supported by a Jupyter kernel (there are kernels for many languages, quarto allows code execution.

      When writing your contribution though, keep in mind that some languages are not designed for interactivity and that there will be a formatting effort to support your point in your manuscript (which could be as expensive as interfacing this code with Python or R via pybind11, Rcpp or equivalent). It’s your choice.

      From our side, we will do our best for the technical aspects to help with the integration of any language, but the editorial board and reviewers will also do the work to make sure the contribution is within the bounds scientifically and in the spirit of reproducibility.

      \ No newline at end of file diff --git a/blog/2023/what-reproducibility/index.html b/blog/2023/what-reproducibility/index.html new file mode 100644 index 00000000..0091b726 --- /dev/null +++ b/blog/2023/what-reproducibility/index.html @@ -0,0 +1 @@ + What is expected exactly in terms of reproducibility? | COMPUTO

      What is expected exactly in terms of reproducibility?

      Computo is not just about publishing a notebook and proving that it can be compiled with CI! This part of the process is what we call “Editorial Reproducibility”. “Scientific” or “numerical” reproducibility of the analyses is also mandatory, on top of classical peer-review evaluation.

      We don’t ask people reproducing their data… yet! We also don’t ask for “bit-wise computational” reproducibility (i.e. obtaining exactly the same results bit-by-bit) but rather a “statistical” reproducibility, i.e. obtaining results leading to the same conclusion, with potential non-significant statistical variability.

      Reproducible Workflow

      Indeed, the global scientific workflow of a reproducible process for a Computo may be split in two types of steps:

      External
      This part of the process may be conducted outside of the notebook environment, for a list of reasons (non-exclusive to each other):
      • the process is too long to be conducted in a notebook
      • the data to be processed is too big to be handled directly in the notebook
      • it needs a specific environment (e.g. a cluster, with gpus, etc.)
      • it needs to involve specific languages (e.g. C, C++, Fortran, etc.) or build tools (e.g. make, cmake, etc.)

      It is “Computational reproducibility”, where the reproducibility is achieved by providing the code and the environment to run it, but not the results themselves.

      Editorial
      This is where the notebook presents the results of the external process, and where everything is put together to produce the final document, it is “Direct reproducibility” in the sense that the notebook is the only thing needed to reproduce the results.

      Ultimately, the workflow must end with a direct reproducibility step which concludes the whole process.

      When applicable, the switch from external to editorial reproducibility is done with a “data transfer” step, where the data produced by the external process is transferred to the notebook environment. It’s required that not only the intermediate results are provided, but also the code to transfer it in the notebook environment. They are a variety of software solutions to do so.

      Examples of data transfer solutions

      Intermediate results storage

      • in python environment: the joblib.Memory class which provides a caching mechanism for python functions, and can be used to save the results of a function call to disk, and load it back later.
      • in R environment: the .RData file format, which can be loaded back in R with the load() function.

      Transfer of the results to the notebook environment

      • for both aforementioned solutions, the results (.joblib directory or .Rdata file) could be committed to the git repository, and directly loaded in the notebook environment.
      • Another solution is to centralize input data (when large enough) and intermediate results on a shared scientific provider (we recommend Zenodo for this purpose), and download them in the notebook environment.
      \ No newline at end of file diff --git a/blog/index.html b/blog/index.html index 4931d9d2..bd4b5650 100644 --- a/blog/index.html +++ b/blog/index.html @@ -1,100 +1 @@ ---- -layout: default -title: F.A.Q. -pagination: - enabled: true - collection: posts - permalink: /page/:num/ - per_page: 10 - sort_field: date - sort_reverse: true - trail: - before: 1 # The number of links before the current page - after: 3 # The number of links after the current page ---- - -
      - -
      -

      {{ site.blog_name }}

      -

      {{ site.blog_description }}

      -
      - - {% if site.display_tags %} -
      -
        - {% for tag in site.display_tags %} -
      • - {{ tag }} -
      • - {% unless forloop.last %} -

        - {% endunless %} - {% endfor %} -
      -
      - {% endif %} - -
        - {% for post in paginator.posts %} - - {% if post.external_source == blank %} - {% assign read_time = post.content | number_of_words | divided_by: 180 | plus: 1 %} - {% else %} - {% assign read_time = post.feed_content | strip_html | number_of_words | divided_by: 180 | plus: 1 %} - {% endif %} - {% assign year = post.date | date: "%Y" %} - {% assign tags = post.tags | join: "" %} - {% assign categories = post.categories | join: "" %} - -
      • -

        - {% if post.redirect == blank %} - {{ post.title }} - {% else %} - {% if post.redirect contains '://' %} - {{ post.title }} - - - - {% else %} - {{ post.title }} - {% endif %} - {% endif %} -

        -

        {{ post.description }}

        - - -
      • - - {% endfor %} -
      - - {% include pagination.html %} - -
      + FAQ | COMPUTO

      F.A.Q.

      Additional details and support for authors

      \ No newline at end of file diff --git a/blog/tag/code/index.html b/blog/tag/code/index.html new file mode 100644 index 00000000..3f93ba6b --- /dev/null +++ b/blog/tag/code/index.html @@ -0,0 +1 @@ + code | COMPUTO
      \ No newline at end of file diff --git a/blog/tag/reproducibility/index.html b/blog/tag/reproducibility/index.html new file mode 100644 index 00000000..88b34c25 --- /dev/null +++ b/blog/tag/reproducibility/index.html @@ -0,0 +1 @@ + reproducibility | COMPUTO
      \ No newline at end of file diff --git a/board/index.html b/board/index.html new file mode 100644 index 00000000..488afc7b --- /dev/null +++ b/board/index.html @@ -0,0 +1 @@ + Staff | COMPUTO

      Staff

      People making Computo


      Editors

      Technical Support

      \ No newline at end of file diff --git a/feed.xml b/feed.xml new file mode 100644 index 00000000..cd9658aa --- /dev/null +++ b/feed.xml @@ -0,0 +1,49 @@ +Jekyll2024-07-15T11:43:58+00:00https://computorg.github.io/feed.xmlCOMPUTOA Journal of the French Statistical Society to promote reproducible Science What is expected exactly in terms of reproducibility?2023-07-04T00:00:00+00:002023-07-04T00:00:00+00:00https://computorg.github.io/blog/2023/what-reproducibilityComputo is not just about publishing a notebook and proving that it can be compiled with CI! This part of the process is what we call “Editorial Reproducibility”. “Scientific” or “numerical” reproducibility of the analyses is also mandatory, on top of classical peer-review evaluation.

      We don’t ask people reproducing their data… yet! We also don’t ask for “bit-wise computational” reproducibility (i.e. obtaining exactly the same results bit-by-bit) but rather a “statistical” reproducibility, i.e. obtaining results leading to the same conclusion, with potential non-significant statistical variability.

      Reproducible Workflow

      Indeed, the global scientific workflow of a reproducible process for a Computo may be split in two types of steps:

      External
      This part of the process may be conducted outside of the notebook environment, for a list of reasons (non-exclusive to each other):
      • the process is too long to be conducted in a notebook
      • the data to be processed is too big to be handled directly in the notebook
      • it needs a specific environment (e.g. a cluster, with gpus, etc.)
      • it needs to involve specific languages (e.g. C, C++, Fortran, etc.) or build tools (e.g. make, cmake, etc.)

      It is “Computational reproducibility”, where the reproducibility is achieved by providing the code and the environment to run it, but not the results themselves.

      Editorial
      This is where the notebook presents the results of the external process, and where everything is put together to produce the final document, it is “Direct reproducibility” in the sense that the notebook is the only thing needed to reproduce the results.

      Ultimately, the workflow must end with a direct reproducibility step which concludes the whole process.

      When applicable, the switch from external to editorial reproducibility is done with a “data transfer” step, where the data produced by the external process is transferred to the notebook environment. It’s required that not only the intermediate results are provided, but also the code to transfer it in the notebook environment. They are a variety of software solutions to do so.

      Examples of data transfer solutions

      Intermediate results storage

      • in python environment: the joblib.Memory class which provides a caching mechanism for python functions, and can be used to save the results of a function call to disk, and load it back later.
      • in R environment: the .RData file format, which can be loaded back in R with the load() function.

      Transfer of the results to the notebook environment

      • for both aforementioned solutions, the results (.joblib directory or .Rdata file) could be committed to the git repository, and directly loaded in the notebook environment.
      • Another solution is to centralize input data (when large enough) and intermediate results on a shared scientific provider (we recommend Zenodo for this purpose), and download them in the notebook environment.
      ]]>
      I have large or sensible data. How should I proceed?2023-06-21T00:00:00+00:002023-06-21T00:00:00+00:00https://computorg.github.io/blog/2023/dataLarge data sets

      If your submission materials contain files larger than 50MB, especially data files, they won’t fit on a git repository as is. For this reason, we encourage you to put your data or any materials you deem necessary on an external “open data” centered repository hub such a Zenodo or OSF.

      You could also use any long-term (emphasis on long-term) data repository that is standard in your scientific community (or for a specific type of data/scientific application), and for which it is straight-forward to retrieve the data using a script code/notebook code (we highly encourage to use open platforms, ideally institutionally hosted).

      Sensible data sets

      Since the reproducibility of numerical results is a necessary condition for publication in Computo, your submissions must include all necessary data (e.g. via Zenodo repositories). However, if you have sensible data (for example, biomedical data that needs to be anonymized), you are invited to contact the editorial committee to explain and justify your position. In any case, we will ask you to make public at least a sample of the original data, and a demonstration of its use in your article for Computo. The results of the analyses carried out on the totality of the data should be made available in the form of a binary file, in order to produce the statistical summaries necessary to illustrate your assertions.

      ]]>
      My data analysis takes several hours/days/weeks… How to address the issue of reproducibility?2023-06-21T00:00:00+00:002023-06-21T00:00:00+00:00https://computorg.github.io/blog/2023/long-running-codeIf your analyses, model tuning or training phase take a prohibitively long time to compile and integrate, you can include the results of the trained methods in the form of a binary file. However, you must provide the code enabling the user to fully reproduce the training phase, and illustrate your code in a small, toy-sized example.

      ]]>
      I use a different language than Python, R or Julia: would Computo accept my contributions?2023-03-24T00:00:00+00:002023-03-24T00:00:00+00:00https://computorg.github.io/blog/2023/others-languagesIn principle, we are open to any kind of language.

      In practice, we need to integrate reproducible and compilable code into our quarto template. Natively, we support, R, Python and Julia and provide dedicated templates. For others, if the language is supported by a Jupyter kernel (there are kernels for many languages, quarto allows code execution.

      When writing your contribution though, keep in mind that some languages are not designed for interactivity and that there will be a formatting effort to support your point in your manuscript (which could be as expensive as interfacing this code with Python or R via pybind11, Rcpp or equivalent). It’s your choice.

      From our side, we will do our best for the technical aspects to help with the integration of any language, but the editorial board and reviewers will also do the work to make sure the contribution is within the bounds scientifically and in the spirit of reproducibility.

      ]]>
      How to automatically publish the HTML of my contribution to a website?2023-03-17T00:00:00+00:002023-03-17T00:00:00+00:00https://computorg.github.io/blog/2023/HTML-to-websiteSome authors reported that their contribution was not published automatically, even when using one of our 3 template repositories and even when the build action was successful. This is basically due to the fact that the gh-pages is not preporly setup.

      We review here the full process for more clarity.

      1. Check that the build action is correctly configured

      If you used one of our template repository, the build action (in .github/workflows/build.yml) should look like this:

      1
      +2
      +3
      +4
      +5
      +6
      +7
      +8
      +9
      +10
      +11
      +12
      +13
      +14
      +15
      +16
      +17
      +18
      +19
      +20
      +21
      +22
      +23
      +24
      +
      name: build
      +
      +on:
      +  workflow_dispatch:
      +  push:
      +    branches: main
      +
      +jobs:
      +  build-deploy:
      +    runs-on: ubuntu-latest
      +    permissions:
      +      contents: write
      +    steps:
      +      - name: Check out repository
      +        uses: actions/checkout@v2
      +
      +    [...]
      +
      +      - name: Render and Publish
      +        uses: quarto-dev/quarto-actions/publish@v2
      +        with:
      +          target: gh-pages
      +        env:
      +          GITHUB_TOKEN: $
      +

      The last step named Render and Publish first compiles your notebook and then pushes the HTML and PDF output to a special branch named gh-pages which is preferably used by Github to define a web page associated with the current repository, with the address https://user.github.io/repo_name : this is where your final rendered paper should go. If the build action is successful, you don’t have to worry and you can move on to the next check.

      2. Check that gh-pages is activated on your repos

      By default, the mechanism that checks if a web page should be published in association with your repository is not activated. You need to go to Settings > page and apply the following configuration:

      Once this is done, you may need to trigger the build action for the first successful deployment of your web page.

      3. One last thing

      Don’t forget to include the address of the page where your contribution is published to help the reviewer in the About section of your repository. For example, for the Computo R template, we get :

      ]]>
      \ No newline at end of file diff --git a/index.html b/index.html new file mode 100644 index 00000000..149ae362 --- /dev/null +++ b/index.html @@ -0,0 +1 @@ + COMPUTO
      Computo

      COMPUTO

      A journal of the French Statistical Society SFdS - ISSN 2824-7795

      This journal aims at promoting computational/algorithmic contributions in statistics and machine learning that provide insight into which models or methods are more appropriate to address a specific scientific question. In order to achieve this goal, Computo goes beyond classical static publications by leveraging technical advances in literate programming and scientific reporting.

      More details about our philosophy.

      news

      May 15, 2024 A new article was published, by Tanguy Lefort, Benjamin Charlier, Alexis Joly, Joseph Salmon: Peerannot: classification for crowdsourced image datasets with Python
      Apr 4, 2024 A new article was published, by Maxime El Masri, Jérôme Morio, and Florian Simatos: Optimal Projection for Parametric Importance Sampling in High Dimensions
      Feb 26, 2024 A new article was published, by Hamza Adrat and Laurent Decreusefond: Point Process Discrimination According to Repulsion.
      Jan 9, 2024 Paper published by Armand Favrot and David Makowski, on MCMC estimation in a hierarchical model to evaluate pest treatments from prevalence and intensity data.
      Dec 14, 2023 Paper published by Alice Cleynen, Louis Raynal, and Jean-Michel Marin, on local tree methods for classification.
      \ No newline at end of file diff --git a/news/announcement_2/index.html b/news/announcement_2/index.html new file mode 100644 index 00000000..0cbd983b --- /dev/null +++ b/news/announcement_2/index.html @@ -0,0 +1 @@ + A long announcement with details | COMPUTO

      A long announcement with details

      Announcements and news can be much longer than just quick inline posts. In fact, they can have all the features available for the standard blog posts. See below.


      Jean shorts raw denim Vice normcore, art party High Life PBR skateboard stumptown vinyl kitsch. Four loko meh 8-bit, tousled banh mi tilde forage Schlitz dreamcatcher twee 3 wolf moon. Chambray asymmetrical paleo salvia, sartorial umami four loko master cleanse drinking vinegar brunch. Pinterest DIY authentic Schlitz, hoodie Intelligentsia butcher trust fund brunch shabby chic Kickstarter forage flexitarian. Direct trade cold-pressed meggings stumptown plaid, pop-up taxidermy. Hoodie XOXO fingerstache scenester Echo Park. Plaid ugh Wes Anderson, freegan pug selvage fanny pack leggings pickled food truck DIY irony Banksy.

      Hipster list

      • brunch
      • fixie
      • raybans
      • messenger bag

      Hoodie Thundercats retro, tote bag 8-bit Godard craft beer gastropub. Truffaut Tumblr taxidermy, raw denim Kickstarter sartorial dreamcatcher. Quinoa chambray slow-carb salvia readymade, bicycle rights 90’s yr typewriter selfies letterpress cardigan vegan.


      Pug heirloom High Life vinyl swag, single-origin coffee four dollar toast taxidermy reprehenderit fap distillery master cleanse locavore. Est anim sapiente leggings Brooklyn ea. Thundercats locavore excepteur veniam eiusmod. Raw denim Truffaut Schlitz, migas sapiente Portland VHS twee Bushwick Marfa typewriter retro id keytar.

      We do not grow absolutely, chronologically. We grow sometimes in one dimension, and not in another, unevenly. We grow partially. We are relative. We are mature in one realm, childish in another. —Anais Nin

      Fap aliqua qui, scenester pug Echo Park polaroid irony shabby chic ex cardigan church-key Odd Future accusamus. Blog stumptown sartorial squid, gastropub duis aesthetic Truffaut vero. Pinterest tilde twee, odio mumblecore jean shorts lumbersexual.

      \ No newline at end of file diff --git "a/news/announcement_first_publ\303\256shed_paper/index.html" "b/news/announcement_first_publ\303\256shed_paper/index.html" new file mode 100644 index 00000000..5366251b --- /dev/null +++ "b/news/announcement_first_publ\303\256shed_paper/index.html" @@ -0,0 +1 @@ + Announcement_first_publîshed_paper | COMPUTO

      Announcement_first_publîshed_paper

      \ No newline at end of file diff --git a/news/announcement_open/index.html b/news/announcement_open/index.html new file mode 100644 index 00000000..23ee4388 --- /dev/null +++ b/news/announcement_open/index.html @@ -0,0 +1 @@ + Announcement_open | COMPUTO

      Announcement_open

      \ No newline at end of file diff --git a/news/announcement_publication_202301/index.html b/news/announcement_publication_202301/index.html new file mode 100644 index 00000000..f49b61e0 --- /dev/null +++ b/news/announcement_publication_202301/index.html @@ -0,0 +1 @@ + Announcement_publication_202301 | COMPUTO

      Announcement_publication_202301

      \ No newline at end of file diff --git a/news/announcement_publication_202302/index.html b/news/announcement_publication_202302/index.html new file mode 100644 index 00000000..e6536dd8 --- /dev/null +++ b/news/announcement_publication_202302/index.html @@ -0,0 +1 @@ + Announcement_publication_202302 | COMPUTO

      Announcement_publication_202302

      \ No newline at end of file diff --git a/news/announcement_publication_202307/index.html b/news/announcement_publication_202307/index.html new file mode 100644 index 00000000..3b2b1e66 --- /dev/null +++ b/news/announcement_publication_202307/index.html @@ -0,0 +1 @@ + Announcement_publication_202307 | COMPUTO

      Announcement_publication_202307

      \ No newline at end of file diff --git a/news/announcement_publication_202311/index.html b/news/announcement_publication_202311/index.html new file mode 100644 index 00000000..7db489e8 --- /dev/null +++ b/news/announcement_publication_202311/index.html @@ -0,0 +1 @@ + Announcement_publication_202311 | COMPUTO

      Announcement_publication_202311

      \ No newline at end of file diff --git a/news/announcement_publication_202312/index.html b/news/announcement_publication_202312/index.html new file mode 100644 index 00000000..edcc87ee --- /dev/null +++ b/news/announcement_publication_202312/index.html @@ -0,0 +1 @@ + Announcement_publication_202312 | COMPUTO

      Announcement_publication_202312

      \ No newline at end of file diff --git a/news/announcement_publication_202401/index.html b/news/announcement_publication_202401/index.html new file mode 100644 index 00000000..296c8392 --- /dev/null +++ b/news/announcement_publication_202401/index.html @@ -0,0 +1 @@ + Announcement_publication_202401 | COMPUTO

      Announcement_publication_202401

      \ No newline at end of file diff --git a/news/announcement_publication_202402/index.html b/news/announcement_publication_202402/index.html new file mode 100644 index 00000000..1c75e7ec --- /dev/null +++ b/news/announcement_publication_202402/index.html @@ -0,0 +1 @@ + Announcement_publication_202402 | COMPUTO

      Announcement_publication_202402

      \ No newline at end of file diff --git a/news/announcement_publication_202403/index.html b/news/announcement_publication_202403/index.html new file mode 100644 index 00000000..7ced91d5 --- /dev/null +++ b/news/announcement_publication_202403/index.html @@ -0,0 +1 @@ + Announcement_publication_202403 | COMPUTO

      Announcement_publication_202403

      \ No newline at end of file diff --git a/news/announcement_publication_202404/index.html b/news/announcement_publication_202404/index.html new file mode 100644 index 00000000..edafb76b --- /dev/null +++ b/news/announcement_publication_202404/index.html @@ -0,0 +1 @@ + Announcement_publication_202404 | COMPUTO

      Announcement_publication_202404

      \ No newline at end of file diff --git a/news/announcement_start/index.html b/news/announcement_start/index.html new file mode 100644 index 00000000..604274bc --- /dev/null +++ b/news/announcement_start/index.html @@ -0,0 +1 @@ + Announcement_start | COMPUTO

      Announcement_start

      New version of the website relying on Jekyll, Jekyll-scholar, aI-folio emoji! :sparkles:

      \ No newline at end of file diff --git a/news/extended_team/index.html b/news/extended_team/index.html new file mode 100644 index 00000000..523b4bd6 --- /dev/null +++ b/news/extended_team/index.html @@ -0,0 +1 @@ + Extended_team | COMPUTO

      Extended_team

      \ No newline at end of file diff --git a/news/extended_team_mp/index.html b/news/extended_team_mp/index.html new file mode 100644 index 00000000..23f4563c --- /dev/null +++ b/news/extended_team_mp/index.html @@ -0,0 +1 @@ + Extended_team_mp | COMPUTO

      Extended_team_mp

      \ No newline at end of file diff --git a/news/how_doesit_work/index.html b/news/how_doesit_work/index.html new file mode 100644 index 00000000..24364e6c --- /dev/null +++ b/news/how_doesit_work/index.html @@ -0,0 +1 @@ + How_doesit_work | COMPUTO
      \ No newline at end of file diff --git a/news/moving_openreview/index.html b/news/moving_openreview/index.html new file mode 100644 index 00000000..63309744 --- /dev/null +++ b/news/moving_openreview/index.html @@ -0,0 +1 @@ + Moving_openreview | COMPUTO

      Moving_openreview

      We’re changing our peer-review platform 📰 to a fully free, open and communty-based solution with OpenReview. Don’t hesitate to send us feedback or contact us if you have any questions.

      \ No newline at end of file diff --git a/news/new_templates/index.html b/news/new_templates/index.html new file mode 100644 index 00000000..615a1bdb --- /dev/null +++ b/news/new_templates/index.html @@ -0,0 +1 @@ + New_templates | COMPUTO

      New_templates

      \ No newline at end of file diff --git a/news/sfds_2022/index.html b/news/sfds_2022/index.html new file mode 100644 index 00000000..7e71b3d5 --- /dev/null +++ b/news/sfds_2022/index.html @@ -0,0 +1 @@ + Sfds_2022 | COMPUTO

      Sfds_2022

      \ No newline at end of file diff --git a/news/toronto_workshop_reproducibility/index.html b/news/toronto_workshop_reproducibility/index.html new file mode 100644 index 00000000..b076fbdf --- /dev/null +++ b/news/toronto_workshop_reproducibility/index.html @@ -0,0 +1 @@ + Toronto_workshop_reproducibility | COMPUTO

      Toronto_workshop_reproducibility

      \ No newline at end of file diff --git a/news/workshop_reproducibility/index.html b/news/workshop_reproducibility/index.html new file mode 100644 index 00000000..4d24beac --- /dev/null +++ b/news/workshop_reproducibility/index.html @@ -0,0 +1 @@ + Workshop_reproducibility | COMPUTO

      Workshop_reproducibility

      \ No newline at end of file diff --git a/publications/index.html b/publications/index.html new file mode 100644 index 00000000..f9197513 --- /dev/null +++ b/publications/index.html @@ -0,0 +1 @@ + Articles | COMPUTO

      Articles

      Publications by years in reversed chronological order

      Published

      2024

      1. Peerannot: classification for crowdsourced image datasets with Python
        Tanguy Lefort, Benjamin Charlier, Alexis Joly, and Joseph Salmon
        Computo, 2024.
      2. Optimal projection for parametric importance sampling in high dimensions
        Maxime El Masri, Jérôme Morio, and Florian Simatos
        Computo, 2024.
      3. Point Process Discrimination According to Repulsion
        Hamza Adrat, and Laurent Decreusefond
        Computo, 2024.
      4. A hierarchical model to evaluate pest treatments from prevalence and intensity data
        Armand Favrot, and David Makoswki
        Computo, 2024.

      2023

      1. Local tree methods for classification: a review and some dead ends
        Alice Cleynen, Louis Raynal, and Jean-Michel Marin
        Computo, 2023.
      2. Computing an empirical Fisher information matrix estimate in latent variable models through stochastic approximation
        Maud Delattre, and Estelle Kuhn
        Computo, 2023.
      3. Inference of Multiscale Gaussian Graphical Model
        Edmond Sanou, Christophe Ambroise, and Geneviève Robin
        Computo, 2023.
      4. Macrolitter Video Counting on Riverbanks Using State Space Models and Moving Cameras
        Mathis Chagneux, Sylvain Le Corff, Pierre Gloaguen, Charles Ollion, Océane Lepâtre, and Antoine Bruge
        Computo, 2023.
      5. A Python Package for Sampling from Copulae: clayton
        Alexis Boulin
        Computo, 2023.

      2022

      1. Trade-off between deep learning for species identification and inference about predator-prey co-occurrence: Reproducible R workflow integrating models in computer vision and ecological statistics
        Olivier Gimenez, Maelis Kervellec, Jean-Baptiste Fanjul, Anna Chaine, Lucile Marescot, Yoann Bollet, and Christophe Duchamp
        Computo, 2022.

      In the pipeline

      Manuscript conditionally accepted, whose editorial and scientific reproducibility is being validated

      1. AdaptiveConformal: An R Package for Adaptive Conformal Inference
        Herbert Susmann, Antoine Chambaz, and Julie Josse
        Computo, 2024.
      2. Geometric-Based Pruning Rules for Change Point Detection in Multiple Independent Time Series
        Liudmila Pishchagina, Guillem Rigaill, and Vincent Runge
        Computo, 2024.
      3. Bayesian Spatiotemporal Modelling of Wildfire Occurrences and Sizes for Projections Under Climate Change
        Juliette Legrand, François Pimont, Jean-Luc Dupuy, and Thomas Opitz
        Computo, 2024.

      Example: a mock contribution

      This page is a reworking of the original t-SNE article using the Computo template. It aims to help authors submitting to the journal by using some advanced formatting features.

      1. Visualizing Data using t-SNE: practical Computo example
        Laurens Maaten, and Geoffrey Hinton
        Computo, 2021.
      \ No newline at end of file diff --git a/repos/index.html b/repos/index.html new file mode 100644 index 00000000..f3d21b8a --- /dev/null +++ b/repos/index.html @@ -0,0 +1 @@ + Repositories | COMPUTO

      Repositories

      Check our pinned repositories for our quarto extension, some templates for authors and an advanced mock contribution.

      \ No newline at end of file diff --git a/review/index.html b/review/index.html new file mode 100644 index 00000000..2380620d --- /dev/null +++ b/review/index.html @@ -0,0 +1 @@ + Review | COMPUTO

      Review

      Details on Computo's submission process

      Overview

      Computo relies on Open Review for the review process. The review form is text-based, but Markdown and LaTeX formatting is supported so you can add hyperlinks and use LaTeX to add equations to your review. Reviewers are also required to answer a handful of rating scale questions about the submission.

      Once a manuscript is accepted, reviews and discussion will be made available on the Computo website. Reviewers can choose to remain anonymous or not.

      Guidelines for evaluation

      In order to help you in performing your review we provide a list of the main questions we are trying to answer when evaluating a submission:

      1. Is the paper within the scope of Computo?

        See Aims and Scope of Computo.

      2. Is the paper clearly written?

        Computo is intended for computational scientists in statistics/machine learning. The Abstract and Introduction should be as nontechnical as possible, and provide a clear description of the contributions of the paper. Strength and limitations of the work should be adequately discussed, in particular in relation to related work. Graphs and tables should be well thought out and uncluttered.

      3. Is the paper correct?

        Mathematical and algorithmic validity are the authors’ professional responsibility. Referees can spot errors of reasoning, but are not expected to perform line-by-line checks of technical results.

      4. Is the paper adequately evaluated?

        Are all claims clearly articulated and supported either by empirical experiments or theoretical analyses? If appropriate, have the authors implemented their work and demonstrated its utility on a significant problem?

      5. Is the paper reproducible?

        The reproducibility of numerical results is a necessary condition for publication in Computo. The referees are expected to check whether they can run the code provided by the authors to reproduce their results. In case of major reproducibility issues, the referees should warn the Associate Editor as soon as possible.

      Plagiarism policy

      Computo abides by the Committee on Publishing Ethics’s (COPE) guidelines listed below on plagiarism:

      \ No newline at end of file diff --git a/robots.txt b/robots.txt index a450fbe2..c198e07c 100644 --- a/robots.txt +++ b/robots.txt @@ -1,7 +1,4 @@ ---- -permalink: /robots.txt ---- User-agent: * Disallow: -Sitemap: {{ site.baseurl | prepend: site.url }}/sitemap.xml +Sitemap: https://computorg.github.io/sitemap.xml diff --git a/sitemap.xml b/sitemap.xml new file mode 100644 index 00000000..e25a6b24 --- /dev/null +++ b/sitemap.xml @@ -0,0 +1 @@ + https://computorg.github.io/news/announcement_2/ 2015-11-07T20:11:00+00:00 https://computorg.github.io/news/announcement_start/ 2021-03-11T11:59:00+00:00 https://computorg.github.io/news/how_doesit_work/ 2021-05-25T11:59:00+00:00 https://computorg.github.io/news/workshop_reproducibility/ 2021-06-23T11:59:00+00:00 https://computorg.github.io/news/announcement_open/ 2021-10-28T11:59:00+00:00 https://computorg.github.io/news/toronto_workshop_reproducibility/ 2022-02-24T11:59:00+00:00 https://computorg.github.io/news/announcement_first_publ%C3%AEshed_paper/ 2022-04-03T11:59:00+00:00 https://computorg.github.io/news/sfds_2022/ 2022-06-14T11:59:00+00:00 https://computorg.github.io/news/extended_team/ 2022-07-01T11:59:00+00:00 https://computorg.github.io/news/announcement_publication_202301/ 2023-01-11T11:59:00+00:00 https://computorg.github.io/news/new_templates/ 2023-02-08T11:59:00+00:00 https://computorg.github.io/news/announcement_publication_202302/ 2023-02-16T11:59:00+00:00 https://computorg.github.io/news/extended_team_mp/ 2023-06-21T11:59:00+00:00 https://computorg.github.io/news/moving_openreview/ 2023-06-21T11:59:00+00:00 https://computorg.github.io/news/announcement_publication_202307/ 2023-07-11T11:59:00+00:00 https://computorg.github.io/news/announcement_publication_202311/ 2023-11-21T11:59:00+00:00 https://computorg.github.io/news/announcement_publication_202312/ 2023-12-14T11:59:00+00:00 https://computorg.github.io/news/announcement_publication_202401/ 2024-01-09T11:59:00+00:00 https://computorg.github.io/news/announcement_publication_202402/ 2024-02-26T11:59:00+00:00 https://computorg.github.io/news/announcement_publication_202403/ 2024-04-04T11:59:00+00:00 https://computorg.github.io/news/announcement_publication_202404/ 2024-05-15T11:59:00+00:00 https://computorg.github.io/blog/2023/HTML-to-website/ 2023-03-17T00:00:00+00:00 https://computorg.github.io/blog/2023/others-languages/ 2023-03-24T00:00:00+00:00 https://computorg.github.io/blog/2023/data/ 2023-06-21T00:00:00+00:00 https://computorg.github.io/blog/2023/long-running-code/ 2023-06-21T00:00:00+00:00 https://computorg.github.io/blog/2023/what-reproducibility/ 2023-07-04T00:00:00+00:00 https://computorg.github.io/about https://computorg.github.io/board/ https://computorg.github.io/ https://computorg.github.io/publications/ https://computorg.github.io/repos/ https://computorg.github.io/review/ https://computorg.github.io/submit/ https://computorg.github.io/blog/tag/reproducibility/ https://computorg.github.io/blog/tag/code/ https://computorg.github.io/blog/2023/ \ No newline at end of file diff --git a/submit/index.html b/submit/index.html new file mode 100644 index 00000000..45d65f08 --- /dev/null +++ b/submit/index.html @@ -0,0 +1 @@ + Submit | COMPUTO

      Submit

      Overview and general guidelines to submit a contribution to Computo


      Overview

      Submissions to Computo require both scientific content (typically equations, codes and figures, data) and a proof that this content is reproducible. This is achieved by means of i) a notebook system, ii) a virtual environment fixing the dependencies and iii) continuous integration (plus, if needed, an external website to store data files such as Zenodo or OSF ).

      A Computo submission is thus a git repository (e.g. Github or Gitlab) typically containing

      • the source file of the notebook (a markdown file with yaml metadata)
      • auxiliary files: a \(\mathrm{bib}\TeX\) file and some statics files, e.g. figures or small .csv data tables
      • configuration files to set up the dependencies in a virtual environment
      • configuration files to set up the continuous integration rendering the final documents

      The compiled notebook (both HTML and PDF) will be directly generated in the git(hub) repository via continuous integration (e.g., Github action or Gitlab CI) and published, if the action is successful, to a web page (e.g. gh-page).

      The PDF and the git repository address are then submitted via OpenReview.

      Available templates for R, Python and Julia

      Warning!

      To start writing your own contribution, do not start from scratch!! Please use one of our quarto-based templates below to ensure reproducibility. quarto supports R, Python and Julia.

      To get started, click “[GIT REPO]” for the language of your choice and follow the corresponding “Step-by-step procedure”. These templates serve both as material for starting to write your submission, and as a documentation for doing so.

      1. Computo Template for R users
        Computo editorial board
        Computo, 2022.
      2. Computo Template for Python users
        Computo editorial board
        Computo, 2022.
      3. Computo Template for Julia users
        Computo editorial board
        Computo, 2022.

      Submit your work

      Once your are happy with your notebook AND the continuous integration (Github action or Gitlab CI) is successful, you must submit your PDF and the url of your git repository via OpenReview, our platform for peer-reviewing.

      Reviewing and publication

      Submitted papers are reviewed by external reviewers selected by the Associate Editor in charge of the paper. Computo strives for fast reviewing cycles, but cannot provide strict guarantees on the matter; the current time between submission and publication is under six months.

      In order to ensure an efficient reviewing process, authors are requested upon submission to suggest the names of four potential referees. To avoid conflicts of interests, recent co-authors or collaborators should not be suggested.

      Computo’s accepted papers are published electronically immediately upon receipt under CC BY 4.0 license. Authors retain the copyright and full publishing rights without restrictions.

      More information about the reviewing process are available on the Review page

      Computo’s code of ethics for authors

      • Originality: Authors guarantee that their proposed article is original, and that it infringes no moral intellectual property right of any other person or entity. Authors guarantee that their proposed article has not been published previously, and that they have not submitted the proposed article simultaneously to any other journal.
      • Conflicts of interest: Authors shall disclose any potential conflict of interest, whether it is professional, financial or other, to the journal’s Editor, if this conflict could be interpreted as having influenced their work. Authors shall declare all sources of funding for the research presented in the article.
      • Impartiality: All articles are examined impartially, and their merits are assessed regardless of the sex, religion, sexual orientation, nationality, ethnic origin, length of service or institutional affiliation of the author(s).
      • Funding: All funding received by the author(s) shall be clearly stated in the article(s).
      • Defamatory statements: Authors guarantee that their proposed article contains no matter of a defamatory, hateful, fraudulent or knowingly inexact character.
      • References: Authors guarantee that all the publications used in their work have been cited appropriately.
      • Copyright/author’s right/license compliance: Authors guarantee that they comply with the usage license of any third party contents/works (code, software, data, figures/images, documents, etc.) that were used to produce their work.
      \ No newline at end of file